//branches/tracing/contrib/toolchain/toolchain.ppc32.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.2" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
//branches/tracing/contrib/toolchain/toolchain.amd64.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.2" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
//branches/tracing/contrib/toolchain/toolchain.ppc64.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.1" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
//branches/tracing/contrib/toolchain/toolchain.ia32.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.2" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
//branches/tracing/contrib/toolchain/toolchain.mipsel32.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.1" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
//branches/tracing/contrib/toolchain/toolchain.sparc64.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.1" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
//branches/tracing/contrib/toolchain/toolchain.ia64.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.2" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
34,7 → 34,6 |
WORKDIR=`pwd` |
TARGET="${PLATFORM}-pc-linux-gnu" |
PREFIX="${CROSS_PREFIX}/${PLATFORM}" |
INCLUDESDIR="${WORKDIR}/include" |
BINUTILSDIR="${WORKDIR}/binutils-${BINUTILS_VERSION}" |
GCCDIR="${WORKDIR}/gcc-${GCC_VERSION}" |
OBJDIR="${WORKDIR}/gcc-obj" |
//branches/tracing/contrib/toolchain/toolchain.arm32.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.2" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
//branches/tracing/contrib/toolchain/toolchain.mipseb32.sh |
---|
19,8 → 19,8 |
CROSS_PREFIX="/usr/local" |
fi |
BINUTILS_VERSION="2.18" |
GCC_VERSION="4.3.1" |
BINUTILS_VERSION="2.19.1" |
GCC_VERSION="4.3.3" |
BINUTILS="binutils-${BINUTILS_VERSION}.tar.gz" |
GCC_CORE="gcc-core-${GCC_VERSION}.tar.bz2" |
32,7 → 32,7 |
PLATFORM="mips" |
WORKDIR=`pwd` |
TARGET="${PLATFORM}-sgi-irix5" |
TARGET="${PLATFORM}-linux-gnu" |
PREFIX="${CROSS_PREFIX}/${PLATFORM}" |
BINUTILSDIR="${WORKDIR}/binutils-${BINUTILS_VERSION}" |
GCCDIR="${WORKDIR}/gcc-${GCC_VERSION}" |
//branches/tracing/contrib/conf/gxemul.sh |
---|
File deleted |
Property changes: |
Deleted: svn:executable |
-* |
\ No newline at end of property |
//branches/tracing/contrib/conf/mips32-gx.sh |
---|
0,0 → 1,3 |
#!/bin/sh |
gxemul $@ -E testmips -C R4000 -X image.boot |
//branches/tracing/contrib/conf/ppc32-qe.sh |
---|
0,0 → 1,3 |
#!/bin/sh |
qemu-system-ppc -M mac99 -boot d -cdrom image.iso |
//branches/tracing/contrib/conf/msim.conf |
---|
3,6 → 3,7 |
# |
add dcpu cpu0 |
add dcpu cpu1 |
add rwm mainmem 0x00000000 |
mainmem generic 16M |
10,7 → 11,7 |
add rom bootmem 0x1fc00000 |
bootmem generic 4096k |
bootmem load "image.boot" |
bootmem load "image.boot" |
add dprinter printer 0x10000000 |
add dkeyboard keyboard 0x10000000 2 |
//branches/tracing/contrib/conf/arm32-gx.sh |
---|
0,0 → 1,3 |
#!/bin/sh |
gxemul $@ -E testarm -X image.boot |
//branches/tracing/contrib/conf/pearpc.conf |
---|
1,7 → 1,7 |
ppc_start_resolution = "800x600x32" |
pci_ide0_master_installed = 0 |
prom_bootmethod = "force" |
prom_loadfile = "image.boot" |
pci_ide0_master_installed = 1 |
pci_ide0_master_image = "image.iso" |
pci_ide0_master_type = "cdrom" |
key_toggle_mouse_grab = "F11" |
//branches/tracing/contrib/font/u_vga16.bdf |
---|
0,0 → 1,66709 |
STARTFONT 2.1 |
FONT -Bolkhov-VGA-Medium-R-Normal--16-160-75-75-C-80-iso10646-1 |
SIZE 16 75 75 |
FONTBOUNDINGBOX 8 16 0 -4 |
STARTPROPERTIES 24 |
FOUNDRY "Bolkhov" |
FAMILY_NAME "VGA" |
WEIGHT_NAME "Medium" |
SLANT "R" |
SETWIDTH_NAME "Normal" |
ADD_STYLE_NAME "" |
PIXEL_SIZE 16 |
POINT_SIZE 160 |
RESOLUTION_X 75 |
RESOLUTION_Y 75 |
SPACING "C" |
AVERAGE_WIDTH 80 |
CHARSET_REGISTRY "iso10646" |
CHARSET_ENCODING "1" |
CAP_HEIGHT 10 |
X_HEIGHT 7 |
FONT_ASCENT 12 |
FONT_DESCENT 4 |
FACE_NAME "VGA Unicode" |
COPYRIGHT "Copyright (c) 2000 Dmitry Bolkhovityanov, bolkhov@inp.nsk.su" |
HOMEPAGE "http://www.inp.nsk.su/~bolkhov/files/fonts/univga/" |
NOTICE "VGA is a trademark of IBM Corporation." |
DEFAULT_CHAR 0 |
_XMBDFED_INFO "Edited with xmbdfed 4.4." |
ENDPROPERTIES |
CHARS 2899 |
STARTCHAR char0 |
ENCODING 0 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DA |
02 |
80 |
82 |
02 |
80 |
82 |
02 |
80 |
B6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR space |
ENCODING 32 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR exclam |
ENCODING 33 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
3C |
3C |
18 |
18 |
18 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR quotedbl |
ENCODING 34 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
66 |
66 |
66 |
24 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR numbersign |
ENCODING 35 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
6C |
6C |
FE |
6C |
6C |
6C |
FE |
6C |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dollar |
ENCODING 36 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
7C |
C6 |
C2 |
C0 |
7C |
06 |
06 |
86 |
C6 |
7C |
18 |
18 |
00 |
00 |
ENDCHAR |
STARTCHAR percent |
ENCODING 37 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C2 |
C6 |
0C |
18 |
30 |
60 |
C6 |
86 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ampersand |
ENCODING 38 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
6C |
38 |
76 |
DC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR quotesingle |
ENCODING 39 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
30 |
30 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR parenleft |
ENCODING 40 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
30 |
30 |
30 |
30 |
30 |
30 |
18 |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR parenright |
ENCODING 41 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
18 |
0C |
0C |
0C |
0C |
0C |
0C |
18 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR asterisk |
ENCODING 42 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
3C |
FF |
3C |
66 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR plus |
ENCODING 43 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
7E |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR comma |
ENCODING 44 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
18 |
30 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR hyphen |
ENCODING 45 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR period |
ENCODING 46 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR slash |
ENCODING 47 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
02 |
06 |
0C |
18 |
30 |
60 |
C0 |
80 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR zero |
ENCODING 48 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
C6 |
C6 |
D6 |
D6 |
C6 |
C6 |
6C |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR one |
ENCODING 49 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
38 |
78 |
18 |
18 |
18 |
18 |
18 |
18 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR two |
ENCODING 50 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
06 |
0C |
18 |
30 |
60 |
C0 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR three |
ENCODING 51 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
06 |
06 |
3C |
06 |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR four |
ENCODING 52 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
1C |
3C |
6C |
CC |
FE |
0C |
0C |
0C |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR five |
ENCODING 53 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C0 |
C0 |
C0 |
FC |
06 |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR six |
ENCODING 54 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
60 |
C0 |
C0 |
FC |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR seven |
ENCODING 55 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
06 |
06 |
0C |
18 |
30 |
30 |
30 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR eight |
ENCODING 56 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
7C |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR nine |
ENCODING 57 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
7E |
06 |
06 |
06 |
0C |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR colon |
ENCODING 58 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR semicolon |
ENCODING 59 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
18 |
18 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR less |
ENCODING 60 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
06 |
0C |
18 |
30 |
60 |
30 |
18 |
0C |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR equal |
ENCODING 61 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
00 |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR greater |
ENCODING 62 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
60 |
30 |
18 |
0C |
06 |
0C |
18 |
30 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR question |
ENCODING 63 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
0C |
18 |
18 |
18 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR at |
ENCODING 64 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
C6 |
C6 |
DE |
DE |
DE |
DC |
C0 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR A |
ENCODING 65 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR B |
ENCODING 66 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR C |
ENCODING 67 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR D |
ENCODING 68 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
66 |
66 |
66 |
66 |
6C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR E |
ENCODING 69 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR F |
ENCODING 70 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR G |
ENCODING 71 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR H |
ENCODING 72 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR I |
ENCODING 73 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR J |
ENCODING 74 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
0C |
0C |
0C |
0C |
0C |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR K |
ENCODING 75 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR L |
ENCODING 76 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR M |
ENCODING 77 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR N |
ENCODING 78 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR O |
ENCODING 79 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR P |
ENCODING 80 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Q |
ENCODING 81 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
D6 |
DE |
7C |
0C |
0E |
00 |
00 |
ENDCHAR |
STARTCHAR R |
ENCODING 82 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR S |
ENCODING 83 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
60 |
38 |
0C |
06 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR T |
ENCODING 84 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR U |
ENCODING 85 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR V |
ENCODING 86 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
6C |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR W |
ENCODING 87 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
EE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR X |
ENCODING 88 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
6C |
7C |
38 |
38 |
7C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Y |
ENCODING 89 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Z |
ENCODING 90 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
86 |
0C |
18 |
30 |
60 |
C2 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR bracketleft |
ENCODING 91 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR backslash |
ENCODING 92 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
80 |
C0 |
E0 |
70 |
38 |
1C |
0E |
06 |
02 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR bracketright |
ENCODING 93 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR asciicircum |
ENCODING 94 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
6C |
C6 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR underscore |
ENCODING 95 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
ENDCHAR |
STARTCHAR grave |
ENCODING 96 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR a |
ENCODING 97 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR b |
ENCODING 98 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
78 |
6C |
66 |
66 |
66 |
66 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR c |
ENCODING 99 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR d |
ENCODING 100 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR e |
ENCODING 101 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR f |
ENCODING 102 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
64 |
60 |
F0 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR g |
ENCODING 103 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR h |
ENCODING 104 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR i |
ENCODING 105 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR j |
ENCODING 106 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
06 |
00 |
0E |
06 |
06 |
06 |
06 |
06 |
06 |
66 |
66 |
3C |
00 |
ENDCHAR |
STARTCHAR k |
ENCODING 107 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
66 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR l |
ENCODING 108 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR m |
ENCODING 109 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
EC |
FE |
D6 |
D6 |
D6 |
D6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR n |
ENCODING 110 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR o |
ENCODING 111 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR p |
ENCODING 112 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
7C |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR q |
ENCODING 113 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
0C |
1E |
00 |
ENDCHAR |
STARTCHAR r |
ENCODING 114 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR s |
ENCODING 115 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR t |
ENCODING 116 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR u |
ENCODING 117 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR v |
ENCODING 118 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
66 |
66 |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR w |
ENCODING 119 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR x |
ENCODING 120 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
6C |
38 |
38 |
38 |
6C |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR y |
ENCODING 121 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR z |
ENCODING 122 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
CC |
18 |
30 |
60 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR braceleft |
ENCODING 123 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0E |
18 |
18 |
18 |
70 |
18 |
18 |
18 |
18 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR bar |
ENCODING 124 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
00 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR braceright |
ENCODING 125 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
18 |
18 |
18 |
0E |
18 |
18 |
18 |
18 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR asciitilde |
ENCODING 126 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR char127 |
ENCODING 127 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
38 |
6C |
C6 |
C6 |
C6 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR space |
ENCODING 160 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR exclamdown |
ENCODING 161 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
18 |
18 |
18 |
3C |
3C |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR cent |
ENCODING 162 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
18 |
3C |
66 |
60 |
60 |
60 |
66 |
3C |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR sterling |
ENCODING 163 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
6C |
64 |
60 |
F0 |
60 |
60 |
60 |
60 |
E6 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR currency |
ENCODING 164 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
66 |
3C |
66 |
66 |
66 |
3C |
66 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR yen |
ENCODING 165 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
3C |
18 |
7E |
18 |
7E |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR brokenbar |
ENCODING 166 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
00 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR section |
ENCODING 167 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
C6 |
60 |
38 |
6C |
C6 |
C6 |
6C |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dieresis |
ENCODING 168 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR copyright |
ENCODING 169 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
99 |
A5 |
A1 |
A1 |
A5 |
99 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ordfeminine |
ENCODING 170 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
3C |
6C |
6C |
3E |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR guillemotleft |
ENCODING 171 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
36 |
6C |
D8 |
6C |
36 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR logicalnot |
ENCODING 172 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR hyphen |
ENCODING 173 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR registered |
ENCODING 174 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
44 |
BA |
B2 |
AA |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR macron |
ENCODING 175 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR degree |
ENCODING 176 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
6C |
6C |
38 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR plusminus |
ENCODING 177 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
18 |
7E |
18 |
18 |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR twosuperior |
ENCODING 178 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
D8 |
30 |
60 |
C8 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR threesuperior |
ENCODING 179 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
D8 |
30 |
18 |
D8 |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR acute |
ENCODING 180 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR mu |
ENCODING 181 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
F6 |
C0 |
C0 |
C0 |
00 |
ENDCHAR |
STARTCHAR paragraph |
ENCODING 182 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7F |
DB |
DB |
DB |
7B |
1B |
1B |
1B |
1B |
1B |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR periodcentered |
ENCODING 183 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR cedilla |
ENCODING 184 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR onesuperior |
ENCODING 185 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
70 |
30 |
30 |
30 |
78 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ordmasculine |
ENCODING 186 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
6C |
6C |
38 |
00 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR guillemotright |
ENCODING 187 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
D8 |
6C |
36 |
6C |
D8 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR onequarter |
ENCODING 188 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
C2 |
C6 |
CC |
18 |
30 |
66 |
CE |
9E |
3E |
06 |
06 |
00 |
00 |
ENDCHAR |
STARTCHAR onehalf |
ENCODING 189 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
C2 |
C6 |
CC |
18 |
30 |
60 |
DC |
86 |
0C |
18 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR threequarters |
ENCODING 190 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
E0 |
30 |
62 |
36 |
EC |
18 |
30 |
66 |
CE |
9E |
3E |
06 |
06 |
00 |
00 |
ENDCHAR |
STARTCHAR questiondown |
ENCODING 191 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
30 |
30 |
60 |
C0 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Agrave |
ENCODING 192 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Aacute |
ENCODING 193 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Acircumflex |
ENCODING 194 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
6C |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Atilde |
ENCODING 195 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Adieresis |
ENCODING 196 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Aring |
ENCODING 197 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
38 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR AE |
ENCODING 198 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3E |
6C |
CC |
CC |
FE |
CC |
CC |
CC |
CC |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ccedilla |
ENCODING 199 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR Egrave |
ENCODING 200 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
18 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Eacute |
ENCODING 201 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ecircumflex |
ENCODING 202 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Edieresis |
ENCODING 203 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Igrave |
ENCODING 204 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
18 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Iacute |
ENCODING 205 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Icircumflex |
ENCODING 206 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
3C |
42 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Idieresis |
ENCODING 207 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
66 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Eth |
ENCODING 208 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
F6 |
66 |
66 |
66 |
6C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ntilde |
ENCODING 209 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ograve |
ENCODING 210 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Oacute |
ENCODING 211 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ocircumflex |
ENCODING 212 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Otilde |
ENCODING 213 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Odieresis |
ENCODING 214 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR multiply |
ENCODING 215 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
3C |
18 |
3C |
66 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Oslash |
ENCODING 216 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7A |
C4 |
CE |
CE |
D6 |
D6 |
E6 |
E6 |
46 |
BC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ugrave |
ENCODING 217 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Uacute |
ENCODING 218 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ucircumflex |
ENCODING 219 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Udieresis |
ENCODING 220 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Yacute |
ENCODING 221 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Thorn |
ENCODING 222 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
7C |
66 |
66 |
66 |
66 |
7C |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR germandbls |
ENCODING 223 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
6C |
66 |
66 |
66 |
66 |
EC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR agrave |
ENCODING 224 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR aacute |
ENCODING 225 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
30 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR acircumflex |
ENCODING 226 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR atilde |
ENCODING 227 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR adieresis |
ENCODING 228 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR aring |
ENCODING 229 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
6C |
38 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ae |
ENCODING 230 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
76 |
36 |
7E |
D8 |
D8 |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ccedilla |
ENCODING 231 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR egrave |
ENCODING 232 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR eacute |
ENCODING 233 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ecircumflex |
ENCODING 234 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR edieresis |
ENCODING 235 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR igrave |
ENCODING 236 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR iacute |
ENCODING 237 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR icircumflex |
ENCODING 238 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR idieresis |
ENCODING 239 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR eth |
ENCODING 240 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
1C |
3C |
06 |
7E |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ntilde |
ENCODING 241 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ograve |
ENCODING 242 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR oacute |
ENCODING 243 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ocircumflex |
ENCODING 244 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR otilde |
ENCODING 245 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR odieresis |
ENCODING 246 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR divide |
ENCODING 247 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
7E |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR oslash |
ENCODING 248 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7A |
C4 |
CE |
D6 |
E6 |
46 |
BC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ugrave |
ENCODING 249 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uacute |
ENCODING 250 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
30 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ucircumflex |
ENCODING 251 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR udieresis |
ENCODING 252 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
CC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR yacute |
ENCODING 253 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR thorn |
ENCODING 254 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
7C |
66 |
66 |
66 |
66 |
66 |
7C |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR ydieresis |
ENCODING 255 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR Amacron |
ENCODING 256 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR amacron |
ENCODING 257 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Abreve |
ENCODING 258 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR abreve |
ENCODING 259 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Aogonek |
ENCODING 260 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
0C |
18 |
0E |
00 |
ENDCHAR |
STARTCHAR aogonek |
ENCODING 261 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
0C |
18 |
0E |
00 |
ENDCHAR |
STARTCHAR Cacute |
ENCODING 262 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR cacute |
ENCODING 263 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ccircumflex |
ENCODING 264 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ccircumflex |
ENCODING 265 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Cdotaccent |
ENCODING 266 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR cdotaccent |
ENCODING 267 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ccaron |
ENCODING 268 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ccaron |
ENCODING 269 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Dcaron |
ENCODING 270 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
F8 |
6C |
66 |
66 |
66 |
66 |
66 |
6C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dcaron |
ENCODING 271 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Dcroat |
ENCODING 272 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
F6 |
66 |
66 |
66 |
6C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dcroat |
ENCODING 273 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
3E |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Emacron |
ENCODING 274 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR emacron |
ENCODING 275 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ebreve |
ENCODING 276 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ebreve |
ENCODING 277 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Edotaccent |
ENCODING 278 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR edotaccent |
ENCODING 279 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Eogonek |
ENCODING 280 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
18 |
30 |
1C |
00 |
ENDCHAR |
STARTCHAR eogonek |
ENCODING 281 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR Ecaron |
ENCODING 282 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ecaron |
ENCODING 283 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Gcircumflex |
ENCODING 284 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
3C |
66 |
C2 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR gcircumflex |
ENCODING 285 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR Gbreve |
ENCODING 286 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
3C |
66 |
C2 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR gbreve |
ENCODING 287 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR Gdotaccent |
ENCODING 288 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
3C |
66 |
C2 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR gdotaccent |
ENCODING 289 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR Gcommaaccent |
ENCODING 290 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR gcommaaccent |
ENCODING 291 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
30 |
30 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR Hcircumflex |
ENCODING 292 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR hcircumflex |
ENCODING 293 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
E0 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Hbar |
ENCODING 294 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
FF |
66 |
66 |
7E |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR hbar |
ENCODING 295 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
F8 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Itilde |
ENCODING 296 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR itilde |
ENCODING 297 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Imacron |
ENCODING 298 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7E |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR imacron |
ENCODING 299 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7E |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ibreve |
ENCODING 300 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
3C |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ibreve |
ENCODING 301 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
3C |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Iogonek |
ENCODING 302 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
18 |
30 |
1C |
00 |
ENDCHAR |
STARTCHAR iogonek |
ENCODING 303 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
18 |
30 |
1C |
00 |
ENDCHAR |
STARTCHAR Idotaccent |
ENCODING 304 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dotlessi |
ENCODING 305 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR IJ |
ENCODING 306 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F7 |
63 |
63 |
63 |
63 |
63 |
63 |
7B |
7B |
EE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ij |
ENCODING 307 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
00 |
EE |
66 |
66 |
66 |
66 |
66 |
F6 |
06 |
66 |
3C |
00 |
ENDCHAR |
STARTCHAR Jcircumflex |
ENCODING 308 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
1C |
22 |
1E |
0C |
0C |
0C |
0C |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR jcircumflex |
ENCODING 309 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
04 |
0E |
1B |
00 |
0E |
06 |
06 |
06 |
06 |
06 |
06 |
66 |
66 |
3C |
00 |
ENDCHAR |
STARTCHAR Kcommaaccent |
ENCODING 310 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR kcommaaccent |
ENCODING 311 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
66 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR kgreenlandic |
ENCODING 312 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
E6 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Lacute |
ENCODING 313 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
30 |
00 |
F0 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR lacute |
ENCODING 314 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Lcommaaccent |
ENCODING 315 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR lcommaaccent |
ENCODING 316 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR Lcaron |
ENCODING 317 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
F0 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR lcaron |
ENCODING 318 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ldot |
ENCODING 319 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
66 |
66 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ldot |
ENCODING 320 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
30 |
30 |
30 |
36 |
36 |
30 |
30 |
30 |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Lslash |
ENCODING 321 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
78 |
E0 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR lslash |
ENCODING 322 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
1E |
78 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Nacute |
ENCODING 323 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR nacute |
ENCODING 324 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ncommaaccent |
ENCODING 325 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
C6 |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR ncommaaccent |
ENCODING 326 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR Ncaron |
ENCODING 327 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ncaron |
ENCODING 328 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR napostrophe |
ENCODING 329 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
60 |
60 |
C0 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Eng |
ENCODING 330 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
C6 |
06 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR eng |
ENCODING 331 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
06 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR Omacron |
ENCODING 332 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR omacron |
ENCODING 333 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Obreve |
ENCODING 334 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR obreve |
ENCODING 335 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ohungarumlaut |
ENCODING 336 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
CC |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ohungarumlaut |
ENCODING 337 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
CC |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR OE |
ENCODING 338 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6E |
D8 |
D8 |
D8 |
DE |
D8 |
D8 |
D8 |
D8 |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR oe |
ENCODING 339 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
D6 |
D6 |
DE |
D8 |
D8 |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Racute |
ENCODING 340 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR racute |
ENCODING 341 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Rcommaaccent |
ENCODING 342 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
66 |
E6 |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR rcommaaccent |
ENCODING 343 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR Rcaron |
ENCODING 344 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR rcaron |
ENCODING 345 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Sacute |
ENCODING 346 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
7C |
C6 |
C6 |
60 |
38 |
0C |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR sacute |
ENCODING 347 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Scircumflex |
ENCODING 348 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
7C |
C6 |
C6 |
60 |
38 |
0C |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR scircumflex |
ENCODING 349 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Scedilla |
ENCODING 350 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
C6 |
C6 |
60 |
38 |
0C |
C6 |
C6 |
7C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR scedilla |
ENCODING 351 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR Scaron |
ENCODING 352 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
7C |
C6 |
C6 |
60 |
38 |
0C |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR scaron |
ENCODING 353 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Tcommaaccent |
ENCODING 354 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR tcommaaccent |
ENCODING 355 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR Tcaron |
ENCODING 356 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR tcaron |
ENCODING 357 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
10 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Tbar |
ENCODING 358 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
3C |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR tbar |
ENCODING 359 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
FC |
30 |
30 |
36 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Utilde |
ENCODING 360 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR utilde |
ENCODING 361 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Umacron |
ENCODING 362 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR umacron |
ENCODING 363 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
78 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ubreve |
ENCODING 364 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ubreve |
ENCODING 365 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
78 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Uring |
ENCODING 366 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
38 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uring |
ENCODING 367 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
6C |
38 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Uhungarumlaut |
ENCODING 368 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
CC |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uhungarumlaut |
ENCODING 369 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
CC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Uogonek |
ENCODING 370 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR uogonek |
ENCODING 371 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR Wcircumflex |
ENCODING 372 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
C6 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
EE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR wcircumflex |
ENCODING 373 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ycircumflex |
ENCODING 374 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ycircumflex |
ENCODING 375 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR Ydieresis |
ENCODING 376 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
66 |
00 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Zacute |
ENCODING 377 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
FE |
C6 |
8C |
18 |
30 |
60 |
C2 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR zacute |
ENCODING 378 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
FE |
CC |
18 |
30 |
60 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Zdotaccent |
ENCODING 379 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
FE |
C6 |
8C |
18 |
30 |
60 |
C2 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR zdotaccent |
ENCODING 380 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
FE |
CC |
18 |
30 |
60 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Zcaron |
ENCODING 381 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
FE |
C6 |
8C |
18 |
30 |
60 |
C2 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR zcaron |
ENCODING 382 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
FE |
CC |
18 |
30 |
60 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR longs |
ENCODING 383 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
64 |
60 |
60 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0180 |
ENCODING 384 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
F8 |
60 |
78 |
6C |
66 |
66 |
66 |
66 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0181 |
ENCODING 385 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
B3 |
B3 |
33 |
3E |
33 |
33 |
33 |
33 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0182 |
ENCODING 386 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
64 |
60 |
60 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0183 |
ENCODING 387 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
62 |
60 |
78 |
6C |
66 |
66 |
66 |
66 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0184 |
ENCODING 388 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
E6 |
E6 |
66 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0185 |
ENCODING 389 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
E0 |
E0 |
78 |
6C |
66 |
66 |
66 |
66 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0186 |
ENCODING 390 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
86 |
06 |
06 |
06 |
06 |
86 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0187 |
ENCODING 391 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
03 |
3E |
66 |
C2 |
C0 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0188 |
ENCODING 392 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
03 |
7E |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0189 |
ENCODING 393 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
F6 |
66 |
66 |
66 |
6C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni018A |
ENCODING 394 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
B6 |
B3 |
33 |
33 |
33 |
33 |
33 |
36 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni018B |
ENCODING 395 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
4C |
0C |
0C |
7C |
CC |
CC |
CC |
CC |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni018C |
ENCODING 396 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
4C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni018D |
ENCODING 397 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
7C |
30 |
18 |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR uni018E |
ENCODING 398 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
CC |
8C |
2C |
3C |
2C |
0C |
8C |
CC |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni018F |
ENCODING 399 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
06 |
06 |
06 |
FE |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0190 |
ENCODING 400 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C2 |
C0 |
78 |
C0 |
C0 |
C2 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0191 |
ENCODING 401 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
60 |
60 |
60 |
60 |
60 |
C0 |
00 |
ENDCHAR |
STARTCHAR florin |
ENCODING 402 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
36 |
32 |
30 |
78 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
E0 |
00 |
ENDCHAR |
STARTCHAR uni0193 |
ENCODING 403 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
03 |
3E |
66 |
C2 |
C0 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0194 |
ENCODING 404 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
6C |
6C |
6C |
38 |
38 |
10 |
38 |
6C |
38 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0195 |
ENCODING 405 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
C0 |
F3 |
DB |
DB |
DB |
DB |
DB |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0196 |
ENCODING 406 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0197 |
ENCODING 407 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0198 |
ENCODING 408 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
6D |
6C |
78 |
70 |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0199 |
ENCODING 409 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
60 |
66 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni019A |
ENCODING 410 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni019B |
ENCODING 411 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C8 |
38 |
70 |
D0 |
38 |
38 |
6C |
64 |
C6 |
C2 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni019C |
ENCODING 412 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
FE |
EC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni019D |
ENCODING 413 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
76 |
7E |
7E |
6E |
66 |
66 |
66 |
66 |
60 |
60 |
C0 |
00 |
ENDCHAR |
STARTCHAR uni019E |
ENCODING 414 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
06 |
06 |
06 |
00 |
ENDCHAR |
STARTCHAR uni019F |
ENCODING 415 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ohorn |
ENCODING 416 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
03 |
7A |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ohorn |
ENCODING 417 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
06 |
78 |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01A2 |
ENCODING 418 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
73 |
DF |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
73 |
03 |
03 |
03 |
00 |
ENDCHAR |
STARTCHAR uni01A3 |
ENCODING 419 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
73 |
DF |
DB |
DB |
DB |
DB |
73 |
03 |
03 |
03 |
00 |
ENDCHAR |
STARTCHAR uni01A4 |
ENCODING 420 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
B3 |
B3 |
33 |
3E |
30 |
30 |
30 |
30 |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01A5 |
ENCODING 421 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
60 |
7C |
66 |
66 |
66 |
66 |
66 |
7C |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR uni01A6 |
ENCODING 422 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
7C |
66 |
66 |
7C |
78 |
6C |
6C |
E6 |
06 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01A7 |
ENCODING 423 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
0C |
38 |
60 |
C0 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01A8 |
ENCODING 424 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
0C |
38 |
60 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01A9 |
ENCODING 425 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
62 |
30 |
18 |
18 |
30 |
62 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01AA |
ENCODING 426 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
D8 |
78 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1B |
0E |
00 |
ENDCHAR |
STARTCHAR uni01AB |
ENCODING 427 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
0C |
6C |
38 |
00 |
ENDCHAR |
STARTCHAR uni01AC |
ENCODING 428 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
FE |
9A |
58 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01AD |
ENCODING 429 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
36 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01AE |
ENCODING 430 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
0E |
00 |
ENDCHAR |
STARTCHAR Uhorn |
ENCODING 431 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
03 |
CE |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uhorn |
ENCODING 432 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
06 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01B1 |
ENCODING 433 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
EE |
6C |
6C |
6C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01B2 |
ENCODING 434 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01B3 |
ENCODING 435 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
63 |
B3 |
B3 |
33 |
1E |
0C |
0C |
0C |
0C |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01B4 |
ENCODING 436 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
06 |
0D |
CC |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
18 |
F0 |
00 |
ENDCHAR |
STARTCHAR uni01B5 |
ENCODING 437 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
86 |
0C |
7E |
30 |
60 |
C2 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01B6 |
ENCODING 438 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
CC |
18 |
FC |
60 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01B7 |
ENCODING 439 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
06 |
0C |
18 |
30 |
7C |
06 |
06 |
06 |
06 |
C6 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni01B8 |
ENCODING 440 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C0 |
60 |
30 |
18 |
7C |
C0 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni01B9 |
ENCODING 441 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
C0 |
60 |
30 |
78 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
ENDCHAR |
STARTCHAR uni01BA |
ENCODING 442 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
06 |
0C |
18 |
3C |
06 |
7C |
C0 |
C6 |
7C |
00 |
ENDCHAR |
STARTCHAR uni01BB |
ENCODING 443 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
06 |
0C |
7E |
30 |
60 |
C0 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01BC |
ENCODING 444 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
60 |
60 |
78 |
0C |
06 |
06 |
06 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01BD |
ENCODING 445 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
60 |
78 |
0C |
06 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01BE |
ENCODING 446 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
18 |
4C |
6C |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01BF |
ENCODING 447 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
6C |
78 |
70 |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR uni01C0 |
ENCODING 448 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01C1 |
ENCODING 449 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01C2 |
ENCODING 450 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
7E |
18 |
7E |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01C3 |
ENCODING 451 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
3C |
3C |
18 |
18 |
18 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01C4 |
ENCODING 452 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1B |
0E |
04 |
F7 |
D9 |
D9 |
DA |
DA |
DA |
DC |
DC |
F7 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01C5 |
ENCODING 453 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F5 |
DA |
D8 |
DF |
D9 |
DA |
DA |
DA |
DC |
F7 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01C6 |
ENCODING 454 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3D |
1A |
18 |
7F |
D9 |
DA |
DA |
DA |
DC |
6F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01C7 |
ENCODING 455 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C7 |
C3 |
C3 |
C3 |
C3 |
C3 |
C3 |
C3 |
CB |
F6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01C8 |
ENCODING 456 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F3 |
63 |
60 |
67 |
63 |
63 |
63 |
67 |
6F |
FF |
03 |
1B |
0E |
00 |
ENDCHAR |
STARTCHAR uni01C9 |
ENCODING 457 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E3 |
63 |
60 |
67 |
63 |
63 |
63 |
63 |
63 |
F3 |
03 |
33 |
1E |
00 |
ENDCHAR |
STARTCHAR uni01CA |
ENCODING 458 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
FB |
FB |
FB |
DB |
DB |
DB |
DB |
DE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01CB |
ENCODING 459 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
F8 |
FF |
FB |
FB |
DB |
DB |
DB |
DB |
03 |
33 |
1E |
00 |
ENDCHAR |
STARTCHAR uni01CC |
ENCODING 460 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
00 |
B7 |
DB |
DB |
DB |
DB |
DB |
DB |
03 |
33 |
1E |
00 |
ENDCHAR |
STARTCHAR uni01CD |
ENCODING 461 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01CE |
ENCODING 462 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01CF |
ENCODING 463 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D0 |
ENCODING 464 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D1 |
ENCODING 465 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D2 |
ENCODING 466 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D3 |
ENCODING 467 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D4 |
ENCODING 468 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D5 |
ENCODING 469 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
00 |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D6 |
ENCODING 470 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
78 |
00 |
CC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D7 |
ENCODING 471 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
10 |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D8 |
ENCODING 472 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
30 |
00 |
CC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01D9 |
ENCODING 473 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
28 |
10 |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01DA |
ENCODING 474 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
78 |
30 |
00 |
CC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01DB |
ENCODING 475 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
20 |
10 |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01DC |
ENCODING 476 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
CC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01DD |
ENCODING 477 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
06 |
FE |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01DE |
ENCODING 478 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
00 |
6C |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01DF |
ENCODING 479 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
6C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01E0 |
ENCODING 480 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
30 |
30 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01E1 |
ENCODING 481 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
30 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01E2 |
ENCODING 482 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
3E |
6C |
CC |
CC |
FE |
CC |
CC |
CC |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01E3 |
ENCODING 483 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
CC |
76 |
36 |
7E |
D8 |
D8 |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01E4 |
ENCODING 484 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
DE |
C6 |
DF |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01E5 |
ENCODING 485 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
CC |
CC |
CC |
CC |
7C |
0C |
3E |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR Gcaron |
ENCODING 486 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
3C |
66 |
C2 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR gcaron |
ENCODING 487 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR uni01E8 |
ENCODING 488 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
E6 |
66 |
66 |
6C |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01E9 |
ENCODING 489 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
E0 |
60 |
66 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01EA |
ENCODING 490 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR uni01EB |
ENCODING 491 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR uni01EC |
ENCODING 492 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR uni01ED |
ENCODING 493 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR uni01EE |
ENCODING 494 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
FE |
0C |
18 |
30 |
7C |
06 |
06 |
06 |
06 |
C6 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni01EF |
ENCODING 495 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
FE |
06 |
0C |
18 |
3C |
06 |
06 |
06 |
C6 |
7C |
00 |
ENDCHAR |
STARTCHAR uni01F0 |
ENCODING 496 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
1B |
0E |
04 |
00 |
0E |
06 |
06 |
06 |
06 |
06 |
06 |
66 |
66 |
3C |
00 |
ENDCHAR |
STARTCHAR uni01F1 |
ENCODING 497 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F7 |
D9 |
D9 |
DA |
DA |
DA |
DA |
DC |
DC |
F7 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01F2 |
ENCODING 498 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
D8 |
D8 |
DF |
D9 |
DA |
DA |
DA |
DC |
F7 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01F3 |
ENCODING 499 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
7F |
D9 |
DA |
DA |
DA |
DC |
6F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01F4 |
ENCODING 500 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
3C |
66 |
C2 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01F5 |
ENCODING 501 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
30 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR uni01F6 |
ENCODING 502 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D8 |
D8 |
D8 |
DB |
FB |
DB |
DB |
DB |
DB |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01F7 |
ENCODING 503 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
66 |
6C |
78 |
70 |
60 |
60 |
60 |
60 |
E0 |
00 |
ENDCHAR |
STARTCHAR uni01F8 |
ENCODING 504 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni01F9 |
ENCODING 505 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
18 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Aringacute |
ENCODING 506 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
38 |
6C |
38 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR aringacute |
ENCODING 507 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
38 |
6C |
38 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR AEacute |
ENCODING 508 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
3E |
6C |
CC |
CC |
FE |
CC |
CC |
CC |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR aeacute |
ENCODING 509 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
CC |
76 |
36 |
7E |
D8 |
D8 |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Oslashacute |
ENCODING 510 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
7A |
C4 |
CE |
CE |
D6 |
E6 |
E6 |
46 |
BC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR oslashacute |
ENCODING 511 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
7A |
C4 |
CE |
D6 |
E6 |
46 |
BC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0200 |
ENCODING 512 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
CC |
66 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0201 |
ENCODING 513 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
66 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0202 |
ENCODING 514 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0203 |
ENCODING 515 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0204 |
ENCODING 516 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
CC |
66 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0205 |
ENCODING 517 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
66 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0206 |
ENCODING 518 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0207 |
ENCODING 519 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0208 |
ENCODING 520 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
CC |
66 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0209 |
ENCODING 521 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
66 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni020A |
ENCODING 522 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
3C |
66 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni020B |
ENCODING 523 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni020C |
ENCODING 524 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
CC |
66 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni020D |
ENCODING 525 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
66 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni020E |
ENCODING 526 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni020F |
ENCODING 527 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0210 |
ENCODING 528 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
CC |
66 |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0211 |
ENCODING 529 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
66 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0212 |
ENCODING 530 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0213 |
ENCODING 531 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0214 |
ENCODING 532 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
CC |
66 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0215 |
ENCODING 533 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
66 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0216 |
ENCODING 534 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0217 |
ENCODING 535 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Scommaaccent |
ENCODING 536 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
60 |
38 |
0C |
06 |
C6 |
C6 |
7C |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR scommaaccent |
ENCODING 537 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR Tcommaaccent |
ENCODING 538 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR tcommaaccent |
ENCODING 539 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
18 |
18 |
30 |
ENDCHAR |
STARTCHAR uni021C |
ENCODING 540 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
86 |
06 |
1C |
74 |
06 |
06 |
06 |
06 |
1C |
F0 |
00 |
00 |
ENDCHAR |
STARTCHAR uni021D |
ENCODING 541 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
0E |
3C |
06 |
06 |
1C |
F0 |
00 |
00 |
ENDCHAR |
STARTCHAR uni021E |
ENCODING 542 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni021F |
ENCODING 543 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
E0 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0222 |
ENCODING 546 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
C6 |
C6 |
C6 |
7C |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0223 |
ENCODING 547 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
66 |
66 |
66 |
3C |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0224 |
ENCODING 548 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
86 |
0C |
18 |
30 |
60 |
C0 |
C0 |
FC |
06 |
0C |
00 |
00 |
ENDCHAR |
STARTCHAR uni0225 |
ENCODING 549 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
CC |
18 |
30 |
60 |
C0 |
FC |
06 |
0C |
00 |
00 |
ENDCHAR |
STARTCHAR uni0226 |
ENCODING 550 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0227 |
ENCODING 551 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0228 |
ENCODING 552 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
62 |
66 |
FE |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR uni0229 |
ENCODING 553 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR uni022A |
ENCODING 554 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
00 |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni022B |
ENCODING 555 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni022C |
ENCODING 556 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
00 |
72 |
9C |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni022D |
ENCODING 557 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
00 |
76 |
DC |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni022E |
ENCODING 558 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni022F |
ENCODING 559 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0230 |
ENCODING 560 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
00 |
30 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0231 |
ENCODING 561 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
30 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0232 |
ENCODING 562 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
3C |
00 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0233 |
ENCODING 563 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni0250 |
ENCODING 592 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
7C |
60 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0251 |
ENCODING 593 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
74 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0252 |
ENCODING 594 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
5C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0253 |
ENCODING 595 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
60 |
78 |
6C |
66 |
66 |
66 |
66 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0254 |
ENCODING 596 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0255 |
ENCODING 597 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
DC |
E6 |
7C |
80 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0256 |
ENCODING 598 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
7C |
0C |
0D |
06 |
00 |
ENDCHAR |
STARTCHAR uni0257 |
ENCODING 599 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
0D |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0258 |
ENCODING 600 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
FE |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0259 |
ENCODING 601 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
06 |
FE |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni025A |
ENCODING 602 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3B |
6C |
8E |
16 |
26 |
6C |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni025B |
ENCODING 603 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
78 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni025C |
ENCODING 604 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
3C |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni025D |
ENCODING 605 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7A |
CD |
0D |
38 |
0C |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni025E |
ENCODING 606 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
DC |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni025F |
ENCODING 607 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0E |
06 |
06 |
1F |
06 |
06 |
06 |
66 |
66 |
3C |
00 |
ENDCHAR |
STARTCHAR uni0260 |
ENCODING 608 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
06 |
0D |
7C |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR uni0261 |
ENCODING 609 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR uni0262 |
ENCODING 610 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
CE |
C6 |
C6 |
7A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0263 |
ENCODING 611 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
46 |
6C |
2C |
2C |
38 |
18 |
18 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni0264 |
ENCODING 612 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C2 |
64 |
28 |
38 |
38 |
6C |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0265 |
ENCODING 613 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CE |
CC |
CC |
CC |
CC |
DC |
6C |
0C |
0C |
0E |
00 |
ENDCHAR |
STARTCHAR uni0266 |
ENCODING 614 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0267 |
ENCODING 615 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
06 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR uni0268 |
ENCODING 616 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
38 |
18 |
18 |
3C |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0269 |
ENCODING 617 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni026A |
ENCODING 618 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni026B |
ENCODING 619 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
7B |
DE |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni026C |
ENCODING 620 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
78 |
58 |
3E |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni026D |
ENCODING 621 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1B |
0E |
00 |
ENDCHAR |
STARTCHAR uni026E |
ENCODING 622 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
7F |
63 |
66 |
6C |
7E |
63 |
F3 |
03 |
33 |
1E |
00 |
ENDCHAR |
STARTCHAR uni026F |
ENCODING 623 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
D6 |
D6 |
D6 |
D6 |
FE |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0270 |
ENCODING 624 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
D6 |
D6 |
D6 |
D6 |
FE |
6E |
06 |
06 |
06 |
00 |
ENDCHAR |
STARTCHAR uni0271 |
ENCODING 625 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
EC |
FE |
D6 |
D6 |
D6 |
D6 |
C6 |
06 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR uni0272 |
ENCODING 626 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
60 |
60 |
C0 |
00 |
ENDCHAR |
STARTCHAR uni0273 |
ENCODING 627 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
06 |
06 |
03 |
00 |
ENDCHAR |
STARTCHAR uni0274 |
ENCODING 628 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0275 |
ENCODING 629 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
FE |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0276 |
ENCODING 630 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6E |
D8 |
D8 |
DE |
D8 |
D8 |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0277 |
ENCODING 631 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
C6 |
D6 |
D6 |
D6 |
D6 |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0278 |
ENCODING 632 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
10 |
7C |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR uni0279 |
ENCODING 633 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
1E |
0C |
0C |
0C |
CC |
DC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni027A |
ENCODING 634 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
0C |
0C |
0C |
0C |
0C |
0C |
CC |
DC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni027B |
ENCODING 635 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
1E |
0C |
0C |
0C |
CC |
DC |
6C |
0C |
0D |
06 |
00 |
ENDCHAR |
STARTCHAR uni027C |
ENCODING 636 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
60 |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR uni027D |
ENCODING 637 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
60 |
60 |
6C |
38 |
00 |
ENDCHAR |
STARTCHAR uni027E |
ENCODING 638 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
66 |
66 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni027F |
ENCODING 639 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
78 |
CC |
CC |
0C |
0C |
0C |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0280 |
ENCODING 640 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FC |
66 |
66 |
7C |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0281 |
ENCODING 641 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
E6 |
66 |
6C |
7C |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0282 |
ENCODING 642 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
FC |
C0 |
D8 |
70 |
00 |
ENDCHAR |
STARTCHAR uni0283 |
ENCODING 643 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0E |
1B |
19 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
98 |
D8 |
70 |
00 |
ENDCHAR |
STARTCHAR uni0284 |
ENCODING 644 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0E |
1B |
19 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
98 |
D8 |
70 |
00 |
ENDCHAR |
STARTCHAR uni0285 |
ENCODING 645 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
D8 |
18 |
18 |
18 |
18 |
1B |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0286 |
ENCODING 646 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0E |
1B |
18 |
18 |
18 |
18 |
18 |
18 |
7E |
D8 |
70 |
00 |
ENDCHAR |
STARTCHAR uni0287 |
ENCODING 647 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
D8 |
18 |
18 |
18 |
18 |
7E |
18 |
18 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0288 |
ENCODING 648 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
ENDCHAR |
STARTCHAR uni0289 |
ENCODING 649 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
FF |
66 |
66 |
3B |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni028A |
ENCODING 650 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
EE |
6C |
6C |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni028B |
ENCODING 651 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni028C |
ENCODING 652 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
3C |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni028D |
ENCODING 653 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
FE |
D6 |
D6 |
D6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni028E |
ENCODING 654 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3E |
60 |
C0 |
FC |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni028F |
ENCODING 655 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
3C |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0290 |
ENCODING 656 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
CC |
18 |
30 |
60 |
C6 |
FE |
06 |
06 |
03 |
00 |
ENDCHAR |
STARTCHAR uni0291 |
ENCODING 657 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
CC |
18 |
30 |
66 |
CB |
FE |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0292 |
ENCODING 658 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
06 |
0C |
18 |
3C |
06 |
06 |
06 |
C6 |
7C |
00 |
ENDCHAR |
STARTCHAR uni0293 |
ENCODING 659 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
06 |
0C |
18 |
3C |
06 |
06 |
7E |
C7 |
7C |
00 |
ENDCHAR |
STARTCHAR uni0294 |
ENCODING 660 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
06 |
1C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0295 |
ENCODING 661 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C0 |
70 |
30 |
30 |
30 |
30 |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0296 |
ENCODING 662 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
1C |
06 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0297 |
ENCODING 663 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
ENDCHAR |
STARTCHAR uni0298 |
ENCODING 664 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C3 |
C3 |
DB |
DB |
C3 |
C3 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0299 |
ENCODING 665 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FC |
66 |
66 |
7C |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni029A |
ENCODING 666 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
76 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni029B |
ENCODING 667 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
03 |
7E |
C6 |
C0 |
CE |
C6 |
C6 |
7A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni029C |
ENCODING 668 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR j |
ENCODING 669 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
0C |
00 |
1C |
0C |
0C |
0C |
0C |
0C |
0C |
7E |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR uni029D |
ENCODING 670 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CE |
CC |
6C |
3C |
3C |
6C |
CC |
0C |
0C |
0E |
00 |
ENDCHAR |
STARTCHAR uni029E |
ENCODING 671 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
F0 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni029F |
ENCODING 672 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
06 |
0D |
7C |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
0C |
1E |
00 |
ENDCHAR |
STARTCHAR uni02A0 |
ENCODING 673 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
06 |
1C |
18 |
7E |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02A1 |
ENCODING 674 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C0 |
70 |
30 |
FC |
30 |
30 |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02A2 |
ENCODING 675 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
7F |
D9 |
DA |
DA |
DA |
DC |
6F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02A3 |
ENCODING 676 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
7F |
DB |
DB |
DE |
DE |
DB |
6B |
03 |
1B |
0E |
00 |
ENDCHAR |
STARTCHAR uni02A4 |
ENCODING 677 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
7F |
D9 |
DA |
DA |
DB |
DD |
6F |
04 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02A5 |
ENCODING 678 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
60 |
60 |
F6 |
6D |
6C |
66 |
63 |
6B |
36 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02A6 |
ENCODING 679 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
26 |
6D |
6C |
FC |
6C |
6C |
6C |
6C |
6C |
3C |
0C |
2C |
18 |
00 |
ENDCHAR |
STARTCHAR uni02A7 |
ENCODING 680 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
60 |
60 |
F6 |
6D |
6C |
6C |
6E |
6D |
36 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02A8 |
ENCODING 681 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
D8 |
C0 |
FE |
DB |
DB |
DB |
DB |
DB |
DB |
03 |
03 |
0E |
00 |
ENDCHAR |
STARTCHAR uni02A9 |
ENCODING 682 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
66 |
6D |
6C |
66 |
63 |
6B |
F6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02AA |
ENCODING 683 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
6F |
6B |
63 |
66 |
6C |
6D |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02AB |
ENCODING 684 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
D6 |
7C |
6C |
28 |
C6 |
D6 |
7C |
6C |
28 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02AC |
ENCODING 685 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B0 |
ENCODING 688 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
F0 |
D8 |
D8 |
D8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B1 |
ENCODING 689 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
C0 |
F0 |
D8 |
D8 |
D8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B2 |
ENCODING 690 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
00 |
38 |
18 |
18 |
D8 |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B3 |
ENCODING 691 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
B0 |
D8 |
C0 |
C0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B4 |
ENCODING 692 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
18 |
D8 |
68 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B5 |
ENCODING 693 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
18 |
D8 |
68 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B6 |
ENCODING 694 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
D8 |
D8 |
F0 |
D8 |
D8 |
F0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B7 |
ENCODING 695 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C6 |
D6 |
7C |
6C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B8 |
ENCODING 696 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
D8 |
D8 |
78 |
18 |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02B9 |
ENCODING 697 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
30 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02BA |
ENCODING 698 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
36 |
6C |
D8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02BB |
ENCODING 699 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
30 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57929 |
ENCODING 700 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
18 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii64937 |
ENCODING 701 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
30 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02BE |
ENCODING 702 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
0C |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02BF |
ENCODING 703 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02C0 |
ENCODING 704 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
D8 |
18 |
30 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02C1 |
ENCODING 705 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
D8 |
C0 |
60 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02C2 |
ENCODING 706 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
70 |
C0 |
70 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02C3 |
ENCODING 707 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
70 |
18 |
70 |
C0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02C4 |
ENCODING 708 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
20 |
20 |
70 |
70 |
D8 |
D8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02C5 |
ENCODING 709 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
D8 |
D8 |
70 |
70 |
20 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR circumflex |
ENCODING 710 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR caron |
ENCODING 711 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02C8 |
ENCODING 712 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR macron |
ENCODING 713 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02CA |
ENCODING 714 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02CB |
ENCODING 715 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02CC |
ENCODING 716 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni02CD |
ENCODING 717 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni02CE |
ENCODING 718 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
0C |
00 |
ENDCHAR |
STARTCHAR uni02CF |
ENCODING 719 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
30 |
60 |
00 |
ENDCHAR |
STARTCHAR breve |
ENCODING 728 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dotaccent |
ENCODING 729 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ring |
ENCODING 730 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
6C |
38 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ogonek |
ENCODING 731 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
30 |
1C |
00 |
ENDCHAR |
STARTCHAR tilde |
ENCODING 732 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR hungarumlaut |
ENCODING 733 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
CC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni02EE |
ENCODING 750 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
6C |
6C |
48 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR gravecomb |
ENCODING 768 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR acutecomb |
ENCODING 769 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR tildecomb |
ENCODING 771 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
34 |
58 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR hookabovecomb |
ENCODING 777 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
18 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0312 |
ENCODING 786 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
30 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0313 |
ENCODING 787 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
18 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0314 |
ENCODING 788 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
30 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dotbelowcomb |
ENCODING 803 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni0340 |
ENCODING 832 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C0 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0341 |
ENCODING 833 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
06 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0374 |
ENCODING 884 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
20 |
40 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0375 |
ENCODING 885 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
20 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni037A |
ENCODING 890 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
30 |
34 |
18 |
00 |
ENDCHAR |
STARTCHAR uni037E |
ENCODING 894 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
18 |
18 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR tonos |
ENCODING 900 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dieresistonos |
ENCODING 901 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
6C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Alphatonos |
ENCODING 902 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR anoteleia |
ENCODING 903 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Epsilontonos |
ENCODING 904 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
3E |
32 |
30 |
34 |
3C |
34 |
30 |
30 |
32 |
3E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Etatonos |
ENCODING 905 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
33 |
33 |
33 |
33 |
3F |
33 |
33 |
33 |
33 |
33 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Iotatonos |
ENCODING 906 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Omicrontonos |
ENCODING 908 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
3C |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Upsilontonos |
ENCODING 910 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
66 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Omegatonos |
ENCODING 911 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
3E |
63 |
63 |
63 |
63 |
63 |
36 |
36 |
36 |
77 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR iotadieresistonos |
ENCODING 912 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
6C |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Alpha |
ENCODING 913 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Beta |
ENCODING 914 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Gamma |
ENCODING 915 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
60 |
60 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Delta |
ENCODING 916 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
38 |
38 |
6C |
6C |
C6 |
C6 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Epsilon |
ENCODING 917 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Zeta |
ENCODING 918 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
86 |
0C |
18 |
30 |
60 |
C2 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Eta |
ENCODING 919 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Theta |
ENCODING 920 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Iota |
ENCODING 921 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Kappa |
ENCODING 922 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Lambda |
ENCODING 923 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
38 |
38 |
6C |
6C |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Mu |
ENCODING 924 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Nu |
ENCODING 925 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Xi |
ENCODING 926 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
82 |
44 |
7C |
44 |
00 |
82 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Omicron |
ENCODING 927 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Pi |
ENCODING 928 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Rho |
ENCODING 929 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Sigma |
ENCODING 931 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
62 |
30 |
18 |
18 |
30 |
62 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Tau |
ENCODING 932 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Upsilon |
ENCODING 933 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Phi |
ENCODING 934 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
7C |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Chi |
ENCODING 935 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
6C |
7C |
38 |
38 |
7C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Psi |
ENCODING 936 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
92 |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Omega |
ENCODING 937 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
6C |
6C |
6C |
EE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Iotadieresis |
ENCODING 938 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
66 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Upsilondieresis |
ENCODING 939 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
66 |
00 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR alphatonos |
ENCODING 940 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR epsilontonos |
ENCODING 941 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
7C |
C6 |
C0 |
78 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR etatonos |
ENCODING 942 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
06 |
06 |
06 |
00 |
ENDCHAR |
STARTCHAR iotatonos |
ENCODING 943 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR upsilondieresistonos |
ENCODING 944 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
6C |
00 |
CC |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR alpha |
ENCODING 945 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR beta |
ENCODING 946 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
6C |
66 |
66 |
66 |
66 |
6C |
60 |
60 |
60 |
00 |
ENDCHAR |
STARTCHAR gamma |
ENCODING 947 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
46 |
6C |
2C |
2C |
38 |
18 |
18 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR delta |
ENCODING 948 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
30 |
18 |
7C |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR epsilon |
ENCODING 949 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
78 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR zeta |
ENCODING 950 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
46 |
7C |
18 |
30 |
60 |
60 |
C0 |
C0 |
C0 |
7C |
06 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR eta |
ENCODING 951 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
06 |
06 |
06 |
00 |
ENDCHAR |
STARTCHAR theta |
ENCODING 952 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
7E |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR iota |
ENCODING 953 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR kappa |
ENCODING 954 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
E6 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR lambda |
ENCODING 955 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
20 |
30 |
10 |
38 |
38 |
6C |
64 |
C6 |
C2 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR mu |
ENCODING 956 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
F6 |
C0 |
C0 |
C0 |
00 |
ENDCHAR |
STARTCHAR nu |
ENCODING 957 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
66 |
6C |
3C |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR xi |
ENCODING 958 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
3C |
30 |
60 |
3C |
60 |
C0 |
C0 |
C0 |
7C |
06 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR omicron |
ENCODING 959 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR pi |
ENCODING 960 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
6C |
6C |
6C |
6C |
6C |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR rho |
ENCODING 961 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
66 |
7C |
60 |
60 |
60 |
00 |
ENDCHAR |
STARTCHAR sigma1 |
ENCODING 962 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
7C |
06 |
06 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR sigma |
ENCODING 963 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR tau |
ENCODING 964 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
18 |
18 |
18 |
18 |
18 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR upsilon |
ENCODING 965 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR phi |
ENCODING 966 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR chi |
ENCODING 967 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
86 |
46 |
2C |
2C |
18 |
30 |
68 |
68 |
C4 |
C2 |
00 |
ENDCHAR |
STARTCHAR psi |
ENCODING 968 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
92 |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR omega |
ENCODING 969 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
C6 |
D6 |
D6 |
D6 |
D6 |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR iotadieresis |
ENCODING 970 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR upsilondieresis |
ENCODING 971 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
CC |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR omicrontonos |
ENCODING 972 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR upsilontonos |
ENCODING 973 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
CC |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR omegatonos |
ENCODING 974 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
6C |
C6 |
D6 |
D6 |
D6 |
D6 |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03D0 |
ENCODING 976 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
6C |
7C |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR theta1 |
ENCODING 977 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
36 |
1E |
C6 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Upsilon1 |
ENCODING 978 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C2 |
65 |
24 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03D3 |
ENCODING 979 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
C0 |
21 |
32 |
12 |
1C |
0C |
0C |
0C |
0C |
0C |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03D4 |
ENCODING 980 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C2 |
65 |
24 |
38 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR phi1 |
ENCODING 981 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
10 |
7C |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR omega1 |
ENCODING 982 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
6C |
C6 |
D6 |
D6 |
D6 |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03D7 |
ENCODING 983 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
46 |
A6 |
2C |
38 |
68 |
CA |
C4 |
0C |
18 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03DA |
ENCODING 986 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C0 |
60 |
3C |
06 |
06 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR uni03DB |
ENCODING 987 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
C0 |
C0 |
C0 |
C0 |
C0 |
7C |
06 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR uni03DC |
ENCODING 988 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
60 |
78 |
68 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03DD |
ENCODING 989 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
32 |
30 |
30 |
3C |
34 |
30 |
30 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni03DE |
ENCODING 990 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
60 |
30 |
30 |
60 |
63 |
FF |
C6 |
06 |
0C |
0C |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03DF |
ENCODING 991 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
60 |
60 |
FE |
FE |
0C |
0C |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03E0 |
ENCODING 992 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
AC |
26 |
26 |
0B |
0B |
1B |
1B |
1B |
1B |
03 |
02 |
04 |
00 |
ENDCHAR |
STARTCHAR uni03E1 |
ENCODING 993 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C0 |
60 |
30 |
18 |
28 |
4C |
14 |
24 |
06 |
02 |
02 |
00 |
ENDCHAR |
STARTCHAR uni03E2 |
ENCODING 994 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
6D |
03 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uni03E3 |
ENCODING 995 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DB |
DB |
DB |
DB |
DB |
DB |
6D |
03 |
7E |
00 |
00 |
ENDCHAR |
STARTCHAR uni03E4 |
ENCODING 996 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
D6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03E5 |
ENCODING 997 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
36 |
66 |
66 |
66 |
66 |
3E |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03E6 |
ENCODING 998 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
C0 |
C0 |
FC |
C6 |
C6 |
C6 |
C6 |
C6 |
06 |
76 |
9C |
00 |
ENDCHAR |
STARTCHAR uni03E7 |
ENCODING 999 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
7C |
D6 |
66 |
06 |
06 |
66 |
BC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03E8 |
ENCODING 1000 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
06 |
3C |
60 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03E9 |
ENCODING 1001 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
26 |
1C |
70 |
C0 |
C2 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03EA |
ENCODING 1002 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
68 |
38 |
30 |
38 |
38 |
4C |
4C |
86 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03EB |
ENCODING 1003 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
64 |
BA |
30 |
38 |
28 |
4C |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03EC |
ENCODING 1004 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
C0 |
CC |
D6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03ED |
ENCODING 1005 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
C0 |
DC |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03EE |
ENCODING 1006 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
7E |
99 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03EF |
ENCODING 1007 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
1C |
18 |
7E |
58 |
18 |
18 |
18 |
38 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03F0 |
ENCODING 1008 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
46 |
A6 |
2C |
38 |
68 |
CA |
C4 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03F1 |
ENCODING 1009 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
FC |
C0 |
60 |
3C |
06 |
00 |
ENDCHAR |
STARTCHAR uni03F2 |
ENCODING 1010 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni03F3 |
ENCODING 1011 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
06 |
00 |
0E |
06 |
06 |
06 |
06 |
06 |
06 |
66 |
66 |
3C |
00 |
ENDCHAR |
STARTCHAR uni0400 |
ENCODING 1024 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
18 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10023 |
ENCODING 1025 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10051 |
ENCODING 1026 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
B2 |
30 |
3E |
33 |
33 |
33 |
33 |
33 |
33 |
03 |
06 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10052 |
ENCODING 1027 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
FE |
66 |
62 |
60 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10053 |
ENCODING 1028 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
F8 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10054 |
ENCODING 1029 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
60 |
38 |
0C |
06 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10055 |
ENCODING 1030 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10056 |
ENCODING 1031 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
66 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10057 |
ENCODING 1032 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
0C |
0C |
0C |
0C |
0C |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10058 |
ENCODING 1033 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
D8 |
D8 |
D8 |
DE |
DB |
DB |
DB |
DB |
DE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10059 |
ENCODING 1034 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D8 |
D8 |
D8 |
D8 |
FE |
DB |
DB |
DB |
DB |
DE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10060 |
ENCODING 1035 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
B2 |
30 |
3E |
33 |
33 |
33 |
33 |
33 |
33 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10061 |
ENCODING 1036 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
E6 |
66 |
66 |
6C |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni040D |
ENCODING 1037 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
18 |
00 |
C6 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10062 |
ENCODING 1038 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10145 |
ENCODING 1039 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
FE |
38 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR afii10017 |
ENCODING 1040 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10018 |
ENCODING 1041 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
60 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10019 |
ENCODING 1042 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10020 |
ENCODING 1043 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
60 |
60 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10021 |
ENCODING 1044 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
FE |
C6 |
82 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10022 |
ENCODING 1045 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10024 |
ENCODING 1046 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D6 |
D6 |
D6 |
7C |
38 |
7C |
D6 |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10025 |
ENCODING 1047 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
86 |
06 |
3C |
06 |
06 |
86 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10026 |
ENCODING 1048 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10027 |
ENCODING 1049 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
C6 |
C6 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10028 |
ENCODING 1050 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10029 |
ENCODING 1051 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3E |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10030 |
ENCODING 1052 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10031 |
ENCODING 1053 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10032 |
ENCODING 1054 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10033 |
ENCODING 1055 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10034 |
ENCODING 1056 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10035 |
ENCODING 1057 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10036 |
ENCODING 1058 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10037 |
ENCODING 1059 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10038 |
ENCODING 1060 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
7C |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10039 |
ENCODING 1061 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
6C |
7C |
38 |
38 |
7C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10040 |
ENCODING 1062 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
FE |
06 |
02 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10041 |
ENCODING 1063 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10042 |
ENCODING 1064 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10043 |
ENCODING 1065 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
FF |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10044 |
ENCODING 1066 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
B0 |
B0 |
30 |
3C |
36 |
36 |
36 |
36 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10045 |
ENCODING 1067 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C3 |
C3 |
C3 |
C3 |
F3 |
DB |
DB |
DB |
DB |
F3 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10046 |
ENCODING 1068 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10047 |
ENCODING 1069 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
86 |
06 |
3E |
06 |
06 |
86 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10048 |
ENCODING 1070 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
9C |
B6 |
B6 |
B6 |
F6 |
B6 |
B6 |
B6 |
B6 |
9C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10049 |
ENCODING 1071 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
CC |
CC |
CC |
7C |
6C |
6C |
6C |
6C |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10065 |
ENCODING 1072 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10066 |
ENCODING 1073 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
7C |
C0 |
C0 |
FC |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10067 |
ENCODING 1074 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FC |
66 |
66 |
7C |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10068 |
ENCODING 1075 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
66 |
62 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10069 |
ENCODING 1076 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
6C |
6C |
6C |
6C |
6C |
FE |
C6 |
82 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10070 |
ENCODING 1077 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10072 |
ENCODING 1078 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
D6 |
D6 |
D6 |
7C |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10073 |
ENCODING 1079 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
3C |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10074 |
ENCODING 1080 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10075 |
ENCODING 1081 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10076 |
ENCODING 1082 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
E6 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10077 |
ENCODING 1083 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3E |
66 |
66 |
66 |
66 |
66 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10078 |
ENCODING 1084 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10079 |
ENCODING 1085 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10080 |
ENCODING 1086 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10081 |
ENCODING 1087 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10082 |
ENCODING 1088 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
7C |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR afii10083 |
ENCODING 1089 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10084 |
ENCODING 1090 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
5A |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10085 |
ENCODING 1091 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR afii10086 |
ENCODING 1092 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
7C |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR afii10087 |
ENCODING 1093 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
6C |
38 |
38 |
38 |
6C |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10088 |
ENCODING 1094 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
FE |
06 |
02 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10089 |
ENCODING 1095 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10090 |
ENCODING 1096 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
D6 |
D6 |
D6 |
D6 |
D6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10091 |
ENCODING 1097 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
D6 |
D6 |
D6 |
D6 |
D6 |
FF |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10092 |
ENCODING 1098 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
F8 |
B0 |
30 |
3C |
36 |
36 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10093 |
ENCODING 1099 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C3 |
C3 |
C3 |
F3 |
DB |
DB |
F3 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10094 |
ENCODING 1100 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
F0 |
60 |
60 |
7C |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10095 |
ENCODING 1101 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
3E |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10096 |
ENCODING 1102 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
9C |
B6 |
B6 |
F6 |
B6 |
B6 |
9C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10097 |
ENCODING 1103 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
CC |
CC |
7C |
6C |
6C |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0450 |
ENCODING 1104 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10071 |
ENCODING 1105 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10099 |
ENCODING 1106 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
F8 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
06 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR afii10100 |
ENCODING 1107 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
FE |
66 |
62 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10101 |
ENCODING 1108 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
F8 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10102 |
ENCODING 1109 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10103 |
ENCODING 1110 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10104 |
ENCODING 1111 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10105 |
ENCODING 1112 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
06 |
00 |
0E |
06 |
06 |
06 |
06 |
06 |
06 |
66 |
66 |
3C |
00 |
ENDCHAR |
STARTCHAR afii10106 |
ENCODING 1113 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
78 |
D8 |
D8 |
DE |
DB |
DB |
DE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10107 |
ENCODING 1114 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
D8 |
D8 |
D8 |
FE |
DB |
DB |
DE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10108 |
ENCODING 1115 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
F8 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10109 |
ENCODING 1116 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
E6 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni045D |
ENCODING 1117 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10110 |
ENCODING 1118 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR afii10193 |
ENCODING 1119 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
FE |
38 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR uni0460 |
ENCODING 1120 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
C6 |
C6 |
D6 |
D6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0461 |
ENCODING 1121 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10146 |
ENCODING 1122 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
FC |
B4 |
30 |
3C |
36 |
36 |
36 |
36 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10194 |
ENCODING 1123 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
30 |
FC |
B4 |
30 |
3C |
36 |
36 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0464 |
ENCODING 1124 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CE |
DB |
D9 |
D8 |
FE |
D8 |
D8 |
D9 |
DB |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0465 |
ENCODING 1125 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CE |
DB |
D8 |
FE |
D8 |
DB |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0466 |
ENCODING 1126 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
38 |
6C |
6C |
6C |
FE |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0467 |
ENCODING 1127 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
38 |
38 |
6C |
7C |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0468 |
ENCODING 1128 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
88 |
8C |
9C |
96 |
F6 |
B6 |
BF |
AB |
EB |
EB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0469 |
ENCODING 1129 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
88 |
8C |
9C |
F6 |
BE |
AB |
EB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni046A |
ENCODING 1130 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
6C |
6C |
38 |
7C |
D6 |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni046B |
ENCODING 1131 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
C6 |
6C |
7C |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni046C |
ENCODING 1132 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
A3 |
B2 |
96 |
FC |
9C |
BE |
AA |
AB |
EB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni046D |
ENCODING 1133 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
BF |
A3 |
96 |
FE |
AB |
AB |
EB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni046E |
ENCODING 1134 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
10 |
7C |
C6 |
06 |
06 |
7C |
06 |
06 |
06 |
7C |
C0 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni046F |
ENCODING 1135 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
6C |
38 |
10 |
00 |
7C |
86 |
06 |
7C |
06 |
06 |
7C |
C0 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni0470 |
ENCODING 1136 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
96 |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0471 |
ENCODING 1137 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
10 |
96 |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR afii10147 |
ENCODING 1138 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10195 |
ENCODING 1139 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
FE |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10148 |
ENCODING 1140 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C2 |
C6 |
C6 |
C4 |
CC |
6C |
68 |
78 |
38 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10196 |
ENCODING 1141 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C2 |
C6 |
64 |
6C |
38 |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0476 |
ENCODING 1142 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
CC |
66 |
00 |
C2 |
C6 |
C4 |
C4 |
6C |
68 |
78 |
38 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0477 |
ENCODING 1143 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
66 |
00 |
C2 |
C6 |
64 |
6C |
38 |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0478 |
ENCODING 1144 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
D8 |
D8 |
DB |
DB |
DB |
DB |
DB |
DB |
6F |
03 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR uni0479 |
ENCODING 1145 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
73 |
DB |
DB |
DB |
DB |
DB |
6F |
03 |
06 |
1C |
00 |
ENDCHAR |
STARTCHAR uni047A |
ENCODING 1146 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
7C |
D6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
D6 |
7C |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni047B |
ENCODING 1147 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
7C |
D6 |
C6 |
C6 |
C6 |
D6 |
7C |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni047C |
ENCODING 1148 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
7C |
40 |
6C |
C6 |
C6 |
D6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni047D |
ENCODING 1149 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
04 |
7C |
40 |
00 |
6C |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni047E |
ENCODING 1150 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
54 |
00 |
6C |
C6 |
C6 |
D6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni047F |
ENCODING 1151 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
54 |
00 |
6C |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0480 |
ENCODING 1152 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C0 |
C0 |
60 |
3C |
0C |
0C |
0C |
00 |
ENDCHAR |
STARTCHAR uni0481 |
ENCODING 1153 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C0 |
78 |
18 |
18 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0482 |
ENCODING 1154 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
06 |
3C |
0F |
18 |
18 |
F0 |
3C |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0483 |
ENCODING 1155 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
04 |
7C |
40 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0484 |
ENCODING 1156 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
24 |
44 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0485 |
ENCODING 1157 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
40 |
7C |
40 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0486 |
ENCODING 1158 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
04 |
7C |
04 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0488 |
ENCODING 1160 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
66 |
00 |
C3 |
00 |
66 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0489 |
ENCODING 1161 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
50 |
46 |
00 |
82 |
41 |
00 |
62 |
0A |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni048A |
ENCODING 1162 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
C6 |
C6 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni048B |
ENCODING 1163 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni048C |
ENCODING 1164 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
60 |
F0 |
60 |
60 |
60 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni048D |
ENCODING 1165 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
60 |
F0 |
60 |
60 |
7C |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni048E |
ENCODING 1166 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
6E |
64 |
7A |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni048F |
ENCODING 1167 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
6E |
64 |
7A |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR afii10050 |
ENCODING 1168 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
02 |
06 |
FE |
60 |
60 |
60 |
60 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10098 |
ENCODING 1169 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
02 |
06 |
FE |
60 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0492 |
ENCODING 1170 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
60 |
F8 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0493 |
ENCODING 1171 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
66 |
62 |
F8 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0494 |
ENCODING 1172 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
60 |
7C |
66 |
66 |
66 |
66 |
F6 |
06 |
16 |
0C |
00 |
ENDCHAR |
STARTCHAR uni0495 |
ENCODING 1173 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
66 |
62 |
78 |
6C |
66 |
F6 |
06 |
16 |
0C |
00 |
ENDCHAR |
STARTCHAR uni0496 |
ENCODING 1174 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D6 |
D6 |
D6 |
7C |
38 |
7C |
D6 |
D6 |
D6 |
D7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0497 |
ENCODING 1175 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
D6 |
D6 |
D6 |
7C |
D6 |
D6 |
D7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0498 |
ENCODING 1176 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
86 |
06 |
3C |
06 |
06 |
86 |
C6 |
7C |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR uni0499 |
ENCODING 1177 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
3C |
06 |
C6 |
7C |
30 |
60 |
38 |
00 |
ENDCHAR |
STARTCHAR uni049A |
ENCODING 1178 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni049B |
ENCODING 1179 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
E6 |
6C |
78 |
78 |
6C |
66 |
E7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni049C |
ENCODING 1180 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
D6 |
D6 |
DC |
F8 |
DC |
D6 |
D6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni049D |
ENCODING 1181 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
D6 |
DC |
F8 |
DC |
D6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni049E |
ENCODING 1182 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
F6 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni049F |
ENCODING 1183 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
F0 |
66 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04A0 |
ENCODING 1184 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F3 |
B3 |
B3 |
36 |
3C |
3C |
36 |
33 |
33 |
73 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04A1 |
ENCODING 1185 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
F3 |
B6 |
BC |
3C |
36 |
33 |
73 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04A2 |
ENCODING 1186 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04A3 |
ENCODING 1187 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04A4 |
ENCODING 1188 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DF |
DB |
D9 |
D8 |
F8 |
D8 |
D8 |
D8 |
D8 |
D8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04A5 |
ENCODING 1189 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DF |
DB |
D9 |
F8 |
D8 |
D8 |
D8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04A6 |
ENCODING 1190 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
D8 |
D8 |
D8 |
DE |
DB |
DB |
DB |
DB |
DB |
03 |
0B |
06 |
00 |
ENDCHAR |
STARTCHAR uni04A7 |
ENCODING 1191 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
D8 |
D8 |
D8 |
FE |
DB |
DB |
DB |
03 |
0B |
06 |
00 |
ENDCHAR |
STARTCHAR uni04A8 |
ENCODING 1192 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C2 |
CC |
D6 |
D6 |
D6 |
D6 |
D6 |
CC |
7A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04A9 |
ENCODING 1193 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C2 |
CC |
D6 |
D6 |
CC |
7A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04AA |
ENCODING 1194 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR uni04AB |
ENCODING 1195 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR uni04AC |
ENCODING 1196 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
0C |
04 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04AD |
ENCODING 1197 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
5A |
18 |
18 |
18 |
18 |
3C |
0C |
04 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04AE |
ENCODING 1198 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04AF |
ENCODING 1199 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
3C |
00 |
ENDCHAR |
STARTCHAR uni04B0 |
ENCODING 1200 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
66 |
66 |
3C |
18 |
7E |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04B1 |
ENCODING 1201 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
66 |
66 |
3C |
18 |
7E |
18 |
3C |
00 |
ENDCHAR |
STARTCHAR uni04B2 |
ENCODING 1202 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
6C |
7C |
38 |
38 |
7C |
6C |
C6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04B3 |
ENCODING 1203 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
6C |
38 |
38 |
38 |
6C |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04B4 |
ENCODING 1204 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F6 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
7F |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04B5 |
ENCODING 1205 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
F6 |
66 |
66 |
66 |
66 |
66 |
7F |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04B6 |
ENCODING 1206 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
06 |
07 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04B7 |
ENCODING 1207 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
07 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04B8 |
ENCODING 1208 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
D6 |
D6 |
7E |
16 |
16 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04B9 |
ENCODING 1209 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
D6 |
D6 |
7E |
16 |
16 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04BA |
ENCODING 1210 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
C0 |
C0 |
FC |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04BB |
ENCODING 1211 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C0 |
C0 |
C0 |
FC |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04BC |
ENCODING 1212 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
33 |
B3 |
B3 |
7F |
30 |
30 |
30 |
33 |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04BD |
ENCODING 1213 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
9E |
B3 |
7F |
30 |
30 |
33 |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04BE |
ENCODING 1214 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
33 |
B3 |
B3 |
7F |
30 |
30 |
30 |
33 |
1E |
0C |
18 |
0E |
00 |
ENDCHAR |
STARTCHAR uni04BF |
ENCODING 1215 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
9E |
B3 |
7F |
30 |
30 |
33 |
1E |
0C |
18 |
0E |
00 |
ENDCHAR |
STARTCHAR uni04C0 |
ENCODING 1216 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04C1 |
ENCODING 1217 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
D6 |
D6 |
D6 |
7C |
38 |
7C |
D6 |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04C2 |
ENCODING 1218 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
D6 |
D6 |
D6 |
7C |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04C3 |
ENCODING 1219 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
06 |
16 |
0C |
00 |
ENDCHAR |
STARTCHAR uni04C4 |
ENCODING 1220 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
E6 |
6C |
78 |
78 |
6C |
66 |
E6 |
06 |
16 |
0C |
00 |
ENDCHAR |
STARTCHAR uni04C5 |
ENCODING 1221 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3E |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04C6 |
ENCODING 1222 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3E |
66 |
66 |
66 |
66 |
66 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04C7 |
ENCODING 1223 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
06 |
16 |
0C |
00 |
ENDCHAR |
STARTCHAR uni04C8 |
ENCODING 1224 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
06 |
16 |
0C |
00 |
ENDCHAR |
STARTCHAR uni04C9 |
ENCODING 1225 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04CA |
ENCODING 1226 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04CB |
ENCODING 1227 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
06 |
0E |
0C |
08 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04CC |
ENCODING 1228 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
0E |
0C |
08 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04CD |
ENCODING 1229 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
C6 |
C6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04CE |
ENCODING 1230 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C7 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D0 |
ENCODING 1232 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D1 |
ENCODING 1233 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D2 |
ENCODING 1234 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D3 |
ENCODING 1235 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D4 |
ENCODING 1236 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3E |
6C |
CC |
CC |
FE |
CC |
CC |
CC |
CC |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D5 |
ENCODING 1237 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
76 |
36 |
7E |
D8 |
D8 |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D6 |
ENCODING 1238 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D7 |
ENCODING 1239 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04D8 |
ENCODING 1240 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
06 |
06 |
06 |
FE |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii10846 |
ENCODING 1241 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
06 |
FE |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04DA |
ENCODING 1242 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
7C |
C6 |
06 |
06 |
FE |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04DB |
ENCODING 1243 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
7C |
C6 |
06 |
06 |
FE |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04DC |
ENCODING 1244 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
D6 |
D6 |
D6 |
7C |
38 |
7C |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04DD |
ENCODING 1245 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
D6 |
D6 |
D6 |
7C |
D6 |
D6 |
D6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04DE |
ENCODING 1246 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
7C |
C6 |
86 |
06 |
3C |
06 |
86 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04DF |
ENCODING 1247 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
7C |
C6 |
06 |
3C |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E0 |
ENCODING 1248 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
06 |
0C |
18 |
3C |
06 |
06 |
86 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E1 |
ENCODING 1249 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
06 |
0C |
18 |
3C |
06 |
06 |
06 |
C6 |
7C |
00 |
ENDCHAR |
STARTCHAR uni04E2 |
ENCODING 1250 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
C6 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E3 |
ENCODING 1251 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E4 |
ENCODING 1252 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C6 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E5 |
ENCODING 1253 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
C6 |
CE |
DE |
FE |
F6 |
E6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E6 |
ENCODING 1254 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E7 |
ENCODING 1255 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E8 |
ENCODING 1256 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04E9 |
ENCODING 1257 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
FE |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04EA |
ENCODING 1258 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
7C |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04EB |
ENCODING 1259 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
7C |
C6 |
C6 |
FE |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04EC |
ENCODING 1260 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
78 |
CC |
86 |
06 |
3E |
06 |
86 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04ED |
ENCODING 1261 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
7C |
C6 |
06 |
3E |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04EE |
ENCODING 1262 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04EF |
ENCODING 1263 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni04F0 |
ENCODING 1264 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04F1 |
ENCODING 1265 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni04F2 |
ENCODING 1266 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
66 |
CC |
00 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04F3 |
ENCODING 1267 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
CC |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni04F4 |
ENCODING 1268 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04F5 |
ENCODING 1269 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
C6 |
C6 |
C6 |
7E |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04F8 |
ENCODING 1272 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C3 |
C3 |
C3 |
F3 |
DB |
DB |
DB |
DB |
F3 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni04F9 |
ENCODING 1273 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
C3 |
C3 |
C3 |
F3 |
DB |
DB |
F3 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0500 |
ENCODING 1280 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
0C |
0C |
0C |
7C |
CC |
CC |
CC |
CC |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0501 |
ENCODING 1281 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0502 |
ENCODING 1282 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
0C |
0C |
0C |
7C |
CD |
CD |
CD |
CD |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0503 |
ENCODING 1283 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CD |
CD |
CD |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0504 |
ENCODING 1284 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
8C |
0C |
38 |
0D |
0D |
0D |
0D |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0505 |
ENCODING 1285 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
78 |
CC |
0C |
39 |
0D |
0D |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0506 |
ENCODING 1286 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
86 |
06 |
3C |
06 |
06 |
06 |
06 |
07 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0507 |
ENCODING 1287 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
06 |
3C |
06 |
06 |
07 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0508 |
ENCODING 1288 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
6C |
6C |
6C |
6C |
6D |
6D |
6D |
6D |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0509 |
ENCODING 1289 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
6C |
6C |
6D |
6D |
6D |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni050A |
ENCODING 1290 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
CC |
CC |
CC |
FC |
CD |
CD |
CD |
CD |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni050B |
ENCODING 1291 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
FD |
CD |
CD |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni050C |
ENCODING 1292 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
CE |
C6 |
C6 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni050D |
ENCODING 1293 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
CE |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni050E |
ENCODING 1294 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
1B |
1B |
1B |
1B |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni050F |
ENCODING 1295 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7E |
5A |
18 |
1B |
1B |
1B |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0530 |
ENCODING 1328 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
64 |
94 |
BA |
52 |
4C |
30 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0531 |
ENCODING 1329 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CF |
7B |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0532 |
ENCODING 1330 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
60 |
60 |
7E |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0533 |
ENCODING 1331 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
CC |
CC |
CC |
7F |
0C |
0C |
0C |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0534 |
ENCODING 1332 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
CC |
CC |
CC |
CF |
0C |
0C |
0C |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0535 |
ENCODING 1333 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
7E |
60 |
60 |
66 |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0536 |
ENCODING 1334 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
3E |
06 |
0C |
D8 |
FE |
C3 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0537 |
ENCODING 1335 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
7E |
60 |
60 |
60 |
60 |
60 |
60 |
7C |
06 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0538 |
ENCODING 1336 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
66 |
60 |
60 |
60 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0539 |
ENCODING 1337 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
CF |
D6 |
D6 |
D6 |
D6 |
CC |
C0 |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni053A |
ENCODING 1338 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
0C |
0C |
0C |
7F |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni053B |
ENCODING 1339 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
7C |
66 |
66 |
66 |
66 |
66 |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni053C |
ENCODING 1340 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
60 |
60 |
60 |
60 |
60 |
60 |
60 |
7C |
06 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni053D |
ENCODING 1341 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
F6 |
D6 |
D6 |
D6 |
D6 |
CC |
C0 |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni053E |
ENCODING 1342 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
7F |
24 |
66 |
66 |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni053F |
ENCODING 1343 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
66 |
66 |
66 |
66 |
66 |
3E |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0540 |
ENCODING 1344 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
30 |
18 |
0C |
18 |
30 |
60 |
F0 |
3C |
0E |
04 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0541 |
ENCODING 1345 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
06 |
06 |
06 |
6C |
D8 |
6E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0542 |
ENCODING 1346 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
CC |
CC |
CC |
CC |
0C |
0C |
0C |
0F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0543 |
ENCODING 1347 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
30 |
60 |
F8 |
6C |
66 |
66 |
66 |
66 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0544 |
ENCODING 1348 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CF |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0545 |
ENCODING 1349 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
06 |
06 |
7C |
06 |
06 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0546 |
ENCODING 1350 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
60 |
66 |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0547 |
ENCODING 1351 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
06 |
3E |
66 |
60 |
60 |
60 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0548 |
ENCODING 1352 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0549 |
ENCODING 1353 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
06 |
06 |
06 |
6C |
38 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni054A |
ENCODING 1354 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
D6 |
D6 |
D6 |
D6 |
D6 |
16 |
16 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni054B |
ENCODING 1355 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
76 |
1E |
0E |
0C |
D8 |
FE |
C3 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni054C |
ENCODING 1356 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
CC |
CC |
CC |
CF |
CC |
CC |
CC |
CC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni054D |
ENCODING 1357 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni054E |
ENCODING 1358 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
0C |
CC |
CC |
CC |
CC |
7C |
0C |
0C |
0F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni054F |
ENCODING 1359 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
60 |
30 |
18 |
0C |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0550 |
ENCODING 1360 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
66 |
60 |
60 |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0551 |
ENCODING 1361 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
3C |
66 |
06 |
06 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0552 |
ENCODING 1362 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
7C |
66 |
66 |
66 |
66 |
63 |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0553 |
ENCODING 1363 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
7C |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
7C |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0554 |
ENCODING 1364 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
7C |
60 |
60 |
FE |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0555 |
ENCODING 1365 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0556 |
ENCODING 1366 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
D0 |
D0 |
D0 |
7C |
16 |
16 |
16 |
D6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0559 |
ENCODING 1369 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
30 |
30 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni055A |
ENCODING 1370 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
18 |
18 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni055B |
ENCODING 1371 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
30 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni055C |
ENCODING 1372 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
06 |
3C |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni055D |
ENCODING 1373 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
18 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni055E |
ENCODING 1374 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
1C |
36 |
6C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni055F |
ENCODING 1375 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
60 |
3E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0561 |
ENCODING 1377 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
6A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0562 |
ENCODING 1378 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
66 |
66 |
66 |
60 |
60 |
7E |
60 |
60 |
60 |
00 |
ENDCHAR |
STARTCHAR uni0563 |
ENCODING 1379 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
CC |
CC |
CC |
CC |
CC |
7F |
0C |
0C |
0C |
00 |
ENDCHAR |
STARTCHAR uni0564 |
ENCODING 1380 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
F8 |
CC |
CC |
CC |
CC |
CC |
CF |
0C |
0C |
0C |
00 |
ENDCHAR |
STARTCHAR uni0565 |
ENCODING 1381 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
7E |
60 |
60 |
66 |
66 |
66 |
66 |
3E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0566 |
ENCODING 1382 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
0C |
0F |
00 |
ENDCHAR |
STARTCHAR uni0567 |
ENCODING 1383 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
60 |
7C |
60 |
60 |
60 |
60 |
60 |
78 |
0C |
18 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0568 |
ENCODING 1384 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
66 |
66 |
66 |
66 |
66 |
66 |
60 |
60 |
7E |
00 |
ENDCHAR |
STARTCHAR uni0569 |
ENCODING 1385 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FC |
C6 |
C6 |
CF |
D6 |
D6 |
CC |
C0 |
C0 |
C0 |
00 |
ENDCHAR |
STARTCHAR uni056A |
ENCODING 1386 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
0C |
0C |
7F |
CC |
CC |
CC |
CC |
CC |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni056B |
ENCODING 1387 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
60 |
7C |
66 |
66 |
66 |
66 |
66 |
66 |
60 |
60 |
60 |
00 |
ENDCHAR |
STARTCHAR uni056C |
ENCODING 1388 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
3E |
00 |
ENDCHAR |
STARTCHAR uni056D |
ENCODING 1389 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
C0 |
F6 |
D6 |
D6 |
D6 |
D6 |
D6 |
CA |
C0 |
C0 |
C0 |
00 |
ENDCHAR |
STARTCHAR uni056E |
ENCODING 1390 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
38 |
0C |
7F |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni056F |
ENCODING 1391 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
60 |
66 |
66 |
66 |
66 |
66 |
66 |
3E |
06 |
06 |
06 |
00 |
ENDCHAR |
STARTCHAR uni0570 |
ENCODING 1392 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
60 |
7C |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0571 |
ENCODING 1393 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
1C |
0C |
18 |
3C |
64 |
66 |
62 |
63 |
3D |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0572 |
ENCODING 1394 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
F8 |
CC |
CC |
CC |
CC |
CC |
CC |
0C |
0C |
0F |
00 |
ENDCHAR |
STARTCHAR uni0573 |
ENCODING 1395 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0E |
18 |
30 |
F8 |
6C |
66 |
66 |
66 |
66 |
3E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0574 |
ENCODING 1396 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0F |
0C |
0C |
CC |
CC |
CC |
CC |
CC |
CC |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0575 |
ENCODING 1397 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
6C |
38 |
00 |
ENDCHAR |
STARTCHAR uni0576 |
ENCODING 1398 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
66 |
66 |
66 |
66 |
66 |
66 |
3E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0577 |
ENCODING 1399 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
66 |
66 |
66 |
06 |
0C |
18 |
30 |
60 |
3E |
00 |
ENDCHAR |
STARTCHAR uni0578 |
ENCODING 1400 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0579 |
ENCODING 1401 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
18 |
18 |
0C |
06 |
0C |
18 |
30 |
60 |
3E |
00 |
ENDCHAR |
STARTCHAR uni057A |
ENCODING 1402 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
D6 |
D6 |
D6 |
D6 |
D6 |
D6 |
7E |
06 |
06 |
06 |
00 |
ENDCHAR |
STARTCHAR uni057B |
ENCODING 1403 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
66 |
66 |
66 |
76 |
1C |
18 |
30 |
60 |
3E |
00 |
ENDCHAR |
STARTCHAR uni057C |
ENCODING 1404 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
F8 |
CC |
CC |
CC |
CC |
CC |
CF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni057D |
ENCODING 1405 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
66 |
66 |
66 |
3E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni057E |
ENCODING 1406 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
0C |
0C |
CC |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
0C |
0F |
00 |
ENDCHAR |
STARTCHAR uni057F |
ENCODING 1407 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
D6 |
D6 |
D6 |
D6 |
D6 |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0580 |
ENCODING 1408 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
66 |
66 |
66 |
66 |
66 |
66 |
60 |
60 |
60 |
00 |
ENDCHAR |
STARTCHAR uni0581 |
ENCODING 1409 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3E |
66 |
66 |
66 |
66 |
66 |
3E |
06 |
66 |
3C |
00 |
ENDCHAR |
STARTCHAR uni0582 |
ENCODING 1410 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
30 |
30 |
30 |
30 |
30 |
30 |
3E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0583 |
ENCODING 1411 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
10 |
DC |
D6 |
D6 |
D6 |
D6 |
D6 |
76 |
10 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR uni0584 |
ENCODING 1412 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
66 |
66 |
66 |
66 |
7C |
60 |
FE |
60 |
60 |
00 |
ENDCHAR |
STARTCHAR uni0585 |
ENCODING 1413 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0586 |
ENCODING 1414 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
D0 |
D0 |
7C |
16 |
16 |
16 |
16 |
D6 |
7C |
10 |
10 |
10 |
00 |
ENDCHAR |
STARTCHAR uni0587 |
ENCODING 1415 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
C0 |
C0 |
C0 |
CC |
CC |
CC |
CC |
77 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0589 |
ENCODING 1417 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni058A |
ENCODING 1418 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0591 |
ENCODING 1425 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
10 |
38 |
6C |
ENDCHAR |
STARTCHAR uni0592 |
ENCODING 1426 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
00 |
66 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0593 |
ENCODING 1427 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
38 |
10 |
38 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0594 |
ENCODING 1428 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
00 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0595 |
ENCODING 1429 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
60 |
6C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0596 |
ENCODING 1430 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
18 |
0C |
00 |
ENDCHAR |
STARTCHAR uni0597 |
ENCODING 1431 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0598 |
ENCODING 1432 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
74 |
D6 |
5C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0599 |
ENCODING 1433 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C0 |
60 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni059A |
ENCODING 1434 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
03 |
06 |
03 |
00 |
ENDCHAR |
STARTCHAR uni059B |
ENCODING 1435 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
28 |
18 |
30 |
00 |
ENDCHAR |
STARTCHAR uni059C |
ENCODING 1436 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni059D |
ENCODING 1437 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
06 |
04 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni059E |
ENCODING 1438 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1B |
36 |
24 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni059F |
ENCODING 1439 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
44 |
AA |
6C |
28 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05A0 |
ENCODING 1440 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
0A |
0C |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05A1 |
ENCODING 1441 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
40 |
50 |
E0 |
80 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05A3 |
ENCODING 1443 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
0C |
3C |
00 |
ENDCHAR |
STARTCHAR uni05A4 |
ENCODING 1444 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
30 |
18 |
00 |
ENDCHAR |
STARTCHAR uni05A5 |
ENCODING 1445 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
30 |
60 |
00 |
ENDCHAR |
STARTCHAR uni05A6 |
ENCODING 1446 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
24 |
6C |
D8 |
00 |
ENDCHAR |
STARTCHAR uni05A7 |
ENCODING 1447 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
30 |
08 |
30 |
ENDCHAR |
STARTCHAR uni05A8 |
ENCODING 1448 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05A9 |
ENCODING 1449 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
40 |
A0 |
60 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05AA |
ENCODING 1450 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
6C |
38 |
10 |
10 |
ENDCHAR |
STARTCHAR uni05AB |
ENCODING 1451 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
30 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05AC |
ENCODING 1452 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0C |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05AD |
ENCODING 1453 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
04 |
06 |
03 |
00 |
ENDCHAR |
STARTCHAR uni05AE |
ENCODING 1454 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
48 |
A8 |
90 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05AF |
ENCODING 1455 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
38 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57799 |
ENCODING 1456 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
00 |
18 |
00 |
ENDCHAR |
STARTCHAR afii57801 |
ENCODING 1457 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
DB |
00 |
33 |
00 |
ENDCHAR |
STARTCHAR afii57800 |
ENCODING 1458 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
F6 |
00 |
06 |
00 |
ENDCHAR |
STARTCHAR afii57802 |
ENCODING 1459 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
F6 |
60 |
66 |
00 |
ENDCHAR |
STARTCHAR afii57793 |
ENCODING 1460 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57794 |
ENCODING 1461 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
66 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57795 |
ENCODING 1462 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
66 |
00 |
18 |
00 |
ENDCHAR |
STARTCHAR afii57798 |
ENCODING 1463 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
00 |
00 |
ENDCHAR |
STARTCHAR afii57797 |
ENCODING 1464 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
18 |
18 |
ENDCHAR |
STARTCHAR afii57806 |
ENCODING 1465 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
60 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57796 |
ENCODING 1467 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
C0 |
18 |
03 |
00 |
ENDCHAR |
STARTCHAR afii57807 |
ENCODING 1468 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57839 |
ENCODING 1469 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR afii57645 |
ENCODING 1470 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7E |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57841 |
ENCODING 1471 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57842 |
ENCODING 1472 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57804 |
ENCODING 1473 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
06 |
06 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57803 |
ENCODING 1474 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57658 |
ENCODING 1475 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05C4 |
ENCODING 1476 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57664 |
ENCODING 1488 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C6 |
C6 |
66 |
76 |
DC |
CC |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57665 |
ENCODING 1489 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
F8 |
0C |
0C |
0C |
0C |
0C |
0C |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57666 |
ENCODING 1490 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
0C |
0C |
0C |
0C |
1C |
36 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57667 |
ENCODING 1491 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57668 |
ENCODING 1492 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
06 |
06 |
06 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57669 |
ENCODING 1493 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57670 |
ENCODING 1494 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
7E |
18 |
18 |
18 |
0C |
0C |
18 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57671 |
ENCODING 1495 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
66 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57672 |
ENCODING 1496 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
CC |
D6 |
D6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57673 |
ENCODING 1497 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
18 |
18 |
18 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57674 |
ENCODING 1498 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
06 |
06 |
06 |
0C |
0C |
0C |
0C |
0C |
0C |
0E |
00 |
ENDCHAR |
STARTCHAR afii57675 |
ENCODING 1499 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
06 |
06 |
06 |
06 |
06 |
06 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57676 |
ENCODING 1500 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
FC |
06 |
06 |
06 |
06 |
0C |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57677 |
ENCODING 1501 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
66 |
C6 |
C6 |
C6 |
C6 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57678 |
ENCODING 1502 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
DC |
76 |
66 |
C6 |
C6 |
C6 |
C6 |
DE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57679 |
ENCODING 1503 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
0C |
0C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1C |
00 |
ENDCHAR |
STARTCHAR afii57680 |
ENCODING 1504 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
0C |
0C |
0C |
0C |
0C |
0C |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57681 |
ENCODING 1505 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
66 |
C6 |
C6 |
C6 |
C6 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57682 |
ENCODING 1506 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
EE |
66 |
66 |
66 |
66 |
66 |
2C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57683 |
ENCODING 1507 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
F8 |
4C |
CC |
CC |
EC |
0C |
0C |
0C |
0C |
0C |
0E |
00 |
ENDCHAR |
STARTCHAR afii57684 |
ENCODING 1508 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
46 |
C6 |
C6 |
E6 |
06 |
06 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57685 |
ENCODING 1509 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
EE |
66 |
66 |
6C |
78 |
60 |
60 |
60 |
60 |
60 |
70 |
00 |
ENDCHAR |
STARTCHAR afii57686 |
ENCODING 1510 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
EE |
66 |
66 |
34 |
18 |
0C |
06 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57687 |
ENCODING 1511 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
06 |
06 |
66 |
64 |
6C |
6E |
60 |
60 |
60 |
60 |
00 |
ENDCHAR |
STARTCHAR afii57688 |
ENCODING 1512 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
06 |
06 |
06 |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57689 |
ENCODING 1513 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
D6 |
D6 |
D6 |
D6 |
D6 |
F6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57690 |
ENCODING 1514 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
66 |
66 |
66 |
66 |
66 |
E6 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57716 |
ENCODING 1520 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
CC |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57717 |
ENCODING 1521 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
CC |
66 |
66 |
66 |
C6 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57718 |
ENCODING 1522 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
CC |
66 |
66 |
66 |
CC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05F3 |
ENCODING 1523 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni05F4 |
ENCODING 1524 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
CC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57388 |
ENCODING 1548 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
10 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57403 |
ENCODING 1563 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
18 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57407 |
ENCODING 1567 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
22 |
20 |
10 |
08 |
08 |
00 |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57409 |
ENCODING 1569 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
24 |
20 |
1E |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57410 |
ENCODING 1570 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
02 |
3C |
40 |
10 |
10 |
10 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57411 |
ENCODING 1571 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
20 |
1C |
20 |
08 |
08 |
08 |
08 |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57412 |
ENCODING 1572 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
1C |
20 |
1C |
20 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57413 |
ENCODING 1573 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
08 |
08 |
08 |
08 |
08 |
00 |
18 |
20 |
1C |
20 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57414 |
ENCODING 1574 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
40 |
38 |
40 |
07 |
08 |
88 |
86 |
81 |
82 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57415 |
ENCODING 1575 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
08 |
08 |
08 |
08 |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57416 |
ENCODING 1576 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57417 |
ENCODING 1577 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
28 |
00 |
00 |
18 |
24 |
22 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57418 |
ENCODING 1578 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
14 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57419 |
ENCODING 1579 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57420 |
ENCODING 1580 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
80 |
88 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57421 |
ENCODING 1581 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57422 |
ENCODING 1582 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
20 |
00 |
00 |
70 |
8F |
30 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57423 |
ENCODING 1583 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57424 |
ENCODING 1584 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57425 |
ENCODING 1585 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57426 |
ENCODING 1586 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57427 |
ENCODING 1587 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
01 |
15 |
88 |
84 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57428 |
ENCODING 1588 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
01 |
15 |
88 |
84 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57429 |
ENCODING 1589 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
06 |
09 |
31 |
9E |
88 |
88 |
70 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57430 |
ENCODING 1590 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
06 |
09 |
31 |
9E |
88 |
88 |
70 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57431 |
ENCODING 1591 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
20 |
20 |
2C |
32 |
A2 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57432 |
ENCODING 1592 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
20 |
20 |
2C |
32 |
A2 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57433 |
ENCODING 1593 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
80 |
8C |
70 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR afii57434 |
ENCODING 1594 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
40 |
00 |
00 |
70 |
80 |
8C |
70 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR afii57440 |
ENCODING 1600 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57441 |
ENCODING 1601 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57442 |
ENCODING 1602 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0A |
00 |
06 |
09 |
09 |
47 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57443 |
ENCODING 1603 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
19 |
21 |
19 |
21 |
01 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57444 |
ENCODING 1604 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
02 |
02 |
02 |
02 |
02 |
42 |
82 |
82 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57445 |
ENCODING 1605 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0C |
12 |
12 |
3C |
40 |
40 |
40 |
40 |
40 |
40 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57446 |
ENCODING 1606 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57470 |
ENCODING 1607 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
40 |
30 |
4E |
49 |
39 |
E6 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57448 |
ENCODING 1608 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57449 |
ENCODING 1609 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57450 |
ENCODING 1610 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
24 |
00 |
ENDCHAR |
STARTCHAR afii57451 |
ENCODING 1611 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
30 |
0C |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57452 |
ENCODING 1612 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
12 |
CA |
2C |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57453 |
ENCODING 1613 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
30 |
0C |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57454 |
ENCODING 1614 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57455 |
ENCODING 1615 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
14 |
0C |
08 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57456 |
ENCODING 1616 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57457 |
ENCODING 1617 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0A |
2A |
2C |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57458 |
ENCODING 1618 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
24 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0653 |
ENCODING 1619 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
01 |
7E |
80 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0654 |
ENCODING 1620 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
10 |
0C |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0655 |
ENCODING 1621 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
10 |
0C |
10 |
ENDCHAR |
STARTCHAR afii57392 |
ENCODING 1632 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
30 |
78 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57393 |
ENCODING 1633 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
70 |
70 |
38 |
18 |
18 |
08 |
08 |
08 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57394 |
ENCODING 1634 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
44 |
FC |
F8 |
60 |
30 |
30 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57395 |
ENCODING 1635 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
4A |
FE |
F4 |
60 |
30 |
30 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57396 |
ENCODING 1636 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
20 |
40 |
30 |
10 |
20 |
42 |
7C |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57397 |
ENCODING 1637 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
2C |
44 |
42 |
82 |
82 |
FE |
7C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57398 |
ENCODING 1638 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
80 |
F8 |
78 |
08 |
08 |
08 |
0C |
0E |
06 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57399 |
ENCODING 1639 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
82 |
C6 |
C6 |
6C |
28 |
38 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57400 |
ENCODING 1640 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
10 |
38 |
28 |
6C |
C6 |
C6 |
82 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57401 |
ENCODING 1641 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
F8 |
88 |
F8 |
78 |
08 |
0C |
0E |
06 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57381 |
ENCODING 1642 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
91 |
92 |
64 |
08 |
10 |
26 |
49 |
89 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni066B |
ENCODING 1643 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
30 |
30 |
60 |
60 |
00 |
00 |
ENDCHAR |
STARTCHAR uni066C |
ENCODING 1644 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
18 |
10 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii63167 |
ENCODING 1645 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
38 |
FE |
7C |
38 |
6C |
44 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0670 |
ENCODING 1648 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0671 |
ENCODING 1649 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
06 |
29 |
5E |
00 |
04 |
04 |
04 |
04 |
04 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0672 |
ENCODING 1650 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
06 |
28 |
5E |
00 |
04 |
04 |
04 |
04 |
04 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0673 |
ENCODING 1651 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
04 |
04 |
04 |
04 |
04 |
04 |
00 |
06 |
28 |
5E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0674 |
ENCODING 1652 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
07 |
08 |
07 |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0675 |
ENCODING 1653 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
04 |
03 |
14 |
10 |
10 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0676 |
ENCODING 1654 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
04 |
03 |
04 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0677 |
ENCODING 1655 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
23 |
54 |
33 |
24 |
40 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0678 |
ENCODING 1656 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
04 |
03 |
04 |
00 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57511 |
ENCODING 1657 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni067A |
ENCODING 1658 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
08 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni067B |
ENCODING 1659 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
81 |
81 |
7E |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni067C |
ENCODING 1660 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
14 |
40 |
81 |
81 |
7E |
08 |
14 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni067D |
ENCODING 1661 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
08 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57506 |
ENCODING 1662 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
14 |
00 |
08 |
00 |
00 |
ENDCHAR |
STARTCHAR uni067F |
ENCODING 1663 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
14 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0680 |
ENCODING 1664 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
14 |
00 |
14 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0681 |
ENCODING 1665 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
06 |
08 |
06 |
08 |
70 |
8F |
30 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0682 |
ENCODING 1666 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
08 |
00 |
70 |
8F |
30 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0683 |
ENCODING 1667 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
80 |
94 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0684 |
ENCODING 1668 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
88 |
80 |
88 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0685 |
ENCODING 1669 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
70 |
8F |
30 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57507 |
ENCODING 1670 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
94 |
80 |
88 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0687 |
ENCODING 1671 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
94 |
80 |
94 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57512 |
ENCODING 1672 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
20 |
38 |
28 |
70 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0689 |
ENCODING 1673 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
04 |
02 |
42 |
3C |
08 |
14 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni068A |
ENCODING 1674 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni068B |
ENCODING 1675 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
20 |
38 |
28 |
70 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni068C |
ENCODING 1676 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni068D |
ENCODING 1677 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
14 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni068E |
ENCODING 1678 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni068F |
ENCODING 1679 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
14 |
00 |
08 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0690 |
ENCODING 1680 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
14 |
00 |
14 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57513 |
ENCODING 1681 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0692 |
ENCODING 1682 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
08 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0693 |
ENCODING 1683 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
04 |
02 |
02 |
04 |
1C |
6A |
04 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0694 |
ENCODING 1684 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
62 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0695 |
ENCODING 1685 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
14 |
08 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0696 |
ENCODING 1686 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
04 |
02 |
12 |
04 |
18 |
62 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0697 |
ENCODING 1687 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
14 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57508 |
ENCODING 1688 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni0699 |
ENCODING 1689 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
14 |
00 |
14 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni069A |
ENCODING 1690 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
04 |
00 |
01 |
15 |
88 |
88 |
8A |
70 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni069B |
ENCODING 1691 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
01 |
15 |
88 |
88 |
90 |
65 |
00 |
02 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni069C |
ENCODING 1692 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
04 |
00 |
0A |
00 |
01 |
15 |
88 |
88 |
90 |
65 |
00 |
02 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni069D |
ENCODING 1693 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
06 |
09 |
31 |
9E |
88 |
90 |
65 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni069E |
ENCODING 1694 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
00 |
0A |
00 |
06 |
09 |
31 |
9E |
88 |
88 |
70 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni069F |
ENCODING 1695 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
00 |
2A |
20 |
20 |
2C |
32 |
A2 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A0 |
ENCODING 1696 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
20 |
00 |
50 |
00 |
70 |
80 |
8C |
70 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A1 |
ENCODING 1697 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A2 |
ENCODING 1698 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
02 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A3 |
ENCODING 1699 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
08 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57505 |
ENCODING 1700 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
00 |
0A |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A5 |
ENCODING 1701 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
0A |
00 |
04 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A6 |
ENCODING 1702 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0A |
00 |
0A |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A7 |
ENCODING 1703 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
06 |
09 |
09 |
47 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A8 |
ENCODING 1704 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
00 |
0A |
00 |
06 |
09 |
09 |
47 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06A9 |
ENCODING 1705 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
01 |
02 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06AA |
ENCODING 1706 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
20 |
40 |
3E |
01 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06AB |
ENCODING 1707 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
01 |
02 |
05 |
0B |
48 |
84 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06AC |
ENCODING 1708 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
00 |
19 |
21 |
19 |
21 |
01 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06AD |
ENCODING 1709 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
00 |
29 |
01 |
19 |
21 |
19 |
A1 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06AE |
ENCODING 1710 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
19 |
21 |
19 |
21 |
01 |
81 |
7E |
00 |
14 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57509 |
ENCODING 1711 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
09 |
12 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B0 |
ENCODING 1712 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
09 |
12 |
05 |
0B |
48 |
84 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B1 |
ENCODING 1713 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
A4 |
09 |
12 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B2 |
ENCODING 1714 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
09 |
12 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
14 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B3 |
ENCODING 1715 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
09 |
12 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B4 |
ENCODING 1716 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
44 |
09 |
A2 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B5 |
ENCODING 1717 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
14 |
08 |
02 |
02 |
02 |
02 |
42 |
82 |
82 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B6 |
ENCODING 1718 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
02 |
02 |
02 |
02 |
02 |
42 |
82 |
82 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B7 |
ENCODING 1719 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
02 |
2A |
02 |
02 |
02 |
42 |
82 |
82 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06B8 |
ENCODING 1720 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
02 |
02 |
02 |
02 |
02 |
42 |
82 |
82 |
84 |
78 |
00 |
14 |
00 |
08 |
00 |
ENDCHAR |
STARTCHAR uni06B9 |
ENCODING 1721 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
00 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
04 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57514 |
ENCODING 1722 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06BB |
ENCODING 1723 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06BC |
ENCODING 1724 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
08 |
14 |
08 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06BD |
ENCODING 1725 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06BE |
ENCODING 1726 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
38 |
4C |
52 |
32 |
3C |
40 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06BF |
ENCODING 1727 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
00 |
70 |
8F |
30 |
40 |
94 |
80 |
88 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C0 |
ENCODING 1728 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
40 |
38 |
40 |
18 |
24 |
22 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C1 |
ENCODING 1729 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
13 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C2 |
ENCODING 1730 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
40 |
38 |
40 |
00 |
0C |
13 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C3 |
ENCODING 1731 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
14 |
00 |
00 |
00 |
0C |
13 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C4 |
ENCODING 1732 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
12 |
0E |
12 |
2C |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C5 |
ENCODING 1733 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
12 |
0E |
02 |
3C |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C6 |
ENCODING 1734 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
08 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C7 |
ENCODING 1735 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
28 |
18 |
10 |
20 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C8 |
ENCODING 1736 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
08 |
08 |
08 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06C9 |
ENCODING 1737 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
14 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06CA |
ENCODING 1738 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
14 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06CB |
ENCODING 1739 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06CC |
ENCODING 1740 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06CD |
ENCODING 1741 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
20 |
47 |
88 |
08 |
86 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06CE |
ENCODING 1742 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
50 |
20 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06CF |
ENCODING 1743 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06D0 |
ENCODING 1744 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
82 |
7C |
00 |
08 |
00 |
08 |
ENDCHAR |
STARTCHAR uni06D1 |
ENCODING 1745 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
82 |
7C |
00 |
14 |
00 |
08 |
ENDCHAR |
STARTCHAR afii57519 |
ENCODING 1746 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
14 |
60 |
80 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06D3 |
ENCODING 1747 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
80 |
60 |
80 |
08 |
14 |
60 |
80 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06D4 |
ENCODING 1748 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57534 |
ENCODING 1749 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
24 |
22 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06D6 |
ENCODING 1750 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
40 |
40 |
43 |
55 |
7E |
80 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06D7 |
ENCODING 1751 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
2A |
20 |
26 |
2A |
7C |
80 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06D8 |
ENCODING 1752 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0E |
1C |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06D9 |
ENCODING 1753 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
14 |
14 |
08 |
14 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06DA |
ENCODING 1754 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
2C |
10 |
28 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06DB |
ENCODING 1755 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06DC |
ENCODING 1756 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
15 |
8A |
90 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06DD |
ENCODING 1757 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
5A |
A5 |
66 |
5B |
81 |
81 |
81 |
81 |
81 |
81 |
5A |
66 |
A5 |
5A |
00 |
ENDCHAR |
STARTCHAR uni06DE |
ENCODING 1758 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
66 |
42 |
42 |
81 |
99 |
99 |
81 |
42 |
42 |
66 |
18 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06DF |
ENCODING 1759 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
1C |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E0 |
ENCODING 1760 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E1 |
ENCODING 1761 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
26 |
08 |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E2 |
ENCODING 1762 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0C |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E3 |
ENCODING 1763 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
15 |
8A |
90 |
60 |
ENDCHAR |
STARTCHAR uni06E4 |
ENCODING 1764 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
32 |
2C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E5 |
ENCODING 1765 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
14 |
0C |
04 |
08 |
30 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E6 |
ENCODING 1766 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
30 |
40 |
3E |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E7 |
ENCODING 1767 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
30 |
40 |
3E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E8 |
ENCODING 1768 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
22 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06E9 |
ENCODING 1769 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
28 |
54 |
AA |
92 |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
82 |
FE |
00 |
00 |
ENDCHAR |
STARTCHAR uni06EA |
ENCODING 1770 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
14 |
22 |
14 |
08 |
ENDCHAR |
STARTCHAR uni06EB |
ENCODING 1771 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
14 |
22 |
14 |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06EC |
ENCODING 1772 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
3C |
3C |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06ED |
ENCODING 1773 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
0C |
10 |
10 |
10 |
ENDCHAR |
STARTCHAR uni06F0 |
ENCODING 1776 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
44 |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F1 |
ENCODING 1777 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
70 |
70 |
38 |
18 |
18 |
08 |
08 |
08 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F2 |
ENCODING 1778 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
44 |
FC |
F8 |
60 |
30 |
30 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F3 |
ENCODING 1779 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
4A |
FE |
F4 |
60 |
30 |
30 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F4 |
ENCODING 1780 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
4E |
F0 |
FE |
7C |
30 |
30 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F5 |
ENCODING 1781 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
38 |
2C |
44 |
42 |
82 |
92 |
FE |
6C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F6 |
ENCODING 1782 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
60 |
7E |
3C |
30 |
60 |
40 |
80 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F7 |
ENCODING 1783 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
82 |
C6 |
C6 |
6C |
28 |
38 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F8 |
ENCODING 1784 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
10 |
38 |
28 |
6C |
C6 |
C6 |
82 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06F9 |
ENCODING 1785 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
F8 |
88 |
F8 |
78 |
08 |
0C |
0E |
06 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06FA |
ENCODING 1786 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
01 |
15 |
88 |
88 |
88 |
72 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06FB |
ENCODING 1787 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
06 |
09 |
31 |
9E |
88 |
88 |
72 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06FC |
ENCODING 1788 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
40 |
00 |
00 |
70 |
80 |
8C |
70 |
40 |
80 |
88 |
80 |
41 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uni06FD |
ENCODING 1789 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
24 |
20 |
1E |
20 |
00 |
14 |
14 |
14 |
14 |
00 |
00 |
ENDCHAR |
STARTCHAR uni06FE |
ENCODING 1790 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0C |
12 |
12 |
3C |
40 |
54 |
54 |
54 |
54 |
40 |
00 |
00 |
ENDCHAR |
STARTCHAR m |
ENCODING 4307 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
92 |
92 |
92 |
92 |
92 |
4C |
30 |
4C |
02 |
00 |
ENDCHAR |
STARTCHAR m |
ENCODING 4311 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
92 |
92 |
92 |
92 |
92 |
64 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR m |
ENCODING 4314 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
54 |
AA |
AA |
AA |
82 |
82 |
40 |
30 |
4C |
02 |
00 |
ENDCHAR |
STARTCHAR m |
ENCODING 4317 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
92 |
92 |
92 |
82 |
82 |
44 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR m |
ENCODING 4326 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
92 |
92 |
92 |
82 |
82 |
40 |
30 |
4C |
02 |
00 |
ENDCHAR |
STARTCHAR uni1E00 |
ENCODING 7680 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
38 |
6C |
38 |
ENDCHAR |
STARTCHAR uni1E01 |
ENCODING 7681 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
38 |
6C |
38 |
ENDCHAR |
STARTCHAR uni1E02 |
ENCODING 7682 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
FC |
66 |
66 |
66 |
7C |
66 |
66 |
66 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E03 |
ENCODING 7683 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
0C |
EC |
60 |
60 |
78 |
6C |
66 |
66 |
66 |
66 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E04 |
ENCODING 7684 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E05 |
ENCODING 7685 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
78 |
6C |
66 |
66 |
66 |
66 |
7C |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E06 |
ENCODING 7686 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
66 |
66 |
66 |
66 |
FC |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E07 |
ENCODING 7687 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
78 |
6C |
66 |
66 |
66 |
66 |
7C |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E08 |
ENCODING 7688 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR uni1E09 |
ENCODING 7689 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR uni1E0A |
ENCODING 7690 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
F8 |
6C |
66 |
66 |
66 |
66 |
66 |
6C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E0B |
ENCODING 7691 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
60 |
0C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E0C |
ENCODING 7692 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
66 |
66 |
66 |
66 |
6C |
F8 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E0D |
ENCODING 7693 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E0E |
ENCODING 7694 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
66 |
66 |
66 |
66 |
6C |
F8 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E0F |
ENCODING 7695 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E10 |
ENCODING 7696 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
66 |
66 |
66 |
66 |
6C |
F8 |
30 |
18 |
70 |
00 |
ENDCHAR |
STARTCHAR uni1E11 |
ENCODING 7697 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
30 |
18 |
70 |
00 |
ENDCHAR |
STARTCHAR uni1E12 |
ENCODING 7698 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
66 |
66 |
66 |
66 |
6C |
F8 |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E13 |
ENCODING 7699 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E14 |
ENCODING 7700 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
7C |
00 |
FE |
62 |
68 |
78 |
68 |
62 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E15 |
ENCODING 7701 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
7C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E16 |
ENCODING 7702 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
7C |
00 |
FE |
62 |
68 |
78 |
68 |
62 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E17 |
ENCODING 7703 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
7C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E18 |
ENCODING 7704 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
62 |
66 |
FE |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E19 |
ENCODING 7705 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E1A |
ENCODING 7706 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
62 |
66 |
FE |
00 |
76 |
DC |
00 |
ENDCHAR |
STARTCHAR uni1E1B |
ENCODING 7707 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
76 |
DC |
00 |
ENDCHAR |
STARTCHAR uni1E1C |
ENCODING 7708 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR uni1E1D |
ENCODING 7709 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
18 |
0C |
38 |
00 |
ENDCHAR |
STARTCHAR uni1E1E |
ENCODING 7710 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E1F |
ENCODING 7711 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
38 |
6C |
64 |
F0 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E20 |
ENCODING 7712 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
3C |
66 |
C2 |
C0 |
DE |
C6 |
C6 |
66 |
3A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E21 |
ENCODING 7713 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
7C |
0C |
CC |
78 |
00 |
ENDCHAR |
STARTCHAR uni1E22 |
ENCODING 7714 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E23 |
ENCODING 7715 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0C |
E0 |
60 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E24 |
ENCODING 7716 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E25 |
ENCODING 7717 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E26 |
ENCODING 7718 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E27 |
ENCODING 7719 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
E0 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E28 |
ENCODING 7720 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
60 |
30 |
E0 |
00 |
ENDCHAR |
STARTCHAR uni1E29 |
ENCODING 7721 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
30 |
18 |
70 |
00 |
ENDCHAR |
STARTCHAR uni1E2A |
ENCODING 7722 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
6C |
38 |
00 |
ENDCHAR |
STARTCHAR uni1E2B |
ENCODING 7723 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
6C |
38 |
00 |
ENDCHAR |
STARTCHAR uni1E2C |
ENCODING 7724 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
76 |
DC |
00 |
ENDCHAR |
STARTCHAR uni1E2D |
ENCODING 7725 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
76 |
DC |
00 |
ENDCHAR |
STARTCHAR uni1E2E |
ENCODING 7726 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
66 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E2F |
ENCODING 7727 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
66 |
66 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E30 |
ENCODING 7728 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
E6 |
66 |
66 |
6C |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E31 |
ENCODING 7729 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
0C |
EC |
60 |
60 |
66 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E32 |
ENCODING 7730 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E33 |
ENCODING 7731 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
66 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E34 |
ENCODING 7732 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E35 |
ENCODING 7733 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
66 |
6C |
78 |
78 |
6C |
66 |
E6 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E36 |
ENCODING 7734 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E37 |
ENCODING 7735 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E38 |
ENCODING 7736 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
F0 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E39 |
ENCODING 7737 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E3A |
ENCODING 7738 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E3B |
ENCODING 7739 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
7E |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E3C |
ENCODING 7740 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E3D |
ENCODING 7741 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E3E |
ENCODING 7742 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E3F |
ENCODING 7743 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
EC |
FE |
D6 |
D6 |
D6 |
D6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E40 |
ENCODING 7744 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E41 |
ENCODING 7745 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
EC |
FE |
D6 |
D6 |
D6 |
D6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E42 |
ENCODING 7746 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E43 |
ENCODING 7747 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
EC |
FE |
D6 |
D6 |
D6 |
D6 |
C6 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E44 |
ENCODING 7748 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E45 |
ENCODING 7749 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E46 |
ENCODING 7750 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
C6 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E47 |
ENCODING 7751 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E48 |
ENCODING 7752 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
C6 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E49 |
ENCODING 7753 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E4A |
ENCODING 7754 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
E6 |
F6 |
FE |
DE |
CE |
C6 |
C6 |
C6 |
C6 |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E4B |
ENCODING 7755 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
66 |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E4C |
ENCODING 7756 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
72 |
9C |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E4D |
ENCODING 7757 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
76 |
DC |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E4E |
ENCODING 7758 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
00 |
72 |
9C |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E4F |
ENCODING 7759 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
00 |
76 |
DC |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E50 |
ENCODING 7760 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
7C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E51 |
ENCODING 7761 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
7C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E52 |
ENCODING 7762 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
7C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E53 |
ENCODING 7763 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
7C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E54 |
ENCODING 7764 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
FC |
66 |
66 |
66 |
7C |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E55 |
ENCODING 7765 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
7C |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR uni1E56 |
ENCODING 7766 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
FC |
66 |
66 |
66 |
7C |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E57 |
ENCODING 7767 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
DC |
66 |
66 |
66 |
66 |
66 |
7C |
60 |
60 |
F0 |
00 |
ENDCHAR |
STARTCHAR uni1E58 |
ENCODING 7768 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E59 |
ENCODING 7769 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E5A |
ENCODING 7770 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
66 |
E6 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E5B |
ENCODING 7771 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E5C |
ENCODING 7772 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
E6 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E5D |
ENCODING 7773 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E5E |
ENCODING 7774 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
66 |
66 |
66 |
E6 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E5F |
ENCODING 7775 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
76 |
66 |
60 |
60 |
60 |
F0 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E60 |
ENCODING 7776 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
7C |
C6 |
C6 |
60 |
38 |
0C |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E61 |
ENCODING 7777 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E62 |
ENCODING 7778 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
60 |
38 |
0C |
06 |
C6 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E63 |
ENCODING 7779 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E64 |
ENCODING 7780 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
6C |
18 |
00 |
7C |
C6 |
C6 |
70 |
1C |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E65 |
ENCODING 7781 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
60 |
0C |
18 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E66 |
ENCODING 7782 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
44 |
38 |
10 |
7C |
C6 |
C6 |
70 |
1C |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E67 |
ENCODING 7783 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
44 |
38 |
10 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E68 |
ENCODING 7784 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
7C |
C6 |
C6 |
60 |
38 |
0C |
C6 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E69 |
ENCODING 7785 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
7C |
C6 |
60 |
38 |
0C |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E6A |
ENCODING 7786 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E6B |
ENCODING 7787 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
06 |
16 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E6C |
ENCODING 7788 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E6D |
ENCODING 7789 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1E6E |
ENCODING 7790 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
7E |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E6F |
ENCODING 7791 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
7E |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E70 |
ENCODING 7792 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E71 |
ENCODING 7793 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
30 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
08 |
1C |
36 |
00 |
ENDCHAR |
STARTCHAR uni1E72 |
ENCODING 7794 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
6C |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E73 |
ENCODING 7795 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
6C |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E74 |
ENCODING 7796 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
76 |
DC |
00 |
ENDCHAR |
STARTCHAR uni1E75 |
ENCODING 7797 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
76 |
DC |
00 |
ENDCHAR |
STARTCHAR uni1E76 |
ENCODING 7798 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E77 |
ENCODING 7799 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
10 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni1E78 |
ENCODING 7800 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
72 |
9C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E79 |
ENCODING 7801 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
76 |
DC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E7A |
ENCODING 7802 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
00 |
7C |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E7B |
ENCODING 7803 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
CC |
CC |
00 |
FC |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E7C |
ENCODING 7804 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
6C |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E7D |
ENCODING 7805 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
66 |
66 |
66 |
66 |
66 |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E7E |
ENCODING 7806 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
6C |
38 |
10 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E7F |
ENCODING 7807 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
66 |
66 |
3C |
18 |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR Wgrave |
ENCODING 7808 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
00 |
C6 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
EE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR wgrave |
ENCODING 7809 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Wacute |
ENCODING 7810 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
00 |
C6 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
EE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR wacute |
ENCODING 7811 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
18 |
00 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Wdieresis |
ENCODING 7812 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C6 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
EE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR wdieresis |
ENCODING 7813 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E86 |
ENCODING 7814 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
C6 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
EE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E87 |
ENCODING 7815 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E88 |
ENCODING 7816 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
EE |
6C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E89 |
ENCODING 7817 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E8A |
ENCODING 7818 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
C6 |
C6 |
6C |
7C |
38 |
7C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E8B |
ENCODING 7819 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
C6 |
6C |
38 |
38 |
38 |
6C |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E8C |
ENCODING 7820 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
C6 |
C6 |
6C |
7C |
38 |
7C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E8D |
ENCODING 7821 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
C6 |
6C |
38 |
38 |
38 |
6C |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E8E |
ENCODING 7822 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
00 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E8F |
ENCODING 7823 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni1E90 |
ENCODING 7824 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
FE |
C6 |
8C |
18 |
30 |
60 |
C2 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E91 |
ENCODING 7825 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
FE |
CC |
18 |
30 |
60 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E92 |
ENCODING 7826 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
86 |
0C |
18 |
30 |
60 |
C2 |
C6 |
FE |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E93 |
ENCODING 7827 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
CC |
18 |
30 |
60 |
C6 |
FE |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1E94 |
ENCODING 7828 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
86 |
0C |
18 |
30 |
60 |
C2 |
C6 |
FE |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E95 |
ENCODING 7829 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
CC |
18 |
30 |
60 |
C6 |
FE |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E96 |
ENCODING 7830 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
60 |
60 |
6C |
76 |
66 |
66 |
66 |
66 |
E6 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E97 |
ENCODING 7831 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
6C |
00 |
10 |
30 |
FC |
30 |
30 |
30 |
30 |
36 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E98 |
ENCODING 7832 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
6C |
38 |
00 |
C6 |
C6 |
D6 |
D6 |
D6 |
FE |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E99 |
ENCODING 7833 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
6C |
38 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni1E9A |
ENCODING 7834 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
0C |
18 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1E9B |
ENCODING 7835 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
00 |
38 |
6C |
64 |
60 |
60 |
60 |
60 |
60 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EA0 |
ENCODING 7840 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
C6 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EA1 |
ENCODING 7841 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EA2 |
ENCODING 7842 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
0C |
18 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EA3 |
ENCODING 7843 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
0C |
18 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EA4 |
ENCODING 7844 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
16 |
38 |
6C |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EA5 |
ENCODING 7845 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
16 |
38 |
6C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EA6 |
ENCODING 7846 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C0 |
68 |
1C |
36 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EA7 |
ENCODING 7847 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C0 |
68 |
1C |
36 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EA8 |
ENCODING 7848 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0E |
13 |
3A |
6C |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EA9 |
ENCODING 7849 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0E |
13 |
3A |
6C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EAA |
ENCODING 7850 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
10 |
28 |
54 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EAB |
ENCODING 7851 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
10 |
38 |
44 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EAC |
ENCODING 7852 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
6C |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EAD |
ENCODING 7853 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EAE |
ENCODING 7854 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
44 |
38 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EAF |
ENCODING 7855 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
18 |
44 |
38 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EB0 |
ENCODING 7856 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
44 |
38 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EB1 |
ENCODING 7857 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
30 |
44 |
38 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EB2 |
ENCODING 7858 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
08 |
54 |
38 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EB3 |
ENCODING 7859 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
08 |
54 |
38 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EB4 |
ENCODING 7860 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
72 |
9C |
44 |
38 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EB5 |
ENCODING 7861 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
72 |
9C |
44 |
38 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EB6 |
ENCODING 7862 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
6C |
38 |
00 |
10 |
38 |
6C |
C6 |
C6 |
FE |
C6 |
C6 |
C6 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EB7 |
ENCODING 7863 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
38 |
00 |
78 |
0C |
7C |
CC |
CC |
CC |
76 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EB8 |
ENCODING 7864 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
60 |
62 |
66 |
FE |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1EB9 |
ENCODING 7865 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EBA |
ENCODING 7866 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
0C |
18 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EBB |
ENCODING 7867 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
0C |
18 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EBC |
ENCODING 7868 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
00 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EBD |
ENCODING 7869 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EBE |
ENCODING 7870 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
23 |
76 |
88 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EBF |
ENCODING 7871 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
26 |
70 |
D8 |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EC0 |
ENCODING 7872 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C4 |
6E |
11 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EC1 |
ENCODING 7873 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C0 |
64 |
0E |
1B |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EC2 |
ENCODING 7874 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0E |
13 |
3A |
6C |
00 |
FE |
62 |
68 |
78 |
68 |
62 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EC3 |
ENCODING 7875 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0E |
13 |
3A |
6C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EC4 |
ENCODING 7876 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
10 |
38 |
44 |
FE |
62 |
68 |
78 |
68 |
62 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EC5 |
ENCODING 7877 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
10 |
38 |
44 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EC6 |
ENCODING 7878 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
FE |
66 |
62 |
68 |
78 |
68 |
62 |
66 |
FE |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1EC7 |
ENCODING 7879 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
7C |
C6 |
FE |
C0 |
C0 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EC8 |
ENCODING 7880 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
0C |
18 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EC9 |
ENCODING 7881 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
0C |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ECA |
ENCODING 7882 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1ECB |
ENCODING 7883 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1ECC |
ENCODING 7884 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1ECD |
ENCODING 7885 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1ECE |
ENCODING 7886 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
0C |
18 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ECF |
ENCODING 7887 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
0C |
18 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED0 |
ENCODING 7888 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
23 |
76 |
88 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED1 |
ENCODING 7889 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
26 |
70 |
D8 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED2 |
ENCODING 7890 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C4 |
6E |
11 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED3 |
ENCODING 7891 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C0 |
64 |
0E |
1B |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED4 |
ENCODING 7892 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0E |
13 |
3A |
44 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED5 |
ENCODING 7893 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0E |
13 |
3A |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED6 |
ENCODING 7894 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
10 |
28 |
44 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED7 |
ENCODING 7895 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
76 |
DC |
10 |
38 |
44 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1ED8 |
ENCODING 7896 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
38 |
44 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1ED9 |
ENCODING 7897 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
38 |
6C |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EDA |
ENCODING 7898 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
33 |
03 |
7A |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EDB |
ENCODING 7899 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1B |
33 |
06 |
78 |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EDC |
ENCODING 7900 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
33 |
03 |
7A |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EDD |
ENCODING 7901 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
63 |
33 |
06 |
78 |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EDE |
ENCODING 7902 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
70 |
1B |
33 |
7A |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EDF |
ENCODING 7903 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
1B |
33 |
06 |
78 |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EE0 |
ENCODING 7904 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
68 |
B3 |
03 |
7A |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EE1 |
ENCODING 7905 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
68 |
B3 |
03 |
06 |
78 |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EE2 |
ENCODING 7906 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
03 |
7A |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EE3 |
ENCODING 7907 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
06 |
78 |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EE4 |
ENCODING 7908 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EE5 |
ENCODING 7909 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EE6 |
ENCODING 7910 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
0C |
18 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EE7 |
ENCODING 7911 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
18 |
30 |
00 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EE8 |
ENCODING 7912 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
33 |
03 |
CE |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EE9 |
ENCODING 7913 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1B |
33 |
06 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EEA |
ENCODING 7914 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
33 |
03 |
CE |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EEB |
ENCODING 7915 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
63 |
33 |
06 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EEC |
ENCODING 7916 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
70 |
1B |
33 |
CE |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EED |
ENCODING 7917 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
1B |
33 |
06 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EEE |
ENCODING 7918 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
68 |
B3 |
03 |
CE |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EEF |
ENCODING 7919 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
68 |
B3 |
03 |
06 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EF0 |
ENCODING 7920 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
03 |
CE |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
CC |
78 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR uni1EF1 |
ENCODING 7921 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
06 |
CC |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
30 |
30 |
00 |
ENDCHAR |
STARTCHAR Ygrave |
ENCODING 7922 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
18 |
00 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ygrave |
ENCODING 7923 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
30 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni1EF4 |
ENCODING 7924 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni1EF5 |
ENCODING 7925 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
0C |
18 |
F6 |
06 |
00 |
ENDCHAR |
STARTCHAR uni1EF6 |
ENCODING 7926 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
0C |
18 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EF7 |
ENCODING 7927 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
0C |
18 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni1EF8 |
ENCODING 7928 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
3A |
5C |
00 |
66 |
66 |
66 |
3C |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1EF9 |
ENCODING 7929 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
76 |
DC |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7E |
06 |
0C |
F8 |
00 |
ENDCHAR |
STARTCHAR uni1F00 |
ENCODING 7936 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
18 |
30 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1F01 |
ENCODING 7937 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
30 |
18 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1F02 |
ENCODING 7938 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
60 |
6C |
C6 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1F03 |
ENCODING 7939 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
CC |
66 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1F04 |
ENCODING 7940 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
60 |
66 |
CC |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1F05 |
ENCODING 7941 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C6 |
6C |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1F06 |
ENCODING 7942 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
34 |
58 |
0C |
18 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni1F07 |
ENCODING 7943 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
34 |
58 |
30 |
18 |
00 |
76 |
CC |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8192 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
A4 |
AA |
EA |
EA |
A6 |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8193 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
A4 |
EA |
AA |
AA |
A6 |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8194 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
EA |
8A |
CE |
8E |
EA |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8195 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
EA |
8E |
CA |
8A |
EA |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8196 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
CA |
2E |
4A |
2A |
CA |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8197 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
AA |
AE |
EA |
2A |
2A |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8198 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
6A |
8E |
CA |
AA |
4A |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8199 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
38 |
20 |
30 |
20 |
20 |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8200 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
30 |
28 |
30 |
20 |
20 |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8201 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
EA |
4A |
4E |
4A |
4A |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8202 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
28 |
28 |
38 |
28 |
28 |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8203 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
EA |
2A |
4E |
8E |
EE |
00 |
6C |
8A |
4C |
28 |
C8 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8204 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
EA |
2A |
4E |
8E |
EE |
00 |
A2 |
A2 |
E2 |
EA |
A4 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8205 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
EA |
2A |
4E |
8E |
EE |
00 |
08 |
08 |
08 |
28 |
10 |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8206 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
80 |
80 |
80 |
F0 |
28 |
30 |
28 |
0A |
0E |
0E |
0A |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 8207 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
00 |
C0 |
A0 |
C0 |
A0 |
20 |
20 |
38 |
0A |
0E |
0E |
0A |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR uni2010 |
ENCODING 8208 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2011 |
ENCODING 8209 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
9C |
D2 |
BC |
92 |
9C |
00 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR figuredash |
ENCODING 8210 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR endash |
ENCODING 8211 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR emdash |
ENCODING 8212 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii00208 |
ENCODING 8213 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2016 |
ENCODING 8214 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR underscoredbl |
ENCODING 8215 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
00 |
FE |
00 |
ENDCHAR |
STARTCHAR quoteleft |
ENCODING 8216 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
30 |
30 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR quoteright |
ENCODING 8217 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
18 |
18 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR quotesinglbase |
ENCODING 8218 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
18 |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR quotereversed |
ENCODING 8219 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
30 |
30 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR quotedblleft |
ENCODING 8220 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
66 |
CC |
CC |
CC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR quotedblright |
ENCODING 8221 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
66 |
66 |
66 |
CC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR quotedblbase |
ENCODING 8222 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
CC |
00 |
00 |
ENDCHAR |
STARTCHAR uni201F |
ENCODING 8223 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
CC |
CC |
CC |
66 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dagger |
ENCODING 8224 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
7E |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR daggerdbl |
ENCODING 8225 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
7E |
18 |
18 |
7E |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR bullet |
ENCODING 8226 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
3C |
3C |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2023 |
ENCODING 8227 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
20 |
30 |
38 |
3C |
38 |
30 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR onedotenleader |
ENCODING 8228 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR twodotenleader |
ENCODING 8229 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ellipsis |
ENCODING 8230 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
DB |
DB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2027 |
ENCODING 8231 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR perthousand |
ENCODING 8240 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C0 |
C6 |
0C |
18 |
30 |
60 |
C0 |
36 |
36 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2031 |
ENCODING 8241 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C0 |
C6 |
0C |
18 |
30 |
60 |
C0 |
6B |
6B |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR minute |
ENCODING 8242 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR second |
ENCODING 8243 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
48 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2034 |
ENCODING 8244 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
92 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2035 |
ENCODING 8245 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2036 |
ENCODING 8246 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
24 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2037 |
ENCODING 8247 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
49 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2038 |
ENCODING 8248 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
38 |
6C |
C6 |
00 |
ENDCHAR |
STARTCHAR guilsinglleft |
ENCODING 8249 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0C |
18 |
30 |
60 |
30 |
18 |
0C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR guilsinglright |
ENCODING 8250 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
60 |
30 |
18 |
0C |
18 |
30 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni203B |
ENCODING 8251 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
92 |
44 |
28 |
92 |
28 |
44 |
92 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR exclamdbl |
ENCODING 8252 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
00 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni203D |
ENCODING 8253 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
C3 |
DB |
1B |
1E |
1C |
18 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni203E |
ENCODING 8254 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni203F |
ENCODING 8255 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
82 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR uni2040 |
ENCODING 8256 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
7C |
82 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2041 |
ENCODING 8257 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
06 |
0C |
18 |
38 |
6C |
00 |
ENDCHAR |
STARTCHAR uni2042 |
ENCODING 8258 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
38 |
28 |
00 |
00 |
44 |
EE |
AA |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2043 |
ENCODING 8259 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
3C |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR fraction |
ENCODING 8260 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
06 |
0C |
0C |
18 |
18 |
30 |
30 |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2045 |
ENCODING 8261 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
30 |
30 |
30 |
3C |
30 |
30 |
30 |
30 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2046 |
ENCODING 8262 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
0C |
0C |
0C |
3C |
0C |
0C |
0C |
0C |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2048 |
ENCODING 8264 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7B |
CF |
CF |
1B |
33 |
33 |
33 |
00 |
33 |
33 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2049 |
ENCODING 8265 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DE |
F3 |
F3 |
C6 |
CC |
CC |
CC |
00 |
CC |
CC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni204A |
ENCODING 8266 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
7E |
06 |
06 |
0C |
0C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni204B |
ENCODING 8267 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
DB |
DB |
DB |
DE |
D8 |
D8 |
D8 |
D8 |
D8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni204C |
ENCODING 8268 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
3E |
72 |
F2 |
F2 |
F2 |
72 |
3E |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni204D |
ENCODING 8269 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
F8 |
9C |
9E |
9E |
9E |
9C |
F8 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR zerosuperior |
ENCODING 8304 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
D8 |
D8 |
D8 |
D8 |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR foursuperior |
ENCODING 8308 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
18 |
38 |
78 |
D8 |
FC |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR fivesuperior |
ENCODING 8309 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
F8 |
C0 |
F0 |
18 |
D8 |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR sixsuperior |
ENCODING 8310 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
78 |
C0 |
F0 |
D8 |
D8 |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR sevensuperior |
ENCODING 8311 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
F8 |
D8 |
30 |
30 |
60 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR eightsuperior |
ENCODING 8312 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
D8 |
70 |
D8 |
D8 |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ninesuperior |
ENCODING 8313 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
D8 |
D8 |
78 |
18 |
F0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni207A |
ENCODING 8314 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
30 |
FC |
30 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni207B |
ENCODING 8315 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni207C |
ENCODING 8316 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
00 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR parenleftsuperior |
ENCODING 8317 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
60 |
60 |
60 |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR parenrightsuperior |
ENCODING 8318 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
60 |
30 |
30 |
30 |
30 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR nsuperior |
ENCODING 8319 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
B0 |
D8 |
D8 |
D8 |
D8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR zeroinferior |
ENCODING 8320 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
70 |
D8 |
D8 |
D8 |
D8 |
70 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR oneinferior |
ENCODING 8321 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
30 |
70 |
30 |
30 |
30 |
78 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR twoinferior |
ENCODING 8322 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
70 |
D8 |
30 |
60 |
C8 |
F8 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR threeinferior |
ENCODING 8323 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
70 |
D8 |
30 |
18 |
D8 |
70 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR fourinferior |
ENCODING 8324 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
38 |
78 |
D8 |
FC |
18 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR fiveinferior |
ENCODING 8325 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
F8 |
C0 |
F0 |
18 |
D8 |
70 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR sixinferior |
ENCODING 8326 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
78 |
C0 |
F0 |
D8 |
D8 |
70 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR seveninferior |
ENCODING 8327 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
F8 |
D8 |
30 |
30 |
60 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR eightinferior |
ENCODING 8328 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
70 |
D8 |
70 |
D8 |
D8 |
70 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR nineinferior |
ENCODING 8329 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
70 |
D8 |
D8 |
78 |
18 |
F0 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni208A |
ENCODING 8330 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
30 |
30 |
FC |
30 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni208B |
ENCODING 8331 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni208C |
ENCODING 8332 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FC |
00 |
FC |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR parenleftinferior |
ENCODING 8333 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
30 |
60 |
60 |
60 |
60 |
30 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR parenrightinferior |
ENCODING 8334 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
60 |
30 |
30 |
30 |
30 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni208F |
ENCODING 8335 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
B0 |
D8 |
D8 |
D8 |
D8 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20A0 |
ENCODING 8352 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
C0 |
CF |
CC |
CC |
7F |
0C |
0C |
0F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR colonmonetary |
ENCODING 8353 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
04 |
7C |
CE |
C8 |
C8 |
D0 |
D0 |
D0 |
E0 |
E6 |
7C |
40 |
40 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20A2 |
ENCODING 8354 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C0 |
C0 |
D6 |
D8 |
D8 |
D8 |
DE |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR franc |
ENCODING 8355 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
C0 |
C0 |
C0 |
F0 |
CD |
CE |
CC |
CC |
CC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR lira |
ENCODING 8356 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
60 |
F8 |
60 |
F8 |
60 |
60 |
E6 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20A5 |
ENCODING 8357 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
02 |
EC |
D6 |
DE |
D6 |
D6 |
F6 |
D6 |
40 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20A6 |
ENCODING 8358 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
66 |
76 |
FF |
76 |
6E |
FF |
6E |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR peseta |
ENCODING 8359 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
7C |
62 |
66 |
6F |
66 |
66 |
F3 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20A8 |
ENCODING 8360 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
CC |
CC |
CC |
F8 |
E0 |
F3 |
D6 |
DB |
CE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20A9 |
ENCODING 8361 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
81 |
81 |
81 |
5A |
FF |
5A |
FF |
24 |
24 |
24 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii57636 |
ENCODING 8362 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
F2 |
8A |
AA |
AA |
AA |
AA |
A2 |
BC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dong |
ENCODING 8363 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
3E |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
7C |
00 |
00 |
ENDCHAR |
STARTCHAR Euro |
ENCODING 8364 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
36 |
60 |
FC |
60 |
F8 |
60 |
60 |
36 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20AD |
ENCODING 8365 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
6C |
78 |
FE |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20AE |
ENCODING 8366 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
7E |
5A |
18 |
1E |
78 |
1E |
78 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni20AF |
ENCODING 8367 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
7C |
B6 |
36 |
33 |
33 |
33 |
63 |
66 |
F6 |
DC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2100 |
ENCODING 8448 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
D0 |
D2 |
D6 |
7C |
18 |
30 |
6E |
D8 |
98 |
18 |
0E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2101 |
ENCODING 8449 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
D0 |
D2 |
D6 |
7C |
18 |
30 |
6E |
D8 |
8C |
06 |
1C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2102 |
ENCODING 8450 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
62 |
A0 |
A0 |
A0 |
A0 |
A0 |
A0 |
62 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2103 |
ENCODING 8451 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
4E |
B9 |
58 |
18 |
18 |
18 |
18 |
18 |
19 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2104 |
ENCODING 8452 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
7C |
DA |
D8 |
D8 |
DA |
7C |
19 |
3F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii61248 |
ENCODING 8453 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
C0 |
C2 |
C6 |
7C |
18 |
30 |
6E |
DB |
9B |
1B |
0E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2106 |
ENCODING 8454 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
70 |
C0 |
C2 |
C6 |
7C |
18 |
30 |
7B |
DB |
9B |
1B |
0D |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2107 |
ENCODING 8455 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C2 |
C0 |
78 |
C0 |
C0 |
C2 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2108 |
ENCODING 8456 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
86 |
26 |
3E |
26 |
06 |
86 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2109 |
ENCODING 8457 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7F |
B9 |
58 |
1A |
1E |
1A |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni210A |
ENCODING 8458 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
1A |
66 |
46 |
87 |
8C |
8C |
7C |
98 |
98 |
70 |
00 |
ENDCHAR |
STARTCHAR uni210B |
ENCODING 8459 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
52 |
B5 |
15 |
16 |
2C |
34 |
68 |
A9 |
AA |
4C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni210C |
ENCODING 8460 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
48 |
B0 |
80 |
48 |
7C |
66 |
26 |
26 |
A6 |
46 |
06 |
34 |
48 |
00 |
ENDCHAR |
STARTCHAR uni210D |
ENCODING 8461 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E2 |
A2 |
A2 |
A2 |
BE |
A2 |
A2 |
A2 |
A2 |
E2 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni210E |
ENCODING 8462 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
36 |
3B |
3B |
33 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni210F |
ENCODING 8463 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
1E |
18 |
76 |
3B |
3B |
33 |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2110 |
ENCODING 8464 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
33 |
4E |
06 |
06 |
0C |
0C |
1F |
6C |
88 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Ifraktur |
ENCODING 8465 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
71 |
8E |
04 |
0C |
06 |
03 |
63 |
C3 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2112 |
ENCODING 8466 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
46 |
49 |
39 |
1E |
18 |
30 |
70 |
B1 |
BA |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii61289 |
ENCODING 8467 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0E |
19 |
31 |
32 |
64 |
68 |
70 |
E1 |
66 |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2114 |
ENCODING 8468 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D8 |
FF |
D8 |
DE |
DB |
DB |
DB |
DB |
DB |
DE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2115 |
ENCODING 8469 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E2 |
A2 |
B2 |
B2 |
AA |
AA |
A6 |
A6 |
A2 |
E2 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR afii61352 |
ENCODING 8470 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
CC |
CF |
ED |
FF |
FC |
DF |
CC |
CC |
CC |
CC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2117 |
ENCODING 8471 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
B9 |
A5 |
A5 |
B9 |
A1 |
A1 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR weierstrass |
ENCODING 8472 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
40 |
8E |
93 |
A3 |
63 |
4B |
6A |
A4 |
B0 |
B0 |
60 |
00 |
ENDCHAR |
STARTCHAR uni2119 |
ENCODING 8473 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
A2 |
A2 |
A2 |
A2 |
BC |
A0 |
A0 |
A0 |
E0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni211A |
ENCODING 8474 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
A2 |
A2 |
A2 |
A2 |
A2 |
A2 |
AA |
A6 |
7E |
01 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni211B |
ENCODING 8475 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3E |
4D |
4D |
19 |
1E |
1C |
34 |
34 |
B5 |
62 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Rfraktur |
ENCODING 8476 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
58 |
A6 |
A3 |
6C |
B8 |
26 |
26 |
26 |
A7 |
C2 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni211D |
ENCODING 8477 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
A2 |
A2 |
A2 |
A2 |
BC |
B0 |
A8 |
A4 |
E2 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR prescription |
ENCODING 8478 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FC |
66 |
66 |
66 |
7C |
6C |
6D |
67 |
66 |
EE |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni211F |
ENCODING 8479 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
0C |
FC |
C6 |
C6 |
C6 |
FC |
D8 |
DC |
DC |
E6 |
E6 |
20 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2120 |
ENCODING 8480 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
71 |
DB |
35 |
D1 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2121 |
ENCODING 8481 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
52 |
5A |
52 |
5F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR trademark |
ENCODING 8482 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F1 |
5B |
55 |
51 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2123 |
ENCODING 8483 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
18 |
CE |
D6 |
D6 |
D6 |
D6 |
D6 |
E6 |
6C |
38 |
50 |
40 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2124 |
ENCODING 8484 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
0A |
14 |
14 |
28 |
28 |
50 |
50 |
A0 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2125 |
ENCODING 8485 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
9C |
30 |
FE |
0C |
18 |
38 |
0C |
06 |
06 |
C6 |
C6 |
7C |
00 |
ENDCHAR |
STARTCHAR Omega |
ENCODING 8486 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
6C |
6C |
6C |
EE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2127 |
ENCODING 8487 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
EE |
6C |
6C |
6C |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2128 |
ENCODING 8488 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
26 |
03 |
13 |
0C |
13 |
03 |
03 |
66 |
98 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2129 |
ENCODING 8489 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
18 |
18 |
18 |
18 |
1C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni212A |
ENCODING 8490 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E6 |
66 |
66 |
6C |
78 |
78 |
6C |
66 |
66 |
E6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni212B |
ENCODING 8491 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
6C |
38 |
10 |
38 |
38 |
6C |
6C |
C6 |
FE |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni212C |
ENCODING 8492 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
2D |
2D |
1A |
1E |
1B |
31 |
31 |
B2 |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni212D |
ENCODING 8493 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
14 |
6B |
C8 |
CC |
C6 |
C6 |
CC |
C0 |
63 |
1C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR estimated |
ENCODING 8494 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
66 |
E7 |
FF |
E0 |
67 |
3E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni212F |
ENCODING 8495 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
1C |
26 |
44 |
F8 |
C0 |
C8 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2130 |
ENCODING 8496 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
4C |
52 |
3C |
10 |
3C |
60 |
C0 |
C3 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2131 |
ENCODING 8497 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
73 |
CE |
18 |
3A |
5C |
18 |
30 |
30 |
B0 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2132 |
ENCODING 8498 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
0C |
0C |
0C |
2C |
3C |
2C |
8C |
CC |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2133 |
ENCODING 8499 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
12 |
12 |
12 |
16 |
36 |
3E |
3A |
5A |
52 |
91 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2134 |
ENCODING 8500 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
1C |
26 |
46 |
C6 |
C4 |
C8 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR aleph |
ENCODING 8501 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
42 |
C6 |
E7 |
7A |
38 |
5C |
CE |
E7 |
63 |
E2 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2136 |
ENCODING 8502 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
80 |
FC |
7E |
06 |
06 |
06 |
06 |
0C |
7E |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2137 |
ENCODING 8503 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
40 |
78 |
3C |
0C |
0C |
0C |
0C |
1E |
7E |
F2 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2138 |
ENCODING 8504 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
80 |
FE |
7E |
0C |
0C |
0C |
0C |
0C |
1C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2139 |
ENCODING 8505 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
38 |
00 |
78 |
38 |
38 |
38 |
38 |
38 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni213A |
ENCODING 8506 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7D |
FF |
83 |
86 |
82 |
FE |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR onethird |
ENCODING 8531 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
C2 |
C6 |
CC |
18 |
30 |
60 |
DC |
86 |
1C |
06 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR twothirds |
ENCODING 8532 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
E0 |
30 |
62 |
C6 |
FC |
18 |
30 |
60 |
DC |
86 |
1C |
06 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR uni2155 |
ENCODING 8533 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
C2 |
C6 |
CC |
18 |
30 |
60 |
DE |
98 |
1C |
06 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR uni2156 |
ENCODING 8534 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
E0 |
30 |
62 |
C6 |
FC |
18 |
30 |
60 |
DE |
98 |
1C |
06 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR uni2157 |
ENCODING 8535 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
E0 |
30 |
62 |
36 |
EC |
18 |
30 |
60 |
DE |
98 |
1C |
06 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR uni2158 |
ENCODING 8536 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
70 |
B2 |
F6 |
3C |
18 |
30 |
60 |
DE |
98 |
1C |
06 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR uni2159 |
ENCODING 8537 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
C2 |
C6 |
CC |
18 |
30 |
60 |
DC |
B0 |
3C |
36 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR uni215A |
ENCODING 8538 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
F0 |
C0 |
E2 |
36 |
EC |
18 |
30 |
60 |
DC |
B0 |
3C |
36 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR oneeighth |
ENCODING 8539 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
C2 |
C6 |
CC |
18 |
30 |
60 |
DC |
B6 |
1C |
36 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR threeeighths |
ENCODING 8540 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
E0 |
30 |
62 |
36 |
EC |
18 |
30 |
60 |
DC |
B6 |
1C |
36 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR fiveeighths |
ENCODING 8541 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
F0 |
80 |
E2 |
36 |
EC |
18 |
30 |
60 |
DC |
B6 |
1C |
36 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR seveneighths |
ENCODING 8542 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
F0 |
30 |
62 |
66 |
6C |
18 |
30 |
60 |
DC |
B6 |
1C |
36 |
1C |
00 |
00 |
ENDCHAR |
STARTCHAR uni215F |
ENCODING 8543 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
C2 |
C6 |
CC |
18 |
30 |
60 |
C0 |
80 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2160 |
ENCODING 8544 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2161 |
ENCODING 8545 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2162 |
ENCODING 8546 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2163 |
ENCODING 8547 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
CE |
CE |
C4 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2164 |
ENCODING 8548 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
6C |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2165 |
ENCODING 8549 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
73 |
73 |
23 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2166 |
ENCODING 8550 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
95 |
95 |
95 |
95 |
95 |
95 |
95 |
65 |
65 |
65 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2167 |
ENCODING 8551 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
B5 |
B5 |
B5 |
B5 |
B5 |
B5 |
55 |
55 |
55 |
55 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2168 |
ENCODING 8552 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
DB |
CE |
CE |
CE |
DB |
DB |
DB |
DB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2169 |
ENCODING 8553 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
6C |
7C |
38 |
38 |
7C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni216A |
ENCODING 8554 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
DB |
73 |
73 |
73 |
DB |
DB |
DB |
DB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni216B |
ENCODING 8555 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
95 |
95 |
95 |
65 |
65 |
65 |
95 |
95 |
95 |
95 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni216C |
ENCODING 8556 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
60 |
60 |
60 |
60 |
60 |
60 |
62 |
66 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni216D |
ENCODING 8557 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
C2 |
C0 |
C0 |
C0 |
C0 |
C2 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni216E |
ENCODING 8558 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
6C |
66 |
66 |
66 |
66 |
66 |
66 |
6C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni216F |
ENCODING 8559 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
EE |
FE |
FE |
D6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2170 |
ENCODING 8560 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2171 |
ENCODING 8561 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
00 |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2172 |
ENCODING 8562 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
DB |
DB |
00 |
DB |
DB |
DB |
DB |
DB |
DB |
DB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2173 |
ENCODING 8563 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
00 |
DB |
DB |
DB |
DB |
DB |
CE |
C4 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2174 |
ENCODING 8564 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
66 |
66 |
66 |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2175 |
ENCODING 8565 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
00 |
DB |
DB |
DB |
DB |
DB |
73 |
23 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2176 |
ENCODING 8566 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
05 |
05 |
00 |
95 |
95 |
95 |
95 |
95 |
65 |
65 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2177 |
ENCODING 8567 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
15 |
15 |
00 |
B5 |
B5 |
B5 |
B5 |
55 |
55 |
55 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2178 |
ENCODING 8568 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
00 |
DB |
DB |
CE |
CE |
CE |
DB |
DB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2179 |
ENCODING 8569 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
6C |
38 |
38 |
38 |
6C |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni217A |
ENCODING 8570 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
00 |
DB |
DB |
73 |
73 |
73 |
DB |
DB |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni217B |
ENCODING 8571 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
05 |
05 |
00 |
95 |
95 |
65 |
65 |
95 |
95 |
95 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni217C |
ENCODING 8572 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni217D |
ENCODING 8573 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
7C |
C6 |
C0 |
C0 |
C0 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni217E |
ENCODING 8574 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
0C |
0C |
3C |
6C |
CC |
CC |
CC |
CC |
76 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni217F |
ENCODING 8575 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
EC |
FE |
D6 |
D6 |
D6 |
D6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2180 |
ENCODING 8576 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
5A |
DB |
DB |
DB |
DB |
DB |
DB |
5A |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2181 |
ENCODING 8577 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
CC |
E6 |
D6 |
D6 |
D6 |
D6 |
E6 |
CC |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2182 |
ENCODING 8578 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
5A |
99 |
BD |
DB |
DB |
BD |
99 |
5A |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2183 |
ENCODING 8579 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
CC |
86 |
06 |
06 |
06 |
06 |
86 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowleft |
ENCODING 8592 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
30 |
60 |
FF |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowup |
ENCODING 8593 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
7E |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowright |
ENCODING 8594 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
06 |
FF |
06 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowdown |
ENCODING 8595 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
7E |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowboth |
ENCODING 8596 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
24 |
66 |
FF |
66 |
24 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowupdn |
ENCODING 8597 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
7E |
18 |
18 |
18 |
7E |
3C |
18 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2196 |
ENCODING 8598 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
F0 |
E0 |
B0 |
18 |
0C |
06 |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2197 |
ENCODING 8599 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
0F |
07 |
0D |
18 |
30 |
60 |
C0 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2198 |
ENCODING 8600 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C0 |
60 |
30 |
18 |
0D |
07 |
0F |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2199 |
ENCODING 8601 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
03 |
06 |
0C |
18 |
B0 |
E0 |
F0 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni219A |
ENCODING 8602 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
32 |
62 |
FF |
64 |
34 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni219B |
ENCODING 8603 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
2C |
26 |
FF |
46 |
4C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni219C |
ENCODING 8604 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
E0 |
CE |
BB |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni219D |
ENCODING 8605 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
07 |
73 |
DD |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni219E |
ENCODING 8606 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
36 |
6C |
FF |
6C |
36 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni219F |
ENCODING 8607 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
7E |
18 |
3C |
7E |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A0 |
ENCODING 8608 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
6C |
36 |
FF |
36 |
6C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A1 |
ENCODING 8609 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
7E |
3C |
18 |
7E |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A2 |
ENCODING 8610 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
33 |
66 |
FC |
66 |
33 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A3 |
ENCODING 8611 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
66 |
3F |
66 |
CC |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A4 |
ENCODING 8612 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
33 |
63 |
FF |
63 |
33 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A5 |
ENCODING 8613 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
7E |
18 |
18 |
18 |
18 |
18 |
18 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A6 |
ENCODING 8614 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
CC |
C6 |
FF |
C6 |
CC |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A7 |
ENCODING 8615 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
18 |
18 |
18 |
18 |
18 |
18 |
7E |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowupdnbse |
ENCODING 8616 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
7E |
18 |
18 |
18 |
7E |
3C |
18 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21A9 |
ENCODING 8617 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
06 |
33 |
63 |
FE |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21AA |
ENCODING 8618 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
60 |
CC |
C6 |
7F |
06 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21AB |
ENCODING 8619 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
06 |
3B |
6B |
FE |
68 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21AC |
ENCODING 8620 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
60 |
DC |
D6 |
7F |
16 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21AD |
ENCODING 8621 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
24 |
5A |
FF |
66 |
24 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21AE |
ENCODING 8622 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
2C |
6E |
FF |
76 |
34 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21AF |
ENCODING 8623 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
30 |
60 |
63 |
FF |
C6 |
16 |
1C |
1C |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B0 |
ENCODING 8624 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
30 |
60 |
FE |
66 |
36 |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B1 |
ENCODING 8625 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
0C |
FE |
CC |
D8 |
C0 |
C0 |
C0 |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B2 |
ENCODING 8626 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
06 |
06 |
06 |
06 |
36 |
66 |
FE |
60 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B3 |
ENCODING 8627 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C0 |
C0 |
C0 |
C0 |
D8 |
CC |
FE |
0C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B4 |
ENCODING 8628 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FC |
0C |
0C |
3F |
1E |
0C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR carriagereturn |
ENCODING 8629 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
06 |
36 |
66 |
FE |
60 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B6 |
ENCODING 8630 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
1E |
33 |
33 |
33 |
30 |
FC |
78 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B7 |
ENCODING 8631 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
78 |
CC |
CC |
CC |
0C |
3F |
1E |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B8 |
ENCODING 8632 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
00 |
F0 |
E0 |
B0 |
18 |
0C |
06 |
03 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21B9 |
ENCODING 8633 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
98 |
B0 |
FF |
B0 |
98 |
19 |
0D |
FF |
0D |
19 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21BA |
ENCODING 8634 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
1E |
1C |
16 |
03 |
C3 |
C3 |
C3 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21BB |
ENCODING 8635 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
78 |
38 |
68 |
C0 |
C3 |
C3 |
C3 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21BC |
ENCODING 8636 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
30 |
60 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21BD |
ENCODING 8637 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21BE |
ENCODING 8638 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
1C |
1E |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21BF |
ENCODING 8639 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
38 |
78 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C0 |
ENCODING 8640 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
06 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C1 |
ENCODING 8641 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
06 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C2 |
ENCODING 8642 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1E |
1C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C3 |
ENCODING 8643 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
78 |
38 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C4 |
ENCODING 8644 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
06 |
FF |
06 |
0C |
30 |
60 |
FF |
60 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C5 |
ENCODING 8645 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
2E |
3F |
24 |
24 |
24 |
24 |
FC |
74 |
24 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C6 |
ENCODING 8646 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
60 |
FF |
60 |
30 |
0C |
06 |
FF |
06 |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C7 |
ENCODING 8647 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
60 |
FE |
60 |
30 |
00 |
30 |
60 |
FE |
60 |
30 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C8 |
ENCODING 8648 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
7E |
FF |
24 |
24 |
24 |
24 |
24 |
24 |
24 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21C9 |
ENCODING 8649 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
0C |
FE |
0C |
18 |
00 |
18 |
0C |
FE |
0C |
18 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21CA |
ENCODING 8650 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
24 |
24 |
24 |
24 |
24 |
24 |
FF |
7E |
24 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21CB |
ENCODING 8651 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
30 |
60 |
FF |
00 |
FF |
06 |
0C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21CC |
ENCODING 8652 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0C |
06 |
FF |
00 |
FF |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21CD |
ENCODING 8653 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
22 |
7F |
C4 |
7F |
24 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21CE |
ENCODING 8654 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
2C |
7E |
CB |
7E |
34 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21CF |
ENCODING 8655 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
24 |
FE |
23 |
FE |
44 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowdblleft |
ENCODING 8656 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
20 |
7F |
C0 |
7F |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowdblup |
ENCODING 8657 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
7C |
EE |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowdblright |
ENCODING 8658 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
04 |
FE |
03 |
FE |
04 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowdbldown |
ENCODING 8659 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
EE |
7C |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR arrowdblboth |
ENCODING 8660 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
24 |
7E |
C3 |
7E |
24 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21D5 |
ENCODING 8661 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
7C |
EE |
6C |
6C |
6C |
6C |
EE |
7C |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21D6 |
ENCODING 8662 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
F0 |
E0 |
B0 |
D8 |
EC |
B6 |
1B |
0C |
04 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21D7 |
ENCODING 8663 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
0F |
07 |
0D |
1B |
37 |
6D |
D8 |
30 |
20 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21D8 |
ENCODING 8664 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
20 |
30 |
D8 |
6D |
37 |
1B |
0D |
07 |
0F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21D9 |
ENCODING 8665 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
04 |
0C |
1B |
B6 |
EC |
D8 |
B0 |
E0 |
F0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21DA |
ENCODING 8666 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
3F |
60 |
FF |
60 |
3F |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21DB |
ENCODING 8667 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
FC |
06 |
FF |
06 |
FC |
08 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21DC |
ENCODING 8668 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
30 |
6A |
FF |
65 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21DD |
ENCODING 8669 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
A6 |
FF |
56 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21DE |
ENCODING 8670 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
7E |
18 |
18 |
3C |
18 |
3C |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21DF |
ENCODING 8671 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
3C |
18 |
3C |
18 |
18 |
7E |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E0 |
ENCODING 8672 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
30 |
60 |
D5 |
60 |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E1 |
ENCODING 8673 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
66 |
18 |
00 |
18 |
00 |
18 |
00 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E2 |
ENCODING 8674 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
06 |
AB |
06 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E3 |
ENCODING 8675 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
00 |
18 |
00 |
18 |
00 |
18 |
66 |
3C |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E4 |
ENCODING 8676 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
98 |
B0 |
FF |
B0 |
98 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E5 |
ENCODING 8677 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
19 |
0D |
FF |
0D |
19 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E6 |
ENCODING 8678 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
3F |
41 |
81 |
41 |
3F |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E7 |
ENCODING 8679 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
44 |
C6 |
44 |
44 |
44 |
44 |
44 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E8 |
ENCODING 8680 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
FC |
82 |
81 |
82 |
FC |
08 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21E9 |
ENCODING 8681 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
44 |
44 |
44 |
44 |
44 |
C6 |
44 |
28 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21EA |
ENCODING 8682 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
44 |
C6 |
44 |
44 |
7C |
00 |
7C |
44 |
7C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21EB |
ENCODING 8683 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
44 |
C6 |
44 |
44 |
44 |
C6 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21EC |
ENCODING 8684 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
7C |
C6 |
44 |
44 |
44 |
C6 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21ED |
ENCODING 8685 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
54 |
D6 |
54 |
54 |
54 |
D6 |
92 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21EE |
ENCODING 8686 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
28 |
54 |
EE |
44 |
C6 |
44 |
44 |
44 |
44 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21EF |
ENCODING 8687 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
28 |
54 |
EE |
44 |
C6 |
44 |
44 |
C6 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21F0 |
ENCODING 8688 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
E8 |
BC |
82 |
81 |
82 |
BC |
E8 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21F1 |
ENCODING 8689 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
80 |
BC |
B8 |
AC |
86 |
83 |
81 |
80 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21F2 |
ENCODING 8690 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
01 |
81 |
C1 |
61 |
35 |
1D |
3D |
01 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni21F3 |
ENCODING 8691 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
44 |
C6 |
44 |
44 |
44 |
C6 |
44 |
28 |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR universal |
ENCODING 8704 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
FE |
C6 |
6C |
6C |
38 |
38 |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2201 |
ENCODING 8705 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
66 |
60 |
60 |
60 |
60 |
60 |
66 |
3C |
00 |
00 |
ENDCHAR |
STARTCHAR partialdiff |
ENCODING 8706 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
06 |
06 |
3E |
66 |
C6 |
C6 |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR existential |
ENCODING 8707 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
06 |
06 |
06 |
7E |
06 |
06 |
06 |
06 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2204 |
ENCODING 8708 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
FE |
16 |
16 |
16 |
7E |
16 |
26 |
26 |
26 |
FE |
40 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR emptyset |
ENCODING 8709 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
3E |
66 |
CF |
DB |
DB |
F3 |
66 |
7C |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR Delta |
ENCODING 8710 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
38 |
38 |
6C |
6C |
C6 |
C6 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR gradient |
ENCODING 8711 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
C6 |
C6 |
6C |
6C |
38 |
38 |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR element |
ENCODING 8712 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
3E |
60 |
C0 |
C0 |
FE |
C0 |
C0 |
60 |
3E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR notelement |
ENCODING 8713 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
3E |
64 |
C8 |
C8 |
FE |
C8 |
D0 |
70 |
3E |
20 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni220A |
ENCODING 8714 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
3E |
60 |
C0 |
FE |
C0 |
60 |
3E |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR suchthat |
ENCODING 8715 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
F8 |
0C |
06 |
06 |
FE |
06 |
06 |
0C |
F8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni220C |
ENCODING 8716 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
F8 |
1C |
16 |
26 |
FE |
26 |
26 |
4C |
F8 |
40 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni220D |
ENCODING 8717 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
F8 |
0C |
06 |
FE |
06 |
0C |
F8 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni220E |
ENCODING 8718 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
7E |
7E |
7E |
7E |
7E |
7E |
7E |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR product |
ENCODING 8719 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
E7 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2210 |
ENCODING 8720 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E7 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
FF |
00 |
00 |
ENDCHAR |
STARTCHAR summation |
ENCODING 8721 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
C1 |
60 |
30 |
18 |
0C |
0C |
18 |
30 |
60 |
C1 |
FF |
00 |
00 |
ENDCHAR |
STARTCHAR minus |
ENCODING 8722 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2213 |
ENCODING 8723 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
7E |
00 |
18 |
18 |
7E |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2214 |
ENCODING 8724 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
18 |
00 |
18 |
18 |
7E |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR fraction |
ENCODING 8725 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
06 |
06 |
0C |
0C |
18 |
18 |
30 |
30 |
60 |
60 |
C0 |
C0 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2216 |
ENCODING 8726 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
C0 |
60 |
60 |
30 |
30 |
18 |
18 |
0C |
0C |
06 |
06 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR asteriskmath |
ENCODING 8727 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
24 |
18 |
7E |
18 |
24 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2218 |
ENCODING 8728 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
24 |
24 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR periodcentered |
ENCODING 8729 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
3C |
3C |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR radical |
ENCODING 8730 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
06 |
06 |
06 |
0C |
CC |
6C |
38 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni221B |
ENCODING 8731 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E3 |
33 |
66 |
36 |
E6 |
0C |
CC |
6C |
38 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni221C |
ENCODING 8732 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
33 |
73 |
B6 |
F6 |
36 |
0C |
CC |
6C |
38 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR proportional |
ENCODING 8733 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
D8 |
D8 |
6E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR infinity |
ENCODING 8734 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
DB |
DB |
6E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR orthogonal |
ENCODING 8735 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
C0 |
C0 |
C0 |
C0 |
C0 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR angle |
ENCODING 8736 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
02 |
06 |
0C |
18 |
30 |
60 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2221 |
ENCODING 8737 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
02 |
16 |
0C |
1C |
34 |
62 |
FF |
02 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2222 |
ENCODING 8738 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
0E |
38 |
E8 |
38 |
0E |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2223 |
ENCODING 8739 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2224 |
ENCODING 8740 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
1A |
1C |
38 |
58 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2225 |
ENCODING 8741 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2226 |
ENCODING 8742 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6C |
6C |
6C |
6E |
7C |
EC |
6C |
6C |
6C |
6C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR logicaland |
ENCODING 8743 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
10 |
38 |
38 |
6C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR logicalor |
ENCODING 8744 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C6 |
C6 |
6C |
6C |
38 |
38 |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR intersection |
ENCODING 8745 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
7C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR union |
ENCODING 8746 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR integral |
ENCODING 8747 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
1A |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
58 |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR uni222C |
ENCODING 8748 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
33 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
66 |
CC |
00 |
00 |
ENDCHAR |
STARTCHAR uni222D |
ENCODING 8749 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
2A |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
A8 |
00 |
00 |
ENDCHAR |
STARTCHAR uni222E |
ENCODING 8750 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
1A |
18 |
18 |
3C |
5A |
99 |
99 |
5A |
3C |
18 |
18 |
58 |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR uni222F |
ENCODING 8751 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
33 |
66 |
66 |
66 |
7E |
E7 |
E7 |
E7 |
E7 |
7E |
66 |
66 |
66 |
CC |
00 |
00 |
ENDCHAR |
STARTCHAR uni2230 |
ENCODING 8752 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
2A |
54 |
54 |
54 |
7C |
D6 |
D6 |
D6 |
D6 |
7C |
54 |
54 |
54 |
A8 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2231 |
ENCODING 8753 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
34 |
30 |
30 |
38 |
35 |
33 |
37 |
30 |
30 |
30 |
30 |
B0 |
60 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2232 |
ENCODING 8754 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
1A |
18 |
18 |
3C |
5A |
FA |
5A |
5A |
3C |
18 |
18 |
58 |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2233 |
ENCODING 8755 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
1A |
18 |
18 |
3C |
5A |
5F |
5A |
5A |
3C |
18 |
18 |
58 |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR therefore |
ENCODING 8756 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2235 |
ENCODING 8757 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2236 |
ENCODING 8758 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2237 |
ENCODING 8759 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
66 |
66 |
00 |
00 |
00 |
66 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2238 |
ENCODING 8760 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2239 |
ENCODING 8761 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
03 |
03 |
00 |
FC |
00 |
03 |
03 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni223A |
ENCODING 8762 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
66 |
66 |
00 |
7E |
00 |
66 |
66 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni223B |
ENCODING 8763 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
18 |
00 |
76 |
DC |
00 |
30 |
30 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR similar |
ENCODING 8764 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni223D |
ENCODING 8765 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
DC |
76 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni223E |
ENCODING 8766 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
72 |
DB |
DB |
4E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni223F |
ENCODING 8767 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
D8 |
DB |
DB |
1B |
0E |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2240 |
ENCODING 8768 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
1C |
30 |
30 |
30 |
18 |
0C |
0C |
0C |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2241 |
ENCODING 8769 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
08 |
10 |
76 |
DC |
10 |
20 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2242 |
ENCODING 8770 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FE |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2243 |
ENCODING 8771 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
DC |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2244 |
ENCODING 8772 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
08 |
76 |
DC |
10 |
FE |
20 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR congruent |
ENCODING 8773 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
76 |
DC |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2246 |
ENCODING 8774 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
76 |
DC |
08 |
FE |
10 |
FE |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2247 |
ENCODING 8775 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
08 |
76 |
DC |
10 |
FE |
20 |
FE |
40 |
40 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR approxequal |
ENCODING 8776 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
76 |
DC |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2249 |
ENCODING 8777 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
08 |
76 |
DC |
10 |
76 |
DC |
20 |
20 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni224A |
ENCODING 8778 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
76 |
DC |
00 |
76 |
DC |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni224B |
ENCODING 8779 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
76 |
DC |
00 |
76 |
DC |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni224C |
ENCODING 8780 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
DC |
76 |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni224D |
ENCODING 8781 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C6 |
7C |
00 |
7C |
C6 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni224E |
ENCODING 8782 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
66 |
00 |
00 |
66 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni224F |
ENCODING 8783 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
66 |
00 |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2250 |
ENCODING 8784 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
7E |
00 |
00 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2251 |
ENCODING 8785 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
7E |
00 |
00 |
7E |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2252 |
ENCODING 8786 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
60 |
00 |
7E |
00 |
00 |
7E |
00 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2253 |
ENCODING 8787 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
06 |
00 |
7E |
00 |
00 |
7E |
00 |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2254 |
ENCODING 8788 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C0 |
DF |
00 |
00 |
DF |
C0 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2255 |
ENCODING 8789 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
03 |
FB |
00 |
00 |
FB |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2256 |
ENCODING 8790 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
28 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2257 |
ENCODING 8791 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
10 |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2258 |
ENCODING 8792 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
38 |
44 |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2259 |
ENCODING 8793 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
44 |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni225A |
ENCODING 8794 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
44 |
28 |
10 |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni225B |
ENCODING 8795 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
10 |
7C |
28 |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni225C |
ENCODING 8796 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
10 |
28 |
44 |
7C |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni225D |
ENCODING 8797 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
26 |
7C |
B4 |
6C |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni225E |
ENCODING 8798 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
68 |
54 |
54 |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni225F |
ENCODING 8799 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
08 |
10 |
00 |
10 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR notequal |
ENCODING 8800 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
04 |
08 |
7E |
08 |
10 |
7E |
10 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR equivalence |
ENCODING 8801 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
00 |
00 |
FE |
00 |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2262 |
ENCODING 8802 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
08 |
FE |
08 |
10 |
FE |
10 |
20 |
FE |
20 |
40 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2263 |
ENCODING 8803 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
00 |
00 |
FE |
00 |
00 |
FE |
00 |
00 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR lessequal |
ENCODING 8804 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0E |
38 |
E0 |
38 |
0E |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR greaterequal |
ENCODING 8805 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
E0 |
38 |
0E |
38 |
E0 |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2266 |
ENCODING 8806 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
0E |
38 |
E0 |
38 |
0E |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2267 |
ENCODING 8807 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
E0 |
38 |
0E |
38 |
E0 |
00 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2268 |
ENCODING 8808 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
0E |
38 |
E0 |
38 |
0E |
08 |
FE |
10 |
FE |
20 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2269 |
ENCODING 8809 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
E0 |
38 |
0E |
38 |
E0 |
08 |
FE |
10 |
FE |
20 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni226A |
ENCODING 8810 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
1B |
36 |
6C |
D8 |
6C |
36 |
1B |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni226B |
ENCODING 8811 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
D8 |
6C |
36 |
1B |
36 |
6C |
D8 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni226C |
ENCODING 8812 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
66 |
18 |
3C |
66 |
66 |
66 |
66 |
3C |
18 |
66 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni226D |
ENCODING 8813 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
CE |
7C |
10 |
7C |
E6 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni226E |
ENCODING 8814 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
04 |
0E |
38 |
E8 |
38 |
0E |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni226F |
ENCODING 8815 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
E0 |
38 |
2E |
38 |
E0 |
40 |
40 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2270 |
ENCODING 8816 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
04 |
0E |
38 |
E8 |
38 |
0E |
10 |
FE |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2271 |
ENCODING 8817 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
E0 |
38 |
2E |
38 |
E0 |
40 |
FE |
40 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2272 |
ENCODING 8818 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0E |
38 |
E0 |
38 |
0E |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2273 |
ENCODING 8819 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
E0 |
38 |
0E |
38 |
E0 |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2274 |
ENCODING 8820 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
04 |
0E |
38 |
E8 |
38 |
0E |
10 |
76 |
DC |
20 |
20 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2275 |
ENCODING 8821 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
E0 |
38 |
2E |
38 |
E0 |
40 |
76 |
DC |
80 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2276 |
ENCODING 8822 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0E |
38 |
E0 |
38 |
0E |
E0 |
38 |
0E |
38 |
E0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2277 |
ENCODING 8823 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
E0 |
38 |
0E |
38 |
E0 |
0E |
38 |
E0 |
38 |
0E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2278 |
ENCODING 8824 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
0E |
38 |
E8 |
38 |
1E |
F0 |
38 |
2E |
38 |
E0 |
20 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2279 |
ENCODING 8825 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
E8 |
38 |
0E |
38 |
F0 |
1E |
38 |
E0 |
38 |
2E |
20 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni227A |
ENCODING 8826 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
02 |
06 |
1C |
F0 |
1C |
06 |
02 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni227B |
ENCODING 8827 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
80 |
C0 |
70 |
1E |
70 |
C0 |
80 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni227C |
ENCODING 8828 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
02 |
06 |
1C |
F0 |
1C |
06 |
F2 |
1C |
06 |
02 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni227D |
ENCODING 8829 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
80 |
C0 |
70 |
1E |
70 |
C0 |
9E |
70 |
C0 |
80 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni227E |
ENCODING 8830 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
02 |
06 |
1C |
F0 |
1C |
06 |
02 |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni227F |
ENCODING 8831 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
80 |
C0 |
70 |
1E |
70 |
C0 |
80 |
00 |
76 |
DC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2280 |
ENCODING 8832 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
06 |
0C |
38 |
E8 |
38 |
1C |
16 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2281 |
ENCODING 8833 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
D0 |
70 |
38 |
2E |
38 |
60 |
C0 |
40 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR propersubset |
ENCODING 8834 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
7E |
C0 |
C0 |
C0 |
C0 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR propersuperset |
ENCODING 8835 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FC |
06 |
06 |
06 |
06 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR notsubset |
ENCODING 8836 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
04 |
7E |
C8 |
C8 |
D0 |
D0 |
7E |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2285 |
ENCODING 8837 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
FC |
16 |
16 |
26 |
26 |
FC |
40 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR reflexsubset |
ENCODING 8838 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7E |
C0 |
C0 |
C0 |
C0 |
7E |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR reflexsuperset |
ENCODING 8839 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FC |
06 |
06 |
06 |
06 |
FC |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2288 |
ENCODING 8840 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
7E |
C8 |
C8 |
D0 |
D0 |
7E |
20 |
FE |
40 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2289 |
ENCODING 8841 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
FC |
16 |
16 |
26 |
26 |
FC |
40 |
FE |
80 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni228A |
ENCODING 8842 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7E |
C0 |
C0 |
C0 |
C0 |
7E |
08 |
FE |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni228B |
ENCODING 8843 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FC |
06 |
06 |
06 |
06 |
FC |
10 |
FE |
20 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni228C |
ENCODING 8844 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
82 |
92 |
A2 |
FA |
A2 |
92 |
44 |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni228D |
ENCODING 8845 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
82 |
82 |
92 |
BA |
BA |
92 |
44 |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni228E |
ENCODING 8846 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
82 |
82 |
92 |
BA |
92 |
82 |
44 |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni228F |
ENCODING 8847 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
C0 |
C0 |
C0 |
C0 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2290 |
ENCODING 8848 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
06 |
06 |
06 |
06 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2291 |
ENCODING 8849 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
C0 |
C0 |
C0 |
C0 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2292 |
ENCODING 8850 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
06 |
06 |
06 |
06 |
FE |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2293 |
ENCODING 8851 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2294 |
ENCODING 8852 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR circleplus |
ENCODING 8853 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
54 |
92 |
FE |
92 |
54 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2296 |
ENCODING 8854 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
44 |
82 |
FE |
82 |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR circlemultiply |
ENCODING 8855 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
44 |
AA |
92 |
AA |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2298 |
ENCODING 8856 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
44 |
8A |
92 |
A2 |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2299 |
ENCODING 8857 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
44 |
92 |
BA |
92 |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni229A |
ENCODING 8858 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
44 |
92 |
AA |
92 |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni229B |
ENCODING 8859 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
54 |
D6 |
BA |
D6 |
54 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni229C |
ENCODING 8860 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
44 |
BA |
82 |
BA |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni229D |
ENCODING 8861 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
44 |
82 |
BA |
82 |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni229E |
ENCODING 8862 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
92 |
92 |
FE |
92 |
92 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni229F |
ENCODING 8863 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
82 |
82 |
FE |
82 |
82 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A0 |
ENCODING 8864 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
C6 |
AA |
92 |
AA |
C6 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A1 |
ENCODING 8865 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
82 |
92 |
BA |
92 |
82 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A2 |
ENCODING 8866 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C0 |
C0 |
C0 |
C0 |
FF |
C0 |
C0 |
C0 |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A3 |
ENCODING 8867 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
03 |
03 |
03 |
03 |
FF |
03 |
03 |
03 |
03 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A4 |
ENCODING 8868 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR perpendicular |
ENCODING 8869 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A6 |
ENCODING 8870 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
60 |
60 |
60 |
60 |
7E |
60 |
60 |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A7 |
ENCODING 8871 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
60 |
60 |
60 |
7E |
60 |
7E |
60 |
60 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A8 |
ENCODING 8872 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C0 |
C0 |
C0 |
FF |
C0 |
FF |
C0 |
C0 |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22A9 |
ENCODING 8873 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
D8 |
D8 |
D8 |
D8 |
DF |
D8 |
D8 |
D8 |
D8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22AA |
ENCODING 8874 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
A8 |
A8 |
A8 |
A8 |
AF |
A8 |
A8 |
A8 |
A8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22AB |
ENCODING 8875 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
D8 |
D8 |
D8 |
DF |
D8 |
DF |
D8 |
D8 |
D8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22AC |
ENCODING 8876 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C0 |
C2 |
C4 |
C4 |
FF |
C8 |
C8 |
D0 |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22AD |
ENCODING 8877 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C0 |
C4 |
C4 |
FF |
C8 |
FF |
D0 |
D0 |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22AE |
ENCODING 8878 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
D8 |
D9 |
DA |
DA |
DF |
DA |
DA |
DC |
D8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22AF |
ENCODING 8879 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
D8 |
D9 |
DA |
DF |
DA |
DF |
DA |
DC |
D8 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B0 |
ENCODING 8880 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
0C |
06 |
1C |
F0 |
1C |
06 |
0C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B1 |
ENCODING 8881 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
60 |
C0 |
70 |
1E |
70 |
C0 |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B2 |
ENCODING 8882 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
06 |
1E |
76 |
C6 |
76 |
1E |
06 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B3 |
ENCODING 8883 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C0 |
F0 |
DC |
C6 |
DC |
F0 |
C0 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B4 |
ENCODING 8884 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
1E |
76 |
C6 |
76 |
1E |
06 |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B5 |
ENCODING 8885 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
F0 |
DC |
C6 |
DC |
F0 |
C0 |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B6 |
ENCODING 8886 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
42 |
BF |
42 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B7 |
ENCODING 8887 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
42 |
FD |
42 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B8 |
ENCODING 8888 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
02 |
7D |
02 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22B9 |
ENCODING 8889 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
10 |
00 |
C6 |
00 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22BA |
ENCODING 8890 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22BB |
ENCODING 8891 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C6 |
C6 |
6C |
6C |
38 |
38 |
10 |
10 |
00 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22BC |
ENCODING 8892 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
00 |
10 |
10 |
38 |
38 |
6C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22BD |
ENCODING 8893 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
00 |
C6 |
C6 |
6C |
6C |
38 |
38 |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22BE |
ENCODING 8894 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
C0 |
C0 |
C0 |
F0 |
C8 |
C4 |
C4 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22BF |
ENCODING 8895 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
03 |
07 |
0B |
13 |
23 |
43 |
83 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C0 |
ENCODING 8896 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
38 |
38 |
6C |
6C |
C6 |
C6 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C1 |
ENCODING 8897 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C6 |
C6 |
6C |
6C |
38 |
38 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C2 |
ENCODING 8898 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
38 |
6C |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C3 |
ENCODING 8899 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C6 |
C6 |
C6 |
C6 |
C6 |
C6 |
6C |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C4 |
ENCODING 8900 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
38 |
6C |
38 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR dotmath |
ENCODING 8901 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C6 |
ENCODING 8902 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
10 |
7C |
38 |
28 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C7 |
ENCODING 8903 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
92 |
44 |
28 |
92 |
28 |
44 |
92 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C8 |
ENCODING 8904 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
82 |
C6 |
AA |
92 |
AA |
C6 |
82 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22C9 |
ENCODING 8905 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
82 |
C4 |
A8 |
90 |
A8 |
C4 |
82 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22CA |
ENCODING 8906 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
82 |
46 |
2A |
12 |
2A |
46 |
82 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22CB |
ENCODING 8907 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
80 |
40 |
20 |
10 |
28 |
44 |
82 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22CC |
ENCODING 8908 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
02 |
04 |
08 |
10 |
28 |
44 |
82 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22CD |
ENCODING 8909 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
DC |
76 |
00 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22CE |
ENCODING 8910 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
10 |
38 |
38 |
6C |
6C |
C6 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22CF |
ENCODING 8911 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C6 |
6C |
6C |
38 |
38 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D0 |
ENCODING 8912 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
3E |
60 |
CE |
D8 |
D8 |
CE |
60 |
3E |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D1 |
ENCODING 8913 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
F8 |
0C |
E6 |
36 |
36 |
E6 |
0C |
F8 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D2 |
ENCODING 8914 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
38 |
44 |
92 |
AA |
AA |
AA |
AA |
AA |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D3 |
ENCODING 8915 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
AA |
AA |
AA |
AA |
AA |
92 |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D4 |
ENCODING 8916 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
10 |
38 |
54 |
92 |
92 |
92 |
92 |
92 |
92 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D5 |
ENCODING 8917 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
7E |
18 |
18 |
7E |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D6 |
ENCODING 8918 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
30 |
64 |
CE |
64 |
30 |
18 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D7 |
ENCODING 8919 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
30 |
18 |
4C |
E6 |
4C |
18 |
30 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D8 |
ENCODING 8920 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
15 |
2A |
54 |
A8 |
54 |
2A |
15 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22D9 |
ENCODING 8921 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
A8 |
54 |
2A |
15 |
2A |
54 |
A8 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22DA |
ENCODING 8922 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
0E |
38 |
E0 |
38 |
0E |
00 |
FE |
00 |
E0 |
38 |
0E |
38 |
E0 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22DB |
ENCODING 8923 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
E0 |
38 |
0E |
38 |
E0 |
00 |
FE |
00 |
0E |
38 |
E0 |
38 |
0E |
00 |
00 |
ENDCHAR |
STARTCHAR uni22DC |
ENCODING 8924 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
00 |
0E |
38 |
E0 |
38 |
0E |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22DD |
ENCODING 8925 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
00 |
E0 |
38 |
0E |
38 |
E0 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22DE |
ENCODING 8926 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
02 |
06 |
1C |
F2 |
06 |
1C |
F0 |
1C |
06 |
02 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22DF |
ENCODING 8927 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
80 |
C0 |
70 |
9E |
C0 |
70 |
1E |
70 |
C0 |
80 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E0 |
ENCODING 8928 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0A |
0E |
1C |
F0 |
1C |
16 |
F2 |
1C |
26 |
22 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E1 |
ENCODING 8929 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
88 |
C8 |
70 |
1E |
70 |
D0 |
9E |
70 |
E0 |
A0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E2 |
ENCODING 8930 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
FE |
C8 |
C8 |
D0 |
D0 |
FE |
20 |
FE |
40 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E3 |
ENCODING 8931 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
FE |
16 |
16 |
26 |
26 |
FE |
40 |
FE |
80 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E4 |
ENCODING 8932 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
C0 |
C0 |
C0 |
C0 |
FE |
08 |
FE |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E5 |
ENCODING 8933 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
06 |
06 |
06 |
06 |
FE |
10 |
FE |
20 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E6 |
ENCODING 8934 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0E |
38 |
E0 |
38 |
0E |
10 |
76 |
DC |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E7 |
ENCODING 8935 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
E0 |
38 |
0E |
38 |
E0 |
10 |
76 |
DC |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E8 |
ENCODING 8936 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
02 |
06 |
1C |
F0 |
1C |
06 |
02 |
10 |
76 |
DC |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22E9 |
ENCODING 8937 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
80 |
C0 |
70 |
1E |
70 |
C0 |
80 |
10 |
76 |
DC |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22EA |
ENCODING 8938 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
0E |
1E |
76 |
D6 |
76 |
1E |
26 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22EB |
ENCODING 8939 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
C8 |
F0 |
DC |
D6 |
DC |
F0 |
E0 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22EC |
ENCODING 8940 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
0E |
1E |
76 |
D6 |
76 |
1E |
26 |
20 |
FE |
40 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22ED |
ENCODING 8941 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
C8 |
F0 |
DC |
D6 |
DC |
F0 |
E0 |
20 |
FE |
40 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22EE |
ENCODING 8942 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
00 |
00 |
18 |
18 |
00 |
00 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22EF |
ENCODING 8943 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
DB |
DB |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22F0 |
ENCODING 8944 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
03 |
03 |
00 |
00 |
18 |
18 |
00 |
00 |
C0 |
C0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni22F1 |
ENCODING 8945 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
00 |
00 |
18 |
18 |
00 |
00 |
03 |
03 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR emptyset |
ENCODING 8960 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
3D |
66 |
C7 |
CB |
D3 |
E3 |
66 |
BC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR house |
ENCODING 8962 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
38 |
6C |
C6 |
C6 |
C6 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2308 |
ENCODING 8968 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2309 |
ENCODING 8969 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni230A |
ENCODING 8970 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni230B |
ENCODING 8971 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR revlogicalnot |
ENCODING 8976 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
C0 |
C0 |
C0 |
C0 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2318 |
ENCODING 8984 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
42 |
A5 |
7E |
24 |
24 |
7E |
A5 |
42 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR circleplus |
ENCODING 8986 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
38 |
38 |
54 |
8A |
F6 |
82 |
54 |
38 |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR H |
ENCODING 8987 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
FE |
FE |
44 |
44 |
28 |
10 |
28 |
44 |
44 |
FE |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR integraltp |
ENCODING 8992 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0E |
1B |
1B |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR integralbt |
ENCODING 8993 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
D8 |
D8 |
D8 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR angleleft |
ENCODING 9001 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0C |
18 |
18 |
30 |
30 |
60 |
60 |
30 |
30 |
18 |
18 |
0C |
0C |
00 |
00 |
ENDCHAR |
STARTCHAR angleright |
ENCODING 9002 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
60 |
30 |
30 |
18 |
18 |
0C |
0C |
18 |
18 |
30 |
30 |
60 |
60 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9115 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
03 |
06 |
0C |
0C |
18 |
18 |
18 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9116 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9117 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
18 |
18 |
18 |
0C |
0C |
06 |
03 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9118 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
C0 |
60 |
30 |
30 |
18 |
18 |
18 |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9119 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9120 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
18 |
18 |
18 |
30 |
30 |
60 |
C0 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9121 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
3F |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9122 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9123 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
30 |
3F |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9124 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
FC |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9125 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9126 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
0C |
FC |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9127 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
07 |
0C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9128 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
30 |
E0 |
30 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9129 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
0C |
07 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9130 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9131 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
E0 |
30 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9132 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
0C |
07 |
0C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9133 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
30 |
E0 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9134 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF100000 |
ENCODING 9135 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9136 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
07 |
0C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
30 |
E0 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9137 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
E0 |
30 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
0C |
07 |
ENDCHAR |
STARTCHAR summation |
ENCODING 9138 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
C1 |
C0 |
60 |
60 |
60 |
60 |
30 |
30 |
30 |
30 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR summation |
ENCODING 9139 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
30 |
30 |
30 |
30 |
60 |
60 |
60 |
60 |
C0 |
C1 |
FF |
00 |
00 |
ENDCHAR |
STARTCHAR uni2423 |
ENCODING 9140 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
C3 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2423 |
ENCODING 9141 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
C3 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2423 |
ENCODING 9142 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
C3 |
FF |
00 |
FF |
C3 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9143 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
D8 |
D8 |
78 |
78 |
38 |
38 |
18 |
18 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9144 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9145 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
03 |
ENDCHAR |
STARTCHAR SF100000 |
ENCODING 9146 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF100000 |
ENCODING 9147 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF100000 |
ENCODING 9148 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF100000 |
ENCODING 9149 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR carriagereturn |
ENCODING 9166 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
07 |
05 |
05 |
05 |
05 |
25 |
79 |
C2 |
7C |
20 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2409 |
ENCODING 9225 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D8 |
D8 |
F8 |
D8 |
D8 |
0F |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni240A |
ENCODING 9226 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
C0 |
C0 |
F0 |
0F |
0C |
0E |
0C |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni240B |
ENCODING 9227 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D8 |
D8 |
F8 |
70 |
20 |
0F |
06 |
06 |
06 |
06 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni240C |
ENCODING 9228 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F0 |
C0 |
E0 |
C0 |
C0 |
0F |
0C |
0E |
0C |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni240D |
ENCODING 9229 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
C0 |
C0 |
C0 |
70 |
1E |
1B |
1E |
1B |
1B |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2423 |
ENCODING 9251 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2424 |
ENCODING 9252 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
98 |
D8 |
F8 |
D8 |
D8 |
0C |
0C |
0C |
0C |
0F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR question |
ENCODING 9254 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7C |
FE |
C6 |
C6 |
60 |
30 |
30 |
00 |
30 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF100000 |
ENCODING 9472 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2501 |
ENCODING 9473 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF110000 |
ENCODING 9474 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2503 |
ENCODING 9475 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2504 |
ENCODING 9476 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
6D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2505 |
ENCODING 9477 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
6D |
6D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2506 |
ENCODING 9478 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
00 |
18 |
18 |
18 |
18 |
18 |
00 |
18 |
18 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni2507 |
ENCODING 9479 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
00 |
1C |
1C |
1C |
1C |
1C |
00 |
1C |
1C |
1C |
1C |
00 |
ENDCHAR |
STARTCHAR uni2508 |
ENCODING 9480 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
AA |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2509 |
ENCODING 9481 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
AA |
AA |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni250A |
ENCODING 9482 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
00 |
18 |
18 |
18 |
00 |
18 |
18 |
18 |
00 |
18 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni250B |
ENCODING 9483 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
00 |
1C |
1C |
1C |
00 |
1C |
1C |
1C |
00 |
1C |
1C |
1C |
00 |
ENDCHAR |
STARTCHAR SF010000 |
ENCODING 9484 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni250D |
ENCODING 9485 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
1F |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni250E |
ENCODING 9486 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni250F |
ENCODING 9487 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
1F |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR SF030000 |
ENCODING 9488 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
F8 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2511 |
ENCODING 9489 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
F8 |
F8 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2512 |
ENCODING 9490 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2513 |
ENCODING 9491 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FC |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR SF020000 |
ENCODING 9492 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2515 |
ENCODING 9493 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1F |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2516 |
ENCODING 9494 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2517 |
ENCODING 9495 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1F |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF040000 |
ENCODING 9496 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2519 |
ENCODING 9497 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
F8 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni251A |
ENCODING 9498 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni251B |
ENCODING 9499 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FC |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF080000 |
ENCODING 9500 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni251D |
ENCODING 9501 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1F |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni251E |
ENCODING 9502 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni251F |
ENCODING 9503 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2520 |
ENCODING 9504 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2521 |
ENCODING 9505 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1F |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2522 |
ENCODING 9506 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1F |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2523 |
ENCODING 9507 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1F |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR SF090000 |
ENCODING 9508 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
F8 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2525 |
ENCODING 9509 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
F8 |
F8 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2526 |
ENCODING 9510 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FC |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2527 |
ENCODING 9511 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2528 |
ENCODING 9512 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2529 |
ENCODING 9513 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FC |
FC |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni252A |
ENCODING 9514 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FC |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni252B |
ENCODING 9515 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FC |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR SF060000 |
ENCODING 9516 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni252D |
ENCODING 9517 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
F8 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni252E |
ENCODING 9518 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni252F |
ENCODING 9519 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2530 |
ENCODING 9520 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2531 |
ENCODING 9521 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2532 |
ENCODING 9522 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2533 |
ENCODING 9523 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR SF070000 |
ENCODING 9524 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2535 |
ENCODING 9525 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2536 |
ENCODING 9526 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2537 |
ENCODING 9527 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2538 |
ENCODING 9528 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2539 |
ENCODING 9529 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni253A |
ENCODING 9530 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni253B |
ENCODING 9531 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF050000 |
ENCODING 9532 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni253D |
ENCODING 9533 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
F8 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni253E |
ENCODING 9534 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni253F |
ENCODING 9535 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2540 |
ENCODING 9536 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2541 |
ENCODING 9537 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2542 |
ENCODING 9538 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2543 |
ENCODING 9539 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
FC |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2544 |
ENCODING 9540 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2545 |
ENCODING 9541 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2546 |
ENCODING 9542 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2547 |
ENCODING 9543 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2548 |
ENCODING 9544 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
FF |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni2549 |
ENCODING 9545 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
FC |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni254A |
ENCODING 9546 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
1F |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni254B |
ENCODING 9547 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
FF |
FF |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni254C |
ENCODING 9548 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
EE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni254D |
ENCODING 9549 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
EE |
EE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni254E |
ENCODING 9550 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
ENDCHAR |
STARTCHAR uni254F |
ENCODING 9551 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
00 |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
00 |
ENDCHAR |
STARTCHAR SF430000 |
ENCODING 9552 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF240000 |
ENCODING 9553 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF510000 |
ENCODING 9554 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
1F |
18 |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF520000 |
ENCODING 9555 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
3F |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF390000 |
ENCODING 9556 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
3F |
30 |
37 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF220000 |
ENCODING 9557 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
F8 |
18 |
F8 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF210000 |
ENCODING 9558 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF250000 |
ENCODING 9559 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
06 |
F6 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF500000 |
ENCODING 9560 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
1F |
18 |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF490000 |
ENCODING 9561 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
3F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF380000 |
ENCODING 9562 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
37 |
30 |
3F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF280000 |
ENCODING 9563 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
F8 |
18 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF270000 |
ENCODING 9564 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF260000 |
ENCODING 9565 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
F6 |
06 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF360000 |
ENCODING 9566 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
1F |
18 |
1F |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF370000 |
ENCODING 9567 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
37 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF420000 |
ENCODING 9568 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
37 |
30 |
37 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF190000 |
ENCODING 9569 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
F8 |
18 |
F8 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF200000 |
ENCODING 9570 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
F6 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF230000 |
ENCODING 9571 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
F6 |
06 |
F6 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF470000 |
ENCODING 9572 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF480000 |
ENCODING 9573 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF410000 |
ENCODING 9574 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
F7 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF450000 |
ENCODING 9575 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF460000 |
ENCODING 9576 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF400000 |
ENCODING 9577 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
F7 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR SF540000 |
ENCODING 9578 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
FF |
18 |
FF |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR SF530000 |
ENCODING 9579 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
FF |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR SF440000 |
ENCODING 9580 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
36 |
36 |
36 |
36 |
36 |
36 |
F7 |
00 |
F7 |
36 |
36 |
36 |
36 |
36 |
36 |
36 |
ENDCHAR |
STARTCHAR uni256D |
ENCODING 9581 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
03 |
0E |
0C |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni256E |
ENCODING 9582 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
C0 |
70 |
30 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni256F |
ENCODING 9583 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
30 |
70 |
C0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2570 |
ENCODING 9584 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
0C |
0E |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2571 |
ENCODING 9585 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
01 |
01 |
02 |
02 |
04 |
04 |
08 |
08 |
10 |
10 |
20 |
20 |
40 |
40 |
80 |
80 |
ENDCHAR |
STARTCHAR uni2572 |
ENCODING 9586 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
80 |
80 |
40 |
40 |
20 |
20 |
10 |
10 |
08 |
08 |
04 |
04 |
02 |
02 |
01 |
01 |
ENDCHAR |
STARTCHAR uni2573 |
ENCODING 9587 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
81 |
81 |
42 |
42 |
24 |
24 |
18 |
18 |
18 |
18 |
24 |
24 |
42 |
42 |
81 |
81 |
ENDCHAR |
STARTCHAR uni2574 |
ENCODING 9588 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2575 |
ENCODING 9589 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2576 |
ENCODING 9590 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2577 |
ENCODING 9591 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR uni2578 |
ENCODING 9592 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FC |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2579 |
ENCODING 9593 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni257A |
ENCODING 9594 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
1F |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni257B |
ENCODING 9595 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni257C |
ENCODING 9596 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
1F |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni257D |
ENCODING 9597 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
ENDCHAR |
STARTCHAR uni257E |
ENCODING 9598 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni257F |
ENCODING 9599 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
1C |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
ENDCHAR |
STARTCHAR upblock |
ENCODING 9600 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2581 |
ENCODING 9601 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
ENDCHAR |
STARTCHAR uni2582 |
ENCODING 9602 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR uni2583 |
ENCODING 9603 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR dnblock |
ENCODING 9604 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR uni2585 |
ENCODING 9605 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR uni2586 |
ENCODING 9606 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR uni2587 |
ENCODING 9607 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR block |
ENCODING 9608 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR uni2589 |
ENCODING 9609 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
ENDCHAR |
STARTCHAR uni258A |
ENCODING 9610 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
FC |
ENDCHAR |
STARTCHAR uni258B |
ENCODING 9611 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
F8 |
ENDCHAR |
STARTCHAR lfblock |
ENCODING 9612 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
ENDCHAR |
STARTCHAR uni258D |
ENCODING 9613 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
E0 |
ENDCHAR |
STARTCHAR uni258E |
ENCODING 9614 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
C0 |
ENDCHAR |
STARTCHAR uni258F |
ENCODING 9615 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
80 |
ENDCHAR |
STARTCHAR rtblock |
ENCODING 9616 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
0F |
ENDCHAR |
STARTCHAR ltshade |
ENCODING 9617 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
11 |
44 |
11 |
44 |
11 |
44 |
11 |
44 |
11 |
44 |
11 |
44 |
11 |
44 |
11 |
44 |
ENDCHAR |
STARTCHAR shade |
ENCODING 9618 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
55 |
AA |
55 |
AA |
55 |
AA |
55 |
AA |
55 |
AA |
55 |
AA |
55 |
AA |
55 |
AA |
ENDCHAR |
STARTCHAR dkshade |
ENCODING 9619 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
DD |
77 |
DD |
77 |
DD |
77 |
DD |
77 |
DD |
77 |
DD |
77 |
DD |
77 |
DD |
77 |
ENDCHAR |
STARTCHAR uni2594 |
ENCODING 9620 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FF |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2595 |
ENCODING 9621 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
ENDCHAR |
STARTCHAR filledbox |
ENCODING 9632 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR H22073 |
ENCODING 9633 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
82 |
82 |
82 |
82 |
82 |
82 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25A2 |
ENCODING 9634 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
7C |
82 |
82 |
82 |
82 |
82 |
82 |
82 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25A3 |
ENCODING 9635 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
82 |
BA |
BA |
BA |
BA |
BA |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25A4 |
ENCODING 9636 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
82 |
FE |
82 |
FE |
82 |
FE |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25A5 |
ENCODING 9637 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
AA |
AA |
AA |
AA |
AA |
AA |
AA |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25A6 |
ENCODING 9638 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
AA |
FE |
AA |
FE |
AA |
FE |
AA |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25A7 |
ENCODING 9639 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
8A |
C6 |
A2 |
92 |
8A |
C6 |
A2 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25A8 |
ENCODING 9640 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
A2 |
C6 |
8A |
92 |
A2 |
C6 |
8A |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25A9 |
ENCODING 9641 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
AA |
C6 |
AA |
92 |
AA |
C6 |
AA |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR H18543 |
ENCODING 9642 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7C |
7C |
7C |
7C |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR H18551 |
ENCODING 9643 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7C |
44 |
44 |
44 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR filledrect |
ENCODING 9644 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
FE |
FE |
FE |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25AD |
ENCODING 9645 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FE |
82 |
82 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25AE |
ENCODING 9646 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
FE |
00 |
00 |
ENDCHAR |
STARTCHAR uni25AF |
ENCODING 9647 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
82 |
82 |
82 |
82 |
82 |
82 |
82 |
82 |
82 |
82 |
FE |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B0 |
ENCODING 9648 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
7E |
7E |
FC |
FC |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B1 |
ENCODING 9649 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
42 |
42 |
84 |
84 |
FC |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR triagup |
ENCODING 9650 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
38 |
38 |
7C |
7C |
FE |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B3 |
ENCODING 9651 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
28 |
28 |
44 |
44 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B4 |
ENCODING 9652 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
38 |
38 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B5 |
ENCODING 9653 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
28 |
28 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B6 |
ENCODING 9654 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
80 |
C0 |
E0 |
F0 |
F8 |
FC |
F8 |
F0 |
E0 |
C0 |
80 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B7 |
ENCODING 9655 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
80 |
C0 |
A0 |
90 |
88 |
84 |
88 |
90 |
A0 |
C0 |
80 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B8 |
ENCODING 9656 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
40 |
70 |
78 |
70 |
40 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25B9 |
ENCODING 9657 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
40 |
70 |
48 |
70 |
40 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR triagrt |
ENCODING 9658 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
80 |
E0 |
F8 |
FE |
F8 |
E0 |
80 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25BB |
ENCODING 9659 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
80 |
E0 |
98 |
86 |
98 |
E0 |
80 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR triagdn |
ENCODING 9660 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
FE |
7C |
7C |
38 |
38 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25BD |
ENCODING 9661 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
82 |
44 |
44 |
28 |
28 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25BE |
ENCODING 9662 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7C |
38 |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25BF |
ENCODING 9663 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7C |
28 |
28 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C0 |
ENCODING 9664 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
02 |
06 |
0E |
1E |
3E |
7E |
3E |
1E |
0E |
06 |
02 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C1 |
ENCODING 9665 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
02 |
06 |
0A |
12 |
22 |
42 |
22 |
12 |
0A |
06 |
02 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C2 |
ENCODING 9666 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
38 |
78 |
38 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C3 |
ENCODING 9667 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
38 |
48 |
38 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR triaglf |
ENCODING 9668 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
02 |
0E |
3E |
FE |
3E |
0E |
02 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C5 |
ENCODING 9669 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
02 |
0E |
32 |
C2 |
32 |
0E |
02 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C6 |
ENCODING 9670 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
38 |
7C |
7C |
FE |
FE |
7C |
7C |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C7 |
ENCODING 9671 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
44 |
44 |
82 |
82 |
44 |
44 |
28 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C8 |
ENCODING 9672 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
44 |
54 |
BA |
BA |
54 |
44 |
28 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25C9 |
ENCODING 9673 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
99 |
BD |
BD |
BD |
BD |
99 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR lozenge |
ENCODING 9674 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
28 |
28 |
44 |
82 |
82 |
44 |
28 |
28 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR circle |
ENCODING 9675 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
81 |
81 |
81 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25CC |
ENCODING 9676 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
14 |
40 |
01 |
80 |
01 |
80 |
01 |
80 |
02 |
28 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25CD |
ENCODING 9677 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
A5 |
A5 |
A5 |
A5 |
A5 |
A5 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25CE |
ENCODING 9678 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
99 |
A5 |
A5 |
A5 |
A5 |
99 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR H18533 |
ENCODING 9679 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
7E |
FF |
FF |
FF |
FF |
FF |
FF |
7E |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25D0 |
ENCODING 9680 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
72 |
F1 |
F1 |
F1 |
F1 |
F1 |
F1 |
72 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25D1 |
ENCODING 9681 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
4E |
8F |
8F |
8F |
8F |
8F |
8F |
4E |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25D2 |
ENCODING 9682 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
81 |
81 |
81 |
FF |
FF |
FF |
7E |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25D3 |
ENCODING 9683 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
7E |
FF |
FF |
FF |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25D4 |
ENCODING 9684 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
4E |
8F |
8F |
8F |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25D5 |
ENCODING 9685 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
4E |
8F |
8F |
8F |
FF |
FF |
FF |
7E |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25D6 |
ENCODING 9686 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
70 |
F0 |
F0 |
F0 |
F0 |
F0 |
F0 |
70 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25D7 |
ENCODING 9687 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
0E |
0F |
0F |
0F |
0F |
0F |
0F |
0E |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR invbullet |
ENCODING 9688 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FF |
FF |
FF |
FF |
FF |
FF |
E7 |
C3 |
C3 |
E7 |
FF |
FF |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR invcircle |
ENCODING 9689 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FF |
FF |
C3 |
BD |
7E |
7E |
7E |
7E |
7E |
7E |
BD |
C3 |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR uni25DA |
ENCODING 9690 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FF |
FF |
C3 |
BD |
7E |
7E |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25DB |
ENCODING 9691 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
7E |
7E |
7E |
BD |
C3 |
FF |
FF |
FF |
FF |
ENDCHAR |
STARTCHAR uni25DC |
ENCODING 9692 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
40 |
80 |
80 |
80 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25DD |
ENCODING 9693 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0C |
02 |
01 |
01 |
01 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25DE |
ENCODING 9694 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
01 |
01 |
01 |
02 |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25DF |
ENCODING 9695 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
80 |
80 |
80 |
40 |
30 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25E0 |
ENCODING 9696 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
81 |
81 |
81 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25E1 |
ENCODING 9697 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25E2 |
ENCODING 9698 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
01 |
01 |
03 |
03 |
07 |
07 |
0F |
0F |
1F |
1F |
3F |
3F |
7F |
7F |
FF |
FF |
ENDCHAR |
STARTCHAR uni25E3 |
ENCODING 9699 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
80 |
80 |
C0 |
C0 |
E0 |
E0 |
F0 |
F0 |
F8 |
F8 |
FC |
FC |
FE |
FE |
FF |
FF |
ENDCHAR |
STARTCHAR uni25E4 |
ENCODING 9700 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FF |
FF |
FE |
FE |
FC |
FC |
F8 |
F8 |
F0 |
F0 |
E0 |
E0 |
C0 |
C0 |
80 |
80 |
ENDCHAR |
STARTCHAR uni25E5 |
ENCODING 9701 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
FF |
FF |
7F |
7F |
3F |
3F |
1F |
1F |
0F |
0F |
07 |
07 |
03 |
03 |
01 |
01 |
ENDCHAR |
STARTCHAR openbullet |
ENCODING 9702 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
3C |
66 |
42 |
42 |
66 |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25E7 |
ENCODING 9703 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
F1 |
F1 |
F1 |
F1 |
F1 |
F1 |
F1 |
F1 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25E8 |
ENCODING 9704 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
8F |
8F |
8F |
8F |
8F |
8F |
8F |
8F |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25E9 |
ENCODING 9705 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
FF |
FD |
F9 |
F1 |
F1 |
E1 |
C1 |
81 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25EA |
ENCODING 9706 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
81 |
83 |
87 |
8F |
8F |
9F |
BF |
FF |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25EB |
ENCODING 9707 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FF |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
99 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25EC |
ENCODING 9708 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
28 |
28 |
44 |
44 |
92 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25ED |
ENCODING 9709 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
38 |
38 |
74 |
74 |
F2 |
F2 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25EE |
ENCODING 9710 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
38 |
38 |
5C |
5C |
9E |
9E |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25EF |
ENCODING 9711 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
81 |
81 |
81 |
81 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25F0 |
ENCODING 9712 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
92 |
92 |
92 |
F2 |
82 |
82 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25F1 |
ENCODING 9713 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
82 |
82 |
82 |
F2 |
92 |
92 |
92 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25F2 |
ENCODING 9714 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
82 |
82 |
82 |
9E |
92 |
92 |
92 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25F3 |
ENCODING 9715 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
FE |
92 |
92 |
92 |
9E |
82 |
82 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25F4 |
ENCODING 9716 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
4A |
89 |
89 |
89 |
F9 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25F5 |
ENCODING 9717 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
81 |
81 |
F9 |
89 |
89 |
89 |
4A |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25F6 |
ENCODING 9718 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
81 |
81 |
9F |
91 |
91 |
91 |
52 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni25F7 |
ENCODING 9719 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
52 |
91 |
91 |
91 |
9F |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2600 |
ENCODING 9728 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
54 |
38 |
FE |
38 |
54 |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2602 |
ENCODING 9729 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
30 |
7C |
FE |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2601 |
ENCODING 9730 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
38 |
7C |
FE |
10 |
10 |
10 |
10 |
14 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2605 |
ENCODING 9733 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
38 |
FE |
7C |
38 |
6C |
44 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2606 |
ENCODING 9734 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
28 |
EE |
44 |
54 |
6C |
44 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2607 |
ENCODING 9735 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
18 |
30 |
60 |
C0 |
60 |
34 |
1C |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2608 |
ENCODING 9736 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
C6 |
CC |
D8 |
F0 |
D8 |
CD |
C7 |
CF |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2609 |
ENCODING 9737 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
38 |
44 |
82 |
92 |
82 |
44 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni260A |
ENCODING 9738 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
24 |
42 |
42 |
42 |
A5 |
A5 |
42 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni260B |
ENCODING 9739 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
42 |
A5 |
A5 |
42 |
42 |
42 |
24 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni260C |
ENCODING 9740 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
06 |
0C |
78 |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni260D |
ENCODING 9741 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
36 |
36 |
1C |
18 |
30 |
70 |
D8 |
D8 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2610 |
ENCODING 9744 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
82 |
82 |
82 |
82 |
82 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2611 |
ENCODING 9745 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
82 |
86 |
8A |
BA |
92 |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2612 |
ENCODING 9746 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
FE |
82 |
EE |
BA |
BA |
EE |
82 |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2613 |
ENCODING 9747 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
82 |
C6 |
6C |
7C |
38 |
7C |
6C |
C6 |
82 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2620 |
ENCODING 9760 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
7C |
82 |
AA |
82 |
44 |
7C |
44 |
38 |
00 |
44 |
C6 |
38 |
C6 |
44 |
00 |
ENDCHAR |
STARTCHAR uni2622 |
ENCODING 9762 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
38 |
44 |
EE |
FE |
92 |
BA |
7C |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2626 |
ENCODING 9766 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
7E |
18 |
18 |
FF |
18 |
1E |
78 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2628 |
ENCODING 9768 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
7E |
18 |
18 |
FF |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2629 |
ENCODING 9769 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
38 |
10 |
10 |
92 |
FE |
92 |
10 |
10 |
38 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni262A |
ENCODING 9770 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
72 |
E0 |
C4 |
DF |
CE |
CA |
E0 |
72 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni262B |
ENCODING 9771 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
54 |
28 |
54 |
AA |
AA |
AA |
AA |
54 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni262E |
ENCODING 9774 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
5A |
99 |
99 |
99 |
BD |
FF |
DB |
5A |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni262F |
ENCODING 9775 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
42 |
81 |
85 |
B1 |
F9 |
FF |
DF |
7E |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2630 |
ENCODING 9776 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
FE |
00 |
00 |
FE |
FE |
00 |
00 |
FE |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2631 |
ENCODING 9777 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
EE |
EE |
00 |
00 |
FE |
FE |
00 |
00 |
FE |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2632 |
ENCODING 9778 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
FE |
00 |
00 |
EE |
EE |
00 |
00 |
FE |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2633 |
ENCODING 9779 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
EE |
EE |
00 |
00 |
EE |
EE |
00 |
00 |
FE |
FE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2634 |
ENCODING 9780 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
FE |
00 |
00 |
FE |
FE |
00 |
00 |
EE |
EE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2635 |
ENCODING 9781 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
EE |
EE |
00 |
00 |
FE |
FE |
00 |
00 |
EE |
EE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2636 |
ENCODING 9782 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
FE |
FE |
00 |
00 |
EE |
EE |
00 |
00 |
EE |
EE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2637 |
ENCODING 9783 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
EE |
EE |
00 |
00 |
EE |
EE |
00 |
00 |
EE |
EE |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2639 |
ENCODING 9785 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
81 |
A5 |
81 |
81 |
81 |
99 |
A5 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR smileface |
ENCODING 9786 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
81 |
A5 |
81 |
81 |
A5 |
99 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR invsmileface |
ENCODING 9787 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
FF |
DB |
FF |
FF |
DB |
E7 |
FF |
FF |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR sun |
ENCODING 9788 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
54 |
28 |
C6 |
28 |
54 |
10 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni263D |
ENCODING 9789 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
78 |
14 |
0A |
0A |
0A |
0A |
0A |
0A |
14 |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni263E |
ENCODING 9790 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
28 |
50 |
50 |
50 |
50 |
50 |
50 |
28 |
1E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni263F |
ENCODING 9791 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
66 |
66 |
3C |
66 |
66 |
66 |
66 |
3C |
18 |
7E |
18 |
18 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR female |
ENCODING 9792 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
3C |
18 |
7E |
18 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2641 |
ENCODING 9793 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
7E |
18 |
3C |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR male |
ENCODING 9794 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
06 |
0E |
1A |
78 |
CC |
CC |
CC |
CC |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2643 |
ENCODING 9795 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
03 |
03 |
7B |
CF |
CF |
CF |
0F |
1B |
33 |
FF |
03 |
03 |
03 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2644 |
ENCODING 9796 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
60 |
F0 |
60 |
6E |
73 |
63 |
63 |
66 |
66 |
63 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2645 |
ENCODING 9797 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
D6 |
54 |
54 |
7C |
54 |
54 |
D6 |
38 |
44 |
44 |
38 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2646 |
ENCODING 9798 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
3C |
DB |
DB |
DB |
DB |
7E |
3C |
18 |
3C |
18 |
18 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2647 |
ENCODING 9799 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
F8 |
CC |
CC |
CC |
CC |
F8 |
C0 |
C0 |
C0 |
C0 |
FE |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2648 |
ENCODING 9800 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
42 |
A5 |
A5 |
3C |
3C |
18 |
18 |
18 |
18 |
18 |
18 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2649 |
ENCODING 9801 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
C3 |
66 |
66 |
66 |
66 |
3C |
66 |
66 |
66 |
66 |
3C |
00 |
00 |
ENDCHAR |
STARTCHAR uni264A |
ENCODING 9802 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C3 |
7E |
66 |
66 |
66 |
66 |
66 |
66 |
7E |
C3 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni264B |
ENCODING 9803 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7E |
DB |
D8 |
70 |
00 |
00 |
0E |
1B |
DB |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni264C |
ENCODING 9804 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1E |
33 |
33 |
33 |
33 |
1B |
7B |
DB |
DB |
73 |
03 |
01 |
00 |
00 |
ENDCHAR |
STARTCHAR uni264D |
ENCODING 9805 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
94 |
7C |
55 |
57 |
55 |
55 |
55 |
55 |
55 |
55 |
06 |
0B |
00 |
00 |
ENDCHAR |
STARTCHAR uni264E |
ENCODING 9806 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
66 |
66 |
66 |
66 |
24 |
E7 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni264F |
ENCODING 9807 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
94 |
7C |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
54 |
04 |
03 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2650 |
ENCODING 9808 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1F |
07 |
8F |
DB |
73 |
70 |
D8 |
88 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2651 |
ENCODING 9809 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
90 |
50 |
70 |
68 |
48 |
48 |
4E |
49 |
09 |
0E |
10 |
20 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2652 |
ENCODING 9810 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
2A |
7E |
AA |
00 |
00 |
2A |
7E |
AA |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2653 |
ENCODING 9811 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C3 |
66 |
66 |
66 |
66 |
FF |
66 |
66 |
66 |
66 |
C3 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR spade |
ENCODING 9824 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
3C |
7E |
FF |
FF |
7E |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2661 |
ENCODING 9825 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
6C |
92 |
82 |
82 |
82 |
44 |
28 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2662 |
ENCODING 9826 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
28 |
44 |
82 |
44 |
28 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR club |
ENCODING 9827 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
3C |
3C |
E7 |
E7 |
E7 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2664 |
ENCODING 9828 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
24 |
42 |
81 |
81 |
66 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR heart |
ENCODING 9829 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
6C |
FE |
FE |
FE |
FE |
7C |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR diamond |
ENCODING 9830 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
38 |
7C |
FE |
7C |
38 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2667 |
ENCODING 9831 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
18 |
24 |
3C |
E7 |
A5 |
E7 |
18 |
18 |
3C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni2669 |
ENCODING 9833 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
38 |
78 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR musicalnote |
ENCODING 9834 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
30 |
3C |
3E |
32 |
30 |
30 |
30 |
70 |
F0 |
E0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR musicalnotedbl |
ENCODING 9835 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
7F |
6F |
63 |
63 |
63 |
63 |
E3 |
E7 |
C7 |
06 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni266C |
ENCODING 9836 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
7F |
63 |
7F |
63 |
63 |
63 |
63 |
63 |
E7 |
E7 |
C6 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni266D |
ENCODING 9837 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
C0 |
C0 |
C0 |
C0 |
CC |
DE |
E6 |
C4 |
D8 |
E0 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uni266E |
ENCODING 9838 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
40 |
40 |
44 |
5C |
74 |
44 |
44 |
5C |
74 |
44 |
04 |
04 |
00 |
00 |
ENDCHAR |
STARTCHAR uni266F |
ENCODING 9839 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
04 |
46 |
5C |
74 |
C4 |
46 |
5C |
74 |
C4 |
40 |
40 |
00 |
00 |
ENDCHAR |
STARTCHAR ff |
ENCODING 64256 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3B |
66 |
66 |
66 |
FF |
66 |
66 |
66 |
66 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR fi |
ENCODING 64257 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3C |
6E |
66 |
60 |
FE |
66 |
66 |
66 |
66 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR fl |
ENCODING 64258 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
3E |
6E |
66 |
66 |
FE |
66 |
66 |
66 |
66 |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ffi |
ENCODING 64259 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6E |
DB |
DB |
D8 |
FF |
DB |
DB |
DB |
DB |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR ffl |
ENCODING 64260 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
6F |
DB |
DB |
DB |
FF |
DB |
DB |
DB |
DB |
FF |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB05 |
ENCODING 64261 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
38 |
6C |
6C |
6F |
6C |
6C |
6C |
6C |
6D |
F6 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB50 |
ENCODING 64336 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
06 |
29 |
5E |
00 |
04 |
04 |
04 |
04 |
04 |
04 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB51 |
ENCODING 64337 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
06 |
29 |
5E |
00 |
04 |
04 |
04 |
04 |
04 |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB52 |
ENCODING 64338 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
81 |
81 |
7E |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB53 |
ENCODING 64339 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
80 |
81 |
7E |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB54 |
ENCODING 64340 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
04 |
04 |
F8 |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB55 |
ENCODING 64341 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
08 |
F7 |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB56 |
ENCODING 64342 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
81 |
81 |
7E |
00 |
14 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB57 |
ENCODING 64343 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
80 |
81 |
7E |
00 |
14 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB58 |
ENCODING 64344 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
04 |
04 |
F8 |
00 |
14 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB59 |
ENCODING 64345 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
08 |
F7 |
00 |
14 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB5A |
ENCODING 64346 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
81 |
81 |
7E |
00 |
14 |
00 |
14 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB5B |
ENCODING 64347 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
80 |
81 |
7E |
00 |
14 |
00 |
14 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB5C |
ENCODING 64348 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
04 |
04 |
F8 |
00 |
14 |
00 |
14 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB5D |
ENCODING 64349 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
08 |
F7 |
00 |
14 |
00 |
14 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB5E |
ENCODING 64350 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
08 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB5F |
ENCODING 64351 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
08 |
00 |
40 |
80 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB60 |
ENCODING 64352 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
08 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB61 |
ENCODING 64353 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
08 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB62 |
ENCODING 64354 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
14 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB63 |
ENCODING 64355 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
14 |
00 |
40 |
80 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB64 |
ENCODING 64356 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
14 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB65 |
ENCODING 64357 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
14 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB66 |
ENCODING 64358 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB67 |
ENCODING 64359 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
40 |
80 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB68 |
ENCODING 64360 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB69 |
ENCODING 64361 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB6A |
ENCODING 64362 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
00 |
0A |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB6B |
ENCODING 64363 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
00 |
0A |
00 |
06 |
49 |
89 |
86 |
7D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB6C |
ENCODING 64364 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
0C |
12 |
0A |
06 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB6D |
ENCODING 64365 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
0C |
12 |
12 |
0C |
F3 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB6E |
ENCODING 64366 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0A |
00 |
0A |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB6F |
ENCODING 64367 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0A |
00 |
0A |
00 |
06 |
49 |
89 |
86 |
7D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB70 |
ENCODING 64368 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
14 |
00 |
14 |
00 |
0C |
12 |
0A |
06 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB71 |
ENCODING 64369 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
14 |
00 |
14 |
00 |
0C |
12 |
12 |
0C |
F3 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB72 |
ENCODING 64370 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
88 |
80 |
88 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB73 |
ENCODING 64371 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
41 |
88 |
80 |
88 |
40 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB74 |
ENCODING 64372 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
47 |
18 |
E0 |
00 |
04 |
00 |
04 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB75 |
ENCODING 64373 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
C1 |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB76 |
ENCODING 64374 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
80 |
94 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB77 |
ENCODING 64375 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
41 |
80 |
94 |
80 |
40 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB78 |
ENCODING 64376 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
47 |
18 |
E0 |
00 |
00 |
0A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB79 |
ENCODING 64377 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
C1 |
00 |
00 |
14 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB7A |
ENCODING 64378 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
94 |
80 |
88 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB7B |
ENCODING 64379 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
41 |
94 |
80 |
88 |
40 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB7C |
ENCODING 64380 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
47 |
18 |
E0 |
00 |
0A |
00 |
04 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB7D |
ENCODING 64381 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
C1 |
00 |
14 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB7E |
ENCODING 64382 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
94 |
80 |
94 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB7F |
ENCODING 64383 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
41 |
94 |
80 |
94 |
40 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB80 |
ENCODING 64384 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
47 |
18 |
E0 |
00 |
0A |
00 |
0A |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB81 |
ENCODING 64385 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
C1 |
00 |
14 |
00 |
14 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB82 |
ENCODING 64386 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
14 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB83 |
ENCODING 64387 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
08 |
04 |
46 |
39 |
00 |
00 |
14 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB84 |
ENCODING 64388 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
28 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB85 |
ENCODING 64389 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
28 |
00 |
08 |
08 |
04 |
46 |
39 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB86 |
ENCODING 64390 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
00 |
28 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB87 |
ENCODING 64391 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
00 |
28 |
00 |
08 |
08 |
04 |
46 |
39 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB88 |
ENCODING 64392 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
20 |
38 |
28 |
70 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB89 |
ENCODING 64393 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
20 |
38 |
28 |
70 |
08 |
08 |
04 |
46 |
39 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB8A |
ENCODING 64394 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
00 |
14 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB8B |
ENCODING 64395 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
14 |
00 |
00 |
04 |
07 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB8C |
ENCODING 64396 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB8D |
ENCODING 64397 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
00 |
00 |
04 |
07 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB8E |
ENCODING 64398 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
01 |
02 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB8F |
ENCODING 64399 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
01 |
02 |
04 |
08 |
48 |
84 |
82 |
7D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB90 |
ENCODING 64400 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
18 |
20 |
10 |
08 |
08 |
F0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB91 |
ENCODING 64401 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
18 |
20 |
20 |
10 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB92 |
ENCODING 64402 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
09 |
12 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB93 |
ENCODING 64403 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
09 |
12 |
04 |
08 |
48 |
84 |
82 |
7D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB94 |
ENCODING 64404 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
30 |
46 |
18 |
20 |
10 |
08 |
08 |
F0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB95 |
ENCODING 64405 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
30 |
46 |
18 |
20 |
20 |
10 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB96 |
ENCODING 64406 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
09 |
12 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
10 |
00 |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB97 |
ENCODING 64407 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
09 |
12 |
04 |
08 |
48 |
84 |
82 |
7D |
00 |
10 |
00 |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB98 |
ENCODING 64408 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
30 |
46 |
18 |
20 |
10 |
08 |
08 |
F0 |
00 |
10 |
00 |
10 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB99 |
ENCODING 64409 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
30 |
46 |
18 |
20 |
20 |
10 |
08 |
F7 |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB9A |
ENCODING 64410 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
A4 |
09 |
12 |
04 |
08 |
44 |
82 |
82 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB9B |
ENCODING 64411 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
A4 |
09 |
12 |
04 |
08 |
48 |
84 |
82 |
7D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB9C |
ENCODING 64412 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
A2 |
0C |
13 |
0C |
10 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB9D |
ENCODING 64413 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
A2 |
0C |
13 |
0C |
10 |
10 |
08 |
04 |
FB |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB9E |
ENCODING 64414 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFB9F |
ENCODING 64415 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
01 |
41 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA0 |
ENCODING 64416 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA1 |
ENCODING 64417 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
00 |
00 |
01 |
41 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA2 |
ENCODING 64418 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA3 |
ENCODING 64419 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
1C |
14 |
38 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA4 |
ENCODING 64420 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
38 |
40 |
38 |
40 |
18 |
24 |
22 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA5 |
ENCODING 64421 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
70 |
80 |
70 |
80 |
10 |
68 |
88 |
74 |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA6 |
ENCODING 64422 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
24 |
22 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA7 |
ENCODING 64423 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
13 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA8 |
ENCODING 64424 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
F0 |
10 |
14 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBA9 |
ENCODING 64425 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
F7 |
08 |
08 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBAA |
ENCODING 64426 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
38 |
4C |
52 |
32 |
3D |
40 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBAB |
ENCODING 64427 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
38 |
4C |
52 |
32 |
3D |
40 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBAC |
ENCODING 64428 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
38 |
4C |
52 |
32 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBAD |
ENCODING 64429 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
38 |
4C |
52 |
32 |
FD |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBAE |
ENCODING 64430 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
14 |
60 |
80 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBAF |
ENCODING 64431 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
07 |
18 |
20 |
3F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBB0 |
ENCODING 64432 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
70 |
80 |
70 |
80 |
08 |
14 |
60 |
80 |
FE |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBB1 |
ENCODING 64433 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
1C |
20 |
1C |
20 |
00 |
00 |
07 |
18 |
20 |
3F |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBD3 |
ENCODING 64467 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
00 |
29 |
01 |
19 |
21 |
19 |
A1 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBD4 |
ENCODING 64468 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
00 |
2A |
02 |
32 |
42 |
32 |
C6 |
79 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBD5 |
ENCODING 64469 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
40 |
00 |
A3 |
0C |
10 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBD6 |
ENCODING 64470 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
40 |
00 |
A3 |
0C |
10 |
10 |
08 |
04 |
FB |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBD7 |
ENCODING 64471 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
28 |
18 |
10 |
20 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBD8 |
ENCODING 64472 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
28 |
18 |
10 |
20 |
00 |
0C |
12 |
0F |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBD9 |
ENCODING 64473 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
08 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBDA |
ENCODING 64474 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
08 |
00 |
00 |
00 |
0C |
12 |
0F |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBDB |
ENCODING 64475 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
08 |
08 |
08 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBDC |
ENCODING 64476 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
08 |
08 |
08 |
00 |
00 |
0C |
12 |
0F |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBDD |
ENCODING 64477 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
23 |
54 |
33 |
24 |
40 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBDE |
ENCODING 64478 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBDF |
ENCODING 64479 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
14 |
00 |
0C |
12 |
0F |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBE0 |
ENCODING 64480 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
12 |
0E |
02 |
3C |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBE1 |
ENCODING 64481 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
08 |
00 |
00 |
00 |
0C |
12 |
0F |
02 |
3C |
18 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBE2 |
ENCODING 64482 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
14 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBE3 |
ENCODING 64483 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
14 |
00 |
00 |
00 |
0C |
12 |
0F |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBE4 |
ENCODING 64484 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
10 |
00 |
10 |
ENDCHAR |
STARTCHAR uniFBE5 |
ENCODING 64485 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
07 |
88 |
87 |
81 |
7E |
10 |
00 |
10 |
ENDCHAR |
STARTCHAR uniFBE6 |
ENCODING 64486 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
04 |
04 |
F8 |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBE7 |
ENCODING 64487 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
08 |
F7 |
00 |
08 |
00 |
08 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBE8 |
ENCODING 64488 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBE9 |
ENCODING 64489 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBFC |
ENCODING 64508 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
82 |
7C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBFD |
ENCODING 64509 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
07 |
88 |
87 |
81 |
7E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBFE |
ENCODING 64510 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
14 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFBFF |
ENCODING 64511 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
14 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC5B |
ENCODING 64603 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
20 |
20 |
20 |
20 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC5C |
ENCODING 64604 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
10 |
10 |
10 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC5D |
ENCODING 64605 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
10 |
10 |
10 |
00 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC5E |
ENCODING 64606 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
24 |
98 |
60 |
C2 |
12 |
92 |
9C |
60 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC5F |
ENCODING 64607 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
02 |
92 |
9C |
60 |
0E |
70 |
0E |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC60 |
ENCODING 64608 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
60 |
04 |
54 |
58 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC61 |
ENCODING 64609 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
28 |
10 |
60 |
04 |
54 |
58 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC62 |
ENCODING 64610 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
04 |
54 |
58 |
20 |
0C |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC63 |
ENCODING 64611 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
10 |
04 |
54 |
58 |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFC90 |
ENCODING 64656 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
07 |
88 |
87 |
81 |
7E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFCF2 |
ENCODING 64754 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0E |
F0 |
02 |
92 |
9C |
60 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFCF3 |
ENCODING 64755 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
24 |
18 |
60 |
02 |
92 |
9C |
60 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFCF4 |
ENCODING 64756 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
02 |
12 |
9C |
60 |
0E |
70 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFD3C |
ENCODING 64828 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
10 |
28 |
50 |
28 |
08 |
08 |
08 |
08 |
07 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFD3D |
ENCODING 64829 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
14 |
28 |
14 |
04 |
04 |
04 |
04 |
04 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFD3E |
ENCODING 64830 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
08 |
10 |
54 |
38 |
54 |
10 |
08 |
04 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFD3F |
ENCODING 64831 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
10 |
08 |
2A |
1C |
2A |
08 |
10 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFDF2 |
ENCODING 65010 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
2A |
14 |
00 |
21 |
69 |
A9 |
69 |
16 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE50 |
ENCODING 65104 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE51 |
ENCODING 65105 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
08 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE52 |
ENCODING 65106 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE54 |
ENCODING 65108 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
00 |
00 |
08 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE55 |
ENCODING 65109 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
00 |
00 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE56 |
ENCODING 65110 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
24 |
08 |
10 |
00 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE57 |
ENCODING 65111 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
10 |
10 |
10 |
00 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE58 |
ENCODING 65112 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE59 |
ENCODING 65113 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
10 |
10 |
10 |
10 |
10 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE5A |
ENCODING 65114 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
08 |
08 |
08 |
08 |
08 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE5B |
ENCODING 65115 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
10 |
10 |
20 |
10 |
10 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE5C |
ENCODING 65116 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
08 |
08 |
04 |
08 |
08 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE5D |
ENCODING 65117 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
10 |
10 |
10 |
10 |
10 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE5E |
ENCODING 65118 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
18 |
08 |
08 |
08 |
08 |
08 |
18 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE5F |
ENCODING 65119 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
28 |
7C |
28 |
7C |
28 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE60 |
ENCODING 65120 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
28 |
28 |
10 |
2A |
24 |
1A |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE61 |
ENCODING 65121 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
10 |
10 |
7C |
38 |
38 |
44 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE62 |
ENCODING 65122 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
10 |
10 |
7C |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE63 |
ENCODING 65123 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE64 |
ENCODING 65124 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
10 |
20 |
10 |
08 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE65 |
ENCODING 65125 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
20 |
10 |
08 |
10 |
20 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE66 |
ENCODING 65126 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
3C |
00 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE68 |
ENCODING 65128 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
20 |
10 |
10 |
08 |
08 |
04 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE69 |
ENCODING 65129 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
10 |
38 |
54 |
30 |
18 |
54 |
38 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE6A |
ENCODING 65130 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
24 |
08 |
08 |
10 |
10 |
24 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE6B |
ENCODING 65131 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
44 |
54 |
58 |
40 |
38 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE70 |
ENCODING 65136 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
30 |
0C |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE71 |
ENCODING 65137 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
06 |
18 |
60 |
06 |
18 |
60 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE72 |
ENCODING 65138 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
12 |
CA |
2C |
70 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE74 |
ENCODING 65140 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
30 |
0C |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE76 |
ENCODING 65142 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
30 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE77 |
ENCODING 65143 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
06 |
18 |
60 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE78 |
ENCODING 65144 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
08 |
14 |
0C |
08 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE79 |
ENCODING 65145 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
24 |
14 |
18 |
60 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE7A |
ENCODING 65146 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
30 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE7B |
ENCODING 65147 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
06 |
18 |
60 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE7C |
ENCODING 65148 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0A |
2A |
2C |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE7D |
ENCODING 65149 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
02 |
12 |
92 |
9C |
60 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE7E |
ENCODING 65150 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
24 |
18 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE7F |
ENCODING 65151 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
24 |
24 |
18 |
00 |
00 |
00 |
00 |
FF |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE80 |
ENCODING 65152 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
24 |
20 |
1E |
20 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE81 |
ENCODING 65153 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
02 |
3C |
40 |
10 |
10 |
10 |
10 |
10 |
10 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE82 |
ENCODING 65154 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
01 |
3E |
40 |
08 |
08 |
08 |
08 |
08 |
07 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE83 |
ENCODING 65155 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
18 |
20 |
1C |
20 |
08 |
08 |
08 |
08 |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE84 |
ENCODING 65156 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
0C |
10 |
0E |
10 |
04 |
04 |
04 |
04 |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE85 |
ENCODING 65157 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
1C |
20 |
1C |
20 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE86 |
ENCODING 65158 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
1C |
20 |
1C |
20 |
00 |
0C |
12 |
0F |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE87 |
ENCODING 65159 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
04 |
04 |
04 |
04 |
04 |
04 |
00 |
0C |
10 |
0E |
10 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE88 |
ENCODING 65160 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
04 |
04 |
04 |
04 |
04 |
03 |
00 |
0C |
10 |
0E |
10 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE89 |
ENCODING 65161 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
40 |
38 |
40 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE8A |
ENCODING 65162 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
30 |
40 |
38 |
40 |
00 |
00 |
00 |
07 |
88 |
87 |
81 |
7E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE8B |
ENCODING 65163 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
1C |
20 |
1C |
20 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE8C |
ENCODING 65164 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
1C |
20 |
1C |
20 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE8D |
ENCODING 65165 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
08 |
08 |
08 |
08 |
08 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE8E |
ENCODING 65166 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
08 |
08 |
08 |
08 |
07 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE8F |
ENCODING 65167 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE90 |
ENCODING 65168 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
40 |
80 |
81 |
7E |
00 |
00 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE91 |
ENCODING 65169 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE92 |
ENCODING 65170 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE93 |
ENCODING 65171 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
28 |
00 |
00 |
18 |
24 |
22 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE94 |
ENCODING 65172 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
50 |
00 |
10 |
10 |
68 |
88 |
74 |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE95 |
ENCODING 65173 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
14 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE96 |
ENCODING 65174 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
14 |
00 |
40 |
80 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE97 |
ENCODING 65175 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
14 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE98 |
ENCODING 65176 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
14 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE99 |
ENCODING 65177 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
40 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE9A |
ENCODING 65178 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
40 |
80 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE9B |
ENCODING 65179 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE9C |
ENCODING 65180 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE9D |
ENCODING 65181 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
80 |
88 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE9E |
ENCODING 65182 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
41 |
80 |
88 |
80 |
40 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFE9F |
ENCODING 65183 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
47 |
18 |
E0 |
00 |
00 |
10 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA0 |
ENCODING 65184 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
C1 |
00 |
00 |
08 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA1 |
ENCODING 65185 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
8F |
30 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA2 |
ENCODING 65186 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
41 |
80 |
80 |
80 |
40 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA3 |
ENCODING 65187 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
38 |
47 |
18 |
E0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA4 |
ENCODING 65188 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
70 |
8F |
32 |
C1 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA5 |
ENCODING 65189 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
20 |
00 |
00 |
70 |
8F |
30 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA6 |
ENCODING 65190 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
00 |
00 |
70 |
8F |
32 |
41 |
80 |
80 |
80 |
40 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA7 |
ENCODING 65191 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
00 |
38 |
47 |
18 |
E0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA8 |
ENCODING 65192 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
00 |
00 |
70 |
8F |
32 |
C1 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEA9 |
ENCODING 65193 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEAA |
ENCODING 65194 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
08 |
04 |
46 |
39 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEAB |
ENCODING 65195 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
00 |
08 |
04 |
02 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEAC |
ENCODING 65196 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
00 |
08 |
08 |
04 |
46 |
39 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEAD |
ENCODING 65197 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEAE |
ENCODING 65198 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
04 |
07 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEAF |
ENCODING 65199 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
00 |
04 |
02 |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB0 |
ENCODING 65200 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
00 |
00 |
04 |
07 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB1 |
ENCODING 65201 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
01 |
15 |
88 |
84 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB2 |
ENCODING 65202 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
01 |
15 |
88 |
84 |
84 |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB3 |
ENCODING 65203 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
01 |
15 |
EA |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB4 |
ENCODING 65204 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
2A |
D5 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB5 |
ENCODING 65205 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
01 |
15 |
88 |
84 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB6 |
ENCODING 65206 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
14 |
00 |
01 |
15 |
88 |
84 |
84 |
78 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB7 |
ENCODING 65207 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
04 |
00 |
0A |
00 |
00 |
01 |
15 |
EA |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB8 |
ENCODING 65208 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
14 |
00 |
00 |
00 |
2A |
D5 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEB9 |
ENCODING 65209 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
06 |
09 |
31 |
9E |
88 |
88 |
70 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEBA |
ENCODING 65210 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
06 |
09 |
31 |
9E |
88 |
88 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEBB |
ENCODING 65211 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
06 |
29 |
31 |
DE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEBC |
ENCODING 65212 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
06 |
29 |
31 |
DE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEBD |
ENCODING 65213 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
06 |
09 |
31 |
9E |
88 |
88 |
70 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEBE |
ENCODING 65214 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
04 |
00 |
06 |
09 |
31 |
9E |
88 |
88 |
70 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEBF |
ENCODING 65215 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
00 |
06 |
29 |
31 |
DE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC0 |
ENCODING 65216 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
00 |
06 |
29 |
31 |
DE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC1 |
ENCODING 65217 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
20 |
20 |
2C |
32 |
A2 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC2 |
ENCODING 65218 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
20 |
20 |
2C |
32 |
A2 |
7D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC3 |
ENCODING 65219 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
20 |
20 |
2C |
32 |
22 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC4 |
ENCODING 65220 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
20 |
20 |
20 |
2C |
32 |
22 |
FD |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC5 |
ENCODING 65221 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
20 |
20 |
2C |
32 |
A2 |
7C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC6 |
ENCODING 65222 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
20 |
20 |
2C |
32 |
A2 |
7D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC7 |
ENCODING 65223 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
20 |
20 |
2C |
32 |
22 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC8 |
ENCODING 65224 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
24 |
20 |
20 |
2C |
32 |
22 |
FD |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEC9 |
ENCODING 65225 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
70 |
80 |
8C |
70 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFECA |
ENCODING 65226 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
1E |
22 |
1C |
22 |
41 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFECB |
ENCODING 65227 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0E |
10 |
10 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFECC |
ENCODING 65228 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
1E |
22 |
1C |
E3 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFECD |
ENCODING 65229 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
40 |
00 |
00 |
70 |
80 |
8C |
70 |
40 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFECE |
ENCODING 65230 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
08 |
00 |
00 |
1E |
22 |
1C |
22 |
41 |
80 |
80 |
80 |
41 |
3E |
00 |
00 |
ENDCHAR |
STARTCHAR uniFECF |
ENCODING 65231 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
10 |
00 |
00 |
0E |
10 |
10 |
FE |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED0 |
ENCODING 65232 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
00 |
1E |
22 |
1C |
E3 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED1 |
ENCODING 65233 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
06 |
49 |
85 |
83 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED2 |
ENCODING 65234 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
04 |
00 |
06 |
49 |
89 |
86 |
7D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED3 |
ENCODING 65235 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
0C |
12 |
0A |
06 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED4 |
ENCODING 65236 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
0C |
12 |
12 |
0C |
F3 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED5 |
ENCODING 65237 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0A |
00 |
06 |
09 |
09 |
47 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED6 |
ENCODING 65238 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
0A |
00 |
00 |
06 |
09 |
49 |
87 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED7 |
ENCODING 65239 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
00 |
0C |
12 |
0A |
06 |
FC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED8 |
ENCODING 65240 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
14 |
00 |
00 |
0C |
12 |
12 |
0C |
F3 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFED9 |
ENCODING 65241 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
19 |
21 |
19 |
21 |
01 |
81 |
7E |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEDA |
ENCODING 65242 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
32 |
42 |
32 |
42 |
02 |
86 |
79 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEDB |
ENCODING 65243 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
18 |
20 |
10 |
08 |
08 |
F0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEDC |
ENCODING 65244 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
06 |
18 |
20 |
20 |
10 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEDD |
ENCODING 65245 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
02 |
02 |
02 |
02 |
02 |
42 |
82 |
82 |
84 |
78 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEDE |
ENCODING 65246 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
02 |
02 |
02 |
02 |
02 |
03 |
42 |
82 |
82 |
84 |
78 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEDF |
ENCODING 65247 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
08 |
08 |
08 |
08 |
08 |
F0 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE0 |
ENCODING 65248 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
08 |
08 |
08 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE1 |
ENCODING 65249 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
0C |
12 |
12 |
3C |
40 |
40 |
40 |
40 |
40 |
40 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE2 |
ENCODING 65250 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
3C |
4B |
4A |
44 |
40 |
40 |
40 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE3 |
ENCODING 65251 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
12 |
32 |
CC |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE4 |
ENCODING 65252 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
12 |
32 |
CD |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE5 |
ENCODING 65253 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
08 |
00 |
00 |
41 |
81 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE6 |
ENCODING 65254 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
01 |
41 |
81 |
81 |
42 |
3C |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE7 |
ENCODING 65255 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE8 |
ENCODING 65256 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
08 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEE9 |
ENCODING 65257 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
18 |
24 |
22 |
22 |
1C |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEEA |
ENCODING 65258 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
10 |
10 |
68 |
88 |
74 |
03 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEEB |
ENCODING 65259 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
40 |
30 |
4E |
49 |
39 |
E6 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEEC |
ENCODING 65260 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
08 |
14 |
24 |
28 |
F3 |
24 |
18 |
0C |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEED |
ENCODING 65261 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
0C |
12 |
0E |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEEE |
ENCODING 65262 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
0C |
12 |
0F |
02 |
04 |
18 |
60 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEEF |
ENCODING 65263 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEF0 |
ENCODING 65264 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
07 |
88 |
87 |
81 |
7E |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEF1 |
ENCODING 65265 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
07 |
08 |
88 |
86 |
81 |
81 |
7E |
00 |
00 |
24 |
00 |
ENDCHAR |
STARTCHAR uniFEF2 |
ENCODING 65266 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
07 |
88 |
87 |
81 |
7E |
00 |
24 |
00 |
ENDCHAR |
STARTCHAR uniFEF3 |
ENCODING 65267 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
08 |
04 |
04 |
F8 |
00 |
00 |
14 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEF4 |
ENCODING 65268 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
00 |
00 |
00 |
00 |
08 |
08 |
F7 |
00 |
00 |
14 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEF5 |
ENCODING 65269 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
68 |
90 |
02 |
22 |
12 |
0A |
04 |
0C |
12 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEF6 |
ENCODING 65270 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
68 |
90 |
02 |
32 |
12 |
0A |
0A |
0E |
3D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEF7 |
ENCODING 65271 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
60 |
80 |
72 |
A2 |
12 |
0A |
04 |
0C |
12 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEF8 |
ENCODING 65272 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
30 |
40 |
3A |
52 |
12 |
0A |
0A |
0E |
3D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEF9 |
ENCODING 65273 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
42 |
22 |
12 |
0A |
04 |
0C |
12 |
3C |
00 |
18 |
20 |
1C |
20 |
00 |
ENDCHAR |
STARTCHAR uniFEFA |
ENCODING 65274 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
22 |
12 |
12 |
0A |
0A |
0E |
3D |
00 |
00 |
18 |
20 |
1C |
20 |
00 |
ENDCHAR |
STARTCHAR uniFEFB |
ENCODING 65275 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
42 |
22 |
12 |
0A |
04 |
0C |
12 |
3C |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEFC |
ENCODING 65276 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
00 |
22 |
12 |
12 |
0A |
0A |
0E |
3D |
00 |
00 |
00 |
00 |
00 |
00 |
00 |
ENDCHAR |
STARTCHAR uniFEFF |
ENCODING 65279 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
F1 |
35 |
55 |
8A |
E0 |
06 |
95 |
D6 |
B5 |
97 |
00 |
EE |
8A |
EE |
28 |
E8 |
ENDCHAR |
STARTCHAR uniFFFD |
ENCODING 65533 |
SWIDTH 480 0 |
DWIDTH 8 0 |
BBX 8 16 0 -4 |
BITMAP |
00 |
38 |
7C |
7C |
C6 |
92 |
F2 |
E6 |
FE |
E6 |
7C |
7C |
38 |
00 |
00 |
00 |
ENDCHAR |
ENDFONT |
//branches/tracing/contrib/font/bdf2c.pl |
---|
0,0 → 1,164 |
#!/usr/bin/perl -w |
# |
# Copyright (c) 2000 Dmitry Bolkhovityanov |
# Copyright (c) 2009 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions |
# are met: |
# |
# - Redistributions of source code must retain the above copyright |
# notice, this list of conditions and the following disclaimer. |
# - Redistributions in binary form must reproduce the above copyright |
# notice, this list of conditions and the following disclaimer in the |
# documentation and/or other materials provided with the distribution. |
# - The name of the author may not be used to endorse or promote products |
# derived from this software without specific prior written permission. |
# |
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
use strict; |
my $skip; |
my $width; |
my $height; |
my $offset_x; |
my $offset_y; |
my $gwidth; |
my $gheight; |
my $goffset_x; |
my $goffset_y; |
my $index; |
my @glyphs; |
my @chars; |
open(BDF, "u_vga16.bdf") or die("Unable to open source font\n"); |
READHEADER: while (<BDF>) { |
/^FONTBOUNDINGBOX\s/ and do { |
($skip, $width, $height, $offset_x, $offset_y) = (split); |
die("Font width is not 8px\n") if ($width != 8); |
die("Font height is not 16px\n") if ($height != 16); |
}; |
/^CHARS\s/ && last READHEADER; |
} |
READCHARS: while (<BDF>) { |
/^ENCODING\s+([0-9]+)\s*$/ && do { |
$index = $1; |
}; |
/^BBX\s/ && do { |
($skip, $gwidth, $gheight, $goffset_x, $goffset_y) = (split); |
}; |
/^BITMAP/ && do { |
my @glyph = (); |
my $y; |
# Add empty lines at top |
my $empties = $height + $offset_y - $goffset_y - $gheight; |
for ($y = 0; $y < $empties; $y++) { |
$glyph[$y] = 0; |
} |
# Scan the hex bitmap |
for ($y = $empties; $y < $empties + $gheight; $y++) { |
$_ = <BDF>; |
$glyph[$y] = hex(substr($_, 0, 2)) >> $goffset_x; |
} |
# Add empty lines at bottom |
my $fill = $height - $gheight - $empties; |
for ($y = $empties + $gheight; $y < $empties + $gheight + $fill; $y++) { |
$glyph[$y] = 0; |
} |
if ($index != 0) { |
$glyphs[$index] = (\@glyph); |
push(@chars, $index); |
} |
}; |
/^ENDFONT/ && last READCHARS; |
} |
close(BDF); |
@chars = sort { $a <=> $b } (@chars); |
print "#define FONT_GLYPHS " . (@chars + 1). "\n"; |
print "#define FONT_SCANLINES " . $height . "\n"; |
print "\n"; |
print "uint16_t fb_font_glyph(const wchar_t ch)\n"; |
print "{\n"; |
print "\tif (ch == 0x0000)\n"; |
print "\t\treturn 0;\n\n"; |
my $pos = 0; |
my $start = -1; |
my $start_pos = 0; |
my $prev = 0; |
for $index (@chars) { |
if ($prev + 1 < $index) { |
if ($start != -1) { |
if ($start == $prev) { |
printf "\tif (ch == 0x%.4x)\n", $start; |
print "\t\treturn " . $start_pos . ";\n"; |
} else { |
printf "\tif ((ch >= 0x%.4x) && (ch <= 0x%.4x))\n", $start, $prev; |
print "\t\treturn (ch - " . ($start - $start_pos) . ");\n"; |
} |
print "\t\n"; |
} |
$start = $index; |
$start_pos = $pos; |
} |
$pos++; |
$prev = $index; |
} |
print "\treturn " . @chars . ";\n"; |
print "}\n"; |
print "\n"; |
print "uint8_t fb_font[FONT_GLYPHS][FONT_SCANLINES] = {"; |
for $index (@chars) { |
print "\n\t{"; |
my $y; |
for ($y = 0; $y < $height; $y++) { |
print ", " if ($y > 0); |
printf "0x%.2x", $glyphs[$index]->[$y]; |
} |
print "},"; |
} |
print "\n\t\n\t/* Special glyph for unknown character */\n\t{"; |
my $y; |
for ($y = 0; $y < $height; $y++) { |
print ", " if ($y > 0); |
printf "0x%.2x", $glyphs[63]->[$y]; |
} |
print "}\n};\n"; |
//branches/tracing/kernel/kernel.config |
---|
File deleted |
//branches/tracing/kernel/test/test.c |
---|
34,6 → 34,8 |
#include <test.h> |
bool test_quiet; |
test_t tests[] = { |
#include <atomic/atomic1.def> |
#include <avltree/avltree1.def> |
56,11 → 58,14 |
#include <synch/semaphore1.def> |
#include <synch/semaphore2.def> |
#include <print/print1.def> |
#include <print/print2.def> |
#include <print/print3.def> |
#include <print/print4.def> |
#include <thread/thread1.def> |
#include <sysinfo/sysinfo1.def> |
{ |
.name = NULL, |
.desc = NULL, |
.desc = NULL, |
.entry = NULL |
} |
}; |
//branches/tracing/kernel/test/btree/btree1.c |
---|
33,15 → 33,14 |
static void *data = (void *) 0xdeadbeef; |
char * test_btree1(bool quiet) |
char *test_btree1(void) |
{ |
btree_t t; |
int i; |
btree_create(&t); |
if (!quiet) |
printf("Inserting keys.\n"); |
TPRINTF("Inserting keys.\n"); |
btree_insert(&t, 19, data, NULL); |
btree_insert(&t, 20, data, NULL); |
btree_insert(&t, 21, data, NULL); |
78,11 → 77,10 |
for (i = 100; i >= 50; i--) |
btree_insert(&t, i, data, NULL); |
if (!quiet) |
if (!test_quiet) |
btree_print(&t); |
if (!quiet) |
printf("Removing keys.\n"); |
TPRINTF("Removing keys.\n"); |
btree_remove(&t, 50, NULL); |
btree_remove(&t, 49, NULL); |
btree_remove(&t, 51, NULL); |
158,7 → 156,7 |
btree_remove(&t, 35, NULL); |
btree_remove(&t, 36, NULL); |
if (!quiet) |
if (!test_quiet) |
btree_print(&t); |
return NULL; |
//branches/tracing/kernel/test/avltree/avltree1.def |
---|
1,6 → 1,6 |
{ |
"avltree1", |
"Test Avl tree operations", |
"Test AVL tree operations", |
&test_avltree1, |
true |
}, |
//branches/tracing/kernel/test/avltree/avltree1.c |
---|
41,7 → 41,7 |
*/ |
static avltree_node_t avltree_nodes[NODE_COUNT]; |
/* |
/* |
* head of free nodes' list: |
*/ |
static avltree_node_t *first_free_node = NULL; |
58,11 → 58,11 |
if (!node) |
return NULL; |
if (node->lft) { |
tmp = test_tree_parents(node->lft); |
if (tmp != node) { |
printf("Bad parent pointer key: %" PRIu64 |
TPRINTF("Bad parent pointer key: %" PRIu64 |
", address: %p\n", tmp->key, node->lft); |
} |
} |
69,7 → 69,7 |
if (node->rgt) { |
tmp = test_tree_parents(node->rgt); |
if (tmp != node) { |
printf("Bad parent pointer key: %" PRIu64 |
TPRINTF("Bad parent pointer key: %" PRIu64 |
", address: %p\n", |
tmp->key,node->rgt); |
} |
80,49 → 80,50 |
int test_tree_balance(avltree_node_t *node) |
{ |
int h1, h2, diff; |
if (!node) |
return 0; |
h1 = test_tree_balance(node->lft); |
h2 = test_tree_balance(node->rgt); |
diff = h2 - h1; |
if (diff != node->balance || (diff != -1 && diff != 0 && diff != 1)) { |
printf("Bad balance\n"); |
} |
return h1 > h2 ? h1 + 1 : h2 + 1; |
if ((diff != node->balance) || ((diff != -1) && (diff != 0) && (diff != 1))) |
TPRINTF("Bad balance\n"); |
return ((h1 > h2) ? (h1 + 1) : (h2 + 1)); |
} |
/** |
* Prints the structure of the node, which is level levels from the top of the |
* tree. |
* tree. |
*/ |
static void |
print_tree_structure_flat(avltree_node_t *node, int level) |
static void print_tree_structure_flat(avltree_node_t *node, int level) |
{ |
/* |
* You can set the maximum level as high as you like. |
* Most of the time, you'll want to debug code using small trees, |
* so that a large level indicates a loop, which is a bug. |
* Most of the time, you'll want to debug code using small trees, |
* so that a large level indicates a loop, which is a bug. |
*/ |
if (level > 16) { |
printf("[...]"); |
TPRINTF("[...]"); |
return; |
} |
if (node == NULL) |
return; |
printf("%" PRIu64 "[%" PRIu8 "]", node->key, node->balance); |
TPRINTF("%" PRIu64 "[%" PRIu8 "]", node->key, node->balance); |
if (node->lft != NULL || node->rgt != NULL) { |
printf("("); |
TPRINTF("("); |
print_tree_structure_flat(node->lft, level + 1); |
if (node->rgt != NULL) { |
printf(","); |
TPRINTF(","); |
print_tree_structure_flat(node->rgt, level + 1); |
} |
printf(")"); |
TPRINTF(")"); |
} |
} |
129,10 → 130,10 |
static void alloc_avltree_node_prepare(void) |
{ |
int i; |
for (i = 0; i < NODE_COUNT - 1; i++) { |
for (i = 0; i < NODE_COUNT - 1; i++) |
avltree_nodes[i].par = &avltree_nodes[i + 1]; |
} |
avltree_nodes[i].par = NULL; |
/* |
139,37 → 140,44 |
* Node keys which will be used for insertion. Up to NODE_COUNT size of |
* array. |
*/ |
/* First tree node and same key */ |
avltree_nodes[0].key = 60; |
avltree_nodes[1].key = 60; |
avltree_nodes[2].key = 60; |
/* LL rotation */ |
avltree_nodes[3].key = 50; |
avltree_nodes[4].key = 40; |
avltree_nodes[5].key = 30; |
/* LR rotation */ |
avltree_nodes[6].key = 20; |
avltree_nodes[7].key = 20; |
avltree_nodes[8].key = 25; |
avltree_nodes[9].key = 25; |
/* LL rotation in lower floor */ |
avltree_nodes[10].key = 35; |
/* RR rotation */ |
avltree_nodes[11].key = 70; |
avltree_nodes[12].key = 80; |
/* RL rotation */ |
avltree_nodes[13].key = 90; |
avltree_nodes[14].key = 85; |
/* Insert 0 key */ |
avltree_nodes[15].key = 0; |
avltree_nodes[16].key = 0; |
/* Insert reverse */ |
avltree_nodes[17].key = 600; |
avltree_nodes[18].key = 500; |
avltree_nodes[19].key = 400; |
avltree_nodes[20].key = 300; |
for (i = 21; i < NODE_COUNT; i++) |
avltree_nodes[i].key = i * 3; |
179,40 → 187,35 |
static avltree_node_t *alloc_avltree_node(void) |
{ |
avltree_node_t *node; |
node = first_free_node; |
first_free_node = first_free_node->par; |
return node; |
} |
static void test_tree_insert(avltree_t *tree, count_t node_count, bool quiet) |
static void test_tree_insert(avltree_t *tree, count_t node_count) |
{ |
unsigned int i; |
avltree_node_t *newnode; |
avltree_create(tree); |
if (!quiet) |
printf("Inserting %" PRIc " nodes...", node_count); |
TPRINTF("Inserting %" PRIc " nodes...", node_count); |
for (i = 0; i < node_count; i++) { |
newnode = alloc_avltree_node(); |
avltree_insert(tree, newnode); |
if (!quiet) { |
test_tree_parents(tree->root); |
test_tree_balance(tree->root); |
} |
test_tree_parents(tree->root); |
test_tree_balance(tree->root); |
} |
if (!quiet) |
printf("done.\n"); |
TPRINTF("done.\n"); |
} |
static void test_tree_delete(avltree_t *tree, count_t node_count, |
int node_position, bool quiet) |
int node_position) |
{ |
avltree_node_t *delnode; |
unsigned int i; |
219,71 → 222,61 |
switch (node_position) { |
case 0: |
if (!quiet) |
printf("Deleting root nodes..."); |
TPRINTF("Deleting root nodes..."); |
while (tree->root != NULL) { |
delnode = tree->root; |
avltree_delete(tree, delnode); |
if (!quiet) { |
test_tree_parents(tree->root); |
test_tree_balance(tree->root); |
} |
} |
test_tree_parents(tree->root); |
test_tree_balance(tree->root); |
} |
break; |
case 1: |
if (!quiet) |
printf("Deleting nodes according to creation time..."); |
TPRINTF("Deleting nodes according to creation time..."); |
for (i = 0; i < node_count; i++) { |
avltree_delete(tree, &avltree_nodes[i]); |
if (!quiet) { |
test_tree_parents(tree->root); |
test_tree_balance(tree->root); |
} |
test_tree_parents(tree->root); |
test_tree_balance(tree->root); |
} |
break; |
break; |
} |
if (!quiet) |
printf("done.\n"); |
TPRINTF("done.\n"); |
} |
static void test_tree_delmin(avltree_t *tree, count_t node_count, bool quiet) |
static void test_tree_delmin(avltree_t *tree, count_t node_count) |
{ |
unsigned int i = 0; |
if (!quiet) |
printf("Deleting minimum nodes..."); |
TPRINTF("Deleting minimum nodes..."); |
while (tree->root != NULL) { |
i++; |
avltree_delete_min(tree); |
if (!quiet) { |
test_tree_parents(tree->root); |
test_tree_balance(tree->root); |
} |
test_tree_parents(tree->root); |
test_tree_balance(tree->root); |
} |
if (!quiet && (i != node_count)) |
printf("Bad node count. Some nodes have been lost!\n"); |
if (!quiet) |
printf("done.\n"); |
if (i != node_count) |
TPRINTF("Bad node count. Some nodes have been lost!\n"); |
TPRINTF("done.\n"); |
} |
char *test_avltree1(bool quiet) |
char *test_avltree1(void) |
{ |
alloc_avltree_node_prepare(); |
test_tree_insert(&avltree, NODE_COUNT, quiet); |
test_tree_delete(&avltree, NODE_COUNT, 0, quiet); |
test_tree_insert(&avltree, NODE_COUNT); |
test_tree_delete(&avltree, NODE_COUNT, 0); |
alloc_avltree_node_prepare(); |
test_tree_insert(&avltree, NODE_COUNT, quiet); |
test_tree_delete(&avltree, NODE_COUNT, 1, quiet); |
test_tree_insert(&avltree, NODE_COUNT); |
test_tree_delete(&avltree, NODE_COUNT, 1); |
alloc_avltree_node_prepare(); |
test_tree_insert(&avltree, NODE_COUNT, quiet); |
test_tree_delmin(&avltree, NODE_COUNT, quiet); |
test_tree_insert(&avltree, NODE_COUNT); |
test_tree_delmin(&avltree, NODE_COUNT); |
return NULL; |
} |
//branches/tracing/kernel/test/synch/rwlock1.c |
---|
35,39 → 35,39 |
#include <synch/waitq.h> |
#include <synch/rwlock.h> |
#define READERS 50 |
#define WRITERS 50 |
#define READERS 50 |
#define WRITERS 50 |
static rwlock_t rwlock; |
char * test_rwlock1(bool quiet) |
char *test_rwlock1(void) |
{ |
rwlock_initialize(&rwlock); |
rwlock_write_lock(&rwlock); |
rwlock_write_unlock(&rwlock); |
rwlock_write_unlock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_unlock(&rwlock); |
rwlock_read_unlock(&rwlock); |
rwlock_read_unlock(&rwlock); |
rwlock_read_unlock(&rwlock); |
rwlock_read_unlock(&rwlock); |
rwlock_read_unlock(&rwlock); |
rwlock_write_lock(&rwlock); |
rwlock_write_unlock(&rwlock); |
rwlock_write_unlock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_unlock(&rwlock); |
rwlock_write_lock(&rwlock); |
rwlock_write_unlock(&rwlock); |
rwlock_write_unlock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_unlock(&rwlock); |
//branches/tracing/kernel/test/synch/rwlock2.c |
---|
34,38 → 34,34 |
#include <synch/rwlock.h> |
#define READERS 50 |
#define WRITERS 50 |
#define READERS 50 |
#define WRITERS 50 |
static rwlock_t rwlock; |
static bool sh_quiet; |
static void writer(void *arg) |
{ |
if (!sh_quiet) |
printf("Trying to lock rwlock for writing....\n"); |
TPRINTF("Trying to lock rwlock for writing....\n"); |
rwlock_write_lock(&rwlock); |
rwlock_write_unlock(&rwlock); |
if (!sh_quiet) |
printf("Trying to lock rwlock for reading....\n"); |
TPRINTF("Trying to lock rwlock for reading....\n"); |
rwlock_read_lock(&rwlock); |
rwlock_read_unlock(&rwlock); |
rwlock_read_unlock(&rwlock); |
} |
char * test_rwlock2(bool quiet) |
char *test_rwlock2(void) |
{ |
thread_t *thrd; |
sh_quiet = quiet; |
rwlock_initialize(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
rwlock_read_lock(&rwlock); |
thrd = thread_create(writer, NULL, TASK, 0, "writer", false); |
if (thrd) |
72,7 → 68,7 |
thread_ready(thrd); |
else |
return "Could not create thread"; |
thread_sleep(1); |
rwlock_read_unlock(&rwlock); |
//branches/tracing/kernel/test/synch/rwlock3.c |
---|
34,41 → 34,35 |
#include <synch/rwlock.h> |
#define THREADS 4 |
#define THREADS 4 |
static atomic_t thread_count; |
static rwlock_t rwlock; |
static bool sh_quiet; |
static void reader(void *arg) |
{ |
thread_detach(THREAD); |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 ": trying to lock rwlock for reading....\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 ": trying to lock rwlock for reading....\n", CPU->id, THREAD->tid); |
rwlock_read_lock(&rwlock); |
rwlock_read_unlock(&rwlock); |
if (!sh_quiet) { |
printf("cpu%u, tid %" PRIu64 ": success\n", CPU->id, THREAD->tid); |
printf("cpu%u, tid %" PRIu64 ": trying to lock rwlock for writing....\n", CPU->id, THREAD->tid); |
} |
TPRINTF("cpu%u, tid %" PRIu64 ": success\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 ": trying to lock rwlock for writing....\n", CPU->id, THREAD->tid); |
rwlock_write_lock(&rwlock); |
rwlock_write_unlock(&rwlock); |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 ": success\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 ": success\n", CPU->id, THREAD->tid); |
atomic_dec(&thread_count); |
} |
char * test_rwlock3(bool quiet) |
char *test_rwlock3(void) |
{ |
int i; |
thread_t *thrd; |
sh_quiet = quiet; |
atomic_set(&thread_count, THREADS); |
79,16 → 73,15 |
thrd = thread_create(reader, NULL, TASK, 0, "reader", false); |
if (thrd) |
thread_ready(thrd); |
else if (!quiet) |
printf("Could not create reader %d\n", i); |
else |
TPRINTF("Could not create reader %d\n", i); |
} |
thread_sleep(1); |
rwlock_write_unlock(&rwlock); |
while (atomic_get(&thread_count) > 0) { |
if (!quiet) |
printf("Threads left: %ld\n", atomic_get(&thread_count)); |
TPRINTF("Threads left: %ld\n", atomic_get(&thread_count)); |
thread_sleep(1); |
} |
//branches/tracing/kernel/test/synch/semaphore1.c |
---|
35,9 → 35,9 |
#include <synch/waitq.h> |
#include <synch/semaphore.h> |
#define AT_ONCE 3 |
#define PRODUCERS 50 |
#define CONSUMERS 50 |
#define AT_ONCE 3 |
#define PRODUCERS 50 |
#define CONSUMERS 50 |
static semaphore_t sem; |
47,10 → 47,10 |
static void producer(void *arg) |
{ |
thread_detach(THREAD); |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
semaphore_down(&sem); |
atomic_inc(&items_produced); |
thread_usleep(250); |
59,7 → 59,7 |
static void consumer(void *arg) |
{ |
thread_detach(THREAD); |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
69,7 → 69,7 |
semaphore_up(&sem); |
} |
char * test_semaphore1(bool quiet) |
char *test_semaphore1(void) |
{ |
int i, j, k; |
int consumers, producers; |
76,10 → 76,10 |
waitq_initialize(&can_start); |
semaphore_initialize(&sem, AT_ONCE); |
for (i = 1; i <= 3; i++) { |
thread_t *thrd; |
atomic_set(&items_produced, 0); |
atomic_set(&items_consumed, 0); |
86,8 → 86,8 |
consumers = i * CONSUMERS; |
producers = (4 - i) * PRODUCERS; |
printf("Creating %d consumers and %d producers...", consumers, producers); |
TPRINTF("Creating %d consumers and %d producers...", consumers, producers); |
for (j = 0; j < (CONSUMERS + PRODUCERS) / 2; j++) { |
for (k = 0; k < i; k++) { |
thrd = thread_create(consumer, NULL, TASK, 0, "consumer", false); |
94,7 → 94,7 |
if (thrd) |
thread_ready(thrd); |
else |
printf("could not create consumer %d\n", i); |
TPRINTF("could not create consumer %d\n", i); |
} |
for (k = 0; k < (4 - i); k++) { |
thrd = thread_create(producer, NULL, TASK, 0, "producer", false); |
101,17 → 101,17 |
if (thrd) |
thread_ready(thrd); |
else |
printf("could not create producer %d\n", i); |
TPRINTF("could not create producer %d\n", i); |
} |
} |
printf("ok\n"); |
TPRINTF("ok\n"); |
thread_sleep(1); |
waitq_wakeup(&can_start, WAKEUP_ALL); |
while ((items_consumed.count != consumers) || (items_produced.count != producers)) { |
printf("%d consumers remaining, %d producers remaining\n", consumers - items_consumed.count, producers - items_produced.count); |
TPRINTF("%d consumers remaining, %d producers remaining\n", consumers - items_consumed.count, producers - items_produced.count); |
thread_sleep(1); |
} |
} |
//branches/tracing/kernel/test/synch/rwlock4.c |
---|
40,13 → 40,12 |
#include <synch/synch.h> |
#include <synch/spinlock.h> |
#define READERS 50 |
#define WRITERS 50 |
#define READERS 50 |
#define WRITERS 50 |
static atomic_t thread_count; |
static rwlock_t rwlock; |
static atomic_t threads_fault; |
static bool sh_quiet; |
SPINLOCK_INITIALIZE(rw_lock); |
57,10 → 56,10 |
static uint32_t random(uint32_t max) |
{ |
uint32_t rc; |
spinlock_lock(&rw_lock); |
spinlock_lock(&rw_lock); |
rc = seed % max; |
seed = (((seed<<2) ^ (seed>>2)) * 487) + rc; |
seed = (((seed << 2) ^ (seed >> 2)) * 487) + rc; |
spinlock_unlock(&rw_lock); |
return rc; |
} |
70,43 → 69,39 |
int rc, to; |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
to = random(40000); |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 " w+ (%d)\n", CPU->id, THREAD->tid, to); |
TPRINTF("cpu%u, tid %" PRIu64 " w+ (%d)\n", CPU->id, THREAD->tid, to); |
rc = rwlock_write_lock_timeout(&rwlock, to); |
if (SYNCH_FAILED(rc)) { |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 " w!\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " w!\n", CPU->id, THREAD->tid); |
atomic_dec(&thread_count); |
return; |
} |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 " w=\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " w=\n", CPU->id, THREAD->tid); |
if (rwlock.readers_in) { |
if (!sh_quiet) |
printf("Oops."); |
TPRINTF("Oops.\n"); |
atomic_inc(&threads_fault); |
atomic_dec(&thread_count); |
return; |
} |
thread_usleep(random(1000000)); |
if (rwlock.readers_in) { |
if (!sh_quiet) |
printf("Oops."); |
TPRINTF("Oops.\n"); |
atomic_inc(&threads_fault); |
atomic_dec(&thread_count); |
return; |
} |
rwlock_write_unlock(&rwlock); |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 " w-\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " w-\n", CPU->id, THREAD->tid); |
atomic_dec(&thread_count); |
} |
118,33 → 113,28 |
to = random(2000); |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 " r+ (%d)\n", CPU->id, THREAD->tid, to); |
TPRINTF("cpu%u, tid %" PRIu64 " r+ (%d)\n", CPU->id, THREAD->tid, to); |
rc = rwlock_read_lock_timeout(&rwlock, to); |
if (SYNCH_FAILED(rc)) { |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 " r!\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " r!\n", CPU->id, THREAD->tid); |
atomic_dec(&thread_count); |
return; |
} |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 " r=\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " r=\n", CPU->id, THREAD->tid); |
thread_usleep(30000); |
rwlock_read_unlock(&rwlock); |
if (!sh_quiet) |
printf("cpu%u, tid %" PRIu64 " r-\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " r-\n", CPU->id, THREAD->tid); |
atomic_dec(&thread_count); |
} |
char * test_rwlock4(bool quiet) |
char *test_rwlock4(void) |
{ |
context_t ctx; |
uint32_t i; |
sh_quiet = quiet; |
waitq_initialize(&can_start); |
rwlock_initialize(&rwlock); |
158,28 → 148,25 |
thread_t *thrd; |
context_save(&ctx); |
if (!quiet) { |
printf("sp=%#x, readers_in=%" PRIc "\n", ctx.sp, rwlock.readers_in); |
printf("Creating %" PRIu32 " readers\n", rd); |
} |
TPRINTF("sp=%#x, readers_in=%" PRIc "\n", ctx.sp, rwlock.readers_in); |
TPRINTF("Creating %" PRIu32 " readers\n", rd); |
for (i = 0; i < rd; i++) { |
thrd = thread_create(reader, NULL, TASK, 0, "reader", false); |
if (thrd) |
thread_ready(thrd); |
else if (!quiet) |
printf("Could not create reader %" PRIu32 "\n", i); |
else |
TPRINTF("Could not create reader %" PRIu32 "\n", i); |
} |
if (!quiet) |
printf("Creating %" PRIu32 " writers\n", wr); |
TPRINTF("Creating %" PRIu32 " writers\n", wr); |
for (i = 0; i < wr; i++) { |
thrd = thread_create(writer, NULL, TASK, 0, "writer", false); |
if (thrd) |
thread_ready(thrd); |
else if (!quiet) |
printf("Could not create writer %" PRIu32 "\n", i); |
else |
TPRINTF("Could not create writer %" PRIu32 "\n", i); |
} |
thread_usleep(20000); |
186,8 → 173,7 |
waitq_wakeup(&can_start, WAKEUP_ALL); |
while (atomic_get(&thread_count) > 0) { |
if (!quiet) |
printf("Threads left: %ld\n", atomic_get(&thread_count)); |
TPRINTF("Threads left: %ld\n", atomic_get(&thread_count)); |
thread_sleep(1); |
} |
//branches/tracing/kernel/test/synch/semaphore2.c |
---|
50,10 → 50,10 |
static uint32_t random(uint32_t max) |
{ |
uint32_t rc; |
spinlock_lock(&sem_lock); |
spinlock_lock(&sem_lock); |
rc = seed % max; |
seed = (((seed<<2) ^ (seed>>2)) * 487) + rc; |
seed = (((seed << 2) ^ (seed >> 2)) * 487) + rc; |
spinlock_unlock(&sem_lock); |
return rc; |
} |
67,21 → 67,21 |
waitq_sleep(&can_start); |
to = random(20000); |
printf("cpu%u, tid %" PRIu64 " down+ (%d)\n", CPU->id, THREAD->tid, to); |
TPRINTF("cpu%u, tid %" PRIu64 " down+ (%d)\n", CPU->id, THREAD->tid, to); |
rc = semaphore_down_timeout(&sem, to); |
if (SYNCH_FAILED(rc)) { |
printf("cpu%u, tid %" PRIu64 " down!\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " down!\n", CPU->id, THREAD->tid); |
return; |
} |
printf("cpu%u, tid %" PRIu64 " down=\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " down=\n", CPU->id, THREAD->tid); |
thread_usleep(random(30000)); |
semaphore_up(&sem); |
printf("cpu%u, tid %" PRIu64 " up\n", CPU->id, THREAD->tid); |
TPRINTF("cpu%u, tid %" PRIu64 " up\n", CPU->id, THREAD->tid); |
} |
char * test_semaphore2(bool quiet) |
char *test_semaphore2(void) |
{ |
uint32_t i, k; |
91,13 → 91,13 |
thread_t *thrd; |
k = random(7) + 1; |
printf("Creating %" PRIu32 " consumers\n", k); |
TPRINTF("Creating %" PRIu32 " consumers\n", k); |
for (i = 0; i < k; i++) { |
thrd = thread_create(consumer, NULL, TASK, 0, "consumer", false); |
if (thrd) |
thread_ready(thrd); |
else |
printf("Error creating thread\n"); |
TPRINTF("Error creating thread\n"); |
} |
thread_usleep(20000); |
//branches/tracing/kernel/test/synch/rwlock5.c |
---|
35,8 → 35,8 |
#include <synch/waitq.h> |
#include <synch/rwlock.h> |
#define READERS 50 |
#define WRITERS 50 |
#define READERS 50 |
#define WRITERS 50 |
static rwlock_t rwlock; |
47,9 → 47,9 |
static void writer(void *arg) |
{ |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
rwlock_write_lock(&rwlock); |
atomic_inc(&items_written); |
rwlock_write_unlock(&rwlock); |
58,7 → 58,7 |
static void reader(void *arg) |
{ |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
rwlock_read_lock(&rwlock); |
66,7 → 66,7 |
rwlock_read_unlock(&rwlock); |
} |
char * test_rwlock5(bool quiet) |
char *test_rwlock5(void) |
{ |
int i, j, k; |
long readers, writers; |
76,15 → 76,15 |
for (i = 1; i <= 3; i++) { |
thread_t *thrd; |
atomic_set(&items_read, 0); |
atomic_set(&items_written, 0); |
readers = i * READERS; |
writers = (4 - i) * WRITERS; |
printf("Creating %ld readers and %ld writers...", readers, writers); |
TPRINTF("Creating %ld readers and %ld writers...", readers, writers); |
for (j = 0; j < (READERS + WRITERS) / 2; j++) { |
for (k = 0; k < i; k++) { |
thrd = thread_create(reader, NULL, TASK, 0, "reader", false); |
91,7 → 91,7 |
if (thrd) |
thread_ready(thrd); |
else |
printf("Could not create reader %d\n", k); |
TPRINTF("Could not create reader %d\n", k); |
} |
for (k = 0; k < (4 - i); k++) { |
thrd = thread_create(writer, NULL, TASK, 0, "writer", false); |
98,17 → 98,17 |
if (thrd) |
thread_ready(thrd); |
else |
printf("Could not create writer %d\n", k); |
TPRINTF("Could not create writer %d\n", k); |
} |
} |
printf("ok\n"); |
TPRINTF("ok\n"); |
thread_sleep(1); |
waitq_wakeup(&can_start, WAKEUP_ALL); |
while ((items_read.count != readers) || (items_written.count != writers)) { |
printf("%d readers remaining, %d writers remaining, readers_in=%d\n", readers - items_read.count, writers - items_written.count, rwlock.readers_in); |
TPRINTF("%d readers remaining, %d writers remaining, readers_in=%d\n", readers - items_read.count, writers - items_written.count, rwlock.readers_in); |
thread_usleep(100000); |
} |
} |
//branches/tracing/kernel/test/test.h |
---|
38,8 → 38,17 |
#include <arch/types.h> |
#include <typedefs.h> |
typedef char *(*test_entry_t)(bool); |
extern bool test_quiet; |
#define TPRINTF(format, ...) \ |
{ \ |
if (!test_quiet) { \ |
printf(format, ##__VA_ARGS__); \ |
} \ |
} |
typedef char *(*test_entry_t)(void); |
typedef struct { |
char *name; |
char *desc; |
47,30 → 56,33 |
bool safe; |
} test_t; |
extern char * test_atomic1(bool quiet); |
extern char * test_avltree1(bool quiet); |
extern char * test_btree1(bool quiet); |
extern char * test_mips1(bool quiet); |
extern char * test_fault1(bool quiet); |
extern char * test_fpu1(bool quiet); |
extern char * test_sse1(bool quiet); |
extern char * test_mips2(bool quiet); |
extern char * test_falloc1(bool quiet); |
extern char * test_falloc2(bool quiet); |
extern char * test_mapping1(bool quiet); |
extern char * test_purge1(bool quiet); |
extern char * test_slab1(bool quiet); |
extern char * test_slab2(bool quiet); |
extern char * test_rwlock1(bool quiet); |
extern char * test_rwlock2(bool quiet); |
extern char * test_rwlock3(bool quiet); |
extern char * test_rwlock4(bool quiet); |
extern char * test_rwlock5(bool quiet); |
extern char * test_semaphore1(bool quiet); |
extern char * test_semaphore2(bool quiet); |
extern char * test_print1(bool quiet); |
extern char * test_thread1(bool quiet); |
extern char * test_sysinfo1(bool quiet); |
extern char *test_atomic1(void); |
extern char *test_avltree1(void); |
extern char *test_btree1(void); |
extern char *test_mips1(void); |
extern char *test_fault1(void); |
extern char *test_fpu1(void); |
extern char *test_sse1(void); |
extern char *test_mips2(void); |
extern char *test_falloc1(void); |
extern char *test_falloc2(void); |
extern char *test_mapping1(void); |
extern char *test_purge1(void); |
extern char *test_slab1(void); |
extern char *test_slab2(void); |
extern char *test_rwlock1(void); |
extern char *test_rwlock2(void); |
extern char *test_rwlock3(void); |
extern char *test_rwlock4(void); |
extern char *test_rwlock5(void); |
extern char *test_semaphore1(void); |
extern char *test_semaphore2(void); |
extern char *test_print1(void); |
extern char *test_print2(void); |
extern char *test_print3(void); |
extern char *test_print4(void); |
extern char *test_thread1(void); |
extern char *test_sysinfo1(void); |
extern test_t tests[]; |
//branches/tracing/kernel/test/debug/mips1_skip.c |
---|
0,0 → 1,34 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <test.h> |
char *test_mips1(void) |
{ |
return NULL; |
} |
//branches/tracing/kernel/test/debug/mips1.def |
---|
1,4 → 1,3 |
#ifdef mips32 |
{ |
"mips1", |
"MIPS debug test", |
5,4 → 4,3 |
&test_mips1, |
false |
}, |
#endif |
//branches/tracing/kernel/test/debug/mips1.c |
---|
25,8 → 25,6 |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifdef mips32 |
#include <print.h> |
#include <debug.h> |
38,10 → 36,9 |
#include <arch.h> |
char *test_mips1(bool quiet) |
char *test_mips1(void) |
{ |
if (!quiet) |
printf("If kconsole is compiled in, you should enter debug mode now.\n"); |
TPRINTF("If kconsole is compiled in, you should enter debug mode now.\n"); |
asm volatile ( |
"break\n" |
49,5 → 46,3 |
return "Back from debug mode"; |
} |
#endif |
//branches/tracing/kernel/test/thread/thread1.c |
---|
36,37 → 36,33 |
#include <arch.h> |
#define THREADS 5 |
#define THREADS 5 |
static atomic_t finish; |
static atomic_t threads_finished; |
static bool sh_quiet; |
static void threadtest(void *data) |
{ |
thread_detach(THREAD); |
thread_detach(THREAD); |
while (atomic_get(&finish)) { |
if (!sh_quiet) |
printf("%" PRIu64 " ", THREAD->tid); |
TPRINTF("%" PRIu64 " ", THREAD->tid); |
thread_usleep(100000); |
} |
atomic_inc(&threads_finished); |
} |
char * test_thread1(bool quiet) |
char *test_thread1(void) |
{ |
unsigned int i, total = 0; |
sh_quiet = quiet; |
atomic_set(&finish, 1); |
atomic_set(&threads_finished, 0); |
for (i = 0; i < THREADS; i++) { |
thread_t *t; |
if (!(t = thread_create(threadtest, NULL, TASK, 0, "threadtest", false))) { |
if (!quiet) |
printf("Could not create thread %d\n", i); |
TPRINTF("Could not create thread %d\n", i); |
break; |
} |
thread_ready(t); |
73,14 → 69,12 |
total++; |
} |
if (!quiet) |
printf("Running threads for 10 seconds...\n"); |
TPRINTF("Running threads for 10 seconds...\n"); |
thread_sleep(10); |
atomic_set(&finish, 0); |
while (atomic_get(&threads_finished) < ((long) total)) { |
if (!quiet) |
printf("Threads left: %d\n", total - atomic_get(&threads_finished)); |
TPRINTF("Threads left: %d\n", total - atomic_get(&threads_finished)); |
thread_sleep(1); |
} |
//branches/tracing/kernel/test/mm/purge1.def |
---|
1,4 → 1,3 |
#ifdef ia64 |
{ |
"purge1", |
"Itanium TLB purge test", |
5,4 → 4,3 |
&test_purge1, |
true |
}, |
#endif |
//branches/tracing/kernel/test/mm/falloc1.c |
---|
36,12 → 36,13 |
#include <debug.h> |
#include <align.h> |
#define MAX_FRAMES 1024 |
#define MAX_ORDER 8 |
#define TEST_RUNS 2 |
#define MAX_FRAMES 1024 |
#define MAX_ORDER 8 |
#define TEST_RUNS 2 |
char * test_falloc1(bool quiet) { |
uintptr_t * frames = (uintptr_t *) malloc(MAX_FRAMES * sizeof(uintptr_t), 0); |
char *test_falloc1(void) { |
uintptr_t *frames |
= (uintptr_t *) malloc(MAX_FRAMES * sizeof(uintptr_t), 0); |
int results[MAX_ORDER + 1]; |
int i, order, run; |
52,11 → 53,10 |
if (frames == NULL) |
return "Unable to allocate frames"; |
for (run = 0; run < TEST_RUNS; run++) { |
for (order = 0; order <= MAX_ORDER; order++) { |
if (!quiet) |
printf("Allocating %d frames blocks ... ", 1 << order); |
TPRINTF("Allocating %d frames blocks ... ", 1 << order); |
allocated = 0; |
for (i = 0; i < MAX_FRAMES >> order; i++) { |
63,8 → 63,7 |
frames[allocated] = (uintptr_t) frame_alloc(order, FRAME_ATOMIC | FRAME_KA); |
if (ALIGN_UP(frames[allocated], FRAME_SIZE << order) != frames[allocated]) { |
if (!quiet) |
printf("Block at address %p (size %dK) is not aligned\n", frames[allocated], (FRAME_SIZE << order) >> 10); |
TPRINTF("Block at address %p (size %dK) is not aligned\n", frames[allocated], (FRAME_SIZE << order) >> 10); |
return "Test failed"; |
} |
71,15 → 70,13 |
if (frames[allocated]) |
allocated++; |
else { |
if (!quiet) |
printf("done. "); |
TPRINTF("done. "); |
break; |
} |
} |
if (!quiet) |
printf("%d blocks allocated.\n", allocated); |
TPRINTF("%d blocks allocated.\n", allocated); |
if (run) { |
if (results[order] != allocated) |
return "Possible frame leak"; |
86,17 → 83,15 |
} else |
results[order] = allocated; |
if (!quiet) |
printf("Deallocating ... "); |
TPRINTF("Deallocating ... "); |
for (i = 0; i < allocated; i++) |
frame_free(KA2PA(frames[i])); |
if (!quiet) |
printf("done.\n"); |
TPRINTF("done.\n"); |
} |
} |
free(frames); |
return NULL; |
//branches/tracing/kernel/test/mm/falloc2.c |
---|
39,17 → 39,16 |
#include <memstr.h> |
#include <arch.h> |
#define MAX_FRAMES 256 |
#define MAX_ORDER 8 |
#define MAX_FRAMES 256 |
#define MAX_ORDER 8 |
#define THREAD_RUNS 1 |
#define THREADS 8 |
#define THREAD_RUNS 1 |
#define THREADS 8 |
static atomic_t thread_count; |
static atomic_t thread_fail; |
static bool sh_quiet; |
static void falloc(void * arg) |
static void falloc(void *arg) |
{ |
int order, run, allocated, i; |
uint8_t val = THREAD->tid % THREADS; |
57,8 → 56,7 |
void **frames = (void **) malloc(MAX_FRAMES * sizeof(void *), FRAME_ATOMIC); |
if (frames == NULL) { |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " (cpu%u): Unable to allocate frames\n", THREAD->tid, CPU->id); |
TPRINTF("Thread #%" PRIu64 " (cpu%u): Unable to allocate frames\n", THREAD->tid, CPU->id); |
atomic_inc(&thread_fail); |
atomic_dec(&thread_count); |
return; |
65,11 → 63,10 |
} |
thread_detach(THREAD); |
for (run = 0; run < THREAD_RUNS; run++) { |
for (order = 0; order <= MAX_ORDER; order++) { |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " (cpu%u): Allocating %d frames blocks ... \n", THREAD->tid, CPU->id, 1 << order); |
TPRINTF("Thread #%" PRIu64 " (cpu%u): Allocating %d frames blocks ... \n", THREAD->tid, CPU->id, 1 << order); |
allocated = 0; |
for (i = 0; i < (MAX_FRAMES >> order); i++) { |
81,17 → 78,13 |
break; |
} |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " (cpu%u): %d blocks allocated.\n", THREAD->tid, CPU->id, allocated); |
TPRINTF("Thread #%" PRIu64 " (cpu%u): %d blocks allocated.\n", THREAD->tid, CPU->id, allocated); |
TPRINTF("Thread #%" PRIu64 " (cpu%u): Deallocating ... \n", THREAD->tid, CPU->id); |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " (cpu%u): Deallocating ... \n", THREAD->tid, CPU->id); |
for (i = 0; i < allocated; i++) { |
for (k = 0; k <= (((index_t) FRAME_SIZE << order) - 1); k++) { |
if (((uint8_t *) frames[i])[k] != val) { |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " (cpu%u): Unexpected data (%c) in block %p offset %#" PRIi "\n", THREAD->tid, CPU->id, ((char *) frames[i])[k], frames[i], k); |
TPRINTF("Thread #%" PRIu64 " (cpu%u): Unexpected data (%c) in block %p offset %#" PRIi "\n", THREAD->tid, CPU->id, ((char *) frames[i])[k], frames[i], k); |
atomic_inc(&thread_fail); |
goto cleanup; |
} |
99,32 → 92,28 |
frame_free(KA2PA(frames[i])); |
} |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " (cpu%u): Finished run.\n", THREAD->tid, CPU->id); |
TPRINTF("Thread #%" PRIu64 " (cpu%u): Finished run.\n", THREAD->tid, CPU->id); |
} |
} |
cleanup: |
cleanup: |
free(frames); |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " (cpu%u): Exiting\n", THREAD->tid, CPU->id); |
TPRINTF("Thread #%" PRIu64 " (cpu%u): Exiting\n", THREAD->tid, CPU->id); |
atomic_dec(&thread_count); |
} |
char * test_falloc2(bool quiet) |
char *test_falloc2(void) |
{ |
unsigned int i; |
sh_quiet = quiet; |
atomic_set(&thread_count, THREADS); |
atomic_set(&thread_fail, 0); |
for (i = 0; i < THREADS; i++) { |
thread_t * thrd = thread_create(falloc, NULL, TASK, 0, "falloc", false); |
if (!thrd) { |
if (!quiet) |
printf("Could not create thread %u\n", i); |
TPRINTF("Could not create thread %u\n", i); |
break; |
} |
thread_ready(thrd); |
131,8 → 120,7 |
} |
while (atomic_get(&thread_count) > 0) { |
if (!quiet) |
printf("Threads left: %ld\n", atomic_get(&thread_count)); |
TPRINTF("Threads left: %ld\n", atomic_get(&thread_count)); |
thread_sleep(1); |
} |
//branches/tracing/kernel/test/mm/slab1.c |
---|
33,23 → 33,21 |
#include <arch.h> |
#include <memstr.h> |
#define VAL_COUNT 1024 |
#define VAL_COUNT 1024 |
static void * data[VAL_COUNT]; |
static void *data[VAL_COUNT]; |
static void testit(int size, int count, bool quiet) |
static void testit(int size, int count) |
{ |
slab_cache_t *cache; |
int i; |
if (!quiet) |
printf("Creating cache, object size: %d.\n", size); |
TPRINTF("Creating cache, object size: %d.\n", size); |
cache = slab_cache_create("test_cache", size, 0, NULL, NULL, |
SLAB_CACHE_NOMAGAZINE); |
SLAB_CACHE_NOMAGAZINE); |
if (!quiet) |
printf("Allocating %d items...", count); |
TPRINTF("Allocating %d items...", count); |
for (i = 0; i < count; i++) { |
data[i] = slab_alloc(cache, 0); |
56,78 → 54,71 |
memsetb(data[i], size, 0); |
} |
if (!quiet) { |
printf("done.\n"); |
printf("Freeing %d items...", count); |
} |
TPRINTF("done.\n"); |
TPRINTF("Freeing %d items...", count); |
for (i = 0; i < count; i++) |
slab_free(cache, data[i]); |
if (!quiet) { |
printf("done.\n"); |
printf("Allocating %d items...", count); |
} |
TPRINTF("done.\n"); |
TPRINTF("Allocating %d items...", count); |
for (i = 0; i < count; i++) { |
data[i] = slab_alloc(cache, 0); |
memsetb(data[i], size, 0); |
} |
if (!quiet) { |
printf("done.\n"); |
printf("Freeing %d items...", count / 2); |
} |
TPRINTF("done.\n"); |
TPRINTF("Freeing %d items...", count / 2); |
for (i = count - 1; i >= count / 2; i--) |
slab_free(cache, data[i]); |
if (!quiet) { |
printf("done.\n"); |
printf("Allocating %d items...", count / 2); |
} |
TPRINTF("done.\n"); |
TPRINTF("Allocating %d items...", count / 2); |
for (i = count / 2; i < count; i++) { |
data[i] = slab_alloc(cache, 0); |
memsetb(data[i], size, 0); |
} |
if (!quiet) { |
printf("done.\n"); |
printf("Freeing %d items...", count); |
} |
TPRINTF("done.\n"); |
TPRINTF("Freeing %d items...", count); |
for (i = 0; i < count; i++) |
slab_free(cache, data[i]); |
if (!quiet) |
printf("done.\n"); |
TPRINTF("done.\n"); |
slab_cache_destroy(cache); |
if (!quiet) |
printf("Test complete.\n"); |
TPRINTF("Test complete.\n"); |
} |
static void testsimple(bool quiet) |
static void testsimple(void) |
{ |
testit(100, VAL_COUNT, quiet); |
testit(200, VAL_COUNT, quiet); |
testit(1024, VAL_COUNT, quiet); |
testit(2048, 512, quiet); |
testit(4000, 128, quiet); |
testit(8192, 128, quiet); |
testit(16384, 128, quiet); |
testit(16385, 128, quiet); |
testit(100, VAL_COUNT); |
testit(200, VAL_COUNT); |
testit(1024, VAL_COUNT); |
testit(2048, 512); |
testit(4000, 128); |
testit(8192, 128); |
testit(16384, 128); |
testit(16385, 128); |
} |
#define THREADS 6 |
#define THR_MEM_COUNT 1024 |
#define THR_MEM_SIZE 128 |
#define THREADS 6 |
#define THR_MEM_COUNT 1024 |
#define THR_MEM_SIZE 128 |
static void * thr_data[THREADS][THR_MEM_COUNT]; |
static void *thr_data[THREADS][THR_MEM_COUNT]; |
static slab_cache_t *thr_cache; |
static semaphore_t thr_sem; |
static bool sh_quiet; |
static void slabtest(void *data) |
{ |
136,8 → 127,7 |
thread_detach(THREAD); |
if (!sh_quiet) |
printf("Starting thread #%" PRIu64 "...\n", THREAD->tid); |
TPRINTF("Starting thread #%" PRIu64 "...\n", THREAD->tid); |
for (j = 0; j < 10; j++) { |
for (i = 0; i < THR_MEM_COUNT; i++) |
150,24 → 140,23 |
slab_free(thr_cache, thr_data[offs][i]); |
} |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " finished\n", THREAD->tid); |
TPRINTF("Thread #%" PRIu64 " finished\n", THREAD->tid); |
semaphore_up(&thr_sem); |
} |
static void testthreads(bool quiet) |
static void testthreads(void) |
{ |
thread_t *t; |
int i; |
thr_cache = slab_cache_create("thread_cache", THR_MEM_SIZE, 0, NULL, NULL, |
SLAB_CACHE_NOMAGAZINE); |
SLAB_CACHE_NOMAGAZINE); |
semaphore_initialize(&thr_sem, 0); |
for (i = 0; i < THREADS; i++) { |
if (!(t = thread_create(slabtest, (void *) (unative_t) i, TASK, 0, "slabtest", false))) { |
if (!quiet) |
printf("Could not create thread %d\n", i); |
TPRINTF("Could not create thread %d\n", i); |
} else |
thread_ready(t); |
} |
177,16 → 166,13 |
slab_cache_destroy(thr_cache); |
if (!quiet) |
printf("Test complete.\n"); |
TPRINTF("Test complete.\n"); |
} |
char * test_slab1(bool quiet) |
char *test_slab1(void) |
{ |
sh_quiet = quiet; |
testsimple(); |
testthreads(); |
testsimple(quiet); |
testthreads(quiet); |
return NULL; |
} |
//branches/tracing/kernel/test/mm/purge1.c |
---|
26,8 → 26,6 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifdef ia64 |
#include <print.h> |
#include <test.h> |
#include <mm/page.h> |
41,16 → 39,16 |
extern void tlb_invalidate_all(void); |
extern void tlb_invalidate_pages(asid_t asid, uintptr_t va, count_t cnt); |
char * test_purge1(bool quiet) |
char *test_purge1(void) |
{ |
tlb_entry_t entryi; |
tlb_entry_t entryd; |
int i; |
entryd.word[0] = 0; |
entryd.word[1] = 0; |
entryd.p = true; /* present */ |
entryd.ma = MA_WRITEBACK; |
entryd.a = true; /* already accessed */ |
77,11 → 75,9 |
dtc_mapping_insert(0 + i * (1 << PAGE_WIDTH), 9, entryd); |
} |
tlb_invalidate_pages(8,0x0c000,14); |
tlb_invalidate_pages(8, 0x0c000, 14); |
/*tlb_invalidate_all();*/ |
/* tlb_invalidate_all(); */ |
return NULL; |
} |
#endif |
//branches/tracing/kernel/test/mm/slab2.c |
---|
36,18 → 36,18 |
#include <synch/condvar.h> |
#include <synch/mutex.h> |
#define ITEM_SIZE 256 |
#define ITEM_SIZE 256 |
/** Fill memory with 2 caches, when allocation fails, |
* free one of the caches. We should have everything in magazines, |
* now allocation should clean magazines and allow for full allocation. |
*/ |
static void totalmemtest(bool quiet) |
static void totalmemtest(void) |
{ |
slab_cache_t *cache1; |
slab_cache_t *cache2; |
int i; |
void *data1, *data2; |
void *olddata1 = NULL, *olddata2 = NULL; |
54,8 → 54,7 |
cache1 = slab_cache_create("cache1_tst", ITEM_SIZE, 0, NULL, NULL, 0); |
cache2 = slab_cache_create("cache2_tst", ITEM_SIZE, 0, NULL, NULL, 0); |
if (!quiet) |
printf("Allocating..."); |
TPRINTF("Allocating..."); |
/* Use atomic alloc, so that we find end of memory */ |
do { |
74,13 → 73,12 |
*((void **) data2) = olddata2; |
olddata1 = data1; |
olddata2 = data2; |
} while (1); |
} while (true); |
if (!quiet) { |
printf("done.\n"); |
printf("Deallocating cache2..."); |
} |
TPRINTF("done.\n"); |
TPRINTF("Deallocating cache2..."); |
/* We do not have memory - now deallocate cache2 */ |
while (olddata2) { |
data2 = *((void **) olddata2); |
88,16 → 86,14 |
olddata2 = data2; |
} |
if (!quiet) { |
printf("done.\n"); |
printf("Allocating to cache1...\n"); |
} |
TPRINTF("done.\n"); |
TPRINTF("Allocating to cache1...\n"); |
for (i = 0; i < 30; i++) { |
data1 = slab_alloc(cache1, FRAME_ATOMIC); |
if (!data1) { |
if (!quiet) |
printf("Incorrect memory size - use another test."); |
TPRINTF("Incorrect memory size - use another test."); |
return; |
} |
memsetb(data1, ITEM_SIZE, 0); |
104,7 → 100,7 |
*((void **) data1) = olddata1; |
olddata1 = data1; |
} |
while (1) { |
while (true) { |
data1 = slab_alloc(cache1, FRAME_ATOMIC); |
if (!data1) |
break; |
113,8 → 109,7 |
olddata1 = data1; |
} |
if (!quiet) |
printf("Deallocating cache1..."); |
TPRINTF("Deallocating cache1..."); |
while (olddata1) { |
data1 = *((void **) olddata1); |
122,10 → 117,10 |
olddata1 = data1; |
} |
if (!quiet) { |
printf("done.\n"); |
TPRINTF("done.\n"); |
if (!test_quiet) |
slab_print_list(); |
} |
slab_cache_destroy(cache1); |
slab_cache_destroy(cache2); |
135,9 → 130,8 |
static semaphore_t thr_sem; |
static condvar_t thread_starter; |
static mutex_t starter_mutex; |
static bool sh_quiet; |
#define THREADS 8 |
#define THREADS 8 |
static void slabtest(void *priv) |
{ |
149,14 → 143,12 |
condvar_wait(&thread_starter,&starter_mutex); |
mutex_unlock(&starter_mutex); |
if (!sh_quiet) |
printf("Starting thread #%" PRIu64 "...\n", THREAD->tid); |
TPRINTF("Starting thread #%" PRIu64 "...\n", THREAD->tid); |
/* Alloc all */ |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " allocating...\n", THREAD->tid); |
TPRINTF("Thread #%" PRIu64 " allocating...\n", THREAD->tid); |
while (1) { |
while (true) { |
/* Call with atomic to detect end of memory */ |
new = slab_alloc(thr_cache, FRAME_ATOMIC); |
if (!new) |
165,8 → 157,7 |
data = new; |
} |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " releasing...\n", THREAD->tid); |
TPRINTF("Thread #%" PRIu64 " releasing...\n", THREAD->tid); |
while (data) { |
new = *((void **)data); |
175,10 → 166,9 |
data = new; |
} |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " allocating...\n", THREAD->tid); |
TPRINTF("Thread #%" PRIu64 " allocating...\n", THREAD->tid); |
while (1) { |
while (true) { |
/* Call with atomic to detect end of memory */ |
new = slab_alloc(thr_cache, FRAME_ATOMIC); |
if (!new) |
187,8 → 177,7 |
data = new; |
} |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " releasing...\n", THREAD->tid); |
TPRINTF("Thread #%" PRIu64 " releasing...\n", THREAD->tid); |
while (data) { |
new = *((void **)data); |
197,14 → 186,15 |
data = new; |
} |
if (!sh_quiet) |
printf("Thread #%" PRIu64 " finished\n", THREAD->tid); |
TPRINTF("Thread #%" PRIu64 " finished\n", THREAD->tid); |
slab_print_list(); |
if (!test_quiet) |
slab_print_list(); |
semaphore_up(&thr_sem); |
} |
static void multitest(int size, bool quiet) |
static void multitest(int size) |
{ |
/* Start 8 threads that just allocate as much as possible, |
* then release everything, then again allocate, then release |
212,48 → 202,42 |
thread_t *t; |
int i; |
if (!quiet) |
printf("Running stress test with size %d\n", size); |
TPRINTF("Running stress test with size %d\n", size); |
condvar_initialize(&thread_starter); |
mutex_initialize(&starter_mutex, MUTEX_PASSIVE); |
thr_cache = slab_cache_create("thread_cache", size, 0, NULL, NULL, 0); |
semaphore_initialize(&thr_sem,0); |
for (i = 0; i < THREADS; i++) { |
if (!(t = thread_create(slabtest, NULL, TASK, 0, "slabtest", false))) { |
if (!quiet) |
printf("Could not create thread %d\n", i); |
TPRINTF("Could not create thread %d\n", i); |
} else |
thread_ready(t); |
} |
thread_sleep(1); |
condvar_broadcast(&thread_starter); |
for (i = 0; i < THREADS; i++) |
semaphore_down(&thr_sem); |
slab_cache_destroy(thr_cache); |
if (!quiet) |
printf("Stress test complete.\n"); |
TPRINTF("Stress test complete.\n"); |
} |
char * test_slab2(bool quiet) |
char *test_slab2(void) |
{ |
sh_quiet = quiet; |
TPRINTF("Running reclaim single-thread test .. pass 1\n"); |
totalmemtest(); |
if (!quiet) |
printf("Running reclaim single-thread test .. pass 1\n"); |
totalmemtest(quiet); |
if (!quiet) |
printf("Running reclaim single-thread test .. pass 2\n"); |
totalmemtest(quiet); |
if (!quiet) |
printf("Reclaim test OK.\n"); |
TPRINTF("Running reclaim single-thread test .. pass 2\n"); |
totalmemtest(); |
multitest(128, quiet); |
multitest(2048, quiet); |
multitest(8192, quiet); |
TPRINTF("Reclaim test OK.\n"); |
multitest(128); |
multitest(2048); |
multitest(8192); |
return NULL; |
} |
//branches/tracing/kernel/test/mm/purge1_skip.c |
---|
0,0 → 1,34 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <test.h> |
char *test_purge1(void) |
{ |
return NULL; |
} |
//branches/tracing/kernel/test/mm/mapping1.c |
---|
35,40 → 35,36 |
#include <arch/types.h> |
#include <debug.h> |
#define PAGE0 0x10000000 |
#define PAGE1 (PAGE0+PAGE_SIZE) |
#define PAGE0 0x10000000 |
#define PAGE1 (PAGE0 + PAGE_SIZE) |
#define VALUE0 0x01234567 |
#define VALUE1 0x89abcdef |
#define VALUE0 0x01234567 |
#define VALUE1 0x89abcdef |
char * test_mapping1(bool quiet) |
char *test_mapping1(void) |
{ |
uintptr_t frame0, frame1; |
uint32_t v0, v1; |
frame0 = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_KA); |
frame1 = (uintptr_t) frame_alloc(ONE_FRAME, FRAME_KA); |
if (!quiet) |
printf("Writing %#x to physical address %p.\n", VALUE0, KA2PA(frame0)); |
TPRINTF("Writing %#x to physical address %p.\n", VALUE0, KA2PA(frame0)); |
*((uint32_t *) frame0) = VALUE0; |
if (!quiet) |
printf("Writing %#x to physical address %p.\n", VALUE1, KA2PA(frame1)); |
TPRINTF("Writing %#x to physical address %p.\n", VALUE1, KA2PA(frame1)); |
*((uint32_t *) frame1) = VALUE1; |
if (!quiet) |
printf("Mapping virtual address %p to physical address %p.\n", PAGE0, KA2PA(frame0)); |
TPRINTF("Mapping virtual address %p to physical address %p.\n", PAGE0, KA2PA(frame0)); |
page_mapping_insert(AS_KERNEL, PAGE0, KA2PA(frame0), PAGE_PRESENT | PAGE_WRITE); |
if (!quiet) |
printf("Mapping virtual address %p to physical address %p.\n", PAGE1, KA2PA(frame1)); |
TPRINTF("Mapping virtual address %p to physical address %p.\n", PAGE1, KA2PA(frame1)); |
page_mapping_insert(AS_KERNEL, PAGE1, KA2PA(frame1), PAGE_PRESENT | PAGE_WRITE); |
v0 = *((uint32_t *) PAGE0); |
v1 = *((uint32_t *) PAGE1); |
if (!quiet) { |
printf("Value at virtual address %p is %#x.\n", PAGE0, v0); |
printf("Value at virtual address %p is %#x.\n", PAGE1, v1); |
} |
TPRINTF("Value at virtual address %p is %#x.\n", PAGE0, v0); |
TPRINTF("Value at virtual address %p is %#x.\n", PAGE1, v1); |
if (v0 != VALUE0) |
return "Value at v0 not equal to VALUE0"; |
75,25 → 71,22 |
if (v1 != VALUE1) |
return "Value at v1 not equal to VALUE1"; |
if (!quiet) |
printf("Writing %#x to virtual address %p.\n", 0, PAGE0); |
TPRINTF("Writing %#x to virtual address %p.\n", 0, PAGE0); |
*((uint32_t *) PAGE0) = 0; |
if (!quiet) |
printf("Writing %#x to virtual address %p.\n", 0, PAGE1); |
*((uint32_t *) PAGE1) = 0; |
TPRINTF("Writing %#x to virtual address %p.\n", 0, PAGE1); |
*((uint32_t *) PAGE1) = 0; |
v0 = *((uint32_t *) PAGE0); |
v1 = *((uint32_t *) PAGE1); |
if (!quiet) { |
printf("Value at virtual address %p is %#x.\n", PAGE0, *((uint32_t *) PAGE0)); |
printf("Value at virtual address %p is %#x.\n", PAGE1, *((uint32_t *) PAGE1)); |
} |
TPRINTF("Value at virtual address %p is %#x.\n", PAGE0, *((uint32_t *) PAGE0)); |
TPRINTF("Value at virtual address %p is %#x.\n", PAGE1, *((uint32_t *) PAGE1)); |
if (v0 != 0) |
return "Value at v0 not equal to 0"; |
if (v1 != 0) |
return "Value at v1 not equal to 0"; |
return NULL; |
return NULL; |
} |
//branches/tracing/kernel/test/fpu/fpu1.c |
---|
File deleted |
//branches/tracing/kernel/test/fpu/fpu1_ia64.c |
---|
0,0 → 1,170 |
/* |
* Copyright (c) 2005 Jakub Vana |
* Copyright (c) 2005 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <print.h> |
#include <debug.h> |
#include <test.h> |
#include <atomic.h> |
#include <proc/thread.h> |
#include <arch.h> |
#include <arch/arch.h> |
#define THREADS 150 |
#define ATTEMPTS 100 |
#define E_10e8 271828182 |
#define PI_10e8 3141592 |
static inline long double sqrt(long double a) |
{ |
long double x = 1; |
long double lx = 0; |
if (a < 0.00000000000000001) |
return 0; |
while (x != lx) { |
lx = x; |
x = (x + (a / x)) / 2; |
} |
return x; |
} |
static atomic_t threads_ok; |
static atomic_t threads_fault; |
static waitq_t can_start; |
static void e(void *data) |
{ |
int i; |
double e, d, le, f; |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
for (i = 0; i<ATTEMPTS; i++) { |
le = -1; |
e = 0; |
f = 1; |
for (d = 1; e != le; d *= f, f += 1) { |
le = e; |
e = e + 1 / d; |
} |
if ((int) (100000000 * e) != E_10e8) { |
TPRINTF("tid%" PRIu64 ": e*10e8=%zd should be %" PRIun "\n", THREAD->tid, (unative_t) (100000000 * e), (unative_t) E_10e8); |
atomic_inc(&threads_fault); |
break; |
} |
} |
atomic_inc(&threads_ok); |
} |
static void pi(void *data) |
{ |
int i; |
double lpi, pi; |
double n, ab, ad; |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
for (i = 0; i < ATTEMPTS; i++) { |
lpi = -1; |
pi = 0; |
for (n = 2, ab = sqrt(2); lpi != pi; n *= 2, ab = ad) { |
double sc, cd; |
sc = sqrt(1 - (ab * ab / 4)); |
cd = 1 - sc; |
ad = sqrt(ab * ab / 4 + cd * cd); |
lpi = pi; |
pi = 2 * n * ad; |
} |
if ((int) (1000000 * pi) != PI_10e8) { |
TPRINTF("tid%" PRIu64 ": pi*10e8=%zd should be %" PRIun "\n", THREAD->tid, (unative_t) (1000000 * pi), (unative_t) (PI_10e8 / 100)); |
atomic_inc(&threads_fault); |
break; |
} |
} |
atomic_inc(&threads_ok); |
} |
char *test_fpu1(void) |
{ |
unsigned int i, total = 0; |
waitq_initialize(&can_start); |
atomic_set(&threads_ok, 0); |
atomic_set(&threads_fault, 0); |
TPRINTF("Creating %u threads... ", 2 * THREADS); |
for (i = 0; i < THREADS; i++) { |
thread_t *t; |
if (!(t = thread_create(e, NULL, TASK, 0, "e", false))) { |
TPRINTF("could not create thread %u\n", 2 * i); |
break; |
} |
thread_ready(t); |
total++; |
if (!(t = thread_create(pi, NULL, TASK, 0, "pi", false))) { |
TPRINTF("could not create thread %u\n", 2 * i + 1); |
break; |
} |
thread_ready(t); |
total++; |
} |
TPRINTF("ok\n"); |
thread_sleep(1); |
waitq_wakeup(&can_start, WAKEUP_ALL); |
while (atomic_get(&threads_ok) != (long) total) { |
TPRINTF("Threads left: %d\n", total - atomic_get(&threads_ok)); |
thread_sleep(1); |
} |
if (atomic_get(&threads_fault) == 0) |
return NULL; |
return "Test failed"; |
} |
//branches/tracing/kernel/test/fpu/fpu1_x86.c |
---|
0,0 → 1,167 |
/* |
* Copyright (c) 2005 Jakub Vana |
* Copyright (c) 2005 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <print.h> |
#include <debug.h> |
#include <test.h> |
#include <atomic.h> |
#include <proc/thread.h> |
#include <arch.h> |
#include <arch/arch.h> |
#define THREADS 150 |
#define ATTEMPTS 100 |
#define E_10e8 271828182 |
#define PI_10e8 314159265 |
static inline double sqrt(double x) |
{ |
double v; |
asm ( |
"fsqrt\n" |
: "=t" (v) |
: "0" (x) |
); |
return v; |
} |
static atomic_t threads_ok; |
static atomic_t threads_fault; |
static waitq_t can_start; |
static void e(void *data) |
{ |
int i; |
double e, d, le, f; |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
for (i = 0; i<ATTEMPTS; i++) { |
le = -1; |
e = 0; |
f = 1; |
for (d = 1; e != le; d *= f, f += 1) { |
le = e; |
e = e + 1 / d; |
} |
if ((int) (100000000 * e) != E_10e8) { |
TPRINTF("tid%" PRIu64 ": e*10e8=%zd should be %" PRIun "\n", THREAD->tid, (unative_t) (100000000 * e), (unative_t) E_10e8); |
atomic_inc(&threads_fault); |
break; |
} |
} |
atomic_inc(&threads_ok); |
} |
static void pi(void *data) |
{ |
int i; |
double lpi, pi; |
double n, ab, ad; |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
for (i = 0; i < ATTEMPTS; i++) { |
lpi = -1; |
pi = 0; |
for (n = 2, ab = sqrt(2); lpi != pi; n *= 2, ab = ad) { |
double sc, cd; |
sc = sqrt(1 - (ab * ab / 4)); |
cd = 1 - sc; |
ad = sqrt(ab * ab / 4 + cd * cd); |
lpi = pi; |
pi = 2 * n * ad; |
} |
if ((int) (100000000 * pi) != PI_10e8) { |
TPRINTF("tid%" PRIu64 ": pi*10e8=%zd should be %" PRIun "\n", THREAD->tid, (unative_t) (100000000 * pi), (unative_t) PI_10e8); |
atomic_inc(&threads_fault); |
break; |
} |
} |
atomic_inc(&threads_ok); |
} |
char *test_fpu1(void) |
{ |
unsigned int i, total = 0; |
waitq_initialize(&can_start); |
atomic_set(&threads_ok, 0); |
atomic_set(&threads_fault, 0); |
TPRINTF("Creating %u threads... ", 2 * THREADS); |
for (i = 0; i < THREADS; i++) { |
thread_t *t; |
if (!(t = thread_create(e, NULL, TASK, 0, "e", false))) { |
TPRINTF("could not create thread %u\n", 2 * i); |
break; |
} |
thread_ready(t); |
total++; |
if (!(t = thread_create(pi, NULL, TASK, 0, "pi", false))) { |
TPRINTF("could not create thread %u\n", 2 * i + 1); |
break; |
} |
thread_ready(t); |
total++; |
} |
TPRINTF("ok\n"); |
thread_sleep(1); |
waitq_wakeup(&can_start, WAKEUP_ALL); |
while (atomic_get(&threads_ok) != (long) total) { |
TPRINTF("Threads left: %d\n", total - atomic_get(&threads_ok)); |
thread_sleep(1); |
} |
if (atomic_get(&threads_fault) == 0) |
return NULL; |
return "Test failed"; |
} |
//branches/tracing/kernel/test/fpu/mips2_skip.c |
---|
0,0 → 1,34 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <test.h> |
char *test_mips2(void) |
{ |
return NULL; |
} |
//branches/tracing/kernel/test/fpu/fpu1_skip.c |
---|
0,0 → 1,34 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <test.h> |
char *test_fpu1(void) |
{ |
return NULL; |
} |
//branches/tracing/kernel/test/fpu/sse1_skip.c |
---|
0,0 → 1,34 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <test.h> |
char *test_sse1(void) |
{ |
return NULL; |
} |
//branches/tracing/kernel/test/fpu/mips2.def |
---|
1,4 → 1,3 |
#ifdef mips32 |
{ |
"mips2", |
"MIPS FPU test", |
5,4 → 4,3 |
&test_mips2, |
true |
}, |
#endif |
//branches/tracing/kernel/test/fpu/fpu1.def |
---|
1,4 → 1,3 |
#if (defined(ia32) || defined(amd64) || defined(ia64) || defined(ia32xen)) |
{ |
"fpu1", |
"Intel FPU test", |
5,4 → 4,3 |
&test_fpu1, |
true |
}, |
#endif |
//branches/tracing/kernel/test/fpu/sse1.def |
---|
1,4 → 1,3 |
#if (defined(ia32) || defined(amd64) || defined(ia32xen)) |
{ |
"sse1", |
"Intel SEE test", |
5,4 → 4,3 |
&test_sse1, |
true |
}, |
#endif |
//branches/tracing/kernel/test/fpu/mips2.c |
---|
26,8 → 26,6 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifdef mips32 |
#include <print.h> |
#include <debug.h> |
38,14 → 36,13 |
#include <arch.h> |
#define THREADS 50 |
#define DELAY 10000L |
#define ATTEMPTS 5 |
#define THREADS 50 |
#define DELAY 10000L |
#define ATTEMPTS 5 |
static atomic_t threads_ok; |
static atomic_t threads_fault; |
static waitq_t can_start; |
static bool sh_quiet; |
static void testit1(void *data) |
{ |
56,7 → 53,7 |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
for (i = 0; i < ATTEMPTS; i++) { |
asm volatile ( |
"mtc1 %0,$1" |
71,8 → 68,7 |
); |
if (arg != after_arg) { |
if (!sh_quiet) |
printf("General reg tid%" PRIu64 ": arg(%d) != %d\n", THREAD->tid, arg, after_arg); |
TPRINTF("General reg tid%" PRIu64 ": arg(%d) != %d\n", THREAD->tid, arg, after_arg); |
atomic_inc(&threads_fault); |
break; |
} |
89,13 → 85,13 |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
for (i = 0; i < ATTEMPTS; i++) { |
asm volatile ( |
"mtc1 %0,$1" |
: "=r" (arg) |
); |
scheduler(); |
asm volatile ( |
"mfc1 %0,$1" |
103,8 → 99,7 |
); |
if (arg != after_arg) { |
if (!sh_quiet) |
printf("General reg tid%" PRIu64 ": arg(%d) != %d\n", THREAD->tid, arg, after_arg); |
TPRINTF("General reg tid%" PRIu64 ": arg(%d) != %d\n", THREAD->tid, arg, after_arg); |
atomic_inc(&threads_fault); |
break; |
} |
113,24 → 108,21 |
} |
char * test_mips2(bool quiet) |
char *test_mips2(void) |
{ |
unsigned int i, total = 0; |
sh_quiet = quiet; |
waitq_initialize(&can_start); |
atomic_set(&threads_ok, 0); |
atomic_set(&threads_fault, 0); |
if (!quiet) |
printf("Creating %u threads... ", 2 * THREADS); |
TPRINTF("Creating %u threads... ", 2 * THREADS); |
for (i = 0; i < THREADS; i++) { |
thread_t *t; |
if (!(t = thread_create(testit1, (void *) ((unative_t) 2 * i), TASK, 0, "testit1", false))) { |
if (!quiet) |
printf("could not create thread %u\n", 2 * i); |
TPRINTF("could not create thread %u\n", 2 * i); |
break; |
} |
thread_ready(t); |
137,8 → 129,7 |
total++; |
if (!(t = thread_create(testit2, (void *) ((unative_t) 2 * i + 1), TASK, 0, "testit2", false))) { |
if (!quiet) |
printf("could not create thread %u\n", 2 * i + 1); |
TPRINTF("could not create thread %u\n", 2 * i + 1); |
break; |
} |
thread_ready(t); |
145,15 → 136,13 |
total++; |
} |
if (!quiet) |
printf("ok\n"); |
TPRINTF("ok\n"); |
thread_sleep(1); |
waitq_wakeup(&can_start, WAKEUP_ALL); |
while (atomic_get(&threads_ok) != (long) total) { |
if (!quiet) |
printf("Threads left: %d\n", total - atomic_get(&threads_ok)); |
TPRINTF("Threads left: %d\n", total - atomic_get(&threads_ok)); |
thread_sleep(1); |
} |
162,5 → 151,3 |
return "Test failed"; |
} |
#endif |
//branches/tracing/kernel/test/fpu/sse1.c |
---|
26,8 → 26,6 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#if (defined(ia32) || defined(amd64) || defined(ia32xen)) |
#include <print.h> |
#include <debug.h> |
38,41 → 36,38 |
#include <arch.h> |
#define THREADS 25 |
#define DELAY 10000L |
#define ATTEMPTS 5 |
#define THREADS 25 |
#define DELAY 10000L |
#define ATTEMPTS 5 |
static atomic_t threads_ok; |
static atomic_t threads_fault; |
static waitq_t can_start; |
static bool sh_quiet; |
static void testit1(void *data) |
{ |
int i; |
int arg __attribute__((aligned(16))) = (int) ((unative_t) data); |
int after_arg __attribute__((aligned(16))); |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
for (i = 0; i < ATTEMPTS; i++) { |
asm volatile ( |
"movlpd %0, %%xmm2\n" |
: "=m" (arg) |
"movlpd %[arg], %%xmm2\n" |
: [arg] "=m" (arg) |
); |
delay(DELAY); |
asm volatile ( |
"movlpd %%xmm2, %0\n" |
: "=m" (after_arg) |
"movlpd %%xmm2, %[after_arg]\n" |
: [after_arg] "=m" (after_arg) |
); |
if (arg != after_arg) { |
if (!sh_quiet) |
printf("tid%" PRIu64 ": arg(%d) != %d\n", THREAD->tid, arg, after_arg); |
TPRINTF("tid%" PRIu64 ": arg(%d) != %d\n", THREAD->tid, arg, after_arg); |
atomic_inc(&threads_fault); |
break; |
} |
89,22 → 84,21 |
thread_detach(THREAD); |
waitq_sleep(&can_start); |
for (i = 0; i < ATTEMPTS; i++) { |
asm volatile ( |
"movlpd %0, %%xmm2\n" |
: "=m" (arg) |
"movlpd %[arg], %%xmm2\n" |
: [arg] "=m" (arg) |
); |
scheduler(); |
asm volatile ( |
"movlpd %%xmm2, %0\n" |
: "=m" (after_arg) |
"movlpd %%xmm2, %[after_arg]\n" |
: [after_arg] "=m" (after_arg) |
); |
if (arg != after_arg) { |
if (!sh_quiet) |
printf("tid%" PRIu64 ": arg(%d) != %d\n", THREAD->tid, arg, after_arg); |
TPRINTF("tid%" PRIu64 ": arg(%d) != %d\n", THREAD->tid, arg, after_arg); |
atomic_inc(&threads_fault); |
break; |
} |
112,25 → 106,21 |
atomic_inc(&threads_ok); |
} |
char * test_sse1(bool quiet) |
char *test_sse1(void) |
{ |
unsigned int i, total = 0; |
sh_quiet = quiet; |
waitq_initialize(&can_start); |
atomic_set(&threads_ok, 0); |
atomic_set(&threads_fault, 0); |
if (!quiet) |
printf("Creating %u threads... ", 2 * THREADS); |
TPRINTF("Creating %u threads... ", 2 * THREADS); |
for (i = 0; i < THREADS; i++) { |
thread_t *t; |
if (!(t = thread_create(testit1, (void *) ((unative_t) 2 * i), TASK, 0, "testit1", false))) { |
if (!quiet) |
printf("could not create thread %u\n", 2 * i); |
TPRINTF("could not create thread %u\n", 2 * i); |
break; |
} |
thread_ready(t); |
137,8 → 127,7 |
total++; |
if (!(t = thread_create(testit2, (void *) ((unative_t) 2 * i + 1), TASK, 0, "testit2", false))) { |
if (!quiet) |
printf("could not create thread %u\n", 2 * i + 1); |
TPRINTF("could not create thread %u\n", 2 * i + 1); |
break; |
} |
thread_ready(t); |
145,15 → 134,13 |
total++; |
} |
if (!quiet) |
printf("ok\n"); |
TPRINTF("ok\n"); |
thread_sleep(1); |
waitq_wakeup(&can_start, WAKEUP_ALL); |
while (atomic_get(&threads_ok) != (long) total) { |
if (!quiet) |
printf("Threads left: %d\n", total - atomic_get(&threads_ok)); |
TPRINTF("Threads left: %d\n", total - atomic_get(&threads_ok)); |
thread_sleep(1); |
} |
162,5 → 149,3 |
return "Test failed"; |
} |
#endif |
//branches/tracing/kernel/test/sysinfo/sysinfo1.c |
---|
32,9 → 32,9 |
#include <test.h> |
#include <sysinfo/sysinfo.h> |
char * test_sysinfo1(bool quiet) |
char *test_sysinfo1(void) |
{ |
if (!quiet) |
if (!test_quiet) |
sysinfo_dump(NULL, 0); |
return NULL; |
} |
//branches/tracing/kernel/test/fault/fault1.c |
---|
36,8 → 36,7 |
#include <arch.h> |
char * test_fault1(bool quiet) |
char *test_fault1(void) |
{ |
((int *)(0))[1] = 0; |
//branches/tracing/kernel/test/atomic/atomic1.c |
---|
31,7 → 31,7 |
#include <atomic.h> |
#include <debug.h> |
char * test_atomic1(bool quiet) |
char *test_atomic1(void) |
{ |
atomic_t a; |
//branches/tracing/kernel/test/print/print2.c |
---|
0,0 → 1,57 |
/* |
* Copyright (c) 2005 Josef Cejka |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <print.h> |
#include <test.h> |
char *test_print2(void) |
{ |
TPRINTF("Testing printf(\"%%c %%3.2c %%-3.2c %%2.3c %%-2.3c\", 'a', 'b', 'c', 'd', 'e'):\n"); |
TPRINTF("Expected output: [a] [ b] [c ] [ d] [e ]\n"); |
TPRINTF("Real output: [%c] [%3.2c] [%-3.2c] [%2.3c] [%-2.3c]\n\n", 'a', 'b', 'c', 'd', 'e'); |
TPRINTF("Testing printf(\"%%d %%3.2d %%-3.2d %%2.3d %%-2.3d\", 1, 2, 3, 4, 5):\n"); |
TPRINTF("Expected output: [1] [ 02] [03 ] [004] [005]\n"); |
TPRINTF("Real output: [%d] [%3.2d] [%-3.2d] [%2.3d] [%-2.3d]\n\n", 1, 2, 3, 4, 5); |
TPRINTF("Testing printf(\"%%d %%3.2d %%-3.2d %%2.3d %%-2.3d\", -1, -2, -3, -4, -5):\n"); |
TPRINTF("Expected output: [-1] [-02] [-03] [-004] [-005]\n"); |
TPRINTF("Real output: [%d] [%3.2d] [%-3.2d] [%2.3d] [%-2.3d]\n\n", -1, -2, -3, -4, -5); |
TPRINTF("Testing printf(\"%%#x %%5.3#x %%-5.3#x %%3.5#x %%-3.5#x\", 17, 18, 19, 20, 21):\n"); |
TPRINTF("Expected output: [0x11] [0x012] [0x013] [0x00014] [0x00015]\n"); |
TPRINTF("Real output: [%#x] [%#5.3x] [%#-5.3x] [%#3.5x] [%#-3.5x]\n\n", 17, 18, 19, 20, 21); |
unative_t nat = 0x12345678u; |
TPRINTF("Testing printf(\"%%#" PRIx64 " %%#" PRIx32 " %%#" PRIx16 " %%#" PRIx8 " %%#" PRIxn " %%#" PRIx64 " %%s\", 0x1234567887654321ll, 0x12345678, 0x1234, 0x12, nat, 0x1234567887654321ull, \"Lovely string\"):\n"); |
TPRINTF("Expected output: [0x1234567887654321] [0x12345678] [0x1234] [0x12] [0x12345678] [0x1234567887654321] \"Lovely string\"\n"); |
TPRINTF("Real output: [%#" PRIx64 "] [%#" PRIx32 "] [%#" PRIx16 "] [%#" PRIx8 "] [%#" PRIxn "] [%#" PRIx64 "] \"%s\"\n\n", 0x1234567887654321ll, 0x12345678, 0x1234, 0x12, nat, 0x1234567887654321ull, "Lovely string"); |
return NULL; |
} |
//branches/tracing/kernel/test/print/print3.c |
---|
0,0 → 1,61 |
/* |
* Copyright (c) 2005 Josef Cejka |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <print.h> |
#include <macros.h> |
#include <test.h> |
#define BUFFER_SIZE 32 |
char *test_print3(void) |
{ |
char buffer[BUFFER_SIZE]; |
int retval; |
TPRINTF("Testing snprintf(buffer, " STRING(BUFFER_SIZE) ", \"Short text without parameters.\"):\n"); |
TPRINTF("Expected result: retval=30 buffer=\"Short text without parameters.\"\n"); |
retval = snprintf(buffer, BUFFER_SIZE, "Short text without parameters."); |
TPRINTF("Real result: retval=%d buffer=\"%s\"\n\n", retval, buffer); |
TPRINTF("Testing snprintf(buffer, " STRING(BUFFER_SIZE) ", \"Very very very long text without parameters.\"):\n"); |
TPRINTF("Expected result: retval=44 buffer=\"Very very very long text withou\"\n"); |
retval = snprintf(buffer, BUFFER_SIZE, "Very very very long text without parameters."); |
TPRINTF("Real result: retval=%d buffer=\"%s\"\n\n", retval, buffer); |
TPRINTF("Testing snprintf(buffer, " STRING(BUFFER_SIZE) ", \"Short %%s.\", \"text\"):\n"); |
TPRINTF("Expected result: retval=11 buffer=\"Short text.\"\n"); |
retval = snprintf(buffer, BUFFER_SIZE, "Short %s.", "text"); |
TPRINTF("Real result: retval=%d buffer=\"%s\"\n\n", retval, buffer); |
TPRINTF("Testing snprintf(buffer, " STRING(BUFFER_SIZE) ", \"Very long %%s. This text's length is more than %%d. We are interested in the result.\", \"text\", " STRING(BUFFER_SIZE) "):\n"); |
TPRINTF("Expected result: retval=84 buffer=\"Very long text. This text's len\"\n"); |
retval = snprintf(buffer, BUFFER_SIZE, "Very long %s. This text's length is more than %d. We are interested in the result.", "text", BUFFER_SIZE); |
TPRINTF("Real result: retval=%d buffer=\"%s\"\n\n", retval, buffer); |
return NULL; |
} |
//branches/tracing/kernel/test/print/print4.c |
---|
0,0 → 1,82 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <print.h> |
#include <test.h> |
char *test_print4(void) |
{ |
TPRINTF("ASCII printable characters (32 - 127) using printf(\"%%c\") and printf(\"%%lc\"):\n"); |
uint8_t group; |
for (group = 1; group < 4; group++) { |
TPRINTF("%#" PRIx8 ": ", group << 5); |
uint8_t index; |
for (index = 0; index < 32; index++) |
TPRINTF("%c", (char) ((group << 5) + index)); |
TPRINTF(" "); |
for (index = 0; index < 32; index++) |
TPRINTF("%lc", (wchar_t) ((group << 5) + index)); |
TPRINTF("\n"); |
} |
TPRINTF("\nExtended ASCII characters (128 - 255) using printf(\"%%lc\"):\n"); |
for (group = 4; group < 8; group++) { |
TPRINTF("%#" PRIx8 ": ", group << 5); |
uint8_t index; |
for (index = 0; index < 32; index++) |
TPRINTF("%lc", (wchar_t) ((group << 5) + index)); |
TPRINTF("\n"); |
} |
TPRINTF("\nUTF-8 strings using printf(\"%%s\"):\n"); |
TPRINTF("English: %s\n", "Quick brown fox jumps over the lazy dog"); |
TPRINTF("Czech: %s\n", "Příliš žluťoučký kůň úpěl ďábelské ódy"); |
TPRINTF("Greek: %s\n", "Ὦ ξεῖν’, ἀγγέλλειν Λακεδαιμονίοις ὅτι τῇδε"); |
TPRINTF("Hebrew: %s\n", "משוואת ברנולי היא משוואה בהידרודינמיקה"); |
TPRINTF("Arabic: %s\n", "التوزيع الجغرافي للحمل العنقودي"); |
TPRINTF("Russian: %s\n", "Леннон познакомился с художницей-авангардисткой"); |
TPRINTF("Armenian: %s\n", "Սկսեց հրատարակվել Երուսաղեմի հայկական"); |
TPRINTF("\nUTF-32 strings using printf(\"%%ls\"):\n"); |
TPRINTF("English: %ls\n", L"Quick brown fox jumps over the lazy dog"); |
TPRINTF("Czech: %ls\n", L"Příliš žluťoučký kůň úpěl ďábelské ódy"); |
TPRINTF("Greek: %ls\n", L"Ὦ ξεῖν’, ἀγγέλλειν Λακεδαιμονίοις ὅτι τῇδε"); |
TPRINTF("Hebrew: %ls\n", L"משוואת ברנולי היא משוואה בהידרודינמיקה"); |
TPRINTF("Arabic: %ls\n", L"التوزيع الجغرافي للحمل العنقودي"); |
TPRINTF("Russian: %ls\n", L"Леннон познакомился с художницей-авангардисткой"); |
TPRINTF("Armenian: %ls\n", L"Սկսեց հրատարակվել Երուսաղեմի հայկական"); |
return NULL; |
} |
//branches/tracing/kernel/test/print/print1.def |
---|
1,6 → 1,6 |
{ |
"print1", |
"Printf test", |
"String printf test", |
&test_print1, |
true |
}, |
//branches/tracing/kernel/test/print/print2.def |
---|
0,0 → 1,6 |
{ |
"print2", |
"Numeric printf test", |
&test_print2, |
true |
}, |
//branches/tracing/kernel/test/print/print3.def |
---|
0,0 → 1,6 |
{ |
"print3", |
"Buffered printf test", |
&test_print3, |
true |
}, |
//branches/tracing/kernel/test/print/print4.def |
---|
0,0 → 1,6 |
{ |
"print4", |
"Unicode test", |
&test_print4, |
true |
}, |
//branches/tracing/kernel/test/print/print1.c |
---|
29,44 → 29,27 |
#include <print.h> |
#include <test.h> |
#define BUFFER_SIZE 32 |
char * test_print1(bool quiet) |
char *test_print1(void) |
{ |
if (!quiet) { |
int retval; |
unative_t nat = 0x12345678u; |
char buffer[BUFFER_SIZE]; |
printf(" text 10.8s %*.*s \n", 5, 3, "text"); |
printf(" very long text 10.8s %10.8s \n", "very long text"); |
printf(" text 8.10s %8.10s \n", "text"); |
printf(" very long text 8.10s %8.10s \n", "very long text"); |
printf(" char: c '%c', 3.2c '%3.2c', -3.2c '%-3.2c', 2.3c '%2.3c', -2.3c '%-2.3c' \n", 'a', 'b', 'c', 'd', 'e'); |
printf(" int: d '%d', 3.2d '%3.2d', -3.2d '%-3.2d', 2.3d '%2.3d', -2.3d '%-2.3d' \n", 1, 1, 1, 1, 1); |
printf(" -int: d '%d', 3.2d '%3.2d', -3.2d '%-3.2d', 2.3d '%2.3d', -2.3d '%-2.3d' \n", -1, -1, -1, -1, -1); |
printf(" 0xint: x '%#x', 5.3x '%#5.3x', -5.3x '%#-5.3x', 3.5x '%#3.5x', -3.5x '%#-3.5x' \n", 17, 17, 17, 17, 17); |
printf("'%#llx' 64bit, '%#x' 32bit, '%#hhx' 8bit, '%#hx' 16bit, unative_t '%#" PRIxn "'. '%#llx' 64bit and '%s' string.\n", 0x1234567887654321ll, 0x12345678, 0x12, 0x1234, nat, 0x1234567887654321ull, "Lovely string" ); |
printf(" Print to NULL '%s'\n", NULL); |
retval = snprintf(buffer, BUFFER_SIZE, "Short text without parameters."); |
printf("Result is: '%s', retval = %d\n", buffer, retval); |
retval = snprintf(buffer, BUFFER_SIZE, "Very very very long text without parameters."); |
printf("Result is: '%s', retval = %d\n", buffer, retval); |
printf("Print short text to %d char long buffer via snprintf.\n", BUFFER_SIZE); |
retval = snprintf(buffer, BUFFER_SIZE, "Short %s", "text"); |
printf("Result is: '%s', retval = %d\n", buffer, retval); |
printf("Print long text to %d char long buffer via snprintf.\n", BUFFER_SIZE); |
retval = snprintf(buffer, BUFFER_SIZE, "Very long %s. This text`s length is more than %d. We are interested in the result.", "text" , BUFFER_SIZE); |
printf("Result is: '%s', retval = %d\n", buffer, retval); |
} |
TPRINTF("Testing printf(\"%%*.*s\", 5, 3, \"text\"):\n"); |
TPRINTF("Expected output: \" tex\"\n"); |
TPRINTF("Real output: \"%*.*s\"\n\n", 5, 3, "text"); |
TPRINTF("Testing printf(\"%%10.8s\", \"very long text\"):\n"); |
TPRINTF("Expected output: \" very lon\"\n"); |
TPRINTF("Real output: \"%10.8s\"\n\n", "very long text"); |
TPRINTF("Testing printf(\"%%8.10s\", \"text\"):\n"); |
TPRINTF("Expected output: \"text\"\n"); |
TPRINTF("Real output: \"%8.10s\"\n\n", "text"); |
TPRINTF("Testing printf(\"%%8.10s\", \"very long text\"):\n"); |
TPRINTF("Expected output: \"very long \"\n"); |
TPRINTF("Real output: \"%8.10s\"\n\n", "very long text"); |
TPRINTF("Testing printf(\"%%s\", NULL):\n"); |
TPRINTF("Expected output: \"(NULL)\"\n"); |
TPRINTF("Real output: \"%s\"\n\n", NULL); |
return NULL; |
} |
//branches/tracing/kernel/genarch/include/kbd/ns16550.h |
---|
File deleted |
//branches/tracing/kernel/genarch/include/kbd/i8042.h |
---|
File deleted |
//branches/tracing/kernel/genarch/include/kbd/scanc.h |
---|
File deleted |
//branches/tracing/kernel/genarch/include/kbd/key.h |
---|
File deleted |
//branches/tracing/kernel/genarch/include/kbd/scanc_pc.h |
---|
File deleted |
//branches/tracing/kernel/genarch/include/kbd/z8530.h |
---|
File deleted |
//branches/tracing/kernel/genarch/include/kbd/scanc_sun.h |
---|
File deleted |
//branches/tracing/kernel/genarch/include/kbrd/scanc_pc.h |
---|
0,0 → 1,48 |
/* |
* Copyright (c) 2006 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Scan codes for PC keyboards. |
*/ |
#ifndef KERN_SCANC_PC_H_ |
#define KERN_SCANC_PC_H_ |
#define SC_LSHIFT 0x2a |
#define SC_RSHIFT 0x36 |
#define SC_CAPSLOCK 0x3a |
#define SC_SCAN_ESCAPE 0xe0 |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/kbrd/scanc_sun.h |
---|
0,0 → 1,48 |
/* |
* Copyright (c) 2006 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Scan codes for Sun keyboards. |
*/ |
#ifndef KERN_SCANC_SUN_H_ |
#define KERN_SCANC_SUN_H_ |
#define SC_LSHIFT 0x63 |
#define SC_RSHIFT 0x6e |
#define SC_CAPSLOCK 0x77 |
#define SC_SCAN_ESCAPE 0xe0 |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/kbrd/kbrd.h |
---|
0,0 → 1,60 |
/* |
* Copyright (c) 2006 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
*/ |
#ifndef KERN_KBD_H_ |
#define KERN_KBD_H_ |
#include <console/chardev.h> |
#include <proc/thread.h> |
#include <synch/spinlock.h> |
typedef struct { |
thread_t *thread; |
indev_t *sink; |
indev_t raw; |
SPINLOCK_DECLARE(keylock); /**< keylock protects keyflags and lockflags. */ |
volatile unsigned int keyflags; /**< Tracking of multiple keypresses. */ |
volatile unsigned int lockflags; /**< Tracking of multiple keys lockings. */ |
} kbrd_instance_t; |
extern kbrd_instance_t *kbrd_init(void); |
extern indev_t *kbrd_wire(kbrd_instance_t *, indev_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/kbrd/scanc.h |
---|
0,0 → 1,49 |
/* |
* Copyright (c) 2006 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
*/ |
#ifndef KERN_SCANC_H_ |
#define KERN_SCANC_H_ |
#include <typedefs.h> |
#define SCANCODES 128 |
extern wchar_t sc_primary_map[SCANCODES]; |
extern wchar_t sc_secondary_map[SCANCODES]; |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/kbrd |
---|
Property changes: |
Added: svn:mergeinfo |
//branches/tracing/kernel/genarch/include/fb/font-8x16.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
35,11 → 35,15 |
#ifndef KERN_FONT_8X16_H_ |
#define KERN_FONT_8X16_H_ |
#define FONT_GLIPHS 256 |
#define FONT_SCANLINES 16 |
#define FONT_GLYPHS 2899 |
#define FONT_WIDTH 8 |
#define FONT_SCANLINES 16 |
extern unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES]; |
#include <typedefs.h> |
extern uint16_t fb_font_glyph(const wchar_t ch); |
extern uint8_t fb_font[FONT_GLYPHS][FONT_SCANLINES]; |
#endif |
/** @} |
//branches/tracing/kernel/genarch/include/fb/logo-196x66.h |
---|
0,0 → 1,49 |
/* |
* Copyright (c) 2008 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_LOGO_196X66_H_ |
#define KERN_LOGO_196X66_H_ |
#define LOGO_WIDTH 196 |
#define LOGO_HEIGHT 66 |
#define LOGO_COLOR 0xffffff |
#include <arch/types.h> |
extern uint32_t fb_logo[LOGO_WIDTH * LOGO_HEIGHT]; |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/fb/visuals.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
35,15 → 35,16 |
#ifndef KERN_VISUALS_H_ |
#define KERN_VISUALS_H_ |
#define VISUAL_INDIRECT_8 0 |
#define VISUAL_INDIRECT_8 0 |
#define VISUAL_RGB_5_5_5 1 |
#define VISUAL_RGB_5_6_5 2 |
#define VISUAL_RGB_8_8_8 3 |
#define VISUAL_RGB_8_8_8_0 4 |
#define VISUAL_RGB_0_8_8_8 5 |
#define VISUAL_RGB_5_5_5 1 |
#define VISUAL_RGB_5_6_5 2 |
#define VISUAL_RGB_8_8_8 3 |
#define VISUAL_RGB_8_8_8_0 4 |
#define VISUAL_RGB_0_8_8_8 5 |
#define VISUAL_BGR_0_8_8_8 6 |
#define VISUAL_BGR_0_8_8_8 6 |
#define VISUAL_BGR_8_8_8 7 |
#endif |
//branches/tracing/kernel/genarch/include/fb/fb.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
49,7 → 49,7 |
* Address where the first (top left) pixel is mapped, |
* relative to "addr". |
*/ |
unsigned int offset; |
unsigned int offset; |
/** Screen width in pixels. */ |
unsigned int x; |
65,6 → 65,8 |
} fb_properties_t; |
SPINLOCK_EXTERN(fb_lock); |
void fb_redraw(void); |
void fb_init(fb_properties_t *props); |
#endif |
//branches/tracing/kernel/genarch/include/drivers/ns16550/ns16550.h |
---|
0,0 → 1,76 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Headers for NS 16550 serial controller. |
*/ |
#ifndef KERN_NS16550_H_ |
#define KERN_NS16550_H_ |
#include <ddi/irq.h> |
#include <arch/types.h> |
#include <console/chardev.h> |
#define IER_ERBFI 0x01 /** Enable Receive Buffer Full Interrupt. */ |
#define LCR_DLAB 0x80 /** Divisor Latch Access bit. */ |
#define MCR_OUT2 0x08 /** OUT2. */ |
/** NS16550 registers. */ |
typedef struct { |
ioport8_t rbr; /**< Receiver Buffer Register. */ |
ioport8_t ier; /**< Interrupt Enable Register. */ |
union { |
ioport8_t iir; /**< Interrupt Ident Register (read). */ |
ioport8_t fcr; /**< FIFO control register (write). */ |
} __attribute__ ((packed)); |
ioport8_t lcr; /**< Line Control register. */ |
ioport8_t mcr; /**< Modem Control Register. */ |
ioport8_t lsr; /**< Line Status Register. */ |
} __attribute__ ((packed)) ns16550_t; |
/** Structure representing the ns16550 device. */ |
typedef struct { |
irq_t irq; |
ns16550_t *ns16550; |
indev_t *kbrdin; |
} ns16550_instance_t; |
extern ns16550_instance_t *ns16550_init(ns16550_t *, inr_t, cir_t, void *); |
extern void ns16550_wire(ns16550_instance_t *, indev_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/drivers/dsrln/dsrlnin.h |
---|
0,0 → 1,61 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Dummy serial line input. |
*/ |
#ifndef KERN_DSRLNIN_H_ |
#define KERN_DSRLNIN_H_ |
#include <ddi/irq.h> |
#include <arch/types.h> |
#include <console/chardev.h> |
#include <typedefs.h> |
typedef struct { |
ioport8_t data; |
} __attribute__ ((packed)) dsrlnin_t; |
typedef struct { |
irq_t irq; |
dsrlnin_t *dsrlnin; |
indev_t *srlnin; |
} dsrlnin_instance_t; |
extern dsrlnin_instance_t *dsrlnin_init(dsrlnin_t *, inr_t); |
extern void dsrlnin_wire(dsrlnin_instance_t *, indev_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/drivers/dsrln/dsrlnout.h |
---|
0,0 → 1,48 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Dummy serial line output. |
*/ |
#ifndef KERN_DSRLNOUT_H_ |
#define KERN_DSRLNOUT_H_ |
#include <arch/types.h> |
#include <typedefs.h> |
extern void dsrlnout_init(ioport8_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/drivers/legacy/ia32/io.h |
---|
0,0 → 1,51 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
* @brief This file contains definitions used by architectures with the |
* ia32 legacy I/O space (i.e. ia32, amd64 and ia64). |
*/ |
#ifndef KERN_LEGACY_IA32_IO_H |
#define KERN_LEGACY_IA32_IO_H |
#include <arch/types.h> |
#define I8042_BASE ((ioport8_t *) 0x60) |
#define EGA_BASE ((ioport8_t *) 0x3d4) |
#define NS16550_BASE ((ioport8_t *) 0x3f8) |
#define EGA_VIDEORAM 0xb8000 |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/drivers/i8042/i8042.h |
---|
0,0 → 1,62 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_I8042_H_ |
#define KERN_I8042_H_ |
#include <ddi/irq.h> |
#include <arch/types.h> |
#include <console/chardev.h> |
#include <typedefs.h> |
typedef struct { |
ioport8_t data; |
uint8_t pad[3]; |
ioport8_t status; |
} __attribute__ ((packed)) i8042_t; |
typedef struct { |
irq_t irq; |
i8042_t *i8042; |
indev_t *kbrdin; |
} i8042_instance_t; |
extern i8042_instance_t *i8042_init(i8042_t *, inr_t); |
extern void i8042_wire(i8042_instance_t *, indev_t *); |
extern void i8042_cpu_reset(i8042_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/drivers/via-cuda/cuda.h |
---|
0,0 → 1,57 |
/* |
* Copyright (c) 2006 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_CUDA_H_ |
#define KERN_CUDA_H_ |
#include <ddi/irq.h> |
#include <arch/types.h> |
#include <console/chardev.h> |
typedef struct { |
} cuda_t; |
typedef struct { |
irq_t irq; |
cuda_t *cuda; |
indev_t *kbrdin; |
} cuda_instance_t; |
extern cuda_instance_t *cuda_init(cuda_t *, inr_t, cir_t, void *); |
extern void cuda_wire(cuda_instance_t *, indev_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/drivers/z8530/z8530.h |
---|
0,0 → 1,128 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Headers for Zilog 8530 serial controller. |
*/ |
#ifndef KERN_Z8530_H_ |
#define KERN_Z8530_H_ |
#include <ddi/irq.h> |
#include <arch/types.h> |
#include <console/chardev.h> |
#define WR0 0 |
#define WR1 1 |
#define WR2 2 |
#define WR3 3 |
#define WR4 4 |
#define WR5 5 |
#define WR6 6 |
#define WR7 7 |
#define WR8 8 |
#define WR9 9 |
#define WR10 10 |
#define WR11 11 |
#define WR12 12 |
#define WR13 13 |
#define WR14 14 |
#define WR15 15 |
#define RR0 0 |
#define RR1 1 |
#define RR2 2 |
#define RR3 3 |
#define RR8 8 |
#define RR10 10 |
#define RR12 12 |
#define RR13 13 |
#define RR14 14 |
#define RR15 15 |
/** Reset pending TX interrupt. */ |
#define WR0_TX_IP_RST (0x5 << 3) |
#define WR0_ERR_RST (0x6 << 3) |
/** Receive Interrupts Disabled. */ |
#define WR1_RID (0x0 << 3) |
/** Receive Interrupt on First Character or Special Condition. */ |
#define WR1_RIFCSC (0x1 << 3) |
/** Interrupt on All Receive Characters or Special Conditions. */ |
#define WR1_IARCSC (0x2 << 3) |
/** Receive Interrupt on Special Condition. */ |
#define WR1_RISC (0x3 << 3) |
/** Parity Is Special Condition. */ |
#define WR1_PISC (0x1 << 2) |
/** Rx Enable. */ |
#define WR3_RX_ENABLE (0x1 << 0) |
/** 8-bits per character. */ |
#define WR3_RX8BITSCH (0x3 << 6) |
/** Master Interrupt Enable. */ |
#define WR9_MIE (0x1 << 3) |
/** Receive Character Available. */ |
#define RR0_RCA (0x1 << 0) |
/** z8530's registers. */ |
typedef struct { |
union { |
ioport8_t ctl_b; |
ioport8_t status_b; |
} __attribute__ ((packed)); |
uint8_t pad1; |
ioport8_t data_b; |
uint8_t pad2; |
union { |
ioport8_t ctl_a; |
ioport8_t status_a; |
} __attribute__ ((packed)); |
uint8_t pad3; |
ioport8_t data_a; |
} __attribute__ ((packed)) z8530_t; |
/** Structure representing the z8530 device. */ |
typedef struct { |
irq_t irq; |
z8530_t *z8530; |
indev_t *kbrdin; |
} z8530_instance_t; |
extern z8530_instance_t *z8530_init(z8530_t *, inr_t, cir_t, void *); |
extern void z8530_wire(z8530_instance_t *, indev_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/drivers/ega/ega.h |
---|
0,0 → 1,56 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch_drivers |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_EGA_H_ |
#define KERN_EGA_H_ |
#include <arch/types.h> |
#include <typedefs.h> |
#define EGA_COLS 80 |
#define EGA_ROWS 25 |
#define EGA_SCREEN (EGA_COLS * EGA_ROWS) |
#define EGA_VRAM_SIZE (2 * EGA_SCREEN) |
/* EGA device registers. */ |
#define EGA_INDEX_REG 0 |
#define EGA_DATA_REG 1 |
extern void ega_redraw(void); |
extern void ega_init(ioport8_t *, uintptr_t); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/multiboot/multiboot.h |
---|
0,0 → 1,100 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_MULTIBOOT_H_ |
#define KERN_MULTIBOOT_H_ |
#include <arch/types.h> |
#include <arch/boot/memmap.h> |
/** Multiboot 32-bit address. */ |
typedef uint32_t mbaddr_t; |
/** Multiboot mod structure */ |
typedef struct { |
mbaddr_t start; |
mbaddr_t end; |
mbaddr_t string; |
uint32_t reserved; |
} __attribute__ ((packed)) multiboot_mod_t; |
/** Multiboot mmap structure */ |
typedef struct { |
uint32_t size; |
e820memmap_t mm_info; |
} __attribute__ ((packed)) multiboot_mmap_t; |
/** Multiboot information structure */ |
typedef struct { |
uint32_t flags; |
uint32_t mem_lower; |
uint32_t mem_upper; |
uint32_t boot_device; |
uint32_t cmdline; |
uint32_t mods_count; |
mbaddr_t mods_addr; |
uint32_t syms[4]; |
uint32_t mmap_length; |
mbaddr_t mmap_addr; |
/* ... */ |
} __attribute__ ((packed)) multiboot_info_t; |
enum multiboot_info_flags { |
MBINFO_FLAGS_MEM = 0x01, |
MBINFO_FLAGS_BOOT = 0x02, |
MBINFO_FLAGS_CMDLINE = 0x04, |
MBINFO_FLAGS_MODS = 0x08, |
MBINFO_FLAGS_SYMS1 = 0x10, |
MBINFO_FLAGS_SYMS2 = 0x20, |
MBINFO_FLAGS_MMAP = 0x40 |
/* ... */ |
}; |
#define MULTIBOOT_LOADER_MAGIC 0x2BADB002 |
/** Convert 32-bit multiboot address to a pointer. */ |
#define MULTIBOOT_PTR(mba) ((void *)(uintptr_t) (mba)) |
extern void multiboot_info_parse(uint32_t, const multiboot_info_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/include/srln/srln.h |
---|
0,0 → 1,55 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
*/ |
#ifndef KERN_SRLN_H_ |
#define KERN_SRLN_H_ |
#include <console/chardev.h> |
#include <proc/thread.h> |
typedef struct { |
thread_t *thread; |
indev_t *sink; |
indev_t raw; |
} srln_instance_t; |
extern srln_instance_t *srln_init(void); |
extern indev_t *srln_wire(srln_instance_t *, indev_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/genarch/Makefile.inc |
---|
33,68 → 33,90 |
genarch/src/acpi/acpi.c \ |
genarch/src/acpi/madt.c |
endif |
ifeq ($(CONFIG_PAGE_PT),y) |
GENARCH_SOURCES += \ |
genarch/src/mm/page_pt.c \ |
genarch/src/mm/as_pt.c |
endif |
ifeq ($(CONFIG_PAGE_HT),y) |
GENARCH_SOURCES += \ |
genarch/src/mm/page_ht.c \ |
genarch/src/mm/as_ht.c |
endif |
ifeq ($(CONFIG_ASID),y) |
GENARCH_SOURCES += \ |
genarch/src/mm/asid.c |
endif |
ifeq ($(CONFIG_ASID_FIFO),y) |
GENARCH_SOURCES += \ |
genarch/src/mm/asid_fifo.c |
endif |
ifeq ($(CONFIG_SOFTINT),y) |
GENARCH_SOURCES += \ |
genarch/src/softint/division.c |
endif |
## Framebuffer |
ifeq ($(CONFIG_FB),y) |
GENARCH_SOURCES += \ |
genarch/src/fb/font-8x16.c \ |
genarch/src/fb/logo-196x66.c \ |
genarch/src/fb/fb.c |
DEFS += -DCONFIG_FB |
endif |
## i8042 controller |
ifeq ($(CONFIG_DSRLNIN),y) |
GENARCH_SOURCES += \ |
genarch/src/drivers/dsrln/dsrlnin.c |
endif |
ifeq ($(CONFIG_DSRLNOUT),y) |
GENARCH_SOURCES += \ |
genarch/src/drivers/dsrln/dsrlnout.c |
endif |
ifeq ($(CONFIG_I8042),y) |
GENARCH_SOURCES += \ |
genarch/src/kbd/i8042.c \ |
genarch/src/kbd/key.c \ |
genarch/src/kbd/scanc_pc.c |
genarch/src/drivers/i8042/i8042.c |
endif |
## Sun keyboard |
ifeq ($(CONFIG_SUN_KBD),y) |
ifeq ($(CONFIG_NS16550),y) |
GENARCH_SOURCES += \ |
genarch/src/kbd/key.c \ |
genarch/src/kbd/scanc_sun.c |
genarch/src/drivers/ns16550/ns16550.c |
endif |
## z8530 controller |
ifeq ($(CONFIG_Z8530),y) |
GENARCH_SOURCES += \ |
genarch/src/kbd/z8530.c |
genarch/src/drivers/z8530/z8530.c |
endif |
## ns16550 controller |
ifeq ($(CONFIG_NS16550),y) |
ifeq ($(CONFIG_VIA_CUDA),y) |
GENARCH_SOURCES += \ |
genarch/src/kbd/ns16550.c |
genarch/src/drivers/via-cuda/cuda.c |
endif |
ifeq ($(CONFIG_PC_KBD),y) |
GENARCH_SOURCES += \ |
genarch/src/kbrd/kbrd.c \ |
genarch/src/kbrd/scanc_pc.c |
endif |
## OpenFirmware Device Tree |
ifeq ($(CONFIG_OFW_TREE), y) |
ifeq ($(CONFIG_SUN_KBD),y) |
GENARCH_SOURCES += \ |
genarch/src/kbrd/kbrd.c \ |
genarch/src/kbrd/scanc_sun.c |
endif |
ifeq ($(CONFIG_SRLN),y) |
GENARCH_SOURCES += \ |
genarch/src/srln/srln.c |
endif |
ifeq ($(CONFIG_OFW_TREE),y) |
GENARCH_SOURCES += \ |
genarch/src/ofw/ofw_tree.c \ |
genarch/src/ofw/ebus.c \ |
genarch/src/ofw/fhc.c \ |
102,3 → 124,13 |
genarch/src/ofw/sbus.c \ |
genarch/src/ofw/upa.c |
endif |
ifeq ($(CONFIG_MULTIBOOT), y) |
GENARCH_SOURCES += \ |
genarch/src/multiboot/multiboot.c |
endif |
ifeq ($(CONFIG_EGA), y) |
GENARCH_SOURCES += \ |
genarch/src/drivers/ega/ega.c |
endif |
//branches/tracing/kernel/genarch/src/kbd/scanc_sun.c |
---|
File deleted |
//branches/tracing/kernel/genarch/src/kbd/ns16550.c |
---|
File deleted |
//branches/tracing/kernel/genarch/src/kbd/i8042.c |
---|
File deleted |
//branches/tracing/kernel/genarch/src/kbd/key.c |
---|
File deleted |
//branches/tracing/kernel/genarch/src/kbd/z8530.c |
---|
File deleted |
//branches/tracing/kernel/genarch/src/kbd/scanc_pc.c |
---|
File deleted |
//branches/tracing/kernel/genarch/src/kbrd/kbrd.c |
---|
0,0 → 1,187 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Keyboard processing. |
*/ |
#include <genarch/kbrd/kbrd.h> |
#include <genarch/kbrd/scanc.h> |
#ifdef CONFIG_PC_KBD |
#include <genarch/kbrd/scanc_pc.h> |
#endif |
#ifdef CONFIG_SUN_KBD |
#include <genarch/kbrd/scanc_sun.h> |
#endif |
#include <synch/spinlock.h> |
#include <console/chardev.h> |
#include <console/console.h> |
#include <proc/thread.h> |
#include <arch.h> |
#include <macros.h> |
#define IGNORE_CODE 0x7f |
#define KEY_RELEASE 0x80 |
#define PRESSED_SHIFT (1 << 0) |
#define PRESSED_CAPSLOCK (1 << 1) |
#define LOCKED_CAPSLOCK (1 << 0) |
static indev_operations_t kbrd_raw_ops = { |
.poll = NULL |
}; |
/** Process release of key. |
* |
* @param sc Scancode of the key being released. |
*/ |
static void key_released(kbrd_instance_t *instance, wchar_t sc) |
{ |
spinlock_lock(&instance->keylock); |
switch (sc) { |
case SC_LSHIFT: |
case SC_RSHIFT: |
instance->keyflags &= ~PRESSED_SHIFT; |
break; |
case SC_CAPSLOCK: |
instance->keyflags &= ~PRESSED_CAPSLOCK; |
if (instance->lockflags & LOCKED_CAPSLOCK) |
instance->lockflags &= ~LOCKED_CAPSLOCK; |
else |
instance->lockflags |= LOCKED_CAPSLOCK; |
break; |
default: |
break; |
} |
spinlock_unlock(&instance->keylock); |
} |
/** Process keypress. |
* |
* @param sc Scancode of the key being pressed. |
*/ |
static void key_pressed(kbrd_instance_t *instance, wchar_t sc) |
{ |
bool letter; |
bool shift; |
bool capslock; |
spinlock_lock(&instance->keylock); |
switch (sc) { |
case SC_LSHIFT: |
case SC_RSHIFT: |
instance->keyflags |= PRESSED_SHIFT; |
break; |
case SC_CAPSLOCK: |
instance->keyflags |= PRESSED_CAPSLOCK; |
break; |
case SC_SCAN_ESCAPE: |
break; |
default: |
letter = islower(sc_primary_map[sc]); |
shift = instance->keyflags & PRESSED_SHIFT; |
capslock = (instance->keyflags & PRESSED_CAPSLOCK) || |
(instance->lockflags & LOCKED_CAPSLOCK); |
if ((letter) && (capslock)) |
shift = !shift; |
if (shift) |
indev_push_character(instance->sink, sc_secondary_map[sc]); |
else |
indev_push_character(instance->sink, sc_primary_map[sc]); |
break; |
} |
spinlock_unlock(&instance->keylock); |
} |
static void kkbrd(void *arg) |
{ |
kbrd_instance_t *instance = (kbrd_instance_t *) arg; |
while (true) { |
wchar_t sc = indev_pop_character(&instance->raw); |
if (sc == IGNORE_CODE) |
continue; |
if (sc & KEY_RELEASE) |
key_released(instance, (sc ^ KEY_RELEASE) & 0x7f); |
else |
key_pressed(instance, sc & 0x7f); |
} |
} |
kbrd_instance_t *kbrd_init(void) |
{ |
kbrd_instance_t *instance |
= malloc(sizeof(kbrd_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->thread |
= thread_create(kkbrd, (void *) instance, TASK, 0, "kkbrd", false); |
if (!instance->thread) { |
free(instance); |
return NULL; |
} |
instance->sink = NULL; |
indev_initialize("kbrd", &instance->raw, &kbrd_raw_ops); |
spinlock_initialize(&instance->keylock, "instance_keylock"); |
instance->keyflags = 0; |
instance->lockflags = 0; |
} |
return instance; |
} |
indev_t *kbrd_wire(kbrd_instance_t *instance, indev_t *sink) |
{ |
ASSERT(instance); |
ASSERT(sink); |
instance->sink = sink; |
thread_ready(instance->thread); |
return &instance->raw; |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/kbrd/scanc_pc.c |
---|
0,0 → 1,221 |
/* |
* Copyright (c) 2006 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Scan codes for PC keyboards. |
*/ |
#include <genarch/kbrd/scanc.h> |
#include <typedefs.h> |
#include <string.h> |
/** Primary meaning of scancodes. */ |
wchar_t sc_primary_map[SCANCODES] = { |
U_NULL, /* 0x00 - undefined */ |
U_ESCAPE, /* 0x01 - Esc */ |
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', |
'\b', /* 0x0e - Backspace */ |
'\t', /* 0x0f - Tab */ |
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', |
'\n', /* 0x1e - Enter */ |
U_SPECIAL, /* 0x1d - Left Ctrl */ |
'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`', |
U_SPECIAL, /* 0x2a - Left Shift */ |
'\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', |
U_SPECIAL, /* 0x36 - Right Shift */ |
U_SPECIAL, /* 0x37 - Print Screen */ |
U_SPECIAL, /* 0x38 - Left Alt */ |
' ', |
U_SPECIAL, /* 0x3a - CapsLock */ |
U_SPECIAL, /* 0x3b - F1 */ |
U_SPECIAL, /* 0x3c - F2 */ |
U_SPECIAL, /* 0x3d - F3 */ |
U_SPECIAL, /* 0x3e - F4 */ |
U_SPECIAL, /* 0x3f - F5 */ |
U_SPECIAL, /* 0x40 - F6 */ |
U_SPECIAL, /* 0x41 - F7 */ |
U_SPECIAL, /* 0x42 - F8 */ |
U_SPECIAL, /* 0x43 - F9 */ |
U_SPECIAL, /* 0x44 - F10 */ |
U_SPECIAL, /* 0x45 - NumLock */ |
U_SPECIAL, /* 0x46 - ScrollLock */ |
U_HOME_ARROW, /* 0x47 - Home */ |
U_UP_ARROW, /* 0x48 - Up Arrow */ |
U_PAGE_UP, /* 0x49 - Page Up */ |
'-', |
U_LEFT_ARROW, /* 0x4b - Left Arrow */ |
'5', /* 0x4c - Numpad Center */ |
U_RIGHT_ARROW, /* 0x4d - Right Arrow */ |
'+', |
U_END_ARROW, /* 0x4f - End */ |
U_DOWN_ARROW, /* 0x50 - Down Arrow */ |
U_PAGE_DOWN, /* 0x51 - Page Down */ |
'0', /* 0x52 - Numpad Insert */ |
U_DELETE, /* 0x53 - Delete */ |
U_SPECIAL, /* 0x54 - Alt-SysRq */ |
U_SPECIAL, /* 0x55 - F11/F12/PF1/FN */ |
U_SPECIAL, /* 0x56 - unlabelled key next to LAlt */ |
U_SPECIAL, /* 0x57 - F11 */ |
U_SPECIAL, /* 0x58 - F12 */ |
U_SPECIAL, /* 0x59 */ |
U_SPECIAL, /* 0x5a */ |
U_SPECIAL, /* 0x5b */ |
U_SPECIAL, /* 0x5c */ |
U_SPECIAL, /* 0x5d */ |
U_SPECIAL, /* 0x5e */ |
U_SPECIAL, /* 0x5f */ |
U_SPECIAL, /* 0x60 */ |
U_SPECIAL, /* 0x61 */ |
U_SPECIAL, /* 0x62 */ |
U_SPECIAL, /* 0x63 */ |
U_SPECIAL, /* 0x64 */ |
U_SPECIAL, /* 0x65 */ |
U_SPECIAL, /* 0x66 */ |
U_SPECIAL, /* 0x67 */ |
U_SPECIAL, /* 0x68 */ |
U_SPECIAL, /* 0x69 */ |
U_SPECIAL, /* 0x6a */ |
U_SPECIAL, /* 0x6b */ |
U_SPECIAL, /* 0x6c */ |
U_SPECIAL, /* 0x6d */ |
U_SPECIAL, /* 0x6e */ |
U_SPECIAL, /* 0x6f */ |
U_SPECIAL, /* 0x70 */ |
U_SPECIAL, /* 0x71 */ |
U_SPECIAL, /* 0x72 */ |
U_SPECIAL, /* 0x73 */ |
U_SPECIAL, /* 0x74 */ |
U_SPECIAL, /* 0x75 */ |
U_SPECIAL, /* 0x76 */ |
U_SPECIAL, /* 0x77 */ |
U_SPECIAL, /* 0x78 */ |
U_SPECIAL, /* 0x79 */ |
U_SPECIAL, /* 0x7a */ |
U_SPECIAL, /* 0x7b */ |
U_SPECIAL, /* 0x7c */ |
U_SPECIAL, /* 0x7d */ |
U_SPECIAL, /* 0x7e */ |
U_SPECIAL /* 0x7f */ |
}; |
/** Secondary meaning of scancodes. */ |
wchar_t sc_secondary_map[SCANCODES] = { |
U_NULL, /* 0x00 - undefined */ |
U_ESCAPE, /* 0x01 - Esc */ |
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', |
'\b', /* 0x0e - Backspace */ |
'\t', /* 0x0f - Tab */ |
'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', |
'\n', /* 0x1e - Enter */ |
U_SPECIAL, /* 0x1d - Left Ctrl */ |
'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '"', '~', |
U_SPECIAL, /* 0x2a - Left Shift */ |
'|', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', |
U_SPECIAL, /* 0x36 - Right Shift */ |
U_SPECIAL, /* 0x37 - Print Screen */ |
U_SPECIAL, /* 0x38 - Left Alt */ |
' ', |
U_SPECIAL, /* 0x3a - CapsLock */ |
U_SPECIAL, /* 0x3b - F1 */ |
U_SPECIAL, /* 0x3c - F2 */ |
U_SPECIAL, /* 0x3d - F3 */ |
U_SPECIAL, /* 0x3e - F4 */ |
U_SPECIAL, /* 0x3f - F5 */ |
U_SPECIAL, /* 0x40 - F6 */ |
U_SPECIAL, /* 0x41 - F7 */ |
U_SPECIAL, /* 0x42 - F8 */ |
U_SPECIAL, /* 0x43 - F9 */ |
U_SPECIAL, /* 0x44 - F10 */ |
U_SPECIAL, /* 0x45 - NumLock */ |
U_SPECIAL, /* 0x46 - ScrollLock */ |
U_HOME_ARROW, /* 0x47 - Home */ |
U_UP_ARROW, /* 0x48 - Up Arrow */ |
U_PAGE_UP, /* 0x49 - Page Up */ |
'-', |
U_LEFT_ARROW, /* 0x4b - Left Arrow */ |
'5', /* 0x4c - Numpad Center */ |
U_RIGHT_ARROW, /* 0x4d - Right Arrow */ |
'+', |
U_END_ARROW, /* 0x4f - End */ |
U_DOWN_ARROW, /* 0x50 - Down Arrow */ |
U_PAGE_DOWN, /* 0x51 - Page Down */ |
'0', /* 0x52 - Numpad Insert */ |
U_DELETE, /* 0x53 - Delete */ |
U_SPECIAL, /* 0x54 - Alt-SysRq */ |
U_SPECIAL, /* 0x55 - F11/F12/PF1/FN */ |
U_SPECIAL, /* 0x56 - unlabelled key next to LAlt */ |
U_SPECIAL, /* 0x57 - F11 */ |
U_SPECIAL, /* 0x58 - F12 */ |
U_SPECIAL, /* 0x59 */ |
U_SPECIAL, /* 0x5a */ |
U_SPECIAL, /* 0x5b */ |
U_SPECIAL, /* 0x5c */ |
U_SPECIAL, /* 0x5d */ |
U_SPECIAL, /* 0x5e */ |
U_SPECIAL, /* 0x5f */ |
U_SPECIAL, /* 0x60 */ |
U_SPECIAL, /* 0x61 */ |
U_SPECIAL, /* 0x62 */ |
U_SPECIAL, /* 0x63 */ |
U_SPECIAL, /* 0x64 */ |
U_SPECIAL, /* 0x65 */ |
U_SPECIAL, /* 0x66 */ |
U_SPECIAL, /* 0x67 */ |
U_SPECIAL, /* 0x68 */ |
U_SPECIAL, /* 0x69 */ |
U_SPECIAL, /* 0x6a */ |
U_SPECIAL, /* 0x6b */ |
U_SPECIAL, /* 0x6c */ |
U_SPECIAL, /* 0x6d */ |
U_SPECIAL, /* 0x6e */ |
U_SPECIAL, /* 0x6f */ |
U_SPECIAL, /* 0x70 */ |
U_SPECIAL, /* 0x71 */ |
U_SPECIAL, /* 0x72 */ |
U_SPECIAL, /* 0x73 */ |
U_SPECIAL, /* 0x74 */ |
U_SPECIAL, /* 0x75 */ |
U_SPECIAL, /* 0x76 */ |
U_SPECIAL, /* 0x77 */ |
U_SPECIAL, /* 0x78 */ |
U_SPECIAL, /* 0x79 */ |
U_SPECIAL, /* 0x7a */ |
U_SPECIAL, /* 0x7b */ |
U_SPECIAL, /* 0x7c */ |
U_SPECIAL, /* 0x7d */ |
U_SPECIAL, /* 0x7e */ |
U_SPECIAL /* 0x7f */ |
}; |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/kbrd/scanc_sun.c |
---|
0,0 → 1,306 |
/* |
* Copyright (c) 2006 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Scan codes for Sun keyboards. |
*/ |
#include <genarch/kbrd/scanc.h> |
#include <typedefs.h> |
#include <string.h> |
/** Primary meaning of scancodes. */ |
wchar_t sc_primary_map[SCANCODES] = { |
[0x00] = U_SPECIAL, |
[0x01] = U_SPECIAL, |
[0x02] = U_SPECIAL, |
[0x03] = U_SPECIAL, |
[0x04] = U_SPECIAL, |
[0x05] = U_SPECIAL, /* F1 */ |
[0x06] = U_SPECIAL, /* F2 */ |
[0x07] = U_SPECIAL, /* F10 */ |
[0x08] = U_SPECIAL, /* F3 */ |
[0x09] = U_SPECIAL, /* F11 */ |
[0x0a] = U_SPECIAL, /* F4 */ |
[0x0b] = U_SPECIAL, /* F12 */ |
[0x0c] = U_SPECIAL, /* F5 */ |
[0x0d] = U_SPECIAL, /* Right Alt */ |
[0x0e] = U_SPECIAL, /* F6 */ |
[0x0f] = U_SPECIAL, |
[0x10] = U_SPECIAL, /* F7 */ |
[0x11] = U_SPECIAL, /* F8 */ |
[0x12] = U_SPECIAL, /* F9 */ |
[0x13] = U_SPECIAL, /* Left Alt */ |
[0x14] = U_UP_ARROW, /* Up Arrow */ |
[0x15] = U_SPECIAL, /* Pause */ |
[0x16] = U_SPECIAL, |
[0x17] = U_SPECIAL, /* Scroll Lock */ |
[0x18] = U_LEFT_ARROW, /* Left Arrow */ |
[0x19] = U_SPECIAL, |
[0x1a] = U_SPECIAL, |
[0x1b] = U_DOWN_ARROW, /* Down Arrow */ |
[0x1c] = U_RIGHT_ARROW, /* Right Arrow */ |
[0x1d] = U_ESCAPE, /* Esc */ |
[0x1e] = '1', |
[0x1f] = '2', |
[0x20] = '3', |
[0x21] = '4', |
[0x22] = '5', |
[0x23] = '6', |
[0x24] = '7', |
[0x25] = '8', |
[0x26] = '9', |
[0x27] = '0', |
[0x28] = '-', |
[0x29] = '=', |
[0x2a] = '`', |
[0x2b] = '\b', /* Backspace */ |
[0x2c] = U_SPECIAL, /* Insert */ |
[0x2d] = U_SPECIAL, |
[0x2e] = '/', /* Numpad / */ |
[0x2f] = '*', /* Numpad * */ |
[0x30] = U_SPECIAL, |
[0x31] = U_SPECIAL, |
[0x32] = '.', /* Numpad . */ |
[0x33] = U_SPECIAL, |
[0x34] = U_HOME_ARROW, /* Home */ |
[0x35] = '\t', /* Tab */ |
[0x36] = 'q', |
[0x37] = 'w', |
[0x38] = 'e', |
[0x39] = 'r', |
[0x3a] = 't', |
[0x3b] = 'y', |
[0x3c] = 'u', |
[0x3d] = 'i', |
[0x3e] = 'o', |
[0x3f] = 'p', |
[0x40] = '[', |
[0x41] = ']', |
[0x42] = U_DELETE, /* Delete */ |
[0x43] = U_SPECIAL, |
[0x44] = '7', /* Numpad 7 */ |
[0x45] = '8', /* Numpad 8 */ |
[0x46] = '9', /* Numpad 9 */ |
[0x47] = '-', /* Numpad - */ |
[0x48] = U_SPECIAL, |
[0x49] = U_SPECIAL, |
[0x4a] = U_END_ARROW, /* End */ |
[0x4b] = U_SPECIAL, |
[0x4c] = U_SPECIAL, /* Control */ |
[0x4d] = 'a', |
[0x4e] = 's', |
[0x4f] = 'd', |
[0x50] = 'f', |
[0x51] = 'g', |
[0x52] = 'h', |
[0x53] = 'j', |
[0x54] = 'k', |
[0x55] = 'l', |
[0x56] = ';', |
[0x57] = '\'', |
[0x58] = '\\', |
[0x59] = '\n', /* Enter */ |
[0x5a] = '\n', /* Numpad Enter */ |
[0x5b] = '4', /* Numpad 4 */ |
[0x5c] = '5', /* Numpad 5 */ |
[0x5d] = '6', /* Numpad 6 */ |
[0x5e] = '0', /* Numpad 0 */ |
[0x5f] = U_SPECIAL, |
[0x60] = U_PAGE_UP, /* Page Up */ |
[0x61] = U_SPECIAL, |
[0x62] = U_SPECIAL, /* NumLock */ |
[0x63] = U_SPECIAL, /* Left Shift */ |
[0x64] = 'z', |
[0x65] = 'x', |
[0x66] = 'c', |
[0x67] = 'v', |
[0x68] = 'b', |
[0x69] = 'n', |
[0x6a] = 'm', |
[0x6b] = ',', |
[0x6c] = '.', |
[0x6d] = '/', |
[0x6e] = U_SPECIAL, /* Right Shift */ |
[0x6f] = U_SPECIAL, |
[0x70] = '1', /* Numpad 1 */ |
[0x71] = '2', /* Numpad 2 */ |
[0x72] = '3', /* Numpad 3 */ |
[0x73] = U_SPECIAL, |
[0x74] = U_SPECIAL, |
[0x75] = U_SPECIAL, |
[0x76] = U_SPECIAL, |
[0x77] = U_SPECIAL, /* CapsLock */ |
[0x78] = U_SPECIAL, |
[0x79] = ' ', |
[0x7a] = U_SPECIAL, |
[0x7b] = U_PAGE_DOWN, /* Page Down */ |
[0x7c] = U_SPECIAL, |
[0x7d] = '+', /* Numpad + */ |
[0x7e] = U_SPECIAL, |
[0x7f] = U_SPECIAL |
}; |
/** Secondary meaning of scancodes. */ |
wchar_t sc_secondary_map[SCANCODES] = { |
[0x00] = U_SPECIAL, |
[0x01] = U_SPECIAL, |
[0x02] = U_SPECIAL, |
[0x03] = U_SPECIAL, |
[0x04] = U_SPECIAL, |
[0x05] = U_SPECIAL, /* F1 */ |
[0x06] = U_SPECIAL, /* F2 */ |
[0x07] = U_SPECIAL, /* F10 */ |
[0x08] = U_SPECIAL, /* F3 */ |
[0x09] = U_SPECIAL, /* F11 */ |
[0x0a] = U_SPECIAL, /* F4 */ |
[0x0b] = U_SPECIAL, /* F12 */ |
[0x0c] = U_SPECIAL, /* F5 */ |
[0x0d] = U_SPECIAL, /* Right Alt */ |
[0x0e] = U_SPECIAL, /* F6 */ |
[0x0f] = U_SPECIAL, |
[0x10] = U_SPECIAL, /* F7 */ |
[0x11] = U_SPECIAL, /* F8 */ |
[0x12] = U_SPECIAL, /* F9 */ |
[0x13] = U_SPECIAL, /* Left Alt */ |
[0x14] = U_UP_ARROW, /* Up Arrow */ |
[0x15] = U_SPECIAL, /* Pause */ |
[0x16] = U_SPECIAL, |
[0x17] = U_SPECIAL, /* Scroll Lock */ |
[0x18] = U_LEFT_ARROW, /* Left Arrow */ |
[0x19] = U_SPECIAL, |
[0x1a] = U_SPECIAL, |
[0x1b] = U_DOWN_ARROW, /* Down Arrow */ |
[0x1c] = U_RIGHT_ARROW, /* Right Arrow */ |
[0x1d] = U_ESCAPE, /* Esc */ |
[0x1e] = '!', |
[0x1f] = '@', |
[0x20] = '#', |
[0x21] = '$', |
[0x22] = '%', |
[0x23] = '^', |
[0x24] = '&', |
[0x25] = '*', |
[0x26] = '(', |
[0x27] = ')', |
[0x28] = '_', |
[0x29] = '+', |
[0x2a] = '~', |
[0x2b] = '\b', /* Backspace */ |
[0x2c] = U_SPECIAL, /* Insert */ |
[0x2d] = U_SPECIAL, |
[0x2e] = '/', /* Numpad / */ |
[0x2f] = '*', /* Numpad * */ |
[0x30] = U_SPECIAL, |
[0x31] = U_SPECIAL, |
[0x32] = '.', /* Numpad . */ |
[0x33] = U_SPECIAL, |
[0x34] = U_HOME_ARROW, /* Home */ |
[0x35] = '\t', /* Tab */ |
[0x36] = 'Q', |
[0x37] = 'W', |
[0x38] = 'E', |
[0x39] = 'R', |
[0x3a] = 'T', |
[0x3b] = 'Y', |
[0x3c] = 'U', |
[0x3d] = 'I', |
[0x3e] = 'O', |
[0x3f] = 'P', |
[0x40] = '{', |
[0x41] = '}', |
[0x42] = U_DELETE, /* Delete */ |
[0x43] = U_SPECIAL, |
[0x44] = '7', /* Numpad 7 */ |
[0x45] = '8', /* Numpad 8 */ |
[0x46] = '9', /* Numpad 9 */ |
[0x47] = '-', /* Numpad - */ |
[0x48] = U_SPECIAL, |
[0x49] = U_SPECIAL, |
[0x4a] = U_END_ARROW, /* End */ |
[0x4b] = U_SPECIAL, |
[0x4c] = U_SPECIAL, /* Control */ |
[0x4d] = 'A', |
[0x4e] = 'S', |
[0x4f] = 'D', |
[0x50] = 'F', |
[0x51] = 'G', |
[0x52] = 'H', |
[0x53] = 'J', |
[0x54] = 'K', |
[0x55] = 'L', |
[0x56] = ':', |
[0x57] = '"', |
[0x58] = '|', |
[0x59] = '\n', /* Enter */ |
[0x5a] = '\n', /* Numpad Enter */ |
[0x5b] = '4', /* Numpad 4 */ |
[0x5c] = '5', /* Numpad 5 */ |
[0x5d] = '6', /* Numpad 6 */ |
[0x5e] = '0', /* Numpad 0 */ |
[0x5f] = U_SPECIAL, |
[0x60] = U_PAGE_UP, /* Page Up */ |
[0x61] = U_SPECIAL, |
[0x62] = U_SPECIAL, /* NumLock */ |
[0x63] = U_SPECIAL, /* Left Shift */ |
[0x64] = 'Z', |
[0x65] = 'X', |
[0x66] = 'C', |
[0x67] = 'V', |
[0x68] = 'B', |
[0x69] = 'N', |
[0x6a] = 'M', |
[0x6b] = '<', |
[0x6c] = '>', |
[0x6d] = '?', |
[0x6e] = U_SPECIAL, /* Right Shift */ |
[0x6f] = U_SPECIAL, |
[0x70] = '1', /* Numpad 1 */ |
[0x71] = '2', /* Numpad 2 */ |
[0x72] = '3', /* Numpad 3 */ |
[0x73] = U_SPECIAL, |
[0x74] = U_SPECIAL, |
[0x75] = U_SPECIAL, |
[0x76] = U_SPECIAL, |
[0x77] = U_SPECIAL, /* CapsLock */ |
[0x78] = U_SPECIAL, |
[0x79] = ' ', |
[0x7a] = U_SPECIAL, |
[0x7b] = U_PAGE_DOWN, /* Page Down */ |
[0x7c] = U_SPECIAL, |
[0x7d] = '+', /* Numpad + */ |
[0x7e] = U_SPECIAL, |
[0x7f] = U_SPECIAL |
}; |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/kbrd |
---|
Property changes: |
Added: svn:mergeinfo |
//branches/tracing/kernel/genarch/src/fb/helenos.xbm |
---|
File deleted |
//branches/tracing/kernel/genarch/src/fb/logo-196x66.c |
---|
0,0 → 1,13110 |
/* |
* Copyright (c) 2008 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#include <genarch/fb/logo-196x66.h> |
uint32_t fb_logo[LOGO_WIDTH * LOGO_HEIGHT] = { |
/* Scanline 0 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 1 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 2 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 3 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xf9f9f8, |
0xf5f3f1, |
0xf3f1ee, |
0xf3f2ef, |
0xf7f7f6, |
0xfbfbfb, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 4 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefd, |
0xf9f9f8, |
0xf3f1ed, |
0xeeeae4, |
0xece8df, |
0xebe6de, |
0xeae5dd, |
0xeae5dd, |
0xeae5de, |
0xeae8e4, |
0xf1f1f0, |
0xfbfbfb, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 5 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefd, |
0xf9f9f8, |
0xf4f2ef, |
0xefebe5, |
0xf0ece5, |
0xeeeae4, |
0xe3e0db, |
0xdfdcd8, |
0xe2e0db, |
0xeeebe6, |
0xeeebe5, |
0xeae5dd, |
0xe8e4db, |
0xe5e1db, |
0xe9e9e8, |
0xfafafa, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 6 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefd, |
0xfaf9f9, |
0xf4f3ef, |
0xefece6, |
0xf0ece5, |
0xeeebe5, |
0xdfdcd7, |
0xc6c4bd, |
0xbebcb5, |
0xcfcdc8, |
0xd3d2cd, |
0xd1cfca, |
0xc0beb7, |
0xcccac3, |
0xeae7e3, |
0xe9e5dd, |
0xe7e3da, |
0xdedbd8, |
0xe8e8e7, |
0xfbfbfb, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 7 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xfafafa, |
0xf5f4f0, |
0xf1eee8, |
0xf0ece4, |
0xf0ede7, |
0xe1ded9, |
0xc9c7c1, |
0xbebcb4, |
0xd1cfca, |
0xecebe8, |
0xf9f9f7, |
0xfaf9f7, |
0xf8f6f4, |
0xf7f5f2, |
0xf4f3f1, |
0xdcdad6, |
0xc2c0b9, |
0xe6e4de, |
0xe5e2dc, |
0xe2ddd8, |
0xd7d5d4, |
0xf2f2f1, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 8 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xfbfbfb, |
0xf6f5f2, |
0xf1eee9, |
0xf1ede5, |
0xf1ede6, |
0xe4e1db, |
0xcecbc4, |
0xbebcb5, |
0xcfcdc8, |
0xe7e6e4, |
0xf8f8f6, |
0xfafaf8, |
0xf9f7f5, |
0xf7f5f2, |
0xf5f3f0, |
0xf5f3f0, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xd9d7d2, |
0xc8c5bf, |
0xe9e5e0, |
0xe4dfd8, |
0xd5d2ce, |
0xe1e1e1, |
0xfbfbfb, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 9 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xfbfbfb, |
0xf7f6f3, |
0xf2efea, |
0xf1ede6, |
0xf1eee7, |
0xe5e3de, |
0xd0cec7, |
0xbfbdb5, |
0xcdcbc5, |
0xe4e3e0, |
0xf7f7f6, |
0xfbfaf9, |
0xf9f8f6, |
0xf8f6f3, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf1efeb, |
0xc5c2bb, |
0xe2dfdb, |
0xe5e0da, |
0xded9d3, |
0xd3d2d1, |
0xf4f4f4, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 10 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xfcfcfb, |
0xf8f6f4, |
0xf3f0eb, |
0xf1eee7, |
0xf2efe8, |
0xe8e5df, |
0xd3d1cb, |
0xc0beb6, |
0xcbc9c3, |
0xe1e0dc, |
0xf5f4f3, |
0xfbfaf8, |
0xfaf9f7, |
0xf8f7f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf2f0ec, |
0xf2efec, |
0xdbd9d4, |
0xcdcbc4, |
0xe8e4de, |
0xe3ded7, |
0xd0cecb, |
0xe7e7e6, |
0xfdfdfc, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 11 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xfcfcfb, |
0xf8f7f4, |
0xf4f1ed, |
0xf2eee8, |
0xf3efe9, |
0xeae7e1, |
0xd6d4cd, |
0xc3c1b9, |
0xcac8c2, |
0xdddcd8, |
0xf3f2f1, |
0xfafaf8, |
0xfbfaf7, |
0xf9f7f5, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf6f4f1, |
0xf5f3f0, |
0xf5f3f0, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf3f1ed, |
0xf2f0ec, |
0xf1efeb, |
0xf1eeeb, |
0xece9e5, |
0xc3c1ba, |
0xe5e3de, |
0xe3ded7, |
0xd9d5d0, |
0xd6d5d5, |
0xf7f7f7, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 12 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xfcfcfc, |
0xf9f8f5, |
0xf5f2ee, |
0xf3efe8, |
0xf4f0e9, |
0xece9e3, |
0xd9d7d1, |
0xc4c2bb, |
0xc8c6c0, |
0xd9d8d4, |
0xf1f0ef, |
0xfaf9f8, |
0xfbfaf8, |
0xfaf8f5, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf2f0ec, |
0xf2efec, |
0xf1eeeb, |
0xf1eeeb, |
0xf0edea, |
0xf0ede9, |
0xd2cfc9, |
0xd3d2cc, |
0xe4e0db, |
0xded9d3, |
0xcfccca, |
0xededec, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 13 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xf9f9f7, |
0xf5f3f0, |
0xf3efe8, |
0xf4f0e9, |
0xeeeae5, |
0xdddad4, |
0xc7c4bd, |
0xc7c6bf, |
0xd7d6d1, |
0xeeedeb, |
0xf9f9f8, |
0xfcfbfa, |
0xfaf9f6, |
0xf9f7f4, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf5f3f0, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf3f1ed, |
0xf2f0ec, |
0xf1efeb, |
0xf1eeeb, |
0xf1eeea, |
0xf0ede9, |
0xefece8, |
0xefece8, |
0xe4e2dd, |
0xc4c2bb, |
0xe5e2de, |
0xdfdad3, |
0xd3d0cb, |
0xdbdbdb, |
0xfafafa, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 14 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xfaf9f7, |
0xf6f4f0, |
0xf3f0e9, |
0xf4f0ea, |
0xefece6, |
0xdfddd7, |
0xcbc8c1, |
0xc7c5be, |
0xd4d3ce, |
0xebebe8, |
0xf8f8f6, |
0xfcfcfa, |
0xfbfaf7, |
0xfaf9f6, |
0xf9f7f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ed, |
0xf2f0ec, |
0xf2efec, |
0xf1eeeb, |
0xf1eeeb, |
0xf0edea, |
0xf0ede9, |
0xefece8, |
0xefece8, |
0xeeebe7, |
0xedeae6, |
0xc8c6bf, |
0xdcdad5, |
0xe1dcd6, |
0xdbd7d0, |
0xd0cfcd, |
0xf1f0f0, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 15 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xfafaf9, |
0xf7f5f1, |
0xf4f1ea, |
0xf5f1ea, |
0xf1ede7, |
0xe2e0da, |
0xcccac3, |
0xc6c5be, |
0xd1cfca, |
0xe9e8e6, |
0xf8f7f6, |
0xfcfcfb, |
0xfbfaf8, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f8f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf2f0ed, |
0xf2f0ec, |
0xf2efec, |
0xf1eeeb, |
0xf1eeeb, |
0xf0edea, |
0xf0ede9, |
0xefece8, |
0xeeebe7, |
0xeeebe7, |
0xedeae6, |
0xedeae5, |
0xdedbd5, |
0xc7c6bf, |
0xe5e2dd, |
0xded9d3, |
0xcfcdc9, |
0xe2e2e2, |
0xfbfbfb, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 16 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xfbfbf9, |
0xf6f3ed, |
0xf4f1e9, |
0xf4f1eb, |
0xe7e4df, |
0xcfcdc6, |
0xc7c5be, |
0xceccc7, |
0xe6e5e2, |
0xf7f6f5, |
0xfdfcfb, |
0xfcfbf9, |
0xfaf9f7, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f8f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xe0dedb, |
0xb4b2b1, |
0xb6b5b4, |
0xe0dddb, |
0xf1eeeb, |
0xf1eeea, |
0xf0ede9, |
0xefece8, |
0xefece8, |
0xeeebe7, |
0xeeebe7, |
0xedeae6, |
0xece9e5, |
0xece9e4, |
0xe8e6e1, |
0xc3c1ba, |
0xdfddd9, |
0xddd9d3, |
0xd6d3cd, |
0xd3d2d1, |
0xf5f5f4, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 17 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfafaf9, |
0xf4f0e8, |
0xf5f1ea, |
0xf3f1ed, |
0xcbc9c3, |
0xcac8c2, |
0xe3e2df, |
0xf5f4f3, |
0xfdfcfb, |
0xfdfbfa, |
0xfcfaf8, |
0xfbf9f7, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f8f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xe1dedc, |
0x7f7e7e, |
0x706f6f, |
0x757374, |
0x8c8c8b, |
0xe1dedb, |
0xf0ede9, |
0xefece8, |
0xefece8, |
0xeeebe7, |
0xedeae6, |
0xedeae5, |
0xece9e4, |
0xebe9e4, |
0xeae8e3, |
0xeae8e3, |
0xd4d2cb, |
0xcdcbc5, |
0xe1ded8, |
0xdad6cf, |
0xcdcbc8, |
0xe8e8e8, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 18 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfcfcfc, |
0xf4f0eb, |
0xf4f0e7, |
0xf8f6f3, |
0xc6c4bd, |
0xdcdad7, |
0xfbfbfa, |
0xfdfcfb, |
0xfcfaf8, |
0xfcfaf8, |
0xfbfaf7, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f7f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf3f1ed, |
0xb3b1af, |
0x716f70, |
0x7c7b7b, |
0x898989, |
0x8f8e8e, |
0xbdbbba, |
0xeeebe7, |
0xeeebe7, |
0xeeebe7, |
0xedeae6, |
0xece9e5, |
0xece9e4, |
0xebe8e3, |
0xeae8e3, |
0xe9e7e2, |
0xe8e6e1, |
0xe2e0db, |
0xc1bfb8, |
0xe2dfdb, |
0xdad7d0, |
0xd2d0cb, |
0xd7d7d7, |
0xf8f8f7, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 19 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf0f0ef, |
0xf1ede4, |
0xf8f6f0, |
0xdbd9d4, |
0xd3d2cd, |
0xfdfcfb, |
0xfcfbf9, |
0xfcfaf8, |
0xfcfaf8, |
0xfbfaf7, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f8f5, |
0xf9f7f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf2f0ed, |
0xf2f0ec, |
0xaeacab, |
0x7a7979, |
0x8f8e8e, |
0xa3a2a2, |
0xabaaab, |
0xafaead, |
0xe8e5e1, |
0xeeebe7, |
0xedeae6, |
0xece9e4, |
0xebe8e4, |
0xeae8e3, |
0xe9e7e2, |
0xe9e7e2, |
0xe8e6e1, |
0xe7e5e0, |
0xe7e4df, |
0xcac8c1, |
0xd4d2cc, |
0xdcd9d3, |
0xd6d3ce, |
0xcdccca, |
0xeeeeed, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 20 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefd, |
0xe1e0dd, |
0xf0ebe2, |
0xfbfaf7, |
0xc3c1ba, |
0xf3f2f0, |
0xfcfbf9, |
0xfcfaf8, |
0xfcfaf8, |
0xfbf9f7, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f8f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf7f5f2, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf3f1ee, |
0xf2f0ec, |
0xf2f0ec, |
0xf1eeeb, |
0xd5d3d1, |
0x838282, |
0x9d9c9c, |
0xb4b3b3, |
0xbdbcbd, |
0xb6b5b5, |
0xd7d4d1, |
0xedeae6, |
0xece9e5, |
0xeae8e3, |
0xeae8e3, |
0xe9e7e2, |
0xe9e7e2, |
0xe7e5e0, |
0xe7e4df, |
0xe6e3de, |
0xe5e2dd, |
0xdbd8d3, |
0xc3c0ba, |
0xe1ded9, |
0xd8d4ce, |
0xcdcac6, |
0xdedddd, |
0xfafafa, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 21 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfcfcfc, |
0xd2d1cd, |
0xefeae1, |
0xfcfaf8, |
0xc3c1ba, |
0xf9f8f7, |
0xfcfaf8, |
0xfcfaf8, |
0xfbf9f7, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f7f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf0eeeb, |
0xebe9e6, |
0xf3f1ee, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf3f1ed, |
0xf2f0ec, |
0xf2efec, |
0xf1eeeb, |
0xf1eeea, |
0xefece9, |
0x9c9b9a, |
0xa1a0a0, |
0xb9b7b8, |
0xc2c0c1, |
0xbfbdbe, |
0xc2c1c0, |
0xe9e6e2, |
0xeae8e3, |
0xe9e7e2, |
0xe9e7e2, |
0xe8e6e1, |
0xe7e5e0, |
0xe7e4df, |
0xe6e3de, |
0xe5e2dd, |
0xe4e1dc, |
0xe3dfda, |
0xc4c1ba, |
0xdbd9d4, |
0xd8d5ce, |
0xd4d0cb, |
0xcfcecd, |
0xf2f2f2, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xe3e3e3, |
0xbbbbbb, |
0x9d9d9d, |
0x989898, |
0xa4a4a4, |
0xbfbfbf, |
0xeaeaea, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf1f1f1, |
0xc4c4c4, |
0xa6a6a6, |
0x989898, |
0xa2a2a2, |
0xc5c5c5, |
0xf1f0f0, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 22 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfbfbfb, |
0xb9b8b6, |
0xeae5dd, |
0xf9f6f3, |
0xc4c2bb, |
0xf2f2f0, |
0xfbfaf7, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f8f5, |
0xf9f7f5, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf6f4f1, |
0xd2d0ce, |
0x908f8e, |
0x888686, |
0xb3b1b0, |
0xedebe8, |
0xf3f1ee, |
0xf3f1ee, |
0xf3f1ed, |
0xf2f0ec, |
0xf2efec, |
0xf1eeeb, |
0xf0edea, |
0xf0ede9, |
0xefece8, |
0xc6c4c2, |
0x9c9b9b, |
0xb4b3b3, |
0xc1bfc0, |
0xc1c0c0, |
0xbab9b9, |
0xdeddd9, |
0xe9e7e2, |
0xe9e7e2, |
0xe7e5e0, |
0xe7e4df, |
0xe7e4df, |
0xe5e2dd, |
0xe4e1dc, |
0xe4e0db, |
0xe4e0db, |
0xe3dfda, |
0xd4d1cb, |
0xc6c4bd, |
0xdfdcd7, |
0xd7d3cc, |
0xcbc9c6, |
0xe4e4e4, |
0xfcfcfc, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xcbcbcb, |
0x5f5f5f, |
0x343434, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x363636, |
0x737272, |
0xdedede, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf2f1f1, |
0x8e8e8e, |
0x3b3b3b, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x393939, |
0x8a8a8a, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 23 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfbfbfb, |
0xbbbbba, |
0xc8c4bd, |
0xf4f1eb, |
0xd6d4cf, |
0xdbd9d5, |
0xfaf9f6, |
0xfaf9f6, |
0xfaf9f6, |
0xf9f8f5, |
0xf9f7f4, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf7f5f3, |
0xf7f5f2, |
0xf6f4f1, |
0xe4e2df, |
0x7f7e7e, |
0x717071, |
0x7a7878, |
0x807f7f, |
0xbbbab9, |
0xf3f1ee, |
0xf2f0ec, |
0xf2f0ec, |
0xf1eeeb, |
0xf1eeeb, |
0xf0edea, |
0xf0ede9, |
0xefece8, |
0xefece8, |
0xe7e4e0, |
0x999897, |
0xacabab, |
0xbebcbd, |
0xc3c1c2, |
0xbebcbd, |
0xc9c8c7, |
0xe7e5e0, |
0xe7e5e0, |
0xe7e4df, |
0xe6e3de, |
0xe5e2dd, |
0xe4e1dc, |
0xe4e0db, |
0xe3dfda, |
0xe3dfda, |
0xe2ded9, |
0xdedad5, |
0xc0beb6, |
0xdedad5, |
0xd6d2cb, |
0xd1cec8, |
0xd2d2d2, |
0xf6f6f6, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb0afaf, |
0x383838, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x414141, |
0xc8c8c8, |
0xffffff, |
0xefefef, |
0x626262, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x575656, |
0xefefef, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 24 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfc, |
0xd9d9d9, |
0x9a9893, |
0xede9e0, |
0xefede8, |
0xc3c1bb, |
0xf7f6f3, |
0xfaf9f6, |
0xf9f8f5, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf5f3f0, |
0xcac9c7, |
0x717071, |
0x7e7e7e, |
0x908f8f, |
0x9a9998, |
0xa5a4a3, |
0xebeae6, |
0xf2efec, |
0xf1eeeb, |
0xf0edea, |
0xf0ede9, |
0xefece8, |
0xefece8, |
0xeeebe7, |
0xeeebe7, |
0xedeae6, |
0xb5b3b1, |
0xa2a1a1, |
0xb8b7b7, |
0xc2c0c1, |
0xc1bfc0, |
0xbcbaba, |
0xe1dfda, |
0xe7e4df, |
0xe6e3de, |
0xe5e1dc, |
0xe4e0db, |
0xe4e0db, |
0xe3dfda, |
0xe2deda, |
0xe1ddd8, |
0xe1ddd8, |
0xe0dbd6, |
0xcbc8c1, |
0xceccc7, |
0xdad7d1, |
0xd4d0ca, |
0xcbc9c7, |
0xeaeae9, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xd6d6d6, |
0x3b3b3b, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x555555, |
0xececec, |
0x919191, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x7e7e7e, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 25 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xe9e9e9, |
0x989694, |
0xd8d4cc, |
0xf5f3ed, |
0xc8c6bf, |
0xe8e6e2, |
0xf9f7f5, |
0xf9f7f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f4, |
0xf7f5f3, |
0xf7f5f2, |
0xf6f4f1, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xd8d6d4, |
0x7d7d7c, |
0x8f8e8e, |
0xa6a5a6, |
0xb3b2b3, |
0xb1b0b0, |
0xd7d5d2, |
0xf1eeeb, |
0xf0edea, |
0xf0ede9, |
0xefece8, |
0xefece8, |
0xeeebe7, |
0xedeae6, |
0xedeae6, |
0xece9e5, |
0xd3d0cd, |
0x999897, |
0xb1afb0, |
0xc0bebf, |
0xc3c1c2, |
0xbbbabb, |
0xd2d0cc, |
0xe5e2dd, |
0xe4e1dc, |
0xe4e0db, |
0xe3dfda, |
0xe3dfda, |
0xe2ded9, |
0xe1ddd8, |
0xe0dcd7, |
0xe0dbd6, |
0xdfdad5, |
0xd9d5cf, |
0xbfbdb6, |
0xdedcd8, |
0xd4d0ca, |
0xcccac6, |
0xd9d8d8, |
0xf9f9f9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7a7a7a, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x494949, |
0x666565, |
0x3f3f3f, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x939392, |
0x4e4e4e, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x3f3f3f, |
0x686868, |
0x4c4c4c, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x343434, |
0xe8e7e7, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 26 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf5f5f4, |
0xbcbbba, |
0xaaa7a2, |
0xbebcb6, |
0xa19f9c, |
0xa5a4a1, |
0xf4f2f0, |
0xf8f6f4, |
0xf8f6f4, |
0xf8f6f3, |
0xf7f5f2, |
0xf7f5f2, |
0xf6f4f1, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xedebe8, |
0x9c9b9a, |
0x999898, |
0xb3b1b2, |
0xc0bebf, |
0xbebcbd, |
0xc2c0c0, |
0xefece9, |
0xefece8, |
0xefece8, |
0xeeebe7, |
0xeeebe7, |
0xedeae6, |
0xedeae6, |
0xe4e1de, |
0xc7c5c2, |
0x9b9a99, |
0x8d8c8c, |
0xa9a8a8, |
0xbdbbbb, |
0xc3c1c2, |
0xc0bebe, |
0xc1bfbe, |
0xe1ded9, |
0xe4e0db, |
0xe3dfda, |
0xe2deda, |
0xe1ddd9, |
0xe1ddd8, |
0xe0dbd6, |
0xe0dbd6, |
0xdedad5, |
0xdddad5, |
0xdcd8d3, |
0xc4c1bb, |
0xd5d3ce, |
0xd6d2cc, |
0xd2cec9, |
0xcbcac9, |
0xefefef, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf6f6f6, |
0x424242, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x565656, |
0xebebeb, |
0xffffff, |
0xd4d4d4, |
0x414141, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x414141, |
0x343434, |
0x323232, |
0x323232, |
0x323232, |
0x434343, |
0xe1e1e0, |
0xffffff, |
0xf1f1f1, |
0x575757, |
0x323232, |
0x323232, |
0x323232, |
0x333333, |
0xaeaeae, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 27 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfcfcfc, |
0xe0e0e0, |
0x8e8c89, |
0x696865, |
0x343434, |
0x343434, |
0xc8c7c7, |
0xf8f6f4, |
0xf7f5f3, |
0xf7f5f2, |
0xf6f4f1, |
0xf6f4f1, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ed, |
0xc4c2c1, |
0x989797, |
0xb3b1b2, |
0xc1bfc0, |
0xc2c0c1, |
0xbcbabb, |
0xe1dfdc, |
0xeeebe7, |
0xeeebe7, |
0xedeae6, |
0xebe8e4, |
0xdedbd8, |
0xb0aeac, |
0x828181, |
0x6f6e6f, |
0x797877, |
0x8c8c8c, |
0xa7a6a6, |
0xbab9ba, |
0xc3c1c2, |
0xc2c0c1, |
0xb9b8b8, |
0xd7d4d0, |
0xe3dfda, |
0xe2deda, |
0xe1ddd8, |
0xe0dcd7, |
0xe0dbd6, |
0xdfdad5, |
0xdedad5, |
0xddd9d4, |
0xdbd8d3, |
0xdad7d2, |
0xd2cfca, |
0xc0beb7, |
0xdddad6, |
0xd4d0ca, |
0xcbc8c5, |
0xdfdfdf, |
0xfbfbfb, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xdedede, |
0x3b3b3b, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x929291, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0x616161, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x5c5c5c, |
0xffffff, |
0xffffff, |
0xfefefe, |
0x848484, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x858585, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 28 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xefefef, |
0xacaaaa, |
0x83807c, |
0x403f3f, |
0x323232, |
0x7d7c7c, |
0xf4f2f0, |
0xf7f5f2, |
0xf6f4f1, |
0xf6f4f1, |
0xf5f3f0, |
0xf5f3f0, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf2f0ed, |
0xf2f0ec, |
0xe5e2e0, |
0x9e9d9d, |
0xacabab, |
0xbebcbd, |
0xc2c1c1, |
0xbdbcbc, |
0xcccac8, |
0xedeae6, |
0xe8e5e2, |
0xcdcbc9, |
0x9b9a98, |
0x767575, |
0x717070, |
0x777676, |
0x7e7e7d, |
0x8b8a8a, |
0x9c9b9b, |
0xafaeae, |
0xbdbcbc, |
0xc3c1c2, |
0xc3c1c2, |
0xbebdbd, |
0xc6c4c2, |
0xe1ddd9, |
0xe1dcd7, |
0xe0dbd6, |
0xe0dbd6, |
0xdfdad5, |
0xddd9d4, |
0xddd9d4, |
0xdbd8d3, |
0xdad7d2, |
0xd9d6d1, |
0xd8d5cf, |
0xc0bdb6, |
0xdbd9d4, |
0xd4d0ca, |
0xd1cdc8, |
0xcecdcc, |
0xf3f3f3, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xe0e0e0, |
0xbfbfbf, |
0xb4b4b4, |
0xc0c0c0, |
0xdfdfdf, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xebebeb, |
0xc8c8c8, |
0xb4b4b4, |
0xbababa, |
0xd5d4d4, |
0xfafafa, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf1f1f1, |
0xc7c7c7, |
0xb4b4b4, |
0xbfbfbf, |
0xdddddd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x474747, |
0xebebeb, |
0xffffff, |
0xffffff, |
0xa3a3a3, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x747474, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 29 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf9f9f9, |
0xd0d0d0, |
0x8c8a85, |
0x595958, |
0x333333, |
0x414141, |
0xe0dfdc, |
0xf6f4f1, |
0xf6f4f1, |
0xf5f3f0, |
0xf5f3f0, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ed, |
0xf2f0ec, |
0xf2efec, |
0xf1eeeb, |
0xf0edea, |
0xb7b5b4, |
0xa2a1a1, |
0xb9b8b8, |
0xc2c0c1, |
0xc1c0c0, |
0xbbb9ba, |
0xcac8c5, |
0x999797, |
0x747373, |
0x737272, |
0x7a7979, |
0x848382, |
0x8f8e8e, |
0x9a9999, |
0xa6a5a5, |
0xb1b0b1, |
0xbbb9ba, |
0xc1bfc0, |
0xc4c2c3, |
0xc4c2c3, |
0xc1bfc0, |
0xbbb9b9, |
0xdad6d2, |
0xe0dbd6, |
0xdfdbd6, |
0xdedad5, |
0xddd9d4, |
0xdcd8d3, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d1, |
0xd9d6d0, |
0xd9d6d0, |
0xccc9c3, |
0xc6c4be, |
0xdbd8d3, |
0xd4d0ca, |
0xcac8c5, |
0xe6e6e6, |
0xfdfdfc, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfafafa, |
0xb1b0b0, |
0x505050, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x333333, |
0x5c5c5c, |
0xd1d1d1, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xffffff, |
0xcfcfcf, |
0x676767, |
0x363636, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x484847, |
0xacacac, |
0xfbfbfb, |
0xffffff, |
0xffffff, |
0xe2e2e2, |
0x4d4d4d, |
0x4e4e4e, |
0xa4a4a4, |
0xfaf9f9, |
0x979797, |
0x3b3b3b, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x585857, |
0xcbcbcb, |
0xffffff, |
0xffffff, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x757575, |
0xf4f4f4, |
0xffffff, |
0xf2f2f2, |
0xe3e3e3, |
0xe3e3e3, |
0xe3e3e3, |
0xe4e4e4, |
0xebebeb, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 30 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xe9e9e9, |
0x9f9d9a, |
0x787672, |
0x393939, |
0x323232, |
0xa2a1a0, |
0xf6f4f1, |
0xf5f3f0, |
0xf4f2ef, |
0xf3f1ee, |
0xf3f1ee, |
0xf2f0ed, |
0xf2f0ec, |
0xf1efec, |
0xf1eeeb, |
0xf0edea, |
0xf0ede9, |
0xd8d6d3, |
0x999898, |
0xb1b0b0, |
0xbfbebe, |
0xc2c0c1, |
0xbbbabb, |
0xa9a8a8, |
0x929191, |
0x868585, |
0x8a8888, |
0x939292, |
0xa09f9f, |
0xabaaaa, |
0xb4b2b3, |
0xbbb9ba, |
0xc3c1c2, |
0xceccca, |
0xc3c1c2, |
0xc3c1c2, |
0xc3c1c2, |
0xc3c1c2, |
0xbcbbbb, |
0xcbc8c6, |
0xdfdad5, |
0xddd9d4, |
0xddd9d4, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd5d1cb, |
0xbdbbb3, |
0xdcd9d6, |
0xd4d0ca, |
0xd0cdc7, |
0xd3d3d3, |
0xf7f7f7, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xf4f4f4, |
0x7b7a7a, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x373737, |
0xbcbcbc, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xa7a7a7, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x343434, |
0x888888, |
0xf9f9f9, |
0xffffff, |
0xdedede, |
0x323232, |
0x323232, |
0x8f8f8f, |
0x7f7f7f, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x353535, |
0xc4c4c4, |
0xffffff, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x424242, |
0x484848, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x595959, |
0xc7c7c7, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 31 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf4f4f4, |
0xbdbcbb, |
0x898782, |
0x4b4a4a, |
0x323232, |
0x5d5d5d, |
0xebe9e7, |
0xf4f2ef, |
0xf3f1ee, |
0xf2f0ed, |
0xf2f0ec, |
0xf1efec, |
0xf1eeeb, |
0xf0eeea, |
0xf0edea, |
0xf0ede9, |
0xefece8, |
0xe9e6e3, |
0xa7a6a5, |
0xa7a6a6, |
0xbcbabb, |
0xc3c1c2, |
0xc0bebf, |
0xb6b4b5, |
0xa8a7a7, |
0xa2a0a0, |
0xa5a5a5, |
0xafaeae, |
0xb8b6b6, |
0xbdbcbc, |
0xc9c7c6, |
0xd7d5d2, |
0xe2deda, |
0xe3dfda, |
0xc6c4c3, |
0xbdbbbc, |
0xc1bfc0, |
0xc3c1c2, |
0xc0bebf, |
0xbebcbc, |
0xdad7d2, |
0xdcd9d4, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d1, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3cd, |
0xd7d3cd, |
0xc4c2ba, |
0xd0cec8, |
0xd7d3cd, |
0xd3cfc9, |
0xc9c8c6, |
0xececec, |
0xfefefd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xfafafa, |
0x838383, |
0x323232, |
0x323232, |
0x424242, |
0x9f9f9f, |
0xdbdbdb, |
0xe3e3e3, |
0xcfcfcf, |
0x858585, |
0x353535, |
0x323232, |
0x3a3a39, |
0xe3e3e3, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xb6b6b6, |
0x383838, |
0x323232, |
0x363636, |
0x818181, |
0xcfcfcf, |
0xe4e4e4, |
0xd9d9d9, |
0xa1a0a0, |
0x454545, |
0x323232, |
0x353535, |
0xaaaaaa, |
0xffffff, |
0xdedede, |
0x323232, |
0x323232, |
0x444343, |
0x323232, |
0x4b4b4b, |
0xa9a8a8, |
0xdedede, |
0xe3e3e3, |
0xc3c3c2, |
0x5d5d5d, |
0x323232, |
0x323232, |
0x525252, |
0xfafafa, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x4f4f4f, |
0x6f6f6f, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x353535, |
0x777777, |
0xe7e7e7, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 32 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfcfcfb, |
0xe0e0e0, |
0x92908b, |
0x6a6966, |
0x353535, |
0x343434, |
0xc7c6c6, |
0xf3f1ee, |
0xf2f0ed, |
0xf2f0ec, |
0xf1efec, |
0xf1eeeb, |
0xf0edea, |
0xf0edea, |
0xefece9, |
0xefece8, |
0xeeebe7, |
0xeeebe7, |
0xc8c7c4, |
0x9c9b9b, |
0xb5b4b4, |
0xc1bfc0, |
0xc3c1c2, |
0xbfbdbe, |
0xbab8b9, |
0xb8b6b7, |
0xbab9ba, |
0xc1c0c0, |
0xd0cecc, |
0xdfdcd8, |
0xe4e0db, |
0xe3dfda, |
0xe3dfda, |
0xe2deda, |
0xcfccc9, |
0xafaeae, |
0xbab8b9, |
0xc1c0c0, |
0xc2c0c1, |
0xbab9b9, |
0xcfcdc9, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d1, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd2cec8, |
0xbdbbb3, |
0xdedbd7, |
0xd4d0ca, |
0xcbc9c5, |
0xdbdbda, |
0xfafafa, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0x515151, |
0x686868, |
0x686868, |
0x686868, |
0x686868, |
0x686868, |
0x686868, |
0x686868, |
0x686868, |
0x686868, |
0x686868, |
0x686868, |
0x454545, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xc6c6c6, |
0x363636, |
0x323232, |
0x4e4e4e, |
0xdddddd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xadacad, |
0x323232, |
0x323232, |
0x808080, |
0xfefefe, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xefefef, |
0x4c4c4c, |
0x323232, |
0x393939, |
0xb5b5b5, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xd6d6d6, |
0x464646, |
0x323232, |
0x525252, |
0xeeeeee, |
0xdedede, |
0x323232, |
0x323232, |
0x323232, |
0x575757, |
0xececec, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf3f3f3, |
0x464646, |
0x323232, |
0x323232, |
0xd5d5d5, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x525252, |
0xd3d3d3, |
0x4b4b4b, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x3d3d3d, |
0x9f9f9f, |
0xfcfcfc, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 33 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xefefef, |
0xacaba9, |
0x83807c, |
0x424141, |
0x323232, |
0x7c7c7b, |
0xf0efec, |
0xf2f0ec, |
0xf1eeec, |
0xf1eeeb, |
0xf0edea, |
0xf0edea, |
0xefece8, |
0xefece8, |
0xeeebe7, |
0xedeae6, |
0xedeae6, |
0xe2e0dc, |
0x9f9d9d, |
0xacabab, |
0xbebcbd, |
0xc3c1c2, |
0xc3c1c2, |
0xc3c1c2, |
0xc9c7c6, |
0xd8d6d3, |
0xe3e0dc, |
0xe5e2dd, |
0xe4e0db, |
0xe3dfda, |
0xe2deda, |
0xe2deda, |
0xe1ddd8, |
0xdcd8d4, |
0xa3a1a1, |
0xadacac, |
0xbdbcbc, |
0xc2c0c1, |
0xbebcbd, |
0xc1bfbe, |
0xd9d6d1, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd8d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xc0bdb5, |
0xd6d4d0, |
0xd4d0cb, |
0xd2cfc9, |
0xcbcac9, |
0xf1f1f0, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xababab, |
0xfbfbfb, |
0x757575, |
0x323232, |
0x3c3c3c, |
0xc6c6c6, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfbfbfb, |
0x605f5f, |
0x323232, |
0x393938, |
0xf3f3f3, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xacacac, |
0x343434, |
0x323232, |
0x939393, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x9a9a9a, |
0x323232, |
0x353535, |
0xb8b8b8, |
0xdedede, |
0x323232, |
0x323232, |
0x3a3a3a, |
0xc6c6c6, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x8a8a8a, |
0x323232, |
0x323232, |
0xb2b2b2, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x525252, |
0xefefef, |
0xd4d4d4, |
0x505050, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x333333, |
0x6e6e6e, |
0xf9f9f9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 34 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf8f8f7, |
0xcecdcd, |
0x8d8b86, |
0x5c5b59, |
0x333333, |
0x434343, |
0xdcdbd9, |
0xf1eeeb, |
0xf0eeea, |
0xf0edea, |
0xefece9, |
0xefece8, |
0xeeebe7, |
0xeeebe7, |
0xedeae6, |
0xece9e5, |
0xece9e5, |
0xeae8e3, |
0xb5b4b2, |
0xa1a0a0, |
0xb7b6b7, |
0xc2c1c1, |
0xc4c2c3, |
0xc6c4c5, |
0xe2dfdb, |
0xe5e2dd, |
0xe4e1dc, |
0xe3dfda, |
0xe3dfda, |
0xe2deda, |
0xe1ddd9, |
0xe0dcd7, |
0xe0dbd6, |
0xe0dbd6, |
0xb4b2b0, |
0xa09f9f, |
0xb7b6b7, |
0xc2c0c1, |
0xc1c0c0, |
0xbbb9b9, |
0xd3d1cc, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xcdcac3, |
0xc0beb7, |
0xdddad5, |
0xd4d0ca, |
0xc9c7c4, |
0xe1e1e1, |
0xfcfcfc, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xababab, |
0xe6e6e6, |
0x4b4b4b, |
0x323232, |
0x5b5b5b, |
0xfafafa, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xa8a8a7, |
0x323232, |
0x323232, |
0xbebebe, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0x707070, |
0x323232, |
0x393939, |
0xdddddd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xdadada, |
0x3e3e3e, |
0x323232, |
0x808080, |
0xdedede, |
0x323232, |
0x323232, |
0x535353, |
0xfafafa, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb0b0b0, |
0x323232, |
0x323232, |
0xacacac, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x525252, |
0xefefef, |
0xffffff, |
0xececec, |
0x7a7a7a, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x333333, |
0x8b8b8b, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 35 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xe8e7e7, |
0x9c9a96, |
0x797873, |
0x3a3a3a, |
0x323232, |
0xa2a1a0, |
0xf2efec, |
0xf0edea, |
0xefece9, |
0xefece8, |
0xeeebe7, |
0xeeebe7, |
0xedeae6, |
0xece9e5, |
0xece9e5, |
0xebe8e4, |
0xe9e7e2, |
0xd6d5d1, |
0x999898, |
0xb0afaf, |
0xbfbebe, |
0xc4c2c3, |
0xc3c1c2, |
0xd6d3d0, |
0xe4e0db, |
0xe3dfda, |
0xe2deda, |
0xe2deda, |
0xe1ddd8, |
0xe0dcd7, |
0xe0dbd6, |
0xdfdbd6, |
0xddd9d4, |
0xcecbc7, |
0x999999, |
0xaeadae, |
0xbebdbe, |
0xc3c1c2, |
0xbcbbbb, |
0xc9c7c3, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd3cfc9, |
0xbdbab3, |
0xdbd8d4, |
0xd4d0ca, |
0xd1cec8, |
0xcececd, |
0xf5f4f4, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xcbcbcb, |
0x323232, |
0x323232, |
0x878686, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xcacaca, |
0x323232, |
0x323232, |
0x9c9c9b, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xeaeaea, |
0x454545, |
0x323232, |
0x575757, |
0xf0f0f0, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xeaeaea, |
0x515151, |
0x323232, |
0x5d5d5d, |
0xdedede, |
0x323232, |
0x323232, |
0x777777, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x525252, |
0xefefef, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xc1c1c1, |
0x525252, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x343434, |
0xe1e1e1, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 36 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf4f4f3, |
0xbabab9, |
0x898782, |
0x4e4d4c, |
0x323232, |
0x5e5e5e, |
0xe7e5e3, |
0xefece8, |
0xefece8, |
0xeeebe7, |
0xedeae6, |
0xedeae6, |
0xece9e5, |
0xebe8e4, |
0xeae8e3, |
0xe9e7e2, |
0xe9e7e2, |
0xe4e3de, |
0xa8a7a5, |
0xa6a5a5, |
0xbbb9ba, |
0xc3c1c2, |
0xc3c1c2, |
0xc4c1c1, |
0xe1ded9, |
0xe2deda, |
0xe1ddd9, |
0xe1ddd8, |
0xe0dbd6, |
0xe0dbd6, |
0xdedad5, |
0xddd9d4, |
0xdbd8d3, |
0xdad7d2, |
0xa4a3a2, |
0xa5a4a4, |
0xbab9b9, |
0xc2c0c1, |
0xc0bebf, |
0xcbc8c6, |
0xd8d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xc7c5be, |
0xc9c6c0, |
0xd9d5d0, |
0xd4d0ca, |
0xc9c8c5, |
0xe8e8e7, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xb3b3b3, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x7e7e7e, |
0xfefefe, |
0x565656, |
0x323232, |
0x494949, |
0xd6d6d6, |
0x404040, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x4e4e4e, |
0xcecece, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x525252, |
0xefefef, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf5f5f5, |
0x949494, |
0x373737, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x9d9d9d, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 37 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfbfbfb, |
0xdddddd, |
0x8f8d8a, |
0x6c6a68, |
0x363636, |
0x363636, |
0xc5c4c3, |
0xefece8, |
0xeeebe7, |
0xedeae6, |
0xece9e5, |
0xece9e5, |
0xebe8e4, |
0xeae7e3, |
0xe9e7e2, |
0xe8e6e1, |
0xe8e6e1, |
0xe7e5e0, |
0xc7c5c2, |
0x9a9a9a, |
0xb4b3b3, |
0xc1bfc0, |
0xc3c1c2, |
0xbdbbbc, |
0xd5d2ce, |
0xe1ddd9, |
0xe0dcd7, |
0xe0dbd6, |
0xdfdad5, |
0xdedad5, |
0xdcd8d3, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xc6c3c0, |
0x9f9d9d, |
0xb2b1b2, |
0xc1bfc0, |
0xc5c3c3, |
0xd4d0cc, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd1cec7, |
0xbbb8b1, |
0xdddad6, |
0xd4d0ca, |
0xcfcbc6, |
0xd4d4d4, |
0xf8f8f8, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xa5a5a5, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x7a7a7a, |
0xfefefe, |
0x565656, |
0x323232, |
0x494949, |
0xcbcbcb, |
0x3d3d3d, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x4d4d4d, |
0xcccccc, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x424242, |
0xa4a4a4, |
0xb4b4b4, |
0xb4b4b4, |
0xb4b4b4, |
0xdadada, |
0xffffff, |
0xfefefe, |
0xc6c6c6, |
0x3d3d3d, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x7b7b7b, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 38 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xefeeee, |
0xaaa8a7, |
0x827f7b, |
0x434242, |
0x323232, |
0x7d7d7c, |
0xeeece9, |
0xedeae6, |
0xece9e5, |
0xebe8e4, |
0xeae8e3, |
0xe9e7e2, |
0xe9e7e2, |
0xe8e6e1, |
0xe8e5e0, |
0xe7e4df, |
0xe6e3de, |
0xdddad6, |
0x9d9c9b, |
0xabaaaa, |
0xbdbcbc, |
0xc3c1c2, |
0xbfbdbe, |
0xc3c1c0, |
0xe0dcd7, |
0xe0dbd6, |
0xdedad5, |
0xddd9d4, |
0xdbd8d3, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d1, |
0xd8d5d0, |
0xcac8c3, |
0xc0bebc, |
0xc9c7c5, |
0xd4d0cc, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd2cfc8, |
0xc1beb8, |
0xc7c4be, |
0xd5d1cb, |
0xd4d0ca, |
0xc3c0b9, |
0xd3d1cc, |
0xd6d2cc, |
0xd3cfca, |
0xc8c7c6, |
0xeeeeed, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xa8a8a8, |
0x323232, |
0x323232, |
0x747474, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xe0e0e0, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xcecece, |
0x3e3e3e, |
0x323232, |
0x505050, |
0xc4c4c4, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xcfcfcf, |
0xd5d5d5, |
0xd9d9d9, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xd5d5d5, |
0x393939, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xb1b1b1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x787878, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x9a9a9a, |
0xffffff, |
0xffffff, |
0xfefefe, |
0x898988, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x696969, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 39 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf8f8f7, |
0xcbcbcb, |
0x8d8a86, |
0x5e5d5b, |
0x343433, |
0x454545, |
0xd9d8d6, |
0xece9e5, |
0xebe8e4, |
0xe9e7e2, |
0xe9e7e2, |
0xe8e6e1, |
0xe8e6e1, |
0xe7e5e0, |
0xe6e4df, |
0xe5e2dd, |
0xe5e2dd, |
0xe4e0db, |
0xb7b5b3, |
0xa09fa0, |
0xb7b6b6, |
0xc2c0c1, |
0xc1c0c0, |
0xbab8b8, |
0xd9d5d1, |
0xdedad5, |
0xdcd9d4, |
0xdbd8d3, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd7d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xacaaa3, |
0x817f7b, |
0x93918e, |
0xd7d4d0, |
0xd4d0ca, |
0xcecac4, |
0xc3c1ba, |
0xe1deda, |
0xd4d0ca, |
0xcac8c4, |
0xdcdcdc, |
0xfafafa, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xc1c1c1, |
0x323232, |
0x323232, |
0x7c7c7c, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xe1e1e1, |
0x434343, |
0x323232, |
0x505050, |
0xededed, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xdedede, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xdedede, |
0x3b3b3b, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0xa3a3a3, |
0xffffff, |
0xffffff, |
0xffffff, |
0x6d6d6d, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x9a9a9a, |
0xffffff, |
0xffffff, |
0xffffff, |
0xa3a3a3, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x696969, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 40 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xe7e7e7, |
0x9a9896, |
0x797773, |
0x3b3b3b, |
0x323232, |
0xa2a1a0, |
0xedeae6, |
0xe9e7e2, |
0xe8e6e1, |
0xe8e6e1, |
0xe8e5e0, |
0xe7e4df, |
0xe6e3de, |
0xe5e2dd, |
0xe4e1dc, |
0xe4e0db, |
0xe3dfda, |
0xd3d0cd, |
0x999898, |
0xafaeae, |
0xbfbebe, |
0xc3c1c2, |
0xbcbbbb, |
0xc9c6c4, |
0xdcd8d3, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xdad7d1, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xb5b3ae, |
0xadaba4, |
0xd2d0ca, |
0xe6e4e2, |
0xd4d0ca, |
0xd1cdc7, |
0xc2c0b9, |
0xe9e6e4, |
0xd4d0ca, |
0xd2cfc9, |
0xcac9c9, |
0xf3f3f3, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xdfdfdf, |
0x414141, |
0x323232, |
0x535353, |
0xf8f8f8, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xcfcfcf, |
0x7d7d7d, |
0x7d7d7d, |
0xcacaca, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0x5f5f5f, |
0x323232, |
0x353535, |
0xd7d7d7, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xebebeb, |
0x898989, |
0x7d7d7d, |
0xa2a2a2, |
0xdedede, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xf6f6f6, |
0x3e3e3e, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x747474, |
0xfbfbfb, |
0xffffff, |
0xefeeee, |
0x515151, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x717170, |
0xffffff, |
0xffffff, |
0xfcfcfc, |
0x7f7f7f, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x828282, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 41 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf4f4f3, |
0xb9b9b8, |
0x898781, |
0x4f4e4d, |
0x323232, |
0x5f5f5f, |
0xe5e3e1, |
0xe8e6e1, |
0xe8e6e1, |
0xe7e5e0, |
0xe7e4df, |
0xe6e3de, |
0xe5e2dd, |
0xe4e1dc, |
0xe4e0db, |
0xe3dfda, |
0xe2deda, |
0xdedad7, |
0xa8a6a5, |
0xa5a4a4, |
0xbbb9ba, |
0xc2c0c1, |
0xc0bebf, |
0xc1bfbe, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d1, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd6d2cc, |
0xe5e3e0, |
0xecebe8, |
0xdad6d1, |
0xd4d0ca, |
0xcbc8c2, |
0xc7c5bf, |
0xeae8e6, |
0xd4d0ca, |
0xd3cfc9, |
0xbfbebc, |
0xeaeaea, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xf8f8f8, |
0x6a696a, |
0x323232, |
0x383838, |
0xb8b8b8, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfcfcfc, |
0x6c6c6c, |
0x323232, |
0x323232, |
0xe1e1e1, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xa1a0a0, |
0x333333, |
0x323232, |
0x848484, |
0xfbfbfb, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xa8a8a7, |
0x323232, |
0x323232, |
0xa3a3a3, |
0xdedede, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xffffff, |
0x696969, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x373737, |
0x9b9b9a, |
0xcccccc, |
0x878686, |
0x353535, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x5c5c5c, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x393939, |
0x969595, |
0xcecece, |
0xa4a4a4, |
0x3b3b3b, |
0x323232, |
0x323232, |
0x323232, |
0x333333, |
0xaeaeae, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 42 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfbfbfa, |
0xdbdbdb, |
0x918e8b, |
0x6d6c68, |
0x363636, |
0x363636, |
0xbfbebd, |
0xe9e7e2, |
0xe7e5e0, |
0xe6e4df, |
0xe5e2dd, |
0xe4e1dc, |
0xe4e1dc, |
0xe3dfda, |
0xe2deda, |
0xe1ddd9, |
0xe1ddd9, |
0xe0dcd7, |
0xc5c2bf, |
0x9a9999, |
0xb3b2b3, |
0xc1bfc0, |
0xc3c1c2, |
0xcac8c6, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d1, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd7d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd3cfc9, |
0xbdbbb3, |
0xdeddd9, |
0xe3e0dc, |
0xd4d0ca, |
0xd3cfc9, |
0xb5b4b3, |
0xe4e4e4, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xc3c3c3, |
0x363636, |
0x323232, |
0x494949, |
0xd4d4d4, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf8f8f8, |
0x8f8f8f, |
0x323232, |
0x323232, |
0x767676, |
0xfefefe, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xececec, |
0x4b4b4b, |
0x323232, |
0x373736, |
0xacacac, |
0xfbfbfb, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xbababa, |
0x414141, |
0x323232, |
0x4f4f4f, |
0xe7e7e7, |
0xdedede, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xffffff, |
0xacacac, |
0x343434, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x3d3d3d, |
0xa3a3a3, |
0x3a3a3a, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x3b3b3b, |
0xefeeee, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 43 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xeeeeee, |
0xa9a8a7, |
0x82807b, |
0x454544, |
0x323232, |
0x787877, |
0xeae8e4, |
0xe6e3de, |
0xe5e2dd, |
0xe4e1dc, |
0xe4e0db, |
0xe3dfda, |
0xe2deda, |
0xe1ddd9, |
0xe1dcd8, |
0xe0dbd6, |
0xdfdad5, |
0xdbd7d2, |
0xb5b3b1, |
0xadabac, |
0xbdbcbc, |
0xc8c6c6, |
0xd7d4d0, |
0xdad7d2, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd2cec8, |
0xc1beb6, |
0xc5c4bd, |
0xf4f3f1, |
0xd7d3cd, |
0xd4d0ca, |
0xccc9c3, |
0xadacac, |
0xe4e4e4, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xfbfbfb, |
0x8c8c8c, |
0x323232, |
0x323232, |
0x373737, |
0x777777, |
0xa9a9a9, |
0xb3b3b3, |
0x9b9b9b, |
0x545454, |
0x323232, |
0x323232, |
0x484848, |
0xe7e7e7, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xbfbfbf, |
0x3a3a3a, |
0x323232, |
0x323232, |
0x616161, |
0x9d9d9d, |
0xb4b4b4, |
0xa7a7a7, |
0x6c6b6b, |
0x353535, |
0x323232, |
0x3b3b3b, |
0xb6b6b6, |
0xffffff, |
0xdedede, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xffffff, |
0xf3f3f3, |
0x5c5c5c, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x868586, |
0xfafafa, |
0x8a8a8a, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x333333, |
0xa09f9f, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 44 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf7f7f7, |
0xcacaca, |
0x8b8984, |
0x5f5e5c, |
0x343434, |
0x454545, |
0xd5d4d2, |
0xe5e2dd, |
0xe4e1dc, |
0xe3e0db, |
0xe3dfda, |
0xe1ddd9, |
0xe1ddd9, |
0xe0dcd7, |
0xe0dbd6, |
0xdfdad5, |
0xddd9d4, |
0xddd9d4, |
0xdad7d2, |
0xd2d0cc, |
0xd4d2ce, |
0xd8d6d1, |
0xd9d6d1, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd3cfc9, |
0xcecac3, |
0xc3c0b8, |
0xbbb9b1, |
0xcfcdc7, |
0xf2f1ef, |
0xdfdcd8, |
0xd4d0ca, |
0xd3cfc9, |
0x9c9a96, |
0xb4b3b3, |
0xeaeae9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7e7e7e, |
0x323232, |
0x323232, |
0xa9a9a9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0x7d7d7d, |
0x323232, |
0x323232, |
0xababab, |
0xffffff, |
0xffffff, |
0xf8f8f8, |
0x919191, |
0x373737, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x545454, |
0xe1e1e1, |
0xffffff, |
0xffffff, |
0xffffff, |
0x565656, |
0x323232, |
0x494949, |
0xf2f2f2, |
0xffffff, |
0xffffff, |
0xbcbbbb, |
0x444444, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x424242, |
0xb5b5b5, |
0xffffff, |
0xffffff, |
0xdedede, |
0x323232, |
0x323232, |
0x818181, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xb4b4b4, |
0x323232, |
0x323232, |
0xacacac, |
0xffffff, |
0xffffff, |
0xe6e6e6, |
0x626262, |
0x333333, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x343434, |
0x7f7e7e, |
0xf4f4f4, |
0xffffff, |
0xf7f7f7, |
0x898989, |
0x343434, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x323232, |
0x343434, |
0x9a9a9a, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 45 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xe7e6e6, |
0x989795, |
0x797873, |
0x3c3c3c, |
0x323232, |
0x9c9c9b, |
0xe8e5e1, |
0xe3dfda, |
0xe2deda, |
0xe1ddd9, |
0xe1ddd8, |
0xe0dcd7, |
0xdfdbd6, |
0xdedad5, |
0xddd9d4, |
0xdcd8d3, |
0xdbd8d3, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d1, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd7d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xcecbc5, |
0xc5c3bb, |
0xbdbab2, |
0xc2c0ba, |
0xd7d6d1, |
0xecebe9, |
0xeeedea, |
0xdcd9d4, |
0xd4d0ca, |
0xd3cfc9, |
0x9d9b97, |
0x6f6f6e, |
0xc3c2c2, |
0xf2f2f1, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xbfbfbf, |
0x989898, |
0x989898, |
0xd4d4d4, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xbebebe, |
0x989898, |
0x989898, |
0xd5d5d5, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xd8d8d7, |
0x868585, |
0x535353, |
0x353535, |
0x333333, |
0x454545, |
0x666565, |
0xadadad, |
0xf9f9f9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xababab, |
0x989898, |
0xa4a4a4, |
0xf9f9f9, |
0xffffff, |
0xffffff, |
0xffffff, |
0xebebeb, |
0x9d9d9d, |
0x605f5f, |
0x3b3b3b, |
0x323232, |
0x3d3d3d, |
0x5a5959, |
0x949494, |
0xe8e8e8, |
0xffffff, |
0xffffff, |
0xffffff, |
0xeeeeee, |
0x989898, |
0x989898, |
0xc0c0c0, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xd9d9d9, |
0x999999, |
0x989898, |
0xd5d5d5, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfcfcfc, |
0xc1c1c1, |
0x7a7a7a, |
0x555554, |
0x363636, |
0x323232, |
0x3a3a3a, |
0x595958, |
0x878787, |
0xd0d0d0, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xd5d5d5, |
0x8b8b8b, |
0x5b5a5a, |
0x3c3c3c, |
0x323232, |
0x383838, |
0x5b5b5b, |
0x898989, |
0xdddddd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 46 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf4f3f3, |
0xb9b8b8, |
0x878580, |
0x51514f, |
0x323232, |
0x5c5c5c, |
0xe2e0dd, |
0xe2deda, |
0xe1ddd9, |
0xe1dcd7, |
0xe0dbd6, |
0xdfdad5, |
0xded9d4, |
0xddd9d4, |
0xdcd8d3, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd0ccc6, |
0xc7c4be, |
0xbcbab2, |
0xc0bfb8, |
0xd1d0cb, |
0xe9e8e6, |
0xeeedeb, |
0xe7e5e1, |
0xdbd8d3, |
0xd5d1cb, |
0xd1cdc7, |
0xb5b2ae, |
0x7a7978, |
0x4b4b4b, |
0x969595, |
0xd6d6d6, |
0xf8f8f8, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 47 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfafafa, |
0xdadada, |
0x8f8d8a, |
0x6e6c69, |
0x373636, |
0x373737, |
0xbebdbc, |
0xe4e0db, |
0xe0dcd7, |
0xdfdbd6, |
0xdedad5, |
0xddd9d4, |
0xdcd9d4, |
0xdbd8d3, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d1, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3cd, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd1cdc7, |
0xcac6c0, |
0xbfbcb5, |
0xbebcb5, |
0xceccc7, |
0xe5e4e1, |
0xefeeec, |
0xeae8e4, |
0xdddad5, |
0xd6d2cc, |
0xd2cec8, |
0xbdbab4, |
0x94928f, |
0x626160, |
0x424141, |
0x444343, |
0x807f7f, |
0xbcbbbc, |
0xeaeaea, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 48 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xeeeeee, |
0xa8a7a5, |
0x817f7a, |
0x464544, |
0x333333, |
0xa6a5a5, |
0xe6e3e0, |
0xdfdbd6, |
0xded9d4, |
0xddd9d4, |
0xdcd8d3, |
0xdbd8d3, |
0xdbd8d3, |
0xdad7d2, |
0xdad7d2, |
0xd9d6d1, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d5cf, |
0xd7d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd2cec8, |
0xcbc8c1, |
0xc0bdb5, |
0xbebcb5, |
0xc9c7c1, |
0xe2e1de, |
0xeeedeb, |
0xeceae8, |
0xdfdcd8, |
0xd7d3cd, |
0xd3cfc9, |
0xc2beb9, |
0x9f9d98, |
0x6b6a67, |
0x4a4948, |
0x3b3b3b, |
0x474746, |
0x626161, |
0x8b8a8a, |
0xb7b6b6, |
0xe0e0df, |
0xf8f8f8, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 49 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf7f7f7, |
0xc9c8c8, |
0x8b8884, |
0x5f5f5d, |
0x5d5c5c, |
0xd3d2d0, |
0xe2dfdb, |
0xddd9d4, |
0xddd9d4, |
0xdcd8d3, |
0xdbd8d3, |
0xd0cdc8, |
0xc7c4c0, |
0xd4d2cd, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d4ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd4d0ca, |
0xd4d0ca, |
0xd3cfc9, |
0xcdc9c3, |
0xc2bfb8, |
0xbdbbb3, |
0xc5c3bd, |
0xdddcd8, |
0xedecea, |
0xeeedeb, |
0xe1deda, |
0xd8d4cf, |
0xd3d0ca, |
0xc6c2bd, |
0xa8a5a1, |
0x747371, |
0x4f4f4f, |
0x3d3d3d, |
0x444444, |
0x5b5b5a, |
0x777777, |
0x939392, |
0xababab, |
0xc8c7c7, |
0xe4e4e4, |
0xf7f7f7, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 50 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xe6e6e6, |
0x989794, |
0x83817d, |
0xc4c3c2, |
0xcbc9c2, |
0xd5d3ce, |
0xdfdbd6, |
0xdbd8d3, |
0xdbd8d3, |
0xd5d2cd, |
0x94928d, |
0x85837e, |
0xaaa8a4, |
0xe1deda, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd3cfc9, |
0xcfcbc5, |
0xc5c2ba, |
0xbebbb3, |
0xc2c0b9, |
0xd8d7d3, |
0xebeae8, |
0xefeeec, |
0xe4e1dd, |
0xd9d6d0, |
0xd4d0ca, |
0xcac6c0, |
0xafaca8, |
0x807f7c, |
0x565655, |
0x3e3e3e, |
0x444343, |
0x555454, |
0x717070, |
0x8d8b8c, |
0xa6a5a5, |
0xbcbbbb, |
0xd0d0d0, |
0xe2e2e2, |
0xf1f1f1, |
0xfafafa, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 51 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf4f3f3, |
0xb8b8b7, |
0x9d9b96, |
0xd8d5d1, |
0xd3d0ca, |
0xc2c0ba, |
0xe1deda, |
0xdbd8d3, |
0xdad7d2, |
0xd5d3ce, |
0xa7a5a2, |
0xc2c0b9, |
0xd8d7d5, |
0xe3e1dd, |
0xd8d4cf, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xcfccc5, |
0xc7c4be, |
0xbdbbb3, |
0xc0beb7, |
0xd3d2cd, |
0xe8e8e5, |
0xf1f0ef, |
0xe6e4e0, |
0xdbd8d3, |
0xd4d1cb, |
0xccc8c3, |
0xb8b5b0, |
0x898785, |
0x5f5e5c, |
0x444343, |
0x444443, |
0x515151, |
0x6b6b6a, |
0x868685, |
0xa09f9f, |
0xb6b5b5, |
0xcccbcb, |
0xdedede, |
0xececec, |
0xf6f6f6, |
0xfcfcfc, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 52 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfafafa, |
0xd9d9d9, |
0x8c8a87, |
0xbfbcb7, |
0xd8d4ce, |
0xc0beb7, |
0xdcd9d4, |
0xdbd8d3, |
0xdad7d2, |
0xd9d6d0, |
0xe0ddd9, |
0xebeae7, |
0xeae9e6, |
0xd9d5d0, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd6d2cc, |
0xd5d1cb, |
0xd2cec8, |
0xc9c7c0, |
0xbebbb4, |
0xbdbbb4, |
0xceccc7, |
0xe6e5e2, |
0xf1f0ee, |
0xe9e7e4, |
0xdcd9d4, |
0xd5d1cb, |
0xd0ccc6, |
0xbdbab4, |
0x95938f, |
0x656463, |
0x474747, |
0x444443, |
0x4f4f4e, |
0x646464, |
0x807f7e, |
0x9b9a9a, |
0xb1b0b0, |
0xc7c6c6, |
0xdadada, |
0xe9e9e9, |
0xf4f4f4, |
0xfbfbfb, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 53 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xeeeeed, |
0x9c9b9a, |
0x92908d, |
0xd5d2cc, |
0xceccc6, |
0xc4c2bb, |
0xdcd9d4, |
0xd9d6d0, |
0xd9d6d0, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3ce, |
0xd7d3cd, |
0xd7d3cd, |
0xd6d2cc, |
0xd3cfc9, |
0xcdc9c3, |
0xc0beb6, |
0xbdbbb3, |
0xc9c8c1, |
0xe2e1de, |
0xf1f1ef, |
0xebe9e6, |
0xdfdcd7, |
0xd5d1cb, |
0xd1cdc7, |
0xc2bfba, |
0x9d9a96, |
0x6f6e6b, |
0x4d4c4b, |
0x464544, |
0x4c4c4b, |
0x60605f, |
0x7a7a79, |
0x959595, |
0xababab, |
0xc1c1c1, |
0xd6d5d5, |
0xe7e7e6, |
0xf3f2f2, |
0xfafaf9, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 54 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf7f7f7, |
0xc7c7c6, |
0x787775, |
0xc8c4be, |
0xd7d4cf, |
0xc3c1b9, |
0xc4c2ba, |
0xd4d1cb, |
0xd8d5cf, |
0xd8d4cf, |
0xd7d3cd, |
0xd7d3cd, |
0xd5d1cb, |
0xcfcbc5, |
0xc3c0b8, |
0xbdbbb4, |
0xc3c1bb, |
0xdfdedb, |
0xefeeed, |
0xefedeb, |
0xe0deda, |
0xd7d3cd, |
0xd2cec8, |
0xc7c3bd, |
0xa6a39e, |
0x757371, |
0x525150, |
0x454544, |
0x4b4a49, |
0x5c5b5a, |
0x767575, |
0x909090, |
0xa7a6a6, |
0xbdbdbd, |
0xd1d1d1, |
0xe2e2e1, |
0xf0efef, |
0xf8f8f8, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 55 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfc, |
0xe6e6e5, |
0x848382, |
0xa5a39e, |
0xd6d2cc, |
0xd7d4ce, |
0xc8c5be, |
0xbcbab2, |
0xc4c1ba, |
0xcbc8c1, |
0xccc9c2, |
0xc4c1ba, |
0xbdbbb3, |
0xc1bfb8, |
0xd8d7d3, |
0xededeb, |
0xf1f0ee, |
0xe3e1dd, |
0xd8d4cf, |
0xd3cfca, |
0xcac6c1, |
0xafaca7, |
0x7d7b78, |
0x555452, |
0x454443, |
0x494847, |
0x575555, |
0x706f6f, |
0x8a8989, |
0xa2a1a1, |
0xb8b7b8, |
0xcecdcd, |
0xe0e0df, |
0xeeeeed, |
0xf7f7f7, |
0xfcfcfc, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 56 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf4f3f3, |
0xb2b2b2, |
0x797875, |
0xcdc9c3, |
0xd6d3cd, |
0xd9d6d0, |
0xdcd9d5, |
0xd8d7d2, |
0xcfcdc7, |
0xd0cec9, |
0xdcdad7, |
0xeae9e6, |
0xf3f2f1, |
0xe6e3e0, |
0xdad6d0, |
0xd4d0ca, |
0xcdc9c3, |
0xb5b2ad, |
0x878581, |
0x5d5c5a, |
0x464544, |
0x474645, |
0x515050, |
0x696968, |
0x848483, |
0x9d9c9c, |
0xb3b2b2, |
0xc8c8c8, |
0xdcdcdc, |
0xebebeb, |
0xf6f6f5, |
0xfbfbfb, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 57 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfafafa, |
0xd8d8d8, |
0x71706f, |
0x92908c, |
0xd1cec8, |
0xd6d2cc, |
0xd7d3cd, |
0xd8d4ce, |
0xdfdbd6, |
0xe2dfdb, |
0xe1deda, |
0xdbd7d2, |
0xd4d0ca, |
0xcfcbc5, |
0xbfbcb6, |
0x8e8c89, |
0x646260, |
0x494847, |
0x494847, |
0x504f4e, |
0x646362, |
0x7e7d7d, |
0x979696, |
0xadacac, |
0xc4c3c3, |
0xd8d7d7, |
0xe8e8e8, |
0xf3f3f3, |
0xfafafa, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 58 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfefefe, |
0xeeeeed, |
0x9f9e9e, |
0x5a5958, |
0x878683, |
0xc6c2bd, |
0xd3cfc9, |
0xd5d1cb, |
0xd5d1cb, |
0xd4d0ca, |
0xd1cdc7, |
0xc4c0bb, |
0x9a9894, |
0x6c6b68, |
0x4d4c4b, |
0x494847, |
0x4d4c4b, |
0x5f5e5d, |
0x777776, |
0x929292, |
0xa8a7a7, |
0xbebdbe, |
0xd4d3d2, |
0xe5e5e5, |
0xf1f1f1, |
0xf9f9f9, |
0xfdfdfd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 59 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xf8f8f7, |
0xd5d4d4, |
0x7c7c7b, |
0x555452, |
0x5f5e5c, |
0x82807c, |
0x989692, |
0x9a9894, |
0x92908c, |
0x747371, |
0x525251, |
0x4a4948, |
0x4e4d4c, |
0x5a5a59, |
0x717171, |
0x8c8b8c, |
0xa3a2a2, |
0xb9b9b9, |
0xd0cfcf, |
0xe1e1e1, |
0xeeeeee, |
0xf7f7f7, |
0xfcfcfc, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 60 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfdfdfd, |
0xefefef, |
0xc5c5c5, |
0x807f7e, |
0x585755, |
0x525150, |
0x51504f, |
0x4f4f4e, |
0x4e4e4d, |
0x4f4f4e, |
0x595857, |
0x6d6c6b, |
0x878787, |
0x9e9d9d, |
0xb4b3b4, |
0xcacaca, |
0xdddddd, |
0xededec, |
0xf7f7f6, |
0xfcfcfc, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 61 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfcfcfb, |
0xebebea, |
0xcacaca, |
0xa09f9f, |
0x7b7b7a, |
0x6b6b6a, |
0x686868, |
0x6f6f6e, |
0x838281, |
0x9a9999, |
0xafaeae, |
0xc5c5c5, |
0xdadad9, |
0xe9e9e9, |
0xf4f4f3, |
0xfbfbfb, |
0xfefefe, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 62 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xfcfcfb, |
0xf0f0f0, |
0xdcdcdb, |
0xc7c7c7, |
0xb8b7b7, |
0xb2b2b2, |
0xb6b6b6, |
0xc4c3c3, |
0xd5d5d5, |
0xe6e6e6, |
0xf3f3f2, |
0xfafafa, |
0xfefefd, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 63 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 64 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
/* Scanline 65 */ |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
0xffffff, |
}; |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/fb/fb.c |
---|
1,4 → 1,5 |
/* |
* Copyright (c) 2008 Martin Decky |
* Copyright (c) 2006 Ondrej Palkovsky |
* All rights reserved. |
* |
26,7 → 27,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
33,6 → 34,7 |
*/ |
#include <genarch/fb/font-8x16.h> |
#include <genarch/fb/logo-196x66.h> |
#include <genarch/fb/visuals.h> |
#include <genarch/fb/fb.h> |
#include <console/chardev.h> |
39,145 → 41,125 |
#include <console/console.h> |
#include <sysinfo/sysinfo.h> |
#include <mm/slab.h> |
#include <align.h> |
#include <panic.h> |
#include <memstr.h> |
#include <config.h> |
#include <bitops.h> |
#include <print.h> |
#include <string.h> |
#include <ddi/ddi.h> |
#include <arch/types.h> |
#include "helenos.xbm" |
SPINLOCK_INITIALIZE(fb_lock); |
static parea_t fb_parea; /**< Physical memory area for fb. */ |
static uint8_t *fb_addr; |
static uint16_t *backbuf; |
static uint8_t *glyphs; |
static uint8_t *bgscan; |
SPINLOCK_INITIALIZE(fb_lock); |
static unsigned int xres; |
static unsigned int yres; |
static uint8_t *fbaddress = NULL; |
static unsigned int ylogo; |
static unsigned int ytrim; |
static unsigned int rowtrim; |
static uint8_t *blankline = NULL; |
static uint8_t *dbbuffer = NULL; /* Buffer for fast scrolling console */ |
static index_t dboffset; |
static unsigned int scanline; |
static unsigned int glyphscanline; |
static unsigned int xres = 0; |
static unsigned int yres = 0; |
static unsigned int scanline = 0; |
static unsigned int pixelbytes = 0; |
#ifdef FB_INVERT_COLORS |
static bool invert_colors = true; |
#else |
static bool invert_colors = false; |
#endif |
static unsigned int pixelbytes; |
static unsigned int glyphbytes; |
static unsigned int bgscanbytes; |
static unsigned int cols; |
static unsigned int rows; |
static unsigned int position = 0; |
static unsigned int columns = 0; |
static unsigned int rows = 0; |
#define COL_WIDTH 8 |
#define ROW_BYTES (scanline * FONT_SCANLINES) |
#define BG_COLOR 0x000080 |
#define FG_COLOR 0xffff00 |
#define INV_COLOR 0xaaaaaa |
#define BGCOLOR 0x000080 |
#define FGCOLOR 0xffff00 |
#define LOGOCOLOR 0x2020b0 |
#define RED(x, bits) ((x >> (8 + 8 + 8 - bits)) & ((1 << bits) - 1)) |
#define GREEN(x, bits) ((x >> (8 + 8 - bits)) & ((1 << bits) - 1)) |
#define BLUE(x, bits) ((x >> (8 - bits)) & ((1 << bits) - 1)) |
#define RED(x, bits) ((x >> (8 + 8 + 8 - bits)) & ((1 << bits) - 1)) |
#define GREEN(x, bits) ((x >> (8 + 8 - bits)) & ((1 << bits) - 1)) |
#define BLUE(x, bits) ((x >> (8 - bits)) & ((1 << bits) - 1)) |
#define COL2X(col) ((col) * FONT_WIDTH) |
#define ROW2Y(row) ((row) * FONT_SCANLINES) |
#define POINTPOS(x, y) ((y) * scanline + (x) * pixelbytes) |
#define X2COL(x) ((x) / FONT_WIDTH) |
#define Y2ROW(y) ((y) / FONT_SCANLINES) |
/***************************************************************/ |
/* Pixel specific fuctions */ |
#define FB_POS(x, y) ((y) * scanline + (x) * pixelbytes) |
#define BB_POS(col, row) ((row) * cols + (col)) |
#define GLYPH_POS(glyph, y) ((glyph) * glyphbytes + (y) * glyphscanline) |
static void (*rgb2scr)(void *, int); |
static int (*scr2rgb)(void *); |
static inline int COLOR(int color) |
{ |
return invert_colors ? ~color : color; |
} |
static void (*rgb_conv)(void *, uint32_t); |
/* Conversion routines between different color representations */ |
static void rgb_byte0888(void *dst, int rgb) |
{ |
*((int *) dst) = rgb; |
} |
static int byte0888_rgb(void *src) |
/** ARGB 8:8:8:8 conversion |
* |
*/ |
static void rgb_0888(void *dst, uint32_t rgb) |
{ |
return (*((int *) src)) & 0xffffff; |
*((uint32_t *) dst) = rgb & 0xffffff; |
} |
static void bgr_byte0888(void *dst, int rgb) |
{ |
*((uint32_t *) dst) = BLUE(rgb, 8) << 16 | GREEN(rgb, 8) << 8 | |
RED(rgb, 8); |
} |
static int byte0888_bgr(void *src) |
/** ABGR 8:8:8:8 conversion |
* |
*/ |
static void bgr_0888(void *dst, uint32_t rgb) |
{ |
int color = *(uint32_t *)(src); |
return ((color & 0xff) << 16) | (((color >> 8) & 0xff) << 8) | |
((color >> 16) & 0xff); |
*((uint32_t *) dst) |
= (BLUE(rgb, 8) << 16) | (GREEN(rgb, 8) << 8) | RED(rgb, 8); |
} |
static void rgb_byte888(void *dst, int rgb) |
{ |
uint8_t *scr = (uint8_t *) dst; |
#if defined(FB_INVERT_ENDIAN) |
scr[0] = RED(rgb, 8); |
scr[1] = GREEN(rgb, 8); |
scr[2] = BLUE(rgb, 8); |
#else |
scr[2] = RED(rgb, 8); |
scr[1] = GREEN(rgb, 8); |
scr[0] = BLUE(rgb, 8); |
#endif |
} |
static int byte888_rgb(void *src) |
/** RGB 8:8:8 conversion |
* |
*/ |
static void rgb_888(void *dst, uint32_t rgb) |
{ |
uint8_t *scr = (uint8_t *) src; |
#if defined(FB_INVERT_ENDIAN) |
return scr[0] << 16 | scr[1] << 8 | scr[2]; |
#else |
return scr[2] << 16 | scr[1] << 8 | scr[0]; |
#endif |
((uint8_t *) dst)[0] = BLUE(rgb, 8); |
((uint8_t *) dst)[1] = GREEN(rgb, 8); |
((uint8_t *) dst)[2] = RED(rgb, 8); |
} |
/** 16-bit depth (5:5:5) */ |
static void rgb_byte555(void *dst, int rgb) |
{ |
/* 5-bit, 5-bits, 5-bits */ |
*((uint16_t *) dst) = RED(rgb, 5) << 10 | GREEN(rgb, 5) << 5 | |
BLUE(rgb, 5); |
} |
/** 16-bit depth (5:5:5) */ |
static int byte555_rgb(void *src) |
/** BGR 8:8:8 conversion |
* |
*/ |
static void bgr_888(void *dst, uint32_t rgb) |
{ |
int color = *(uint16_t *)(src); |
return (((color >> 10) & 0x1f) << (16 + 3)) | |
(((color >> 5) & 0x1f) << (8 + 3)) | ((color & 0x1f) << 3); |
((uint8_t *) dst)[0] = RED(rgb, 8); |
((uint8_t *) dst)[1] = GREEN(rgb, 8); |
((uint8_t *) dst)[2] = BLUE(rgb, 8); |
} |
/** 16-bit depth (5:6:5) */ |
static void rgb_byte565(void *dst, int rgb) |
/** RGB 5:5:5 conversion |
* |
*/ |
static void rgb_555(void *dst, uint32_t rgb) |
{ |
/* 5-bit, 6-bits, 5-bits */ |
*((uint16_t *) dst) = RED(rgb, 5) << 11 | GREEN(rgb, 6) << 5 | |
BLUE(rgb, 5); |
*((uint16_t *) dst) |
= (RED(rgb, 5) << 10) | (GREEN(rgb, 5) << 5) | BLUE(rgb, 5); |
} |
/** 16-bit depth (5:6:5) */ |
static int byte565_rgb(void *src) |
/** RGB 5:6:5 conversion |
* |
*/ |
static void rgb_565(void *dst, uint32_t rgb) |
{ |
int color = *(uint16_t *)(src); |
return (((color >> 11) & 0x1f) << (16 + 3)) | |
(((color >> 5) & 0x3f) << (8 + 2)) | ((color & 0x1f) << 3); |
*((uint16_t *) dst) |
= (RED(rgb, 5) << 11) | (GREEN(rgb, 6) << 5) | BLUE(rgb, 5); |
} |
/** Put pixel - 8-bit depth (color palette/3:2:3) |
/** RGB 3:2:3 |
* |
* Even though we try 3:2:3 color scheme here, an 8-bit framebuffer |
* will most likely use a color palette. The color appearance |
184,358 → 166,382 |
* will be pretty random and depend on the default installed |
* palette. This could be fixed by supporting custom palette |
* and setting it to simulate the 8-bit truecolor. |
* |
* Currently we set the palette on the ia32, amd64 and sparc64 port. |
* |
* Note that the byte is being inverted by this function. The reason is |
* that we would like to use a color palette where the white color code |
* is 0 and the black color code is 255, as some machines (Sun Blade 1500) |
* use these codes for black and white and prevent to set codes |
* 0 and 255 to other colors. |
* |
*/ |
static void rgb_byte8(void *dst, int rgb) |
static void rgb_323(void *dst, uint32_t rgb) |
{ |
*((uint8_t *) dst) = RED(rgb, 3) << 5 | GREEN(rgb, 2) << 3 | |
BLUE(rgb, 3); |
*((uint8_t *) dst) |
= ~((RED(rgb, 3) << 5) | (GREEN(rgb, 2) << 3) | BLUE(rgb, 3)); |
} |
/** Return pixel color - 8-bit depth (color palette/3:2:3) |
/** Hide logo and refresh screen |
* |
* See the comment for rgb_byte(). |
*/ |
static int byte8_rgb(void *src) |
static void logo_hide(bool silent) |
{ |
int color = *(uint8_t *)src; |
return (((color >> 5) & 0x7) << (16 + 5)) | |
(((color >> 3) & 0x3) << (8 + 6)) | ((color & 0x7) << 5); |
ylogo = 0; |
ytrim = yres; |
rowtrim = rows; |
if (!silent) |
fb_redraw(); |
} |
static void putpixel(unsigned int x, unsigned int y, int color) |
{ |
(*rgb2scr)(&fbaddress[POINTPOS(x, y)], COLOR(color)); |
if (dbbuffer) { |
int dline = (y + dboffset) % yres; |
(*rgb2scr)(&dbbuffer[POINTPOS(x, dline)], COLOR(color)); |
} |
} |
/** Get pixel from viewport */ |
static int getpixel(unsigned int x, unsigned int y) |
/** Draw character at given position |
* |
*/ |
static void glyph_draw(uint16_t glyph, unsigned int col, unsigned int row, bool silent, bool overlay) |
{ |
if (dbbuffer) { |
int dline = (y + dboffset) % yres; |
return COLOR((*scr2rgb)(&dbbuffer[POINTPOS(x, dline)])); |
unsigned int x = COL2X(col); |
unsigned int y = ROW2Y(row); |
unsigned int yd; |
if (y >= ytrim) |
logo_hide(silent); |
if (!overlay) |
backbuf[BB_POS(col, row)] = glyph; |
if (!silent) { |
for (yd = 0; yd < FONT_SCANLINES; yd++) |
memcpy(&fb_addr[FB_POS(x, y + yd + ylogo)], |
&glyphs[GLYPH_POS(glyph, yd)], glyphscanline); |
} |
return COLOR((*scr2rgb)(&fbaddress[POINTPOS(x, y)])); |
} |
/** Fill screen with background color */ |
static void clear_screen(void) |
/** Scroll screen down by one row |
* |
* |
*/ |
static void screen_scroll(bool silent) |
{ |
unsigned int y; |
for (y = 0; y < yres; y++) { |
memcpy(&fbaddress[scanline * y], blankline, xres * pixelbytes); |
if (dbbuffer) |
memcpy(&dbbuffer[scanline * y], blankline, |
xres * pixelbytes); |
if (ylogo > 0) { |
logo_hide(silent); |
return; |
} |
} |
/** Scroll screen one row up */ |
static void scroll_screen(void) |
{ |
if (dbbuffer) { |
count_t first; |
if (!silent) { |
unsigned int row; |
/* Clear the last row */ |
memcpy(&dbbuffer[dboffset * scanline], blankline, ROW_BYTES); |
dboffset = (dboffset + FONT_SCANLINES) % yres; |
first = yres - dboffset; |
/* Move all rows one row up */ |
if (xres * pixelbytes == scanline) { |
memcpy(fbaddress, &dbbuffer[dboffset * scanline], |
first * scanline); |
memcpy(&fbaddress[first * scanline], dbbuffer, |
dboffset * scanline); |
} else { |
/* |
* When the scanline is bigger than number of bytes |
* in the X-resolution, chances are that the |
* frame buffer memory past the X-resolution is special |
* in some way. For example, the SUNW,ffb framebuffer |
* wraps this area around the beginning of the same |
* line. To avoid troubles, copy only memory as |
* specified by the resolution. |
*/ |
unsigned int i; |
for (i = 0; i < first; i++) |
memcpy(&fbaddress[i * scanline], |
&dbbuffer[(dboffset + i) * scanline], |
xres * pixelbytes); |
for (i = 0; i < dboffset; i++) |
memcpy(&fbaddress[(first + i) * scanline], |
&dbbuffer[i * scanline], xres * pixelbytes); |
for (row = 0; row < rows; row++) { |
unsigned int y = ROW2Y(row); |
unsigned int yd; |
for (yd = 0; yd < FONT_SCANLINES; yd++) { |
unsigned int x; |
unsigned int col; |
for (col = 0, x = 0; col < cols; col++, |
x += FONT_WIDTH) { |
uint16_t glyph; |
if (row < rows - 1) { |
if (backbuf[BB_POS(col, row)] == |
backbuf[BB_POS(col, row + 1)]) |
continue; |
glyph = backbuf[BB_POS(col, row + 1)]; |
} else |
glyph = 0; |
memcpy(&fb_addr[FB_POS(x, y + yd)], |
&glyphs[GLYPH_POS(glyph, yd)], |
glyphscanline); |
} |
} |
} |
} else { |
uint8_t *lastline = &fbaddress[(rows - 1) * ROW_BYTES]; |
if (xres * pixelbytes == scanline) { |
/* Move all rows one row up */ |
memcpy((void *) fbaddress, |
(void *) &fbaddress[ROW_BYTES], |
scanline * yres - ROW_BYTES); |
/* Clear the last row */ |
memcpy((void *) lastline, (void *) blankline, |
ROW_BYTES); |
} else { |
/* |
* See the comment in the dbbuffer case. |
*/ |
unsigned int i; |
/* Move all rows one row up */ |
for (i = 0; i < yres - FONT_SCANLINES; i++) |
memcpy(&fbaddress[i * scanline], |
&fbaddress[(i + FONT_SCANLINES) * scanline], |
xres * pixelbytes); |
/* Clear the last row */ |
for (i = 0; i < FONT_SCANLINES; i++) |
memcpy(&lastline[i * scanline], |
&blankline[i * scanline], |
xres * pixelbytes); |
} |
} |
memmove(backbuf, &backbuf[BB_POS(0, 1)], cols * (rows - 1) * sizeof(uint16_t)); |
memsetw(&backbuf[BB_POS(0, rows - 1)], cols, 0); |
} |
static void invert_pixel(unsigned int x, unsigned int y) |
static void cursor_put(bool silent) |
{ |
putpixel(x, y, ~getpixel(x, y)); |
unsigned int col = position % cols; |
unsigned int row = position / cols; |
glyph_draw(fb_font_glyph(U_CURSOR), col, row, silent, true); |
} |
/** Draw one line of glyph at a given position */ |
static void draw_glyph_line(unsigned int glline, unsigned int x, unsigned int y) |
static void cursor_remove(bool silent) |
{ |
unsigned int i; |
for (i = 0; i < 8; i++) |
if (glline & (1 << (7 - i))) { |
putpixel(x + i, y, FGCOLOR); |
} else |
putpixel(x + i, y, BGCOLOR); |
unsigned int col = position % cols; |
unsigned int row = position / cols; |
glyph_draw(backbuf[BB_POS(col, row)], col, row, silent, true); |
} |
/***************************************************************/ |
/* Character-console functions */ |
/** Draw character at given position */ |
static void draw_glyph(uint8_t glyph, unsigned int col, unsigned int row) |
{ |
unsigned int y; |
for (y = 0; y < FONT_SCANLINES; y++) |
draw_glyph_line(fb_font[glyph * FONT_SCANLINES + y], |
col * COL_WIDTH, row * FONT_SCANLINES + y); |
} |
/** Invert character at given position */ |
static void invert_char(unsigned int col, unsigned int row) |
{ |
unsigned int x; |
unsigned int y; |
for (x = 0; x < COL_WIDTH; x++) |
for (y = 0; y < FONT_SCANLINES; y++) |
invert_pixel(col * COL_WIDTH + x, |
row * FONT_SCANLINES + y); |
} |
/** Draw character at default position */ |
static void draw_char(char chr) |
{ |
draw_glyph(chr, position % columns, position / columns); |
} |
static void draw_logo(unsigned int startx, unsigned int starty) |
{ |
unsigned int x; |
unsigned int y; |
unsigned int byte; |
unsigned int rowbytes; |
rowbytes = (helenos_width - 1) / 8 + 1; |
for (y = 0; y < helenos_height; y++) |
for (x = 0; x < helenos_width; x++) { |
byte = helenos_bits[rowbytes * y + x / 8]; |
byte >>= x % 8; |
if (byte & 1) |
putpixel(startx + x, starty + y, |
COLOR(LOGOCOLOR)); |
} |
} |
/***************************************************************/ |
/* Stdout specific functions */ |
static void invert_cursor(void) |
{ |
invert_char(position % columns, position / columns); |
} |
/** Print character to screen |
* |
* Emulate basic terminal commands |
* Emulate basic terminal commands. |
* |
*/ |
static void fb_putchar(chardev_t *dev, char ch) |
static void fb_putchar(outdev_t *dev, wchar_t ch, bool silent) |
{ |
spinlock_lock(&fb_lock); |
switch (ch) { |
case '\n': |
invert_cursor(); |
position += columns; |
position -= position % columns; |
cursor_remove(silent); |
position += cols; |
position -= position % cols; |
break; |
case '\r': |
invert_cursor(); |
position -= position % columns; |
cursor_remove(silent); |
position -= position % cols; |
break; |
case '\b': |
invert_cursor(); |
if (position % columns) |
cursor_remove(silent); |
if (position % cols) |
position--; |
break; |
case '\t': |
invert_cursor(); |
cursor_remove(silent); |
do { |
draw_char(' '); |
glyph_draw(fb_font_glyph(' '), position % cols, |
position / cols, silent, false); |
position++; |
} while ((position % 8) && position < columns * rows); |
} while ((position % 8) && (position < cols * rows)); |
break; |
default: |
draw_char(ch); |
glyph_draw(fb_font_glyph(ch), position % cols, |
position / cols, silent, false); |
position++; |
} |
if (position >= columns * rows) { |
position -= columns; |
scroll_screen(); |
if (position >= cols * rows) { |
position -= cols; |
screen_scroll(silent); |
} |
invert_cursor(); |
cursor_put(silent); |
spinlock_unlock(&fb_lock); |
} |
static chardev_t framebuffer; |
static chardev_operations_t fb_ops = { |
.write = fb_putchar, |
static outdev_t fb_console; |
static outdev_operations_t fb_ops = { |
.write = fb_putchar |
}; |
/** Initialize framebuffer as a chardev output device |
/** Render glyphs |
* |
* @param props Properties of the framebuffer device. |
* Convert glyphs from device independent font |
* description to current visual representation. |
* |
*/ |
static void glyphs_render(void) |
{ |
/* Prerender glyphs */ |
uint16_t glyph; |
for (glyph = 0; glyph < FONT_GLYPHS; glyph++) { |
uint32_t fg_color; |
if (glyph == FONT_GLYPHS - 1) |
fg_color = INV_COLOR; |
else |
fg_color = FG_COLOR; |
unsigned int y; |
for (y = 0; y < FONT_SCANLINES; y++) { |
unsigned int x; |
for (x = 0; x < FONT_WIDTH; x++) { |
void *dst = &glyphs[GLYPH_POS(glyph, y) + |
x * pixelbytes]; |
uint32_t rgb = (fb_font[glyph][y] & |
(1 << (7 - x))) ? fg_color : BG_COLOR; |
rgb_conv(dst, rgb); |
} |
} |
} |
/* Prerender background scanline */ |
unsigned int x; |
for (x = 0; x < xres; x++) |
rgb_conv(&bgscan[x * pixelbytes], BG_COLOR); |
} |
/** Refresh the screen |
* |
*/ |
void fb_redraw(void) |
{ |
if (ylogo > 0) { |
unsigned int y; |
for (y = 0; y < LOGO_HEIGHT; y++) { |
unsigned int x; |
for (x = 0; x < xres; x++) |
rgb_conv(&fb_addr[FB_POS(x, y)], |
(x < LOGO_WIDTH) ? |
fb_logo[y * LOGO_WIDTH + x] : |
LOGO_COLOR); |
} |
} |
unsigned int row; |
for (row = 0; row < rowtrim; row++) { |
unsigned int y = ylogo + ROW2Y(row); |
unsigned int yd; |
for (yd = 0; yd < FONT_SCANLINES; yd++) { |
unsigned int x; |
unsigned int col; |
for (col = 0, x = 0; col < cols; |
col++, x += FONT_WIDTH) { |
uint16_t glyph = backbuf[BB_POS(col, row)]; |
void *dst = &fb_addr[FB_POS(x, y + yd)]; |
void *src = &glyphs[GLYPH_POS(glyph, yd)]; |
memcpy(dst, src, glyphscanline); |
} |
} |
} |
if (COL2X(cols) < xres) { |
unsigned int y; |
unsigned int size = (xres - COL2X(cols)) * pixelbytes; |
for (y = ylogo; y < yres; y++) |
memcpy(&fb_addr[FB_POS(COL2X(cols), y)], bgscan, size); |
} |
if (ROW2Y(rowtrim) + ylogo < yres) { |
unsigned int y; |
for (y = ROW2Y(rowtrim) + ylogo; y < yres; y++) |
memcpy(&fb_addr[FB_POS(0, y)], bgscan, bgscanbytes); |
} |
} |
/** Initialize framebuffer as a output character device |
* |
* @param addr Physical address of the framebuffer |
* @param x Screen width in pixels |
* @param y Screen height in pixels |
* @param scan Bytes per one scanline |
* @param visual Color model |
* |
*/ |
void fb_init(fb_properties_t *props) |
{ |
switch (props->visual) { |
case VISUAL_INDIRECT_8: |
rgb2scr = rgb_byte8; |
scr2rgb = byte8_rgb; |
rgb_conv = rgb_323; |
pixelbytes = 1; |
break; |
case VISUAL_RGB_5_5_5: |
rgb2scr = rgb_byte555; |
scr2rgb = byte555_rgb; |
rgb_conv = rgb_555; |
pixelbytes = 2; |
break; |
case VISUAL_RGB_5_6_5: |
rgb2scr = rgb_byte565; |
scr2rgb = byte565_rgb; |
rgb_conv = rgb_565; |
pixelbytes = 2; |
break; |
case VISUAL_RGB_8_8_8: |
rgb2scr = rgb_byte888; |
scr2rgb = byte888_rgb; |
rgb_conv = rgb_888; |
pixelbytes = 3; |
break; |
case VISUAL_BGR_8_8_8: |
rgb_conv = bgr_888; |
pixelbytes = 3; |
break; |
case VISUAL_RGB_8_8_8_0: |
rgb2scr = rgb_byte888; |
scr2rgb = byte888_rgb; |
rgb_conv = rgb_888; |
pixelbytes = 4; |
break; |
case VISUAL_RGB_0_8_8_8: |
rgb2scr = rgb_byte0888; |
scr2rgb = byte0888_rgb; |
rgb_conv = rgb_0888; |
pixelbytes = 4; |
break; |
case VISUAL_BGR_0_8_8_8: |
rgb2scr = bgr_byte0888; |
scr2rgb = byte0888_bgr; |
rgb_conv = bgr_0888; |
pixelbytes = 4; |
break; |
default: |
panic("Unsupported visual.\n"); |
panic("Unsupported visual."); |
} |
unsigned int fbsize = props->scan * props->y; |
/* Map the framebuffer */ |
fbaddress = (uint8_t *) hw_map((uintptr_t) props->addr + props->offset, |
fbsize); |
fbaddress += props->offset; |
xres = props->x; |
yres = props->y; |
scanline = props->scan; |
rows = props->y / FONT_SCANLINES; |
columns = props->x / COL_WIDTH; |
fb_parea.pbase = (uintptr_t) props->addr; |
fb_parea.vbase = (uintptr_t) fbaddress; |
fb_parea.frames = SIZE2FRAMES(fbsize); |
fb_parea.cacheable = false; |
ddi_parea_register(&fb_parea); |
cols = X2COL(xres); |
rows = Y2ROW(yres); |
if (yres > ylogo) { |
ylogo = LOGO_HEIGHT; |
rowtrim = rows - Y2ROW(ylogo); |
if (ylogo % FONT_SCANLINES > 0) |
rowtrim--; |
ytrim = ROW2Y(rowtrim); |
} else { |
ylogo = 0; |
ytrim = yres; |
rowtrim = rows; |
} |
glyphscanline = FONT_WIDTH * pixelbytes; |
glyphbytes = ROW2Y(glyphscanline); |
bgscanbytes = xres * pixelbytes; |
size_t fbsize = scanline * yres; |
size_t bbsize = cols * rows * sizeof(uint16_t); |
size_t glyphsize = FONT_GLYPHS * glyphbytes; |
backbuf = (uint16_t *) malloc(bbsize, 0); |
if (!backbuf) |
panic("Unable to allocate backbuffer."); |
glyphs = (uint8_t *) malloc(glyphsize, 0); |
if (!glyphs) |
panic("Unable to allocate glyphs."); |
bgscan = malloc(bgscanbytes, 0); |
if (!bgscan) |
panic("Unable to allocate background pixel."); |
memsetw(backbuf, cols * rows, 0); |
glyphs_render(); |
fb_addr = (uint8_t *) hw_map((uintptr_t) props->addr, fbsize); |
sysinfo_set_item_val("fb", NULL, true); |
sysinfo_set_item_val("fb.kind", NULL, 1); |
sysinfo_set_item_val("fb.width", NULL, xres); |
sysinfo_set_item_val("fb.height", NULL, yres); |
sysinfo_set_item_val("fb.scanline", NULL, props->scan); |
sysinfo_set_item_val("fb.scanline", NULL, scanline); |
sysinfo_set_item_val("fb.visual", NULL, props->visual); |
sysinfo_set_item_val("fb.address.physical", NULL, props->addr); |
sysinfo_set_item_val("fb.offset", NULL, props->offset); |
sysinfo_set_item_val("fb.invert-colors", NULL, invert_colors); |
/* Allocate double buffer */ |
unsigned int order = fnzb(SIZE2FRAMES(fbsize) - 1) + 1; |
dbbuffer = (uint8_t *) frame_alloc(order, FRAME_ATOMIC | FRAME_KA); |
if (!dbbuffer) |
printf("Failed to allocate scroll buffer.\n"); |
dboffset = 0; |
/* Initialized blank line */ |
blankline = (uint8_t *) malloc(ROW_BYTES, FRAME_ATOMIC); |
if (!blankline) |
panic("Failed to allocate blank line for framebuffer."); |
unsigned int x, y; |
for (y = 0; y < FONT_SCANLINES; y++) |
for (x = 0; x < xres; x++) |
(*rgb2scr)(&blankline[POINTPOS(x, y)], COLOR(BGCOLOR)); |
clear_screen(); |
/* Update size of screen to match text area */ |
yres = rows * FONT_SCANLINES; |
draw_logo(xres - helenos_width, 0); |
invert_cursor(); |
chardev_initialize("fb", &framebuffer, &fb_ops); |
stdout = &framebuffer; |
fb_redraw(); |
outdev_initialize("fb", &fb_console, &fb_ops); |
stdout = &fb_console; |
} |
/** @} |
//branches/tracing/kernel/genarch/src/fb/font-8x16.c |
---|
1,5 → 1,6 |
/* |
* Copyright (c) 2005 Martin Decky |
* Copyright (c) 2000 Dmitry Bolkhovityanov |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
26,7 → 27,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
34,4616 → 35,3235 |
#include <genarch/fb/font-8x16.h> |
unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES] = { |
/** Convert character to font glyph index |
* |
* The font does not cover all Unicode characters. |
* This function converts the character to an appropriate |
* glyph in the font or returns an index to the question |
* mark glyph if no specific glyph exists. |
*/ |
uint16_t fb_font_glyph(const wchar_t ch) |
{ |
if (ch == 0x0000) |
return 0; |
if ((ch >= 0x0020) && (ch <= 0x007f)) |
return (ch - 32); |
if ((ch >= 0x00a0) && (ch <= 0x021f)) |
return (ch - 64); |
if ((ch >= 0x0222) && (ch <= 0x0233)) |
return (ch - 66); |
if ((ch >= 0x0250) && (ch <= 0x02ad)) |
return (ch - 94); |
if ((ch >= 0x02b0) && (ch <= 0x02cf)) |
return (ch - 96); |
if ((ch >= 0x02d8) && (ch <= 0x02dd)) |
return (ch - 104); |
if (ch == 0x02ee) |
return 630; |
if ((ch >= 0x0300) && (ch <= 0x0301)) |
return (ch - 137); |
if (ch == 0x0303) |
return 633; |
if (ch == 0x0309) |
return 634; |
if ((ch >= 0x0312) && (ch <= 0x0314)) |
return (ch - 151); |
if (ch == 0x0323) |
return 638; |
if ((ch >= 0x0340) && (ch <= 0x0341)) |
return (ch - 193); |
if ((ch >= 0x0374) && (ch <= 0x0375)) |
return (ch - 243); |
if (ch == 0x037a) |
return 643; |
if (ch == 0x037e) |
return 644; |
if ((ch >= 0x0384) && (ch <= 0x038a)) |
return (ch - 255); |
if (ch == 0x038c) |
return 652; |
if ((ch >= 0x038e) && (ch <= 0x03a1)) |
return (ch - 257); |
if ((ch >= 0x03a3) && (ch <= 0x03ce)) |
return (ch - 258); |
if ((ch >= 0x03d0) && (ch <= 0x03d7)) |
return (ch - 259); |
if ((ch >= 0x03da) && (ch <= 0x03f3)) |
return (ch - 261); |
if ((ch >= 0x0400) && (ch <= 0x0486)) |
return (ch - 273); |
if ((ch >= 0x0488) && (ch <= 0x04ce)) |
return (ch - 274); |
if ((ch >= 0x04d0) && (ch <= 0x04f5)) |
return (ch - 275); |
if ((ch >= 0x04f8) && (ch <= 0x04f9)) |
return (ch - 277); |
if ((ch >= 0x0500) && (ch <= 0x050f)) |
return (ch - 283); |
if ((ch >= 0x0530) && (ch <= 0x0556)) |
return (ch - 315); |
if ((ch >= 0x0559) && (ch <= 0x055f)) |
return (ch - 317); |
if ((ch >= 0x0561) && (ch <= 0x0587)) |
return (ch - 318); |
if ((ch >= 0x0589) && (ch <= 0x058a)) |
return (ch - 319); |
if ((ch >= 0x0591) && (ch <= 0x05a1)) |
return (ch - 325); |
if ((ch >= 0x05a3) && (ch <= 0x05b9)) |
return (ch - 326); |
if ((ch >= 0x05bb) && (ch <= 0x05c4)) |
return (ch - 327); |
if ((ch >= 0x05d0) && (ch <= 0x05ea)) |
return (ch - 338); |
if ((ch >= 0x05f0) && (ch <= 0x05f4)) |
return (ch - 343); |
if (ch == 0x060c) |
return 1182; |
if (ch == 0x061b) |
return 1183; |
if (ch == 0x061f) |
return 1184; |
if ((ch >= 0x0621) && (ch <= 0x063a)) |
return (ch - 384); |
if ((ch >= 0x0640) && (ch <= 0x0655)) |
return (ch - 389); |
if ((ch >= 0x0660) && (ch <= 0x066d)) |
return (ch - 399); |
if ((ch >= 0x0670) && (ch <= 0x06ed)) |
return (ch - 401); |
if ((ch >= 0x06f0) && (ch <= 0x06fe)) |
return (ch - 403); |
if (ch == 0x10d3) |
return 1388; |
if (ch == 0x10d7) |
return 1389; |
if (ch == 0x10da) |
return 1390; |
if (ch == 0x10dd) |
return 1391; |
if (ch == 0x10e6) |
return 1392; |
if ((ch >= 0x1e00) && (ch <= 0x1e9b)) |
return (ch - 6287); |
if ((ch >= 0x1ea0) && (ch <= 0x1ef9)) |
return (ch - 6291); |
if ((ch >= 0x1f00) && (ch <= 0x1f07)) |
return (ch - 6297); |
if ((ch >= 0x2000) && (ch <= 0x2027)) |
return (ch - 6545); |
if ((ch >= 0x2030) && (ch <= 0x2046)) |
return (ch - 6553); |
if ((ch >= 0x2048) && (ch <= 0x204d)) |
return (ch - 6554); |
if (ch == 0x2070) |
return 1716; |
if ((ch >= 0x2074) && (ch <= 0x208f)) |
return (ch - 6591); |
if ((ch >= 0x20a0) && (ch <= 0x20af)) |
return (ch - 6607); |
if ((ch >= 0x2100) && (ch <= 0x213a)) |
return (ch - 6687); |
if ((ch >= 0x2153) && (ch <= 0x2183)) |
return (ch - 6711); |
if ((ch >= 0x2190) && (ch <= 0x21f3)) |
return (ch - 6723); |
if ((ch >= 0x2200) && (ch <= 0x22f1)) |
return (ch - 6735); |
if (ch == 0x2300) |
return 2211; |
if (ch == 0x2302) |
return 2212; |
if ((ch >= 0x2308) && (ch <= 0x230b)) |
return (ch - 6755); |
if (ch == 0x2310) |
return 2217; |
if (ch == 0x2318) |
return 2218; |
if ((ch >= 0x231a) && (ch <= 0x231b)) |
return (ch - 6767); |
if ((ch >= 0x2320) && (ch <= 0x2321)) |
return (ch - 6771); |
if ((ch >= 0x2329) && (ch <= 0x232a)) |
return (ch - 6778); |
if ((ch >= 0x239b) && (ch <= 0x23bd)) |
return (ch - 6890); |
if (ch == 0x23ce) |
return 2260; |
if ((ch >= 0x2409) && (ch <= 0x240d)) |
return (ch - 6964); |
if ((ch >= 0x2423) && (ch <= 0x2424)) |
return (ch - 6985); |
if (ch == 0x2426) |
return 2268; |
if ((ch >= 0x2500) && (ch <= 0x2595)) |
return (ch - 7203); |
if ((ch >= 0x25a0) && (ch <= 0x25f7)) |
return (ch - 7213); |
if ((ch >= 0x2600) && (ch <= 0x2602)) |
return (ch - 7221); |
if ((ch >= 0x2605) && (ch <= 0x260d)) |
return (ch - 7223); |
if ((ch >= 0x2610) && (ch <= 0x2613)) |
return (ch - 7225); |
if (ch == 0x2620) |
return 2523; |
if (ch == 0x2622) |
return 2524; |
if (ch == 0x2626) |
return 2525; |
if ((ch >= 0x2628) && (ch <= 0x262b)) |
return (ch - 7242); |
if ((ch >= 0x262e) && (ch <= 0x2637)) |
return (ch - 7244); |
if ((ch >= 0x2639) && (ch <= 0x2653)) |
return (ch - 7245); |
if ((ch >= 0x2660) && (ch <= 0x2667)) |
return (ch - 7257); |
if ((ch >= 0x2669) && (ch <= 0x266f)) |
return (ch - 7258); |
if ((ch >= 0xfb00) && (ch <= 0xfb05)) |
return (ch - 61674); |
if ((ch >= 0xfb50) && (ch <= 0xfbb1)) |
return (ch - 61748); |
if ((ch >= 0xfbd3) && (ch <= 0xfbe9)) |
return (ch - 61781); |
if ((ch >= 0xfbfc) && (ch <= 0xfbff)) |
return (ch - 61799); |
if ((ch >= 0xfc5b) && (ch <= 0xfc63)) |
return (ch - 61890); |
if (ch == 0xfc90) |
return 2722; |
if ((ch >= 0xfcf2) && (ch <= 0xfcf4)) |
return (ch - 62031); |
if ((ch >= 0xfd3c) && (ch <= 0xfd3f)) |
return (ch - 62102); |
if (ch == 0xfdf2) |
return 2730; |
if ((ch >= 0xfe50) && (ch <= 0xfe52)) |
return (ch - 62373); |
if ((ch >= 0xfe54) && (ch <= 0xfe66)) |
return (ch - 62374); |
if ((ch >= 0xfe68) && (ch <= 0xfe6b)) |
return (ch - 62375); |
if ((ch >= 0xfe70) && (ch <= 0xfe72)) |
return (ch - 62379); |
if (ch == 0xfe74) |
return 2760; |
if ((ch >= 0xfe76) && (ch <= 0xfefc)) |
return (ch - 62381); |
if (ch == 0xfeff) |
return 2896; |
return 2898; |
} |
/* 0 0x00 '^@' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 1 0x01 '^A' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x81, /* 10000001 */ |
0xa5, /* 10100101 */ |
0x81, /* 10000001 */ |
0x81, /* 10000001 */ |
0xbd, /* 10111101 */ |
0x99, /* 10011001 */ |
0x81, /* 10000001 */ |
0x81, /* 10000001 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 2 0x02 '^B' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0xff, /* 11111111 */ |
0xdb, /* 11011011 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xc3, /* 11000011 */ |
0xe7, /* 11100111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 3 0x03 '^C' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x6c, /* 01101100 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0x7c, /* 01111100 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 4 0x04 '^D' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x7c, /* 01111100 */ |
0xfe, /* 11111110 */ |
0x7c, /* 01111100 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 5 0x05 '^E' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0xe7, /* 11100111 */ |
0xe7, /* 11100111 */ |
0xe7, /* 11100111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 6 0x06 '^F' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x7e, /* 01111110 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 7 0x07 '^G' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 8 0x08 '^H' */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xe7, /* 11100111 */ |
0xc3, /* 11000011 */ |
0xc3, /* 11000011 */ |
0xe7, /* 11100111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
/* 9 0x09 '^I' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x42, /* 01000010 */ |
0x42, /* 01000010 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 10 0x0a '^J' */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xc3, /* 11000011 */ |
0x99, /* 10011001 */ |
0xbd, /* 10111101 */ |
0xbd, /* 10111101 */ |
0x99, /* 10011001 */ |
0xc3, /* 11000011 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
/* 11 0x0b '^K' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1e, /* 00011110 */ |
0x0e, /* 00001110 */ |
0x1a, /* 00011010 */ |
0x32, /* 00110010 */ |
0x78, /* 01111000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 12 0x0c '^L' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 13 0x0d '^M' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3f, /* 00111111 */ |
0x33, /* 00110011 */ |
0x3f, /* 00111111 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x70, /* 01110000 */ |
0xf0, /* 11110000 */ |
0xe0, /* 11100000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 14 0x0e '^N' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7f, /* 01111111 */ |
0x63, /* 01100011 */ |
0x7f, /* 01111111 */ |
0x63, /* 01100011 */ |
0x63, /* 01100011 */ |
0x63, /* 01100011 */ |
0x63, /* 01100011 */ |
0x67, /* 01100111 */ |
0xe7, /* 11100111 */ |
0xe6, /* 11100110 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 15 0x0f '^O' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xdb, /* 11011011 */ |
0x3c, /* 00111100 */ |
0xe7, /* 11100111 */ |
0x3c, /* 00111100 */ |
0xdb, /* 11011011 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 16 0x10 '^P' */ |
0x00, /* 00000000 */ |
0x80, /* 10000000 */ |
0xc0, /* 11000000 */ |
0xe0, /* 11100000 */ |
0xf0, /* 11110000 */ |
0xf8, /* 11111000 */ |
0xfe, /* 11111110 */ |
0xf8, /* 11111000 */ |
0xf0, /* 11110000 */ |
0xe0, /* 11100000 */ |
0xc0, /* 11000000 */ |
0x80, /* 10000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 17 0x11 '^Q' */ |
0x00, /* 00000000 */ |
0x02, /* 00000010 */ |
0x06, /* 00000110 */ |
0x0e, /* 00001110 */ |
0x1e, /* 00011110 */ |
0x3e, /* 00111110 */ |
0xfe, /* 11111110 */ |
0x3e, /* 00111110 */ |
0x1e, /* 00011110 */ |
0x0e, /* 00001110 */ |
0x06, /* 00000110 */ |
0x02, /* 00000010 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 18 0x12 '^R' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 19 0x13 '^S' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 20 0x14 '^T' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7f, /* 01111111 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0x7b, /* 01111011 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 21 0x15 '^U' */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0x60, /* 01100000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x0c, /* 00001100 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 22 0x16 '^V' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 23 0x17 '^W' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 24 0x18 '^X' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 25 0x19 '^Y' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 26 0x1a '^Z' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0xfe, /* 11111110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 27 0x1b '^[' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xfe, /* 11111110 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 28 0x1c '^\' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 29 0x1d '^]' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x28, /* 00101000 */ |
0x6c, /* 01101100 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x28, /* 00101000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 30 0x1e '^^' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x7c, /* 01111100 */ |
0x7c, /* 01111100 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 31 0x1f '^_' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0x7c, /* 01111100 */ |
0x7c, /* 01111100 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 32 0x20 ' ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 33 0x21 '!' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 34 0x22 '"' */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x24, /* 00100100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 35 0x23 '#' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 36 0x24 '$' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc2, /* 11000010 */ |
0xc0, /* 11000000 */ |
0x7c, /* 01111100 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x86, /* 10000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 37 0x25 '%' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc2, /* 11000010 */ |
0xc6, /* 11000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc6, /* 11000110 */ |
0x86, /* 10000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 38 0x26 '&' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 39 0x27 ''' */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 40 0x28 '(' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 41 0x29 ')' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 42 0x2a '*' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0xff, /* 11111111 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 43 0x2b '+' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 44 0x2c ',' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 45 0x2d '-' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 46 0x2e '.' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 47 0x2f '/' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x02, /* 00000010 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0x80, /* 10000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 48 0x30 '0' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 49 0x31 '1' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x38, /* 00111000 */ |
0x78, /* 01111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 50 0x32 '2' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 51 0x33 '3' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x3c, /* 00111100 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 52 0x34 '4' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x1c, /* 00011100 */ |
0x3c, /* 00111100 */ |
0x6c, /* 01101100 */ |
0xcc, /* 11001100 */ |
0xfe, /* 11111110 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x1e, /* 00011110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 53 0x35 '5' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xfc, /* 11111100 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 54 0x36 '6' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xfc, /* 11111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 55 0x37 '7' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 56 0x38 '8' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 57 0x39 '9' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7e, /* 01111110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 58 0x3a ':' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 59 0x3b ';' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 60 0x3c '<' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x06, /* 00000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 61 0x3d '=' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 62 0x3e '>' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 63 0x3f '?' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 64 0x40 '@' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xde, /* 11011110 */ |
0xde, /* 11011110 */ |
0xde, /* 11011110 */ |
0xdc, /* 11011100 */ |
0xc0, /* 11000000 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 65 0x41 'A' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 66 0x42 'B' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfc, /* 11111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0xfc, /* 11111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 67 0x43 'C' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0xc2, /* 11000010 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc2, /* 11000010 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 68 0x44 'D' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xf8, /* 11111000 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0xf8, /* 11111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 69 0x45 'E' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x66, /* 01100110 */ |
0x62, /* 01100010 */ |
0x68, /* 01101000 */ |
0x78, /* 01111000 */ |
0x68, /* 01101000 */ |
0x60, /* 01100000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 70 0x46 'F' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x66, /* 01100110 */ |
0x62, /* 01100010 */ |
0x68, /* 01101000 */ |
0x78, /* 01111000 */ |
0x68, /* 01101000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 71 0x47 'G' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0xc2, /* 11000010 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xde, /* 11011110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x66, /* 01100110 */ |
0x3a, /* 00111010 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 72 0x48 'H' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 73 0x49 'I' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 74 0x4a 'J' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1e, /* 00011110 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 75 0x4b 'K' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xe6, /* 11100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0x78, /* 01111000 */ |
0x78, /* 01111000 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0xe6, /* 11100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 76 0x4c 'L' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xf0, /* 11110000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 77 0x4d 'M' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xee, /* 11101110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xd6, /* 11010110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 78 0x4e 'N' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xe6, /* 11100110 */ |
0xf6, /* 11110110 */ |
0xfe, /* 11111110 */ |
0xde, /* 11011110 */ |
0xce, /* 11001110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 79 0x4f 'O' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 80 0x50 'P' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfc, /* 11111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 81 0x51 'Q' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xd6, /* 11010110 */ |
0xde, /* 11011110 */ |
0x7c, /* 01111100 */ |
0x0c, /* 00001100 */ |
0x0e, /* 00001110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 82 0x52 'R' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfc, /* 11111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0xe6, /* 11100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 83 0x53 'S' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x60, /* 01100000 */ |
0x38, /* 00111000 */ |
0x0c, /* 00001100 */ |
0x06, /* 00000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 84 0x54 'T' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x5a, /* 01011010 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 85 0x55 'U' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 86 0x56 'V' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 87 0x57 'W' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xfe, /* 11111110 */ |
0xee, /* 11101110 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 88 0x58 'X' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x7c, /* 01111100 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x7c, /* 01111100 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 89 0x59 'Y' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 90 0x5a 'Z' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0x86, /* 10000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc2, /* 11000010 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 91 0x5b '[' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 92 0x5c '\' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x80, /* 10000000 */ |
0xc0, /* 11000000 */ |
0xe0, /* 11100000 */ |
0x70, /* 01110000 */ |
0x38, /* 00111000 */ |
0x1c, /* 00011100 */ |
0x0e, /* 00001110 */ |
0x06, /* 00000110 */ |
0x02, /* 00000010 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 93 0x5d ']' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 94 0x5e '^' */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 95 0x5f '_' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 96 0x60 '`' */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 97 0x61 'a' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 98 0x62 'b' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xe0, /* 11100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x78, /* 01111000 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 99 0x63 'c' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 100 0x64 'd' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1c, /* 00011100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x3c, /* 00111100 */ |
0x6c, /* 01101100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 101 0x65 'e' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 102 0x66 'f' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1c, /* 00011100 */ |
0x36, /* 00110110 */ |
0x32, /* 00110010 */ |
0x30, /* 00110000 */ |
0x78, /* 01111000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 103 0x67 'g' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x7c, /* 01111100 */ |
0x0c, /* 00001100 */ |
0xcc, /* 11001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
/* 104 0x68 'h' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xe0, /* 11100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x6c, /* 01101100 */ |
0x76, /* 01110110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0xe6, /* 11100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 105 0x69 'i' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 106 0x6a 'j' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x00, /* 00000000 */ |
0x0e, /* 00001110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
/* 107 0x6b 'k' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xe0, /* 11100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0x78, /* 01111000 */ |
0x78, /* 01111000 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0xe6, /* 11100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 108 0x6c 'l' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 109 0x6d 'm' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xec, /* 11101100 */ |
0xfe, /* 11111110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 110 0x6e 'n' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xdc, /* 11011100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 111 0x6f 'o' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 112 0x70 'p' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xdc, /* 11011100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x00, /* 00000000 */ |
/* 113 0x71 'q' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x7c, /* 01111100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x1e, /* 00011110 */ |
0x00, /* 00000000 */ |
/* 114 0x72 'r' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xdc, /* 11011100 */ |
0x76, /* 01110110 */ |
0x66, /* 01100110 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 115 0x73 's' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0x60, /* 01100000 */ |
0x38, /* 00111000 */ |
0x0c, /* 00001100 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 116 0x74 't' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0xfc, /* 11111100 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x36, /* 00110110 */ |
0x1c, /* 00011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 117 0x75 'u' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 118 0x76 'v' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 119 0x77 'w' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 120 0x78 'x' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 121 0x79 'y' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7e, /* 01111110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0xf8, /* 11111000 */ |
0x00, /* 00000000 */ |
/* 122 0x7a 'z' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xcc, /* 11001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 123 0x7b '{' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0e, /* 00001110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x70, /* 01110000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x0e, /* 00001110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 124 0x7c '|' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 125 0x7d '}' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x70, /* 01110000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x0e, /* 00001110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 126 0x7e '~' */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 127 0x7f '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 128 0x80 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0xc2, /* 11000010 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc2, /* 11000010 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 129 0x81 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 130 0x82 '' */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 131 0x83 '' */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 132 0x84 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 133 0x85 ' ' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 134 0x86 '' */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 135 0x87 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x18, /* 00011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 136 0x88 '' */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 137 0x89 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 138 0x8a '' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 139 0x8b '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 140 0x8c '' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 141 0x8d '' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 142 0x8e '' */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 143 0x8f '' */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 144 0x90 '' */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x66, /* 01100110 */ |
0x62, /* 01100010 */ |
0x68, /* 01101000 */ |
0x78, /* 01111000 */ |
0x68, /* 01101000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 145 0x91 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xec, /* 11101100 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x7e, /* 01111110 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0x6e, /* 01101110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 146 0x92 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3e, /* 00111110 */ |
0x6c, /* 01101100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xfe, /* 11111110 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xce, /* 11001110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 147 0x93 '' */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 148 0x94 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 149 0x95 '' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 150 0x96 '' */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x78, /* 01111000 */ |
0xcc, /* 11001100 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 151 0x97 '' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 152 0x98 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7e, /* 01111110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
/* 153 0x99 '' */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 154 0x9a '' */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 155 0x9b '' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 156 0x9c '' */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x64, /* 01100100 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xe6, /* 11100110 */ |
0xfc, /* 11111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 157 0x9d '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 158 0x9e '' */ |
0x00, /* 00000000 */ |
0xf8, /* 11111000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xf8, /* 11111000 */ |
0xc4, /* 11000100 */ |
0xcc, /* 11001100 */ |
0xde, /* 11011110 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 159 0x9f '' */ |
0x00, /* 00000000 */ |
0x0e, /* 00001110 */ |
0x1b, /* 00011011 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xd8, /* 11011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 160 0xa0 ' ' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 161 0xa1 '¡' */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 162 0xa2 '¢' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 163 0xa3 '£' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 164 0xa4 '¤' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0xdc, /* 11011100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 165 0xa5 '¥' */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xe6, /* 11100110 */ |
0xf6, /* 11110110 */ |
0xfe, /* 11111110 */ |
0xde, /* 11011110 */ |
0xce, /* 11001110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 166 0xa6 '¦' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x3e, /* 00111110 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 167 0xa7 '§' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 168 0xa8 '¨' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 169 0xa9 '©' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 170 0xaa 'ª' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 171 0xab '«' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0xe0, /* 11100000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xdc, /* 11011100 */ |
0x86, /* 10000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x3e, /* 00111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 172 0xac '¬' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0xe0, /* 11100000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x66, /* 01100110 */ |
0xce, /* 11001110 */ |
0x9a, /* 10011010 */ |
0x3f, /* 00111111 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 173 0xad '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 174 0xae '®' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x36, /* 00110110 */ |
0x6c, /* 01101100 */ |
0xd8, /* 11011000 */ |
0x6c, /* 01101100 */ |
0x36, /* 00110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 175 0xaf '¯' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xd8, /* 11011000 */ |
0x6c, /* 01101100 */ |
0x36, /* 00110110 */ |
0x6c, /* 01101100 */ |
0xd8, /* 11011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 176 0xb0 '°' */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
/* 177 0xb1 '±' */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
/* 178 0xb2 '²' */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
/* 179 0xb3 '³' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 180 0xb4 '´' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 181 0xb5 'µ' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 182 0xb6 '¶' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf6, /* 11110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 183 0xb7 '·' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 184 0xb8 '¸' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 185 0xb9 '¹' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf6, /* 11110110 */ |
0x06, /* 00000110 */ |
0xf6, /* 11110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 186 0xba 'º' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 187 0xbb '»' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x06, /* 00000110 */ |
0xf6, /* 11110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 188 0xbc '¼' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf6, /* 11110110 */ |
0x06, /* 00000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 189 0xbd '½' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 190 0xbe '¾' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 191 0xbf '¿' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 192 0xc0 'À' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 193 0xc1 'Á' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 194 0xc2 'Â' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 195 0xc3 'Ã' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 196 0xc4 'Ä' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 197 0xc5 'Å' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 198 0xc6 'Æ' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 199 0xc7 'Ç' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x37, /* 00110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 200 0xc8 'È' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x37, /* 00110111 */ |
0x30, /* 00110000 */ |
0x3f, /* 00111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 201 0xc9 'É' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3f, /* 00111111 */ |
0x30, /* 00110000 */ |
0x37, /* 00110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 202 0xca 'Ê' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf7, /* 11110111 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 203 0xcb 'Ë' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0xf7, /* 11110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 204 0xcc 'Ì' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x37, /* 00110111 */ |
0x30, /* 00110000 */ |
0x37, /* 00110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 205 0xcd 'Í' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 206 0xce 'Î' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf7, /* 11110111 */ |
0x00, /* 00000000 */ |
0xf7, /* 11110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 207 0xcf 'Ï' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 208 0xd0 'Ð' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 209 0xd1 'Ñ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 210 0xd2 'Ò' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 211 0xd3 'Ó' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x3f, /* 00111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 212 0xd4 'Ô' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 213 0xd5 'Õ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 214 0xd6 'Ö' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3f, /* 00111111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 215 0xd7 '×' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xff, /* 11111111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 216 0xd8 'Ø' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 217 0xd9 'Ù' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 218 0xda 'Ú' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 219 0xdb 'Û' */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
/* 220 0xdc 'Ü' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
/* 221 0xdd 'Ý' */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
/* 222 0xde 'Þ' */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
/* 223 0xdf 'ß' */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 224 0xe0 'à' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xdc, /* 11011100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 225 0xe1 'á' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xd8, /* 11011000 */ |
0xcc, /* 11001100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xcc, /* 11001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 226 0xe2 'â' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 227 0xe3 'ã' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 228 0xe4 'ä' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 229 0xe5 'å' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 230 0xe6 'æ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
/* 231 0xe7 'ç' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 232 0xe8 'è' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 233 0xe9 'é' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 234 0xea 'ê' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0xee, /* 11101110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 235 0xeb 'ë' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1e, /* 00011110 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x3e, /* 00111110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 236 0xec 'ì' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 237 0xed 'í' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x03, /* 00000011 */ |
0x06, /* 00000110 */ |
0x7e, /* 01111110 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0xf3, /* 11110011 */ |
0x7e, /* 01111110 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 238 0xee 'î' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1c, /* 00011100 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x7c, /* 01111100 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x1c, /* 00011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 239 0xef 'ï' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 240 0xf0 'ð' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 241 0xf1 'ñ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 242 0xf2 'ò' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 243 0xf3 'ó' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 244 0xf4 'ô' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0e, /* 00001110 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 245 0xf5 'õ' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 246 0xf6 'ö' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 247 0xf7 '÷' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 248 0xf8 'ø' */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 249 0xf9 'ù' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 250 0xfa 'ú' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 251 0xfb 'û' */ |
0x00, /* 00000000 */ |
0x0f, /* 00001111 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0xec, /* 11101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x3c, /* 00111100 */ |
0x1c, /* 00011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 252 0xfc 'ü' */ |
0x00, /* 00000000 */ |
0x6c, /* 01101100 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 253 0xfd 'ý' */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x32, /* 00110010 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 254 0xfe 'þ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 255 0xff 'ÿ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
uint8_t fb_font[FONT_GLYPHS][FONT_SCANLINES] = { |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00}, |
{0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x99, 0xa5, 0xa1, 0xa1, 0xa5, 0x99, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x44, 0xba, 0xb2, 0xaa, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0x30, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xf6, 0xc0, 0xc0, 0xc0, 0x00}, |
{0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x30, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0x36, 0xec, 0x18, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x0c, 0x38, 0x00}, |
{0x30, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x3c, 0x42, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0xf6, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7a, 0xc4, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x46, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x6c, 0x66, 0x66, 0x66, 0x66, 0xec, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x30, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0x1c, 0x3c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xc4, 0xce, 0xd6, 0xe6, 0x46, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x30, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x7c, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x0c, 0x18, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x0c, 0x18, 0x0e, 0x00}, |
{0x0c, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0xf6, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x3e, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x18, 0x30, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x6c, 0x38, 0x10, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x6c, 0x38, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x18, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x18, 0x30, 0x30, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x10, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xff, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf8, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7e, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7e, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x3c, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x3c, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x30, 0x1c, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x30, 0x1c, 0x00}, |
{0x18, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf7, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x7b, 0x7b, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x00, 0xee, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf6, 0x06, 0x66, 0x3c, 0x00}, |
{0x08, 0x1c, 0x22, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x0e, 0x1b, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x30, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x30}, |
{0x6c, 0x38, 0x10, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x66, 0x66, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x30, 0x30, 0x30, 0x36, 0x36, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x78, 0xe0, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x1e, 0x78, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x18, 0x18, 0x30}, |
{0x6c, 0x38, 0x10, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x60, 0x60, 0xc0, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0xcc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6e, 0xd8, 0xd8, 0xd8, 0xde, 0xd8, 0xd8, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xd6, 0xd6, 0xde, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x18, 0x18, 0x30}, |
{0x6c, 0x38, 0x10, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x6c, 0x38, 0x10, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x18, 0x0c, 0x38, 0x00}, |
{0x6c, 0x38, 0x10, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x10, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x78, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x78, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0xcc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x30, 0x60, 0x38, 0x00}, |
{0x10, 0x38, 0x44, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf8, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xb3, 0xb3, 0x33, 0x3e, 0x33, 0x33, 0x33, 0x33, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x64, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x62, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xe6, 0xe6, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xe0, 0xe0, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x86, 0x06, 0x06, 0x06, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x03, 0x3e, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x7e, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0xf6, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xb6, 0xb3, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x4c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0x4c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x18, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0xfe, 0xcc, 0x8c, 0x2c, 0x3c, 0x2c, 0x0c, 0x8c, 0xcc, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc2, 0xc0, 0x78, 0xc0, 0xc0, 0xc2, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x00}, |
{0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xe0, 0x00}, |
{0x00, 0x03, 0x3e, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x38, 0x6c, 0x38, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xf3, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x6d, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc8, 0x38, 0x70, 0xd0, 0x38, 0x38, 0x6c, 0x64, 0xc6, 0xc2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0xec, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0xc0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x73, 0xdf, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x73, 0x03, 0x03, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xdf, 0xdb, 0xdb, 0xdb, 0xdb, 0x73, 0x03, 0x03, 0x03, 0x00}, |
{0x00, 0x00, 0x7e, 0xb3, 0xb3, 0x33, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x6c, 0xe6, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x38, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x0c, 0x38, 0x60, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x62, 0x30, 0x18, 0x18, 0x30, 0x62, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x0e, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x0c, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0x7e, 0xfe, 0x9a, 0x58, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x36, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00}, |
{0x03, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0x6c, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x63, 0xb3, 0xb3, 0x33, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x0d, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0xf0, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x7e, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0xfc, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x30, 0x7c, 0x06, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0x60, 0x30, 0x78, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x7c, 0xc0, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x7e, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x60, 0x60, 0x78, 0x0c, 0x06, 0x06, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x60, 0x78, 0x0c, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x18, 0x4c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x70, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x1b, 0x0e, 0x04, 0xf7, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0xdc, 0xf7, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf5, 0xda, 0xd8, 0xdf, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0xf7, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3d, 0x1a, 0x18, 0x7f, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0x6f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xcb, 0xf6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf3, 0x63, 0x60, 0x67, 0x63, 0x63, 0x63, 0x67, 0x6f, 0xff, 0x03, 0x1b, 0x0e, 0x00}, |
{0x00, 0x00, 0xe3, 0x63, 0x60, 0x67, 0x63, 0x63, 0x63, 0x63, 0x63, 0xf3, 0x03, 0x33, 0x1e, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xfb, 0xfb, 0xfb, 0xdb, 0xdb, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xf8, 0xff, 0xfb, 0xfb, 0xdb, 0xdb, 0xdb, 0xdb, 0x03, 0x33, 0x1e, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x00, 0xb7, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x03, 0x33, 0x1e, 0x00}, |
{0x6c, 0x38, 0x10, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x78, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x10, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x30, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x28, 0x10, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x78, 0x30, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x10, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x30, 0x30, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x30, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xdf, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x3e, 0xcc, 0x78, 0x00}, |
{0x6c, 0x38, 0x10, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x6c, 0x38, 0x10, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x6c, 0x38, 0x10, 0xfe, 0x0c, 0x18, 0x30, 0x7c, 0x06, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00}, |
{0x00, 0x1b, 0x0e, 0x04, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0xf7, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xdc, 0xdc, 0xf7, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0xd8, 0xd8, 0xdf, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0xf7, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x7f, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0x6f, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x30, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xdb, 0xfb, 0xdb, 0xdb, 0xdb, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x70, 0x60, 0x60, 0x60, 0x60, 0xe0, 0x00}, |
{0x60, 0x30, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x38, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x38, 0x6c, 0x38, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7a, 0xc4, 0xce, 0xce, 0xd6, 0xe6, 0xe6, 0x46, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7a, 0xc4, 0xce, 0xd6, 0xe6, 0x46, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x3c, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x1c, 0x74, 0x06, 0x06, 0x06, 0x06, 0x1c, 0xf0, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0e, 0x3c, 0x06, 0x06, 0x1c, 0xf0, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc0, 0xfc, 0x06, 0x0c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc0, 0xfc, 0x06, 0x0c, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x7c, 0x00, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x72, 0x9c, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x3c, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x5c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xdc, 0xe6, 0x7c, 0x80, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0d, 0x06, 0x00}, |
{0x00, 0x00, 0x06, 0x0d, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x6c, 0x8e, 0x16, 0x26, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0x78, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xcd, 0x0d, 0x38, 0x0c, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xdc, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x06, 0x06, 0x1f, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x0d, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xce, 0xc6, 0xc6, 0x7a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x46, 0x6c, 0x2c, 0x2c, 0x38, 0x18, 0x18, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x64, 0x28, 0x38, 0x38, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0x6c, 0x0c, 0x0c, 0x0e, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x7b, 0xde, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x78, 0x58, 0x3e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x0e, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x7f, 0x63, 0x66, 0x6c, 0x7e, 0x63, 0xf3, 0x03, 0x33, 0x1e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6e, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0xc0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xd8, 0xd8, 0xde, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xdc, 0x6c, 0x0c, 0x0d, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xcc, 0xcc, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x66, 0x6c, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xfc, 0xc0, 0xd8, 0x70, 0x00}, |
{0x00, 0x00, 0x0e, 0x1b, 0x19, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x98, 0xd8, 0x70, 0x00}, |
{0x00, 0x00, 0x0e, 0x1b, 0x19, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x98, 0xd8, 0x70, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0xd8, 0x70, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x3b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xd6, 0xd6, 0xd6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x06, 0x06, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x66, 0xcb, 0xfe, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x7e, 0xc7, 0x7c, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc3, 0xc3, 0xdb, 0xdb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x76, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x7e, 0xc6, 0xc0, 0xce, 0xc6, 0xc6, 0x7a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0x00, 0x1c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7e, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xcc, 0x6c, 0x3c, 0x3c, 0x6c, 0xcc, 0x0c, 0x0c, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x0d, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x1c, 0x18, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0x70, 0x30, 0xfc, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x7f, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0x6f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x7f, 0xdb, 0xdb, 0xde, 0xde, 0xdb, 0x6b, 0x03, 0x1b, 0x0e, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x7f, 0xd9, 0xda, 0xda, 0xdb, 0xdd, 0x6f, 0x04, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x60, 0x60, 0xf6, 0x6d, 0x6c, 0x66, 0x63, 0x6b, 0x36, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x26, 0x6d, 0x6c, 0xfc, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x3c, 0x0c, 0x2c, 0x18, 0x00}, |
{0x00, 0x00, 0x20, 0x60, 0x60, 0xf6, 0x6d, 0x6c, 0x6c, 0x6e, 0x6d, 0x36, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0xc0, 0xfe, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x03, 0x03, 0x0e, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6d, 0x6c, 0x66, 0x63, 0x6b, 0xf6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6f, 0x6b, 0x63, 0x66, 0x6c, 0x6d, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xd6, 0x7c, 0x6c, 0x28, 0xc6, 0xd6, 0x7c, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xf0, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xc0, 0xf0, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xb0, 0xd8, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x18, 0xd8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x18, 0xd8, 0x68, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xd8, 0xd8, 0xf0, 0xd8, 0xd8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0xd6, 0x7c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd8, 0x78, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0xc0, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x70, 0xc0, 0x70, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0x70, 0x18, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x20, 0x20, 0x70, 0x70, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xd8, 0xd8, 0x70, 0x70, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x1c, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x6c, 0x6c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x34, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00}, |
{0xc0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x34, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x3e, 0x32, 0x30, 0x34, 0x3c, 0x34, 0x30, 0x30, 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x33, 0x33, 0x33, 0x33, 0x3f, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x36, 0x36, 0x36, 0x77, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x82, 0x44, 0x7c, 0x44, 0x00, 0x82, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x62, 0x30, 0x18, 0x18, 0x30, 0x62, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x92, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc0, 0x78, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x6c, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x46, 0x6c, 0x2c, 0x2c, 0x38, 0x18, 0x18, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0x78, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x46, 0x7c, 0x18, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0x20, 0x30, 0x10, 0x38, 0x38, 0x6c, 0x64, 0xc6, 0xc2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xf6, 0xc0, 0xc0, 0xc0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x66, 0x6c, 0x3c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x3c, 0x30, 0x60, 0x3c, 0x60, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x46, 0x2c, 0x2c, 0x18, 0x30, 0x68, 0x68, 0xc4, 0xc2, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x6c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x36, 0x1e, 0xc6, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc2, 0x65, 0x24, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x21, 0x32, 0x12, 0x1c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc2, 0x65, 0x24, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xa6, 0x2c, 0x38, 0x68, 0xca, 0xc4, 0x0c, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x3c, 0x06, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x32, 0x30, 0x30, 0x3c, 0x34, 0x30, 0x30, 0x30, 0x30, 0x00}, |
{0x00, 0x60, 0x30, 0x30, 0x60, 0x63, 0xff, 0xc6, 0x06, 0x0c, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x60, 0x60, 0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xac, 0x26, 0x26, 0x0b, 0x0b, 0x1b, 0x1b, 0x1b, 0x1b, 0x03, 0x02, 0x04, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x18, 0x28, 0x4c, 0x14, 0x24, 0x06, 0x02, 0x02, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x6d, 0x03, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x6d, 0x03, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xd6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x36, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x76, 0x9c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x7c, 0xd6, 0x66, 0x06, 0x06, 0x66, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x3c, 0x60, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x26, 0x1c, 0x70, 0xc0, 0xc2, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0x68, 0x38, 0x30, 0x38, 0x38, 0x4c, 0x4c, 0x86, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xba, 0x30, 0x38, 0x28, 0x4c, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xc0, 0xcc, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xdc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x7e, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x1c, 0x18, 0x7e, 0x58, 0x18, 0x18, 0x18, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xa6, 0x2c, 0x38, 0x68, 0xca, 0xc4, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0x60, 0x3c, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x30, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xb2, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x03, 0x06, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xf8, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xd8, 0xd8, 0xd8, 0xde, 0xdb, 0xdb, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xd8, 0xfe, 0xdb, 0xdb, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xb2, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x18, 0x00, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x38, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xc6, 0x82, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x3c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfe, 0x06, 0x02, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xff, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xb0, 0xb0, 0x30, 0x3c, 0x36, 0x36, 0x36, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xf3, 0xdb, 0xdb, 0xdb, 0xdb, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x86, 0x06, 0x3e, 0x06, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x9c, 0xb6, 0xb6, 0xb6, 0xf6, 0xb6, 0xb6, 0xb6, 0xb6, 0x9c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xcc, 0xcc, 0xcc, 0x7c, 0x6c, 0x6c, 0x6c, 0x6c, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x7c, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xc6, 0x82, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfe, 0x06, 0x02, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xff, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb0, 0x30, 0x3c, 0x36, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xf3, 0xdb, 0xdb, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3e, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0xb6, 0xb6, 0xf6, 0xb6, 0xb6, 0x9c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xcc, 0xcc, 0x7c, 0x6c, 0x6c, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf8, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xf8, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xd8, 0xd8, 0xde, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xfe, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf8, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x38, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0xfc, 0xb4, 0x30, 0x3c, 0x36, 0x36, 0x36, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x30, 0xfc, 0xb4, 0x30, 0x3c, 0x36, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xce, 0xdb, 0xd9, 0xd8, 0xfe, 0xd8, 0xd8, 0xd9, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xdb, 0xd8, 0xfe, 0xd8, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0x6c, 0xfe, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x6c, 0x7c, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x88, 0x8c, 0x9c, 0x96, 0xf6, 0xb6, 0xbf, 0xab, 0xeb, 0xeb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x9c, 0xf6, 0xbe, 0xab, 0xeb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x6c, 0x6c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x6c, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xa3, 0xb2, 0x96, 0xfc, 0x9c, 0xbe, 0xaa, 0xab, 0xeb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x96, 0xfe, 0xab, 0xab, 0xeb, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x7c, 0xc6, 0x06, 0x06, 0x7c, 0x06, 0x06, 0x06, 0x7c, 0xc0, 0x7c, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0x86, 0x06, 0x7c, 0x06, 0x06, 0x7c, 0xc0, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x96, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x96, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc2, 0xc6, 0xc6, 0xc4, 0xcc, 0x6c, 0x68, 0x78, 0x38, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x64, 0x6c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0xc2, 0xc6, 0xc4, 0xc4, 0x6c, 0x68, 0x78, 0x38, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0xc2, 0xc6, 0x64, 0x6c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0xd8, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x6f, 0x03, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x6f, 0x03, 0x06, 0x1c, 0x00}, |
{0x00, 0x10, 0x7c, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0xd6, 0xc6, 0xc6, 0xc6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0x00}, |
{0x04, 0x7c, 0x40, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x7c, 0x40, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x54, 0x00, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0x54, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x3c, 0x0c, 0x0c, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0x78, 0x18, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x3c, 0x0f, 0x18, 0x18, 0xf0, 0x3c, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x7c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x24, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x40, 0x7c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x7c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0xc3, 0x00, 0x66, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x50, 0x46, 0x00, 0x82, 0x41, 0x00, 0x62, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x60, 0xf0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x6e, 0x64, 0x7a, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x6e, 0x64, 0x7a, 0x60, 0x60, 0xf0, 0x00}, |
{0x02, 0x06, 0xfe, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x02, 0x06, 0xfe, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0xf8, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0xf8, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xf6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x78, 0x6c, 0x66, 0xf6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x3c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xdc, 0xf8, 0xdc, 0xd6, 0xd6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xdc, 0xf8, 0xdc, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0xf6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0xf0, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf3, 0xb3, 0xb3, 0x36, 0x3c, 0x3c, 0x36, 0x33, 0x33, 0x73, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0xb6, 0xbc, 0x3c, 0x36, 0x33, 0x73, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xdf, 0xdb, 0xd9, 0xd8, 0xf8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xdb, 0xd9, 0xf8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xd8, 0xd8, 0xd8, 0xde, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x03, 0x0b, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xfe, 0xdb, 0xdb, 0xdb, 0x03, 0x0b, 0x06, 0x00}, |
{0x00, 0x00, 0x7c, 0xc2, 0xcc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xcc, 0x7a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc2, 0xcc, 0xd6, 0xd6, 0xcc, 0x7a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x0c, 0x04, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x0c, 0x04, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x3c, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xf6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0x7e, 0x16, 0x16, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0x7e, 0x16, 0x16, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x33, 0xb3, 0xb3, 0x7f, 0x30, 0x30, 0x30, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xb3, 0x7f, 0x30, 0x30, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x33, 0xb3, 0xb3, 0x7f, 0x30, 0x30, 0x30, 0x33, 0x1e, 0x0c, 0x18, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xb3, 0x7f, 0x30, 0x30, 0x33, 0x1e, 0x0c, 0x18, 0x0e, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0e, 0x0c, 0x08, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x0e, 0x0c, 0x08, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x3c, 0x06, 0x86, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00}, |
{0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x78, 0xcc, 0x86, 0x06, 0x3e, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x3e, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x66, 0xcc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc3, 0xc3, 0xc3, 0xf3, 0xdb, 0xdb, 0xdb, 0xdb, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc3, 0xc3, 0xc3, 0xf3, 0xdb, 0xdb, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x7c, 0xcd, 0xcd, 0xcd, 0xcd, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcd, 0xcd, 0xcd, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x8c, 0x0c, 0x38, 0x0d, 0x0d, 0x0d, 0x0d, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xcc, 0x0c, 0x39, 0x0d, 0x0d, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x3c, 0x06, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6d, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0xcd, 0xcd, 0xcd, 0xcd, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xfd, 0xcd, 0xcd, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xce, 0xc6, 0xc6, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xce, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x1b, 0x1b, 0x1b, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5a, 0x18, 0x1b, 0x1b, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x64, 0x94, 0xba, 0x52, 0x4c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0x7b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x7f, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x7e, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x0c, 0xd8, 0xfe, 0xc3, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7c, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x60, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xcf, 0xd6, 0xd6, 0xd6, 0xd6, 0xcc, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x7f, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7c, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xf6, 0xd6, 0xd6, 0xd6, 0xd6, 0xcc, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0x7f, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0xf0, 0x3c, 0x0e, 0x04, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x6c, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x0c, 0x0c, 0x0c, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x30, 0x60, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcf, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x06, 0x06, 0x7c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x60, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x6c, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x16, 0x16, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x76, 0x1e, 0x0e, 0x0c, 0xd8, 0xfe, 0xc3, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x30, 0x18, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x06, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x63, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xfe, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd0, 0xd0, 0xd0, 0x7c, 0x16, 0x16, 0x16, 0xd6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x3c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x36, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x6a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7f, 0x0c, 0x0c, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0x0c, 0x0c, 0x0c, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x0f, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x0c, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x7e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xcf, 0xd6, 0xd6, 0xcc, 0xc0, 0xc0, 0xc0, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x7f, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xf6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xca, 0xc0, 0xc0, 0xc0, 0x00}, |
{0x00, 0x00, 0x60, 0x38, 0x0c, 0x7f, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x1c, 0x0c, 0x18, 0x3c, 0x64, 0x66, 0x62, 0x63, 0x3d, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x0c, 0x0c, 0x0f, 0x00}, |
{0x00, 0x00, 0x0e, 0x18, 0x30, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0f, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x3e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x3e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7e, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x76, 0x1c, 0x18, 0x30, 0x60, 0x3e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x0f, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0xdc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x76, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xfe, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd0, 0xd0, 0x7c, 0x16, 0x16, 0x16, 0x16, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0xcc, 0xcc, 0xcc, 0x77, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x6c}, |
{0x18, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x38, 0x10, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x60, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x18, 0x0c, 0x00}, |
{0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x74, 0xd6, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x18, 0x30, 0x00}, |
{0x0c, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1b, 0x36, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x44, 0xaa, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x0a, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0x50, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x3c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x6c, 0xd8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x08, 0x30}, |
{0x60, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0xa0, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x10, 0x10}, |
{0x18, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00}, |
{0x48, 0xa8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x33, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x60, 0x66, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x18}, |
{0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x18, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x66, 0x76, 0xdc, 0xcc, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf8, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x0c, 0x0c, 0x0c, 0x1c, 0x36, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xcc, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xee, 0x66, 0x66, 0x66, 0x66, 0x66, 0x2c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf8, 0x4c, 0xcc, 0xcc, 0xec, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x46, 0xc6, 0xc6, 0xe6, 0x06, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xee, 0x66, 0x66, 0x6c, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xee, 0x66, 0x66, 0x34, 0x18, 0x0c, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x66, 0x64, 0x6c, 0x6e, 0x60, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xf6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x66, 0x66, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xcc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xcc, 0x66, 0x66, 0x66, 0xc6, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xcc, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x22, 0x20, 0x10, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x20, 0x1e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x3c, 0x40, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x20, 0x1c, 0x20, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x18, 0x20, 0x1c, 0x20, 0x00, 0x00}, |
{0x00, 0x30, 0x40, 0x38, 0x40, 0x07, 0x08, 0x88, 0x86, 0x81, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x28, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x14, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x88, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x20, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x40, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0a, 0x00, 0x06, 0x09, 0x09, 0x47, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x19, 0x21, 0x19, 0x21, 0x01, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x12, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x40, 0x30, 0x4e, 0x49, 0x39, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x24, 0x00}, |
{0x0c, 0x30, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x12, 0xca, 0x2c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x0c, 0x30, 0x00, 0x00}, |
{0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x14, 0x0c, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00}, |
{0x0a, 0x2a, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x7e, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x10, 0x0c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x0c, 0x10}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x70, 0x70, 0x38, 0x18, 0x18, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x44, 0xfc, 0xf8, 0x60, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4a, 0xfe, 0xf4, 0x60, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x20, 0x40, 0x30, 0x10, 0x20, 0x42, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x2c, 0x44, 0x42, 0x82, 0x82, 0xfe, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xf8, 0x78, 0x08, 0x08, 0x08, 0x0c, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x82, 0xc6, 0xc6, 0x6c, 0x28, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x38, 0x28, 0x6c, 0xc6, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xf8, 0x88, 0xf8, 0x78, 0x08, 0x0c, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x91, 0x92, 0x64, 0x08, 0x10, 0x26, 0x49, 0x89, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x18, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0xfe, 0x7c, 0x38, 0x6c, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x29, 0x5e, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x28, 0x5e, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x06, 0x28, 0x5e, 0x00, 0x00, 0x00}, |
{0x00, 0x07, 0x08, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x04, 0x03, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x04, 0x03, 0x04, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x23, 0x54, 0x33, 0x24, 0x40, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x04, 0x03, 0x04, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x14, 0x40, 0x81, 0x81, 0x7e, 0x08, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x08, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00}, |
{0x06, 0x08, 0x06, 0x08, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x08, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x94, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x88, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x94, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x20, 0x38, 0x28, 0x70, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x08, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x38, 0x28, 0x70, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x08, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x14, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x1c, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x14, 0x08, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x12, 0x04, 0x18, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x14, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x14, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x15, 0x88, 0x88, 0x8a, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x88, 0x88, 0x90, 0x65, 0x00, 0x02, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x00, 0x0a, 0x00, 0x01, 0x15, 0x88, 0x88, 0x90, 0x65, 0x00, 0x02, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x90, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x2a, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x00, 0x50, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00}, |
{0x0a, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x09, 0x47, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x09, 0x09, 0x47, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x01, 0x02, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x20, 0x40, 0x3e, 0x01, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x01, 0x02, 0x05, 0x0b, 0x48, 0x84, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x19, 0x21, 0x19, 0x21, 0x01, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x29, 0x01, 0x19, 0x21, 0x19, 0xa1, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x19, 0x21, 0x19, 0x21, 0x01, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x05, 0x0b, 0x48, 0x84, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xa4, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x44, 0x09, 0xa2, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x08, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x02, 0x2a, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x14, 0x00, 0x08, 0x00}, |
{0x00, 0x08, 0x00, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x04, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x08, 0x14, 0x08, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0x3c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x38, 0x40, 0x38, 0x40, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x40, 0x38, 0x40, 0x00, 0x0c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x12, 0x2c, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x3c, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x18, 0x10, 0x20, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x08, 0x08, 0x08, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x20, 0x47, 0x88, 0x08, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x50, 0x20, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x82, 0x7c, 0x00, 0x08, 0x00, 0x08}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x82, 0x7c, 0x00, 0x14, 0x00, 0x08}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x60, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x80, 0x60, 0x80, 0x08, 0x14, 0x60, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0x40, 0x43, 0x55, 0x7e, 0x80, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x2a, 0x20, 0x26, 0x2a, 0x7c, 0x80, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0e, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x14, 0x08, 0x14, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x2c, 0x10, 0x28, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x15, 0x8a, 0x90, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x5a, 0xa5, 0x66, 0x5b, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x5a, 0x66, 0xa5, 0x5a, 0x00}, |
{0x00, 0x00, 0x18, 0x66, 0x42, 0x42, 0x81, 0x99, 0x99, 0x81, 0x42, 0x42, 0x66, 0x18, 0x00, 0x00}, |
{0x08, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x26, 0x08, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x8a, 0x90, 0x60}, |
{0x32, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x0c, 0x04, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30, 0x40, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x30, 0x40, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x54, 0xaa, 0x92, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x82, 0xfe, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x14, 0x08}, |
{0x08, 0x14, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x10, 0x10, 0x10}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x70, 0x70, 0x38, 0x18, 0x18, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x44, 0xfc, 0xf8, 0x60, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4a, 0xfe, 0xf4, 0x60, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4e, 0xf0, 0xfe, 0x7c, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x38, 0x2c, 0x44, 0x42, 0x82, 0x92, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x60, 0x7e, 0x3c, 0x30, 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x82, 0xc6, 0xc6, 0x6c, 0x28, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x38, 0x28, 0x6c, 0xc6, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xf8, 0x88, 0xf8, 0x78, 0x08, 0x0c, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x01, 0x15, 0x88, 0x88, 0x88, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x40, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x88, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x20, 0x1e, 0x20, 0x00, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x12, 0x3c, 0x40, 0x54, 0x54, 0x54, 0x54, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x4c, 0x30, 0x4c, 0x02, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x64, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xaa, 0xaa, 0xaa, 0x82, 0x82, 0x40, 0x30, 0x4c, 0x02, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x82, 0x82, 0x44, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x82, 0x82, 0x40, 0x30, 0x4c, 0x02, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x38, 0x6c, 0x38}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x38, 0x6c, 0x38}, |
{0x18, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x0c, 0xec, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x7c, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x30, 0x30, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x60, 0x0c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x30, 0x18, 0x70, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x30, 0x18, 0x70, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x10, 0x38, 0x6c, 0x00}, |
{0x60, 0x30, 0x00, 0x7c, 0x00, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0x00, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x76, 0xdc, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x76, 0xdc, 0x00}, |
{0x6c, 0x38, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x18, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x38, 0x6c, 0x64, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0c, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x60, 0x30, 0xe0, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x30, 0x18, 0x70, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x76, 0xdc, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x76, 0xdc, 0x00}, |
{0x0c, 0x18, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x0c, 0xec, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x7c, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x7c, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x10, 0x38, 0x6c, 0x00}, |
{0x0c, 0x18, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x10, 0x38, 0x6c, 0x00}, |
{0x0c, 0x18, 0x72, 0x9c, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x00, 0x72, 0x9c, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x18, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x18, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x7c, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x7c, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x60, 0x6c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0x70, 0x1c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x60, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x44, 0x38, 0x10, 0x7c, 0xc6, 0xc6, 0x70, 0x1c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x44, 0x38, 0x10, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x18, 0x18, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x16, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x08, 0x1c, 0x36, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x6c, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x6c, 0x6c, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x76, 0xdc, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x76, 0xdc, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x10, 0x38, 0x6c, 0x00}, |
{0x0c, 0x18, 0x72, 0x9c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x76, 0xdc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0xcc, 0x00, 0xfc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x18, 0x18, 0x00}, |
{0x60, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x30, 0x30, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x10, 0x38, 0x44, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x7c, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x10, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x18, 0x0c, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x38, 0x6c, 0x64, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x16, 0x38, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x16, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x68, 0x1c, 0x36, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x68, 0x1c, 0x36, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x28, 0x54, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x38, 0x44, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x0c, 0x18, 0x44, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x44, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x44, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x44, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x08, 0x54, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x08, 0x54, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x72, 0x9c, 0x44, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x72, 0x9c, 0x44, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x23, 0x76, 0x88, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x26, 0x70, 0xd8, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xc4, 0x6e, 0x11, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x64, 0x0e, 0x1b, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x00, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x38, 0x44, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x38, 0x44, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x23, 0x76, 0x88, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x26, 0x70, 0xd8, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xc4, 0x6e, 0x11, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x64, 0x0e, 0x1b, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x28, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x38, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x18, 0x33, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1b, 0x33, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x33, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x63, 0x33, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x70, 0x1b, 0x33, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x1b, 0x33, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x68, 0xb3, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x68, 0xb3, 0x03, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x18, 0x30, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x33, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1b, 0x33, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x33, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x63, 0x33, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x70, 0x1b, 0x33, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x1b, 0x33, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x68, 0xb3, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x68, 0xb3, 0x03, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x0c, 0x18, 0xf6, 0x06, 0x00}, |
{0x38, 0x0c, 0x18, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x3a, 0x5c, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x18, 0x18, 0x30, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x18, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x60, 0x6c, 0xc6, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xcc, 0x66, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x60, 0x66, 0xcc, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc6, 0x6c, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x34, 0x58, 0x0c, 0x18, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x34, 0x58, 0x30, 0x18, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0xfe, 0x00, 0xa4, 0xaa, 0xea, 0xea, 0xa6, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xa4, 0xea, 0xaa, 0xaa, 0xa6, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x8a, 0xce, 0x8e, 0xea, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x8e, 0xca, 0x8a, 0xea, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xca, 0x2e, 0x4a, 0x2a, 0xca, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xaa, 0xae, 0xea, 0x2a, 0x2a, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x6a, 0x8e, 0xca, 0xaa, 0x4a, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x38, 0x20, 0x30, 0x20, 0x20, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x30, 0x28, 0x30, 0x20, 0x20, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x4a, 0x4e, 0x4a, 0x4a, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x28, 0x28, 0x38, 0x28, 0x28, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x2a, 0x4e, 0x8e, 0xee, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x2a, 0x4e, 0x8e, 0xee, 0x00, 0xa2, 0xa2, 0xe2, 0xea, 0xa4, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x2a, 0x4e, 0x8e, 0xee, 0x00, 0x08, 0x08, 0x08, 0x28, 0x10, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x80, 0x80, 0x80, 0xf0, 0x28, 0x30, 0x28, 0x0a, 0x0e, 0x0e, 0x0a, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xc0, 0xa0, 0xc0, 0xa0, 0x20, 0x20, 0x38, 0x0a, 0x0e, 0x0e, 0x0a, 0x00, 0xfe, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x9c, 0xd2, 0xbc, 0x92, 0x9c, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfe, 0x00}, |
{0x00, 0x18, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x66, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00}, |
{0x00, 0xcc, 0xcc, 0xcc, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x20, 0x30, 0x38, 0x3c, 0x38, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x6b, 0x6b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x92, 0x44, 0x28, 0x92, 0x28, 0x44, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xc3, 0xdb, 0x1b, 0x1e, 0x1c, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x7c, 0x00, 0x00}, |
{0x7c, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x28, 0x00, 0x00, 0x44, 0xee, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7b, 0xcf, 0xcf, 0x1b, 0x33, 0x33, 0x33, 0x00, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xde, 0xf3, 0xf3, 0xc6, 0xcc, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x06, 0x06, 0x0c, 0x0c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xdb, 0xdb, 0xdb, 0xde, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x3e, 0x72, 0xf2, 0xf2, 0xf2, 0x72, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf8, 0x9c, 0x9e, 0x9e, 0x9e, 0x9c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x38, 0x78, 0xd8, 0xfc, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xf8, 0xc0, 0xf0, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x78, 0xc0, 0xf0, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xf8, 0xd8, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0x70, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0xd8, 0x78, 0x18, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x60, 0x30, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xb0, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0xd8, 0xfc, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xc0, 0xf0, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xc0, 0xf0, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xd8, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x70, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0xd8, 0x78, 0x18, 0xf0, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcf, 0xcc, 0xcc, 0x7f, 0x0c, 0x0c, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x04, 0x7c, 0xce, 0xc8, 0xc8, 0xd0, 0xd0, 0xd0, 0xe0, 0xe6, 0x7c, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xd6, 0xd8, 0xd8, 0xd8, 0xde, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xc0, 0xc0, 0xc0, 0xf0, 0xcd, 0xce, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0xf8, 0x60, 0xf8, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0xec, 0xd6, 0xde, 0xd6, 0xd6, 0xf6, 0xd6, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x76, 0xff, 0x76, 0x6e, 0xff, 0x6e, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xf8, 0xe0, 0xf3, 0xd6, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x81, 0x81, 0x81, 0x5a, 0xff, 0x5a, 0xff, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf2, 0x8a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa2, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x3e, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x36, 0x60, 0xfc, 0x60, 0xf8, 0x60, 0x60, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x6c, 0x78, 0xfe, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x1e, 0x78, 0x1e, 0x78, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x7c, 0xb6, 0x36, 0x33, 0x33, 0x33, 0x63, 0x66, 0xf6, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd0, 0xd2, 0xd6, 0x7c, 0x18, 0x30, 0x6e, 0xd8, 0x98, 0x18, 0x0e, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd0, 0xd2, 0xd6, 0x7c, 0x18, 0x30, 0x6e, 0xd8, 0x8c, 0x06, 0x1c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x62, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x62, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4e, 0xb9, 0x58, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x7c, 0xda, 0xd8, 0xd8, 0xda, 0x7c, 0x19, 0x3f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xc0, 0xc2, 0xc6, 0x7c, 0x18, 0x30, 0x6e, 0xdb, 0x9b, 0x1b, 0x0e, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xc0, 0xc2, 0xc6, 0x7c, 0x18, 0x30, 0x7b, 0xdb, 0x9b, 0x1b, 0x0d, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc2, 0xc0, 0x78, 0xc0, 0xc0, 0xc2, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x86, 0x26, 0x3e, 0x26, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7f, 0xb9, 0x58, 0x1a, 0x1e, 0x1a, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x66, 0x46, 0x87, 0x8c, 0x8c, 0x7c, 0x98, 0x98, 0x70, 0x00}, |
{0x00, 0x00, 0x52, 0xb5, 0x15, 0x16, 0x2c, 0x34, 0x68, 0xa9, 0xaa, 0x4c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x48, 0xb0, 0x80, 0x48, 0x7c, 0x66, 0x26, 0x26, 0xa6, 0x46, 0x06, 0x34, 0x48, 0x00}, |
{0x00, 0x00, 0xe2, 0xa2, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2, 0xa2, 0xa2, 0xe2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x36, 0x3b, 0x3b, 0x33, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x1e, 0x18, 0x76, 0x3b, 0x3b, 0x33, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x33, 0x4e, 0x06, 0x06, 0x0c, 0x0c, 0x1f, 0x6c, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x71, 0x8e, 0x04, 0x0c, 0x06, 0x03, 0x63, 0xc3, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x46, 0x49, 0x39, 0x1e, 0x18, 0x30, 0x70, 0xb1, 0xba, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0e, 0x19, 0x31, 0x32, 0x64, 0x68, 0x70, 0xe1, 0x66, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd8, 0xff, 0xd8, 0xde, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe2, 0xa2, 0xb2, 0xb2, 0xaa, 0xaa, 0xa6, 0xa6, 0xa2, 0xe2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcf, 0xed, 0xff, 0xfc, 0xdf, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0xb9, 0xa5, 0xa5, 0xb9, 0xa1, 0xa1, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x40, 0x8e, 0x93, 0xa3, 0x63, 0x4b, 0x6a, 0xa4, 0xb0, 0xb0, 0x60, 0x00}, |
{0x00, 0x00, 0xfc, 0xa2, 0xa2, 0xa2, 0xa2, 0xbc, 0xa0, 0xa0, 0xa0, 0xe0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xaa, 0xa6, 0x7e, 0x01, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x4d, 0x4d, 0x19, 0x1e, 0x1c, 0x34, 0x34, 0xb5, 0x62, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x58, 0xa6, 0xa3, 0x6c, 0xb8, 0x26, 0x26, 0x26, 0xa7, 0xc2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0xa2, 0xa2, 0xa2, 0xa2, 0xbc, 0xb0, 0xa8, 0xa4, 0xe2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x6d, 0x67, 0x66, 0xee, 0x08, 0x00, 0x00, 0x00}, |
{0x30, 0x0c, 0xfc, 0xc6, 0xc6, 0xc6, 0xfc, 0xd8, 0xdc, 0xdc, 0xe6, 0xe6, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x71, 0xdb, 0x35, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x52, 0x5a, 0x52, 0x5f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf1, 0x5b, 0x55, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x18, 0xce, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xe6, 0x6c, 0x38, 0x50, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x0a, 0x14, 0x14, 0x28, 0x28, 0x50, 0x50, 0xa0, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x9c, 0x30, 0xfe, 0x0c, 0x18, 0x38, 0x0c, 0x06, 0x06, 0xc6, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0x6c, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x26, 0x03, 0x13, 0x0c, 0x13, 0x03, 0x03, 0x66, 0x98, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x38, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x2d, 0x2d, 0x1a, 0x1e, 0x1b, 0x31, 0x31, 0xb2, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x14, 0x6b, 0xc8, 0xcc, 0xc6, 0xc6, 0xcc, 0xc0, 0x63, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0xe7, 0xff, 0xe0, 0x67, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x26, 0x44, 0xf8, 0xc0, 0xc8, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4c, 0x52, 0x3c, 0x10, 0x3c, 0x60, 0xc0, 0xc3, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x73, 0xce, 0x18, 0x3a, 0x5c, 0x18, 0x30, 0x30, 0xb0, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x2c, 0x3c, 0x2c, 0x8c, 0xcc, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x12, 0x12, 0x12, 0x16, 0x36, 0x3e, 0x3a, 0x5a, 0x52, 0x91, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x26, 0x46, 0xc6, 0xc4, 0xc8, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x42, 0xc6, 0xe7, 0x7a, 0x38, 0x5c, 0xce, 0xe7, 0x63, 0xe2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xfc, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x7e, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x40, 0x78, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x1e, 0x7e, 0xf2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xfe, 0x7e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x38, 0x00, 0x78, 0x38, 0x38, 0x38, 0x38, 0x38, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xff, 0x83, 0x86, 0x82, 0xfe, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0xc6, 0xfc, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xde, 0x98, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0xc6, 0xfc, 0x18, 0x30, 0x60, 0xde, 0x98, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0x36, 0xec, 0x18, 0x30, 0x60, 0xde, 0x98, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0x30, 0x70, 0xb2, 0xf6, 0x3c, 0x18, 0x30, 0x60, 0xde, 0x98, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0xb0, 0x3c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xf0, 0xc0, 0xe2, 0x36, 0xec, 0x18, 0x30, 0x60, 0xdc, 0xb0, 0x3c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x1c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0x36, 0xec, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x1c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xf0, 0x80, 0xe2, 0x36, 0xec, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x1c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xf0, 0x30, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x1c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xce, 0xce, 0xc4, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x73, 0x73, 0x23, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x65, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xce, 0xce, 0xce, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0x73, 0x73, 0x73, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x95, 0x95, 0x95, 0x65, 0x65, 0x65, 0x95, 0x95, 0x95, 0x95, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xce, 0xc4, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x73, 0x23, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x05, 0x05, 0x00, 0x95, 0x95, 0x95, 0x95, 0x95, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x15, 0x15, 0x00, 0xb5, 0xb5, 0xb5, 0xb5, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0x00, 0xdb, 0xdb, 0xce, 0xce, 0xce, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x00, 0xdb, 0xdb, 0x73, 0x73, 0x73, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x05, 0x05, 0x00, 0x95, 0x95, 0x65, 0x65, 0x95, 0x95, 0x95, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x5a, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x5a, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xcc, 0xe6, 0xd6, 0xd6, 0xd6, 0xd6, 0xe6, 0xcc, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x5a, 0x99, 0xbd, 0xdb, 0xdb, 0xbd, 0x99, 0x5a, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x86, 0x06, 0x06, 0x06, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xff, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0xff, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xf0, 0xe0, 0xb0, 0x18, 0x0c, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0f, 0x07, 0x0d, 0x18, 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x18, 0x0d, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x0c, 0x18, 0xb0, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x62, 0xff, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x26, 0xff, 0x46, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x73, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xff, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x36, 0xff, 0x36, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x66, 0xfc, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x66, 0x3f, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x63, 0xff, 0x63, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc6, 0xff, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x33, 0x63, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x60, 0xcc, 0xc6, 0x7f, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x3b, 0x6b, 0xfe, 0x68, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x60, 0xdc, 0xd6, 0x7f, 0x16, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x5a, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x6e, 0xff, 0x76, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x60, 0x63, 0xff, 0xc6, 0x16, 0x1c, 0x1c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x66, 0x36, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0xcc, 0xd8, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x36, 0x66, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xd8, 0xcc, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x36, 0x66, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x1e, 0x33, 0x33, 0x33, 0x30, 0xfc, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x0c, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x00, 0xf0, 0xe0, 0xb0, 0x18, 0x0c, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x98, 0xb0, 0xff, 0xb0, 0x98, 0x19, 0x0d, 0xff, 0x0d, 0x19, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x1e, 0x1c, 0x16, 0x03, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x78, 0x38, 0x68, 0xc0, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x1c, 0x1e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1e, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x06, 0xff, 0x06, 0x0c, 0x30, 0x60, 0xff, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x2e, 0x3f, 0x24, 0x24, 0x24, 0x24, 0xfc, 0x74, 0x24, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x60, 0xff, 0x60, 0x30, 0x0c, 0x06, 0xff, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x7e, 0xff, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0xff, 0x7e, 0x24, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xff, 0x00, 0xff, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0xff, 0x00, 0xff, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x7f, 0xc4, 0x7f, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x7e, 0xcb, 0x7e, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xfe, 0x23, 0xfe, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7f, 0xc0, 0x7f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x7c, 0xee, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x03, 0xfe, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x7e, 0xc3, 0x7e, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x7c, 0xee, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xf0, 0xe0, 0xb0, 0xd8, 0xec, 0xb6, 0x1b, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0f, 0x07, 0x0d, 0x1b, 0x37, 0x6d, 0xd8, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x20, 0x30, 0xd8, 0x6d, 0x37, 0x1b, 0x0d, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x0c, 0x1b, 0xb6, 0xec, 0xd8, 0xb0, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x3f, 0x60, 0xff, 0x60, 0x3f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0xfc, 0x06, 0xff, 0x06, 0xfc, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x6a, 0xff, 0x65, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xa6, 0xff, 0x56, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x3c, 0x18, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x3c, 0x18, 0x3c, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xd5, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x66, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0xab, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0xb0, 0xff, 0xb0, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x0d, 0xff, 0x0d, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x3f, 0x41, 0x81, 0x41, 0x3f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0xc6, 0x44, 0x44, 0x44, 0x44, 0x44, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0xfc, 0x82, 0x81, 0x82, 0xfc, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x44, 0xc6, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0xc6, 0x44, 0x44, 0x7c, 0x00, 0x7c, 0x44, 0x7c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0xc6, 0x44, 0x44, 0x44, 0xc6, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x7c, 0xc6, 0x44, 0x44, 0x44, 0xc6, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x54, 0xd6, 0x54, 0x54, 0x54, 0xd6, 0x92, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x28, 0x54, 0xee, 0x44, 0xc6, 0x44, 0x44, 0x44, 0x44, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x28, 0x54, 0xee, 0x44, 0xc6, 0x44, 0x44, 0xc6, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xe8, 0xbc, 0x82, 0x81, 0x82, 0xbc, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x80, 0xbc, 0xb8, 0xac, 0x86, 0x83, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x01, 0x81, 0xc1, 0x61, 0x35, 0x1d, 0x3d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0xc6, 0x44, 0x44, 0x44, 0xc6, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xfe, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x06, 0x06, 0x3e, 0x66, 0xc6, 0xc6, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x7e, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0xfe, 0x16, 0x16, 0x16, 0x7e, 0x16, 0x26, 0x26, 0x26, 0xfe, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x3e, 0x66, 0xcf, 0xdb, 0xdb, 0xf3, 0x66, 0x7c, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x3e, 0x60, 0xc0, 0xc0, 0xfe, 0xc0, 0xc0, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x3e, 0x64, 0xc8, 0xc8, 0xfe, 0xc8, 0xd0, 0x70, 0x3e, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x3e, 0x60, 0xc0, 0xfe, 0xc0, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xf8, 0x0c, 0x06, 0x06, 0xfe, 0x06, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0xf8, 0x1c, 0x16, 0x26, 0xfe, 0x26, 0x26, 0x4c, 0xf8, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf8, 0x0c, 0x06, 0xfe, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xe7, 0x00, 0x00}, |
{0x00, 0x00, 0xe7, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xff, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x7e, 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0x06, 0x06, 0x0c, 0xcc, 0x6c, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe3, 0x33, 0x66, 0x36, 0xe6, 0x0c, 0xcc, 0x6c, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x33, 0x73, 0xb6, 0xf6, 0x36, 0x0c, 0xcc, 0x6c, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdb, 0xdb, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x16, 0x0c, 0x1c, 0x34, 0x62, 0xff, 0x02, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x38, 0xe8, 0x38, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x1a, 0x1c, 0x38, 0x58, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6e, 0x7c, 0xec, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x1a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x58, 0x30, 0x00, 0x00}, |
{0x33, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00}, |
{0x2a, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0xa8, 0x00, 0x00}, |
{0x0c, 0x1a, 0x18, 0x18, 0x3c, 0x5a, 0x99, 0x99, 0x5a, 0x3c, 0x18, 0x18, 0x58, 0x30, 0x00, 0x00}, |
{0x33, 0x66, 0x66, 0x66, 0x7e, 0xe7, 0xe7, 0xe7, 0xe7, 0x7e, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00}, |
{0x2a, 0x54, 0x54, 0x54, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x54, 0x54, 0x54, 0xa8, 0x00, 0x00}, |
{0x18, 0x34, 0x30, 0x30, 0x38, 0x35, 0x33, 0x37, 0x30, 0x30, 0x30, 0x30, 0xb0, 0x60, 0x00, 0x00}, |
{0x0c, 0x1a, 0x18, 0x18, 0x3c, 0x5a, 0xfa, 0x5a, 0x5a, 0x3c, 0x18, 0x18, 0x58, 0x30, 0x00, 0x00}, |
{0x0c, 0x1a, 0x18, 0x18, 0x3c, 0x5a, 0x5f, 0x5a, 0x5a, 0x3c, 0x18, 0x18, 0x58, 0x30, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0xfc, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x7e, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x76, 0xdc, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xdb, 0xdb, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0xdb, 0xdb, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x1c, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x76, 0xdc, 0x10, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x76, 0xdc, 0x10, 0xfe, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x08, 0xfe, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x08, 0x76, 0xdc, 0x10, 0xfe, 0x20, 0xfe, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x76, 0xdc, 0x10, 0x76, 0xdc, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x7c, 0x00, 0x7c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x66, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf, 0x00, 0x00, 0xdf, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0xfb, 0x00, 0x00, 0xfb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x28, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x10, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x44, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x44, 0x28, 0x10, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x10, 0x7c, 0x28, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x28, 0x44, 0x7c, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x26, 0x7c, 0xb4, 0x6c, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x68, 0x54, 0x54, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x08, 0x10, 0x00, 0x10, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x08, 0x7e, 0x08, 0x10, 0x7e, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x08, 0xfe, 0x08, 0x10, 0xfe, 0x10, 0x20, 0xfe, 0x20, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x08, 0xfe, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x08, 0xfe, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x1b, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x1b, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0xce, 0x7c, 0x10, 0x7c, 0xe6, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x04, 0x0e, 0x38, 0xe8, 0x38, 0x0e, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0xe0, 0x38, 0x2e, 0x38, 0xe0, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x04, 0x0e, 0x38, 0xe8, 0x38, 0x0e, 0x10, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0xe0, 0x38, 0x2e, 0x38, 0xe0, 0x40, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x04, 0x0e, 0x38, 0xe8, 0x38, 0x0e, 0x10, 0x76, 0xdc, 0x20, 0x20, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0xe0, 0x38, 0x2e, 0x38, 0xe0, 0x40, 0x76, 0xdc, 0x80, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x0e, 0x38, 0xe8, 0x38, 0x1e, 0xf0, 0x38, 0x2e, 0x38, 0xe0, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0xe8, 0x38, 0x0e, 0x38, 0xf0, 0x1e, 0x38, 0xe0, 0x38, 0x2e, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x02, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x80, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x02, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0xf2, 0x1c, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x9e, 0x70, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x02, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x02, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x80, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x06, 0x0c, 0x38, 0xe8, 0x38, 0x1c, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0xd0, 0x70, 0x38, 0x2e, 0x38, 0x60, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x7e, 0xc8, 0xc8, 0xd0, 0xd0, 0x7e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0xfc, 0x16, 0x16, 0x26, 0x26, 0xfc, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0x7e, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x7e, 0xc8, 0xc8, 0xd0, 0xd0, 0x7e, 0x20, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0xfc, 0x16, 0x16, 0x26, 0x26, 0xfc, 0x40, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0x7e, 0x08, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0x92, 0xa2, 0xfa, 0xa2, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x92, 0xba, 0xba, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x92, 0xba, 0x92, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x54, 0x92, 0xfe, 0x92, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0xfe, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0xaa, 0x92, 0xaa, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x8a, 0x92, 0xa2, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x92, 0xba, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x92, 0xaa, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x54, 0xd6, 0xba, 0xd6, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0xba, 0x82, 0xba, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0xba, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x92, 0x92, 0xfe, 0x92, 0x92, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0xfe, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xaa, 0x92, 0xaa, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x92, 0xba, 0x92, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0xff, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x7e, 0x60, 0x7e, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xd8, 0xdf, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xa8, 0xa8, 0xa8, 0xa8, 0xaf, 0xa8, 0xa8, 0xa8, 0xa8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xdf, 0xd8, 0xdf, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc2, 0xc4, 0xc4, 0xff, 0xc8, 0xc8, 0xd0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc4, 0xc4, 0xff, 0xc8, 0xff, 0xd0, 0xd0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd9, 0xda, 0xda, 0xdf, 0xda, 0xda, 0xdc, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd9, 0xda, 0xdf, 0xda, 0xdf, 0xda, 0xdc, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0c, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x60, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x1e, 0x76, 0xc6, 0x76, 0x1e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xf0, 0xdc, 0xc6, 0xdc, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x1e, 0x76, 0xc6, 0x76, 0x1e, 0x06, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xf0, 0xdc, 0xc6, 0xdc, 0xf0, 0xc0, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xbf, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x7d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0xc6, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xf0, 0xc8, 0xc4, 0xc4, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0b, 0x13, 0x23, 0x43, 0x83, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x38, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x92, 0x44, 0x28, 0x92, 0x28, 0x44, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0xc6, 0xaa, 0x92, 0xaa, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0xc4, 0xa8, 0x90, 0xa8, 0xc4, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0x46, 0x2a, 0x12, 0x2a, 0x46, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x3e, 0x60, 0xce, 0xd8, 0xd8, 0xce, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xf8, 0x0c, 0xe6, 0x36, 0x36, 0xe6, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x44, 0x92, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x38, 0x54, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x64, 0xce, 0x64, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x4c, 0xe6, 0x4c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x15, 0x2a, 0x54, 0xa8, 0x54, 0x2a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xa8, 0x54, 0x2a, 0x15, 0x2a, 0x54, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0xfe, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0x00}, |
{0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0xfe, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x02, 0x06, 0x1c, 0xf2, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xc0, 0x70, 0x9e, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0a, 0x0e, 0x1c, 0xf0, 0x1c, 0x16, 0xf2, 0x1c, 0x26, 0x22, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x88, 0xc8, 0x70, 0x1e, 0x70, 0xd0, 0x9e, 0x70, 0xe0, 0xa0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0xfe, 0xc8, 0xc8, 0xd0, 0xd0, 0xfe, 0x20, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0xfe, 0x16, 0x16, 0x26, 0x26, 0xfe, 0x40, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x08, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x10, 0x76, 0xdc, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x10, 0x76, 0xdc, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x02, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x02, 0x10, 0x76, 0xdc, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x80, 0x10, 0x76, 0xdc, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x0e, 0x1e, 0x76, 0xd6, 0x76, 0x1e, 0x26, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0xc8, 0xf0, 0xdc, 0xd6, 0xdc, 0xf0, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x0e, 0x1e, 0x76, 0xd6, 0x76, 0x1e, 0x26, 0x20, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0xc8, 0xf0, 0xdc, 0xd6, 0xdc, 0xf0, 0xe0, 0x20, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x3d, 0x66, 0xc7, 0xcb, 0xd3, 0xe3, 0x66, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x42, 0xa5, 0x7e, 0x24, 0x24, 0x7e, 0xa5, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x38, 0x54, 0x8a, 0xf6, 0x82, 0x54, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xfe, 0xfe, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00}, |
{0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00}, |
{0x00, 0x03, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, |
{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, |
{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x03, 0x00, 0x00}, |
{0x00, 0xc0, 0x60, 0x30, 0x30, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, |
{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, |
{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x30, 0x30, 0x60, 0xc0, 0x00, 0x00}, |
{0x00, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, |
{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, |
{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3f, 0x00, 0x00}, |
{0x00, 0xfc, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, |
{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, |
{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xfc, 0x00, 0x00}, |
{0x00, 0x07, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x07, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x07, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x07, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0}, |
{0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x07}, |
{0x00, 0x00, 0xff, 0xc1, 0xc0, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0xc0, 0xc1, 0xff, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xff, 0x00, 0xff, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x78, 0x78, 0x38, 0x38, 0x18, 0x18, 0x00, 0x00}, |
{0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, |
{0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}, |
{0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x07, 0x05, 0x05, 0x05, 0x05, 0x25, 0x79, 0xc2, 0x7c, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd8, 0xd8, 0xf8, 0xd8, 0xd8, 0x0f, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0, 0x0f, 0x0c, 0x0e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd8, 0xd8, 0xf8, 0x70, 0x20, 0x0f, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0xc0, 0xe0, 0xc0, 0xc0, 0x0f, 0x0c, 0x0e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xc0, 0xc0, 0xc0, 0x70, 0x1e, 0x1b, 0x1e, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x98, 0xd8, 0xf8, 0xd8, 0xd8, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xfe, 0xc6, 0xc6, 0x60, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xfc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80}, |
{0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01}, |
{0x81, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x18, 0x18, 0x24, 0x24, 0x42, 0x42, 0x81, 0x81}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe}, |
{0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc}, |
{0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8}, |
{0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0}, |
{0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}, |
{0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, |
{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, |
{0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f}, |
{0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44}, |
{0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa}, |
{0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77}, |
{0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, |
{0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0xba, 0xba, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0xfe, 0x82, 0xfe, 0x82, 0xfe, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xaa, 0xfe, 0xaa, 0xfe, 0xaa, 0xfe, 0xaa, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x8a, 0xc6, 0xa2, 0x92, 0x8a, 0xc6, 0xa2, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xa2, 0xc6, 0x8a, 0x92, 0xa2, 0xc6, 0x8a, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xaa, 0xc6, 0xaa, 0x92, 0xaa, 0xc6, 0xaa, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x42, 0x84, 0x84, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x44, 0x44, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x80, 0xc0, 0xa0, 0x90, 0x88, 0x84, 0x88, 0x90, 0xa0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x70, 0x78, 0x70, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x70, 0x48, 0x70, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x98, 0x86, 0x98, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0x7e, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x06, 0x0a, 0x12, 0x22, 0x42, 0x22, 0x12, 0x0a, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x38, 0x78, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x38, 0x48, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x32, 0xc2, 0x32, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0x44, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0x54, 0xba, 0xba, 0x54, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x99, 0xbd, 0xbd, 0xbd, 0xbd, 0x99, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x28, 0x44, 0x82, 0x82, 0x44, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x14, 0x40, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x02, 0x28, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x99, 0xa5, 0xa5, 0xa5, 0xa5, 0x99, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x72, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x72, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x4e, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x4e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x81, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x7e, 0xff, 0xff, 0xff, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x4e, 0x8f, 0x8f, 0x8f, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x4e, 0x8f, 0x8f, 0x8f, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x70, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0xff, 0xff, 0xc3, 0xbd, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0xbd, 0xc3, 0xff, 0xff, 0xff, 0xff}, |
{0xff, 0xff, 0xc3, 0xbd, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0xbd, 0xc3, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x30, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0xff, 0xff}, |
{0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff}, |
{0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80}, |
{0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xff, 0xfd, 0xf9, 0xf1, 0xf1, 0xe1, 0xc1, 0x81, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x81, 0x83, 0x87, 0x8f, 0x8f, 0x9f, 0xbf, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x92, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x74, 0x74, 0xf2, 0xf2, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x5c, 0x5c, 0x9e, 0x9e, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x92, 0x92, 0x92, 0xf2, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0xf2, 0x92, 0x92, 0x92, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0x9e, 0x92, 0x92, 0x92, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x92, 0x92, 0x92, 0x9e, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x4a, 0x89, 0x89, 0x89, 0xf9, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0xf9, 0x89, 0x89, 0x89, 0x4a, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x9f, 0x91, 0x91, 0x91, 0x52, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x52, 0x91, 0x91, 0x91, 0x9f, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x54, 0x38, 0xfe, 0x38, 0x54, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x30, 0x7c, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x7c, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0xfe, 0x7c, 0x38, 0x6c, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x28, 0xee, 0x44, 0x54, 0x6c, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x18, 0x30, 0x60, 0xc0, 0x60, 0x34, 0x1c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcd, 0xc7, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x92, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0xa5, 0xa5, 0x42, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x42, 0xa5, 0xa5, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x18, 0x30, 0x70, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x86, 0x8a, 0xba, 0x92, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0xee, 0xba, 0xba, 0xee, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x82, 0xc6, 0x6c, 0x7c, 0x38, 0x7c, 0x6c, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x82, 0xaa, 0x82, 0x44, 0x7c, 0x44, 0x38, 0x00, 0x44, 0xc6, 0x38, 0xc6, 0x44, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x44, 0xee, 0xfe, 0x92, 0xba, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x7e, 0x18, 0x18, 0xff, 0x18, 0x1e, 0x78, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x7e, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x10, 0x10, 0x92, 0xfe, 0x92, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x72, 0xe0, 0xc4, 0xdf, 0xce, 0xca, 0xe0, 0x72, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x54, 0x28, 0x54, 0xaa, 0xaa, 0xaa, 0xaa, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x5a, 0x99, 0x99, 0x99, 0xbd, 0xff, 0xdb, 0x5a, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x85, 0xb1, 0xf9, 0xff, 0xdf, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0x81, 0x99, 0xa5, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xa5, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xdb, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x54, 0x28, 0xc6, 0x28, 0x54, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0x14, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x14, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x28, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x28, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x06, 0x0e, 0x1a, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x03, 0x03, 0x7b, 0xcf, 0xcf, 0xcf, 0x0f, 0x1b, 0x33, 0xff, 0x03, 0x03, 0x03, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf0, 0x60, 0x6e, 0x73, 0x63, 0x63, 0x66, 0x66, 0x63, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd6, 0x54, 0x54, 0x7c, 0x54, 0x54, 0xd6, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0xdb, 0xdb, 0xdb, 0xdb, 0x7e, 0x3c, 0x18, 0x3c, 0x18, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x42, 0xa5, 0xa5, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc3, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00}, |
{0x00, 0x00, 0xc3, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0xc3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xdb, 0xd8, 0x70, 0x00, 0x00, 0x0e, 0x1b, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x33, 0x33, 0x33, 0x33, 0x1b, 0x7b, 0xdb, 0xdb, 0x73, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x94, 0x7c, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x06, 0x0b, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x24, 0xe7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x94, 0x7c, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x04, 0x03, 0x00, 0x00}, |
{0x00, 0x00, 0x1f, 0x07, 0x8f, 0xdb, 0x73, 0x70, 0xd8, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x90, 0x50, 0x70, 0x68, 0x48, 0x48, 0x4e, 0x49, 0x09, 0x0e, 0x10, 0x20, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x2a, 0x7e, 0xaa, 0x00, 0x00, 0x2a, 0x7e, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc3, 0x66, 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x66, 0x66, 0xc3, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x82, 0x82, 0x82, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x44, 0x82, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x81, 0x81, 0x66, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x24, 0x3c, 0xe7, 0xa5, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x78, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x3c, 0x3e, 0x32, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x7f, 0x6f, 0x63, 0x63, 0x63, 0x63, 0xe3, 0xe7, 0xc7, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0xe7, 0xe7, 0xc6, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0xde, 0xe6, 0xc4, 0xd8, 0xe0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x40, 0x40, 0x44, 0x5c, 0x74, 0x44, 0x44, 0x5c, 0x74, 0x44, 0x04, 0x04, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x04, 0x46, 0x5c, 0x74, 0xc4, 0x46, 0x5c, 0x74, 0xc4, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x3b, 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x6e, 0x66, 0x60, 0xfe, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x6e, 0x66, 0x66, 0xfe, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6e, 0xdb, 0xdb, 0xd8, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6f, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x6c, 0x6f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6d, 0xf6, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x29, 0x5e, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x29, 0x5e, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x89, 0x86, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x0a, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x12, 0x0c, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0a, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0a, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x89, 0x86, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x0a, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x12, 0x0c, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x88, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x88, 0x80, 0x88, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x94, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x80, 0x94, 0x80, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x94, 0x80, 0x88, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x94, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x94, 0x80, 0x94, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x28, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x28, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x28, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x28, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x38, 0x28, 0x70, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x38, 0x28, 0x70, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x04, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x00, 0x00, 0x04, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x01, 0x02, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x01, 0x02, 0x04, 0x08, 0x48, 0x84, 0x82, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x18, 0x20, 0x10, 0x08, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x18, 0x20, 0x20, 0x10, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x48, 0x84, 0x82, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x46, 0x18, 0x20, 0x10, 0x08, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x46, 0x18, 0x20, 0x20, 0x10, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x48, 0x84, 0x82, 0x7d, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x46, 0x18, 0x20, 0x10, 0x08, 0x08, 0xf0, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x46, 0x18, 0x20, 0x20, 0x10, 0x08, 0xf7, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0xa4, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xa4, 0x09, 0x12, 0x04, 0x08, 0x48, 0x84, 0x82, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xa2, 0x0c, 0x13, 0x0c, 0x10, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xa2, 0x0c, 0x13, 0x0c, 0x10, 0x10, 0x08, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x41, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x00, 0x00, 0x01, 0x41, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x40, 0x38, 0x40, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x70, 0x80, 0x70, 0x80, 0x10, 0x68, 0x88, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf0, 0x10, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf7, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0x3d, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0x3d, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x60, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x3f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x80, 0x70, 0x80, 0x08, 0x14, 0x60, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x20, 0x1c, 0x20, 0x00, 0x00, 0x07, 0x18, 0x20, 0x3f, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x29, 0x01, 0x19, 0x21, 0x19, 0xa1, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x2a, 0x02, 0x32, 0x42, 0x32, 0xc6, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0x00, 0xa3, 0x0c, 0x10, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0x00, 0xa3, 0x0c, 0x10, 0x10, 0x08, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x18, 0x10, 0x20, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x18, 0x10, 0x20, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x08, 0x08, 0x08, 0x08, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x23, 0x54, 0x33, 0x24, 0x40, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x3c, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x3c, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x10, 0x00, 0x10}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x10, 0x00, 0x10}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x20, 0x20, 0x20, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x10, 0x10, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x10, 0x10, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x98, 0x60, 0xc2, 0x12, 0x92, 0x9c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x92, 0x9c, 0x60, 0x0e, 0x70, 0x0e, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x60, 0x04, 0x54, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x10, 0x60, 0x04, 0x54, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x54, 0x58, 0x20, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x04, 0x54, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x00, 0x00}, |
{0x0e, 0xf0, 0x02, 0x92, 0x9c, 0x60, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x18, 0x60, 0x02, 0x92, 0x9c, 0x60, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x12, 0x9c, 0x60, 0x0e, 0x70, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x50, 0x28, 0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x14, 0x28, 0x14, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x08, 0x10, 0x54, 0x38, 0x54, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x10, 0x08, 0x2a, 0x1c, 0x2a, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x2a, 0x14, 0x00, 0x21, 0x69, 0xa9, 0x69, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x08, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x10, 0x10, 0x20, 0x10, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x08, 0x04, 0x08, 0x08, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x7c, 0x28, 0x7c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x10, 0x2a, 0x24, 0x1a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x38, 0x38, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x54, 0x30, 0x18, 0x54, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x08, 0x10, 0x10, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x54, 0x58, 0x40, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x18, 0x60, 0x06, 0x18, 0x60, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x12, 0xca, 0x2c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x0c, 0x30, 0x00, 0x00}, |
{0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x14, 0x0c, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x14, 0x18, 0x60, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x06, 0x18, 0x60, 0x00, 0x00}, |
{0x0a, 0x2a, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x12, 0x92, 0x9c, 0x60, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x20, 0x1e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x3c, 0x40, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x3e, 0x40, 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x20, 0x1c, 0x20, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x10, 0x0e, 0x10, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x0c, 0x10, 0x0e, 0x10, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00, 0x0c, 0x10, 0x0e, 0x10, 0x00, 0x00}, |
{0x00, 0x30, 0x40, 0x38, 0x40, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x40, 0x38, 0x40, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x28, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x50, 0x00, 0x10, 0x10, 0x68, 0x88, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x14, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x14, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x14, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x88, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x80, 0x88, 0x80, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x80, 0x80, 0x80, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x20, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x80, 0x80, 0x80, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x14, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x01, 0x15, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2a, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x29, 0x31, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x29, 0x31, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x29, 0x31, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x29, 0x31, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0x22, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0x22, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0x22, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0x22, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x1c, 0x22, 0x41, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x10, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x1c, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x40, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x00, 0x1e, 0x22, 0x1c, 0x22, 0x41, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x10, 0x10, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x1e, 0x22, 0x1c, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x49, 0x89, 0x86, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x0c, 0x12, 0x0a, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x0c, 0x12, 0x12, 0x0c, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0a, 0x00, 0x06, 0x09, 0x09, 0x47, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0a, 0x00, 0x00, 0x06, 0x09, 0x49, 0x87, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0a, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x12, 0x0c, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x19, 0x21, 0x19, 0x21, 0x01, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x32, 0x42, 0x32, 0x42, 0x02, 0x86, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x18, 0x20, 0x10, 0x08, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x18, 0x20, 0x20, 0x10, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x12, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x4b, 0x4a, 0x44, 0x40, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x32, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x32, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x41, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x68, 0x88, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x40, 0x30, 0x4e, 0x49, 0x39, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x24, 0x28, 0xf3, 0x24, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x24, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x24, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x68, 0x90, 0x02, 0x22, 0x12, 0x0a, 0x04, 0x0c, 0x12, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x68, 0x90, 0x02, 0x32, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x80, 0x72, 0xa2, 0x12, 0x0a, 0x04, 0x0c, 0x12, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x40, 0x3a, 0x52, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x42, 0x22, 0x12, 0x0a, 0x04, 0x0c, 0x12, 0x3c, 0x00, 0x18, 0x20, 0x1c, 0x20, 0x00}, |
{0x00, 0x00, 0x22, 0x12, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x18, 0x20, 0x1c, 0x20, 0x00}, |
{0x00, 0x00, 0x42, 0x22, 0x12, 0x0a, 0x04, 0x0c, 0x12, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x22, 0x12, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xf1, 0x35, 0x55, 0x8a, 0xe0, 0x06, 0x95, 0xd6, 0xb5, 0x97, 0x00, 0xee, 0x8a, 0xee, 0x28, 0xe8}, |
{0x00, 0x38, 0x7c, 0x7c, 0xc6, 0x92, 0xf2, 0xe6, 0xfe, 0xe6, 0x7c, 0x7c, 0x38, 0x00, 0x00, 0x00}, |
/* Special glyph for unknown character */ |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00} |
}; |
/** @} |
//branches/tracing/kernel/genarch/src/mm/asid.c |
---|
32,7 → 32,7 |
/** |
* @file |
* @brief ASID management. |
* @brief ASID management. |
* |
* Modern processor architectures optimize TLB utilization |
* by using ASIDs (a.k.a. memory contexts on sparc64 and |
//branches/tracing/kernel/genarch/src/ofw/ebus.c |
---|
38,7 → 38,7 |
#include <genarch/ofw/ofw_tree.h> |
#include <arch/memstr.h> |
#include <arch/trap/interrupt.h> |
#include <func.h> |
#include <string.h> |
#include <panic.h> |
#include <debug.h> |
#include <macros.h> |
127,7 → 127,7 |
if (!controller) |
return false; |
if (strcmp(ofw_tree_node_name(controller), "pci") != 0) { |
if (str_cmp(ofw_tree_node_name(controller), "pci") != 0) { |
/* |
* This is not a PCI node. |
*/ |
//branches/tracing/kernel/genarch/src/ofw/fhc.c |
---|
38,7 → 38,7 |
#include <genarch/ofw/ofw_tree.h> |
#include <arch/drivers/fhc.h> |
#include <arch/memstr.h> |
#include <func.h> |
#include <string.h> |
#include <panic.h> |
#include <macros.h> |
66,8 → 66,8 |
*pa = addr; |
return true; |
} |
if (strcmp(ofw_tree_node_name(node->parent), "central") != 0) |
panic("Unexpected parent node: %s.\n", ofw_tree_node_name(node->parent)); |
if (str_cmp(ofw_tree_node_name(node->parent), "central") != 0) |
panic("Unexpected parent node: %s.", ofw_tree_node_name(node->parent)); |
ofw_central_reg_t central_reg; |
84,7 → 84,7 |
bool ofw_central_apply_ranges(ofw_tree_node_t *node, ofw_central_reg_t *reg, uintptr_t *pa) |
{ |
if (node->parent->parent) |
panic("Unexpected parent node: %s.\n", ofw_tree_node_name(node->parent)); |
panic("Unexpected parent node: %s.", ofw_tree_node_name(node->parent)); |
ofw_tree_property_t *prop; |
ofw_central_range_t *range; |
//branches/tracing/kernel/genarch/src/ofw/ofw_tree.c |
---|
38,7 → 38,7 |
#include <genarch/ofw/ofw_tree.h> |
#include <arch/memstr.h> |
#include <mm/slab.h> |
#include <func.h> |
#include <string.h> |
#include <print.h> |
#include <panic.h> |
66,7 → 66,7 |
unsigned int i; |
for (i = 0; i < node->properties; i++) { |
if (strcmp(node->property[i].name, name) == 0) |
if (str_cmp(node->property[i].name, name) == 0) |
return &node->property[i]; |
} |
85,10 → 85,10 |
prop = ofw_tree_getprop(node, "name"); |
if (!prop) |
panic("Node without name property.\n"); |
panic("Node without name property."); |
if (prop->size < 2) |
panic("Invalid name property.\n"); |
panic("Invalid name property."); |
return prop->value; |
} |
109,7 → 109,7 |
* Try to find the disambigued name. |
*/ |
for (cur = node->child; cur; cur = cur->peer) { |
if (strcmp(cur->da_name, name) == 0) |
if (str_cmp(cur->da_name, name) == 0) |
return cur; |
} |
121,7 → 121,7 |
* are not always fully-qualified. |
*/ |
for (cur = node->child; cur; cur = cur->peer) { |
if (strcmp(ofw_tree_node_name(cur), name) == 0) |
if (str_cmp(ofw_tree_node_name(cur), name) == 0) |
return cur; |
} |
146,7 → 146,7 |
prop = ofw_tree_getprop(cur, "device_type"); |
if (!prop || !prop->value) |
continue; |
if (strcmp(prop->value, name) == 0) |
if (str_cmp(prop->value, name) == 0) |
return cur; |
} |
203,7 → 203,7 |
prop = ofw_tree_getprop(cur, "device_type"); |
if (!prop || !prop->value) |
continue; |
if (strcmp(prop->value, name) == 0) |
if (str_cmp(prop->value, name) == 0) |
return cur; |
} |
229,7 → 229,7 |
prop = ofw_tree_getprop(cur, "name"); |
if (!prop || !prop->value) |
continue; |
if (strcmp(prop->value, name) == 0) |
if (str_cmp(prop->value, name) == 0) |
return cur; |
} |
252,14 → 252,15 |
if (path[0] != '/') |
return NULL; |
for (i = 1; i < strlen(path) && node; i = j + 1) { |
for (j = i; j < strlen(path) && path[j] != '/'; j++) |
; |
if (i == j) /* skip extra slashes */ |
for (i = 1; (i < str_size(path)) && (node); i = j + 1) { |
for (j = i; (j < str_size(path)) && (path[j] != '/'); j++); |
/* Skip extra slashes */ |
if (i == j) |
continue; |
memcpy(buf, &path[i], j - i); |
buf[j - i] = '\0'; |
buf[j - i] = 0; |
node = ofw_tree_find_child(node, buf); |
} |
//branches/tracing/kernel/genarch/src/ofw/pci.c |
---|
39,7 → 39,7 |
#include <arch/drivers/pci.h> |
#include <arch/trap/interrupt.h> |
#include <arch/memstr.h> |
#include <func.h> |
#include <string.h> |
#include <panic.h> |
#include <macros.h> |
58,7 → 58,7 |
prop = ofw_tree_getprop(node, "ranges"); |
if (!prop) { |
if (strcmp(ofw_tree_node_name(node->parent), "pci") == 0) |
if (str_cmp(ofw_tree_node_name(node->parent), "pci") == 0) |
return ofw_pci_apply_ranges(node->parent, reg, pa); |
return false; |
} |
101,7 → 101,7 |
prop = ofw_tree_getprop(node, "assigned-addresses"); |
if (!prop) |
panic("Can't find \"assigned-addresses\" property.\n"); |
panic("Cannot find 'assigned-addresses' property."); |
assigned_addresses = prop->size / sizeof(ofw_pci_reg_t); |
assigned_address = prop->value; |
//branches/tracing/kernel/genarch/src/acpi/acpi.c |
---|
49,8 → 49,12 |
struct acpi_rsdt *acpi_rsdt = NULL; |
struct acpi_xsdt *acpi_xsdt = NULL; |
struct acpi_signature_map signature_map[] = { |
{ (uint8_t *)"APIC", (void *) &acpi_madt, "Multiple APIC Description Table" } |
struct acpi_signature_map signature_map[] = { |
{ |
(uint8_t *) "APIC", |
(void *) &acpi_madt, |
"Multiple APIC Description Table" |
} |
}; |
static int rsdp_check(uint8_t *rsdp) { |
105,7 → 109,7 |
if (!acpi_sdt_check((uint8_t *) h)) |
goto next; |
*signature_map[j].sdt_ptr = h; |
printf("%p: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description); |
LOG("%p: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description); |
} |
} |
next: |
126,7 → 130,7 |
if (!acpi_sdt_check((uint8_t *) h)) |
goto next; |
*signature_map[j].sdt_ptr = h; |
printf("%p: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description); |
LOG("%p: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description); |
} |
} |
next: |
160,7 → 164,7 |
return; |
rsdp_found: |
printf("%p: ACPI Root System Description Pointer\n", acpi_rsdp); |
LOG("%p: ACPI Root System Description Pointer\n", acpi_rsdp); |
acpi_rsdt = (struct acpi_rsdt *) (unative_t) acpi_rsdp->rsdt_address; |
if (acpi_rsdp->revision) acpi_xsdt = (struct acpi_xsdt *) ((uintptr_t) acpi_rsdp->xsdt_address); |
//branches/tracing/kernel/genarch/src/drivers/ns16550/ns16550.c |
---|
0,0 → 1,123 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief NS 16550 serial controller driver. |
*/ |
#include <genarch/drivers/ns16550/ns16550.h> |
#include <ddi/irq.h> |
#include <arch/asm.h> |
#include <console/chardev.h> |
#include <mm/slab.h> |
#include <ddi/device.h> |
#define LSR_DATA_READY 0x01 |
static irq_ownership_t ns16550_claim(irq_t *irq) |
{ |
ns16550_instance_t *instance = irq->instance; |
ns16550_t *dev = instance->ns16550; |
if (pio_read_8(&dev->lsr) & LSR_DATA_READY) |
return IRQ_ACCEPT; |
else |
return IRQ_DECLINE; |
} |
static void ns16550_irq_handler(irq_t *irq) |
{ |
ns16550_instance_t *instance = irq->instance; |
ns16550_t *dev = instance->ns16550; |
if (pio_read_8(&dev->lsr) & LSR_DATA_READY) { |
uint8_t data = pio_read_8(&dev->rbr); |
indev_push_character(instance->kbrdin, data); |
} |
} |
/**< Clear input buffer. */ |
static void ns16550_clear_buffer(ns16550_t *dev) |
{ |
while ((pio_read_8(&dev->lsr) & LSR_DATA_READY)) |
(void) pio_read_8(&dev->rbr); |
} |
/** Initialize ns16550. |
* |
* @param dev Addrress of the beginning of the device in I/O space. |
* @param devno Device number. |
* @param inr Interrupt number. |
* @param cir Clear interrupt function. |
* @param cir_arg First argument to cir. |
* |
* @return Keyboard instance or NULL on failure. |
* |
*/ |
ns16550_instance_t *ns16550_init(ns16550_t *dev, inr_t inr, cir_t cir, void *cir_arg) |
{ |
ns16550_instance_t *instance |
= malloc(sizeof(ns16550_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->ns16550 = dev; |
instance->kbrdin = NULL; |
irq_initialize(&instance->irq); |
instance->irq.devno = device_assign_devno(); |
instance->irq.inr = inr; |
instance->irq.claim = ns16550_claim; |
instance->irq.handler = ns16550_irq_handler; |
instance->irq.instance = instance; |
instance->irq.cir = cir; |
instance->irq.cir_arg = cir_arg; |
} |
return instance; |
} |
void ns16550_wire(ns16550_instance_t *instance, indev_t *kbrdin) |
{ |
ASSERT(instance); |
ASSERT(kbrdin); |
instance->kbrdin = kbrdin; |
irq_register(&instance->irq); |
ns16550_clear_buffer(instance->ns16550); |
/* Enable interrupts */ |
pio_write_8(&instance->ns16550->ier, IER_ERBFI); |
pio_write_8(&instance->ns16550->mcr, MCR_OUT2); |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/drivers/dsrln/dsrlnin.c |
---|
0,0 → 1,85 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Dummy serial line input. |
*/ |
#include <genarch/drivers/dsrln/dsrlnin.h> |
#include <console/chardev.h> |
#include <mm/slab.h> |
#include <arch/asm.h> |
#include <ddi/device.h> |
static irq_ownership_t dsrlnin_claim(irq_t *irq) |
{ |
return IRQ_ACCEPT; |
} |
static void dsrlnin_irq_handler(irq_t *irq) |
{ |
dsrlnin_instance_t *instance = irq->instance; |
dsrlnin_t *dev = instance->dsrlnin; |
indev_push_character(instance->srlnin, pio_read_8(&dev->data)); |
} |
dsrlnin_instance_t *dsrlnin_init(dsrlnin_t *dev, inr_t inr) |
{ |
dsrlnin_instance_t *instance |
= malloc(sizeof(dsrlnin_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->dsrlnin = dev; |
instance->srlnin = NULL; |
irq_initialize(&instance->irq); |
instance->irq.devno = device_assign_devno(); |
instance->irq.inr = inr; |
instance->irq.claim = dsrlnin_claim; |
instance->irq.handler = dsrlnin_irq_handler; |
instance->irq.instance = instance; |
} |
return instance; |
} |
void dsrlnin_wire(dsrlnin_instance_t *instance, indev_t *srlnin) |
{ |
ASSERT(instance); |
ASSERT(srlnin); |
instance->srlnin = srlnin; |
irq_register(&instance->irq); |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/drivers/dsrln/dsrlnout.c |
---|
0,0 → 1,76 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Dummy serial line output. |
*/ |
#include <genarch/drivers/dsrln/dsrlnout.h> |
#include <console/chardev.h> |
#include <arch/asm.h> |
#include <console/console.h> |
#include <sysinfo/sysinfo.h> |
#include <string.h> |
static ioport8_t *dsrlnout_base; |
static void dsrlnout_putchar(outdev_t *dev __attribute__((unused)), const wchar_t ch, bool silent) |
{ |
if (!silent) { |
if (ascii_check(ch)) |
pio_write_8(dsrlnout_base, ch); |
else |
pio_write_8(dsrlnout_base, U_SPECIAL); |
} |
} |
static outdev_t dsrlnout_console; |
static outdev_operations_t dsrlnout_ops = { |
.write = dsrlnout_putchar |
}; |
void dsrlnout_init(ioport8_t *base) |
{ |
/* Initialize the software structure. */ |
dsrlnout_base = base; |
outdev_initialize("dsrlnout", &dsrlnout_console, &dsrlnout_ops); |
stdout = &dsrlnout_console; |
sysinfo_set_item_val("fb", NULL, true); |
sysinfo_set_item_val("fb.kind", NULL, 3); |
sysinfo_set_item_val("fb.address.physical", NULL, KA2PA(base)); |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/drivers/i8042/i8042.c |
---|
0,0 → 1,127 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief i8042 processor driver |
* |
* It takes care of the i8042 serial communication. |
* |
*/ |
#include <genarch/drivers/i8042/i8042.h> |
#include <genarch/drivers/legacy/ia32/io.h> |
#include <arch/asm.h> |
#include <console/chardev.h> |
#include <mm/slab.h> |
#include <ddi/device.h> |
#define i8042_SET_COMMAND 0x60 |
#define i8042_COMMAND 0x69 |
#define i8042_CPU_RESET 0xfe |
#define i8042_BUFFER_FULL_MASK 0x01 |
#define i8042_WAIT_MASK 0x02 |
static irq_ownership_t i8042_claim(irq_t *irq) |
{ |
i8042_instance_t *i8042_instance = irq->instance; |
i8042_t *dev = i8042_instance->i8042; |
if (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) |
return IRQ_ACCEPT; |
else |
return IRQ_DECLINE; |
} |
static void i8042_irq_handler(irq_t *irq) |
{ |
i8042_instance_t *instance = irq->instance; |
i8042_t *dev = instance->i8042; |
uint8_t status; |
if (((status = pio_read_8(&dev->status)) & i8042_BUFFER_FULL_MASK)) { |
uint8_t data = pio_read_8(&dev->data); |
indev_push_character(instance->kbrdin, data); |
} |
} |
/**< Clear input buffer. */ |
static void i8042_clear_buffer(i8042_t *dev) |
{ |
while (pio_read_8(&dev->status) & i8042_BUFFER_FULL_MASK) |
(void) pio_read_8(&dev->data); |
} |
/** Initialize i8042. */ |
i8042_instance_t *i8042_init(i8042_t *dev, inr_t inr) |
{ |
i8042_instance_t *instance |
= malloc(sizeof(i8042_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->i8042 = dev; |
instance->kbrdin = NULL; |
irq_initialize(&instance->irq); |
instance->irq.devno = device_assign_devno(); |
instance->irq.inr = inr; |
instance->irq.claim = i8042_claim; |
instance->irq.handler = i8042_irq_handler; |
instance->irq.instance = instance; |
} |
return instance; |
} |
void i8042_wire(i8042_instance_t *instance, indev_t *kbrdin) |
{ |
ASSERT(instance); |
ASSERT(kbrdin); |
instance->kbrdin = kbrdin; |
irq_register(&instance->irq); |
i8042_clear_buffer(instance->i8042); |
} |
/* Reset CPU by pulsing pin 0 */ |
void i8042_cpu_reset(i8042_t *dev) |
{ |
interrupts_disable(); |
i8042_clear_buffer(dev); |
/* Reset CPU */ |
pio_write_8(&dev->status, i8042_CPU_RESET); |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/drivers/via-cuda/cuda.c |
---|
0,0 → 1,78 |
/* |
* Copyright (c) 2006 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#include <genarch/drivers/via-cuda/cuda.h> |
#include <console/chardev.h> |
#include <ddi/irq.h> |
#include <arch/asm.h> |
#include <mm/slab.h> |
#include <ddi/device.h> |
static irq_ownership_t cuda_claim(irq_t *irq) |
{ |
return IRQ_DECLINE; |
} |
static void cuda_irq_handler(irq_t *irq) |
{ |
} |
cuda_instance_t *cuda_init(cuda_t *dev, inr_t inr, cir_t cir, void *cir_arg) |
{ |
cuda_instance_t *instance |
= malloc(sizeof(cuda_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->cuda = dev; |
instance->kbrdin = NULL; |
irq_initialize(&instance->irq); |
instance->irq.devno = device_assign_devno(); |
instance->irq.inr = inr; |
instance->irq.claim = cuda_claim; |
instance->irq.handler = cuda_irq_handler; |
instance->irq.instance = instance; |
instance->irq.cir = cir; |
instance->irq.cir_arg = cir_arg; |
} |
return instance; |
} |
void cuda_wire(cuda_instance_t *instance, indev_t *kbrdin) |
{ |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/drivers/z8530/z8530.c |
---|
0,0 → 1,136 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Zilog 8530 serial controller driver. |
*/ |
#include <genarch/drivers/z8530/z8530.h> |
#include <console/chardev.h> |
#include <ddi/irq.h> |
#include <arch/asm.h> |
#include <mm/slab.h> |
#include <ddi/device.h> |
static inline void z8530_write(ioport8_t *ctl, uint8_t reg, uint8_t val) |
{ |
/* |
* Registers 8-15 will automatically issue the Point High |
* command as their bit 3 is 1. |
*/ |
pio_write_8(ctl, reg); /* Select register */ |
pio_write_8(ctl, val); /* Write value */ |
} |
static inline uint8_t z8530_read(ioport8_t *ctl, uint8_t reg) |
{ |
/* |
* Registers 8-15 will automatically issue the Point High |
* command as their bit 3 is 1. |
*/ |
pio_write_8(ctl, reg); /* Select register */ |
return pio_read_8(ctl); |
} |
static irq_ownership_t z8530_claim(irq_t *irq) |
{ |
z8530_instance_t *instance = irq->instance; |
z8530_t *dev = instance->z8530; |
if (z8530_read(&dev->ctl_a, RR0) & RR0_RCA) |
return IRQ_ACCEPT; |
else |
return IRQ_DECLINE; |
} |
static void z8530_irq_handler(irq_t *irq) |
{ |
z8530_instance_t *instance = irq->instance; |
z8530_t *dev = instance->z8530; |
if (z8530_read(&dev->ctl_a, RR0) & RR0_RCA) { |
uint8_t data = z8530_read(&dev->ctl_a, RR8); |
indev_push_character(instance->kbrdin, data); |
} |
} |
/** Initialize z8530. */ |
z8530_instance_t *z8530_init(z8530_t *dev, inr_t inr, cir_t cir, void *cir_arg) |
{ |
z8530_instance_t *instance |
= malloc(sizeof(z8530_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->z8530 = dev; |
instance->kbrdin = NULL; |
irq_initialize(&instance->irq); |
instance->irq.devno = device_assign_devno(); |
instance->irq.inr = inr; |
instance->irq.claim = z8530_claim; |
instance->irq.handler = z8530_irq_handler; |
instance->irq.instance = instance; |
instance->irq.cir = cir; |
instance->irq.cir_arg = cir_arg; |
} |
return instance; |
} |
void z8530_wire(z8530_instance_t *instance, indev_t *kbrdin) |
{ |
ASSERT(instance); |
ASSERT(kbrdin); |
instance->kbrdin = kbrdin; |
irq_register(&instance->irq); |
(void) z8530_read(&instance->z8530->ctl_a, RR8); |
/* |
* Clear any pending TX interrupts or we never manage |
* to set FHC UART interrupt state to idle. |
*/ |
z8530_write(&instance->z8530->ctl_a, WR0, WR0_TX_IP_RST); |
/* interrupt on all characters */ |
z8530_write(&instance->z8530->ctl_a, WR1, WR1_IARCSC); |
/* 8 bits per character and enable receiver */ |
z8530_write(&instance->z8530->ctl_a, WR3, WR3_RX8BITSCH | WR3_RX_ENABLE); |
/* Master Interrupt Enable. */ |
z8530_write(&instance->z8530->ctl_a, WR9, WR9_MIE); |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/drivers/ega/ega.c |
---|
0,0 → 1,587 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch_drivers |
* @{ |
*/ |
/** |
* @file |
* @brief EGA driver. |
*/ |
#include <genarch/drivers/ega/ega.h> |
#include <putchar.h> |
#include <mm/page.h> |
#include <mm/as.h> |
#include <mm/slab.h> |
#include <arch/mm/page.h> |
#include <synch/spinlock.h> |
#include <arch/types.h> |
#include <arch/asm.h> |
#include <memstr.h> |
#include <string.h> |
#include <console/chardev.h> |
#include <console/console.h> |
#include <sysinfo/sysinfo.h> |
#include <ddi/ddi.h> |
/* |
* The EGA driver. |
* Simple and short. Function for displaying characters and "scrolling". |
*/ |
SPINLOCK_INITIALIZE(egalock); |
static uint32_t ega_cursor; |
static uint8_t *videoram; |
static uint8_t *backbuf; |
static ioport8_t *ega_base; |
#define SPACE 0x20 |
#define STYLE 0x1e |
#define INVAL 0x17 |
#define EMPTY_CHAR ((STYLE << 8) | SPACE) |
static uint16_t ega_oem_glyph(const wchar_t ch) |
{ |
if ((ch >= 0x0000) && (ch <= 0x007f)) |
return ch; |
if (ch == 0x00a0) |
return 255; |
if (ch == 0x00a1) |
return 173; |
if ((ch >= 0x00a2) && (ch <= 0x00a3)) |
return (ch - 7); |
if (ch == 0x00a5) |
return 157; |
if (ch == 0x00aa) |
return 166; |
if (ch == 0x00ab) |
return 174; |
if (ch == 0x00ac) |
return 170; |
if (ch == 0x00b0) |
return 248; |
if (ch == 0x00b1) |
return 241; |
if (ch == 0x00b2) |
return 253; |
if (ch == 0x00b5) |
return 230; |
if (ch == 0x00b7) |
return 250; |
if (ch == 0x00ba) |
return 167; |
if (ch == 0x00bb) |
return 175; |
if (ch == 0x00bc) |
return 172; |
if (ch == 0x00bd) |
return 171; |
if (ch == 0x00bf) |
return 168; |
if ((ch >= 0x00c4) && (ch <= 0x00c5)) |
return (ch - 54); |
if (ch == 0x00c6) |
return 146; |
if (ch == 0x00c7) |
return 128; |
if (ch == 0x00c9) |
return 144; |
if (ch == 0x00d1) |
return 165; |
if (ch == 0x00d6) |
return 153; |
if (ch == 0x00dc) |
return 154; |
if (ch == 0x00df) |
return 225; |
if (ch == 0x00e0) |
return 133; |
if (ch == 0x00e1) |
return 160; |
if (ch == 0x00e2) |
return 131; |
if (ch == 0x00e4) |
return 132; |
if (ch == 0x00e5) |
return 134; |
if (ch == 0x00e6) |
return 145; |
if (ch == 0x00e7) |
return 135; |
if (ch == 0x00e8) |
return 138; |
if (ch == 0x00e9) |
return 130; |
if ((ch >= 0x00ea) && (ch <= 0x00eb)) |
return (ch - 98); |
if (ch == 0x00ec) |
return 141; |
if (ch == 0x00ed) |
return 161; |
if (ch == 0x00ee) |
return 140; |
if (ch == 0x00ef) |
return 139; |
if (ch == 0x00f1) |
return 164; |
if (ch == 0x00f2) |
return 149; |
if (ch == 0x00f3) |
return 162; |
if (ch == 0x00f4) |
return 147; |
if (ch == 0x00f6) |
return 148; |
if (ch == 0x00f7) |
return 246; |
if (ch == 0x00f9) |
return 151; |
if (ch == 0x00fa) |
return 163; |
if (ch == 0x00fb) |
return 150; |
if (ch == 0x00fc) |
return 129; |
if (ch == 0x00ff) |
return 152; |
if (ch == 0x0192) |
return 159; |
if (ch == 0x0393) |
return 226; |
if (ch == 0x0398) |
return 233; |
if (ch == 0x03a3) |
return 228; |
if (ch == 0x03a6) |
return 232; |
if (ch == 0x03a9) |
return 234; |
if (ch == 0x03b1) |
return 224; |
if (ch == 0x03b4) |
return 235; |
if (ch == 0x03b5) |
return 238; |
if (ch == 0x03c0) |
return 227; |
if (ch == 0x03c3) |
return 229; |
if (ch == 0x03c4) |
return 231; |
if (ch == 0x03c6) |
return 237; |
if (ch == 0x207f) |
return 252; |
if (ch == 0x20a7) |
return 158; |
if (ch == 0x2219) |
return 249; |
if (ch == 0x221a) |
return 251; |
if (ch == 0x221e) |
return 236; |
if (ch == 0x2229) |
return 239; |
if (ch == 0x2248) |
return 247; |
if (ch == 0x2261) |
return 240; |
if (ch == 0x2264) |
return 243; |
if (ch == 0x2265) |
return 242; |
if (ch == 0x2310) |
return 169; |
if ((ch >= 0x2320) && (ch <= 0x2321)) |
return (ch - 8748); |
if (ch == 0x2500) |
return 196; |
if (ch == 0x2502) |
return 179; |
if (ch == 0x250c) |
return 218; |
if (ch == 0x2510) |
return 191; |
if (ch == 0x2514) |
return 192; |
if (ch == 0x2518) |
return 217; |
if (ch == 0x251c) |
return 195; |
if (ch == 0x2524) |
return 180; |
if (ch == 0x252c) |
return 194; |
if (ch == 0x2534) |
return 193; |
if (ch == 0x253c) |
return 197; |
if (ch == 0x2550) |
return 205; |
if (ch == 0x2551) |
return 186; |
if ((ch >= 0x2552) && (ch <= 0x2553)) |
return (ch - 9341); |
if (ch == 0x2554) |
return 201; |
if (ch == 0x2555) |
return 184; |
if (ch == 0x2556) |
return 183; |
if (ch == 0x2557) |
return 187; |
if (ch == 0x2558) |
return 212; |
if (ch == 0x2559) |
return 211; |
if (ch == 0x255a) |
return 200; |
if (ch == 0x255b) |
return 190; |
if (ch == 0x255c) |
return 189; |
if (ch == 0x255d) |
return 188; |
if ((ch >= 0x255e) && (ch <= 0x255f)) |
return (ch - 9368); |
if (ch == 0x2560) |
return 204; |
if ((ch >= 0x2561) && (ch <= 0x2562)) |
return (ch - 9388); |
if (ch == 0x2563) |
return 185; |
if ((ch >= 0x2564) && (ch <= 0x2565)) |
return (ch - 9363); |
if (ch == 0x2566) |
return 203; |
if ((ch >= 0x2567) && (ch <= 0x2568)) |
return (ch - 9368); |
if (ch == 0x2569) |
return 202; |
if (ch == 0x256a) |
return 216; |
if (ch == 0x256b) |
return 215; |
if (ch == 0x256c) |
return 206; |
if (ch == 0x2580) |
return 223; |
if (ch == 0x2584) |
return 220; |
if (ch == 0x2588) |
return 219; |
if (ch == 0x258c) |
return 221; |
if (ch == 0x2590) |
return 222; |
if ((ch >= 0x2591) && (ch <= 0x2593)) |
return (ch - 9441); |
return 256; |
} |
/* |
* This function takes care of scrolling. |
*/ |
static void ega_check_cursor(bool silent) |
{ |
if (ega_cursor < EGA_SCREEN) |
return; |
memmove((void *) backbuf, (void *) (backbuf + EGA_COLS * 2), |
(EGA_SCREEN - EGA_COLS) * 2); |
memsetw(backbuf + (EGA_SCREEN - EGA_COLS) * 2, EGA_COLS, EMPTY_CHAR); |
if (!silent) { |
memmove((void *) videoram, (void *) (videoram + EGA_COLS * 2), |
(EGA_SCREEN - EGA_COLS) * 2); |
memsetw(videoram + (EGA_SCREEN - EGA_COLS) * 2, EGA_COLS, EMPTY_CHAR); |
} |
ega_cursor = ega_cursor - EGA_COLS; |
} |
static void ega_show_cursor(bool silent) |
{ |
if (!silent) { |
pio_write_8(ega_base + EGA_INDEX_REG, 0x0a); |
uint8_t stat = pio_read_8(ega_base + EGA_DATA_REG); |
pio_write_8(ega_base + EGA_INDEX_REG, 0x0a); |
pio_write_8(ega_base + EGA_DATA_REG, stat & (~(1 << 5))); |
} |
} |
static void ega_move_cursor(bool silent) |
{ |
if (!silent) { |
pio_write_8(ega_base + EGA_INDEX_REG, 0x0e); |
pio_write_8(ega_base + EGA_DATA_REG, (uint8_t) ((ega_cursor >> 8) & 0xff)); |
pio_write_8(ega_base + EGA_INDEX_REG, 0x0f); |
pio_write_8(ega_base + EGA_DATA_REG, (uint8_t) (ega_cursor & 0xff)); |
} |
} |
static void ega_sync_cursor(bool silent) |
{ |
if (!silent) { |
pio_write_8(ega_base + EGA_INDEX_REG, 0x0e); |
uint8_t hi = pio_read_8(ega_base + EGA_DATA_REG); |
pio_write_8(ega_base + EGA_INDEX_REG, 0x0f); |
uint8_t lo = pio_read_8(ega_base + EGA_DATA_REG); |
ega_cursor = (hi << 8) | lo; |
} else |
ega_cursor = 0; |
if (ega_cursor >= EGA_SCREEN) |
ega_cursor = 0; |
if ((ega_cursor % EGA_COLS) != 0) |
ega_cursor = (ega_cursor + EGA_COLS) - ega_cursor % EGA_COLS; |
memsetw(backbuf + ega_cursor * 2, EGA_SCREEN - ega_cursor, EMPTY_CHAR); |
if (!silent) |
memsetw(videoram + ega_cursor * 2, EGA_SCREEN - ega_cursor, EMPTY_CHAR); |
ega_check_cursor(silent); |
ega_move_cursor(silent); |
ega_show_cursor(silent); |
} |
static void ega_display_char(wchar_t ch, bool silent) |
{ |
uint16_t index = ega_oem_glyph(ch); |
uint8_t glyph; |
uint8_t style; |
if ((index >> 8)) { |
glyph = U_SPECIAL; |
style = INVAL; |
} else { |
glyph = index & 0xff; |
style = STYLE; |
} |
backbuf[ega_cursor * 2] = glyph; |
backbuf[ega_cursor * 2 + 1] = style; |
if (!silent) { |
videoram[ega_cursor * 2] = glyph; |
videoram[ega_cursor * 2 + 1] = style; |
} |
} |
static void ega_putchar(outdev_t *dev __attribute__((unused)), wchar_t ch, bool silent) |
{ |
ipl_t ipl; |
ipl = interrupts_disable(); |
spinlock_lock(&egalock); |
switch (ch) { |
case '\n': |
ega_cursor = (ega_cursor + EGA_COLS) - ega_cursor % EGA_COLS; |
break; |
case '\t': |
ega_cursor = (ega_cursor + 8) - ega_cursor % 8; |
break; |
case '\b': |
if (ega_cursor % EGA_COLS) |
ega_cursor--; |
break; |
default: |
ega_display_char(ch, silent); |
ega_cursor++; |
break; |
} |
ega_check_cursor(silent); |
ega_move_cursor(silent); |
spinlock_unlock(&egalock); |
interrupts_restore(ipl); |
} |
static outdev_t ega_console; |
static outdev_operations_t ega_ops = { |
.write = ega_putchar |
}; |
void ega_init(ioport8_t *base, uintptr_t videoram_phys) |
{ |
/* Initialize the software structure. */ |
ega_base = base; |
backbuf = (uint8_t *) malloc(EGA_VRAM_SIZE, 0); |
if (!backbuf) |
panic("Unable to allocate backbuffer."); |
videoram = (uint8_t *) hw_map(videoram_phys, EGA_VRAM_SIZE); |
/* Synchronize the back buffer and cursor position. */ |
memcpy(backbuf, videoram, EGA_VRAM_SIZE); |
ega_sync_cursor(silent); |
outdev_initialize("ega", &ega_console, &ega_ops); |
stdout = &ega_console; |
sysinfo_set_item_val("fb", NULL, true); |
sysinfo_set_item_val("fb.kind", NULL, 2); |
sysinfo_set_item_val("fb.width", NULL, EGA_COLS); |
sysinfo_set_item_val("fb.height", NULL, EGA_ROWS); |
sysinfo_set_item_val("fb.blinking", NULL, true); |
sysinfo_set_item_val("fb.address.physical", NULL, videoram_phys); |
} |
void ega_redraw(void) |
{ |
memcpy(videoram, backbuf, EGA_VRAM_SIZE); |
ega_move_cursor(silent); |
ega_show_cursor(silent); |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/multiboot/multiboot.c |
---|
0,0 → 1,139 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#include <genarch/multiboot/multiboot.h> |
#include <arch/types.h> |
#include <typedefs.h> |
#include <config.h> |
#include <string.h> |
#include <macros.h> |
/** Extract command name from the multiboot module command line. |
* |
* @param buf Destination buffer (will always NULL-terminate). |
* @param sz Size of destination buffer (in bytes). |
* @param cmd_line Input string (the command line). |
* |
*/ |
static void extract_command(char *buf, size_t sz, const char *cmd_line) |
{ |
/* Find the first space. */ |
const char *end = str_chr(cmd_line, ' '); |
if (end == NULL) |
end = cmd_line + str_size(cmd_line); |
/* |
* Find last occurence of '/' before 'end'. If found, place start at |
* next character. Otherwise, place start at beginning of buffer. |
*/ |
const char *cp = end; |
const char *start = buf; |
while (cp != start) { |
if (*cp == '/') { |
start = cp + 1; |
break; |
} |
cp--; |
} |
/* Copy the command. */ |
str_ncpy(buf, sz, start, (size_t) (end - start)); |
} |
/** Parse multiboot information structure. |
* |
* If @a signature does not contain a valid multiboot signature, |
* assumes no multiboot information is available. |
* |
* @param signature Should contain the multiboot signature. |
* @param mi Pointer to the multiboot information structure. |
*/ |
void multiboot_info_parse(uint32_t signature, const multiboot_info_t *mi) |
{ |
uint32_t flags; |
if (signature == MULTIBOOT_LOADER_MAGIC) |
flags = mi->flags; |
else { |
/* No multiboot info available. */ |
flags = 0; |
} |
/* Copy module information. */ |
uint32_t i; |
if ((flags & MBINFO_FLAGS_MODS) != 0) { |
init.cnt = min(mi->mods_count, CONFIG_INIT_TASKS); |
multiboot_mod_t *mods |
= (multiboot_mod_t *) MULTIBOOT_PTR(mi->mods_addr); |
for (i = 0; i < init.cnt; i++) { |
init.tasks[i].addr = PA2KA(mods[i].start); |
init.tasks[i].size = mods[i].end - mods[i].start; |
/* Copy command line, if available. */ |
if (mods[i].string) { |
extract_command(init.tasks[i].name, |
CONFIG_TASK_NAME_BUFLEN, |
MULTIBOOT_PTR(mods[i].string)); |
} else |
init.tasks[i].name[0] = 0; |
} |
} else |
init.cnt = 0; |
/* Copy memory map. */ |
if ((flags & MBINFO_FLAGS_MMAP) != 0) { |
int32_t mmap_length = mi->mmap_length; |
multiboot_mmap_t *mme = MULTIBOOT_PTR(mi->mmap_addr); |
e820counter = 0; |
i = 0; |
while ((mmap_length > 0) && (i < MEMMAP_E820_MAX_RECORDS)) { |
e820table[i++] = mme->mm_info; |
/* Compute address of next structure. */ |
uint32_t size = sizeof(mme->size) + mme->size; |
mme = ((void *) mme) + size; |
mmap_length -= size; |
} |
e820counter = i; |
} else |
e820counter = 0; |
} |
/** @} |
*/ |
//branches/tracing/kernel/genarch/src/srln/srln.c |
---|
0,0 → 1,159 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** |
* @file |
* @brief Serial line processing. |
*/ |
#include <genarch/srln/srln.h> |
#include <console/chardev.h> |
#include <console/console.h> |
#include <proc/thread.h> |
#include <arch.h> |
#include <string.h> |
static indev_operations_t srln_raw_ops = { |
.poll = NULL |
}; |
static void ksrln(void *arg) |
{ |
srln_instance_t *instance = (srln_instance_t *) arg; |
bool cr = false; |
uint32_t escape = 0; |
while (true) { |
wchar_t ch = indev_pop_character(&instance->raw); |
/* ANSI escape sequence processing */ |
if (escape != 0) { |
escape <<= 8; |
escape |= ch & 0xff; |
if ((escape == 0x1b4f) || (escape == 0x1b5b) || (escape == 0x1b5b33)) |
continue; |
switch (escape) { |
case 0x1b4f46: |
case 0x1b5b46: |
ch = U_END_ARROW; |
escape = 0; |
break; |
case 0x1b4f48: |
case 0x1b5b48: |
ch = U_HOME_ARROW; |
escape = 0; |
break; |
case 0x1b5b41: |
ch = U_UP_ARROW; |
escape = 0; |
break; |
case 0x1b5b42: |
ch = U_DOWN_ARROW; |
escape = 0; |
break; |
case 0x1b5b43: |
ch = U_RIGHT_ARROW; |
escape = 0; |
break; |
case 0x1b5b44: |
ch = U_LEFT_ARROW; |
escape = 0; |
break; |
case 0x1b5b337e: |
ch = U_DELETE; |
escape = 0; |
break; |
default: |
escape = 0; |
} |
} |
if (ch == 0x1b) { |
escape = ch & 0xff; |
continue; |
} |
/* Replace carriage return with line feed |
and suppress any following line feed */ |
if ((ch == '\n') && (cr)) { |
cr = false; |
continue; |
} |
if (ch == '\r') { |
ch = '\n'; |
cr = true; |
} else |
cr = false; |
/* Backspace */ |
if (ch == 0x7f) |
ch = '\b'; |
indev_push_character(instance->sink, ch); |
} |
} |
srln_instance_t *srln_init(void) |
{ |
srln_instance_t *instance |
= malloc(sizeof(srln_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->thread |
= thread_create(ksrln, (void *) instance, TASK, 0, "ksrln", false); |
if (!instance->thread) { |
free(instance); |
return NULL; |
} |
instance->sink = NULL; |
indev_initialize("srln", &instance->raw, &srln_raw_ops); |
} |
return instance; |
} |
indev_t *srln_wire(srln_instance_t *instance, indev_t *sink) |
{ |
ASSERT(instance); |
ASSERT(sink); |
instance->sink = sink; |
thread_ready(instance->thread); |
return &instance->raw; |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/include/align.h |
---|
26,13 → 26,13 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @ingroup others |
* @{ |
*/ |
/** |
* @file |
* @brief Macros for making values and addresses aligned. |
* @brief Macros for making values and addresses aligned. |
*/ |
#ifndef KERN_ALIGN_H_ |
43,7 → 43,7 |
* @param s Address or size to be aligned. |
* @param a Size of alignment, must be power of 2. |
*/ |
#define ALIGN_DOWN(s, a) ((s) & ~((a) - 1)) |
#define ALIGN_DOWN(s, a) ((s) & ~((a) - 1)) |
/** Align to the nearest higher address. |
51,7 → 51,7 |
* @param s Address or size to be aligned. |
* @param a Size of alignment, must be power of 2. |
*/ |
#define ALIGN_UP(s, a) (((s) + ((a) - 1)) & ~((a) - 1)) |
#define ALIGN_UP(s, a) (((s) + ((a) - 1)) & ~((a) - 1)) |
#endif |
//branches/tracing/kernel/generic/include/func.h |
---|
41,11 → 41,6 |
extern atomic_t haltstate; |
extern void halt(void); |
extern size_t strlen(const char *str); |
extern int strcmp(const char *src, const char *dst); |
extern int strncmp(const char *src, const char *dst, size_t len); |
extern void strncpy(char *dest, const char *src, size_t len); |
extern unative_t atoi(const char *text); |
extern void order(const uint64_t val, uint64_t *rv, char *suffix); |
//branches/tracing/kernel/generic/include/print.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
46,11 → 46,9 |
extern int puts(const char *s); |
extern int printf(const char *fmt, ...); |
extern int sprintf(char *str, const char *fmt, ...); |
extern int snprintf(char *str, size_t size, const char *fmt, ...); |
extern int vprintf(const char *fmt, va_list ap); |
extern int vsprintf(char *str, const char *fmt, va_list ap); |
extern int vsnprintf(char *str, size_t size, const char *fmt, va_list ap); |
#endif |
//branches/tracing/kernel/generic/include/fpu_context.h |
---|
37,10 → 37,6 |
#include <arch/fpu_context.h> |
#if defined(CONFIG_FPU_LAZY) && !defined(ARCH_HAS_FPU) |
# error "CONFIG_FPU_LAZY defined, but no ARCH_HAS_FPU" |
#endif |
extern void fpu_context_save(fpu_context_t *); |
extern void fpu_context_restore(fpu_context_t *); |
extern void fpu_init(void); |
//branches/tracing/kernel/generic/include/byteorder.h |
---|
36,6 → 36,7 |
#define KERN_BYTEORDER_H_ |
#include <arch/byteorder.h> |
#include <arch/types.h> |
#if !(defined(ARCH_IS_BIG_ENDIAN) ^ defined(ARCH_IS_LITTLE_ENDIAN)) |
#error The architecture must be either big-endian or little-endian. |
//branches/tracing/kernel/generic/include/symtab.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
44,15 → 44,20 |
char symbol_name[MAX_SYMBOL_NAME]; |
}; |
extern char * get_symtab_entry(unative_t addr); |
extern uintptr_t get_symbol_addr(const char *name); |
extern int symtab_name_lookup(unative_t addr, char **name); |
extern char *symtab_fmt_name_lookup(unative_t addr); |
extern int symtab_addr_lookup(const char *name, uintptr_t *addr); |
extern void symtab_print_search(const char *name); |
extern int symtab_compl(char *name); |
extern int symtab_compl(char *input, count_t size); |
#ifdef CONFIG_SYMTAB |
/* Symtable linked together by build process */ |
extern struct symtab_entry symbol_table[]; |
#endif |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/generic/include/sysinfo/sysinfo.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
36,6 → 36,7 |
#define KERN_SYSINFO_H_ |
#include <arch/types.h> |
#include <string.h> |
typedef union sysinfo_item_val { |
unative_t val; |
59,13 → 60,13 |
int subinfo_type; |
} sysinfo_item_t; |
#define SYSINFO_VAL_VAL 0 |
#define SYSINFO_VAL_FUNCTION 1 |
#define SYSINFO_VAL_UNDEFINED '?' |
#define SYSINFO_VAL_VAL 0 |
#define SYSINFO_VAL_FUNCTION 1 |
#define SYSINFO_VAL_UNDEFINED U_SPECIAL |
#define SYSINFO_SUBINFO_NONE 0 |
#define SYSINFO_SUBINFO_TABLE 1 |
#define SYSINFO_SUBINFO_FUNCTION 2 |
#define SYSINFO_SUBINFO_NONE 0 |
#define SYSINFO_SUBINFO_TABLE 1 |
#define SYSINFO_SUBINFO_FUNCTION 2 |
typedef unative_t (*sysinfo_val_fn_t)(sysinfo_item_t *root); |
typedef unative_t (*sysinfo_subinfo_fn_t)(const char *subname); |
//branches/tracing/kernel/generic/include/config.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
38,13 → 38,15 |
#include <arch/types.h> |
#include <arch/mm/page.h> |
#define STACK_SIZE PAGE_SIZE |
#define STACK_SIZE PAGE_SIZE |
#define CONFIG_INIT_TASKS 32 |
#define CONFIG_INIT_TASKS 32 |
#define CONFIG_TASK_NAME_BUFLEN 32 |
typedef struct { |
uintptr_t addr; |
size_t size; |
char name[CONFIG_TASK_NAME_BUFLEN]; |
} init_task_t; |
typedef struct { |
63,14 → 65,14 |
} ballocs_t; |
typedef struct { |
count_t cpu_count; /**< Number of processors detected. */ |
volatile count_t cpu_active; /**< Number of processors that are up and running. */ |
count_t cpu_count; /**< Number of processors detected. */ |
volatile count_t cpu_active; /**< Number of processors that are up and running. */ |
uintptr_t base; |
size_t kernel_size; /**< Size of memory in bytes taken by kernel and stack */ |
size_t kernel_size; /**< Size of memory in bytes taken by kernel and stack */ |
uintptr_t stack_base; /**< Base adddress of initial stack */ |
size_t stack_size; /**< Size of initial stack */ |
uintptr_t stack_base; /**< Base adddress of initial stack */ |
size_t stack_size; /**< Size of initial stack */ |
} config_t; |
extern config_t config; |
//branches/tracing/kernel/generic/include/string.h |
---|
0,0 → 1,101 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_STRING_H_ |
#define KERN_STRING_H_ |
#include <typedefs.h> |
/**< Common Unicode characters */ |
#define U_SPECIAL '?' |
#define U_LEFT_ARROW 0x2190 |
#define U_UP_ARROW 0x2191 |
#define U_RIGHT_ARROW 0x2192 |
#define U_DOWN_ARROW 0x2193 |
#define U_PAGE_UP 0x21de |
#define U_PAGE_DOWN 0x21df |
#define U_HOME_ARROW 0x21f1 |
#define U_END_ARROW 0x21f2 |
#define U_NULL 0x2400 |
#define U_ESCAPE 0x241b |
#define U_DELETE 0x2421 |
#define U_CURSOR 0x2588 |
#define U_BOM 0xfeff |
/**< No size limit constant */ |
#define STR_NO_LIMIT ((size_t) -1) |
/**< Maximum size of a string containing cnt characters */ |
#define STR_BOUNDS(cnt) (cnt << 2) |
extern wchar_t str_decode(const char *str, size_t *offset, size_t sz); |
extern int chr_encode(wchar_t ch, char *str, size_t *offset, size_t sz); |
extern size_t str_size(const char *str); |
extern size_t wstr_size(const wchar_t *str); |
extern size_t str_lsize(const char *str, count_t max_len); |
extern size_t wstr_lsize(const wchar_t *str, count_t max_len); |
extern count_t str_length(const char *str); |
extern count_t wstr_length(const wchar_t *wstr); |
extern count_t str_nlength(const char *str, size_t size); |
extern count_t wstr_nlength(const wchar_t *str, size_t size); |
extern bool ascii_check(wchar_t ch); |
extern bool chr_check(wchar_t ch); |
extern int str_cmp(const char *s1, const char *s2); |
extern int str_lcmp(const char *s1, const char *s2, count_t max_len); |
extern void str_cpy(char *dest, size_t size, const char *src); |
extern void str_ncpy(char *dest, size_t size, const char *src, size_t n); |
extern void wstr_nstr(char *dst, const wchar_t *src, size_t size); |
extern const char *str_chr(const char *str, wchar_t ch); |
extern bool wstr_linsert(wchar_t *str, wchar_t ch, count_t pos, count_t max_pos); |
extern bool wstr_remove(wchar_t *str, count_t pos); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/generic/include/proc/task.h |
---|
144,6 → 144,7 |
#endif |
extern unative_t sys_task_get_id(task_id_t *uspace_task_id); |
extern unative_t sys_task_set_name(const char *uspace_name, size_t name_len); |
#endif |
//branches/tracing/kernel/generic/include/proc/program.h |
---|
59,8 → 59,7 |
extern int program_create_loader(program_t *p, char *name); |
extern void program_ready(program_t *p); |
extern unative_t sys_program_spawn_loader(int *uspace_phone_id, |
char *uspace_name, size_t name_len); |
extern unative_t sys_program_spawn_loader(char *uspace_name, size_t name_len); |
#endif |
//branches/tracing/kernel/generic/include/debug.h |
---|
57,21 → 57,21 |
#ifdef CONFIG_DEBUG |
# define ASSERT(expr) \ |
if (!(expr)) { \ |
panic("assertion failed (%s), caller=%p\n", #expr, CALLER); \ |
panic("Assertion failed (%s), caller=%p.", #expr, CALLER); \ |
} |
#else |
# define ASSERT(expr) |
#endif |
/** Extensive debugging output macro |
/** Extensive logging output macro |
* |
* If CONFIG_EDEBUG is set, the LOG() macro |
* If CONFIG_LOG is set, the LOG() macro |
* will print whatever message is indicated plus |
* an information about the location. |
* |
*/ |
#ifdef CONFIG_EDEBUG |
#ifdef CONFIG_LOG |
# define LOG(format, ...) \ |
printf("%s() at %s:%u: " format "\n", __func__, __FILE__, \ |
__LINE__, ##__VA_ARGS__); |
79,15 → 79,15 |
# define LOG(format, ...) |
#endif |
/** Extensive debugging execute macro |
/** Extensive logging execute macro |
* |
* If CONFIG_EDEBUG is set, the LOG_EXEC() macro |
* If CONFIG_LOG is set, the LOG_EXEC() macro |
* will print an information about calling a given |
* function and call it. |
* |
*/ |
#ifdef CONFIG_EDEBUG |
#ifdef CONFIG_LOG |
# define LOG_EXEC(fnc) \ |
{ \ |
printf("%s() at %s:%u: " #fnc "\n", __func__, __FILE__, \ |
//branches/tracing/kernel/generic/include/panic.h |
---|
37,11 → 37,11 |
#ifdef CONFIG_DEBUG |
# define panic(format, ...) \ |
panic_printf("Kernel panic in %s() at %s:%u: " format, __func__, \ |
__FILE__, __LINE__, ##__VA_ARGS__); |
panic_printf("Kernel panic in %s() at %s:%u: " format "\n", \ |
__func__, __FILE__, __LINE__, ##__VA_ARGS__); |
#else |
# define panic(format, ...) \ |
panic_printf("Kernel panic: " format, ##__VA_ARGS__); |
panic_printf("Kernel panic: " format "\n", ##__VA_ARGS__); |
#endif |
extern void panic_printf(char *fmt, ...) __attribute__((noreturn)); |
//branches/tracing/kernel/generic/include/interrupt.h |
---|
44,12 → 44,12 |
typedef void (* iroutine)(int n, istate_t *istate); |
#define fault_if_from_uspace(istate, cmd, ...) \ |
#define fault_if_from_uspace(istate, fmt, ...) \ |
{ \ |
if (istate_from_uspace(istate)) { \ |
task_t *task = TASK; \ |
printf("Task %" PRIu64 " killed due to an exception at %p.", task->taskid, istate_get_pc(istate)); \ |
printf(" " cmd, ##__VA_ARGS__); \ |
printf("Task %s (%" PRIu64 ") killed due to an exception at %p: ", task->name, task->taskid, istate_get_pc(istate)); \ |
printf(fmt "\n", ##__VA_ARGS__); \ |
task_kill(task->taskid); \ |
thread_exit(); \ |
} \ |
//branches/tracing/kernel/generic/include/main/main.h |
---|
35,8 → 35,13 |
#ifndef KERN_MAIN_H_ |
#define KERN_MAIN_H_ |
#include <arch/types.h> |
extern uintptr_t stack_safe; |
extern void main_bsp(void); |
extern void main_ap(void); |
#endif |
/** @} |
//branches/tracing/kernel/generic/include/putchar.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
35,7 → 35,7 |
#ifndef KERN_PUTCHAR_H_ |
#define KERN_PUTCHAR_H_ |
extern void putchar(const char ch); |
extern void putchar(const wchar_t ch); |
#endif |
//branches/tracing/kernel/generic/include/memstr.h |
---|
44,7 → 44,7 |
extern void *_memcpy(void *dst, const void *src, size_t cnt); |
extern void _memsetb(void *dst, size_t cnt, uint8_t x); |
extern void _memsetw(void *dst, size_t cnt, uint16_t x); |
extern char *strcpy(char *dest, const char *src); |
extern void *memmove(void *dst, const void *src, size_t cnt); |
#endif |
//branches/tracing/kernel/generic/include/ddi/irq.h |
---|
36,18 → 36,16 |
#define KERN_IRQ_H_ |
typedef enum { |
CMD_MEM_READ_1 = 0, |
CMD_MEM_READ_2, |
CMD_MEM_READ_4, |
CMD_MEM_READ_8, |
CMD_MEM_WRITE_1, |
CMD_MEM_WRITE_2, |
CMD_MEM_WRITE_4, |
CMD_MEM_WRITE_8, |
CMD_PORT_READ_1, |
CMD_PORT_WRITE_1, |
CMD_IA64_GETCHAR, |
CMD_PPC32_GETCHAR, |
CMD_PIO_READ_8 = 1, |
CMD_PIO_READ_16, |
CMD_PIO_READ_32, |
CMD_PIO_WRITE_8, |
CMD_PIO_WRITE_16, |
CMD_PIO_WRITE_32, |
CMD_BTEST, |
CMD_PREDICATE, |
CMD_ACCEPT, |
CMD_DECLINE, |
CMD_LAST |
} irq_cmd_type; |
54,8 → 52,9 |
typedef struct { |
irq_cmd_type cmd; |
void *addr; |
unsigned long long value; |
int dstarg; |
unsigned long long value; |
unsigned int srcarg; |
unsigned int dstarg; |
} irq_cmd_t; |
typedef struct { |
67,8 → 66,10 |
#include <arch/types.h> |
#include <adt/list.h> |
#include <adt/hash_table.h> |
#include <synch/spinlock.h> |
#include <proc/task.h> |
#include <ipc/ipc.h> |
typedef enum { |
IRQ_DECLINE, /**< Decline to service. */ |
81,10 → 82,10 |
} irq_trigger_t; |
struct irq; |
typedef void (* irq_handler_t)(struct irq *irq, void *arg, ...); |
typedef void (* irq_handler_t)(struct irq *); |
/** Type for function used to clear the interrupt. */ |
typedef void (* cir_t)(void *arg, inr_t inr); |
typedef void (* cir_t)(void *, inr_t); |
/** IPC notification config structure. |
* |
98,6 → 99,8 |
answerbox_t *answerbox; |
/** Method to be used for the notification. */ |
unative_t method; |
/** Arguments that will be sent if the IRQ is claimed. */ |
unative_t scratch[IPC_CALL_LEN]; |
/** Top-half pseudocode. */ |
irq_code_t *code; |
/** Counter. */ |
141,11 → 144,11 |
/** Trigger level of the IRQ. */ |
irq_trigger_t trigger; |
/** Claim ownership of the IRQ. */ |
irq_ownership_t (* claim)(void); |
irq_ownership_t (* claim)(struct irq *); |
/** Handler for this IRQ and device. */ |
irq_handler_t handler; |
/** Argument for the handler. */ |
void *arg; |
/** Instance argument for the handler and the claim function. */ |
void *instance; |
/** Clear interrupt routine. */ |
cir_t cir; |
156,12 → 159,14 |
ipc_notif_cfg_t notif_cfg; |
} irq_t; |
extern void irq_init(count_t inrs, count_t chains); |
extern void irq_initialize(irq_t *irq); |
extern void irq_register(irq_t *irq); |
extern irq_t *irq_dispatch_and_lock(inr_t inr); |
extern irq_t *irq_find_and_lock(inr_t inr, devno_t devno); |
SPINLOCK_EXTERN(irq_uspace_hash_table_lock); |
extern hash_table_t irq_uspace_hash_table; |
extern void irq_init(count_t, count_t); |
extern void irq_initialize(irq_t *); |
extern void irq_register(irq_t *); |
extern irq_t *irq_dispatch_and_lock(inr_t); |
#endif |
#endif |
//branches/tracing/kernel/generic/include/ddi/device.h |
---|
39,6 → 39,7 |
#include <typedefs.h> |
extern devno_t device_assign_devno(void); |
extern unative_t sys_device_assign_devno(void); |
#endif |
//branches/tracing/kernel/generic/include/ddi/ddi.h |
---|
38,13 → 38,14 |
#include <ddi/ddi_arg.h> |
#include <arch/types.h> |
#include <proc/task.h> |
#include <adt/list.h> |
/** Structure representing contiguous physical memory area. */ |
typedef struct { |
uintptr_t pbase; /**< Physical base of the area. */ |
uintptr_t vbase; /**< Virtual base of the area. */ |
count_t frames; /**< Number of frames in the area. */ |
bool cacheable; /**< Cacheability. */ |
uintptr_t pbase; /**< Physical base of the area. */ |
pfn_t frames; /**< Number of frames in the area. */ |
link_t link; /**< Linked list link */ |
} parea_t; |
extern void ddi_init(void); |
//branches/tracing/kernel/generic/include/console/chardev.h |
---|
39,41 → 39,63 |
#include <synch/waitq.h> |
#include <synch/spinlock.h> |
#define CHARDEV_BUFLEN 512 |
#define INDEV_BUFLEN 512 |
struct chardev; |
struct indev; |
/* Character device operations interface. */ |
/* Input character device operations interface. */ |
typedef struct { |
/** Suspend pushing characters. */ |
void (* suspend)(struct chardev *); |
/** Resume pushing characters. */ |
void (* resume)(struct chardev *); |
/** Write character to stream. */ |
void (* write)(struct chardev *, char c); |
/** Read character directly from device, assume interrupts disabled. */ |
char (* read)(struct chardev *); |
} chardev_operations_t; |
wchar_t (* poll)(struct indev *); |
} indev_operations_t; |
/** Character input device. */ |
typedef struct chardev { |
typedef struct indev { |
char *name; |
waitq_t wq; |
waitq_t wq; |
/** Protects everything below. */ |
SPINLOCK_DECLARE(lock); |
uint8_t buffer[CHARDEV_BUFLEN]; |
SPINLOCK_DECLARE(lock); |
wchar_t buffer[INDEV_BUFLEN]; |
count_t counter; |
/** Implementation of chardev operations. */ |
chardev_operations_t *op; |
/** Implementation of indev operations. */ |
indev_operations_t *op; |
index_t index; |
void *data; |
} chardev_t; |
} indev_t; |
extern void chardev_initialize(char *name, chardev_t *chardev, |
chardev_operations_t *op); |
extern void chardev_push_character(chardev_t *chardev, uint8_t ch); |
struct outdev; |
/* Output character device operations interface. */ |
typedef struct { |
/** Write character to output. */ |
void (* write)(struct outdev *, wchar_t, bool); |
} outdev_operations_t; |
/** Character input device. */ |
typedef struct outdev { |
char *name; |
/** Protects everything below. */ |
SPINLOCK_DECLARE(lock); |
/** Implementation of outdev operations. */ |
outdev_operations_t *op; |
void *data; |
} outdev_t; |
extern void indev_initialize(char *name, indev_t *indev, |
indev_operations_t *op); |
extern void indev_push_character(indev_t *indev, wchar_t ch); |
extern wchar_t indev_pop_character(indev_t *indev); |
extern void outdev_initialize(char *name, outdev_t *outdev, |
outdev_operations_t *op); |
extern bool check_poll(indev_t *indev); |
#endif /* KERN_CHARDEV_H_ */ |
/** @} |
//branches/tracing/kernel/generic/include/console/kconsole.h |
---|
37,9 → 37,10 |
#include <adt/list.h> |
#include <synch/spinlock.h> |
#include <ipc/irq.h> |
#define MAX_CMDLINE 256 |
#define KCONSOLE_HISTORY 10 |
#define MAX_CMDLINE 256 |
#define KCONSOLE_HISTORY 10 |
typedef enum { |
ARG_TYPE_INVALID = 0, |
46,7 → 47,7 |
ARG_TYPE_INT, |
ARG_TYPE_STRING, |
/** Variable type - either symbol or string. */ |
ARG_TYPE_VAR |
ARG_TYPE_VAR |
} cmd_arg_type_t; |
/** Structure representing one argument of kconsole command line. */ |
83,13 → 84,19 |
void (* help)(void); |
} cmd_info_t; |
extern bool kconsole_notify; |
extern irq_t kconsole_irq; |
SPINLOCK_EXTERN(cmd_lock); |
extern link_t cmd_head; |
extern void kconsole_init(void); |
extern void kconsole(void *prompt); |
extern void kconsole_notify_init(void); |
extern bool kconsole_check_poll(void); |
extern void kconsole(char *prompt, char *msg, bool kcon); |
extern void kconsole_thread(void *data); |
extern int cmd_register(cmd_info_t *cmd); |
extern bool cmd_register(cmd_info_t *cmd); |
#endif |
//branches/tracing/kernel/generic/include/console/console.h |
---|
38,17 → 38,26 |
#include <arch/types.h> |
#include <console/chardev.h> |
extern chardev_t *stdin; |
extern chardev_t *stdout; |
extern indev_t *stdin; |
extern outdev_t *stdout; |
extern bool silent; |
extern indev_t *stdin_wire(void); |
extern void console_init(void); |
extern void klog_init(void); |
extern void klog_update(void); |
extern uint8_t getc(chardev_t *chardev); |
uint8_t _getc(chardev_t *chardev); |
extern count_t gets(chardev_t *chardev, char *buf, size_t buflen); |
extern void putchar(char c); |
extern wchar_t getc(indev_t *indev); |
extern count_t gets(indev_t *indev, char *buf, size_t buflen); |
extern unative_t sys_klog(int fd, const void *buf, size_t size); |
extern void grab_console(void); |
extern void release_console(void); |
extern unative_t sys_debug_enable_console(void); |
extern unative_t sys_debug_disable_console(void); |
extern void arch_grab_console(void); |
extern void arch_release_console(void); |
//branches/tracing/kernel/generic/include/printf/printf_core.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
35,20 → 35,23 |
#ifndef KERN_PRINTF_CORE_H_ |
#define KERN_PRINTF_CORE_H_ |
#include <arch/types.h> |
#include <typedefs.h> |
#include <arch/arg.h> |
/** Structure for specifying output methods for different printf clones. */ |
struct printf_spec { |
/* Output function, returns count of printed characters or EOF */ |
int (*write)(void *, size_t, void *); |
/* Support data - output stream specification, its state, locks,... */ |
typedef struct { |
/* String output function, returns number of printed characters or EOF */ |
int (*str_write)(const char *, size_t, void *); |
/* Wide string output function, returns number of printed characters or EOF */ |
int (*wstr_write)(const wchar_t *, size_t, void *); |
/* User data - output stream specification, state, locks, etc. */ |
void *data; |
} printf_spec_t; |
}; |
int printf_core(const char *fmt, printf_spec_t *ps, va_list ap); |
int printf_core(const char *fmt, struct printf_spec *ps, va_list ap); |
#endif |
/** @} |
//branches/tracing/kernel/generic/include/arch.h |
---|
63,12 → 63,11 |
as_t *as; /**< Current address space. */ |
} the_t; |
#define THE ((the_t *)(get_stack_base())) |
#define THE ((the_t * )(get_stack_base())) |
extern void the_initialize(the_t *the); |
extern void the_copy(the_t *src, the_t *dst); |
extern void arch_pre_main(void); |
extern void arch_pre_mm_init(void); |
extern void arch_post_mm_init(void); |
extern void arch_post_cpu_init(void); |
79,6 → 78,7 |
extern void reboot(void); |
extern void arch_reboot(void); |
extern void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller); |
#endif |
//branches/tracing/kernel/generic/include/mm/frame.h |
---|
38,34 → 38,82 |
#include <arch/types.h> |
#include <adt/list.h> |
#include <mm/buddy.h> |
#include <synch/spinlock.h> |
#include <mm/buddy.h> |
#include <arch/mm/page.h> |
#include <arch/mm/frame.h> |
#define ONE_FRAME 0 |
#define TWO_FRAMES 1 |
#define FOUR_FRAMES 2 |
#define ONE_FRAME 0 |
#define TWO_FRAMES 1 |
#define FOUR_FRAMES 2 |
#ifdef ARCH_STACK_FRAMES |
#define STACK_FRAMES ARCH_STACK_FRAMES |
#define STACK_FRAMES ARCH_STACK_FRAMES |
#else |
#define STACK_FRAMES ONE_FRAME |
#define STACK_FRAMES ONE_FRAME |
#endif |
/** Maximum number of zones in system. */ |
#define ZONES_MAX 16 |
/** Maximum number of zones in the system. */ |
#define ZONES_MAX 32 |
/** Convert the frame address to kernel va. */ |
#define FRAME_KA 0x1 |
typedef uint8_t frame_flags_t; |
/** Convert the frame address to kernel VA. */ |
#define FRAME_KA 0x01 |
/** Do not panic and do not sleep on failure. */ |
#define FRAME_ATOMIC 0x2 |
#define FRAME_ATOMIC 0x02 |
/** Do not start reclaiming when no free memory. */ |
#define FRAME_NO_RECLAIM 0x4 |
/** Do not allocate above 4 GiB. */ |
#define FRAME_LOW_4_GiB 0x8 |
#define FRAME_NO_RECLAIM 0x04 |
typedef uint8_t zone_flags_t; |
/** Available zone (free for allocation) */ |
#define ZONE_AVAILABLE 0x00 |
/** Zone is reserved (not available for allocation) */ |
#define ZONE_RESERVED 0x08 |
/** Zone is used by firmware (not available for allocation) */ |
#define ZONE_FIRMWARE 0x10 |
/** Currently there is no equivalent zone flags |
for frame flags */ |
#define FRAME_TO_ZONE_FLAGS(frame_flags) 0 |
typedef struct { |
count_t refcount; /**< Tracking of shared frames */ |
uint8_t buddy_order; /**< Buddy system block order */ |
link_t buddy_link; /**< Link to the next free block inside |
one order */ |
void *parent; /**< If allocated by slab, this points there */ |
} frame_t; |
typedef struct { |
pfn_t base; /**< Frame_no of the first frame |
in the frames array */ |
count_t count; /**< Size of zone */ |
count_t free_count; /**< Number of free frame_t |
structures */ |
count_t busy_count; /**< Number of busy frame_t |
structures */ |
zone_flags_t flags; /**< Type of the zone */ |
frame_t *frames; /**< Array of frame_t structures |
in this zone */ |
buddy_system_t *buddy_system; /**< Buddy system for the zone */ |
} zone_t; |
/* |
* The zoneinfo.lock must be locked when accessing zoneinfo structure. |
* Some of the attributes in zone_t structures are 'read-only' |
*/ |
typedef struct { |
SPINLOCK_DECLARE(lock); |
count_t count; |
zone_t info[ZONES_MAX]; |
} zones_t; |
extern zones_t zones; |
static inline uintptr_t PFN2ADDR(pfn_t frame) |
{ |
return (uintptr_t) (frame << FRAME_WIDTH); |
88,31 → 136,37 |
return (size_t) (frames << FRAME_WIDTH); |
} |
#define IS_BUDDY_ORDER_OK(index, order) \ |
static inline bool zone_flags_available(zone_flags_t flags) |
{ |
return ((flags & (ZONE_RESERVED | ZONE_FIRMWARE)) == 0); |
} |
#define IS_BUDDY_ORDER_OK(index, order) \ |
((~(((unative_t) -1) << (order)) & (index)) == 0) |
#define IS_BUDDY_LEFT_BLOCK(zone, frame) \ |
(((frame_index((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 0) |
#define IS_BUDDY_RIGHT_BLOCK(zone, frame) \ |
(((frame_index((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 1) |
#define IS_BUDDY_LEFT_BLOCK_ABS(zone, frame) \ |
(((frame_index_abs((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 0) |
#define IS_BUDDY_RIGHT_BLOCK_ABS(zone, frame) \ |
(((frame_index_abs((zone), (frame)) >> (frame)->buddy_order) & 0x1) == 1) |
#define IS_BUDDY_LEFT_BLOCK(zone, frame) \ |
(((frame_index((zone), (frame)) >> (frame)->buddy_order) & 0x01) == 0) |
#define IS_BUDDY_RIGHT_BLOCK(zone, frame) \ |
(((frame_index((zone), (frame)) >> (frame)->buddy_order) & 0x01) == 1) |
#define IS_BUDDY_LEFT_BLOCK_ABS(zone, frame) \ |
(((frame_index_abs((zone), (frame)) >> (frame)->buddy_order) & 0x01) == 0) |
#define IS_BUDDY_RIGHT_BLOCK_ABS(zone, frame) \ |
(((frame_index_abs((zone), (frame)) >> (frame)->buddy_order) & 0x01) == 1) |
#define frame_alloc(order, flags) \ |
#define frame_alloc(order, flags) \ |
frame_alloc_generic(order, flags, NULL) |
extern void frame_init(void); |
extern void *frame_alloc_generic(uint8_t, int, unsigned int *); |
extern void *frame_alloc_generic(uint8_t, frame_flags_t, count_t *); |
extern void frame_free(uintptr_t); |
extern void frame_reference_add(pfn_t); |
extern int zone_create(pfn_t, count_t, pfn_t, int); |
extern void *frame_get_parent(pfn_t, unsigned int); |
extern void frame_set_parent(pfn_t, void *, unsigned int); |
extern count_t find_zone(pfn_t frame, count_t count, count_t hint); |
extern count_t zone_create(pfn_t, count_t, pfn_t, zone_flags_t); |
extern void *frame_get_parent(pfn_t, count_t); |
extern void frame_set_parent(pfn_t, void *, count_t); |
extern void frame_mark_unavailable(pfn_t, count_t); |
extern uintptr_t zone_conf_size(count_t); |
extern void zone_merge(unsigned int, unsigned int); |
extern bool zone_merge(count_t, count_t); |
extern void zone_merge_all(void); |
extern uint64_t zone_total_size(void); |
120,7 → 174,7 |
* Console functions |
*/ |
extern void zone_print_list(void); |
extern void zone_print_one(unsigned int); |
extern void zone_print_one(count_t); |
#endif |
//branches/tracing/kernel/generic/include/mm/page.h |
---|
42,7 → 42,7 |
/** Operations to manipulate page mappings. */ |
typedef struct { |
void (* mapping_insert)(as_t *as, uintptr_t page, uintptr_t frame, |
int flags); |
int flags); |
void (* mapping_remove)(as_t *as, uintptr_t page); |
pte_t *(* mapping_find)(as_t *as, uintptr_t page); |
} page_mapping_operations_t; |
59,6 → 59,7 |
extern pte_t *page_table_create(int flags); |
extern void page_table_destroy(pte_t *page_table); |
extern void map_structure(uintptr_t s, size_t size); |
extern uintptr_t hw_map(uintptr_t physaddr, size_t size); |
#endif |
//branches/tracing/kernel/generic/include/mm/slab.h |
---|
41,40 → 41,40 |
#include <mm/frame.h> |
/** Minimum size to be allocated by malloc */ |
#define SLAB_MIN_MALLOC_W 4 |
#define SLAB_MIN_MALLOC_W 4 |
/** Maximum size to be allocated by malloc */ |
#define SLAB_MAX_MALLOC_W 18 |
#define SLAB_MAX_MALLOC_W 22 |
/** Initial Magazine size (TODO: dynamically growing magazines) */ |
#define SLAB_MAG_SIZE 4 |
/** If object size is less, store control structure inside SLAB */ |
#define SLAB_INSIDE_SIZE (PAGE_SIZE >> 3) |
#define SLAB_INSIDE_SIZE (PAGE_SIZE >> 3) |
/** Maximum wasted space we allow for cache */ |
#define SLAB_MAX_BADNESS(cache) \ |
#define SLAB_MAX_BADNESS(cache) \ |
(((unsigned int) PAGE_SIZE << (cache)->order) >> 2) |
/* slab_reclaim constants */ |
/** Reclaim all possible memory, because we are in memory stress */ |
#define SLAB_RECLAIM_ALL 0x1 |
#define SLAB_RECLAIM_ALL 0x01 |
/* cache_create flags */ |
/** Do not use per-cpu cache */ |
#define SLAB_CACHE_NOMAGAZINE 0x1 |
#define SLAB_CACHE_NOMAGAZINE 0x01 |
/** Have control structure inside SLAB */ |
#define SLAB_CACHE_SLINSIDE 0x2 |
#define SLAB_CACHE_SLINSIDE 0x02 |
/** We add magazine cache later, if we have this flag */ |
#define SLAB_CACHE_MAGDEFERRED (0x4 | SLAB_CACHE_NOMAGAZINE) |
#define SLAB_CACHE_MAGDEFERRED (0x04 | SLAB_CACHE_NOMAGAZINE) |
typedef struct { |
link_t link; |
count_t busy; /**< Count of full slots in magazine */ |
count_t size; /**< Number of slots in magazine */ |
void *objs[]; /**< Slots in magazine */ |
count_t busy; /**< Count of full slots in magazine */ |
count_t size; /**< Number of slots in magazine */ |
void *objs[]; /**< Slots in magazine */ |
} slab_magazine_t; |
typedef struct { |
86,23 → 86,23 |
typedef struct { |
char *name; |
link_t link; |
/* Configuration */ |
/** Size of slab position - align_up(sizeof(obj)) */ |
size_t size; |
int (*constructor)(void *obj, int kmflag); |
int (*destructor)(void *obj); |
/** Flags changing behaviour of cache */ |
int flags; |
/* Computed values */ |
uint8_t order; /**< Order of frames to be allocated */ |
unsigned int objects; /**< Number of objects that fit in */ |
uint8_t order; /**< Order of frames to be allocated */ |
unsigned int objects; /**< Number of objects that fit in */ |
/* Statistics */ |
atomic_t allocated_slabs; |
atomic_t allocated_objs; |
109,15 → 109,15 |
atomic_t cached_objs; |
/** How many magazines in magazines list */ |
atomic_t magazine_counter; |
/* Slabs */ |
link_t full_slabs; /**< List of full slabs */ |
link_t partial_slabs; /**< List of partial slabs */ |
link_t full_slabs; /**< List of full slabs */ |
link_t partial_slabs; /**< List of partial slabs */ |
SPINLOCK_DECLARE(slablock); |
/* Magazines */ |
link_t magazines; /**< List o full magazines */ |
/* Magazines */ |
link_t magazines; /**< List o full magazines */ |
SPINLOCK_DECLARE(maglock); |
/** CPU cache */ |
slab_mag_cache_t *mag_cache; |
} slab_cache_t; |
141,6 → 141,7 |
extern void *malloc(unsigned int, int); |
extern void *realloc(void *, unsigned int, int); |
extern void free(void *); |
#endif |
/** @} |
//branches/tracing/kernel/generic/include/mm/buddy.h |
---|
82,7 → 82,7 |
extern link_t *buddy_system_alloc(buddy_system_t *, uint8_t); |
extern bool buddy_system_can_alloc(buddy_system_t *, uint8_t); |
extern void buddy_system_free(buddy_system_t *, link_t *); |
extern size_t buddy_conf_size(int); |
extern size_t buddy_conf_size(size_t); |
extern link_t *buddy_system_alloc_block(buddy_system_t *, link_t *); |
#endif |
//branches/tracing/kernel/generic/include/typedefs.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
51,6 → 51,12 |
typedef int32_t inr_t; |
typedef int32_t devno_t; |
typedef int32_t wchar_t; |
typedef volatile uint8_t ioport8_t; |
typedef volatile uint16_t ioport16_t; |
typedef volatile uint32_t ioport32_t; |
#endif |
/** @} |
//branches/tracing/kernel/generic/include/macros.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
35,47 → 35,66 |
#ifndef KERN_MACROS_H_ |
#define KERN_MACROS_H_ |
#ifndef __ASM__ |
#include <arch/types.h> |
#define isdigit(d) (((d) >= '0') && ((d) <= '9')) |
#define islower(c) (((c) >= 'a') && ((c) <= 'z')) |
#define isupper(c) (((c) >= 'A') && ((c) <= 'Z')) |
#define isalpha(c) (is_lower((c)) || is_upper((c))) |
#define isalphanum(c) (is_alpha((c)) || is_digit((c))) |
#define isspace(c) (((c) == ' ') || ((c) == '\t') || ((c) == '\n') || \ |
((c) == '\r')) |
#define min(a,b) ((a) < (b) ? (a) : (b)) |
#define max(a,b) ((a) > (b) ? (a) : (b)) |
/** Return true if the intervals overlap. |
* |
* @param s1 Start address of the first interval. |
* @param sz1 Size of the first interval. |
* @param s2 Start address of the second interval. |
* @param sz2 Size of the second interval. |
* @param s1 Start address of the first interval. |
* @param sz1 Size of the first interval. |
* @param s2 Start address of the second interval. |
* @param sz2 Size of the second interval. |
*/ |
static inline int overlaps(uintptr_t s1, size_t sz1, uintptr_t s2, size_t sz2) |
{ |
uintptr_t e1 = s1 + sz1; |
uintptr_t e2 = s2 + sz2; |
return (s1 < e2) && (s2 < e1); |
return ((s1 < e2) && (s2 < e1)); |
} |
#endif /* __ASM__ */ |
#define isdigit(d) (((d) >= '0') && ((d) <= '9')) |
#define islower(c) (((c) >= 'a') && ((c) <= 'z')) |
#define isupper(c) (((c) >= 'A') && ((c) <= 'Z')) |
#define isalpha(c) (is_lower((c)) || is_upper((c))) |
#define isalphanum(c) (is_alpha((c)) || is_digit((c))) |
#define isspace(c) \ |
(((c) == ' ') || ((c) == '\t') || ((c) == '\n') || ((c) == '\r')) |
#define min(a, b) ((a) < (b) ? (a) : (b)) |
#define max(a, b) ((a) > (b) ? (a) : (b)) |
#define min3(a, b, c) ((a) < (b) ? (min(a, c)) : (min(b, c))) |
#define max3(a, b, c) ((a) > (b) ? (max(a, c)) : (max(b, c))) |
/* Compute overlapping of physical addresses */ |
#define PA_overlaps(x, szx, y, szy) \ |
#define PA_overlaps(x, szx, y, szy) \ |
overlaps(KA2PA((x)), (szx), KA2PA((y)), (szy)) |
#define SIZE2KB(size) ((size) >> 10) |
#define SIZE2MB(size) ((size) >> 20) |
#define SIZE2KB(size) ((size) >> 10) |
#define SIZE2MB(size) ((size) >> 20) |
#define KB2SIZE(kb) ((kb) << 10) |
#define MB2SIZE(mb) ((mb) << 20) |
#define KB2SIZE(kb) ((kb) << 10) |
#define MB2SIZE(mb) ((mb) << 20) |
#define STRING(arg) STRING_ARG(arg) |
#define STRING_ARG(arg) #arg |
#define STRING(arg) STRING_ARG(arg) |
#define STRING_ARG(arg) #arg |
/** Pseudorandom generator |
* |
* A pretty standard linear congruential pseudorandom |
* number generator (m = 2^32 or 2^64 depending on architecture). |
* |
*/ |
#define RANDI(seed) \ |
({ \ |
(seed) = 1103515245 * (seed) + 12345; \ |
(seed); \ |
}) |
#endif |
/** @} |
//branches/tracing/kernel/generic/include/syscall/syscall.h |
---|
44,6 → 44,7 |
SYS_THREAD_GET_ID, |
SYS_TASK_GET_ID, |
SYS_TASK_SET_NAME, |
SYS_PROGRAM_SPAWN_LOADER, |
SYS_FUTEX_SLEEP, |
62,14 → 63,18 |
SYS_IPC_ANSWER_FAST, |
SYS_IPC_ANSWER_SLOW, |
SYS_IPC_FORWARD_FAST, |
SYS_IPC_FORWARD_SLOW, |
SYS_IPC_WAIT, |
SYS_IPC_HANGUP, |
SYS_IPC_REGISTER_IRQ, |
SYS_IPC_UNREGISTER_IRQ, |
SYS_EVENT_SUBSCRIBE, |
SYS_CAP_GRANT, |
SYS_CAP_REVOKE, |
SYS_DEVICE_ASSIGN_DEVNO, |
SYS_PHYSMEM_MAP, |
SYS_IOSPACE_ENABLE, |
SYS_PREEMPT_CONTROL, |
78,6 → 83,7 |
SYS_SYSINFO_VALUE, |
SYS_DEBUG_ENABLE_CONSOLE, |
SYS_DEBUG_DISABLE_CONSOLE, |
SYS_IPC_CONNECT_KBOX, |
SYSCALL_END |
} syscall_t; |
//branches/tracing/kernel/generic/include/ipc/sysipc.h |
---|
53,6 → 53,8 |
int nonblocking); |
unative_t sys_ipc_forward_fast(unative_t callid, unative_t phoneid, |
unative_t method, unative_t arg1, unative_t arg2, int mode); |
unative_t sys_ipc_forward_slow(unative_t callid, unative_t phoneid, |
ipc_data_t *data, int mode); |
unative_t sys_ipc_hangup(int phoneid); |
unative_t sys_ipc_register_irq(inr_t inr, devno_t devno, unative_t method, |
irq_code_t *ucode); |
//branches/tracing/kernel/generic/include/ipc/irq.h |
---|
36,7 → 36,7 |
#define KERN_IPC_IRQ_H_ |
/** Maximum length of IPC IRQ program */ |
#define IRQ_MAX_PROG_SIZE 10 |
#define IRQ_MAX_PROG_SIZE 20 |
#include <ipc/ipc.h> |
#include <ddi/irq.h> |
43,16 → 43,21 |
#include <arch/types.h> |
#include <adt/list.h> |
extern int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno, |
unative_t method, irq_code_t *ucode); |
extern void ipc_irq_send_notif(irq_t *irq); |
extern void ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno); |
extern void ipc_irq_cleanup(answerbox_t *box); |
extern int ipc_irq_register(answerbox_t *, inr_t, devno_t, unative_t, |
irq_code_t *); |
extern irq_ownership_t ipc_irq_top_half_claim(irq_t *); |
extern void ipc_irq_top_half_handler(irq_t *); |
extern int ipc_irq_unregister(answerbox_t *, inr_t, devno_t); |
extern void ipc_irq_cleanup(answerbox_t *); |
/* |
* User friendly wrappers for ipc_irq_send_msg(). They are in the form |
* ipc_irq_send_msg_m(), where m is the number of payload arguments. |
*/ |
#define ipc_irq_send_msg_0(irq) \ |
ipc_irq_send_msg((irq), 0, 0, 0, 0, 0) |
#define ipc_irq_send_msg_1(irq, a1) \ |
ipc_irq_send_msg((irq), (a1), 0, 0, 0, 0) |
#define ipc_irq_send_msg_2(irq, a1, a2) \ |
64,8 → 69,8 |
#define ipc_irq_send_msg_5(irq, a1, a2, a3, a4, a5) \ |
ipc_irq_send_msg((irq), (a1), (a2), (a3), (a4), (a5)) |
extern void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, |
unative_t a3, unative_t a4, unative_t a5); |
extern void ipc_irq_send_msg(irq_t *, unative_t, unative_t, unative_t, unative_t, |
unative_t); |
#endif |
//branches/tracing/kernel/generic/include/ipc/event.h |
---|
0,0 → 1,79 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_EVENT_H_ |
#define KERN_EVENT_H_ |
#include <ipc/event_types.h> |
#include <arch/types.h> |
#include <synch/spinlock.h> |
#include <ipc/ipc.h> |
/** Event notification structure. */ |
typedef struct { |
SPINLOCK_DECLARE(lock); |
/** Answerbox for notifications. */ |
answerbox_t *answerbox; |
/** Method to be used for the notification. */ |
unative_t method; |
/** Counter. */ |
count_t counter; |
} event_t; |
extern void event_init(void); |
extern unative_t sys_event_subscribe(unative_t, unative_t); |
extern bool event_is_subscribed(event_type_t); |
extern void event_cleanup_answerbox(answerbox_t *); |
#define event_notify_0(e) \ |
event_notify((e), 0, 0, 0, 0, 0) |
#define event_notify_1(e, a1) \ |
event_notify((e), (a1), 0, 0, 0, 0) |
#define event_notify_2(e, a1, a2) \ |
event_notify((e), (a1), (a2), 0, 0, 0) |
#define event_notify_3(e, a1, a2, a3) \ |
event_notify((e), (a1), (a2), (a3), 0, 0) |
#define event_notify_4(e, a1, a2, a3, a4) \ |
event_notify((e), (a1), (a2), (a3), (a4), 0) |
#define event_notify_5(e, a1, a2, a3, a4, a5) \ |
event_notify((e), (a1), (a2), (a3), (a4), (a5)) |
extern void event_notify(event_type_t, unative_t, unative_t, unative_t, |
unative_t, unative_t); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/generic/include/ipc/event_types.h |
---|
0,0 → 1,47 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_EVENT_TYPES_H_ |
#define KERN_EVENT_TYPES_H_ |
typedef enum event_type { |
EVENT_KLOG = 0, |
EVENT_KCONSOLE, |
EVENT_END |
} event_type_t; |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/generic/include/errno.h |
---|
48,15 → 48,18 |
* sys_ipc_hangup() to close the connection. |
* Used by answerbox to close the connection. |
*/ |
#define EEXISTS -8 /* Entry already exists */ |
#define EBADMEM -9 /* Bad memory pointer */ |
#define ENOTSUP -10 /* Not supported */ |
#define EADDRNOTAVAIL -11 /* Address not available. */ |
#define ETIMEOUT -12 /* Timeout expired */ |
#define EINVAL -13 /* Invalid value */ |
#define EBUSY -14 /* Resource is busy */ |
#define EOVERFLOW -15 /* The result does not fit its size. */ |
#define EINTR -16 /* Operation was interrupted. */ |
#define EPARTY -8 /* The other party encountered an error when |
* receiving the call. |
*/ |
#define EEXISTS -9 /* Entry already exists */ |
#define EBADMEM -10 /* Bad memory pointer */ |
#define ENOTSUP -11 /* Not supported */ |
#define EADDRNOTAVAIL -12 /* Address not available. */ |
#define ETIMEOUT -13 /* Timeout expired */ |
#define EINVAL -14 /* Invalid value */ |
#define EBUSY -15 /* Resource is busy */ |
#define EOVERFLOW -16 /* The result does not fit its size. */ |
#define EINTR -17 /* Operation was interrupted. */ |
#endif |
//branches/tracing/kernel/generic/src/main/kinit.c |
---|
32,7 → 32,7 |
/** |
* @file |
* @brief Kernel initialization thread. |
* @brief Kernel initialization thread. |
* |
* This file contains kinit kernel thread which carries out |
* high level system initialization. |
64,6 → 64,8 |
#include <security/cap.h> |
#include <lib/rd.h> |
#include <ipc/ipc.h> |
#include <debug.h> |
#include <string.h> |
#ifdef CONFIG_SMP |
#include <smp/smp.h> |
72,6 → 74,15 |
#include <synch/waitq.h> |
#include <synch/spinlock.h> |
#define ALIVE_CHARS 4 |
#ifdef CONFIG_KCONSOLE |
static char alive[ALIVE_CHARS] = "-\\|/"; |
#endif |
#define INIT_PREFIX "init:" |
#define INIT_PREFIX_LEN 5 |
/** Kernel initialization thread. |
* |
* kinit takes care of higher level kernel |
82,16 → 93,19 |
*/ |
void kinit(void *arg) |
{ |
thread_t *t; |
#if defined(CONFIG_SMP) || defined(CONFIG_KCONSOLE) |
thread_t *thread; |
#endif |
/* |
* Detach kinit as nobody will call thread_join_timeout() on it. |
*/ |
thread_detach(THREAD); |
interrupts_disable(); |
#ifdef CONFIG_SMP |
#ifdef CONFIG_SMP |
if (config.cpu_count > 1) { |
waitq_initialize(&ap_completion_wq); |
/* |
100,24 → 114,18 |
* not mess together with kcpulb threads. |
* Just a beautification. |
*/ |
if ((t = thread_create(kmp, NULL, TASK, THREAD_FLAG_WIRED, |
"kmp", true))) { |
spinlock_lock(&t->lock); |
t->cpu = &cpus[0]; |
spinlock_unlock(&t->lock); |
thread_ready(t); |
thread = thread_create(kmp, NULL, TASK, THREAD_FLAG_WIRED, "kmp", true); |
if (thread != NULL) { |
spinlock_lock(&thread->lock); |
thread->cpu = &cpus[0]; |
spinlock_unlock(&thread->lock); |
thread_ready(thread); |
} else |
panic("thread_create/kmp\n"); |
thread_join(t); |
thread_detach(t); |
panic("Unable to create kmp thread."); |
thread_join(thread); |
thread_detach(thread); |
} |
#endif /* CONFIG_SMP */ |
/* |
* Now that all CPUs are up, we can report what we've found. |
*/ |
cpu_list(); |
#ifdef CONFIG_SMP |
if (config.cpu_count > 1) { |
count_t i; |
125,35 → 133,36 |
* For each CPU, create its load balancing thread. |
*/ |
for (i = 0; i < config.cpu_count; i++) { |
if ((t = thread_create(kcpulb, NULL, TASK, |
THREAD_FLAG_WIRED, "kcpulb", true))) { |
spinlock_lock(&t->lock); |
t->cpu = &cpus[i]; |
spinlock_unlock(&t->lock); |
thread_ready(t); |
thread = thread_create(kcpulb, NULL, TASK, THREAD_FLAG_WIRED, "kcpulb", true); |
if (thread != NULL) { |
spinlock_lock(&thread->lock); |
thread->cpu = &cpus[i]; |
spinlock_unlock(&thread->lock); |
thread_ready(thread); |
} else |
panic("thread_create/kcpulb\n"); |
printf("Unable to create kcpulb thread for cpu" PRIc "\n", i); |
} |
} |
#endif /* CONFIG_SMP */ |
/* |
* At this point SMP, if present, is configured. |
*/ |
arch_post_smp_init(); |
/* |
* Create kernel console. |
*/ |
t = thread_create(kconsole, (void *) "kconsole", TASK, 0, "kconsole", |
false); |
if (t) |
thread_ready(t); |
else |
panic("thread_create/kconsole\n"); |
#ifdef CONFIG_KCONSOLE |
if (stdin) { |
/* |
* Create kernel console. |
*/ |
thread = thread_create(kconsole_thread, NULL, TASK, 0, "kconsole", false); |
if (thread != NULL) |
thread_ready(thread); |
else |
printf("Unable to create kconsole thread\n"); |
} |
#endif /* CONFIG_KCONSOLE */ |
interrupts_enable(); |
/* |
164,14 → 173,31 |
for (i = 0; i < init.cnt; i++) { |
if (init.tasks[i].addr % FRAME_SIZE) { |
printf("init[%" PRIc "].addr is not frame aligned", i); |
printf("init[%" PRIc "].addr is not frame aligned\n", i); |
continue; |
} |
/* |
* Construct task name from the 'init:' prefix and the |
* name stored in the init structure (if any). |
*/ |
char namebuf[TASK_NAME_BUFLEN]; |
char *name; |
name = init.tasks[i].name; |
if (name[0] == 0) |
name = "<unknown>"; |
ASSERT(TASK_NAME_BUFLEN >= INIT_PREFIX_LEN); |
str_cpy(namebuf, TASK_NAME_BUFLEN, INIT_PREFIX); |
str_cpy(namebuf + INIT_PREFIX_LEN, |
TASK_NAME_BUFLEN - INIT_PREFIX_LEN, name); |
int rc = program_create_from_image((void *) init.tasks[i].addr, |
"init-bin", &programs[i]); |
if (rc == 0 && programs[i].task != NULL) { |
namebuf, &programs[i]); |
if ((rc == 0) && (programs[i].task != NULL)) { |
/* |
* Set capabilities to init userspace tasks. |
*/ |
184,31 → 210,34 |
/* It was the program loader and was registered */ |
} else { |
/* RAM disk image */ |
int rd = init_rd((rd_header_t *) init.tasks[i].addr, |
init.tasks[i].size); |
int rd = init_rd((rd_header_t *) init.tasks[i].addr, init.tasks[i].size); |
if (rd != RE_OK) |
printf("Init binary %" PRIc " not used, error " |
"code %d.\n", i, rd); |
printf("Init binary %" PRIc " not used (error %d)\n", i, rd); |
} |
} |
/* |
* Run user tasks with reasonable delays |
* Run user tasks. |
*/ |
for (i = 0; i < init.cnt; i++) { |
if (programs[i].task != NULL) { |
thread_usleep(50000); |
if (programs[i].task != NULL) |
program_ready(&programs[i]); |
} |
} |
#ifdef CONFIG_KCONSOLE |
if (!stdin) { |
while (1) { |
thread_sleep(10); |
printf("kinit: No stdin\nKernel alive: ."); |
unsigned int i = 0; |
while (true) { |
printf("\b%c", alive[i % ALIVE_CHARS]); |
thread_sleep(1); |
printf("kinit... "); |
i++; |
} |
} |
#endif /* CONFIG_KCONSOLE */ |
} |
/** @} |
//branches/tracing/kernel/generic/src/main/main.c |
---|
32,7 → 32,7 |
/** |
* @file |
* @brief Main initialization kernel function for all processors. |
* @brief Main initialization kernel function for all processors. |
* |
* During kernel boot, all processors, after architecture dependent |
* initialization, start executing code found in this file. After |
81,8 → 81,9 |
#include <adt/btree.h> |
#include <smp/smp.h> |
#include <ddi/ddi.h> |
#include <main/main.h> |
#include <ipc/event.h> |
/** Global configuration structure. */ |
config_t config; |
105,18 → 106,15 |
* appropriate sizes and addresses. |
*/ |
/**< Virtual address of where the kernel is loaded. */ |
/** Virtual address of where the kernel is loaded. */ |
uintptr_t hardcoded_load_address = 0; |
/**< Size of the kernel code in bytes. */ |
/** Size of the kernel code in bytes. */ |
size_t hardcoded_ktext_size = 0; |
/**< Size of the kernel data in bytes. */ |
/** Size of the kernel data in bytes. */ |
size_t hardcoded_kdata_size = 0; |
/**< Lowest safe stack virtual address. */ |
/** Lowest safe stack virtual address. */ |
uintptr_t stack_safe = 0; |
void main_bsp(void); |
void main_ap(void); |
/* |
* These two functions prevent stack from underflowing during the |
* kernel boot phase when SP is set to the very top of the reserved |
191,8 → 189,6 |
{ |
/* Keep this the first thing. */ |
the_initialize(THE); |
LOG(); |
version_print(); |
201,7 → 197,7 |
config.base, config.kernel_size, config.stack_base, |
config.stack_size); |
#ifdef CONFIG_KCONSOLE |
/* |
* kconsole data structures must be initialized very early |
* because other subsystems will register their respective |
208,6 → 204,7 |
* commands. |
*/ |
LOG_EXEC(kconsole_init()); |
#endif |
/* |
* Exception handler initialization, before architecture |
214,7 → 211,7 |
* starts adding its own handlers |
*/ |
LOG_EXEC(exc_init()); |
/* |
* Memory management subsystems initialization. |
*/ |
252,7 → 249,7 |
if (init.cnt > 0) { |
count_t i; |
for (i = 0; i < init.cnt; i++) |
printf("init[%" PRIc "].addr=%#" PRIp ", init[%" PRIc |
LOG("init[%" PRIc "].addr=%#" PRIp ", init[%" PRIc |
"].size=%#" PRIs "\n", i, init.tasks[i].addr, i, |
init.tasks[i].size); |
} else |
259,22 → 256,23 |
printf("No init binaries found\n"); |
LOG_EXEC(ipc_init()); |
LOG_EXEC(event_init()); |
LOG_EXEC(klog_init()); |
/* |
* Create kernel task. |
*/ |
task_t *kernel = task_create(AS_KERNEL, "kernel"); |
if (!kernel) |
panic("Can't create kernel task\n"); |
panic("Cannot create kernel task."); |
/* |
* Create the first thread. |
*/ |
thread_t *kinit_thread = thread_create(kinit, NULL, kernel, 0, "kinit", |
true); |
thread_t *kinit_thread |
= thread_create(kinit, NULL, kernel, 0, "kinit", true); |
if (!kinit_thread) |
panic("Can't create kinit thread\n"); |
panic("Cannot create kinit thread."); |
LOG_EXEC(thread_ready(kinit_thread)); |
/* |
//branches/tracing/kernel/generic/src/main/version.c |
---|
34,21 → 34,22 |
#include <main/version.h> |
#include <print.h> |
#include <macros.h> |
char *project = "SPARTAN kernel"; |
char *copyright = "Copyright (c) 2001-2008 HelenOS project"; |
char *release = RELEASE; |
char *name = NAME; |
char *arch = ARCH; |
char *copyright = "Copyright (c) 2001-2009 HelenOS project"; |
char *release = STRING(RELEASE); |
char *name = STRING(NAME); |
char *arch = STRING(KARCH); |
#ifdef REVISION |
char *revision = ", revision " REVISION; |
char *revision = ", revision " STRING(REVISION); |
#else |
char *revision = ""; |
#endif |
#ifdef TIMESTAMP |
char *timestamp = " on " TIMESTAMP; |
char *timestamp = " on " STRING(TIMESTAMP); |
#else |
char *timestamp = ""; |
#endif |
//branches/tracing/kernel/generic/src/main/shutdown.c |
---|
32,10 → 32,11 |
/** |
* @file |
* @brief Shutdown procedures. |
* @brief Shutdown procedures. |
*/ |
#include <arch.h> |
#include <func.h> |
#include <print.h> |
void reboot(void) |
47,6 → 48,7 |
#endif |
arch_reboot(); |
halt(); |
} |
/** @} |
//branches/tracing/kernel/generic/src/synch/rwlock.c |
---|
231,10 → 231,10 |
interrupts_restore(ipl); |
break; |
case ESYNCH_OK_ATOMIC: |
panic("_mutex_lock_timeout() == ESYNCH_OK_ATOMIC\n"); |
panic("_mutex_lock_timeout() == ESYNCH_OK_ATOMIC."); |
break; |
default: |
panic("invalid ESYNCH\n"); |
panic("Invalid ESYNCH."); |
break; |
} |
return rc; |
//branches/tracing/kernel/generic/src/synch/spinlock.c |
---|
32,9 → 32,9 |
/** |
* @file |
* @brief Spinlocks. |
* @brief Spinlocks. |
*/ |
#include <synch/spinlock.h> |
#include <atomic.h> |
#include <arch/barrier.h> |
76,7 → 76,6 |
void spinlock_lock_debug(spinlock_t *sl) |
{ |
count_t i = 0; |
char *symbol; |
bool deadlock_reported = false; |
preemption_disable(); |
106,12 → 105,10 |
continue; |
#endif |
if (i++ > DEADLOCK_THRESHOLD) { |
printf("cpu%u: looping on spinlock %" PRIp ":%s, caller=%" PRIp, |
CPU->id, sl, sl->name, CALLER); |
symbol = get_symtab_entry(CALLER); |
if (symbol) |
printf("(%s)", symbol); |
printf("\n"); |
printf("cpu%u: looping on spinlock %" PRIp ":%s, " |
"caller=%" PRIp "(%s)\n", CPU->id, sl, sl->name, |
CALLER, symtab_fmt_name_lookup(CALLER)); |
i = 0; |
deadlock_reported = true; |
} |
//branches/tracing/kernel/generic/src/debug/symtab.c |
---|
32,171 → 32,222 |
/** |
* @file |
* @brief Kernel symbol resolver. |
* @brief Kernel symbol resolver. |
*/ |
#include <symtab.h> |
#include <byteorder.h> |
#include <func.h> |
#include <string.h> |
#include <print.h> |
#include <arch/types.h> |
#include <typedefs.h> |
#include <errno.h> |
/** Return entry that seems most likely to correspond to argument. |
/** Get name of a symbol that seems most likely to correspond to address. |
* |
* Return entry that seems most likely to correspond |
* to address passed in the argument. |
* |
* @param addr Address. |
* @param name Place to store pointer to the symbol name. |
* |
* @return Pointer to respective symbol string on success, NULL otherwise. |
* @return Zero on success or negative error code, ENOENT if not found, |
* ENOTSUP if symbol table not available. |
* |
*/ |
char * get_symtab_entry(unative_t addr) |
int symtab_name_lookup(unative_t addr, char **name) |
{ |
#ifdef CONFIG_SYMTAB |
count_t i; |
for (i = 1; symbol_table[i].address_le; ++i) { |
for (i = 1; symbol_table[i].address_le; i++) { |
if (addr < uint64_t_le2host(symbol_table[i].address_le)) |
break; |
} |
if (addr >= uint64_t_le2host(symbol_table[i - 1].address_le)) |
return symbol_table[i - 1].symbol_name; |
return NULL; |
if (addr >= uint64_t_le2host(symbol_table[i - 1].address_le)) { |
*name = symbol_table[i - 1].symbol_name; |
return EOK; |
} |
*name = NULL; |
return ENOENT; |
#else |
*name = NULL; |
return ENOTSUP; |
#endif |
} |
/** Find symbols that match the parameter forward and print them. |
/** Lookup symbol by address and format for display. |
* |
* @param name - search string |
* @param startpos - starting position, changes to found position |
* @return Pointer to the part of string that should be completed or NULL |
* Returns name of closest corresponding symbol, "Not found" if none exists |
* or "N/A" if no symbol information is available. |
* |
* @param addr Address. |
* @param name Place to store pointer to the symbol name. |
* |
* @return Pointer to a human-readable string. |
* |
*/ |
static char * symtab_search_one(const char *name, int *startpos) |
char *symtab_fmt_name_lookup(unative_t addr) |
{ |
unsigned int namelen = strlen(name); |
char *curname; |
int i, j; |
int colonoffset = -1; |
char *name; |
int rc = symtab_name_lookup(addr, &name); |
switch (rc) { |
case EOK: |
return name; |
case ENOENT: |
return "Not found"; |
default: |
return "N/A"; |
} |
} |
for (i = 0; name[i]; i++) |
if (name[i] == ':') { |
colonoffset = i; |
break; |
} |
#ifdef CONFIG_SYMTAB |
for (i = *startpos; symbol_table[i].address_le; ++i) { |
/* Find a ':' in name */ |
curname = symbol_table[i].symbol_name; |
for (j = 0; curname[j] && curname[j] != ':'; j++) |
; |
if (!curname[j]) |
/** Find symbols that match the parameter forward and print them. |
* |
* @param name Search string |
* @param startpos Starting position, changes to found position |
* |
* @return Pointer to the part of string that should be completed or NULL. |
* |
*/ |
static const char *symtab_search_one(const char *name, count_t *startpos) |
{ |
count_t namelen = str_length(name); |
count_t pos; |
for (pos = *startpos; symbol_table[pos].address_le; pos++) { |
const char *curname = symbol_table[pos].symbol_name; |
/* Find a ':' in curname */ |
const char *colon = str_chr(curname, ':'); |
if (colon == NULL) |
continue; |
j -= colonoffset; |
curname += j; |
if (strlen(curname) < namelen) |
if (str_length(curname) < namelen) |
continue; |
if (strncmp(curname, name, namelen) == 0) { |
*startpos = i; |
return curname + namelen; |
if (str_lcmp(name, curname, namelen) == 0) { |
*startpos = pos; |
return (curname + str_lsize(curname, namelen)); |
} |
} |
return NULL; |
} |
/** Return address that corresponds to the entry |
#endif |
/** Return address that corresponds to the entry. |
* |
* Search symbol table, and if there is one match, return it |
* |
* @param name Name of the symbol |
* @return 0 - Not found, -1 - Duplicate symbol, other - address of symbol |
* @param addr Place to store symbol address |
* |
* @return Zero on success, ENOENT - not found, EOVERFLOW - duplicate |
* symbol, ENOTSUP - no symbol information available. |
* |
*/ |
uintptr_t get_symbol_addr(const char *name) |
int symtab_addr_lookup(const char *name, uintptr_t *addr) |
{ |
#ifdef CONFIG_SYMTAB |
count_t found = 0; |
uintptr_t addr = NULL; |
char *hint; |
int i; |
i = 0; |
while ((hint = symtab_search_one(name, &i))) { |
if (!strlen(hint)) { |
addr = uint64_t_le2host(symbol_table[i].address_le); |
count_t pos = 0; |
const char *hint; |
while ((hint = symtab_search_one(name, &pos))) { |
if (str_length(hint) == 0) { |
*addr = uint64_t_le2host(symbol_table[pos].address_le); |
found++; |
} |
i++; |
pos++; |
} |
if (found > 1) |
return ((uintptr_t) -1); |
return addr; |
return EOVERFLOW; |
if (found < 1) |
return ENOENT; |
return EOK; |
#else |
return ENOTSUP; |
#endif |
} |
/** Find symbols that match parameter and prints them */ |
/** Find symbols that match parameter and print them */ |
void symtab_print_search(const char *name) |
{ |
int i; |
uintptr_t addr; |
char *realname; |
i = 0; |
while (symtab_search_one(name, &i)) { |
addr = uint64_t_le2host(symbol_table[i].address_le); |
realname = symbol_table[i].symbol_name; |
#ifdef CONFIG_SYMTAB |
count_t pos = 0; |
while (symtab_search_one(name, &pos)) { |
uintptr_t addr = uint64_t_le2host(symbol_table[pos].address_le); |
char *realname = symbol_table[pos].symbol_name; |
printf("%p: %s\n", addr, realname); |
i++; |
pos++; |
} |
#else |
printf("No symbol information available.\n"); |
#endif |
} |
/** Symtab completion |
* |
* @param input - Search string, completes to symbol name |
* @returns - 0 - nothing found, 1 - success, >1 print duplicates |
* @param input Search string, completes to symbol name |
* @param size Input buffer size |
* |
* @return 0 - nothing found, 1 - success, >1 print duplicates |
* |
*/ |
int symtab_compl(char *input) |
int symtab_compl(char *input, count_t size) |
{ |
char output[MAX_SYMBOL_NAME + 1]; |
int startpos = 0; |
char *foundtxt; |
int found = 0; |
int i; |
char *name = input; |
/* Allow completion of pointers */ |
if (name[0] == '*' || name[0] == '&') |
#ifdef CONFIG_SYMTAB |
const char *name = input; |
/* Allow completion of pointers */ |
if ((name[0] == '*') || (name[0] == '&')) |
name++; |
/* Do not print everything */ |
if (!strlen(name)) |
/* Do not print all symbols */ |
if (str_length(name) == 0) |
return 0; |
output[0] = '\0'; |
while ((foundtxt = symtab_search_one(name, &startpos))) { |
startpos++; |
if (!found) |
strncpy(output, foundtxt, strlen(foundtxt) + 1); |
else { |
for (i = 0; output[i] && foundtxt[i] && |
output[i] == foundtxt[i]; i++) |
; |
output[i] = '\0'; |
} |
count_t found = 0; |
count_t pos = 0; |
const char *hint; |
char output[MAX_SYMBOL_NAME]; |
output[0] = 0; |
while ((hint = symtab_search_one(name, &pos))) { |
if ((found == 0) || (str_length(output) > str_length(hint))) |
str_cpy(output, MAX_SYMBOL_NAME, hint); |
pos++; |
found++; |
} |
if (!found) |
return 0; |
if (found > 1 && !strlen(output)) { |
if ((found > 1) && (str_length(output) != 0)) { |
printf("\n"); |
startpos = 0; |
while ((foundtxt = symtab_search_one(name, &startpos))) { |
printf("%s\n", symbol_table[startpos].symbol_name); |
startpos++; |
pos = 0; |
while ((hint = symtab_search_one(name, &pos))) { |
printf("%s\n", symbol_table[pos].symbol_name); |
pos++; |
} |
} |
strncpy(input, output, MAX_SYMBOL_NAME); |
if (found > 0) |
str_cpy(input, size, output); |
return found; |
#else |
return 0; |
#endif |
} |
/** @} |
//branches/tracing/kernel/generic/src/cpu/cpu.c |
---|
64,7 → 64,7 |
cpus = (cpu_t *) malloc(sizeof(cpu_t) * config.cpu_count, |
FRAME_ATOMIC); |
if (!cpus) |
panic("malloc/cpus"); |
panic("Cannot allocate CPU structures."); |
/* initialize everything */ |
memsetb(cpus, sizeof(cpu_t) * config.cpu_count, 0); |
86,7 → 86,7 |
} |
#endif /* CONFIG_SMP */ |
CPU = &cpus[config.cpu_active-1]; |
CPU = &cpus[config.cpu_active - 1]; |
CPU->active = 1; |
CPU->tlb_active = 1; |
//branches/tracing/kernel/generic/src/sysinfo/sysinfo.c |
---|
163,7 → 163,8 |
i = 0; |
} |
} |
panic("Not reached\n"); |
panic("Not reached."); |
return NULL; |
} |
//branches/tracing/kernel/generic/src/interrupt/interrupt.c |
---|
42,7 → 42,6 |
#include <debug.h> |
#include <console/kconsole.h> |
#include <console/console.h> |
#include <console/chardev.h> |
#include <console/cmd.h> |
#include <panic.h> |
#include <print.h> |
68,13 → 67,13 |
iroutine old; |
spinlock_lock(&exctbl_lock); |
old = exc_table[n].f; |
exc_table[n].f = f; |
exc_table[n].name = name; |
spinlock_unlock(&exctbl_lock); |
spinlock_unlock(&exctbl_lock); |
return old; |
} |
109,8 → 108,10 |
panic("Unhandled exception %d.", n); |
} |
#ifdef CONFIG_KCONSOLE |
/** kconsole cmd - print all exceptions */ |
static int exc_print_cmd(cmd_arg_t *argv) |
static int cmd_exc_print(cmd_arg_t *argv) |
{ |
#if (IVT_ITEMS > 0) |
unsigned int i; |
129,9 → 130,7 |
#endif |
for (i = 0; i < IVT_ITEMS; i++) { |
symbol = get_symtab_entry((unative_t) exc_table[i].f); |
if (!symbol) |
symbol = "not found"; |
symbol = symtab_fmt_name_lookup((unative_t) exc_table[i].f); |
#ifdef __32_BITS__ |
printf("%-3u %-20s %10p %s\n", i + IVT_FIRST, exc_table[i].name, |
146,7 → 145,7 |
if (((i + 1) % 20) == 0) { |
printf(" -- Press any key to continue -- "); |
spinlock_unlock(&exctbl_lock); |
getc(stdin); |
indev_pop_character(stdin); |
spinlock_lock(&exctbl_lock); |
printf("\n"); |
} |
158,15 → 157,18 |
return 1; |
} |
static cmd_info_t exc_info = { |
.name = "exc", |
.description = "Print exception table.", |
.func = exc_print_cmd, |
.func = cmd_exc_print, |
.help = NULL, |
.argc = 0, |
.argv = NULL |
}; |
#endif |
/** Initialize generic exception handling support */ |
void exc_init(void) |
{ |
175,9 → 177,11 |
for (i = 0; i < IVT_ITEMS; i++) |
exc_register(i, "undef", (iroutine) exc_undef); |
#ifdef CONFIG_KCONSOLE |
cmd_initialize(&exc_info); |
if (!cmd_register(&exc_info)) |
panic("could not register command %s\n", exc_info.name); |
printf("Cannot register command %s\n", exc_info.name); |
#endif |
} |
/** @} |
//branches/tracing/kernel/generic/src/time/timeout.c |
---|
113,7 → 113,7 |
spinlock_lock(&t->lock); |
if (t->cpu) |
panic("t->cpu != 0"); |
panic("Unexpected: t->cpu != 0."); |
t->cpu = CPU; |
t->ticks = us2ticks(time); |
//branches/tracing/kernel/generic/src/time/clock.c |
---|
81,7 → 81,7 |
faddr = frame_alloc(ONE_FRAME, FRAME_ATOMIC); |
if (!faddr) |
panic("Cannot allocate page for clock"); |
panic("Cannot allocate page for clock."); |
uptime = (uptime_t *) PA2KA(faddr); |
90,9 → 90,7 |
uptime->useconds = 0; |
clock_parea.pbase = (uintptr_t) faddr; |
clock_parea.vbase = (uintptr_t) uptime; |
clock_parea.frames = 1; |
clock_parea.cacheable = true; |
ddi_parea_register(&clock_parea); |
/* |
//branches/tracing/kernel/generic/src/ddi/device.c |
---|
31,7 → 31,7 |
*/ |
/** |
* @file |
* @brief Device numbers. |
* @brief Device numbers. |
*/ |
#include <arch/types.h> |
47,13 → 47,16 |
*/ |
devno_t device_assign_devno(void) |
{ |
devno_t devno; |
devno = (devno_t) atomic_postinc(&last); |
devno_t devno = (devno_t) atomic_postinc(&last); |
ASSERT(devno >= 0); |
return devno; |
} |
unative_t sys_device_assign_devno(void) |
{ |
return (unative_t) device_assign_devno(); |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/src/ddi/ddi.c |
---|
29,10 → 29,10 |
/** @addtogroup genericddi |
* @{ |
*/ |
/** |
* @file |
* @brief Device Driver Interface functions. |
* @brief Device Driver Interface functions. |
* |
* This file contains functions that comprise the Device Driver Interface. |
* These are the functions for mapping physical memory and enabling I/O |
68,82 → 68,100 |
* |
* @param parea Pointer to physical area structure. |
* |
* @todo This function doesn't check for overlaps. It depends on the kernel to |
* create disjunct physical memory areas. |
*/ |
void ddi_parea_register(parea_t *parea) |
{ |
ipl_t ipl; |
ipl = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&parea_lock); |
/* |
* TODO: we should really check for overlaps here. |
* However, we should be safe because the kernel is pretty sane and |
* memory of different devices doesn't overlap. |
* We don't check for overlaps here as the kernel is pretty sane. |
*/ |
btree_insert(&parea_btree, (btree_key_t) parea->pbase, parea, NULL); |
spinlock_unlock(&parea_lock); |
interrupts_restore(ipl); |
interrupts_restore(ipl); |
} |
/** Map piece of physical memory into virtual address space of current task. |
* |
* @param pf Physical address of the starting frame. |
* @param vp Virtual address of the starting page. |
* @param pf Physical address of the starting frame. |
* @param vp Virtual address of the starting page. |
* @param pages Number of pages to map. |
* @param flags Address space area flags for the mapping. |
* |
* @return 0 on success, EPERM if the caller lacks capabilities to use this |
* syscall, ENOENT if there is no task matching the specified ID or the |
* physical address space is not enabled for mapping and ENOMEM if there |
* was a problem in creating address space area. |
* syscall, EBADMEM if pf or vf is not page aligned, ENOENT if there |
* is no task matching the specified ID or the physical address space |
* is not enabled for mapping and ENOMEM if there was a problem in |
* creating address space area. |
* |
*/ |
static int ddi_physmem_map(uintptr_t pf, uintptr_t vp, count_t pages, int flags) |
{ |
ipl_t ipl; |
cap_t caps; |
mem_backend_data_t backend_data; |
backend_data.base = pf; |
backend_data.frames = pages; |
ASSERT(TASK); |
ASSERT((pf % FRAME_SIZE) == 0); |
ASSERT((vp % PAGE_SIZE) == 0); |
/* |
* Make sure the caller is authorised to make this syscall. |
*/ |
caps = cap_get(TASK); |
cap_t caps = cap_get(TASK); |
if (!(caps & CAP_MEM_MANAGER)) |
return EPERM; |
ipl = interrupts_disable(); |
/* |
* Check if the physical memory area is enabled for mapping. |
* If the architecture supports virtually indexed caches, intercept |
* attempts to create an illegal address alias. |
*/ |
spinlock_lock(&parea_lock); |
parea_t *parea; |
btree_node_t *nodep; |
parea = (parea_t *) btree_search(&parea_btree, (btree_key_t) pf, &nodep); |
if (!parea || parea->frames < pages || ((flags & AS_AREA_CACHEABLE) && |
!parea->cacheable) || (!(flags & AS_AREA_CACHEABLE) && |
parea->cacheable)) { |
/* |
* This physical memory area cannot be mapped. |
mem_backend_data_t backend_data; |
backend_data.base = pf; |
backend_data.frames = pages; |
ipl_t ipl = interrupts_disable(); |
/* Find the zone of the physical memory */ |
spinlock_lock(&zones.lock); |
count_t znum = find_zone(ADDR2PFN(pf), pages, 0); |
if (znum == (count_t) -1) { |
/* Frames not found in any zones |
* -> assume it is hardware device and allow mapping |
*/ |
spinlock_unlock(&zones.lock); |
goto map; |
} |
if (zones.info[znum].flags & ZONE_FIRMWARE) { |
/* Frames are part of firmware */ |
spinlock_unlock(&zones.lock); |
goto map; |
} |
if (zone_flags_available(zones.info[znum].flags)) { |
/* Frames are part of physical memory, check if the memory |
* region is enabled for mapping. |
*/ |
spinlock_unlock(&zones.lock); |
spinlock_lock(&parea_lock); |
btree_node_t *nodep; |
parea_t *parea = (parea_t *) btree_search(&parea_btree, |
(btree_key_t) pf, &nodep); |
if ((!parea) || (parea->frames < pages)) |
goto err; |
spinlock_unlock(&parea_lock); |
interrupts_restore(ipl); |
return ENOENT; |
goto map; |
} |
spinlock_unlock(&parea_lock); |
err: |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return ENOENT; |
map: |
spinlock_lock(&TASK->lock); |
if (!as_area_create(TASK->as, flags, pages * PAGE_SIZE, vp, AS_AREA_ATTR_NONE, |
&phys_backend, &backend_data)) { |
if (!as_area_create(TASK->as, flags, pages * PAGE_SIZE, vp, |
AS_AREA_ATTR_NONE, &phys_backend, &backend_data)) { |
/* |
* The address space area could not have been created. |
* We report it using ENOMEM. |
169,28 → 187,24 |
* @param size Size of the enabled I/O space.. |
* |
* @return 0 on success, EPERM if the caller lacks capabilities to use this |
* syscall, ENOENT if there is no task matching the specified ID. |
* syscall, ENOENT if there is no task matching the specified ID. |
* |
*/ |
static int ddi_iospace_enable(task_id_t id, uintptr_t ioaddr, size_t size) |
{ |
ipl_t ipl; |
cap_t caps; |
task_t *t; |
int rc; |
/* |
* Make sure the caller is authorised to make this syscall. |
*/ |
caps = cap_get(TASK); |
cap_t caps = cap_get(TASK); |
if (!(caps & CAP_IO_MANAGER)) |
return EPERM; |
ipl = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&tasks_lock); |
t = task_find_by_id(id); |
task_t *task = task_find_by_id(id); |
if ((!t) || (!context_check(CONTEXT, t->context))) { |
if ((!task) || (!context_check(CONTEXT, task->context))) { |
/* |
* There is no task with the specified ID |
* or the task belongs to a different security |
200,15 → 214,16 |
interrupts_restore(ipl); |
return ENOENT; |
} |
/* Lock the task and release the lock protecting tasks_btree. */ |
spinlock_lock(&t->lock); |
spinlock_lock(&task->lock); |
spinlock_unlock(&tasks_lock); |
rc = ddi_iospace_enable_arch(t, ioaddr, size); |
spinlock_unlock(&t->lock); |
int rc = ddi_iospace_enable_arch(task, ioaddr, size); |
spinlock_unlock(&task->lock); |
interrupts_restore(ipl); |
return rc; |
} |
220,7 → 235,8 |
* @param flags Flags of newly mapped pages |
* |
* @return 0 on success, otherwise it returns error code found in errno.h |
*/ |
* |
*/ |
unative_t sys_physmem_map(unative_t phys_base, unative_t virt_base, |
unative_t pages, unative_t flags) |
{ |
234,16 → 250,15 |
* @param uspace_io_arg User space address of DDI argument structure. |
* |
* @return 0 on success, otherwise it returns error code found in errno.h |
*/ |
* |
*/ |
unative_t sys_iospace_enable(ddi_ioarg_t *uspace_io_arg) |
{ |
ddi_ioarg_t arg; |
int rc; |
rc = copy_from_uspace(&arg, uspace_io_arg, sizeof(ddi_ioarg_t)); |
int rc = copy_from_uspace(&arg, uspace_io_arg, sizeof(ddi_ioarg_t)); |
if (rc != 0) |
return (unative_t) rc; |
return (unative_t) ddi_iospace_enable((task_id_t) arg.task_id, |
(uintptr_t) arg.ioaddr, (size_t) arg.size); |
} |
251,20 → 266,24 |
/** Disable or enable preemption. |
* |
* @param enable If non-zero, the preemption counter will be decremented, |
* leading to potential enabling of preemption. Otherwise the preemption |
* counter will be incremented, preventing preemption from occurring. |
* leading to potential enabling of preemption. Otherwise |
* the preemption counter will be incremented, preventing |
* preemption from occurring. |
* |
* @return Zero on success or EPERM if callers capabilities are not sufficient. |
*/ |
* |
*/ |
unative_t sys_preempt_control(int enable) |
{ |
if (!cap_get(TASK) & CAP_PREEMPT_CONTROL) |
return EPERM; |
if (enable) |
preemption_enable(); |
else |
preemption_disable(); |
return 0; |
if (!cap_get(TASK) & CAP_PREEMPT_CONTROL) |
return EPERM; |
if (enable) |
preemption_enable(); |
else |
preemption_disable(); |
return 0; |
} |
/** @} |
//branches/tracing/kernel/generic/src/ddi/irq.c |
---|
39,7 → 39,8 |
* |
* This code is designed to support: |
* - multiple devices sharing single IRQ |
* - multiple IRQs per signle device |
* - multiple IRQs per single device |
* - multiple instances of the same device |
* |
* |
* Note about architectures. |
68,8 → 69,11 |
#include <ddi/irq.h> |
#include <adt/hash_table.h> |
#include <mm/slab.h> |
#include <arch/types.h> |
#include <synch/spinlock.h> |
#include <console/console.h> |
#include <memstr.h> |
#include <arch.h> |
#define KEY_INR 0 |
76,23 → 80,33 |
#define KEY_DEVNO 1 |
/** |
* Spinlock protecting the hash table. |
* Spinlock protecting the kernel IRQ hash table. |
* This lock must be taken only when interrupts are disabled. |
*/ |
SPINLOCK_INITIALIZE(irq_hash_table_lock); |
static hash_table_t irq_hash_table; |
SPINLOCK_INITIALIZE(irq_kernel_hash_table_lock); |
/** The kernel IRQ hash table. */ |
static hash_table_t irq_kernel_hash_table; |
/** |
* Spinlock protecting the uspace IRQ hash table. |
* This lock must be taken only when interrupts are disabled. |
*/ |
SPINLOCK_INITIALIZE(irq_uspace_hash_table_lock); |
/** The uspace IRQ hash table. */ |
hash_table_t irq_uspace_hash_table; |
/** |
* Hash table operations for cases when we know that |
* there will be collisions between different keys. |
*/ |
static index_t irq_ht_hash(unative_t *key); |
static bool irq_ht_compare(unative_t *key, count_t keys, link_t *item); |
static void irq_ht_remove(link_t *item); |
static hash_table_operations_t irq_ht_ops = { |
.hash = irq_ht_hash, |
.compare = irq_ht_compare, |
.remove_callback = NULL /* not used */ |
.remove_callback = irq_ht_remove, |
}; |
/** |
103,13 → 117,17 |
*/ |
static index_t irq_lin_hash(unative_t *key); |
static bool irq_lin_compare(unative_t *key, count_t keys, link_t *item); |
static void irq_lin_remove(link_t *item); |
static hash_table_operations_t irq_lin_ops = { |
.hash = irq_lin_hash, |
.compare = irq_lin_compare, |
.remove_callback = NULL /* not used */ |
.remove_callback = irq_lin_remove, |
}; |
/** Number of buckets in either of the hash tables. */ |
static count_t buckets; |
/** Initialize IRQ subsystem. |
* |
* @param inrs Numbers of unique IRQ numbers or INRs. |
117,6 → 135,7 |
*/ |
void irq_init(count_t inrs, count_t chains) |
{ |
buckets = chains; |
/* |
* Be smart about the choice of the hash table operations. |
* In cases in which inrs equals the requested number of |
123,10 → 142,17 |
* chains (i.e. where there is no collision between |
* different keys), we can use optimized set of operations. |
*/ |
if (inrs == chains) |
hash_table_create(&irq_hash_table, chains, 2, &irq_lin_ops); |
else |
hash_table_create(&irq_hash_table, chains, 2, &irq_ht_ops); |
if (inrs == chains) { |
hash_table_create(&irq_uspace_hash_table, chains, 2, |
&irq_lin_ops); |
hash_table_create(&irq_kernel_hash_table, chains, 2, |
&irq_lin_ops); |
} else { |
hash_table_create(&irq_uspace_hash_table, chains, 2, |
&irq_ht_ops); |
hash_table_create(&irq_kernel_hash_table, chains, 2, |
&irq_ht_ops); |
} |
} |
/** Initialize one IRQ structure. |
136,23 → 162,12 |
*/ |
void irq_initialize(irq_t *irq) |
{ |
memsetb(irq, sizeof(irq_t), 0); |
link_initialize(&irq->link); |
spinlock_initialize(&irq->lock, "irq.lock"); |
irq->preack = false; |
link_initialize(&irq->notif_cfg.link); |
irq->inr = -1; |
irq->devno = -1; |
irq->trigger = (irq_trigger_t) 0; |
irq->claim = NULL; |
irq->handler = NULL; |
irq->arg = NULL; |
irq->cir = NULL; |
irq->cir_arg = NULL; |
irq->notif_cfg.notify = false; |
irq->notif_cfg.answerbox = NULL; |
irq->notif_cfg.code = NULL; |
irq->notif_cfg.method = 0; |
irq->notif_cfg.counter = 0; |
link_initialize(&irq->notif_cfg.link); |
} |
/** Register IRQ for device. |
159,9 → 174,10 |
* |
* The irq structure must be filled with information |
* about the interrupt source and with the claim() |
* function pointer and irq_handler() function pointer. |
* function pointer and handler() function pointer. |
* |
* @param irq IRQ structure belonging to a device. |
* @param irq IRQ structure belonging to a device. |
* @return True on success, false on failure. |
*/ |
void irq_register(irq_t *irq) |
{ |
172,88 → 188,101 |
}; |
ipl = interrupts_disable(); |
spinlock_lock(&irq_hash_table_lock); |
hash_table_insert(&irq_hash_table, key, &irq->link); |
spinlock_unlock(&irq_hash_table_lock); |
spinlock_lock(&irq_kernel_hash_table_lock); |
spinlock_lock(&irq->lock); |
hash_table_insert(&irq_kernel_hash_table, key, &irq->link); |
spinlock_unlock(&irq->lock); |
spinlock_unlock(&irq_kernel_hash_table_lock); |
interrupts_restore(ipl); |
} |
/** Dispatch the IRQ. |
/** Search and lock the uspace IRQ hash table. |
* |
* We assume this function is only called from interrupt |
* context (i.e. that interrupts are disabled prior to |
* this call). |
* |
* This function attempts to lookup a fitting IRQ |
* structure. In case of success, return with interrupts |
* disabled and holding the respective structure. |
* |
* @param inr Interrupt number (aka inr or irq). |
* |
* @return IRQ structure of the respective device or NULL. |
*/ |
irq_t *irq_dispatch_and_lock(inr_t inr) |
static irq_t *irq_dispatch_and_lock_uspace(inr_t inr) |
{ |
link_t *lnk; |
unative_t key[] = { |
(unative_t) inr, |
(unative_t) -1 /* search will use claim() instead of devno */ |
(unative_t) -1 /* search will use claim() instead of devno */ |
}; |
spinlock_lock(&irq_hash_table_lock); |
lnk = hash_table_find(&irq_hash_table, key); |
spinlock_lock(&irq_uspace_hash_table_lock); |
lnk = hash_table_find(&irq_uspace_hash_table, key); |
if (lnk) { |
irq_t *irq; |
irq = hash_table_get_instance(lnk, irq_t, link); |
spinlock_unlock(&irq_hash_table_lock); |
spinlock_unlock(&irq_uspace_hash_table_lock); |
return irq; |
} |
spinlock_unlock(&irq_uspace_hash_table_lock); |
spinlock_unlock(&irq_hash_table_lock); |
return NULL; |
return NULL; |
} |
/** Find the IRQ structure corresponding to inr and devno. |
/** Search and lock the kernel IRQ hash table. |
* |
* This functions attempts to lookup the IRQ structure |
* corresponding to its arguments. On success, this |
* function returns with interrups disabled, holding |
* the lock of the respective IRQ structure. |
* |
* This function assumes interrupts are already disabled. |
* |
* @param inr INR being looked up. |
* @param devno Devno being looked up. |
* |
* @return Locked IRQ structure on success or NULL on failure. |
*/ |
irq_t *irq_find_and_lock(inr_t inr, devno_t devno) |
static irq_t *irq_dispatch_and_lock_kernel(inr_t inr) |
{ |
link_t *lnk; |
unative_t keys[] = { |
unative_t key[] = { |
(unative_t) inr, |
(unative_t) devno |
(unative_t) -1 /* search will use claim() instead of devno */ |
}; |
spinlock_lock(&irq_hash_table_lock); |
lnk = hash_table_find(&irq_hash_table, keys); |
spinlock_lock(&irq_kernel_hash_table_lock); |
lnk = hash_table_find(&irq_kernel_hash_table, key); |
if (lnk) { |
irq_t *irq; |
irq = hash_table_get_instance(lnk, irq_t, link); |
spinlock_unlock(&irq_hash_table_lock); |
spinlock_unlock(&irq_kernel_hash_table_lock); |
return irq; |
} |
spinlock_unlock(&irq_kernel_hash_table_lock); |
spinlock_unlock(&irq_hash_table_lock); |
return NULL; |
} |
return NULL; |
/** Dispatch the IRQ. |
* |
* We assume this function is only called from interrupt |
* context (i.e. that interrupts are disabled prior to |
* this call). |
* |
* This function attempts to lookup a fitting IRQ |
* structure. In case of success, return with interrupts |
* disabled and holding the respective structure. |
* |
* @param inr Interrupt number (aka inr or irq). |
* |
* @return IRQ structure of the respective device or NULL. |
*/ |
irq_t *irq_dispatch_and_lock(inr_t inr) |
{ |
irq_t *irq; |
/* |
* If the kernel console is silenced, |
* then try first the uspace handlers, |
* eventually fall back to kernel handlers. |
* |
* If the kernel console is active, |
* then do it the other way around. |
*/ |
if (silent) { |
irq = irq_dispatch_and_lock_uspace(inr); |
if (irq) |
return irq; |
return irq_dispatch_and_lock_kernel(inr); |
} |
irq = irq_dispatch_and_lock_kernel(inr); |
if (irq) |
return irq; |
return irq_dispatch_and_lock_uspace(inr); |
} |
/** Compute hash index for the key. |
272,7 → 301,7 |
index_t irq_ht_hash(unative_t key[]) |
{ |
inr_t inr = (inr_t) key[KEY_INR]; |
return inr % irq_hash_table.entries; |
return inr % buckets; |
} |
/** Compare hash table element with a key. |
306,7 → 335,8 |
spinlock_lock(&irq->lock); |
if (devno == -1) { |
/* Invoked by irq_dispatch_and_lock(). */ |
rv = ((irq->inr == inr) && (irq->claim() == IRQ_ACCEPT)); |
rv = ((irq->inr == inr) && |
(irq->claim(irq) == IRQ_ACCEPT)); |
} else { |
/* Invoked by irq_find_and_lock(). */ |
rv = ((irq->inr == inr) && (irq->devno == devno)); |
319,6 → 349,17 |
return rv; |
} |
/** Unlock IRQ structure after hash_table_remove(). |
* |
* @param lnk Link in the removed and locked IRQ structure. |
*/ |
void irq_ht_remove(link_t *lnk) |
{ |
irq_t *irq __attribute__((unused)) |
= hash_table_get_instance(lnk, irq_t, link); |
spinlock_unlock(&irq->lock); |
} |
/** Compute hash index for the key. |
* |
* This function computes hash index into |
365,7 → 406,7 |
spinlock_lock(&irq->lock); |
if (devno == -1) { |
/* Invoked by irq_dispatch_and_lock() */ |
rv = (irq->claim() == IRQ_ACCEPT); |
rv = (irq->claim(irq) == IRQ_ACCEPT); |
} else { |
/* Invoked by irq_find_and_lock() */ |
rv = (irq->devno == devno); |
378,5 → 419,16 |
return rv; |
} |
/** Unlock IRQ structure after hash_table_remove(). |
* |
* @param lnk Link in the removed and locked IRQ structure. |
*/ |
void irq_lin_remove(link_t *lnk) |
{ |
irq_t *irq __attribute__((unused)) |
= hash_table_get_instance(lnk, irq_t, link); |
spinlock_unlock(&irq->lock); |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/src/console/console.c |
---|
39,79 → 39,70 |
#include <synch/waitq.h> |
#include <synch/spinlock.h> |
#include <arch/types.h> |
#include <ddi/device.h> |
#include <ddi/irq.h> |
#include <ddi/ddi.h> |
#include <ipc/event.h> |
#include <ipc/irq.h> |
#include <arch.h> |
#include <func.h> |
#include <print.h> |
#include <putchar.h> |
#include <atomic.h> |
#include <syscall/copy.h> |
#include <errno.h> |
#include <string.h> |
#define KLOG_SIZE PAGE_SIZE |
#define KLOG_LATENCY 8 |
#define KLOG_PAGES 4 |
#define KLOG_LENGTH (KLOG_PAGES * PAGE_SIZE / sizeof(wchar_t)) |
#define KLOG_LATENCY 8 |
/**< Kernel log cyclic buffer */ |
static char klog[KLOG_SIZE] __attribute__ ((aligned (PAGE_SIZE))); |
/** Kernel log cyclic buffer */ |
static wchar_t klog[KLOG_LENGTH] __attribute__ ((aligned (PAGE_SIZE))); |
/**< Kernel log initialized */ |
/** Kernel log initialized */ |
static bool klog_inited = false; |
/**< First kernel log characters */ |
/** First kernel log characters */ |
static index_t klog_start = 0; |
/**< Number of valid kernel log characters */ |
/** Number of valid kernel log characters */ |
static size_t klog_len = 0; |
/**< Number of stored (not printed) kernel log characters */ |
/** Number of stored (not printed) kernel log characters */ |
static size_t klog_stored = 0; |
/**< Number of stored kernel log characters for uspace */ |
/** Number of stored kernel log characters for uspace */ |
static size_t klog_uspace = 0; |
/**< Kernel log spinlock */ |
/** Kernel log spinlock */ |
SPINLOCK_INITIALIZE(klog_lock); |
/** Physical memory area used for klog buffer */ |
static parea_t klog_parea; |
/* |
* For now, we use 0 as INR. |
* However, it is therefore desirable to have architecture specific |
* definition of KLOG_VIRT_INR in the future. |
*/ |
#define KLOG_VIRT_INR 0 |
static irq_t klog_irq; |
static chardev_operations_t null_stdout_ops = { |
.suspend = NULL, |
.resume = NULL, |
.write = NULL, |
.read = NULL |
static indev_operations_t stdin_ops = { |
.poll = NULL |
}; |
chardev_t null_stdout = { |
.name = "null", |
.op = &null_stdout_ops |
}; |
/** Silence output */ |
bool silent = false; |
/** Allways refuse IRQ ownership. |
* |
* This is not a real IRQ, so we always decline. |
* |
* @return Always returns IRQ_DECLINE. |
*/ |
static irq_ownership_t klog_claim(void) |
/** Standard input and output character devices */ |
indev_t *stdin = NULL; |
outdev_t *stdout = NULL; |
indev_t *stdin_wire(void) |
{ |
return IRQ_DECLINE; |
if (stdin == NULL) { |
stdin = malloc(sizeof(indev_t), FRAME_ATOMIC); |
if (stdin != NULL) |
indev_initialize("stdin", stdin, &stdin_ops); |
} |
return stdin; |
} |
/** Standard input character device */ |
chardev_t *stdin = NULL; |
chardev_t *stdout = &null_stdout; |
/** Initialize kernel logging facility |
* |
* The shared area contains kernel cyclic buffer. Userspace application may |
* be notified on new data with indication of position and size |
* of the data within the circular buffer. |
* |
*/ |
void klog_init(void) |
{ |
118,26 → 109,13 |
void *faddr = (void *) KA2PA(klog); |
ASSERT((uintptr_t) faddr % FRAME_SIZE == 0); |
ASSERT(KLOG_SIZE % FRAME_SIZE == 0); |
devno_t devno = device_assign_devno(); |
klog_parea.pbase = (uintptr_t) faddr; |
klog_parea.vbase = (uintptr_t) klog; |
klog_parea.frames = SIZE2FRAMES(KLOG_SIZE); |
klog_parea.cacheable = true; |
klog_parea.frames = SIZE2FRAMES(sizeof(klog)); |
ddi_parea_register(&klog_parea); |
sysinfo_set_item_val("klog.faddr", NULL, (unative_t) faddr); |
sysinfo_set_item_val("klog.pages", NULL, SIZE2FRAMES(KLOG_SIZE)); |
sysinfo_set_item_val("klog.devno", NULL, devno); |
sysinfo_set_item_val("klog.inr", NULL, KLOG_VIRT_INR); |
irq_initialize(&klog_irq); |
klog_irq.devno = devno; |
klog_irq.inr = KLOG_VIRT_INR; |
klog_irq.claim = klog_claim; |
irq_register(&klog_irq); |
sysinfo_set_item_val("klog.pages", NULL, KLOG_PAGES); |
spinlock_lock(&klog_lock); |
klog_inited = true; |
144,91 → 122,88 |
spinlock_unlock(&klog_lock); |
} |
/** Get character from character device. Do not echo character. |
* |
* @param chardev Character device. |
* |
* @return Character read. |
*/ |
uint8_t _getc(chardev_t *chardev) |
void grab_console(void) |
{ |
uint8_t ch; |
ipl_t ipl; |
bool prev = silent; |
silent = false; |
arch_grab_console(); |
/* Force the console to print the prompt */ |
if ((stdin) && (prev)) |
indev_push_character(stdin, '\n'); |
} |
if (atomic_get(&haltstate)) { |
/* If we are here, we are hopefully on the processor, that |
* issued the 'halt' command, so proceed to read the character |
* directly from input |
*/ |
if (chardev->op->read) |
return chardev->op->read(chardev); |
/* no other way of interacting with user, halt */ |
if (CPU) |
printf("cpu%u: ", CPU->id); |
else |
printf("cpu: "); |
printf("halted - no kconsole\n"); |
cpu_halt(); |
} |
void release_console(void) |
{ |
silent = true; |
arch_release_console(); |
} |
waitq_sleep(&chardev->wq); |
ipl = interrupts_disable(); |
spinlock_lock(&chardev->lock); |
ch = chardev->buffer[(chardev->index - chardev->counter) % CHARDEV_BUFLEN]; |
chardev->counter--; |
spinlock_unlock(&chardev->lock); |
interrupts_restore(ipl); |
/** Tell kernel to get keyboard/console access again */ |
unative_t sys_debug_enable_console(void) |
{ |
#ifdef CONFIG_KCONSOLE |
grab_console(); |
return true; |
#else |
return false; |
#endif |
} |
chardev->op->resume(chardev); |
return ch; |
/** Tell kernel to relinquish keyboard/console access */ |
unative_t sys_debug_disable_console(void) |
{ |
release_console(); |
return true; |
} |
/** Get string from character device. |
/** Get string from input character device. |
* |
* Read characters from character device until first occurrence |
* Read characters from input character device until first occurrence |
* of newline character. |
* |
* @param chardev Character device. |
* @param buf Buffer where to store string terminated by '\0'. |
* @param indev Input character device. |
* @param buf Buffer where to store string terminated by NULL. |
* @param buflen Size of the buffer. |
* |
* @return Number of characters read. |
* |
*/ |
count_t gets(chardev_t *chardev, char *buf, size_t buflen) |
count_t gets(indev_t *indev, char *buf, size_t buflen) |
{ |
index_t index = 0; |
char ch; |
while (index < buflen) { |
ch = _getc(chardev); |
size_t offset = 0; |
count_t count = 0; |
buf[offset] = 0; |
wchar_t ch; |
while ((ch = indev_pop_character(indev)) != '\n') { |
if (ch == '\b') { |
if (index > 0) { |
index--; |
/* Space backspace, space */ |
if (count > 0) { |
/* Space, backspace, space */ |
putchar('\b'); |
putchar(' '); |
putchar('\b'); |
count--; |
offset = str_lsize(buf, count); |
buf[offset] = 0; |
} |
continue; |
} |
putchar(ch); |
if (ch == '\n') { /* end of string => write 0, return */ |
buf[index] = '\0'; |
return (count_t) index; |
} |
buf[index++] = ch; |
if (chr_encode(ch, buf, &offset, buflen - 1) == EOK) { |
putchar(ch); |
count++; |
buf[offset] = 0; |
} |
} |
return (count_t) index; |
return count; |
} |
/** Get character from device & echo it to screen */ |
uint8_t getc(chardev_t *chardev) |
/** Get character from input device & echo it to screen */ |
wchar_t getc(indev_t *indev) |
{ |
uint8_t ch; |
ch = _getc(chardev); |
wchar_t ch = indev_pop_character(indev); |
putchar(ch); |
return ch; |
} |
237,8 → 212,8 |
{ |
spinlock_lock(&klog_lock); |
if ((klog_inited) && (klog_irq.notif_cfg.notify) && (klog_uspace > 0)) { |
ipc_irq_send_msg_3(&klog_irq, klog_start, klog_len, klog_uspace); |
if ((klog_inited) && (event_is_subscribed(EVENT_KLOG)) && (klog_uspace > 0)) { |
event_notify_3(EVENT_KLOG, klog_start, klog_len, klog_uspace); |
klog_uspace = 0; |
} |
245,27 → 220,27 |
spinlock_unlock(&klog_lock); |
} |
void putchar(char c) |
void putchar(const wchar_t ch) |
{ |
spinlock_lock(&klog_lock); |
if ((klog_stored > 0) && (stdout->op->write)) { |
if ((klog_stored > 0) && (stdout) && (stdout->op->write)) { |
/* Print charaters stored in kernel log */ |
index_t i; |
for (i = klog_len - klog_stored; i < klog_len; i++) |
stdout->op->write(stdout, klog[(klog_start + i) % KLOG_SIZE]); |
stdout->op->write(stdout, klog[(klog_start + i) % KLOG_LENGTH], silent); |
klog_stored = 0; |
} |
/* Store character in the cyclic kernel log */ |
klog[(klog_start + klog_len) % KLOG_SIZE] = c; |
if (klog_len < KLOG_SIZE) |
klog[(klog_start + klog_len) % KLOG_LENGTH] = ch; |
if (klog_len < KLOG_LENGTH) |
klog_len++; |
else |
klog_start = (klog_start + 1) % KLOG_SIZE; |
klog_start = (klog_start + 1) % KLOG_LENGTH; |
if (stdout->op->write) |
stdout->op->write(stdout, c); |
if ((stdout) && (stdout->op->write)) |
stdout->op->write(stdout, ch, silent); |
else { |
/* The character is just in the kernel log */ |
if (klog_stored < klog_len) |
278,7 → 253,7 |
/* Check notify uspace to update */ |
bool update; |
if ((klog_uspace > KLOG_LATENCY) || (c == '\n')) |
if ((klog_uspace > KLOG_LATENCY) || (ch == '\n')) |
update = true; |
else |
update = false; |
289,5 → 264,38 |
klog_update(); |
} |
/** Print using kernel facility |
* |
* Print to kernel log. |
* |
*/ |
unative_t sys_klog(int fd, const void *buf, size_t size) |
{ |
char *data; |
int rc; |
if (size > PAGE_SIZE) |
return ELIMIT; |
if (size > 0) { |
data = (char *) malloc(size + 1, 0); |
if (!data) |
return ENOMEM; |
rc = copy_from_uspace(data, buf, size); |
if (rc) { |
free(data); |
return rc; |
} |
data[size] = 0; |
printf("%s", data); |
free(data); |
} else |
klog_update(); |
return size; |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/src/console/cmd.c |
---|
31,8 → 31,8 |
*/ |
/** |
* @file cmd.c |
* @brief Kernel console command wrappers. |
* @file cmd.c |
* @brief Kernel console command wrappers. |
* |
* This file is meant to contain all wrapper functions for |
* all kconsole commands. The point is in separating |
50,9 → 50,9 |
#include <arch.h> |
#include <config.h> |
#include <func.h> |
#include <string.h> |
#include <macros.h> |
#include <debug.h> |
#include <symtab.h> |
#include <cpu.h> |
#include <mm/tlb.h> |
#include <arch/mm/tlb.h> |
64,6 → 64,9 |
#include <proc/task.h> |
#include <ipc/ipc.h> |
#include <ipc/irq.h> |
#include <ipc/event.h> |
#include <symtab.h> |
#include <errno.h> |
#ifdef CONFIG_TEST |
#include <test.h> |
78,12 → 81,6 |
.argc = 0 |
}; |
static cmd_info_t exit_info = { |
.name = "exit", |
.description = "Exit kconsole.", |
.argc = 0 |
}; |
static int cmd_reboot(cmd_arg_t *argv); |
static cmd_info_t reboot_info = { |
.name = "reboot", |
456,7 → 453,6 |
&continue_info, |
&cpus_info, |
&desc_info, |
&exit_info, |
&reboot_info, |
&uptime_info, |
&halt_info, |
501,7 → 497,7 |
for (i = 0; basic_commands[i]; i++) { |
cmd_initialize(basic_commands[i]); |
if (!cmd_register(basic_commands[i])) |
panic("could not register command %s\n", basic_commands[i]->name); |
printf("Cannot register command %s\n", basic_commands[i]->name); |
} |
} |
514,23 → 510,31 |
*/ |
int cmd_help(cmd_arg_t *argv) |
{ |
link_t *cur; |
spinlock_lock(&cmd_lock); |
link_t *cur; |
count_t len = 0; |
for (cur = cmd_head.next; cur != &cmd_head; cur = cur->next) { |
cmd_info_t *hlp; |
hlp = list_get_instance(cur, cmd_info_t, link); |
spinlock_lock(&hlp->lock); |
if (str_length(hlp->name) > len) |
len = str_length(hlp->name); |
spinlock_unlock(&hlp->lock); |
} |
for (cur = cmd_head.next; cur != &cmd_head; cur = cur->next) { |
cmd_info_t *hlp; |
hlp = list_get_instance(cur, cmd_info_t, link); |
spinlock_lock(&hlp->lock); |
printf("%s - %s\n", hlp->name, hlp->description); |
printf("%-*s %s\n", len, hlp->name, hlp->description); |
spinlock_unlock(&hlp->lock); |
} |
spinlock_unlock(&cmd_lock); |
spinlock_unlock(&cmd_lock); |
return 1; |
} |
578,7 → 582,7 |
int cmd_desc(cmd_arg_t *argv) |
{ |
link_t *cur; |
spinlock_lock(&cmd_lock); |
for (cur = cmd_head.next; cur != &cmd_head; cur = cur->next) { |
586,8 → 590,8 |
hlp = list_get_instance(cur, cmd_info_t, link); |
spinlock_lock(&hlp->lock); |
if (strncmp(hlp->name, (const char *) argv->buffer, strlen(hlp->name)) == 0) { |
if (str_lcmp(hlp->name, (const char *) argv->buffer, str_length(hlp->name)) == 0) { |
printf("%s - %s\n", hlp->name, hlp->description); |
if (hlp->help) |
hlp->help(); |
594,12 → 598,12 |
spinlock_unlock(&hlp->lock); |
break; |
} |
spinlock_unlock(&hlp->lock); |
} |
spinlock_unlock(&cmd_lock); |
return 1; |
} |
616,33 → 620,26 |
{ |
uintptr_t symaddr; |
char *symbol; |
unative_t (*f)(void); |
#ifdef ia64 |
struct { |
unative_t f; |
unative_t gp; |
} fptr; |
#endif |
unative_t (*fnc)(void); |
fncptr_t fptr; |
int rc; |
symaddr = get_symbol_addr((char *) argv->buffer); |
if (!symaddr) |
printf("Symbol %s not found.\n", argv->buffer); |
else if (symaddr == (uintptr_t) -1) { |
symtab_print_search((char *) argv->buffer); |
symbol = (char *) argv->buffer; |
rc = symtab_addr_lookup(symbol, &symaddr); |
if (rc == ENOENT) |
printf("Symbol %s not found.\n", symbol); |
else if (rc == EOVERFLOW) { |
symtab_print_search(symbol); |
printf("Duplicate symbol, be more specific.\n"); |
} else if (rc == EOK) { |
fnc = (unative_t (*)(void)) arch_construct_function(&fptr, |
(void *) symaddr, (void *) cmd_call0); |
printf("Calling %s() (%p)\n", symbol, symaddr); |
printf("Result: %#" PRIxn "\n", fnc()); |
} else { |
symbol = get_symtab_entry(symaddr); |
printf("Calling %s() (%p)\n", symbol, symaddr); |
#ifdef ia64 |
fptr.f = symaddr; |
fptr.gp = ((unative_t *)cmd_call2)[1]; |
f = (unative_t (*)(void)) &fptr; |
#else |
f = (unative_t (*)(void)) symaddr; |
#endif |
printf("Result: %#" PRIxn "\n", f()); |
printf("No symbol information available.\n"); |
} |
return 1; |
} |
680,35 → 677,27 |
{ |
uintptr_t symaddr; |
char *symbol; |
unative_t (*f)(unative_t,...); |
unative_t (*fnc)(unative_t, ...); |
unative_t arg1 = argv[1].intval; |
#ifdef ia64 |
struct { |
unative_t f; |
unative_t gp; |
} fptr; |
#endif |
fncptr_t fptr; |
int rc; |
symaddr = get_symbol_addr((char *) argv->buffer); |
if (!symaddr) |
printf("Symbol %s not found.\n", argv->buffer); |
else if (symaddr == (uintptr_t) -1) { |
symtab_print_search((char *) argv->buffer); |
symbol = (char *) argv->buffer; |
rc = symtab_addr_lookup(symbol, &symaddr); |
if (rc == ENOENT) { |
printf("Symbol %s not found.\n", symbol); |
} else if (rc == EOVERFLOW) { |
symtab_print_search(symbol); |
printf("Duplicate symbol, be more specific.\n"); |
} else if (rc == EOK) { |
fnc = (unative_t (*)(unative_t, ...)) arch_construct_function(&fptr, (void *) symaddr, (void *) cmd_call1); |
printf("Calling f(%#" PRIxn "): %p: %s\n", arg1, symaddr, symbol); |
printf("Result: %#" PRIxn "\n", fnc(arg1)); |
} else { |
symbol = get_symtab_entry(symaddr); |
printf("No symbol information available.\n"); |
} |
printf("Calling f(%#" PRIxn "): %p: %s\n", arg1, symaddr, symbol); |
#ifdef ia64 |
fptr.f = symaddr; |
fptr.gp = ((unative_t *)cmd_call2)[1]; |
f = (unative_t (*)(unative_t,...)) &fptr; |
#else |
f = (unative_t (*)(unative_t,...)) symaddr; |
#endif |
printf("Result: %#" PRIxn "\n", f(arg1)); |
} |
return 1; |
} |
717,36 → 706,28 |
{ |
uintptr_t symaddr; |
char *symbol; |
unative_t (*f)(unative_t,unative_t,...); |
unative_t (*fnc)(unative_t, unative_t, ...); |
unative_t arg1 = argv[1].intval; |
unative_t arg2 = argv[2].intval; |
#ifdef ia64 |
struct { |
unative_t f; |
unative_t gp; |
}fptr; |
#endif |
fncptr_t fptr; |
int rc; |
symaddr = get_symbol_addr((char *) argv->buffer); |
if (!symaddr) |
printf("Symbol %s not found.\n", argv->buffer); |
else if (symaddr == (uintptr_t) -1) { |
symtab_print_search((char *) argv->buffer); |
symbol = (char *) argv->buffer; |
rc = symtab_addr_lookup(symbol, &symaddr); |
if (rc == ENOENT) { |
printf("Symbol %s not found.\n", symbol); |
} else if (rc == EOVERFLOW) { |
symtab_print_search(symbol); |
printf("Duplicate symbol, be more specific.\n"); |
} else { |
symbol = get_symtab_entry(symaddr); |
} else if (rc == EOK) { |
fnc = (unative_t (*)(unative_t, unative_t, ...)) arch_construct_function(&fptr, (void *) symaddr, (void *) cmd_call2); |
printf("Calling f(%#" PRIxn ", %#" PRIxn "): %p: %s\n", |
arg1, arg2, symaddr, symbol); |
#ifdef ia64 |
fptr.f = symaddr; |
fptr.gp = ((unative_t *)cmd_call2)[1]; |
f = (unative_t (*)(unative_t,unative_t,...)) &fptr; |
#else |
f = (unative_t (*)(unative_t,unative_t,...)) symaddr; |
#endif |
printf("Result: %#" PRIxn "\n", f(arg1, arg2)); |
printf("Result: %#" PRIxn "\n", fnc(arg1, arg2)); |
} else { |
printf("No symbol information available.\n"); |
} |
return 1; |
} |
755,37 → 736,29 |
{ |
uintptr_t symaddr; |
char *symbol; |
unative_t (*f)(unative_t,unative_t,unative_t,...); |
unative_t (*fnc)(unative_t, unative_t, unative_t, ...); |
unative_t arg1 = argv[1].intval; |
unative_t arg2 = argv[2].intval; |
unative_t arg3 = argv[3].intval; |
#ifdef ia64 |
struct { |
unative_t f; |
unative_t gp; |
}fptr; |
#endif |
fncptr_t fptr; |
int rc; |
symbol = (char *) argv->buffer; |
rc = symtab_addr_lookup(symbol, &symaddr); |
symaddr = get_symbol_addr((char *) argv->buffer); |
if (!symaddr) |
printf("Symbol %s not found.\n", argv->buffer); |
else if (symaddr == (uintptr_t) -1) { |
symtab_print_search((char *) argv->buffer); |
if (rc == ENOENT) { |
printf("Symbol %s not found.\n", symbol); |
} else if (rc == EOVERFLOW) { |
symtab_print_search(symbol); |
printf("Duplicate symbol, be more specific.\n"); |
} else { |
symbol = get_symtab_entry(symaddr); |
} else if (rc == EOK) { |
fnc = (unative_t (*)(unative_t, unative_t, unative_t, ...)) arch_construct_function(&fptr, (void *) symaddr, (void *) cmd_call3); |
printf("Calling f(%#" PRIxn ",%#" PRIxn ", %#" PRIxn "): %p: %s\n", |
arg1, arg2, arg3, symaddr, symbol); |
#ifdef ia64 |
fptr.f = symaddr; |
fptr.gp = ((unative_t *)cmd_call2)[1]; |
f = (unative_t (*)(unative_t,unative_t,unative_t,...)) &fptr; |
#else |
f = (unative_t (*)(unative_t,unative_t,unative_t,...)) symaddr; |
#endif |
printf("Result: %#" PRIxn "\n", f(arg1, arg2, arg3)); |
printf("Result: %#" PRIxn "\n", fnc(arg1, arg2, arg3)); |
} else { |
printf("No symbol information available.\n"); |
} |
return 1; |
} |
835,30 → 808,34 |
/** Write 4 byte value to address */ |
int cmd_set4(cmd_arg_t *argv) |
{ |
uint32_t *addr; |
uintptr_t addr; |
uint32_t arg1 = argv[1].intval; |
bool pointer = false; |
int rc; |
if (((char *)argv->buffer)[0] == '*') { |
addr = (uint32_t *) get_symbol_addr((char *) argv->buffer + 1); |
rc = symtab_addr_lookup((char *) argv->buffer + 1, &addr); |
pointer = true; |
} else if (((char *) argv->buffer)[0] >= '0' && |
((char *)argv->buffer)[0] <= '9') |
addr = (uint32_t *)atoi((char *)argv->buffer); |
else |
addr = (uint32_t *)get_symbol_addr((char *) argv->buffer); |
((char *)argv->buffer)[0] <= '9') { |
rc = EOK; |
addr = atoi((char *)argv->buffer); |
} else { |
rc = symtab_addr_lookup((char *) argv->buffer, &addr); |
} |
if (!addr) |
if (rc == ENOENT) |
printf("Symbol %s not found.\n", argv->buffer); |
else if (addr == (uint32_t *) -1) { |
else if (rc == EOVERFLOW) { |
symtab_print_search((char *) argv->buffer); |
printf("Duplicate symbol, be more specific.\n"); |
} else { |
} else if (rc == EOK) { |
if (pointer) |
addr = (uint32_t *)(*(unative_t *)addr); |
addr = *(uintptr_t *) addr; |
printf("Writing %#" PRIx64 " -> %p\n", arg1, addr); |
*addr = arg1; |
*(uint32_t *) addr = arg1; |
} else { |
printf("No symbol information available.\n"); |
} |
return 1; |
976,8 → 953,11 |
int cmd_continue(cmd_arg_t *argv) |
{ |
printf("The kernel will now relinquish the console.\n"); |
printf("Use userspace controls to redraw the screen.\n"); |
arch_release_console(); |
release_console(); |
event_notify_0(EVENT_KCONSOLE); |
indev_pop_character(stdin); |
return 1; |
} |
990,18 → 970,23 |
*/ |
int cmd_tests(cmd_arg_t *argv) |
{ |
count_t len = 0; |
test_t *test; |
for (test = tests; test->name != NULL; test++) { |
if (str_length(test->name) > len) |
len = str_length(test->name); |
} |
for (test = tests; test->name != NULL; test++) |
printf("%s\t\t%s%s\n", test->name, test->desc, (test->safe ? "" : " (unsafe)")); |
printf("%-*s %s%s\n", len, test->name, test->desc, (test->safe ? "" : " (unsafe)")); |
printf("*\t\tRun all safe tests\n"); |
printf("%-*s Run all safe tests\n", len, "*"); |
return 1; |
} |
static bool run_test(const test_t *test) |
{ |
printf("%s\t\t%s\n", test->name, test->desc); |
printf("%s (%s)\n", test->name, test->desc); |
/* Update and read thread accounting |
for benchmarking */ |
1012,7 → 997,8 |
interrupts_restore(ipl); |
/* Execute the test */ |
char * ret = test->entry(false); |
test_quiet = false; |
char *ret = test->entry(); |
/* Update and read thread accounting */ |
ipl = interrupts_disable(); |
1064,7 → 1050,8 |
interrupts_restore(ipl); |
/* Execute the test */ |
char * ret = test->entry(true); |
test_quiet = true; |
char * ret = test->entry(); |
/* Update and read thread accounting */ |
ipl = interrupts_disable(); |
1112,7 → 1099,7 |
{ |
test_t *test; |
if (strcmp((char *) argv->buffer, "*") == 0) { |
if (str_cmp((char *) argv->buffer, "*") == 0) { |
for (test = tests; test->name != NULL; test++) { |
if (test->safe) { |
printf("\n"); |
1124,7 → 1111,7 |
bool fnd = false; |
for (test = tests; test->name != NULL; test++) { |
if (strcmp(test->name, (char *) argv->buffer) == 0) { |
if (str_cmp(test->name, (char *) argv->buffer) == 0) { |
fnd = true; |
run_test(test); |
break; |
1149,24 → 1136,33 |
test_t *test; |
uint32_t cnt = argv[1].intval; |
bool fnd = false; |
for (test = tests; test->name != NULL; test++) { |
if (strcmp(test->name, (char *) argv->buffer) == 0) { |
fnd = true; |
if (test->safe) |
run_bench(test, cnt); |
else |
printf("Unsafe test\n"); |
break; |
if (str_cmp((char *) argv->buffer, "*") == 0) { |
for (test = tests; test->name != NULL; test++) { |
if (test->safe) { |
if (!run_bench(test, cnt)) |
break; |
} |
} |
} else { |
bool fnd = false; |
for (test = tests; test->name != NULL; test++) { |
if (str_cmp(test->name, (char *) argv->buffer) == 0) { |
fnd = true; |
if (test->safe) |
run_bench(test, cnt); |
else |
printf("Unsafe test\n"); |
break; |
} |
} |
if (!fnd) |
printf("Unknown test\n"); |
} |
if (!fnd) |
printf("Unknown test\n"); |
return 1; |
} |
//branches/tracing/kernel/generic/src/console/chardev.c |
---|
33,46 → 33,119 |
*/ |
#include <console/chardev.h> |
#include <putchar.h> |
#include <synch/waitq.h> |
#include <synch/spinlock.h> |
#include <print.h> |
#include <func.h> |
#include <arch.h> |
/** Initialize character device. |
/** Initialize input character device. |
* |
* @param chardev Character device. |
* @param op Implementation of character device operations. |
* @param indev Input character device. |
* @param op Implementation of input character device operations. |
* |
*/ |
void chardev_initialize(char *name, chardev_t *chardev, |
chardev_operations_t *op) |
void indev_initialize(char *name, indev_t *indev, |
indev_operations_t *op) |
{ |
chardev->name = name; |
waitq_initialize(&chardev->wq); |
spinlock_initialize(&chardev->lock, "chardev"); |
chardev->counter = 0; |
chardev->index = 0; |
chardev->op = op; |
indev->name = name; |
waitq_initialize(&indev->wq); |
spinlock_initialize(&indev->lock, "indev"); |
indev->counter = 0; |
indev->index = 0; |
indev->op = op; |
} |
/** Push character read from input character device. |
* |
* @param chardev Character device. |
* @param ch Character being pushed. |
* @param indev Input character device. |
* @param ch Character being pushed. |
* |
*/ |
void chardev_push_character(chardev_t *chardev, uint8_t ch) |
void indev_push_character(indev_t *indev, wchar_t ch) |
{ |
spinlock_lock(&chardev->lock); |
chardev->counter++; |
if (chardev->counter == CHARDEV_BUFLEN - 1) { |
/* buffer full => disable device interrupt */ |
chardev->op->suspend(chardev); |
ASSERT(indev); |
spinlock_lock(&indev->lock); |
if (indev->counter == INDEV_BUFLEN - 1) { |
/* Buffer full */ |
spinlock_unlock(&indev->lock); |
return; |
} |
chardev->buffer[chardev->index++] = ch; |
chardev->index = chardev->index % CHARDEV_BUFLEN; /* index modulo size of buffer */ |
waitq_wakeup(&chardev->wq, WAKEUP_FIRST); |
spinlock_unlock(&chardev->lock); |
indev->counter++; |
indev->buffer[indev->index++] = ch; |
/* Index modulo size of buffer */ |
indev->index = indev->index % INDEV_BUFLEN; |
waitq_wakeup(&indev->wq, WAKEUP_FIRST); |
spinlock_unlock(&indev->lock); |
} |
/** Pop character from input character device. |
* |
* @param indev Input character device. |
* |
* @return Character read. |
* |
*/ |
wchar_t indev_pop_character(indev_t *indev) |
{ |
if (atomic_get(&haltstate)) { |
/* If we are here, we are hopefully on the processor that |
* issued the 'halt' command, so proceed to read the character |
* directly from input |
*/ |
if (check_poll(indev)) |
return indev->op->poll(indev); |
/* No other way of interacting with user */ |
interrupts_disable(); |
if (CPU) |
printf("cpu%u: ", CPU->id); |
else |
printf("cpu: "); |
printf("halted (no polling input)\n"); |
cpu_halt(); |
} |
waitq_sleep(&indev->wq); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&indev->lock); |
wchar_t ch = indev->buffer[(indev->index - indev->counter) % INDEV_BUFLEN]; |
indev->counter--; |
spinlock_unlock(&indev->lock); |
interrupts_restore(ipl); |
return ch; |
} |
/** Initialize output character device. |
* |
* @param outdev Output character device. |
* @param op Implementation of output character device operations. |
* |
*/ |
void outdev_initialize(char *name, outdev_t *outdev, |
outdev_operations_t *op) |
{ |
outdev->name = name; |
spinlock_initialize(&outdev->lock, "outdev"); |
outdev->op = op; |
} |
bool check_poll(indev_t *indev) |
{ |
if (indev == NULL) |
return false; |
if (indev->op == NULL) |
return false; |
return (indev->op->poll != NULL); |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/src/console/kconsole.c |
---|
31,10 → 31,11 |
*/ |
/** |
* @file kconsole.c |
* @brief Kernel console. |
* @file kconsole.c |
* @brief Kernel console. |
* |
* This file contains kernel thread managing the kernel console. |
* |
*/ |
#include <console/kconsole.h> |
49,8 → 50,14 |
#include <macros.h> |
#include <debug.h> |
#include <func.h> |
#include <string.h> |
#include <macros.h> |
#include <sysinfo/sysinfo.h> |
#include <ddi/device.h> |
#include <symtab.h> |
#include <macros.h> |
#include <errno.h> |
#include <putchar.h> |
#include <string.h> |
/** Simple kernel console. |
* |
59,7 → 66,7 |
* but makes it possible for other kernel subsystems to |
* register their own commands. |
*/ |
/** Locking. |
* |
* There is a list of cmd_info_t structures. This list |
74,33 → 81,36 |
* When locking two cmd info structures, structure with |
* lower address must be locked first. |
*/ |
SPINLOCK_INITIALIZE(cmd_lock); /**< Lock protecting command list. */ |
LIST_INITIALIZE(cmd_head); /**< Command list. */ |
static cmd_info_t *parse_cmdline(char *cmdline, size_t len); |
static bool parse_argument(char *cmdline, size_t len, index_t *start, |
index_t *end); |
static char history[KCONSOLE_HISTORY][MAX_CMDLINE] = {}; |
SPINLOCK_INITIALIZE(cmd_lock); /**< Lock protecting command list. */ |
LIST_INITIALIZE(cmd_head); /**< Command list. */ |
/** Initialize kconsole data structures. */ |
static wchar_t history[KCONSOLE_HISTORY][MAX_CMDLINE] = {}; |
static count_t history_pos = 0; |
/** Initialize kconsole data structures |
* |
* This is the most basic initialization, almost no |
* other kernel subsystem is ready yet. |
* |
*/ |
void kconsole_init(void) |
{ |
int i; |
unsigned int i; |
cmd_init(); |
for (i = 0; i < KCONSOLE_HISTORY; i++) |
history[i][0] = '\0'; |
history[i][0] = 0; |
} |
/** Register kconsole command. |
* |
* @param cmd Structure describing the command. |
* |
* @return 0 on failure, 1 on success. |
* @return False on failure, true on success. |
* |
*/ |
int cmd_register(cmd_info_t *cmd) |
bool cmd_register(cmd_info_t *cmd) |
{ |
link_t *cur; |
110,16 → 120,14 |
* Make sure the command is not already listed. |
*/ |
for (cur = cmd_head.next; cur != &cmd_head; cur = cur->next) { |
cmd_info_t *hlp; |
cmd_info_t *hlp = list_get_instance(cur, cmd_info_t, link); |
hlp = list_get_instance(cur, cmd_info_t, link); |
if (hlp == cmd) { |
/* The command is already there. */ |
spinlock_unlock(&cmd_lock); |
return 0; |
return false; |
} |
/* Avoid deadlock. */ |
if (hlp < cmd) { |
spinlock_lock(&hlp->lock); |
128,13 → 136,13 |
spinlock_lock(&cmd->lock); |
spinlock_lock(&hlp->lock); |
} |
if ((strncmp(hlp->name, cmd->name, max(strlen(cmd->name), |
strlen(hlp->name))) == 0)) { |
if (str_cmp(hlp->name, cmd->name) == 0) { |
/* The command is already there. */ |
spinlock_unlock(&hlp->lock); |
spinlock_unlock(&cmd->lock); |
spinlock_unlock(&cmd_lock); |
return 0; |
return false; |
} |
spinlock_unlock(&hlp->lock); |
147,294 → 155,274 |
list_append(&cmd->link, &cmd_head); |
spinlock_unlock(&cmd_lock); |
return 1; |
return true; |
} |
/** Print count times a character */ |
static void rdln_print_c(char ch, int count) |
static void print_cc(wchar_t ch, count_t count) |
{ |
int i; |
count_t i; |
for (i = 0; i < count; i++) |
putchar(ch); |
} |
/** Insert character to string */ |
static void insert_char(char *str, char ch, int pos) |
/** Try to find a command beginning with prefix */ |
static const char *cmdtab_search_one(const char *name, link_t **startpos) |
{ |
int i; |
count_t namelen = str_length(name); |
for (i = strlen(str); i > pos; i--) |
str[i] = str[i - 1]; |
str[pos] = ch; |
} |
/** Try to find a command beginning with prefix */ |
static const char *cmdtab_search_one(const char *name,link_t **startpos) |
{ |
size_t namelen = strlen(name); |
const char *curname; |
spinlock_lock(&cmd_lock); |
if (!*startpos) |
if (*startpos == NULL) |
*startpos = cmd_head.next; |
for (; *startpos != &cmd_head; *startpos = (*startpos)->next) { |
cmd_info_t *hlp; |
hlp = list_get_instance(*startpos, cmd_info_t, link); |
curname = hlp->name; |
if (strlen(curname) < namelen) |
cmd_info_t *hlp = list_get_instance(*startpos, cmd_info_t, link); |
const char *curname = hlp->name; |
if (str_length(curname) < namelen) |
continue; |
if (strncmp(curname, name, namelen) == 0) { |
spinlock_unlock(&cmd_lock); |
return curname+namelen; |
if (str_lcmp(curname, name, namelen) == 0) { |
spinlock_unlock(&cmd_lock); |
return (curname + str_lsize(curname, namelen)); |
} |
} |
spinlock_unlock(&cmd_lock); |
spinlock_unlock(&cmd_lock); |
return NULL; |
} |
/** Command completion of the commands |
/** Command completion of the commands |
* |
* @param name - string to match, changed to hint on exit |
* @return number of found matches |
* @param name String to match, changed to hint on exit |
* @param size Input buffer size |
* |
* @return Number of found matches |
* |
*/ |
static int cmdtab_compl(char *name) |
static int cmdtab_compl(char *input, size_t size) |
{ |
static char output[MAX_SYMBOL_NAME + 1]; |
link_t *startpos = NULL; |
const char *foundtxt; |
int found = 0; |
int i; |
output[0] = '\0'; |
while ((foundtxt = cmdtab_search_one(name, &startpos))) { |
startpos = startpos->next; |
if (!found) |
strncpy(output, foundtxt, strlen(foundtxt) + 1); |
else { |
for (i = 0; output[i] && foundtxt[i] && |
output[i] == foundtxt[i]; i++) |
; |
output[i] = '\0'; |
} |
const char *name = input; |
count_t found = 0; |
link_t *pos = NULL; |
const char *hint; |
char output[MAX_CMDLINE]; |
output[0] = 0; |
while ((hint = cmdtab_search_one(name, &pos))) { |
if ((found == 0) || (str_length(output) > str_length(hint))) |
str_cpy(output, MAX_CMDLINE, hint); |
pos = pos->next; |
found++; |
} |
if (!found) |
return 0; |
if (found > 1 && !strlen(output)) { |
if ((found > 1) && (str_length(output) != 0)) { |
printf("\n"); |
startpos = NULL; |
while ((foundtxt = cmdtab_search_one(name, &startpos))) { |
cmd_info_t *hlp; |
hlp = list_get_instance(startpos, cmd_info_t, link); |
printf("%s - %s\n", hlp->name, hlp->description); |
startpos = startpos->next; |
pos = NULL; |
while ((hint = cmdtab_search_one(name, &pos))) { |
cmd_info_t *hlp = list_get_instance(pos, cmd_info_t, link); |
printf("%s (%s)\n", hlp->name, hlp->description); |
pos = pos->next; |
} |
} |
strncpy(name, output, MAX_SYMBOL_NAME); |
if (found > 0) |
str_cpy(input, size, output); |
return found; |
} |
static char *clever_readline(const char *prompt, chardev_t *input) |
static wchar_t *clever_readline(const char *prompt, indev_t *indev) |
{ |
static int histposition = 0; |
static char tmp[MAX_CMDLINE + 1]; |
int curlen = 0, position = 0; |
char *current = history[histposition]; |
int i; |
char mod; /* Command Modifier */ |
char c; |
printf("%s> ", prompt); |
while (1) { |
c = _getc(input); |
if (c == '\n') { |
putchar(c); |
count_t position = 0; |
wchar_t *current = history[history_pos]; |
current[0] = 0; |
while (true) { |
wchar_t ch = indev_pop_character(indev); |
if (ch == '\n') { |
/* Enter */ |
putchar(ch); |
break; |
} |
if (c == '\b') { /* Backspace */ |
if (ch == '\b') { |
/* Backspace */ |
if (position == 0) |
continue; |
for (i = position; i < curlen; i++) |
current[i - 1] = current[i]; |
curlen--; |
position--; |
putchar('\b'); |
for (i = position; i < curlen; i++) |
putchar(current[i]); |
putchar(' '); |
rdln_print_c('\b', curlen - position + 1); |
continue; |
if (wstr_remove(current, position - 1)) { |
position--; |
putchar('\b'); |
printf("%ls ", current + position); |
print_cc('\b', wstr_length(current) - position + 1); |
continue; |
} |
} |
if (c == '\t') { /* Tabulator */ |
int found; |
if (ch == '\t') { |
/* Tab completion */ |
/* Move to the end of the word */ |
for (; position < curlen && current[position] != ' '; |
for (; (current[position] != 0) && (!isspace(current[position])); |
position++) |
putchar(current[position]); |
/* Copy to tmp last word */ |
for (i = position - 1; i >= 0 && current[i] != ' '; i--) |
; |
/* If word begins with * or &, skip it */ |
if (tmp[0] == '*' || tmp[0] == '&') |
for (i = 1; tmp[i]; i++) |
tmp[i - 1] = tmp[i]; |
i++; /* I is at the start of the word */ |
strncpy(tmp, current + i, position - i + 1); |
if (i == 0) { /* Command completion */ |
found = cmdtab_compl(tmp); |
} else { /* Symtab completion */ |
found = symtab_compl(tmp); |
if (position == 0) |
continue; |
/* Find the beginning of the word |
and copy it to tmp */ |
count_t beg; |
for (beg = position - 1; (beg > 0) && (!isspace(current[beg])); |
beg--); |
if (isspace(current[beg])) |
beg++; |
char tmp[STR_BOUNDS(MAX_CMDLINE)]; |
wstr_nstr(tmp, current + beg, position - beg + 1); |
int found; |
if (beg == 0) { |
/* Command completion */ |
found = cmdtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE)); |
} else { |
/* Symbol completion */ |
found = symtab_compl(tmp, STR_BOUNDS(MAX_CMDLINE)); |
} |
if (found == 0) |
if (found == 0) |
continue; |
for (i = 0; tmp[i] && curlen < MAX_CMDLINE; |
i++, curlen++) |
insert_char(current, tmp[i], i + position); |
if (strlen(tmp) || found == 1) { /* If we have a hint */ |
for (i = position; i < curlen; i++) |
putchar(current[i]); |
position += strlen(tmp); |
/* Add space to end */ |
if (found == 1 && position == curlen && |
curlen < MAX_CMDLINE) { |
current[position] = ' '; |
curlen++; |
if (found > 1) { |
/* No unique hint, list was printed */ |
printf("%s> ", prompt); |
printf("%ls", current); |
print_cc('\b', wstr_length(current) - position); |
continue; |
} |
/* We have a hint */ |
size_t off = 0; |
count_t i = 0; |
while ((ch = str_decode(tmp, &off, STR_NO_LIMIT)) != 0) { |
if (!wstr_linsert(current, ch, position + i, MAX_CMDLINE)) |
break; |
i++; |
} |
printf("%ls", current + position); |
position += str_length(tmp); |
print_cc('\b', wstr_length(current) - position); |
if (position == wstr_length(current)) { |
/* Insert a space after the last completed argument */ |
if (wstr_linsert(current, ' ', position, MAX_CMDLINE)) { |
printf("%ls", current + position); |
position++; |
putchar(' '); |
} |
} else { /* No hint, table was printed */ |
printf("%s> ", prompt); |
for (i = 0; i < curlen; i++) |
putchar(current[i]); |
position += strlen(tmp); |
} |
rdln_print_c('\b', curlen - position); |
continue; |
} |
if (c == 0x1b) { /* Special command */ |
mod = _getc(input); |
c = _getc(input); |
if (mod != 0x5b && mod != 0x4f) |
continue; |
if (c == 0x33 && _getc(input) == 0x7e) { |
/* Delete */ |
if (position == curlen) |
continue; |
for (i = position + 1; i < curlen; i++) { |
putchar(current[i]); |
current[i - 1] = current[i]; |
} |
putchar(' '); |
rdln_print_c('\b', curlen - position); |
curlen--; |
} else if (c == 0x48) { /* Home */ |
rdln_print_c('\b', position); |
position = 0; |
} else if (c == 0x46) { /* End */ |
for (i = position; i < curlen; i++) |
putchar(current[i]); |
position = curlen; |
} else if (c == 0x44) { /* Left */ |
if (position > 0) { |
putchar('\b'); |
position--; |
} |
continue; |
} else if (c == 0x43) { /* Right */ |
if (position < curlen) { |
putchar(current[position]); |
position++; |
} |
continue; |
} else if (c == 0x41 || c == 0x42) { |
/* Up, down */ |
rdln_print_c('\b', position); |
rdln_print_c(' ', curlen); |
rdln_print_c('\b', curlen); |
if (c == 0x41) /* Up */ |
histposition--; |
if (ch == U_LEFT_ARROW) { |
/* Left */ |
if (position > 0) { |
putchar('\b'); |
position--; |
} |
continue; |
} |
if (ch == U_RIGHT_ARROW) { |
/* Right */ |
if (position < wstr_length(current)) { |
putchar(current[position]); |
position++; |
} |
continue; |
} |
if ((ch == U_UP_ARROW) || (ch == U_DOWN_ARROW)) { |
/* Up, down */ |
print_cc('\b', position); |
print_cc(' ', wstr_length(current)); |
print_cc('\b', wstr_length(current)); |
if (ch == U_UP_ARROW) { |
/* Up */ |
if (history_pos == 0) |
history_pos = KCONSOLE_HISTORY - 1; |
else |
histposition++; |
if (histposition < 0) { |
histposition = KCONSOLE_HISTORY - 1; |
} else { |
histposition = |
histposition % KCONSOLE_HISTORY; |
} |
current = history[histposition]; |
printf("%s", current); |
curlen = strlen(current); |
position = curlen; |
history_pos--; |
} else { |
/* Down */ |
history_pos++; |
history_pos = history_pos % KCONSOLE_HISTORY; |
} |
current = history[history_pos]; |
printf("%ls", current); |
position = wstr_length(current); |
continue; |
} |
if (ch == U_HOME_ARROW) { |
/* Home */ |
print_cc('\b', position); |
position = 0; |
continue; |
} |
if (ch == U_END_ARROW) { |
/* End */ |
printf("%ls", current + position); |
position = wstr_length(current); |
continue; |
} |
if (ch == U_DELETE) { |
/* Delete */ |
if (position == wstr_length(current)) |
continue; |
if (wstr_remove(current, position)) { |
printf("%ls ", current + position); |
print_cc('\b', wstr_length(current) - position + 1); |
} |
continue; |
} |
if (curlen >= MAX_CMDLINE) |
continue; |
insert_char(current, c, position); |
curlen++; |
for (i = position; i < curlen; i++) |
putchar(current[i]); |
position++; |
rdln_print_c('\b',curlen - position); |
} |
if (curlen) { |
histposition++; |
histposition = histposition % KCONSOLE_HISTORY; |
if (wstr_linsert(current, ch, position, MAX_CMDLINE)) { |
printf("%ls", current + position); |
position++; |
print_cc('\b', wstr_length(current) - position); |
} |
} |
current[curlen] = '\0'; |
if (wstr_length(current) > 0) { |
history_pos++; |
history_pos = history_pos % KCONSOLE_HISTORY; |
} |
return current; |
} |
/** Kernel console managing thread. |
* |
* @param prompt Kernel console prompt (e.g kconsole/panic). |
*/ |
void kconsole(void *prompt) |
bool kconsole_check_poll(void) |
{ |
cmd_info_t *cmd_info; |
count_t len; |
char *cmdline; |
if (!stdin) { |
printf("%s: no stdin\n", __func__); |
return; |
} |
while (true) { |
cmdline = clever_readline((char *) prompt, stdin); |
len = strlen(cmdline); |
if (!len) |
continue; |
cmd_info = parse_cmdline(cmdline, len); |
if (!cmd_info) |
continue; |
if (strncmp(cmd_info->name, "exit", |
min(strlen(cmd_info->name), 5)) == 0) |
break; |
(void) cmd_info->func(cmd_info->argv); |
} |
return check_poll(stdin); |
} |
static int parse_int_arg(char *text, size_t len, unative_t *result) |
static bool parse_int_arg(const char *text, size_t len, unative_t *result) |
{ |
static char symname[MAX_SYMBOL_NAME]; |
uintptr_t symaddr; |
bool isaddr = false; |
bool isptr = false; |
448,63 → 436,113 |
text++; |
len--; |
} |
if (text[0] < '0' || text[0] > '9') { |
strncpy(symname, text, min(len + 1, MAX_SYMBOL_NAME)); |
symaddr = get_symbol_addr(symname); |
if (!symaddr) { |
if ((text[0] < '0') || (text[0] > '9')) { |
char symname[MAX_SYMBOL_NAME]; |
str_ncpy(symname, MAX_SYMBOL_NAME, text, len + 1); |
uintptr_t symaddr; |
int rc = symtab_addr_lookup(symname, &symaddr); |
switch (rc) { |
case ENOENT: |
printf("Symbol %s not found.\n", symname); |
return -1; |
} |
if (symaddr == (uintptr_t) -1) { |
return false; |
case EOVERFLOW: |
printf("Duplicate symbol %s.\n", symname); |
symtab_print_search(symname); |
return -1; |
return false; |
case ENOTSUP: |
printf("No symbol information available.\n"); |
return false; |
} |
if (isaddr) |
*result = (unative_t)symaddr; |
*result = (unative_t) symaddr; |
else if (isptr) |
*result = **((unative_t **)symaddr); |
*result = **((unative_t **) symaddr); |
else |
*result = *((unative_t *)symaddr); |
} else { /* It's a number - convert it */ |
*result = *((unative_t *) symaddr); |
} else { |
/* It's a number - convert it */ |
*result = atoi(text); |
if (isptr) |
*result = *((unative_t *)*result); |
*result = *((unative_t *) *result); |
} |
return true; |
} |
return 0; |
/** Parse argument. |
* |
* Find start and end positions of command line argument. |
* |
* @param cmdline Command line as read from the input device. |
* @param size Size (in bytes) of the string. |
* @param start On entry, 'start' contains pointer to the offset |
* of the first unprocessed character of cmdline. |
* On successful exit, it marks beginning of the next argument. |
* @param end Undefined on entry. On exit, 'end' is the offset of the first |
* character behind the next argument. |
* |
* @return False on failure, true on success. |
* |
*/ |
static bool parse_argument(const char *cmdline, size_t size, size_t *start, size_t *end) |
{ |
ASSERT(start != NULL); |
ASSERT(end != NULL); |
bool found_start = false; |
size_t offset = *start; |
size_t prev = *start; |
wchar_t ch; |
while ((ch = str_decode(cmdline, &offset, size)) != 0) { |
if (!found_start) { |
if (!isspace(ch)) { |
*start = prev; |
found_start = true; |
} |
} else { |
if (isspace(ch)) |
break; |
} |
prev = offset; |
} |
*end = prev; |
return found_start; |
} |
/** Parse command line. |
* |
* @param cmdline Command line as read from input device. |
* @param len Command line length. |
* @param cmdline Command line as read from input device. |
* @param size Size (in bytes) of the string. |
* |
* @return Structure describing the command. |
* |
*/ |
cmd_info_t *parse_cmdline(char *cmdline, size_t len) |
static cmd_info_t *parse_cmdline(const char *cmdline, size_t size) |
{ |
index_t start = 0, end = 0; |
cmd_info_t *cmd = NULL; |
link_t *cur; |
count_t i; |
int error = 0; |
if (!parse_argument(cmdline, len, &start, &end)) { |
size_t start = 0; |
size_t end = 0; |
if (!parse_argument(cmdline, size, &start, &end)) { |
/* Command line did not contain alphanumeric word. */ |
return NULL; |
} |
spinlock_lock(&cmd_lock); |
cmd_info_t *cmd = NULL; |
link_t *cur; |
for (cur = cmd_head.next; cur != &cmd_head; cur = cur->next) { |
cmd_info_t *hlp; |
hlp = list_get_instance(cur, cmd_info_t, link); |
cmd_info_t *hlp = list_get_instance(cur, cmd_info_t, link); |
spinlock_lock(&hlp->lock); |
if (strncmp(hlp->name, &cmdline[start], max(strlen(hlp->name), |
end - start + 1)) == 0) { |
if (str_lcmp(hlp->name, cmdline + start, |
max(str_length(hlp->name), |
str_nlength(cmdline + start, (count_t) (end - start) - 1))) == 0) { |
cmd = hlp; |
break; |
} |
512,7 → 550,7 |
spinlock_unlock(&hlp->lock); |
} |
spinlock_unlock(&cmd_lock); |
spinlock_unlock(&cmd_lock); |
if (!cmd) { |
/* Unknown command. */ |
519,7 → 557,7 |
printf("Unknown command.\n"); |
return NULL; |
} |
/* cmd == hlp is locked */ |
/* |
528,52 → 566,54 |
* converted to those specified in the cmd info |
* structure. |
*/ |
bool error = false; |
count_t i; |
for (i = 0; i < cmd->argc; i++) { |
char *buf; |
start = end + 1; |
if (!parse_argument(cmdline, len, &start, &end)) { |
start = end; |
if (!parse_argument(cmdline, size, &start, &end)) { |
printf("Too few arguments.\n"); |
spinlock_unlock(&cmd->lock); |
return NULL; |
} |
error = 0; |
char *buf; |
switch (cmd->argv[i].type) { |
case ARG_TYPE_STRING: |
buf = (char *) cmd->argv[i].buffer; |
strncpy(buf, (const char *) &cmdline[start], |
min((end - start) + 2, cmd->argv[i].len)); |
buf[min((end - start) + 1, cmd->argv[i].len - 1)] = |
'\0'; |
str_ncpy(buf, cmd->argv[i].len, cmdline + start, |
end - start); |
break; |
case ARG_TYPE_INT: |
if (parse_int_arg(cmdline + start, end - start + 1, |
case ARG_TYPE_INT: |
if (!parse_int_arg(cmdline + start, end - start, |
&cmd->argv[i].intval)) |
error = 1; |
error = true; |
break; |
case ARG_TYPE_VAR: |
if (start != end && cmdline[start] == '"' && |
cmdline[end] == '"') { |
buf = (char *) cmd->argv[i].buffer; |
strncpy(buf, (const char *) &cmdline[start + 1], |
min((end-start), cmd->argv[i].len)); |
buf[min((end - start), cmd->argv[i].len - 1)] = |
'\0'; |
cmd->argv[i].intval = (unative_t) buf; |
cmd->argv[i].vartype = ARG_TYPE_STRING; |
} else if (!parse_int_arg(cmdline + start, |
end - start + 1, &cmd->argv[i].intval)) { |
if ((start < end - 1) && (cmdline[start] == '"')) { |
if (cmdline[end - 1] == '"') { |
buf = (char *) cmd->argv[i].buffer; |
str_ncpy(buf, cmd->argv[i].len, |
cmdline + start + 1, |
(end - start) - 1); |
cmd->argv[i].intval = (unative_t) buf; |
cmd->argv[i].vartype = ARG_TYPE_STRING; |
} else { |
printf("Wrong synxtax.\n"); |
error = true; |
} |
} else if (parse_int_arg(cmdline + start, |
end - start, &cmd->argv[i].intval)) { |
cmd->argv[i].vartype = ARG_TYPE_INT; |
} else { |
printf("Unrecognized variable argument.\n"); |
error = 1; |
error = true; |
} |
break; |
case ARG_TYPE_INVALID: |
default: |
printf("invalid argument type\n"); |
error = 1; |
printf("Invalid argument type\n"); |
error = true; |
break; |
} |
} |
583,8 → 623,8 |
return NULL; |
} |
start = end + 1; |
if (parse_argument(cmdline, len, &start, &end)) { |
start = end; |
if (parse_argument(cmdline, size, &start, &end)) { |
printf("Too many arguments.\n"); |
spinlock_unlock(&cmd->lock); |
return NULL; |
594,42 → 634,55 |
return cmd; |
} |
/** Parse argument. |
/** Kernel console prompt. |
* |
* Find start and end positions of command line argument. |
* @param prompt Kernel console prompt (e.g kconsole/panic). |
* @param msg Message to display in the beginning. |
* @param kcon Wait for keypress to show the prompt |
* and never exit. |
* |
* @param cmdline Command line as read from the input device. |
* @param len Number of characters in cmdline. |
* @param start On entry, 'start' contains pointer to the index |
* of first unprocessed character of cmdline. |
* On successful exit, it marks beginning of the next argument. |
* @param end Undefined on entry. On exit, 'end' points to the last character |
* of the next argument. |
* |
* @return false on failure, true on success. |
*/ |
bool parse_argument(char *cmdline, size_t len, index_t *start, index_t *end) |
void kconsole(char *prompt, char *msg, bool kcon) |
{ |
index_t i; |
bool found_start = false; |
if (!stdin) { |
LOG("No stdin for kernel console"); |
return; |
} |
ASSERT(start != NULL); |
ASSERT(end != NULL); |
if (msg) |
printf("%s", msg); |
for (i = *start; i < len; i++) { |
if (!found_start) { |
if (isspace(cmdline[i])) |
(*start)++; |
else |
found_start = true; |
} else { |
if (isspace(cmdline[i])) |
break; |
} |
if (kcon) |
indev_pop_character(stdin); |
else |
printf("Type \"exit\" to leave the console.\n"); |
while (true) { |
wchar_t *tmp = clever_readline((char *) prompt, stdin); |
count_t len = wstr_length(tmp); |
if (!len) |
continue; |
char cmdline[STR_BOUNDS(MAX_CMDLINE)]; |
wstr_nstr(cmdline, tmp, STR_BOUNDS(MAX_CMDLINE)); |
if ((!kcon) && (len == 4) && (str_lcmp(cmdline, "exit", 4) == 0)) |
break; |
cmd_info_t *cmd_info = parse_cmdline(cmdline, STR_BOUNDS(MAX_CMDLINE)); |
if (!cmd_info) |
continue; |
(void) cmd_info->func(cmd_info->argv); |
} |
*end = i - 1; |
} |
return found_start; |
/** Kernel console managing thread. |
* |
*/ |
void kconsole_thread(void *data) |
{ |
kconsole("kconsole", "Kernel console ready (press any key to activate)\n", true); |
} |
/** @} |
//branches/tracing/kernel/generic/src/printf/sprintf.c |
---|
File deleted |
//branches/tracing/kernel/generic/src/printf/vsprintf.c |
---|
File deleted |
//branches/tracing/kernel/generic/src/printf/printf.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
33,19 → 33,18 |
*/ |
#include <print.h> |
int printf(const char *fmt, ...); |
int printf(const char *fmt, ...) |
{ |
int ret; |
va_list args; |
va_start(args, fmt); |
ret = vprintf(fmt, args); |
va_end(args); |
return ret; |
} |
//branches/tracing/kernel/generic/src/printf/snprintf.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
42,9 → 42,9 |
va_start(args, fmt); |
ret = vsnprintf(str, size, fmt, args); |
va_end(args); |
return ret; |
} |
//branches/tracing/kernel/generic/src/printf/vprintf.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
39,36 → 39,66 |
#include <arch/asm.h> |
#include <arch/types.h> |
#include <typedefs.h> |
#include <string.h> |
SPINLOCK_INITIALIZE(printf_lock); /**< vprintf spinlock */ |
SPINLOCK_INITIALIZE(printf_lock); /**< vprintf spinlock */ |
static int vprintf_write(const char *str, size_t count, void *unused) |
static int vprintf_str_write(const char *str, size_t size, void *data) |
{ |
size_t i; |
for (i = 0; i < count; i++) |
putchar(str[i]); |
return i; |
size_t offset = 0; |
count_t chars = 0; |
while (offset < size) { |
putchar(str_decode(str, &offset, size)); |
chars++; |
} |
return chars; |
} |
int puts(const char *s) |
static int vprintf_wstr_write(const wchar_t *str, size_t size, void *data) |
{ |
size_t i; |
for (i = 0; s[i] != 0; i++) |
putchar(s[i]); |
return i; |
size_t offset = 0; |
count_t chars = 0; |
while (offset < size) { |
putchar(str[chars]); |
chars++; |
offset += sizeof(wchar_t); |
} |
return chars; |
} |
int puts(const char *str) |
{ |
size_t offset = 0; |
count_t chars = 0; |
wchar_t uc; |
while ((uc = str_decode(str, &offset, STR_NO_LIMIT)) != 0) { |
putchar(uc); |
chars++; |
} |
return chars; |
} |
int vprintf(const char *fmt, va_list ap) |
{ |
struct printf_spec ps = {(int(*)(void *, size_t, void *)) vprintf_write, NULL}; |
printf_spec_t ps = { |
vprintf_str_write, |
vprintf_wstr_write, |
NULL |
}; |
int irqpri = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&printf_lock); |
int ret = printf_core(fmt, &ps, ap); |
spinlock_unlock(&printf_lock); |
interrupts_restore(irqpri); |
interrupts_restore(ipl); |
return ret; |
} |
//branches/tracing/kernel/generic/src/printf/vsnprintf.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
34,62 → 34,146 |
#include <print.h> |
#include <printf/printf_core.h> |
#include <string.h> |
#include <memstr.h> |
#include <errno.h> |
struct vsnprintf_data { |
size_t size; /* total space for string */ |
size_t len; /* count of currently used characters */ |
char *string; /* destination string */ |
}; |
typedef struct { |
size_t size; /* Total size of the buffer (in bytes) */ |
size_t len; /* Number of already used bytes */ |
char *dst; /* Destination */ |
} vsnprintf_data_t; |
/** Write string to given buffer. |
* Write at most data->size characters including trailing zero. According to C99, snprintf() has to return number |
* of characters that would have been written if enough space had been available. Hence the return value is not |
* number of really printed characters but size of the input string. Number of really used characters |
* is stored in data->len. |
* @param str source string to print |
* @param count size of source string |
* @param data structure with destination string, counter of used space and total string size. |
* @return number of characters to print (not characters really printed!) |
* |
* Write at most data->size plain characters including trailing zero. |
* According to C99, snprintf() has to return number of characters that |
* would have been written if enough space had been available. Hence |
* the return value is not the number of actually printed characters |
* but size of the input string. |
* |
* @param str Source string to print. |
* @param size Number of plain characters in str. |
* @param data Structure describing destination string, counter |
* of used space and total string size. |
* |
* @return Number of characters to print (not characters actually |
* printed). |
* |
*/ |
static int vsnprintf_write(const char *str, size_t count, struct vsnprintf_data *data) |
static int vsnprintf_str_write(const char *str, size_t size, vsnprintf_data_t *data) |
{ |
size_t i; |
i = data->size - data->len; |
if (i == 0) { |
return count; |
} |
size_t left = data->size - data->len; |
if (i == 1) { |
/* We have only one free byte left in buffer => write there trailing zero */ |
data->string[data->size - 1] = 0; |
if (left == 0) |
return ((int) size); |
if (left == 1) { |
/* We have only one free byte left in buffer |
* -> store trailing zero |
*/ |
data->dst[data->size - 1] = 0; |
data->len = data->size; |
return count; |
return ((int) size); |
} |
if (i <= count) { |
/* We have not enought space for whole string with the trailing zero => print only a part of string */ |
memcpy((void *)(data->string + data->len), (void *)str, i - 1); |
data->string[data->size - 1] = 0; |
if (left <= size) { |
/* We do not have enough space for the whole string |
* with the trailing zero => print only a part |
* of string |
*/ |
index_t index = 0; |
while (index < size) { |
wchar_t uc = str_decode(str, &index, size); |
if (chr_encode(uc, data->dst, &data->len, data->size - 1) != EOK) |
break; |
} |
/* Put trailing zero at end, but not count it |
* into data->len so it could be rewritten next time |
*/ |
data->dst[data->len] = 0; |
return ((int) size); |
} |
/* Buffer is big enought to print the whole string */ |
memcpy((void *)(data->dst + data->len), (void *) str, size); |
data->len += size; |
/* Put trailing zero at end, but not count it |
* into data->len so it could be rewritten next time |
*/ |
data->dst[data->len] = 0; |
return ((int) size); |
} |
/** Write wide string to given buffer. |
* |
* Write at most data->size plain characters including trailing zero. |
* According to C99, snprintf() has to return number of characters that |
* would have been written if enough space had been available. Hence |
* the return value is not the number of actually printed characters |
* but size of the input string. |
* |
* @param str Source wide string to print. |
* @param size Number of bytes in str. |
* @param data Structure describing destination string, counter |
* of used space and total string size. |
* |
* @return Number of wide characters to print (not characters actually |
* printed). |
* |
*/ |
static int vsnprintf_wstr_write(const wchar_t *str, size_t size, vsnprintf_data_t *data) |
{ |
index_t index = 0; |
while (index < (size / sizeof(wchar_t))) { |
size_t left = data->size - data->len; |
if (left == 0) |
return ((int) size); |
if (left == 1) { |
/* We have only one free byte left in buffer |
* -> store trailing zero |
*/ |
data->dst[data->size - 1] = 0; |
data->len = data->size; |
return count; |
return ((int) size); |
} |
if (chr_encode(str[index], data->dst, &data->len, data->size - 1) != EOK) |
break; |
index++; |
} |
/* Buffer is big enought to print whole string */ |
memcpy((void *)(data->string + data->len), (void *)str, count); |
data->len += count; |
/* Put trailing zero at end, but not count it into data->len so it could be rewritten next time */ |
data->string[data->len] = 0; |
return count; |
/* Put trailing zero at end, but not count it |
* into data->len so it could be rewritten next time |
*/ |
data->dst[data->len] = 0; |
return ((int) size); |
} |
int vsnprintf(char *str, size_t size, const char *fmt, va_list ap) |
{ |
struct vsnprintf_data data = {size, 0, str}; |
struct printf_spec ps = {(int(*)(void *, size_t, void *))vsnprintf_write, &data}; |
vsnprintf_data_t data = { |
size, |
0, |
str |
}; |
printf_spec_t ps = { |
(int(*) (const char *, size_t, void *)) vsnprintf_str_write, |
(int(*) (const wchar_t *, size_t, void *)) vsnprintf_wstr_write, |
&data |
}; |
/* Print 0 at end of string - fix the case that nothing will be printed */ |
if (size > 0) |
str[0] = 0; |
//branches/tracing/kernel/generic/src/printf/printf_core.c |
---|
1,6 → 1,7 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* Copyright (c) 2006 Josef Cejka |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
27,38 → 28,37 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** |
* @file |
* @brief Printing functions. |
* @brief Printing functions. |
*/ |
#include <printf/printf_core.h> |
#include <putchar.h> |
#include <print.h> |
#include <arch/arg.h> |
#include <macros.h> |
#include <func.h> |
#include <string.h> |
#include <arch.h> |
/** show prefixes 0x or 0 */ |
#define __PRINTF_FLAG_PREFIX 0x00000001 |
#define __PRINTF_FLAG_PREFIX 0x00000001 |
/** signed / unsigned number */ |
#define __PRINTF_FLAG_SIGNED 0x00000002 |
#define __PRINTF_FLAG_SIGNED 0x00000002 |
/** print leading zeroes */ |
#define __PRINTF_FLAG_ZEROPADDED 0x00000004 |
#define __PRINTF_FLAG_ZEROPADDED 0x00000004 |
/** align to left */ |
#define __PRINTF_FLAG_LEFTALIGNED 0x00000010 |
#define __PRINTF_FLAG_LEFTALIGNED 0x00000010 |
/** always show + sign */ |
#define __PRINTF_FLAG_SHOWPLUS 0x00000020 |
#define __PRINTF_FLAG_SHOWPLUS 0x00000020 |
/** print space instead of plus */ |
#define __PRINTF_FLAG_SPACESIGN 0x00000040 |
#define __PRINTF_FLAG_SPACESIGN 0x00000040 |
/** show big characters */ |
#define __PRINTF_FLAG_BIGCHARS 0x00000080 |
#define __PRINTF_FLAG_BIGCHARS 0x00000080 |
/** number has - sign */ |
#define __PRINTF_FLAG_NEGATIVE 0x00000100 |
#define __PRINTF_FLAG_NEGATIVE 0x00000100 |
/** |
* Buffer big enough for 64-bit number printed in base 2, sign, prefix and 0 |
65,7 → 65,7 |
* to terminate string... (last one is only for better testing end of buffer by |
* zero-filling subroutine) |
*/ |
#define PRINT_NUMBER_BUFFER_SIZE (64 + 5) |
#define PRINT_NUMBER_BUFFER_SIZE (64 + 5) |
/** Enumeration of possible arguments types. |
*/ |
78,69 → 78,103 |
PrintfQualifierPointer |
} qualifier_t; |
static char nullstr[] = "(NULL)"; |
static char digits_small[] = "0123456789abcdef"; |
static char digits_big[] = "0123456789ABCDEF"; |
static char invalch = U_SPECIAL; |
/** Print one or more characters without adding newline. |
* |
* @param buf Buffer with size at least count bytes. NULL pointer is |
* not allowed! |
* @param count Number of characters to print. |
* @param ps Output method and its data. |
* @return Number of characters printed. |
* @param buf Buffer holding characters with size of |
* at least size bytes. NULL is not allowed! |
* @param size Size of the buffer in bytes. |
* @param ps Output method and its data. |
* |
* @return Number of characters printed. |
* |
*/ |
static int printf_putnchars(const char * buf, size_t count, |
struct printf_spec *ps) |
static int printf_putnchars(const char *buf, size_t size, |
printf_spec_t *ps) |
{ |
return ps->write((void *) buf, count, ps->data); |
return ps->str_write((void *) buf, size, ps->data); |
} |
/** Print a string without adding a newline. |
/** Print one or more wide characters without adding newline. |
* |
* @param str String to print. |
* @param ps Write function specification and support data. |
* @return Number of characters printed. |
* @param buf Buffer holding wide characters with size of |
* at least size bytes. NULL is not allowed! |
* @param size Size of the buffer in bytes. |
* @param ps Output method and its data. |
* |
* @return Number of wide characters printed. |
* |
*/ |
static int printf_putstr(const char * str, struct printf_spec *ps) |
static int printf_wputnchars(const wchar_t *buf, size_t size, |
printf_spec_t *ps) |
{ |
size_t count; |
return ps->wstr_write((void *) buf, size, ps->data); |
} |
/** Print string without adding a newline. |
* |
* @param str String to print. |
* @param ps Write function specification and support data. |
* |
* @return Number of characters printed. |
* |
*/ |
static int printf_putstr(const char *str, printf_spec_t *ps) |
{ |
if (str == NULL) |
return printf_putnchars(nullstr, str_size(nullstr), ps); |
if (str == NULL) { |
char *nullstr = "(NULL)"; |
return printf_putnchars(nullstr, strlen(nullstr), ps); |
} |
return ps->str_write((void *) str, str_size(str), ps->data); |
} |
count = strlen(str); |
return ps->write((void *) str, count, ps->data); |
/** Print one ASCII character. |
* |
* @param c ASCII character to be printed. |
* @param ps Output method. |
* |
* @return Number of characters printed. |
* |
*/ |
static int printf_putchar(const char ch, printf_spec_t *ps) |
{ |
if (!ascii_check(ch)) |
return ps->str_write((void *) &invalch, 1, ps->data); |
return ps->str_write(&ch, 1, ps->data); |
} |
/** Print one character. |
/** Print one wide character. |
* |
* @param c Character to be printed. |
* @param ps Output method. |
* @param c Wide character to be printed. |
* @param ps Output method. |
* |
* @return Number of characters printed. |
* @return Number of characters printed. |
* |
*/ |
static int printf_putchar(int c, struct printf_spec *ps) |
static int printf_putwchar(const wchar_t ch, printf_spec_t *ps) |
{ |
unsigned char ch = c; |
if (!chr_check(ch)) |
return ps->str_write((void *) &invalch, 1, ps->data); |
return ps->write((void *) &ch, 1, ps->data); |
return ps->wstr_write(&ch, sizeof(wchar_t), ps->data); |
} |
/** Print one formatted character. |
/** Print one formatted ASCII character. |
* |
* @param c Character to print. |
* @param width Width modifier. |
* @param flags Flags that change the way the character is printed. |
* @param ch Character to print. |
* @param width Width modifier. |
* @param flags Flags that change the way the character is printed. |
* |
* @return Number of characters printed, negative value on failure. |
* @return Number of characters printed, negative value on failure. |
* |
*/ |
static int print_char(char c, int width, uint64_t flags, struct printf_spec *ps) |
static int print_char(const char ch, int width, uint32_t flags, printf_spec_t *ps) |
{ |
int counter = 0; |
count_t counter = 0; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (--width > 0) { |
/* |
147,106 → 181,193 |
* One space is consumed by the character itself, hence |
* the predecrement. |
*/ |
if (printf_putchar(' ', ps) > 0) |
++counter; |
if (printf_putchar(' ', ps) > 0) |
counter++; |
} |
} |
if (printf_putchar(c, ps) > 0) |
if (printf_putchar(ch, ps) > 0) |
counter++; |
while (--width > 0) { |
/* |
* One space is consumed by the character itself, hence |
* the predecrement. |
*/ |
if (printf_putchar(' ', ps) > 0) |
counter++; |
} |
return (int) (counter + 1); |
} |
while (--width > 0) { |
/** Print one formatted wide character. |
* |
* @param ch Character to print. |
* @param width Width modifier. |
* @param flags Flags that change the way the character is printed. |
* |
* @return Number of characters printed, negative value on failure. |
* |
*/ |
static int print_wchar(const wchar_t ch, int width, uint32_t flags, printf_spec_t *ps) |
{ |
count_t counter = 0; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (--width > 0) { |
/* |
* One space is consumed by the character itself, hence |
* the predecrement. |
*/ |
if (printf_putchar(' ', ps) > 0) |
counter++; |
} |
} |
if (printf_putwchar(ch, ps) > 0) |
counter++; |
while (--width > 0) { |
/* |
* One space is consumed by the character itself, hence |
* the predecrement. |
*/ |
if (printf_putchar(' ', ps) > 0) |
++counter; |
counter++; |
} |
return ++counter; |
return (int) (counter + 1); |
} |
/** Print string. |
* |
* @param s String to be printed. |
* @param width Width modifier. |
* @param precision Precision modifier. |
* @param flags Flags that modify the way the string is printed. |
* @param str String to be printed. |
* @param width Width modifier. |
* @param precision Precision modifier. |
* @param flags Flags that modify the way the string is printed. |
* |
* @return Number of characters printed, negative value on failure. |
*/ |
static int print_string(char *s, int width, unsigned int precision, |
uint64_t flags, struct printf_spec *ps) |
* @return Number of characters printed, negative value on failure. |
*/ |
static int print_str(char *str, int width, unsigned int precision, |
uint32_t flags, printf_spec_t *ps) |
{ |
int counter = 0; |
size_t size; |
if (str == NULL) |
return printf_putstr(nullstr, ps); |
/* Print leading spaces. */ |
count_t strw = str_length(str); |
if (precision == 0) |
precision = strw; |
/* Left padding */ |
count_t counter = 0; |
width -= precision; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
} |
/* Part of @a str fitting into the alloted space. */ |
int retval; |
size_t size = str_lsize(str, precision); |
if ((retval = printf_putnchars(str, size, ps)) < 0) |
return -counter; |
if (s == NULL) { |
return printf_putstr("(NULL)", ps); |
counter += retval; |
/* Right padding */ |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
size = strlen(s); |
/* print leading spaces */ |
return ((int) counter); |
if (precision == 0) |
precision = size; |
} |
/** Print wide string. |
* |
* @param str Wide string to be printed. |
* @param width Width modifier. |
* @param precision Precision modifier. |
* @param flags Flags that modify the way the string is printed. |
* |
* @return Number of wide characters printed, negative value on failure. |
*/ |
static int print_wstr(wchar_t *str, int width, unsigned int precision, |
uint32_t flags, printf_spec_t *ps) |
{ |
if (str == NULL) |
return printf_putstr(nullstr, ps); |
if (*str == U_BOM) |
str++; |
/* Print leading spaces. */ |
size_t strw = wstr_length(str); |
if (precision == 0) |
precision = strw; |
/* Left padding */ |
count_t counter = 0; |
width -= precision; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
} |
if ((retval = printf_putnchars(s, min(size, precision), ps)) < 0) { |
/* Part of @a wstr fitting into the alloted space. */ |
int retval; |
size_t size = wstr_lsize(str, precision); |
if ((retval = printf_wputnchars(str, size, ps)) < 0) |
return -counter; |
counter += retval; |
/* Right padding */ |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
counter += retval; |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
++counter; |
} |
return counter; |
return ((int) counter); |
} |
/** Print a number in a given base. |
* |
* Print significant digits of a number in given base. |
* |
* @param num Number to print. |
* @param widt Width modifier.h |
* @param precision Precision modifier. |
* @param base Base to print the number in (must be between 2 and 16). |
* @param flags Flags that modify the way the number is printed. |
* @param num Number to print. |
* @param width Width modifier. |
* @param precision Precision modifier. |
* @param base Base to print the number in (must be between 2 and 16). |
* @param flags Flags that modify the way the number is printed. |
* |
* @return Number of characters printed. |
* @return Number of characters printed. |
* |
*/ |
static int print_number(uint64_t num, int width, int precision, int base, |
uint64_t flags, struct printf_spec *ps) |
uint32_t flags, printf_spec_t *ps) |
{ |
char *digits = digits_small; |
char d[PRINT_NUMBER_BUFFER_SIZE]; |
char *ptr = &d[PRINT_NUMBER_BUFFER_SIZE - 1]; |
int size = 0; /* size of number with all prefixes and signs */ |
int number_size; /* size of plain number */ |
char sgn; |
int retval; |
int counter = 0; |
char *digits; |
if (flags & __PRINTF_FLAG_BIGCHARS) |
digits = digits_big; |
else |
digits = digits_small; |
if (flags & __PRINTF_FLAG_BIGCHARS) |
digits = digits_big; |
char data[PRINT_NUMBER_BUFFER_SIZE]; |
char *ptr = &data[PRINT_NUMBER_BUFFER_SIZE - 1]; |
*ptr-- = 0; /* Put zero at end of string */ |
/* Size of number with all prefixes and signs */ |
int size = 0; |
/* Put zero at end of string */ |
*ptr-- = 0; |
if (num == 0) { |
*ptr-- = '0'; |
size++; |
257,15 → 378,17 |
} while (num /= base); |
} |
number_size = size; |
/* Size of plain number */ |
int number_size = size; |
/* |
* Collect the sum of all prefixes/signs/... to calculate padding and |
* Collect the sum of all prefixes/signs/etc. to calculate padding and |
* leading zeroes. |
*/ |
if (flags & __PRINTF_FLAG_PREFIX) { |
switch(base) { |
case 2: /* Binary formating is not standard, but usefull */ |
case 2: |
/* Binary formating is not standard, but usefull */ |
size += 2; |
break; |
case 8: |
276,8 → 399,8 |
break; |
} |
} |
sgn = 0; |
char sgn = 0; |
if (flags & __PRINTF_FLAG_SIGNED) { |
if (flags & __PRINTF_FLAG_NEGATIVE) { |
sgn = '-'; |
290,48 → 413,46 |
size++; |
} |
} |
if (flags & __PRINTF_FLAG_LEFTALIGNED) { |
if (flags & __PRINTF_FLAG_LEFTALIGNED) |
flags &= ~__PRINTF_FLAG_ZEROPADDED; |
} |
/* |
* If the number is leftaligned or precision is specified then |
* zeropadding is ignored. |
* If the number is left-aligned or precision is specified then |
* padding with zeros is ignored. |
*/ |
if (flags & __PRINTF_FLAG_ZEROPADDED) { |
if ((precision == 0) && (width > size)) { |
if ((precision == 0) && (width > size)) |
precision = width - size + number_size; |
} |
} |
/* print leading spaces */ |
/* Print leading spaces */ |
if (number_size > precision) { |
/* print the whole number not only a part */ |
/* Print the whole number, not only a part */ |
precision = number_size; |
} |
width -= precision + size - number_size; |
count_t counter = 0; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
} |
/* print sign */ |
/* Print sign */ |
if (sgn) { |
if (printf_putchar(sgn, ps) == 1) |
counter++; |
} |
/* print prefix */ |
/* Print prefix */ |
if (flags & __PRINTF_FLAG_PREFIX) { |
switch(base) { |
case 2: /* Binary formating is not standard, but usefull */ |
case 2: |
/* Binary formating is not standard, but usefull */ |
if (printf_putchar('0', ps) == 1) |
counter++; |
if (flags & __PRINTF_FLAG_BIGCHARS) { |
359,150 → 480,154 |
break; |
} |
} |
/* print leading zeroes */ |
/* Print leading zeroes */ |
precision -= number_size; |
while (precision-- > 0) { |
while (precision-- > 0) { |
if (printf_putchar('0', ps) == 1) |
counter++; |
} |
/* print number itself */ |
if ((retval = printf_putstr(++ptr, ps)) > 0) { |
/* Print the number itself */ |
int retval; |
if ((retval = printf_putstr(++ptr, ps)) > 0) |
counter += retval; |
} |
/* print ending spaces */ |
/* Print tailing spaces */ |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
return counter; |
return ((int) counter); |
} |
/** Print formatted string. |
* |
* Print string formatted according to the fmt parameter and variadic arguments. |
* Each formatting directive must have the following form: |
* |
* \% [ FLAGS ] [ WIDTH ] [ .PRECISION ] [ TYPE ] CONVERSION |
* |
* \% [ FLAGS ] [ WIDTH ] [ .PRECISION ] [ TYPE ] CONVERSION |
* |
* FLAGS:@n |
* - "#" Force to print prefix.For \%o conversion, the prefix is 0, for |
* \%x and \%X prefixes are 0x and 0X and for conversion \%b the |
* prefix is 0b. |
* - "#" Force to print prefix. For \%o conversion, the prefix is 0, for |
* \%x and \%X prefixes are 0x and 0X and for conversion \%b the |
* prefix is 0b. |
* |
* - "-" Align to left. |
* - "-" Align to left. |
* |
* - "+" Print positive sign just as negative. |
* - "+" Print positive sign just as negative. |
* |
* - " " If the printed number is positive and "+" flag is not set, |
* print space in place of sign. |
* - " " If the printed number is positive and "+" flag is not set, |
* print space in place of sign. |
* |
* - "0" Print 0 as padding instead of spaces. Zeroes are placed between |
* sign and the rest of the number. This flag is ignored if "-" |
* flag is specified. |
* |
* - "0" Print 0 as padding instead of spaces. Zeroes are placed between |
* sign and the rest of the number. This flag is ignored if "-" |
* flag is specified. |
* |
* WIDTH:@n |
* - Specify the minimal width of a printed argument. If it is bigger, |
* width is ignored. If width is specified with a "*" character instead of |
* number, width is taken from parameter list. And integer parameter is |
* expected before parameter for processed conversion specification. If |
* this value is negative its absolute value is taken and the "-" flag is |
* set. |
* - Specify the minimal width of a printed argument. If it is bigger, |
* width is ignored. If width is specified with a "*" character instead of |
* number, width is taken from parameter list. And integer parameter is |
* expected before parameter for processed conversion specification. If |
* this value is negative its absolute value is taken and the "-" flag is |
* set. |
* |
* PRECISION:@n |
* - Value precision. For numbers it specifies minimum valid numbers. |
* Smaller numbers are printed with leading zeroes. Bigger numbers are not |
* affected. Strings with more than precision characters are cut off. Just |
* as with width, an "*" can be used used instead of a number. An integer |
* value is then expected in parameters. When both width and precision are |
* specified using "*", the first parameter is used for width and the |
* second one for precision. |
* |
* - Value precision. For numbers it specifies minimum valid numbers. |
* Smaller numbers are printed with leading zeroes. Bigger numbers are not |
* affected. Strings with more than precision characters are cut off. Just |
* as with width, an "*" can be used used instead of a number. An integer |
* value is then expected in parameters. When both width and precision are |
* specified using "*", the first parameter is used for width and the |
* second one for precision. |
* |
* TYPE:@n |
* - "hh" Signed or unsigned char.@n |
* - "h" Signed or unsigned short.@n |
* - "" Signed or unsigned int (default value).@n |
* - "l" Signed or unsigned long int.@n |
* - "ll" Signed or unsigned long long int.@n |
* |
* |
* - "hh" Signed or unsigned char.@n |
* - "h" Signed or unsigned short.@n |
* - "" Signed or unsigned int (default value).@n |
* - "l" Signed or unsigned long int.@n |
* If conversion is "c", the character is wchar_t (wide character).@n |
* If conversion is "s", the string is wchar_t * (wide string).@n |
* - "ll" Signed or unsigned long long int.@n |
* |
* CONVERSION:@n |
* - % Print percentile character itself. |
* - % Print percentile character itself. |
* |
* - c Print single character. |
* - c Print single character. The character is expected to be plain |
* ASCII (e.g. only values 0 .. 127 are valid).@n |
* If type is "l", then the character is expected to be wide character |
* (e.g. values 0 .. 0x10ffff are valid). |
* |
* - s Print zero terminated string. If a NULL value is passed as |
* value, "(NULL)" is printed instead. |
* |
* - P, p Print value of a pointer. Void * value is expected and it is |
* printed in hexadecimal notation with prefix (as with \%#X / \%#x |
* for 32-bit or \%#X / \%#x for 64-bit long pointers). |
* - s Print zero terminated string. If a NULL value is passed as |
* value, "(NULL)" is printed instead.@n |
* If type is "l", then the string is expected to be wide string. |
* |
* - b Print value as unsigned binary number. Prefix is not printed by |
* default. (Nonstandard extension.) |
* |
* - o Print value as unsigned octal number. Prefix is not printed by |
* default. |
* - P, p Print value of a pointer. Void * value is expected and it is |
* printed in hexadecimal notation with prefix (as with \%#X / \%#x |
* for 32-bit or \%#X / \%#x for 64-bit long pointers). |
* |
* - d, i Print signed decimal number. There is no difference between d |
* and i conversion. |
* - b Print value as unsigned binary number. Prefix is not printed by |
* default. (Nonstandard extension.) |
* |
* - u Print unsigned decimal number. |
* - o Print value as unsigned octal number. Prefix is not printed by |
* default. |
* |
* - X, x Print hexadecimal number with upper- or lower-case. Prefix is |
* not printed by default. |
* |
* All other characters from fmt except the formatting directives are printed in |
* - d, i Print signed decimal number. There is no difference between d |
* and i conversion. |
* |
* - u Print unsigned decimal number. |
* |
* - X, x Print hexadecimal number with upper- or lower-case. Prefix is |
* not printed by default. |
* |
* All other characters from fmt except the formatting directives are printed |
* verbatim. |
* |
* @param fmt Formatting NULL terminated string. |
* @return Number of characters printed, negative value on failure. |
* @param fmt Format NULL-terminated string. |
* |
* @return Number of characters printed, negative value on failure. |
* |
*/ |
int printf_core(const char *fmt, struct printf_spec *ps, va_list ap) |
int printf_core(const char *fmt, printf_spec_t *ps, va_list ap) |
{ |
int i = 0; /* index of the currently processed char from fmt */ |
int j = 0; /* index to the first not printed nonformating character */ |
int end; |
int counter; /* counter of printed characters */ |
int retval; /* used to store return values from called functions */ |
char c; |
qualifier_t qualifier; /* type of argument */ |
int base; /* base in which a numeric parameter will be printed */ |
uint64_t number; /* argument value */ |
size_t size; /* byte size of integer parameter */ |
int width, precision; |
uint64_t flags; |
size_t i; /* Index of the currently processed character from fmt */ |
size_t nxt = 0; /* Index of the next character from fmt */ |
size_t j = 0; /* Index to the first not printed nonformating character */ |
counter = 0; |
count_t counter = 0; /* Number of characters printed */ |
int retval; /* Return values from nested functions */ |
while (true) { |
i = nxt; |
wchar_t uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
while ((c = fmt[i])) { |
/* control character */ |
if (c == '%') { |
/* print common characters if any processed */ |
if (uc == 0) |
break; |
/* Control character */ |
if (uc == '%') { |
/* Print common characters if any processed */ |
if (i > j) { |
if ((retval = printf_putnchars(&fmt[j], |
(size_t)(i - j), ps)) < 0) { /* error */ |
if ((retval = printf_putnchars(&fmt[j], i - j, ps)) < 0) { |
/* Error */ |
counter = -counter; |
goto out; |
} |
counter += retval; |
} |
j = i; |
/* parse modifiers */ |
flags = 0; |
end = 0; |
/* Parse modifiers */ |
uint32_t flags = 0; |
bool end = false; |
do { |
++i; |
switch (c = fmt[i]) { |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
switch (uc) { |
case '#': |
flags |= __PRINTF_FLAG_PREFIX; |
break; |
519,116 → 644,145 |
flags |= __PRINTF_FLAG_ZEROPADDED; |
break; |
default: |
end = 1; |
}; |
} while (end == 0); |
end = true; |
}; |
} while (!end); |
/* width & '*' operator */ |
width = 0; |
if (isdigit(fmt[i])) { |
while (isdigit(fmt[i])) { |
/* Width & '*' operator */ |
int width = 0; |
if (isdigit(uc)) { |
while (true) { |
width *= 10; |
width += fmt[i++] - '0'; |
width += uc - '0'; |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 0) |
break; |
if (!isdigit(uc)) |
break; |
} |
} else if (fmt[i] == '*') { |
/* get width value from argument list */ |
i++; |
} else if (uc == '*') { |
/* Get width value from argument list */ |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
width = (int) va_arg(ap, int); |
if (width < 0) { |
/* negative width sets '-' flag */ |
/* Negative width sets '-' flag */ |
width *= -1; |
flags |= __PRINTF_FLAG_LEFTALIGNED; |
} |
} |
/* precision and '*' operator */ |
precision = 0; |
if (fmt[i] == '.') { |
++i; |
if (isdigit(fmt[i])) { |
while (isdigit(fmt[i])) { |
/* Precision and '*' operator */ |
int precision = 0; |
if (uc == '.') { |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (isdigit(uc)) { |
while (true) { |
precision *= 10; |
precision += fmt[i++] - '0'; |
precision += uc - '0'; |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 0) |
break; |
if (!isdigit(uc)) |
break; |
} |
} else if (fmt[i] == '*') { |
/* |
* Get precision value from the argument |
* list. |
*/ |
i++; |
} else if (uc == '*') { |
/* Get precision value from the argument list */ |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
precision = (int) va_arg(ap, int); |
if (precision < 0) { |
/* ignore negative precision */ |
/* Ignore negative precision */ |
precision = 0; |
} |
} |
} |
switch (fmt[i++]) { |
/** @todo unimplemented qualifiers: |
* t ptrdiff_t - ISO C 99 |
qualifier_t qualifier; |
switch (uc) { |
/** @todo Unimplemented qualifiers: |
* t ptrdiff_t - ISO C 99 |
*/ |
case 'h': /* char or short */ |
case 'h': |
/* Char or short */ |
qualifier = PrintfQualifierShort; |
if (fmt[i] == 'h') { |
i++; |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 'h') { |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
qualifier = PrintfQualifierByte; |
} |
break; |
case 'l': /* long or long long*/ |
case 'l': |
/* Long or long long */ |
qualifier = PrintfQualifierLong; |
if (fmt[i] == 'l') { |
i++; |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 'l') { |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
qualifier = PrintfQualifierLongLong; |
} |
break; |
default: |
/* default type */ |
qualifier = PrintfQualifierInt; |
--i; |
} |
/* Default type */ |
qualifier = PrintfQualifierInt; |
} |
base = 10; |
switch (c = fmt[i]) { |
unsigned int base = 10; |
switch (uc) { |
/* |
* String and character conversions. |
*/ |
* String and character conversions. |
*/ |
case 's': |
if ((retval = print_string(va_arg(ap, char *), |
width, precision, flags, ps)) < 0) { |
if (qualifier == PrintfQualifierLong) |
retval = print_wstr(va_arg(ap, wchar_t *), width, precision, flags, ps); |
else |
retval = print_str(va_arg(ap, char *), width, precision, flags, ps); |
if (retval < 0) { |
counter = -counter; |
goto out; |
}; |
} |
counter += retval; |
j = i + 1; |
j = nxt; |
goto next_char; |
case 'c': |
c = va_arg(ap, unsigned int); |
retval = print_char(c, width, flags, ps); |
if (qualifier == PrintfQualifierLong) |
retval = print_wchar(va_arg(ap, wchar_t), width, flags, ps); |
else |
retval = print_char(va_arg(ap, unsigned int), width, flags, ps); |
if (retval < 0) { |
counter = -counter; |
goto out; |
}; |
counter += retval; |
j = i + 1; |
j = nxt; |
goto next_char; |
/* |
/* |
* Integer values |
*/ |
case 'P': /* pointer */ |
case 'P': |
/* Pointer */ |
flags |= __PRINTF_FLAG_BIGCHARS; |
case 'p': |
flags |= __PRINTF_FLAG_PREFIX; |
base = 16; |
qualifier = PrintfQualifierPointer; |
break; |
case 'b': |
break; |
case 'b': |
base = 2; |
break; |
case 'o': |
636,7 → 790,7 |
break; |
case 'd': |
case 'i': |
flags |= __PRINTF_FLAG_SIGNED; |
flags |= __PRINTF_FLAG_SIGNED; |
case 'u': |
break; |
case 'X': |
644,10 → 798,12 |
case 'x': |
base = 16; |
break; |
/* percentile itself */ |
case '%': |
/* Percentile itself */ |
case '%': |
j = i; |
goto next_char; |
/* |
* Bad formatting. |
*/ |
656,12 → 812,12 |
* Unknown format. Now, j is the index of '%' |
* so we will print whole bad format sequence. |
*/ |
goto next_char; |
goto next_char; |
} |
/* Print integers */ |
/* print number */ |
/* Print integers */ |
size_t size; |
uint64_t number; |
switch (qualifier) { |
case PrintfQualifierByte: |
size = sizeof(unsigned char); |
687,7 → 843,8 |
size = sizeof(void *); |
number = (uint64_t) (unsigned long) va_arg(ap, void *); |
break; |
default: /* Unknown qualifier */ |
default: |
/* Unknown qualifier */ |
counter = -counter; |
goto out; |
} |
695,7 → 852,7 |
if (flags & __PRINTF_FLAG_SIGNED) { |
if (number & (0x1 << (size * 8 - 1))) { |
flags |= __PRINTF_FLAG_NEGATIVE; |
if (size == sizeof(uint64_t)) { |
number = -((int64_t) number); |
} else { |
707,33 → 864,31 |
} |
} |
} |
if ((retval = print_number(number, width, precision, |
base, flags, ps)) < 0) { |
counter = -counter; |
goto out; |
} |
counter += retval; |
j = i + 1; |
} |
j = nxt; |
} |
next_char: |
++i; |
; |
} |
if (i > j) { |
if ((retval = printf_putnchars(&fmt[j], (unative_t) (i - j), |
ps)) < 0) { /* error */ |
if ((retval = printf_putnchars(&fmt[j], i - j, ps)) < 0) { |
/* Error */ |
counter = -counter; |
goto out; |
} |
counter += retval; |
} |
out: |
return counter; |
return ((int) counter); |
} |
/** @} |
//branches/tracing/kernel/generic/src/proc/scheduler.c |
---|
451,7 → 451,7 |
/* |
* Entering state is unexpected. |
*/ |
panic("tid%" PRIu64 ": unexpected state %s\n", |
panic("tid%" PRIu64 ": unexpected state %s.", |
THREAD->tid, thread_states[THREAD->state]); |
break; |
} |
//branches/tracing/kernel/generic/src/proc/task.c |
---|
52,6 → 52,7 |
#include <print.h> |
#include <errno.h> |
#include <func.h> |
#include <string.h> |
#include <syscall/copy.h> |
/** Spinlock protecting the tasks_tree AVL tree. */ |
150,7 → 151,7 |
ta->as = as; |
memcpy(ta->name, name, TASK_NAME_BUFLEN); |
ta->name[TASK_NAME_BUFLEN - 1] = '\0'; |
ta->name[TASK_NAME_BUFLEN - 1] = 0; |
atomic_set(&ta->refcount, 0); |
atomic_set(&ta->lifecount, 0); |
249,6 → 250,35 |
sizeof(TASK->taskid)); |
} |
/** Syscall for setting the task name. |
* |
* The name simplifies identifying the task in the task list. |
* |
* @param name The new name for the task. (typically the same |
* as the command used to execute it). |
* |
* @return 0 on success or an error code from @ref errno.h. |
*/ |
unative_t sys_task_set_name(const char *uspace_name, size_t name_len) |
{ |
int rc; |
char namebuf[TASK_NAME_BUFLEN]; |
/* Cap length of name and copy it from userspace. */ |
if (name_len > TASK_NAME_BUFLEN - 1) |
name_len = TASK_NAME_BUFLEN - 1; |
rc = copy_from_uspace(namebuf, uspace_name, name_len); |
if (rc != 0) |
return (unative_t) rc; |
namebuf[name_len] = '\0'; |
str_cpy(TASK->name, TASK_NAME_BUFLEN, namebuf); |
return EOK; |
} |
/** Find task structure corresponding to task ID. |
* |
* The tasks_lock must be already held by the caller of this function and |
339,7 → 369,7 |
bool sleeping = false; |
thr = list_get_instance(cur, thread_t, th_link); |
spinlock_lock(&thr->lock); |
thr->interrupted = true; |
if (thr->state == Sleeping) |
367,13 → 397,13 |
order(task_get_accounting(t), &cycles, &suffix); |
#ifdef __32_BITS__ |
printf("%-6" PRIu64 " %-10s %-3" PRIu32 " %10p %10p %9" PRIu64 |
printf("%-6" PRIu64 " %-12s %-3" PRIu32 " %10p %10p %9" PRIu64 |
"%c %7ld %6ld", t->taskid, t->name, t->context, t, t->as, cycles, |
suffix, atomic_get(&t->refcount), atomic_get(&t->active_calls)); |
#endif |
#ifdef __64_BITS__ |
printf("%-6" PRIu64 " %-10s %-3" PRIu32 " %18p %18p %9" PRIu64 |
printf("%-6" PRIu64 " %-12s %-3" PRIu32 " %18p %18p %9" PRIu64 |
"%c %7ld %6ld", t->taskid, t->name, t->context, t, t->as, cycles, |
suffix, atomic_get(&t->refcount), atomic_get(&t->active_calls)); |
#endif |
398,16 → 428,16 |
spinlock_lock(&tasks_lock); |
#ifdef __32_BITS__ |
printf("taskid name ctx address as " |
printf("taskid name ctx address as " |
"cycles threads calls callee\n"); |
printf("------ ---------- --- ---------- ---------- " |
printf("------ ------------ --- ---------- ---------- " |
"---------- ------- ------ ------>\n"); |
#endif |
#ifdef __64_BITS__ |
printf("taskid name ctx address as " |
printf("taskid name ctx address as " |
"cycles threads calls callee\n"); |
printf("------ ---------- --- ------------------ ------------------ " |
printf("------ ------------ --- ------------------ ------------------ " |
"---------- ------- ------ ------>\n"); |
#endif |
//branches/tracing/kernel/generic/src/proc/program.c |
---|
133,7 → 133,7 |
/* Register image as the program loader */ |
ASSERT(program_loader == NULL); |
program_loader = image_addr; |
printf("Registered program loader at 0x%" PRIp "\n", |
LOG("Registered program loader at 0x%" PRIp "\n", |
image_addr); |
return EOK; |
} |
190,49 → 190,31 |
/** Syscall for creating a new loader instance from userspace. |
* |
* Creates a new task from the program loader image, connects a phone |
* to it and stores the phone id into the provided buffer. |
* Creates a new task from the program loader image and sets |
* the task name. |
* |
* @param uspace_phone_id Userspace address where to store the phone id. |
* @param name Name to set on the new task (typically the same |
* as the command used to execute it). |
* |
* @return 0 on success or an error code from @ref errno.h. |
*/ |
unative_t sys_program_spawn_loader(int *uspace_phone_id, char *uspace_name, |
size_t name_len) |
unative_t sys_program_spawn_loader(char *uspace_name, size_t name_len) |
{ |
program_t p; |
int fake_id; |
int rc; |
int phone_id; |
char namebuf[TASK_NAME_BUFLEN]; |
fake_id = 0; |
/* Before we even try creating the task, see if we can write the id */ |
rc = (unative_t) copy_to_uspace(uspace_phone_id, &fake_id, |
sizeof(fake_id)); |
if (rc != 0) |
return rc; |
/* Cap length of name and copy it from userspace. */ |
if (name_len > THREAD_NAME_BUFLEN - 1) |
name_len = THREAD_NAME_BUFLEN - 1; |
if (name_len > TASK_NAME_BUFLEN - 1) |
name_len = TASK_NAME_BUFLEN - 1; |
rc = copy_from_uspace(namebuf, uspace_name, name_len); |
if (rc != 0) |
return (unative_t) rc; |
namebuf[name_len] = '\0'; |
namebuf[name_len] = 0; |
/* Allocate the phone for communicating with the new task. */ |
phone_id = phone_alloc(); |
if (phone_id < 0) |
return ELIMIT; |
/* Spawn the new task. */ |
rc = program_create_loader(&p, namebuf); |
239,18 → 221,6 |
if (rc != 0) |
return rc; |
phone_connect(phone_id, &p.task->answerbox); |
/* No need to aquire lock before task_ready() */ |
rc = (unative_t) copy_to_uspace(uspace_phone_id, &phone_id, |
sizeof(phone_id)); |
if (rc != 0) { |
/* Ooops */ |
ipc_phone_hangup(&TASK->phones[phone_id]); |
task_kill(p.task->taskid); |
return rc; |
} |
// FIXME: control the capabilities |
cap_set(p.task, cap_get(TASK)); |
//branches/tracing/kernel/generic/src/proc/tasklet.c |
---|
51,7 → 51,7 |
tasklet_list = malloc(sizeof(tasklet_descriptor_t *) * config.cpu_count, 0); |
if (!tasklet_list) |
panic("Error initializing tasklets"); |
panic("Error initializing tasklets."); |
for (i = 0; i < config.cpu_count; i++) |
tasklet_list[i] = NULL; |
//branches/tracing/kernel/generic/src/proc/thread.c |
---|
102,7 → 102,7 |
thread_id_t last_tid = 0; |
static slab_cache_t *thread_slab; |
#ifdef ARCH_HAS_FPU |
#ifdef CONFIG_FPU |
slab_cache_t *fpu_context_slab; |
#endif |
161,7 → 161,7 |
/* call the architecture-specific part of the constructor */ |
thr_constructor_arch(t); |
#ifdef ARCH_HAS_FPU |
#ifdef CONFIG_FPU |
#ifdef CONFIG_FPU_LAZY |
t->saved_fpu_context = NULL; |
#else |
169,11 → 169,11 |
if (!t->saved_fpu_context) |
return -1; |
#endif |
#endif |
#endif |
t->kstack = (uint8_t *) frame_alloc(STACK_FRAMES, FRAME_KA | kmflags); |
if (!t->kstack) { |
#ifdef ARCH_HAS_FPU |
#ifdef CONFIG_FPU |
if (t->saved_fpu_context) |
slab_free(fpu_context_slab, t->saved_fpu_context); |
#endif |
196,7 → 196,7 |
thr_destructor_arch(t); |
frame_free(KA2PA(t->kstack)); |
#ifdef ARCH_HAS_FPU |
#ifdef CONFIG_FPU |
if (t->saved_fpu_context) |
slab_free(fpu_context_slab, t->saved_fpu_context); |
#endif |
211,11 → 211,11 |
void thread_init(void) |
{ |
THREAD = NULL; |
atomic_set(&nrdy,0); |
atomic_set(&nrdy, 0); |
thread_slab = slab_cache_create("thread_slab", sizeof(thread_t), 0, |
thr_constructor, thr_destructor, 0); |
#ifdef ARCH_HAS_FPU |
#ifdef CONFIG_FPU |
fpu_context_slab = slab_cache_create("fpu_slab", sizeof(fpu_context_t), |
FPU_CONTEXT_ALIGN, NULL, NULL, 0); |
#endif |
316,7 → 316,7 |
interrupts_restore(ipl); |
memcpy(t->name, name, THREAD_NAME_BUFLEN); |
t->name[THREAD_NAME_BUFLEN - 1] = '\0'; |
t->name[THREAD_NAME_BUFLEN - 1] = 0; |
t->thread_code = func; |
t->thread_arg = arg; |
723,7 → 723,7 |
if (rc != 0) |
return (unative_t) rc; |
namebuf[name_len] = '\0'; |
namebuf[name_len] = 0; |
/* |
* In case of failure, kernel_uarg will be deallocated in this function. |
//branches/tracing/kernel/generic/src/lib/rd.c |
---|
88,9 → 88,7 |
rd_parea.pbase = ALIGN_DOWN((uintptr_t) KA2PA((void *) header + hsize), |
FRAME_SIZE); |
rd_parea.vbase = (uintptr_t) ((void *) header + hsize); |
rd_parea.frames = SIZE2FRAMES(dsize); |
rd_parea.cacheable = true; |
ddi_parea_register(&rd_parea); |
sysinfo_set_item_val("rd", NULL, true); |
//branches/tracing/kernel/generic/src/lib/string.c |
---|
0,0 → 1,712 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
* @{ |
*/ |
/** |
* @file |
* @brief String functions. |
* |
* Strings and characters use the Universal Character Set (UCS). The standard |
* strings, called just strings are encoded in UTF-8. Wide strings (encoded |
* in UTF-32) are supported to a limited degree. A single character is |
* represented as wchar_t.@n |
* |
* Overview of the terminology:@n |
* |
* Term Meaning |
* -------------------- ---------------------------------------------------- |
* byte 8 bits stored in uint8_t (unsigned 8 bit integer) |
* |
* character UTF-32 encoded Unicode character, stored in wchar_t |
* (signed 32 bit integer), code points 0 .. 1114111 |
* are valid |
* |
* ASCII character 7 bit encoded ASCII character, stored in char |
* (usually signed 8 bit integer), code points 0 .. 127 |
* are valid |
* |
* string UTF-8 encoded NULL-terminated Unicode string, char * |
* |
* wide string UTF-32 encoded NULL-terminated Unicode string, |
* wchar_t * |
* |
* [wide] string size number of BYTES in a [wide] string (excluding |
* the NULL-terminator), size_t |
* |
* [wide] string length number of CHARACTERS in a [wide] string (excluding |
* the NULL-terminator), count_t |
* |
* [wide] string width number of display cells on a monospace display taken |
* by a [wide] string, count_t |
* |
* |
* Overview of string metrics:@n |
* |
* Metric Abbrev. Type Meaning |
* ------ ------ ------ ------------------------------------------------- |
* size n size_t number of BYTES in a string (excluding the |
* NULL-terminator) |
* |
* length l count_t number of CHARACTERS in a string (excluding the |
* null terminator) |
* |
* width w count_t number of display cells on a monospace display |
* taken by a string |
* |
* |
* Function naming prefixes:@n |
* |
* chr_ operate on characters |
* ascii_ operate on ASCII characters |
* str_ operate on strings |
* wstr_ operate on wide strings |
* |
* [w]str_[n|l|w] operate on a prefix limited by size, length |
* or width |
* |
* |
* A specific character inside a [wide] string can be referred to by:@n |
* |
* pointer (char *, wchar_t *) |
* byte offset (size_t) |
* character index (count_t) |
* |
*/ |
#include <string.h> |
#include <print.h> |
#include <cpu.h> |
#include <arch/asm.h> |
#include <arch.h> |
#include <errno.h> |
#include <align.h> |
#include <debug.h> |
/** Byte mask consisting of lowest @n bits (out of 8) */ |
#define LO_MASK_8(n) ((uint8_t) ((1 << (n)) - 1)) |
/** Byte mask consisting of lowest @n bits (out of 32) */ |
#define LO_MASK_32(n) ((uint32_t) ((1 << (n)) - 1)) |
/** Byte mask consisting of highest @n bits (out of 8) */ |
#define HI_MASK_8(n) (~LO_MASK_8(8 - (n))) |
/** Number of data bits in a UTF-8 continuation byte */ |
#define CONT_BITS 6 |
/** Decode a single character from a string. |
* |
* Decode a single character from a string of size @a size. Decoding starts |
* at @a offset and this offset is moved to the beginning of the next |
* character. In case of decoding error, offset generally advances at least |
* by one. However, offset is never moved beyond size. |
* |
* @param str String (not necessarily NULL-terminated). |
* @param offset Byte offset in string where to start decoding. |
* @param size Size of the string (in bytes). |
* |
* @return Value of decoded character, U_SPECIAL on decoding error or |
* NULL if attempt to decode beyond @a size. |
* |
*/ |
wchar_t str_decode(const char *str, size_t *offset, size_t size) |
{ |
if (*offset + 1 > size) |
return 0; |
/* First byte read from string */ |
uint8_t b0 = (uint8_t) str[(*offset)++]; |
/* Determine code length */ |
unsigned int b0_bits; /* Data bits in first byte */ |
unsigned int cbytes; /* Number of continuation bytes */ |
if ((b0 & 0x80) == 0) { |
/* 0xxxxxxx (Plain ASCII) */ |
b0_bits = 7; |
cbytes = 0; |
} else if ((b0 & 0xe0) == 0xc0) { |
/* 110xxxxx 10xxxxxx */ |
b0_bits = 5; |
cbytes = 1; |
} else if ((b0 & 0xf0) == 0xe0) { |
/* 1110xxxx 10xxxxxx 10xxxxxx */ |
b0_bits = 4; |
cbytes = 2; |
} else if ((b0 & 0xf8) == 0xf0) { |
/* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ |
b0_bits = 3; |
cbytes = 3; |
} else { |
/* 10xxxxxx -- unexpected continuation byte */ |
return U_SPECIAL; |
} |
if (*offset + cbytes > size) |
return U_SPECIAL; |
wchar_t ch = b0 & LO_MASK_8(b0_bits); |
/* Decode continuation bytes */ |
while (cbytes > 0) { |
uint8_t b = (uint8_t) str[(*offset)++]; |
/* Must be 10xxxxxx */ |
if ((b & 0xc0) != 0x80) |
return U_SPECIAL; |
/* Shift data bits to ch */ |
ch = (ch << CONT_BITS) | (wchar_t) (b & LO_MASK_8(CONT_BITS)); |
cbytes--; |
} |
return ch; |
} |
/** Encode a single character to string representation. |
* |
* Encode a single character to string representation (i.e. UTF-8) and store |
* it into a buffer at @a offset. Encoding starts at @a offset and this offset |
* is moved to the position where the next character can be written to. |
* |
* @param ch Input character. |
* @param str Output buffer. |
* @param offset Byte offset where to start writing. |
* @param size Size of the output buffer (in bytes). |
* |
* @return EOK if the character was encoded successfully, EOVERFLOW if there |
* was not enough space in the output buffer or EINVAL if the character |
* code was invalid. |
*/ |
int chr_encode(wchar_t ch, char *str, size_t *offset, size_t size) |
{ |
if (*offset >= size) |
return EOVERFLOW; |
if (!chr_check(ch)) |
return EINVAL; |
/* Unsigned version of ch (bit operations should only be done |
on unsigned types). */ |
uint32_t cc = (uint32_t) ch; |
/* Determine how many continuation bytes are needed */ |
unsigned int b0_bits; /* Data bits in first byte */ |
unsigned int cbytes; /* Number of continuation bytes */ |
if ((cc & ~LO_MASK_32(7)) == 0) { |
b0_bits = 7; |
cbytes = 0; |
} else if ((cc & ~LO_MASK_32(11)) == 0) { |
b0_bits = 5; |
cbytes = 1; |
} else if ((cc & ~LO_MASK_32(16)) == 0) { |
b0_bits = 4; |
cbytes = 2; |
} else if ((cc & ~LO_MASK_32(21)) == 0) { |
b0_bits = 3; |
cbytes = 3; |
} else { |
/* Codes longer than 21 bits are not supported */ |
return EINVAL; |
} |
/* Check for available space in buffer */ |
if (*offset + cbytes >= size) |
return EOVERFLOW; |
/* Encode continuation bytes */ |
unsigned int i; |
for (i = cbytes; i > 0; i--) { |
str[*offset + i] = 0x80 | (cc & LO_MASK_32(CONT_BITS)); |
cc = cc >> CONT_BITS; |
} |
/* Encode first byte */ |
str[*offset] = (cc & LO_MASK_32(b0_bits)) | HI_MASK_8(8 - b0_bits - 1); |
/* Advance offset */ |
*offset += cbytes + 1; |
return EOK; |
} |
/** Get size of string. |
* |
* Get the number of bytes which are used by the string @a str (excluding the |
* NULL-terminator). |
* |
* @param str String to consider. |
* |
* @return Number of bytes used by the string |
* |
*/ |
size_t str_size(const char *str) |
{ |
size_t size = 0; |
while (*str++ != 0) |
size++; |
return size; |
} |
/** Get size of wide string. |
* |
* Get the number of bytes which are used by the wide string @a str (excluding the |
* NULL-terminator). |
* |
* @param str Wide string to consider. |
* |
* @return Number of bytes used by the wide string |
* |
*/ |
size_t wstr_size(const wchar_t *str) |
{ |
return (wstr_length(str) * sizeof(wchar_t)); |
} |
/** Get size of string with length limit. |
* |
* Get the number of bytes which are used by up to @a max_len first |
* characters in the string @a str. If @a max_len is greater than |
* the length of @a str, the entire string is measured (excluding the |
* NULL-terminator). |
* |
* @param str String to consider. |
* @param max_len Maximum number of characters to measure. |
* |
* @return Number of bytes used by the characters. |
* |
*/ |
size_t str_lsize(const char *str, count_t max_len) |
{ |
count_t len = 0; |
size_t offset = 0; |
while (len < max_len) { |
if (str_decode(str, &offset, STR_NO_LIMIT) == 0) |
break; |
len++; |
} |
return offset; |
} |
/** Get size of wide string with length limit. |
* |
* Get the number of bytes which are used by up to @a max_len first |
* wide characters in the wide string @a str. If @a max_len is greater than |
* the length of @a str, the entire wide string is measured (excluding the |
* NULL-terminator). |
* |
* @param str Wide string to consider. |
* @param max_len Maximum number of wide characters to measure. |
* |
* @return Number of bytes used by the wide characters. |
* |
*/ |
size_t wstr_lsize(const wchar_t *str, count_t max_len) |
{ |
return (wstr_nlength(str, max_len * sizeof(wchar_t)) * sizeof(wchar_t)); |
} |
/** Get number of characters in a string. |
* |
* @param str NULL-terminated string. |
* |
* @return Number of characters in string. |
* |
*/ |
count_t str_length(const char *str) |
{ |
count_t len = 0; |
size_t offset = 0; |
while (str_decode(str, &offset, STR_NO_LIMIT) != 0) |
len++; |
return len; |
} |
/** Get number of characters in a wide string. |
* |
* @param str NULL-terminated wide string. |
* |
* @return Number of characters in @a str. |
* |
*/ |
count_t wstr_length(const wchar_t *wstr) |
{ |
count_t len = 0; |
while (*wstr++ != 0) |
len++; |
return len; |
} |
/** Get number of characters in a string with size limit. |
* |
* @param str NULL-terminated string. |
* @param size Maximum number of bytes to consider. |
* |
* @return Number of characters in string. |
* |
*/ |
count_t str_nlength(const char *str, size_t size) |
{ |
count_t len = 0; |
size_t offset = 0; |
while (str_decode(str, &offset, size) != 0) |
len++; |
return len; |
} |
/** Get number of characters in a string with size limit. |
* |
* @param str NULL-terminated string. |
* @param size Maximum number of bytes to consider. |
* |
* @return Number of characters in string. |
* |
*/ |
count_t wstr_nlength(const wchar_t *str, size_t size) |
{ |
count_t len = 0; |
count_t limit = ALIGN_DOWN(size, sizeof(wchar_t)); |
count_t offset = 0; |
while ((offset < limit) && (*str++ != 0)) { |
len++; |
offset += sizeof(wchar_t); |
} |
return len; |
} |
/** Check whether character is plain ASCII. |
* |
* @return True if character is plain ASCII. |
* |
*/ |
bool ascii_check(wchar_t ch) |
{ |
if ((ch >= 0) && (ch <= 127)) |
return true; |
return false; |
} |
/** Check whether character is valid |
* |
* @return True if character is a valid Unicode code point. |
* |
*/ |
bool chr_check(wchar_t ch) |
{ |
if ((ch >= 0) && (ch <= 1114111)) |
return true; |
return false; |
} |
/** Compare two NULL terminated strings. |
* |
* Do a char-by-char comparison of two NULL-terminated strings. |
* The strings are considered equal iff they consist of the same |
* characters on the minimum of their lengths. |
* |
* @param s1 First string to compare. |
* @param s2 Second string to compare. |
* |
* @return 0 if the strings are equal, -1 if first is smaller, |
* 1 if second smaller. |
* |
*/ |
int str_cmp(const char *s1, const char *s2) |
{ |
wchar_t c1 = 0; |
wchar_t c2 = 0; |
size_t off1 = 0; |
size_t off2 = 0; |
while (true) { |
c1 = str_decode(s1, &off1, STR_NO_LIMIT); |
c2 = str_decode(s2, &off2, STR_NO_LIMIT); |
if (c1 < c2) |
return -1; |
if (c1 > c2) |
return 1; |
if (c1 == 0 || c2 == 0) |
break; |
} |
return 0; |
} |
/** Compare two NULL terminated strings with length limit. |
* |
* Do a char-by-char comparison of two NULL-terminated strings. |
* The strings are considered equal iff they consist of the same |
* characters on the minimum of their lengths and the length limit. |
* |
* @param s1 First string to compare. |
* @param s2 Second string to compare. |
* @param max_len Maximum number of characters to consider. |
* |
* @return 0 if the strings are equal, -1 if first is smaller, |
* 1 if second smaller. |
* |
*/ |
int str_lcmp(const char *s1, const char *s2, count_t max_len) |
{ |
wchar_t c1 = 0; |
wchar_t c2 = 0; |
size_t off1 = 0; |
size_t off2 = 0; |
count_t len = 0; |
while (true) { |
if (len >= max_len) |
break; |
c1 = str_decode(s1, &off1, STR_NO_LIMIT); |
c2 = str_decode(s2, &off2, STR_NO_LIMIT); |
if (c1 < c2) |
return -1; |
if (c1 > c2) |
return 1; |
if (c1 == 0 || c2 == 0) |
break; |
++len; |
} |
return 0; |
} |
/** Copy string. |
* |
* Copy source string @a src to destination buffer @a dest. |
* No more than @a size bytes are written. If the size of the output buffer |
* is at least one byte, the output string will always be well-formed, i.e. |
* null-terminated and containing only complete characters. |
* |
* @param dst Destination buffer. |
* @param count Size of the destination buffer (must be > 0). |
* @param src Source string. |
*/ |
void str_cpy(char *dest, size_t size, const char *src) |
{ |
wchar_t ch; |
size_t src_off; |
size_t dest_off; |
/* There must be space for a null terminator in the buffer. */ |
ASSERT(size > 0); |
src_off = 0; |
dest_off = 0; |
while ((ch = str_decode(src, &src_off, STR_NO_LIMIT)) != 0) { |
if (chr_encode(ch, dest, &dest_off, size - 1) != EOK) |
break; |
} |
dest[dest_off] = '\0'; |
} |
/** Copy size-limited substring. |
* |
* Copy prefix of string @a src of max. size @a size to destination buffer |
* @a dest. No more than @a size bytes are written. The output string will |
* always be well-formed, i.e. null-terminated and containing only complete |
* characters. |
* |
* No more than @a n bytes are read from the input string, so it does not |
* have to be null-terminated. |
* |
* @param dst Destination buffer. |
* @param count Size of the destination buffer (must be > 0). |
* @param src Source string. |
* @param n Maximum number of bytes to read from @a src. |
*/ |
void str_ncpy(char *dest, size_t size, const char *src, size_t n) |
{ |
wchar_t ch; |
size_t src_off; |
size_t dest_off; |
/* There must be space for a null terminator in the buffer. */ |
ASSERT(size > 0); |
src_off = 0; |
dest_off = 0; |
while ((ch = str_decode(src, &src_off, n)) != 0) { |
if (chr_encode(ch, dest, &dest_off, size - 1) != EOK) |
break; |
} |
dest[dest_off] = '\0'; |
} |
/** Copy NULL-terminated wide string to string |
* |
* Copy source wide string @a src to destination buffer @a dst. |
* No more than @a size bytes are written. NULL-terminator is always |
* written after the last succesfully copied character (i.e. if the |
* destination buffer is has at least 1 byte, it will be always |
* NULL-terminated). |
* |
* @param src Source wide string. |
* @param dst Destination buffer. |
* @param count Size of the destination buffer. |
* |
*/ |
void wstr_nstr(char *dst, const wchar_t *src, size_t size) |
{ |
/* No space for the NULL-terminator in the buffer */ |
if (size == 0) |
return; |
wchar_t ch; |
count_t src_idx = 0; |
size_t dst_off = 0; |
while ((ch = src[src_idx++]) != 0) { |
if (chr_encode(ch, dst, &dst_off, size) != EOK) |
break; |
} |
if (dst_off >= size) |
dst[size - 1] = 0; |
else |
dst[dst_off] = 0; |
} |
/** Find first occurence of character in string. |
* |
* @param str String to search. |
* @param ch Character to look for. |
* |
* @return Pointer to character in @a str or NULL if not found. |
* |
*/ |
const char *str_chr(const char *str, wchar_t ch) |
{ |
wchar_t acc; |
size_t off = 0; |
size_t last = 0; |
while ((acc = str_decode(str, &off, STR_NO_LIMIT)) != 0) { |
if (acc == ch) |
return (str + last); |
last = off; |
} |
return NULL; |
} |
/** Insert a wide character into a wide string. |
* |
* Insert a wide character into a wide string at position |
* @a pos. The characters after the position are shifted. |
* |
* @param str String to insert to. |
* @param ch Character to insert to. |
* @param pos Character index where to insert. |
@ @param max_pos Characters in the buffer. |
* |
* @return True if the insertion was sucessful, false if the position |
* is out of bounds. |
* |
*/ |
bool wstr_linsert(wchar_t *str, wchar_t ch, count_t pos, count_t max_pos) |
{ |
count_t len = wstr_length(str); |
if ((pos > len) || (pos + 1 > max_pos)) |
return false; |
count_t i; |
for (i = len; i + 1 > pos; i--) |
str[i + 1] = str[i]; |
str[pos] = ch; |
return true; |
} |
/** Remove a wide character from a wide string. |
* |
* Remove a wide character from a wide string at position |
* @a pos. The characters after the position are shifted. |
* |
* @param str String to remove from. |
* @param pos Character index to remove. |
* |
* @return True if the removal was sucessful, false if the position |
* is out of bounds. |
* |
*/ |
bool wstr_remove(wchar_t *str, count_t pos) |
{ |
count_t len = wstr_length(str); |
if (pos >= len) |
return false; |
count_t i; |
for (i = pos + 1; i <= len; i++) |
str[i - 1] = str[i]; |
return true; |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/src/lib/memstr.c |
---|
1,5 → 1,6 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
76,6 → 77,51 |
return (char *) dst; |
} |
/** Move memory block with possible overlapping. |
* |
* Copy cnt bytes from src address to dst address. The source and destination |
* memory areas may overlap. |
* |
* @param src Source address to copy from. |
* @param dst Destination address to copy to. |
* @param cnt Number of bytes to copy. |
* |
* @return Destination address. |
*/ |
void *memmove(void *dst, const void *src, size_t n) |
{ |
const uint8_t *sp; |
uint8_t *dp; |
/* Nothing to do? */ |
if (src == dst) |
return dst; |
/* Non-overlapping? */ |
if (dst >= src + n || src >= dst + n) { |
return memcpy(dst, src, n); |
} |
/* Which direction? */ |
if (src > dst) { |
/* Forwards. */ |
sp = src; |
dp = dst; |
while (n-- != 0) |
*dp++ = *sp++; |
} else { |
/* Backwards. */ |
sp = src + (n - 1); |
dp = dst + (n - 1); |
while (n-- != 0) |
*dp-- = *sp--; |
} |
return dst; |
} |
/** Fill block of memory |
* |
* Fill cnt bytes at dst address with the value x. The filling is done |
114,25 → 160,5 |
p[i] = x; |
} |
/** Copy string. |
* |
* Copy string from src address to dst address. The copying is done |
* char-by-char until the null character. The source and destination memory |
* areas cannot overlap. |
* |
* @param src Source string to copy from. |
* @param dst Destination string to copy to. |
* |
* @return Address of the destination string. |
*/ |
char *strcpy(char *dest, const char *src) |
{ |
char *orig = dest; |
while ((*(dest++) = *(src++))) |
; |
return orig; |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/src/lib/func.c |
---|
47,7 → 47,7 |
/** Halt wrapper |
* |
* Set halt flag and halt the cpu. |
* Set halt flag and halt the CPU. |
* |
*/ |
void halt() |
54,9 → 54,7 |
{ |
#ifdef CONFIG_DEBUG |
bool rundebugger = false; |
// TODO test_and_set not defined on all arches |
// if (!test_and_set(&haltstate)) |
if (!atomic_get(&haltstate)) { |
atomic_set(&haltstate, 1); |
rundebugger = true; |
64,118 → 62,22 |
#else |
atomic_set(&haltstate, 1); |
#endif |
interrupts_disable(); |
#ifdef CONFIG_DEBUG |
if (rundebugger) { |
printf("\n"); |
kconsole("panic"); /* Run kconsole as a last resort to user */ |
} |
#endif |
#if (defined(CONFIG_DEBUG)) && (defined(CONFIG_KCONSOLE)) |
if ((rundebugger) && (kconsole_check_poll())) |
kconsole("panic", "\nLast resort kernel console ready.\n", false); |
#endif |
if (CPU) |
printf("cpu%u: halted\n", CPU->id); |
else |
printf("cpu: halted\n"); |
cpu_halt(); |
} |
/** Return number of characters in a string. |
* |
* @param str NULL terminated string. |
* |
* @return Number of characters in str. |
*/ |
size_t strlen(const char *str) |
{ |
int i; |
for (i = 0; str[i]; i++) |
; |
return i; |
} |
/** Compare two NULL terminated strings |
* |
* Do a char-by-char comparison of two NULL terminated strings. |
* The strings are considered equal iff they consist of the same |
* characters on the minimum of their lengths. |
* |
* @param src First string to compare. |
* @param dst Second string to compare. |
* |
* @return 0 if the strings are equal, -1 if first is smaller, 1 if second smaller. |
* |
*/ |
int strcmp(const char *src, const char *dst) |
{ |
for (; *src && *dst; src++, dst++) { |
if (*src < *dst) |
return -1; |
if (*src > *dst) |
return 1; |
} |
if (*src == *dst) |
return 0; |
if (!*src) |
return -1; |
return 1; |
} |
/** Compare two NULL terminated strings |
* |
* Do a char-by-char comparison of two NULL terminated strings. |
* The strings are considered equal iff they consist of the same |
* characters on the minimum of their lengths and specified maximal |
* length. |
* |
* @param src First string to compare. |
* @param dst Second string to compare. |
* @param len Maximal length for comparison. |
* |
* @return 0 if the strings are equal, -1 if first is smaller, 1 if second smaller. |
* |
*/ |
int strncmp(const char *src, const char *dst, size_t len) |
{ |
unsigned int i; |
for (i = 0; (*src) && (*dst) && (i < len); src++, dst++, i++) { |
if (*src < *dst) |
return -1; |
if (*src > *dst) |
return 1; |
} |
if (i == len || *src == *dst) |
return 0; |
if (!*src) |
return -1; |
return 1; |
} |
/** Copy NULL terminated string. |
* |
* Copy at most 'len' characters from string 'src' to 'dest'. |
* If 'src' is shorter than 'len', '\0' is inserted behind the |
* last copied character. |
* |
* @param src Source string. |
* @param dest Destination buffer. |
* @param len Size of destination buffer. |
*/ |
void strncpy(char *dest, const char *src, size_t len) |
{ |
unsigned int i; |
for (i = 0; i < len; i++) { |
if (!(dest[i] = src[i])) |
return; |
} |
dest[i-1] = '\0'; |
} |
/** Convert ascii representation to unative_t |
* |
* Supports 0x for hexa & 0 for octal notation. |
//branches/tracing/kernel/generic/src/adt/btree.c |
---|
124,7 → 124,7 |
lnode = leaf_node; |
if (!lnode) { |
if (btree_search(t, key, &lnode)) { |
panic("B-tree %p already contains key %" PRIu64 "\n", t, key); |
panic("B-tree %p already contains key %" PRIu64 ".", t, key); |
} |
} |
224,7 → 224,7 |
lnode = leaf_node; |
if (!lnode) { |
if (!btree_search(t, key, &lnode)) { |
panic("B-tree %p does not contain key %" PRIu64 "\n", t, key); |
panic("B-tree %p does not contain key %" PRIu64 ".", t, key); |
} |
} |
524,7 → 524,7 |
return; |
} |
} |
panic("node %p does not contain key %" PRIu64 "\n", node, key); |
panic("Node %p does not contain key %" PRIu64 ".", node, key); |
} |
/** Remove key and its right subtree pointer from B-tree node. |
551,7 → 551,7 |
return; |
} |
} |
panic("node %p does not contain key %" PRIu64 "\n", node, key); |
panic("Node %p does not contain key %" PRIu64 ".", node, key); |
} |
/** Split full B-tree node and insert new key-value-right-subtree triplet. |
693,7 → 693,7 |
if (subtree == node->subtree[i]) |
return i - (int) (right != false); |
} |
panic("node %p does not contain subtree %p\n", node, subtree); |
panic("Node %p does not contain subtree %p.", node, subtree); |
} |
/** Rotate one key-value-rsubtree triplet from the left sibling to the right sibling. |
//branches/tracing/kernel/generic/src/adt/avl.c |
---|
43,7 → 43,7 |
* |
* Every node has a pointer to its parent which allows insertion of multiple |
* identical keys into the tree. |
* |
* |
* Be careful when using this tree because of the base atribute which is added |
* to every inserted node key. There is no rule in which order nodes with the |
* same key are visited. |
//branches/tracing/kernel/generic/src/adt/hash_table.c |
---|
32,7 → 32,7 |
/** |
* @file |
* @brief Implementation of generic chained hash table. |
* @brief Implementation of generic chained hash table. |
* |
* This file contains implementation of generic chained hash table. |
*/ |
56,13 → 56,15 |
index_t i; |
ASSERT(h); |
ASSERT(op && op->hash && op->compare); |
ASSERT(op); |
ASSERT(op->hash); |
ASSERT(op->compare); |
ASSERT(max_keys > 0); |
h->entry = (link_t *) malloc(m * sizeof(link_t), 0); |
if (!h->entry) { |
panic("cannot allocate memory for hash table\n"); |
} |
if (!h->entry) |
panic("Cannot allocate memory for hash table."); |
memsetb(h->entry, m * sizeof(link_t), 0); |
for (i = 0; i < m; i++) |
82,10 → 84,13 |
void hash_table_insert(hash_table_t *h, unative_t key[], link_t *item) |
{ |
index_t chain; |
ASSERT(item); |
ASSERT(h && h->op && h->op->hash && h->op->compare); |
ASSERT(h); |
ASSERT(h->op); |
ASSERT(h->op->hash); |
ASSERT(h->op->compare); |
chain = h->op->hash(key); |
ASSERT(chain < h->entries); |
103,9 → 108,12 |
{ |
link_t *cur; |
index_t chain; |
ASSERT(h && h->op && h->op->hash && h->op->compare); |
ASSERT(h); |
ASSERT(h->op); |
ASSERT(h->op->hash); |
ASSERT(h->op->compare); |
chain = h->op->hash(key); |
ASSERT(chain < h->entries); |
123,7 → 131,7 |
/** Remove all matching items from hash table. |
* |
* For each removed item, h->remove_callback() is called. |
* For each removed item, h->remove_callback() is called (if not NULL). |
* |
* @param h Hash table. |
* @param key Array of keys that will be compared against items of the hash table. |
133,12 → 141,15 |
{ |
index_t chain; |
link_t *cur; |
ASSERT(h && h->op && h->op->hash && h->op->compare && h->op->remove_callback); |
ASSERT(h); |
ASSERT(h->op); |
ASSERT(h->op->hash); |
ASSERT(h->op->compare); |
ASSERT(keys <= h->max_keys); |
if (keys == h->max_keys) { |
/* |
* All keys are known, hash_table_find() can be used to find the entry. |
*/ |
146,7 → 157,8 |
cur = hash_table_find(h, key); |
if (cur) { |
list_remove(cur); |
h->op->remove_callback(cur); |
if (h->op->remove_callback) |
h->op->remove_callback(cur); |
} |
return; |
} |
164,7 → 176,8 |
cur = cur->prev; |
list_remove(hlp); |
h->op->remove_callback(hlp); |
if (h->op->remove_callback) |
h->op->remove_callback(hlp); |
continue; |
} |
//branches/tracing/kernel/generic/src/mm/slab.c |
---|
129,7 → 129,7 |
static slab_cache_t *slab_extern_cache; |
/** Caches for malloc */ |
static slab_cache_t *malloc_caches[SLAB_MAX_MALLOC_W - SLAB_MIN_MALLOC_W + 1]; |
char *malloc_names[] = { |
static char *malloc_names[] = { |
"malloc-16", |
"malloc-32", |
"malloc-64", |
144,7 → 144,11 |
"malloc-32K", |
"malloc-64K", |
"malloc-128K", |
"malloc-256K" |
"malloc-256K", |
"malloc-512K", |
"malloc-1M", |
"malloc-2M", |
"malloc-4M" |
}; |
/** Slab descriptor */ |
173,7 → 177,7 |
slab_t *slab; |
size_t fsize; |
unsigned int i; |
unsigned int zone = 0; |
count_t zone = 0; |
data = frame_alloc_generic(cache->order, FRAME_KA | flags, &zone); |
if (!data) { |
932,7 → 936,7 |
void *malloc(unsigned int size, int flags) |
{ |
ASSERT(_slab_initialized); |
ASSERT(size && size <= (1 << SLAB_MAX_MALLOC_W)); |
ASSERT(size <= (1 << SLAB_MAX_MALLOC_W)); |
if (size < (1 << SLAB_MIN_MALLOC_W)) |
size = (1 << SLAB_MIN_MALLOC_W); |
//branches/tracing/kernel/generic/src/mm/tlb.c |
---|
173,7 → 173,7 |
tlb_invalidate_pages(asid, page, count); |
break; |
default: |
panic("unknown type (%d)\n", type); |
panic("Unknown type (%d).", type); |
break; |
} |
if (type == TLB_INVL_ALL) |
//branches/tracing/kernel/generic/src/mm/backend_anon.c |
---|
152,7 → 152,7 |
*/ |
page_mapping_insert(AS, addr, frame, as_area_get_flags(area)); |
if (!used_space_insert(area, ALIGN_DOWN(addr, PAGE_SIZE), 1)) |
panic("Could not insert used space.\n"); |
panic("Cannot insert used space."); |
return AS_PF_OK; |
} |
//branches/tracing/kernel/generic/src/mm/as.c |
---|
121,7 → 121,7 |
int rc; |
link_initialize(&as->inactive_as_with_asid_link); |
mutex_initialize(&as->lock, MUTEX_PASSIVE); |
mutex_initialize(&as->lock, MUTEX_PASSIVE); |
rc = as_constructor_arch(as, flags); |
145,8 → 145,12 |
AS_KERNEL = as_create(FLAG_AS_KERNEL); |
if (!AS_KERNEL) |
panic("can't create kernel address space\n"); |
panic("Cannot create kernel address space."); |
/* Make sure the kernel address space |
* reference count never drops to zero. |
*/ |
atomic_set(&AS_KERNEL->refcount, 1); |
} |
/** Create address space. |
175,7 → 179,7 |
#else |
page_table_create(flags); |
#endif |
return as; |
} |
439,8 → 443,8 |
i = (start_free - b) >> PAGE_WIDTH; |
if (!used_space_remove(area, start_free, |
c - i)) |
panic("Could not remove used " |
"space.\n"); |
panic("Cannot remove used " |
"space."); |
} else { |
/* |
* The interval of used space can be |
447,8 → 451,8 |
* completely removed. |
*/ |
if (!used_space_remove(area, b, c)) |
panic("Could not remove used " |
"space.\n"); |
panic("Cannot remove used " |
"space."); |
} |
for (; i < c; i++) { |
768,11 → 772,12 |
* In order for this to work properly, this may copy the data |
* into private anonymous memory (unless it's already there). |
* |
* @param as Address space. |
* @param flags Flags of the area memory. |
* @param address Address withing the area to be changed. |
* @param as Address space. |
* @param flags Flags of the area memory. |
* @param address Address within the area to be changed. |
* |
* @return Zero on success or a value from @ref errno.h on failure. |
* @return Zero on success or a value from @ref errno.h on failure. |
* |
*/ |
int as_area_change_flags(as_t *as, int flags, uintptr_t address) |
{ |
784,7 → 789,7 |
uintptr_t *old_frame; |
index_t frame_idx; |
count_t used_pages; |
/* Flags for the new memory mapping */ |
page_flags = area_flags_to_page_flags(flags); |
798,7 → 803,7 |
return ENOENT; |
} |
if (area->sh_info || area->backend != &anon_backend) { |
if ((area->sh_info) || (area->backend != &anon_backend)) { |
/* Copying shared areas not supported yet */ |
/* Copying non-anonymous memory not supported yet */ |
mutex_unlock(&area->lock); |
869,6 → 874,7 |
*/ |
tlb_invalidate_pages(as->asid, area->base, area->pages); |
/* |
* Invalidate potential software translation caches (e.g. TSB on |
* sparc64). |
1659,7 → 1665,7 |
} |
panic("Inconsistency detected while adding %" PRIc " pages of used " |
"space at %p.\n", count, page); |
"space at %p.", count, page); |
} |
/** Mark portion of address space area as unused. |
1838,7 → 1844,7 |
error: |
panic("Inconsistency detected while removing %" PRIc " pages of used " |
"space from %p.\n", count, page); |
"space from %p.", count, page); |
} |
/** Remove reference to address space area share info. |
//branches/tracing/kernel/generic/src/mm/buddy.c |
---|
46,7 → 46,7 |
#include <macros.h> |
/** Return size needed for the buddy configuration data. */ |
size_t buddy_conf_size(int max_order) |
size_t buddy_conf_size(size_t max_order) |
{ |
return sizeof(buddy_system_t) + (max_order + 1) * sizeof(link_t); |
} |
//branches/tracing/kernel/generic/src/mm/backend_phys.c |
---|
77,7 → 77,7 |
page_mapping_insert(AS, addr, base + (addr - area->base), |
as_area_get_flags(area)); |
if (!used_space_insert(area, ALIGN_DOWN(addr, PAGE_SIZE), 1)) |
panic("Could not insert used space.\n"); |
panic("Cannot insert used space."); |
return AS_PF_OK; |
} |
//branches/tracing/kernel/generic/src/mm/frame.c |
---|
1,6 → 1,7 |
/* |
* Copyright (c) 2001-2005 Jakub Jermar |
* Copyright (c) 2005 Sergey Bondari |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
33,7 → 34,7 |
/** |
* @file |
* @brief Physical frame allocator. |
* @brief Physical frame allocator. |
* |
* This file contains the physical frame allocator and memory zone management. |
* The frame allocator is built on top of the buddy allocator. |
41,16 → 42,6 |
* @see buddy.c |
*/ |
/* |
* Locking order |
* |
* In order to access particular zone, the process must first lock |
* the zones.lock, then lock the zone and then unlock the zones.lock. |
* This insures, that we can fiddle with the zones in runtime without |
* affecting the processes. |
* |
*/ |
#include <arch/types.h> |
#include <mm/frame.h> |
#include <mm/as.h> |
57,7 → 48,6 |
#include <panic.h> |
#include <debug.h> |
#include <adt/list.h> |
#include <synch/spinlock.h> |
#include <synch/mutex.h> |
#include <synch/condvar.h> |
#include <arch/asm.h> |
69,50 → 59,16 |
#include <macros.h> |
#include <config.h> |
typedef struct { |
count_t refcount; /**< tracking of shared frames */ |
uint8_t buddy_order; /**< buddy system block order */ |
link_t buddy_link; /**< link to the next free block inside one |
order */ |
void *parent; /**< If allocated by slab, this points there */ |
} frame_t; |
zones_t zones; |
typedef struct { |
SPINLOCK_DECLARE(lock); /**< this lock protects everything below */ |
pfn_t base; /**< frame_no of the first frame in the frames |
array */ |
count_t count; /**< Size of zone */ |
frame_t *frames; /**< array of frame_t structures in this |
zone */ |
count_t free_count; /**< number of free frame_t structures */ |
count_t busy_count; /**< number of busy frame_t structures */ |
buddy_system_t *buddy_system; /**< buddy system for the zone */ |
int flags; |
} zone_t; |
/* |
* The zoneinfo.lock must be locked when accessing zoneinfo structure. |
* Some of the attributes in zone_t structures are 'read-only' |
*/ |
typedef struct { |
SPINLOCK_DECLARE(lock); |
unsigned int count; |
zone_t *info[ZONES_MAX]; |
} zones_t; |
static zones_t zones; |
/* |
* Synchronization primitives used to sleep when there is no memory |
* available. |
*/ |
mutex_t mem_avail_mtx; |
condvar_t mem_avail_cv; |
unsigned long mem_avail_frames = 0; /**< Number of available frames. */ |
unsigned long mem_avail_gen = 0; /**< Generation counter. */ |
count_t mem_avail_req = 0; /**< Number of frames requested. */ |
count_t mem_avail_gen = 0; /**< Generation counter. */ |
/********************/ |
/* Helper functions */ |
128,13 → 84,12 |
return (index_t) (frame - zone->frames) + zone->base; |
} |
static inline int frame_index_valid(zone_t *zone, index_t index) |
static inline bool frame_index_valid(zone_t *zone, index_t index) |
{ |
return (index < zone->count); |
} |
/** Compute pfn_t from frame_t pointer & zone pointer */ |
static index_t make_frame_index(zone_t *zone, frame_t *frame) |
static inline index_t make_frame_index(zone_t *zone, frame_t *frame) |
{ |
return (frame - zone->frames); |
} |
141,7 → 96,8 |
/** Initialize frame structure. |
* |
* @param frame Frame structure to be initialized. |
* @param frame Frame structure to be initialized. |
* |
*/ |
static void frame_initialize(frame_t *frame) |
{ |
149,153 → 105,145 |
frame->buddy_order = 0; |
} |
/**********************/ |
/* Zoneinfo functions */ |
/**********************/ |
/*******************/ |
/* Zones functions */ |
/*******************/ |
/** Insert-sort zone into zones list. |
* |
* @param newzone New zone to be inserted into zone list. |
* @return Zone number on success, -1 on error. |
* Assume interrupts are disabled and zones lock is |
* locked. |
* |
* @param base Base frame of the newly inserted zone. |
* @param count Number of frames of the newly inserted zone. |
* |
* @return Zone number on success, -1 on error. |
* |
*/ |
static int zones_add_zone(zone_t *newzone) |
static count_t zones_insert_zone(pfn_t base, count_t count) |
{ |
unsigned int i, j; |
ipl_t ipl; |
zone_t *z; |
ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
/* Try to merge */ |
if (zones.count + 1 == ZONES_MAX) { |
printf("Maximum zone count %u exceeded!\n", ZONES_MAX); |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return -1; |
return (count_t) -1; |
} |
count_t i; |
for (i = 0; i < zones.count; i++) { |
/* Check for overflow */ |
z = zones.info[i]; |
if (overlaps(newzone->base, newzone->count, z->base, |
z->count)) { |
/* Check for overlap */ |
if (overlaps(base, count, |
zones.info[i].base, zones.info[i].count)) { |
printf("Zones overlap!\n"); |
return -1; |
return (count_t) -1; |
} |
if (newzone->base < z->base) |
if (base < zones.info[i].base) |
break; |
} |
/* Move other zones up */ |
for (j = i; j < zones.count; j++) |
zones.info[j + 1] = zones.info[j]; |
count_t j; |
for (j = zones.count; j > i; j--) { |
zones.info[j] = zones.info[j - 1]; |
zones.info[j].buddy_system->data = |
(void *) &zones.info[j - 1]; |
} |
zones.info[i] = newzone; |
zones.count++; |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return i; |
} |
/** Try to find a zone where can we find the frame. |
/** Get total available frames. |
* |
* Assume interrupts are disabled. |
* Assume interrupts are disabled and zones lock is |
* locked. |
* |
* @param frame Frame number contained in zone. |
* @param pzone If not null, it is used as zone hint. Zone index is |
* filled into the variable on success. |
* @return Pointer to locked zone containing frame. |
* @return Total number of available frames. |
* |
*/ |
static zone_t *find_zone_and_lock(pfn_t frame, unsigned int *pzone) |
#ifdef CONFIG_DEBUG |
static count_t total_frames_free(void) |
{ |
unsigned int i; |
unsigned int hint = pzone ? *pzone : 0; |
zone_t *z; |
count_t total = 0; |
count_t i; |
for (i = 0; i < zones.count; i++) |
total += zones.info[i].free_count; |
spinlock_lock(&zones.lock); |
return total; |
} |
#endif |
/** Find a zone with a given frames. |
* |
* Assume interrupts are disabled and zones lock is |
* locked. |
* |
* @param frame Frame number contained in zone. |
* @param count Number of frames to look for. |
* @param hint Used as zone hint. |
* |
* @return Zone index or -1 if not found. |
* |
*/ |
count_t find_zone(pfn_t frame, count_t count, count_t hint) |
{ |
if (hint >= zones.count) |
hint = 0; |
i = hint; |
count_t i = hint; |
do { |
z = zones.info[i]; |
spinlock_lock(&z->lock); |
if (z->base <= frame && z->base + z->count > frame) { |
/* Unlock the global lock */ |
spinlock_unlock(&zones.lock); |
if (pzone) |
*pzone = i; |
return z; |
} |
spinlock_unlock(&z->lock); |
if ((zones.info[i].base <= frame) |
&& (zones.info[i].base + zones.info[i].count >= frame + count)) |
return i; |
i++; |
if (i >= zones.count) |
i = 0; |
} while (i != hint); |
spinlock_unlock(&zones.lock); |
return NULL; |
return (count_t) -1; |
} |
/** @return True if zone can allocate specified order */ |
static int zone_can_alloc(zone_t *z, uint8_t order) |
static bool zone_can_alloc(zone_t *zone, uint8_t order) |
{ |
return buddy_system_can_alloc(z->buddy_system, order); |
return (zone_flags_available(zone->flags) |
&& buddy_system_can_alloc(zone->buddy_system, order)); |
} |
/** Find and lock zone that can allocate order frames. |
/** Find a zone that can allocate order frames. |
* |
* Assume interrupts are disabled. |
* Assume interrupts are disabled and zones lock is |
* locked. |
* |
* @param order Size (2^order) of free space we are trying to find. |
* @param flags Required flags of the target zone. |
* @param pzone Pointer to preferred zone or NULL, on return contains |
* zone number. |
* @param order Size (2^order) of free space we are trying to find. |
* @param flags Required flags of the target zone. |
* @param hind Preferred zone. |
* |
*/ |
static zone_t * |
find_free_zone_and_lock(uint8_t order, int flags, unsigned int *pzone) |
static count_t find_free_zone(uint8_t order, zone_flags_t flags, count_t hint) |
{ |
unsigned int i; |
zone_t *z; |
unsigned int hint = pzone ? *pzone : 0; |
/* Mask off flags that are not applicable. */ |
flags &= FRAME_LOW_4_GiB; |
spinlock_lock(&zones.lock); |
if (hint >= zones.count) |
hint = 0; |
i = hint; |
count_t i = hint; |
do { |
z = zones.info[i]; |
spinlock_lock(&z->lock); |
/* |
* Check whether the zone meets the search criteria. |
*/ |
if ((z->flags & flags) == flags) { |
if ((zones.info[i].flags & flags) == flags) { |
/* |
* Check if the zone has 2^order frames area available. |
*/ |
if (zone_can_alloc(z, order)) { |
spinlock_unlock(&zones.lock); |
if (pzone) |
*pzone = i; |
return z; |
} |
if (zone_can_alloc(&zones.info[i], order)) |
return i; |
} |
spinlock_unlock(&z->lock); |
if (++i >= zones.count) |
i++; |
if (i >= zones.count) |
i = 0; |
} while (i != hint); |
spinlock_unlock(&zones.lock); |
return NULL; |
return (count_t) -1; |
} |
/**************************/ |
307,82 → 255,73 |
* Find block that is parent of current list. |
* That means go to lower addresses, until such block is found |
* |
* @param order Order of parent must be different then this |
* parameter!! |
* @param order Order of parent must be different then this |
* parameter!! |
* |
*/ |
static link_t *zone_buddy_find_block(buddy_system_t *b, link_t *child, |
static link_t *zone_buddy_find_block(buddy_system_t *buddy, link_t *child, |
uint8_t order) |
{ |
frame_t *frame; |
zone_t *zone; |
index_t index; |
frame_t *frame = list_get_instance(child, frame_t, buddy_link); |
zone_t *zone = (zone_t *) buddy->data; |
frame = list_get_instance(child, frame_t, buddy_link); |
zone = (zone_t *) b->data; |
index = frame_index(zone, frame); |
index_t index = frame_index(zone, frame); |
do { |
if (zone->frames[index].buddy_order != order) { |
if (zone->frames[index].buddy_order != order) |
return &zone->frames[index].buddy_link; |
} |
} while(index-- > 0); |
} while (index-- > 0); |
return NULL; |
} |
/** Buddy system find_buddy implementation. |
* |
* @param b Buddy system. |
* @param block Block for which buddy should be found. |
* @param buddy Buddy system. |
* @param block Block for which buddy should be found. |
* |
* @return Buddy for given block if found. |
* @return Buddy for given block if found. |
* |
*/ |
static link_t *zone_buddy_find_buddy(buddy_system_t *b, link_t *block) |
static link_t *zone_buddy_find_buddy(buddy_system_t *buddy, link_t *block) |
{ |
frame_t *frame; |
zone_t *zone; |
index_t index; |
bool is_left, is_right; |
frame = list_get_instance(block, frame_t, buddy_link); |
zone = (zone_t *) b->data; |
frame_t *frame = list_get_instance(block, frame_t, buddy_link); |
zone_t *zone = (zone_t *) buddy->data; |
ASSERT(IS_BUDDY_ORDER_OK(frame_index_abs(zone, frame), |
frame->buddy_order)); |
is_left = IS_BUDDY_LEFT_BLOCK_ABS(zone, frame); |
is_right = IS_BUDDY_RIGHT_BLOCK_ABS(zone, frame); |
ASSERT(is_left ^ is_right); |
bool is_left = IS_BUDDY_LEFT_BLOCK_ABS(zone, frame); |
index_t index; |
if (is_left) { |
index = (frame_index(zone, frame)) + |
(1 << frame->buddy_order); |
} else { /* if (is_right) */ |
} else { /* is_right */ |
index = (frame_index(zone, frame)) - |
(1 << frame->buddy_order); |
} |
if (frame_index_valid(zone, index)) { |
if (zone->frames[index].buddy_order == frame->buddy_order && |
zone->frames[index].refcount == 0) { |
if ((zone->frames[index].buddy_order == frame->buddy_order) && |
(zone->frames[index].refcount == 0)) { |
return &zone->frames[index].buddy_link; |
} |
} |
return NULL; |
return NULL; |
} |
/** Buddy system bisect implementation. |
* |
* @param b Buddy system. |
* @param block Block to bisect. |
* @param buddy Buddy system. |
* @param block Block to bisect. |
* |
* @return Right block. |
* @return Right block. |
* |
*/ |
static link_t *zone_buddy_bisect(buddy_system_t *b, link_t *block) |
static link_t *zone_buddy_bisect(buddy_system_t *buddy, link_t *block) |
{ |
frame_t *frame_l, *frame_r; |
frame_l = list_get_instance(block, frame_t, buddy_link); |
frame_r = (frame_l + (1 << (frame_l->buddy_order - 1))); |
frame_t *frame_l = list_get_instance(block, frame_t, buddy_link); |
frame_t *frame_r = (frame_l + (1 << (frame_l->buddy_order - 1))); |
return &frame_r->buddy_link; |
} |
389,75 → 328,68 |
/** Buddy system coalesce implementation. |
* |
* @param b Buddy system. |
* @param block_1 First block. |
* @param block_2 First block's buddy. |
* @param buddy Buddy system. |
* @param block_1 First block. |
* @param block_2 First block's buddy. |
* |
* @return Coalesced block (actually block that represents lower |
* address). |
* @return Coalesced block (actually block that represents lower |
* address). |
* |
*/ |
static link_t *zone_buddy_coalesce(buddy_system_t *b, link_t *block_1, |
link_t *block_2) |
static link_t *zone_buddy_coalesce(buddy_system_t *buddy, link_t *block_1, |
link_t *block_2) |
{ |
frame_t *frame1, *frame2; |
frame_t *frame1 = list_get_instance(block_1, frame_t, buddy_link); |
frame_t *frame2 = list_get_instance(block_2, frame_t, buddy_link); |
frame1 = list_get_instance(block_1, frame_t, buddy_link); |
frame2 = list_get_instance(block_2, frame_t, buddy_link); |
return frame1 < frame2 ? block_1 : block_2; |
return ((frame1 < frame2) ? block_1 : block_2); |
} |
/** Buddy system set_order implementation. |
* |
* @param b Buddy system. |
* @param block Buddy system block. |
* @param order Order to set. |
* @param buddy Buddy system. |
* @param block Buddy system block. |
* @param order Order to set. |
* |
*/ |
static void zone_buddy_set_order(buddy_system_t *b, link_t *block, |
static void zone_buddy_set_order(buddy_system_t *buddy, link_t *block, |
uint8_t order) |
{ |
frame_t *frame; |
frame = list_get_instance(block, frame_t, buddy_link); |
frame->buddy_order = order; |
list_get_instance(block, frame_t, buddy_link)->buddy_order = order; |
} |
/** Buddy system get_order implementation. |
* |
* @param b Buddy system. |
* @param block Buddy system block. |
* @param buddy Buddy system. |
* @param block Buddy system block. |
* |
* @return Order of block. |
* @return Order of block. |
* |
*/ |
static uint8_t zone_buddy_get_order(buddy_system_t *b, link_t *block) |
static uint8_t zone_buddy_get_order(buddy_system_t *buddy, link_t *block) |
{ |
frame_t *frame; |
frame = list_get_instance(block, frame_t, buddy_link); |
return frame->buddy_order; |
return list_get_instance(block, frame_t, buddy_link)->buddy_order; |
} |
/** Buddy system mark_busy implementation. |
* |
* @param b Buddy system. |
* @param block Buddy system block. |
* @param buddy Buddy system. |
* @param block Buddy system block. |
* |
*/ |
static void zone_buddy_mark_busy(buddy_system_t *b, link_t * block) |
static void zone_buddy_mark_busy(buddy_system_t *buddy, link_t * block) |
{ |
frame_t * frame; |
frame = list_get_instance(block, frame_t, buddy_link); |
frame->refcount = 1; |
list_get_instance(block, frame_t, buddy_link)->refcount = 1; |
} |
/** Buddy system mark_available implementation. |
* |
* @param b Buddy system. |
* @param block Buddy system block. |
* @param buddy Buddy system. |
* @param block Buddy system block. |
*/ |
static void zone_buddy_mark_available(buddy_system_t *b, link_t *block) |
static void zone_buddy_mark_available(buddy_system_t *buddy, link_t *block) |
{ |
frame_t *frame; |
frame = list_get_instance(block, frame_t, buddy_link); |
frame->refcount = 0; |
list_get_instance(block, frame_t, buddy_link)->refcount = 0; |
} |
static buddy_system_operations_t zone_buddy_system_operations = { |
477,60 → 409,57 |
/** Allocate frame in particular zone. |
* |
* Assume zone is locked. |
* Assume zone is locked and is available for allocation. |
* Panics if allocation is impossible. |
* |
* @param zone Zone to allocate from. |
* @param order Allocate exactly 2^order frames. |
* @param zone Zone to allocate from. |
* @param order Allocate exactly 2^order frames. |
* |
* @return Frame index in zone. |
* @return Frame index in zone. |
* |
*/ |
static pfn_t zone_frame_alloc(zone_t *zone, uint8_t order) |
{ |
pfn_t v; |
link_t *tmp; |
frame_t *frame; |
ASSERT(zone_flags_available(zone->flags)); |
/* Allocate frames from zone buddy system */ |
tmp = buddy_system_alloc(zone->buddy_system, order); |
link_t *link = buddy_system_alloc(zone->buddy_system, order); |
ASSERT(tmp); |
ASSERT(link); |
/* Update zone information. */ |
zone->free_count -= (1 << order); |
zone->busy_count += (1 << order); |
/* Frame will be actually a first frame of the block. */ |
frame = list_get_instance(tmp, frame_t, buddy_link); |
frame_t *frame = list_get_instance(link, frame_t, buddy_link); |
/* get frame address */ |
v = make_frame_index(zone, frame); |
return v; |
/* Get frame address */ |
return make_frame_index(zone, frame); |
} |
/** Free frame from zone. |
* |
* Assume zone is locked. |
* Assume zone is locked and is available for deallocation. |
* |
* @param zone Pointer to zone from which the frame is to be freed. |
* @param frame_idx Frame index relative to zone. |
* @param zone Pointer to zone from which the frame is to be freed. |
* @param frame_idx Frame index relative to zone. |
* |
*/ |
static void zone_frame_free(zone_t *zone, index_t frame_idx) |
{ |
frame_t *frame; |
uint8_t order; |
frame = &zone->frames[frame_idx]; |
ASSERT(zone_flags_available(zone->flags)); |
/* remember frame order */ |
order = frame->buddy_order; |
frame_t *frame = &zone->frames[frame_idx]; |
/* Remember frame order */ |
uint8_t order = frame->buddy_order; |
ASSERT(frame->refcount); |
if (!--frame->refcount) { |
buddy_system_free(zone->buddy_system, &frame->buddy_link); |
/* Update zone information. */ |
zone->free_count += (1 << order); |
zone->busy_count -= (1 << order); |
547,567 → 476,646 |
/** Mark frame in zone unavailable to allocation. */ |
static void zone_mark_unavailable(zone_t *zone, index_t frame_idx) |
{ |
frame_t *frame; |
link_t *link; |
frame = zone_get_frame(zone, frame_idx); |
ASSERT(zone_flags_available(zone->flags)); |
frame_t *frame = zone_get_frame(zone, frame_idx); |
if (frame->refcount) |
return; |
link_t *link __attribute__ ((unused)); |
link = buddy_system_alloc_block(zone->buddy_system, |
&frame->buddy_link); |
ASSERT(link); |
zone->free_count--; |
mutex_lock(&mem_avail_mtx); |
mem_avail_frames--; |
mutex_unlock(&mem_avail_mtx); |
} |
/** Join two zones. |
/** Merge two zones. |
* |
* Expect zone_t *z to point to space at least zone_conf_size large. |
* Expect buddy to point to space at least zone_conf_size large. |
* Assume z1 & z2 are locked and compatible and zones lock is |
* locked. |
* |
* Assume z1 & z2 are locked. |
* @param z1 First zone to merge. |
* @param z2 Second zone to merge. |
* @param old_z1 Original date of the first zone. |
* @param buddy Merged zone buddy. |
* |
* @param z Target zone structure pointer. |
* @param z1 Zone to merge. |
* @param z2 Zone to merge. |
*/ |
static void _zone_merge(zone_t *z, zone_t *z1, zone_t *z2) |
static void zone_merge_internal(count_t z1, count_t z2, zone_t *old_z1, buddy_system_t *buddy) |
{ |
uint8_t max_order; |
unsigned int i; |
int z2idx; |
pfn_t frame_idx; |
frame_t *frame; |
ASSERT(!overlaps(z1->base, z1->count, z2->base, z2->count)); |
ASSERT(z1->base < z2->base); |
spinlock_initialize(&z->lock, "zone_lock"); |
z->base = z1->base; |
z->count = z2->base + z2->count - z1->base; |
z->flags = z1->flags & z2->flags; |
z->free_count = z1->free_count + z2->free_count; |
z->busy_count = z1->busy_count + z2->busy_count; |
ASSERT(zone_flags_available(zones.info[z1].flags)); |
ASSERT(zone_flags_available(zones.info[z2].flags)); |
ASSERT(zones.info[z1].flags == zones.info[z2].flags); |
ASSERT(zones.info[z1].base < zones.info[z2].base); |
ASSERT(!overlaps(zones.info[z1].base, zones.info[z1].count, |
zones.info[z2].base, zones.info[z2].count)); |
max_order = fnzb(z->count); |
z->buddy_system = (buddy_system_t *) &z[1]; |
buddy_system_create(z->buddy_system, max_order, |
&zone_buddy_system_operations, (void *) z); |
z->frames = (frame_t *)((uint8_t *) z->buddy_system + |
buddy_conf_size(max_order)); |
for (i = 0; i < z->count; i++) { |
/* This marks all frames busy */ |
frame_initialize(&z->frames[i]); |
} |
/* Difference between zone bases */ |
pfn_t base_diff = zones.info[z2].base - zones.info[z1].base; |
zones.info[z1].count = base_diff + zones.info[z2].count; |
zones.info[z1].free_count += zones.info[z2].free_count; |
zones.info[z1].busy_count += zones.info[z2].busy_count; |
zones.info[z1].buddy_system = buddy; |
uint8_t order = fnzb(zones.info[z1].count); |
buddy_system_create(zones.info[z1].buddy_system, order, |
&zone_buddy_system_operations, (void *) &zones.info[z1]); |
zones.info[z1].frames = |
(frame_t *) ((uint8_t *) zones.info[z1].buddy_system |
+ buddy_conf_size(order)); |
/* This marks all frames busy */ |
count_t i; |
for (i = 0; i < zones.info[z1].count; i++) |
frame_initialize(&zones.info[z1].frames[i]); |
/* Copy frames from both zones to preserve full frame orders, |
* parents etc. Set all free frames with refcount=0 to 1, because |
* we add all free frames to buddy allocator later again, clear |
* order to 0. Don't set busy frames with refcount=0, as they |
* parents etc. Set all free frames with refcount = 0 to 1, because |
* we add all free frames to buddy allocator later again, clearing |
* order to 0. Don't set busy frames with refcount = 0, as they |
* will not be reallocated during merge and it would make later |
* problems with allocation/free. |
*/ |
for (i = 0; i < z1->count; i++) |
z->frames[i] = z1->frames[i]; |
for (i = 0; i < z2->count; i++) { |
z2idx = i + (z2->base - z1->base); |
z->frames[z2idx] = z2->frames[i]; |
} |
for (i = 0; i < old_z1->count; i++) |
zones.info[z1].frames[i] = old_z1->frames[i]; |
for (i = 0; i < zones.info[z2].count; i++) |
zones.info[z1].frames[base_diff + i] |
= zones.info[z2].frames[i]; |
i = 0; |
while (i < z->count) { |
if (z->frames[i].refcount) { |
/* skip busy frames */ |
i += 1 << z->frames[i].buddy_order; |
} else { /* Free frames, set refcount=1 */ |
/* All free frames have refcount=0, we need not |
* to check the order */ |
z->frames[i].refcount = 1; |
z->frames[i].buddy_order = 0; |
while (i < zones.info[z1].count) { |
if (zones.info[z1].frames[i].refcount) { |
/* Skip busy frames */ |
i += 1 << zones.info[z1].frames[i].buddy_order; |
} else { |
/* Free frames, set refcount = 1 |
* (all free frames have refcount == 0, we need not |
* to check the order) |
*/ |
zones.info[z1].frames[i].refcount = 1; |
zones.info[z1].frames[i].buddy_order = 0; |
i++; |
} |
} |
/* Add free blocks from the 2 original zones */ |
while (zone_can_alloc(z1, 0)) { |
frame_idx = zone_frame_alloc(z1, 0); |
frame = &z->frames[frame_idx]; |
/* Add free blocks from the original zone z1 */ |
while (zone_can_alloc(old_z1, 0)) { |
/* Allocate from the original zone */ |
pfn_t frame_idx = zone_frame_alloc(old_z1, 0); |
/* Free the frame from the merged zone */ |
frame_t *frame = &zones.info[z1].frames[frame_idx]; |
frame->refcount = 0; |
buddy_system_free(z->buddy_system, &frame->buddy_link); |
buddy_system_free(zones.info[z1].buddy_system, &frame->buddy_link); |
} |
while (zone_can_alloc(z2, 0)) { |
frame_idx = zone_frame_alloc(z2, 0); |
frame = &z->frames[frame_idx + (z2->base - z1->base)]; |
/* Add free blocks from the original zone z2 */ |
while (zone_can_alloc(&zones.info[z2], 0)) { |
/* Allocate from the original zone */ |
pfn_t frame_idx = zone_frame_alloc(&zones.info[z2], 0); |
/* Free the frame from the merged zone */ |
frame_t *frame = &zones.info[z1].frames[base_diff + frame_idx]; |
frame->refcount = 0; |
buddy_system_free(z->buddy_system, &frame->buddy_link); |
buddy_system_free(zones.info[z1].buddy_system, &frame->buddy_link); |
} |
} |
/** Return old configuration frames into the zone. |
* |
* We have several cases |
* - the conf. data is outside of zone -> exit, shall we call frame_free?? |
* - the conf. data was created by zone_create or |
* updated with reduce_region -> free every frame |
* We have two cases: |
* - The configuration data is outside the zone |
* -> do nothing (perhaps call frame_free?) |
* - The configuration data was created by zone_create |
* or updated by reduce_region -> free every frame |
* |
* @param newzone The actual zone where freeing should occur. |
* @param oldzone Pointer to old zone configuration data that should |
* be freed from new zone. |
* @param znum The actual zone where freeing should occur. |
* @param pfn Old zone configuration frame. |
* @param count Old zone frame count. |
* |
*/ |
static void return_config_frames(zone_t *newzone, zone_t *oldzone) |
static void return_config_frames(count_t znum, pfn_t pfn, count_t count) |
{ |
pfn_t pfn; |
frame_t *frame; |
count_t cframes; |
unsigned int i; |
pfn = ADDR2PFN((uintptr_t)KA2PA(oldzone)); |
cframes = SIZE2FRAMES(zone_conf_size(oldzone->count)); |
ASSERT(zone_flags_available(zones.info[znum].flags)); |
if (pfn < newzone->base || pfn >= newzone->base + newzone->count) |
count_t cframes = SIZE2FRAMES(zone_conf_size(count)); |
if ((pfn < zones.info[znum].base) |
|| (pfn >= zones.info[znum].base + zones.info[znum].count)) |
return; |
frame_t *frame __attribute__ ((unused)); |
frame = &newzone->frames[pfn - newzone->base]; |
frame = &zones.info[znum].frames[pfn - zones.info[znum].base]; |
ASSERT(!frame->buddy_order); |
count_t i; |
for (i = 0; i < cframes; i++) { |
newzone->busy_count++; |
zone_frame_free(newzone, pfn+i-newzone->base); |
zones.info[znum].busy_count++; |
zone_frame_free(&zones.info[znum], |
pfn - zones.info[znum].base + i); |
} |
} |
/** Reduce allocated block to count of order 0 frames. |
* |
* The allocated block need 2^order frames of space. Reduce all frames |
* in block to order 0 and free the unneeded frames. This means, that |
* when freeing the previously allocated block starting with frame_idx, |
* The allocated block needs 2^order frames. Reduce all frames |
* in the block to order 0 and free the unneeded frames. This means that |
* when freeing the previously allocated block starting with frame_idx, |
* you have to free every frame. |
* |
* @param zone |
* @param frame_idx Index to block. |
* @param count Allocated space in block. |
* @param znum Zone. |
* @param frame_idx Index the first frame of the block. |
* @param count Allocated frames in block. |
* |
*/ |
static void zone_reduce_region(zone_t *zone, pfn_t frame_idx, count_t count) |
static void zone_reduce_region(count_t znum, pfn_t frame_idx, count_t count) |
{ |
count_t i; |
uint8_t order; |
frame_t *frame; |
ASSERT(zone_flags_available(zones.info[znum].flags)); |
ASSERT(frame_idx + count < zones.info[znum].count); |
ASSERT(frame_idx + count < zone->count); |
order = zone->frames[frame_idx].buddy_order; |
uint8_t order = zones.info[znum].frames[frame_idx].buddy_order; |
ASSERT((count_t) (1 << order) >= count); |
/* Reduce all blocks to order 0 */ |
count_t i; |
for (i = 0; i < (count_t) (1 << order); i++) { |
frame = &zone->frames[i + frame_idx]; |
frame_t *frame = &zones.info[znum].frames[i + frame_idx]; |
frame->buddy_order = 0; |
if (!frame->refcount) |
frame->refcount = 1; |
ASSERT(frame->refcount == 1); |
} |
/* Free unneeded frames */ |
for (i = count; i < (count_t) (1 << order); i++) { |
zone_frame_free(zone, i + frame_idx); |
} |
for (i = count; i < (count_t) (1 << order); i++) |
zone_frame_free(&zones.info[znum], i + frame_idx); |
} |
/** Merge zones z1 and z2. |
* |
* - the zones must be 2 zones with no zone existing in between, |
* which means that z2 = z1+1 |
* The merged zones must be 2 zones with no zone existing in between |
* (which means that z2 = z1 + 1). Both zones must be available zones |
* with the same flags. |
* |
* - When you create a new zone, the frame allocator configuration does |
* not to be 2^order size. Once the allocator is running it is no longer |
* possible, merged configuration data occupies more space :-/ |
* When you create a new zone, the frame allocator configuration does |
* not to be 2^order size. Once the allocator is running it is no longer |
* possible, merged configuration data occupies more space :-/ |
* |
* The function uses |
* |
*/ |
void zone_merge(unsigned int z1, unsigned int z2) |
bool zone_merge(count_t z1, count_t z2) |
{ |
ipl_t ipl; |
zone_t *zone1, *zone2, *newzone; |
unsigned int cframes; |
uint8_t order; |
unsigned int i; |
pfn_t pfn; |
ipl = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
if ((z1 >= zones.count) || (z2 >= zones.count)) |
bool ret = true; |
/* We can join only 2 zones with none existing inbetween, |
* the zones have to be available and with the same |
* set of flags |
*/ |
if ((z1 >= zones.count) || (z2 >= zones.count) |
|| (z2 - z1 != 1) |
|| (!zone_flags_available(zones.info[z1].flags)) |
|| (!zone_flags_available(zones.info[z2].flags)) |
|| (zones.info[z1].flags != zones.info[z2].flags)) { |
ret = false; |
goto errout; |
/* We can join only 2 zones with none existing inbetween */ |
if (z2 - z1 != 1) |
goto errout; |
zone1 = zones.info[z1]; |
zone2 = zones.info[z2]; |
spinlock_lock(&zone1->lock); |
spinlock_lock(&zone2->lock); |
cframes = SIZE2FRAMES(zone_conf_size(zone2->base + zone2->count - |
zone1->base)); |
} |
pfn_t cframes = SIZE2FRAMES(zone_conf_size( |
zones.info[z2].base - zones.info[z1].base |
+ zones.info[z2].count)); |
uint8_t order; |
if (cframes == 1) |
order = 0; |
else |
else |
order = fnzb(cframes - 1) + 1; |
/* Allocate zonedata inside one of the zones */ |
if (zone_can_alloc(zone1, order)) |
pfn = zone1->base + zone_frame_alloc(zone1, order); |
else if (zone_can_alloc(zone2, order)) |
pfn = zone2->base + zone_frame_alloc(zone2, order); |
else |
goto errout2; |
newzone = (zone_t *) PA2KA(PFN2ADDR(pfn)); |
_zone_merge(newzone, zone1, zone2); |
/* Allocate merged zone data inside one of the zones */ |
pfn_t pfn; |
if (zone_can_alloc(&zones.info[z1], order)) { |
pfn = zones.info[z1].base + zone_frame_alloc(&zones.info[z1], order); |
} else if (zone_can_alloc(&zones.info[z2], order)) { |
pfn = zones.info[z2].base + zone_frame_alloc(&zones.info[z2], order); |
} else { |
ret = false; |
goto errout; |
} |
/* Preserve original data from z1 */ |
zone_t old_z1 = zones.info[z1]; |
old_z1.buddy_system->data = (void *) &old_z1; |
/* Do zone merging */ |
buddy_system_t *buddy = (buddy_system_t *) PA2KA(PFN2ADDR(pfn)); |
zone_merge_internal(z1, z2, &old_z1, buddy); |
/* Free unneeded config frames */ |
zone_reduce_region(newzone, pfn - newzone->base, cframes); |
zone_reduce_region(z1, pfn - zones.info[z1].base, cframes); |
/* Subtract zone information from busy frames */ |
newzone->busy_count -= cframes; |
/* Replace existing zones in zoneinfo list */ |
zones.info[z1] = newzone; |
for (i = z2 + 1; i < zones.count; i++) |
zones.info[z1].busy_count -= cframes; |
/* Free old zone information */ |
return_config_frames(z1, |
ADDR2PFN(KA2PA((uintptr_t) old_z1.frames)), old_z1.count); |
return_config_frames(z1, |
ADDR2PFN(KA2PA((uintptr_t) zones.info[z2].frames)), |
zones.info[z2].count); |
/* Move zones down */ |
count_t i; |
for (i = z2 + 1; i < zones.count; i++) { |
zones.info[i - 1] = zones.info[i]; |
zones.info[i - 1].buddy_system->data = |
(void *) &zones.info[i - 1]; |
} |
zones.count--; |
/* Free old zone information */ |
return_config_frames(newzone, zone1); |
return_config_frames(newzone, zone2); |
errout2: |
/* Nobody is allowed to enter to zone, so we are safe |
* to touch the spinlocks last time */ |
spinlock_unlock(&zone1->lock); |
spinlock_unlock(&zone2->lock); |
errout: |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return ret; |
} |
/** Merge all zones into one big zone. |
/** Merge all mergeable zones into one big zone. |
* |
* It is reasonable to do this on systems whose bios reports parts in chunks, |
* so that we could have 1 zone (it's faster). |
* It is reasonable to do this on systems where |
* BIOS reports parts in chunks, so that we could |
* have 1 zone (it's faster). |
* |
*/ |
void zone_merge_all(void) |
{ |
int count = zones.count; |
while (zones.count > 1 && --count) { |
zone_merge(0, 1); |
break; |
count_t i = 0; |
while (i < zones.count) { |
if (!zone_merge(i, i + 1)) |
i++; |
} |
} |
/** Create new frame zone. |
* |
* @param start Physical address of the first frame within the zone. |
* @param count Count of frames in zone. |
* @param z Address of configuration information of zone. |
* @param flags Zone flags. |
* @param zone Zone to construct. |
* @param buddy Address of buddy system configuration information. |
* @param start Physical address of the first frame within the zone. |
* @param count Count of frames in zone. |
* @param flags Zone flags. |
* |
* @return Initialized zone. |
* @return Initialized zone. |
* |
*/ |
static void zone_construct(pfn_t start, count_t count, zone_t *z, int flags) |
static void zone_construct(zone_t *zone, buddy_system_t *buddy, pfn_t start, count_t count, zone_flags_t flags) |
{ |
unsigned int i; |
uint8_t max_order; |
spinlock_initialize(&z->lock, "zone_lock"); |
z->base = start; |
z->count = count; |
/* Mask off flags that are calculated automatically. */ |
flags &= ~FRAME_LOW_4_GiB; |
/* Determine calculated flags. */ |
if (z->base + count < (1ULL << (32 - FRAME_WIDTH))) /* 4 GiB */ |
flags |= FRAME_LOW_4_GiB; |
z->flags = flags; |
z->free_count = count; |
z->busy_count = 0; |
/* |
* Compute order for buddy system, initialize |
*/ |
max_order = fnzb(count); |
z->buddy_system = (buddy_system_t *)&z[1]; |
zone->base = start; |
zone->count = count; |
zone->flags = flags; |
zone->free_count = count; |
zone->busy_count = 0; |
zone->buddy_system = buddy; |
buddy_system_create(z->buddy_system, max_order, |
&zone_buddy_system_operations, (void *) z); |
/* Allocate frames _after_ the conframe */ |
/* Check sizes */ |
z->frames = (frame_t *)((uint8_t *) z->buddy_system + |
buddy_conf_size(max_order)); |
for (i = 0; i < count; i++) { |
frame_initialize(&z->frames[i]); |
} |
/* Stuffing frames */ |
for (i = 0; i < count; i++) { |
z->frames[i].refcount = 0; |
buddy_system_free(z->buddy_system, &z->frames[i].buddy_link); |
} |
if (zone_flags_available(flags)) { |
/* |
* Compute order for buddy system and initialize |
*/ |
uint8_t order = fnzb(count); |
buddy_system_create(zone->buddy_system, order, |
&zone_buddy_system_operations, (void *) zone); |
/* Allocate frames _after_ the confframe */ |
/* Check sizes */ |
zone->frames = (frame_t *) ((uint8_t *) zone->buddy_system + |
buddy_conf_size(order)); |
count_t i; |
for (i = 0; i < count; i++) |
frame_initialize(&zone->frames[i]); |
/* Stuffing frames */ |
for (i = 0; i < count; i++) { |
zone->frames[i].refcount = 0; |
buddy_system_free(zone->buddy_system, &zone->frames[i].buddy_link); |
} |
} else |
zone->frames = NULL; |
} |
/** Compute configuration data size for zone. |
* |
* @param count Size of zone in frames. |
* @return Size of zone configuration info (in bytes). |
* @param count Size of zone in frames. |
* |
* @return Size of zone configuration info (in bytes). |
* |
*/ |
uintptr_t zone_conf_size(count_t count) |
{ |
int size = sizeof(zone_t) + count * sizeof(frame_t); |
int max_order; |
max_order = fnzb(count); |
size += buddy_conf_size(max_order); |
return size; |
return (count * sizeof(frame_t) + buddy_conf_size(fnzb(count))); |
} |
/** Create and add zone to system. |
* |
* @param start First frame number (absolute). |
* @param count Size of zone in frames. |
* @param confframe Where configuration frames are supposed to be. |
* Automatically checks, that we will not disturb the |
* kernel and possibly init. If confframe is given |
* _outside_ this zone, it is expected, that the area is |
* already marked BUSY and big enough to contain |
* zone_conf_size() amount of data. If the confframe is |
* inside the area, the zone free frame information is |
* modified not to include it. |
* @param start First frame number (absolute). |
* @param count Size of zone in frames. |
* @param confframe Where configuration frames are supposed to be. |
* Automatically checks, that we will not disturb the |
* kernel and possibly init. If confframe is given |
* _outside_ this zone, it is expected, that the area is |
* already marked BUSY and big enough to contain |
* zone_conf_size() amount of data. If the confframe is |
* inside the area, the zone free frame information is |
* modified not to include it. |
* |
* @return Zone number or -1 on error. |
* @return Zone number or -1 on error. |
* |
*/ |
int zone_create(pfn_t start, count_t count, pfn_t confframe, int flags) |
count_t zone_create(pfn_t start, count_t count, pfn_t confframe, zone_flags_t flags) |
{ |
zone_t *z; |
uintptr_t addr; |
count_t confcount; |
unsigned int i; |
int znum; |
/* Theoretically we could have here 0, practically make sure |
* nobody tries to do that. If some platform requires, remove |
* the assert |
*/ |
ASSERT(confframe); |
/* If conframe is supposed to be inside our zone, then make sure |
* it does not span kernel & init |
*/ |
confcount = SIZE2FRAMES(zone_conf_size(count)); |
if (confframe >= start && confframe < start + count) { |
for (; confframe < start + count; confframe++) { |
addr = PFN2ADDR(confframe); |
if (overlaps(addr, PFN2ADDR(confcount), |
KA2PA(config.base), config.kernel_size)) |
continue; |
if (overlaps(addr, PFN2ADDR(confcount), |
KA2PA(config.stack_base), config.stack_size)) |
continue; |
bool overlap = false; |
count_t i; |
for (i = 0; i < init.cnt; i++) |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
if (zone_flags_available(flags)) { /* Create available zone */ |
/* Theoretically we could have NULL here, practically make sure |
* nobody tries to do that. If some platform requires, remove |
* the assert |
*/ |
ASSERT(confframe != NULL); |
/* If confframe is supposed to be inside our zone, then make sure |
* it does not span kernel & init |
*/ |
count_t confcount = SIZE2FRAMES(zone_conf_size(count)); |
if ((confframe >= start) && (confframe < start + count)) { |
for (; confframe < start + count; confframe++) { |
uintptr_t addr = PFN2ADDR(confframe); |
if (overlaps(addr, PFN2ADDR(confcount), |
KA2PA(init.tasks[i].addr), |
init.tasks[i].size)) { |
overlap = true; |
break; |
} |
if (overlap) |
continue; |
KA2PA(config.base), config.kernel_size)) |
continue; |
if (overlaps(addr, PFN2ADDR(confcount), |
KA2PA(config.stack_base), config.stack_size)) |
continue; |
bool overlap = false; |
count_t i; |
for (i = 0; i < init.cnt; i++) |
if (overlaps(addr, PFN2ADDR(confcount), |
KA2PA(init.tasks[i].addr), |
init.tasks[i].size)) { |
overlap = true; |
break; |
} |
if (overlap) |
continue; |
break; |
} |
break; |
if (confframe >= start + count) |
panic("Cannot find configuration data for zone."); |
} |
if (confframe >= start + count) |
panic("Cannot find configuration data for zone."); |
count_t znum = zones_insert_zone(start, count); |
if (znum == (count_t) -1) { |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return (count_t) -1; |
} |
buddy_system_t *buddy = (buddy_system_t *) PA2KA(PFN2ADDR(confframe)); |
zone_construct(&zones.info[znum], buddy, start, count, flags); |
/* If confdata in zone, mark as unavailable */ |
if ((confframe >= start) && (confframe < start + count)) { |
count_t i; |
for (i = confframe; i < confframe + confcount; i++) |
zone_mark_unavailable(&zones.info[znum], |
i - zones.info[znum].base); |
} |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return znum; |
} |
z = (zone_t *) PA2KA(PFN2ADDR(confframe)); |
zone_construct(start, count, z, flags); |
znum = zones_add_zone(z); |
if (znum == -1) |
return -1; |
mutex_lock(&mem_avail_mtx); |
mem_avail_frames += count; |
mutex_unlock(&mem_avail_mtx); |
/* If confdata in zone, mark as unavailable */ |
if (confframe >= start && confframe < start + count) |
for (i = confframe; i < confframe + confcount; i++) { |
zone_mark_unavailable(z, i - z->base); |
} |
/* Non-available zone */ |
count_t znum = zones_insert_zone(start, count); |
if (znum == (count_t) -1) { |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return (count_t) -1; |
} |
zone_construct(&zones.info[znum], NULL, start, count, flags); |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return znum; |
} |
/***************************************/ |
/*******************/ |
/* Frame functions */ |
/*******************/ |
/** Set parent of frame. */ |
void frame_set_parent(pfn_t pfn, void *data, unsigned int hint) |
void frame_set_parent(pfn_t pfn, void *data, count_t hint) |
{ |
zone_t *zone = find_zone_and_lock(pfn, &hint); |
ASSERT(zone); |
zone_get_frame(zone, pfn - zone->base)->parent = data; |
spinlock_unlock(&zone->lock); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
count_t znum = find_zone(pfn, 1, hint); |
ASSERT(znum != (count_t) -1); |
zone_get_frame(&zones.info[znum], |
pfn - zones.info[znum].base)->parent = data; |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
} |
void *frame_get_parent(pfn_t pfn, unsigned int hint) |
void *frame_get_parent(pfn_t pfn, count_t hint) |
{ |
zone_t *zone = find_zone_and_lock(pfn, &hint); |
void *res; |
ASSERT(zone); |
res = zone_get_frame(zone, pfn - zone->base)->parent; |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
spinlock_unlock(&zone->lock); |
count_t znum = find_zone(pfn, 1, hint); |
ASSERT(znum != (count_t) -1); |
void *res = zone_get_frame(&zones.info[znum], |
pfn - zones.info[znum].base)->parent; |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return res; |
} |
/** Allocate power-of-two frames of physical memory. |
* |
* @param order Allocate exactly 2^order frames. |
* @param flags Flags for host zone selection and address processing. |
* @param pzone Preferred zone. |
* @param order Allocate exactly 2^order frames. |
* @param flags Flags for host zone selection and address processing. |
* @param pzone Preferred zone. |
* |
* @return Physical address of the allocated frame. |
* @return Physical address of the allocated frame. |
* |
*/ |
void *frame_alloc_generic(uint8_t order, int flags, unsigned int *pzone) |
void *frame_alloc_generic(uint8_t order, frame_flags_t flags, count_t *pzone) |
{ |
count_t size = ((count_t) 1) << order; |
ipl_t ipl; |
int freed; |
pfn_t v; |
zone_t *zone; |
unsigned long gen = 0; |
count_t hint = pzone ? (*pzone) : 0; |
loop: |
ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
/* |
* First, find suitable frame zone. |
*/ |
zone = find_free_zone_and_lock(order, flags, pzone); |
count_t znum = find_free_zone(order, |
FRAME_TO_ZONE_FLAGS(flags), hint); |
/* If no memory, reclaim some slab memory, |
if it does not help, reclaim all */ |
if (!zone && !(flags & FRAME_NO_RECLAIM)) { |
freed = slab_reclaim(0); |
if (freed) |
zone = find_free_zone_and_lock(order, flags, pzone); |
if (!zone) { |
if ((znum == (count_t) -1) && (!(flags & FRAME_NO_RECLAIM))) { |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
count_t freed = slab_reclaim(0); |
ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
if (freed > 0) |
znum = find_free_zone(order, |
FRAME_TO_ZONE_FLAGS(flags), hint); |
if (znum == (count_t) -1) { |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
freed = slab_reclaim(SLAB_RECLAIM_ALL); |
if (freed) |
zone = find_free_zone_and_lock(order, flags, |
pzone); |
ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
if (freed > 0) |
znum = find_free_zone(order, |
FRAME_TO_ZONE_FLAGS(flags), hint); |
} |
} |
if (!zone) { |
/* |
* Sleep until some frames are available again. |
*/ |
if (znum == (count_t) -1) { |
if (flags & FRAME_ATOMIC) { |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
return 0; |
return NULL; |
} |
#ifdef CONFIG_DEBUG |
unsigned long avail; |
mutex_lock(&mem_avail_mtx); |
avail = mem_avail_frames; |
mutex_unlock(&mem_avail_mtx); |
printf("Thread %" PRIu64 " waiting for %u frames, " |
"%u available.\n", THREAD->tid, 1ULL << order, avail); |
count_t avail = total_frames_free(); |
#endif |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
/* |
* Sleep until some frames are available again. |
*/ |
#ifdef CONFIG_DEBUG |
printf("Thread %" PRIu64 " waiting for %" PRIc " frames, " |
"%" PRIc " available.\n", THREAD->tid, size, avail); |
#endif |
mutex_lock(&mem_avail_mtx); |
while ((mem_avail_frames < (1ULL << order)) || |
gen == mem_avail_gen) |
if (mem_avail_req > 0) |
mem_avail_req = min(mem_avail_req, size); |
else |
mem_avail_req = size; |
count_t gen = mem_avail_gen; |
while (gen == mem_avail_gen) |
condvar_wait(&mem_avail_cv, &mem_avail_mtx); |
gen = mem_avail_gen; |
mutex_unlock(&mem_avail_mtx); |
#ifdef CONFIG_DEBUG |
mutex_lock(&mem_avail_mtx); |
avail = mem_avail_frames; |
mutex_unlock(&mem_avail_mtx); |
printf("Thread %" PRIu64 " woken up, %u frames available.\n", |
THREAD->tid, avail); |
printf("Thread %" PRIu64 " woken up.\n", THREAD->tid); |
#endif |
interrupts_restore(ipl); |
goto loop; |
} |
v = zone_frame_alloc(zone, order); |
v += zone->base; |
spinlock_unlock(&zone->lock); |
pfn_t pfn = zone_frame_alloc(&zones.info[znum], order) |
+ zones.info[znum].base; |
mutex_lock(&mem_avail_mtx); |
mem_avail_frames -= (1ULL << order); |
mutex_unlock(&mem_avail_mtx); |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
if (pzone) |
*pzone = znum; |
if (flags & FRAME_KA) |
return (void *)PA2KA(PFN2ADDR(v)); |
return (void *)PFN2ADDR(v); |
return (void *) PA2KA(PFN2ADDR(pfn)); |
return (void *) PFN2ADDR(pfn); |
} |
/** Free a frame. |
* |
* Find respective frame structure for supplied physical frame address. |
* Decrement frame reference count. |
* If it drops to zero, move the frame structure to free list. |
* Decrement frame reference count. If it drops to zero, move the frame |
* structure to free list. |
* |
* @param frame Physical Address of of the frame to be freed. |
* @param frame Physical Address of of the frame to be freed. |
* |
*/ |
void frame_free(uintptr_t frame) |
{ |
ipl_t ipl; |
zone_t *zone; |
pfn_t pfn = ADDR2PFN(frame); |
ipl = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
/* |
* First, find host frame zone for addr. |
*/ |
zone = find_zone_and_lock(pfn, NULL); |
ASSERT(zone); |
pfn_t pfn = ADDR2PFN(frame); |
count_t znum = find_zone(pfn, 1, NULL); |
zone_frame_free(zone, pfn - zone->base); |
ASSERT(znum != (count_t) -1); |
spinlock_unlock(&zone->lock); |
zone_frame_free(&zones.info[znum], pfn - zones.info[znum].base); |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
/* |
* Signal that some memory has been freed. |
*/ |
mutex_lock(&mem_avail_mtx); |
mem_avail_frames++; |
mem_avail_gen++; |
condvar_broadcast(&mem_avail_cv); |
if (mem_avail_req > 0) |
mem_avail_req--; |
if (mem_avail_req == 0) { |
mem_avail_gen++; |
condvar_broadcast(&mem_avail_cv); |
} |
mutex_unlock(&mem_avail_mtx); |
interrupts_restore(ipl); |
} |
/** Add reference to frame. |
1115,26 → 1123,24 |
* Find respective frame structure for supplied PFN and |
* increment frame reference count. |
* |
* @param pfn Frame number of the frame to be freed. |
* @param pfn Frame number of the frame to be freed. |
* |
*/ |
void frame_reference_add(pfn_t pfn) |
{ |
ipl_t ipl; |
zone_t *zone; |
frame_t *frame; |
ipl = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
/* |
* First, find host frame zone for addr. |
*/ |
zone = find_zone_and_lock(pfn, NULL); |
ASSERT(zone); |
count_t znum = find_zone(pfn, 1, NULL); |
frame = &zone->frames[pfn - zone->base]; |
frame->refcount++; |
ASSERT(znum != (count_t) -1); |
spinlock_unlock(&zone->lock); |
zones.info[znum].frames[pfn - zones.info[znum].base].refcount++; |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
} |
1141,18 → 1147,21 |
/** Mark given range unavailable in frame zones. */ |
void frame_mark_unavailable(pfn_t start, count_t count) |
{ |
unsigned int i; |
zone_t *zone; |
unsigned int prefzone = 0; |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
count_t i; |
for (i = 0; i < count; i++) { |
zone = find_zone_and_lock(start + i, &prefzone); |
if (!zone) /* PFN not found */ |
count_t znum = find_zone(start + i, 1, 0); |
if (znum == (count_t) -1) /* PFN not found */ |
continue; |
zone_mark_unavailable(zone, start + i - zone->base); |
spinlock_unlock(&zone->lock); |
zone_mark_unavailable(&zones.info[znum], |
start + i - zones.info[znum].base); |
} |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
} |
/** Initialize physical memory management. */ |
1164,6 → 1173,7 |
mutex_initialize(&mem_avail_mtx, MUTEX_ACTIVE); |
condvar_initialize(&mem_avail_cv); |
} |
/* Tell the architecture to create some memory */ |
frame_arch_init(); |
if (config.cpu_active == 1) { |
1178,35 → 1188,28 |
frame_mark_unavailable(pfn, |
SIZE2FRAMES(init.tasks[i].size)); |
} |
if (ballocs.size) |
frame_mark_unavailable(ADDR2PFN(KA2PA(ballocs.base)), |
SIZE2FRAMES(ballocs.size)); |
/* Black list first frame, as allocating NULL would |
* fail in some places */ |
* fail in some places |
*/ |
frame_mark_unavailable(0, 1); |
} |
} |
/** Return total size of all zones. */ |
uint64_t zone_total_size(void) |
{ |
zone_t *zone = NULL; |
unsigned int i; |
ipl_t ipl; |
uint64_t total = 0; |
ipl = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
for (i = 0; i < zones.count; i++) { |
zone = zones.info[i]; |
spinlock_lock(&zone->lock); |
total += (uint64_t) FRAMES2SIZE(zone->count); |
spinlock_unlock(&zone->lock); |
} |
uint64_t total = 0; |
count_t i; |
for (i = 0; i < zones.count; i++) |
total += (uint64_t) FRAMES2SIZE(zones.info[i].count); |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
1217,18 → 1220,14 |
/** Prints list of zones. */ |
void zone_print_list(void) |
{ |
zone_t *zone = NULL; |
unsigned int i; |
ipl_t ipl; |
#ifdef __32_BITS__ |
printf("# base address free frames busy frames\n"); |
printf("-- ------------ ------------ ------------\n"); |
#ifdef __32_BITS__ |
printf("# base address frames flags free frames busy frames\n"); |
printf("-- ------------ ------------ -------- ------------ ------------\n"); |
#endif |
#ifdef __64_BITS__ |
printf("# base address free frames busy frames\n"); |
printf("-- -------------------- ------------ ------------\n"); |
printf("# base address frames flags free frames busy frames\n"); |
printf("-- -------------------- ------------ -------- ------------ ------------\n"); |
#endif |
/* |
1241,13 → 1240,10 |
* we may end up with inaccurate output (e.g. a zone being skipped from |
* the listing). |
*/ |
for (i = 0; ; i++) { |
uintptr_t base; |
count_t free_count; |
count_t busy_count; |
ipl = interrupts_disable(); |
count_t i; |
for (i = 0;; i++) { |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
if (i >= zones.count) { |
1255,56 → 1251,61 |
interrupts_restore(ipl); |
break; |
} |
zone = zones.info[i]; |
spinlock_lock(&zone->lock); |
base = PFN2ADDR(zone->base); |
free_count = zone->free_count; |
busy_count = zone->busy_count; |
spinlock_unlock(&zone->lock); |
uintptr_t base = PFN2ADDR(zones.info[i].base); |
count_t count = zones.info[i].count; |
zone_flags_t flags = zones.info[i].flags; |
count_t free_count = zones.info[i].free_count; |
count_t busy_count = zones.info[i].busy_count; |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
bool available = zone_flags_available(flags); |
printf("%-2" PRIc, i); |
#ifdef __32_BITS__ |
printf("%-2u %10p %12" PRIc " %12" PRIc "\n", i, base, |
free_count, busy_count); |
printf(" %10p", base); |
#endif |
#ifdef __64_BITS__ |
printf("%-2u %18p %12" PRIc " %12" PRIc "\n", i, base, |
free_count, busy_count); |
printf(" %18p", base); |
#endif |
printf(" %12" PRIc " %c%c%c ", count, |
available ? 'A' : ' ', |
(flags & ZONE_RESERVED) ? 'R' : ' ', |
(flags & ZONE_FIRMWARE) ? 'F' : ' '); |
if (available) |
printf("%12" PRIc " %12" PRIc, |
free_count, busy_count); |
printf("\n"); |
} |
} |
/** Prints zone details. |
* |
* @param num Zone base address or zone number. |
* @param num Zone base address or zone number. |
* |
*/ |
void zone_print_one(unsigned int num) |
void zone_print_one(count_t num) |
{ |
zone_t *zone = NULL; |
ipl_t ipl; |
unsigned int i; |
uintptr_t base; |
count_t count; |
count_t busy_count; |
count_t free_count; |
ipl = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&zones.lock); |
count_t znum = (count_t) -1; |
count_t i; |
for (i = 0; i < zones.count; i++) { |
if ((i == num) || (PFN2ADDR(zones.info[i]->base) == num)) { |
zone = zones.info[i]; |
if ((i == num) || (PFN2ADDR(zones.info[i].base) == num)) { |
znum = i; |
break; |
} |
} |
if (!zone) { |
if (znum == (count_t) -1) { |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
printf("Zone not found.\n"); |
1311,24 → 1312,33 |
return; |
} |
spinlock_lock(&zone->lock); |
base = PFN2ADDR(zone->base); |
count = zone->count; |
busy_count = zone->busy_count; |
free_count = zone->free_count; |
spinlock_unlock(&zone->lock); |
uintptr_t base = PFN2ADDR(zones.info[i].base); |
zone_flags_t flags = zones.info[i].flags; |
count_t count = zones.info[i].count; |
count_t free_count = zones.info[i].free_count; |
count_t busy_count = zones.info[i].busy_count; |
spinlock_unlock(&zones.lock); |
interrupts_restore(ipl); |
bool available = zone_flags_available(flags); |
printf("Zone number: %" PRIc "\n", znum); |
printf("Zone base address: %p\n", base); |
printf("Zone size: %" PRIc " frames (%" PRIs " KiB)\n", count, |
printf("Zone size: %" PRIc " frames (%" PRIs " KiB)\n", count, |
SIZE2KB(FRAMES2SIZE(count))); |
printf("Allocated space: %" PRIc " frames (%" PRIs " KiB)\n", |
busy_count, SIZE2KB(FRAMES2SIZE(busy_count))); |
printf("Available space: %" PRIc " frames (%" PRIs " KiB)\n", |
free_count, SIZE2KB(FRAMES2SIZE(free_count))); |
printf("Zone flags: %c%c%c\n", |
available ? 'A' : ' ', |
(flags & ZONE_RESERVED) ? 'R' : ' ', |
(flags & ZONE_FIRMWARE) ? 'F' : ' '); |
if (available) { |
printf("Allocated space: %" PRIc " frames (%" PRIs " KiB)\n", |
busy_count, SIZE2KB(FRAMES2SIZE(busy_count))); |
printf("Available space: %" PRIc " frames (%" PRIs " KiB)\n", |
free_count, SIZE2KB(FRAMES2SIZE(free_count))); |
} |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/src/mm/backend_elf.c |
---|
129,7 → 129,7 |
page_mapping_insert(AS, addr, frame, |
as_area_get_flags(area)); |
if (!used_space_insert(area, page, 1)) |
panic("Could not insert used space.\n"); |
panic("Cannot insert used space."); |
mutex_unlock(&area->sh_info->lock); |
return AS_PF_OK; |
} |
214,7 → 214,7 |
page_mapping_insert(AS, addr, frame, as_area_get_flags(area)); |
if (!used_space_insert(area, page, 1)) |
panic("Could not insert used space.\n"); |
panic("Cannot insert used space."); |
return AS_PF_OK; |
} |
//branches/tracing/kernel/generic/src/syscall/syscall.c |
---|
32,9 → 32,9 |
/** |
* @file |
* @brief Syscall table and syscall wrappers. |
* @brief Syscall table and syscall wrappers. |
*/ |
#include <syscall/syscall.h> |
#include <proc/thread.h> |
#include <proc/task.h> |
41,72 → 41,31 |
#include <proc/program.h> |
#include <mm/as.h> |
#include <print.h> |
#include <putchar.h> |
#include <errno.h> |
#include <arch.h> |
#include <debug.h> |
#include <ddi/device.h> |
#include <ipc/sysipc.h> |
#include <synch/futex.h> |
#include <synch/smc.h> |
#include <ddi/ddi.h> |
#include <ipc/event.h> |
#include <security/cap.h> |
#include <syscall/copy.h> |
#include <sysinfo/sysinfo.h> |
#include <console/console.h> |
#include <udebug/udebug.h> |
/** Print using kernel facility |
* |
* Print to kernel log. |
* |
*/ |
static unative_t sys_klog(int fd, const void * buf, size_t count) |
{ |
size_t i; |
char *data; |
int rc; |
if (count > PAGE_SIZE) |
return ELIMIT; |
if (count > 0) { |
data = (char *) malloc(count, 0); |
if (!data) |
return ENOMEM; |
rc = copy_from_uspace(data, buf, count); |
if (rc) { |
free(data); |
return rc; |
} |
for (i = 0; i < count; i++) |
putchar(data[i]); |
free(data); |
} else |
klog_update(); |
return count; |
} |
/** Tell kernel to get keyboard/console access again */ |
static unative_t sys_debug_enable_console(void) |
{ |
arch_grab_console(); |
return 0; |
} |
/** Dispatch system call */ |
unative_t syscall_handler(unative_t a1, unative_t a2, unative_t a3, |
unative_t a4, unative_t a5, unative_t a6, unative_t id) |
{ |
unative_t rc; |
#ifdef CONFIG_UDEBUG |
THREAD->udebug.uspace_state = NULL; |
udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, 0, false); |
#endif |
if (id < SYSCALL_END) { |
if (id < SYSCALL_END) { |
rc = syscall_table[id](a1, a2, a3, a4, a5, a6); |
} else { |
printf("Task %" PRIu64": Unknown syscall %#" PRIxn, TASK->taskid, id); |
113,13 → 72,13 |
task_kill(TASK->taskid); |
thread_exit(); |
} |
if (THREAD->interrupted) |
thread_exit(); |
#ifdef CONFIG_UDEBUG |
udebug_syscall_event(a1, a2, a3, a4, a5, a6, id, rc, true); |
/* |
* Stopping point needed for tasks that only invoke non-blocking |
* system calls. |
126,7 → 85,8 |
*/ |
udebug_stoppable_begin(); |
udebug_stoppable_end(); |
#endif |
#endif |
return rc; |
} |
140,6 → 100,7 |
(syshandler_t) sys_thread_get_id, |
(syshandler_t) sys_task_get_id, |
(syshandler_t) sys_task_set_name, |
(syshandler_t) sys_program_spawn_loader, |
/* Synchronization related syscalls. */ |
161,10 → 122,14 |
(syshandler_t) sys_ipc_answer_fast, |
(syshandler_t) sys_ipc_answer_slow, |
(syshandler_t) sys_ipc_forward_fast, |
(syshandler_t) sys_ipc_forward_slow, |
(syshandler_t) sys_ipc_wait_for_call, |
(syshandler_t) sys_ipc_hangup, |
(syshandler_t) sys_ipc_register_irq, |
(syshandler_t) sys_ipc_unregister_irq, |
/* Event notification syscalls. */ |
(syshandler_t) sys_event_subscribe, |
/* Capabilities related syscalls. */ |
(syshandler_t) sys_cap_grant, |
171,6 → 136,7 |
(syshandler_t) sys_cap_revoke, |
/* DDI related syscalls. */ |
(syshandler_t) sys_device_assign_devno, |
(syshandler_t) sys_physmem_map, |
(syshandler_t) sys_iospace_enable, |
(syshandler_t) sys_preempt_control, |
181,7 → 147,8 |
/* Debug calls */ |
(syshandler_t) sys_debug_enable_console, |
(syshandler_t) sys_debug_disable_console, |
(syshandler_t) sys_ipc_connect_kbox |
}; |
//branches/tracing/kernel/generic/src/ipc/event.c |
---|
0,0 → 1,155 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
* @{ |
*/ |
/** |
* @file |
* @brief Kernel event notifications. |
*/ |
#include <ipc/event.h> |
#include <ipc/event_types.h> |
#include <mm/slab.h> |
#include <arch/types.h> |
#include <synch/spinlock.h> |
#include <console/console.h> |
#include <memstr.h> |
#include <errno.h> |
#include <arch.h> |
/** |
* The events array. |
* Arranging the events in this two-dimensional array should decrease the |
* likelyhood of cacheline ping-pong. |
*/ |
static event_t events[EVENT_END]; |
/** Initialize kernel events. */ |
void event_init(void) |
{ |
unsigned int i; |
for (i = 0; i < EVENT_END; i++) { |
spinlock_initialize(&events[i].lock, "event.lock"); |
events[i].answerbox = NULL; |
events[i].counter = 0; |
events[i].method = 0; |
} |
} |
static int |
event_subscribe(event_type_t evno, unative_t method, answerbox_t *answerbox) |
{ |
if (evno >= EVENT_END) |
return ELIMIT; |
spinlock_lock(&events[evno].lock); |
int res; |
if (events[evno].answerbox == NULL) { |
events[evno].answerbox = answerbox; |
events[evno].method = method; |
events[evno].counter = 0; |
res = EOK; |
} else |
res = EEXISTS; |
spinlock_unlock(&events[evno].lock); |
return res; |
} |
unative_t sys_event_subscribe(unative_t evno, unative_t method) |
{ |
return (unative_t) event_subscribe((event_type_t) evno, (unative_t) |
method, &TASK->answerbox); |
} |
bool event_is_subscribed(event_type_t evno) |
{ |
bool res; |
ASSERT(evno < EVENT_END); |
spinlock_lock(&events[evno].lock); |
res = events[evno].answerbox != NULL; |
spinlock_unlock(&events[evno].lock); |
return res; |
} |
void event_cleanup_answerbox(answerbox_t *answerbox) |
{ |
unsigned int i; |
for (i = 0; i < EVENT_END; i++) { |
spinlock_lock(&events[i].lock); |
if (events[i].answerbox == answerbox) { |
events[i].answerbox = NULL; |
events[i].counter = 0; |
events[i].method = 0; |
} |
spinlock_unlock(&events[i].lock); |
} |
} |
void |
event_notify(event_type_t evno, unative_t a1, unative_t a2, unative_t a3, |
unative_t a4, unative_t a5) |
{ |
ASSERT(evno < EVENT_END); |
spinlock_lock(&events[evno].lock); |
if (events[evno].answerbox != NULL) { |
call_t *call = ipc_call_alloc(FRAME_ATOMIC); |
if (call) { |
call->flags |= IPC_CALL_NOTIF; |
call->priv = ++events[evno].counter; |
IPC_SET_METHOD(call->data, events[evno].method); |
IPC_SET_ARG1(call->data, a1); |
IPC_SET_ARG2(call->data, a2); |
IPC_SET_ARG3(call->data, a3); |
IPC_SET_ARG4(call->data, a4); |
IPC_SET_ARG5(call->data, a5); |
spinlock_lock(&events[evno].answerbox->irq_lock); |
list_append(&call->link, &events[evno].answerbox->irq_notifs); |
spinlock_unlock(&events[evno].answerbox->irq_lock); |
waitq_wakeup(&events[evno].answerbox->wq, WAKEUP_FIRST); |
} |
} |
spinlock_unlock(&events[evno].lock); |
} |
/** @} |
*/ |
//branches/tracing/kernel/generic/src/ipc/kbox.c |
---|
42,6 → 42,7 |
#include <debug.h> |
#include <udebug/udebug_ipc.h> |
#include <ipc/kbox.h> |
#include <print.h> |
void ipc_kbox_cleanup(void) |
{ |
128,8 → 129,8 |
ipl = interrupts_disable(); |
spinlock_lock(&TASK->lock); |
spinlock_lock(&TASK->answerbox.lock); |
if (list_empty(&TASK->answerbox.connected_phones)) { |
spinlock_lock(&TASK->kb.box.lock); |
if (list_empty(&TASK->kb.box.connected_phones)) { |
/* |
* Last phone has been disconnected. Detach this thread so it |
* gets freed and signal to the caller. |
150,7 → 151,7 |
*last = false; |
} |
spinlock_unlock(&TASK->answerbox.lock); |
spinlock_unlock(&TASK->kb.box.lock); |
spinlock_unlock(&TASK->lock); |
interrupts_restore(ipl); |
} |
//branches/tracing/kernel/generic/src/ipc/sysipc.c |
---|
332,7 → 332,7 |
src = IPC_GET_ARG1(call->data); |
size = IPC_GET_ARG2(call->data); |
if ((size <= 0) || (size > DATA_XFER_LIMIT)) |
if (size > DATA_XFER_LIMIT) |
return ELIMIT; |
call->buffer = (uint8_t *) malloc(size, 0); |
618,7 → 618,8 |
return (unative_t) call; |
} |
/** Forward a received call to another destination. |
/** Forward a received call to another destination - common code for both the |
* fast and the slow version. |
* |
* @param callid Hash of the call to forward. |
* @param phoneid Phone handle to use for forwarding. |
625,23 → 626,21 |
* @param method New method to use for the forwarded call. |
* @param arg1 New value of the first argument for the forwarded call. |
* @param arg2 New value of the second argument for the forwarded call. |
* @param arg3 New value of the third argument for the forwarded call. |
* @param arg4 New value of the fourth argument for the forwarded call. |
* @param arg5 New value of the fifth argument for the forwarded call. |
* @param mode Flags that specify mode of the forward operation. |
* @param slow If true, arg3, arg4 and arg5 are considered. Otherwise |
* the function considers only the fast version arguments: |
* i.e. arg1 and arg2. |
* |
* @return Return 0 on succes, otherwise return an error code. |
* |
* In case the original method is a system method, ARG1, ARG2 and ARG3 are |
* overwritten in the forwarded message with the new method and the new arg1 and |
* arg2, respectively. Otherwise the METHOD, ARG1 and ARG2 are rewritten with |
* the new method, arg1 and arg2, respectively. Also note there is a set of |
* immutable methods, for which the new method and argument is not set and |
* these values are ignored. |
* |
* Warning: When implementing support for changing additional payload |
* arguments, make sure that ARG5 is not rewritten for certain |
* system IPC |
* Warning: Make sure that ARG5 is not rewritten for certain system IPC |
*/ |
unative_t sys_ipc_forward_fast(unative_t callid, unative_t phoneid, |
unative_t method, unative_t arg1, unative_t arg2, int mode) |
static unative_t sys_ipc_forward_common(unative_t callid, unative_t phoneid, |
unative_t method, unative_t arg1, unative_t arg2, unative_t arg3, |
unative_t arg4, unative_t arg5, int mode, bool slow) |
{ |
call_t *call; |
phone_t *phone; |
649,7 → 648,7 |
call = get_call(callid); |
if (!call) |
return ENOENT; |
call->flags |= IPC_CALL_FORWARDED; |
GET_CHECK_PHONE(phone, phoneid, { |
666,8 → 665,8 |
/* |
* Userspace is not allowed to change method of system methods on |
* forward, allow changing ARG1, ARG2 and ARG3 by means of method, |
* arg1 and arg2. |
* forward, allow changing ARG1, ARG2, ARG3 and ARG4 by means of method, |
* arg1, arg2 and arg3. |
* If the method is immutable, don't change anything. |
*/ |
if (!method_is_immutable(IPC_GET_METHOD(call->data))) { |
678,10 → 677,22 |
IPC_SET_ARG1(call->data, method); |
IPC_SET_ARG2(call->data, arg1); |
IPC_SET_ARG3(call->data, arg2); |
if (slow) { |
IPC_SET_ARG4(call->data, arg3); |
/* |
* For system methods we deliberately don't |
* overwrite ARG5. |
*/ |
} |
} else { |
IPC_SET_METHOD(call->data, method); |
IPC_SET_ARG1(call->data, arg1); |
IPC_SET_ARG2(call->data, arg2); |
if (slow) { |
IPC_SET_ARG3(call->data, arg3); |
IPC_SET_ARG4(call->data, arg4); |
IPC_SET_ARG5(call->data, arg5); |
} |
} |
} |
688,6 → 699,64 |
return ipc_forward(call, phone, &TASK->answerbox, mode); |
} |
/** Forward a received call to another destination - fast version. |
* |
* @param callid Hash of the call to forward. |
* @param phoneid Phone handle to use for forwarding. |
* @param method New method to use for the forwarded call. |
* @param arg1 New value of the first argument for the forwarded call. |
* @param arg2 New value of the second argument for the forwarded call. |
* @param mode Flags that specify mode of the forward operation. |
* |
* @return Return 0 on succes, otherwise return an error code. |
* |
* In case the original method is a system method, ARG1, ARG2 and ARG3 are |
* overwritten in the forwarded message with the new method and the new |
* arg1 and arg2, respectively. Otherwise the METHOD, ARG1 and ARG2 are |
* rewritten with the new method, arg1 and arg2, respectively. Also note there |
* is a set of immutable methods, for which the new method and arguments are not |
* set and these values are ignored. |
*/ |
unative_t sys_ipc_forward_fast(unative_t callid, unative_t phoneid, |
unative_t method, unative_t arg1, unative_t arg2, int mode) |
{ |
return sys_ipc_forward_common(callid, phoneid, method, arg1, arg2, 0, 0, |
0, mode, false); |
} |
/** Forward a received call to another destination - slow version. |
* |
* @param callid Hash of the call to forward. |
* @param phoneid Phone handle to use for forwarding. |
* @param data Userspace address of the new IPC data. |
* @param mode Flags that specify mode of the forward operation. |
* |
* @return Return 0 on succes, otherwise return an error code. |
* |
* This function is the slow verision of the sys_ipc_forward_fast interface. |
* It can copy all five new arguments and the new method from the userspace. |
* It naturally extends the functionality of the fast version. For system |
* methods, it additionally stores the new value of arg3 to ARG4. For non-system |
* methods, it additionally stores the new value of arg3, arg4 and arg5, |
* respectively, to ARG3, ARG4 and ARG5, respectively. |
*/ |
unative_t sys_ipc_forward_slow(unative_t callid, unative_t phoneid, |
ipc_data_t *data, int mode) |
{ |
ipc_data_t newdata; |
int rc; |
rc = copy_from_uspace(&newdata.args, &data->args, |
sizeof(newdata.args)); |
if (rc != 0) |
return (unative_t) rc; |
return sys_ipc_forward_common(callid, phoneid, |
IPC_GET_METHOD(newdata), IPC_GET_ARG1(newdata), |
IPC_GET_ARG2(newdata), IPC_GET_ARG3(newdata), |
IPC_GET_ARG4(newdata), IPC_GET_ARG5(newdata), mode, true); |
} |
/** Answer an IPC call - fast version. |
* |
* This function can handle only two return arguments of payload, but is faster |
867,6 → 936,21 |
/* Include phone address('id') of the caller in the request, |
* copy whole call->data, not only call->data.args */ |
if (STRUCT_TO_USPACE(calldata, &call->data)) { |
/* |
* The callee will not receive this call and no one else has |
* a chance to answer it. Reply with the EPARTY error code. |
*/ |
ipc_data_t saved_data; |
int saveddata = 0; |
if (answer_need_old(call)) { |
memcpy(&saved_data, &call->data, sizeof(call->data)); |
saveddata = 1; |
} |
IPC_SET_RETVAL(call->data, EPARTY); |
(void) answer_preprocess(call, saveddata ? &saved_data : NULL); |
ipc_answer(&TASK->answerbox, call); |
return 0; |
} |
return (unative_t)call; |
//branches/tracing/kernel/generic/src/ipc/ipc.c |
---|
44,6 → 44,7 |
#include <synch/synch.h> |
#include <ipc/ipc.h> |
#include <ipc/kbox.h> |
#include <ipc/event.h> |
#include <errno.h> |
#include <mm/slab.h> |
#include <arch.h> |
50,7 → 51,6 |
#include <proc/task.h> |
#include <memstr.h> |
#include <debug.h> |
#include <print.h> |
#include <console/console.h> |
#include <proc/thread.h> |
526,6 → 526,9 |
for (i = 0; i < IPC_MAX_PHONES; i++) |
ipc_phone_hangup(&TASK->phones[i]); |
/* Unsubscribe from any event notifications. */ |
event_cleanup_answerbox(&TASK->answerbox); |
/* Disconnect all connected irqs */ |
ipc_irq_cleanup(&TASK->answerbox); |
//branches/tracing/kernel/generic/src/ipc/irq.c |
---|
44,8 → 44,28 |
* - ARG1: payload modified by a 'top-half' handler |
* - ARG2: payload modified by a 'top-half' handler |
* - ARG3: payload modified by a 'top-half' handler |
* - ARG4: payload modified by a 'top-half' handler |
* - ARG5: payload modified by a 'top-half' handler |
* - in_phone_hash: interrupt counter (may be needed to assure correct order |
* in multithreaded drivers) |
* |
* Note on synchronization for ipc_irq_register(), ipc_irq_unregister(), |
* ipc_irq_cleanup() and IRQ handlers: |
* |
* By always taking all of the uspace IRQ hash table lock, IRQ structure lock |
* and answerbox lock, we can rule out race conditions between the |
* registration functions and also the cleanup function. Thus the observer can |
* either see the IRQ structure present in both the hash table and the |
* answerbox list or absent in both. Views in which the IRQ structure would be |
* linked in the hash table but not in the answerbox list, or vice versa, are |
* not possible. |
* |
* By always taking the hash table lock and the IRQ structure lock, we can |
* rule out a scenario in which we would free up an IRQ structure, which is |
* still referenced by, for example, an IRQ handler. The locking scheme forces |
* us to lock the IRQ structure only after any progressing IRQs on that |
* structure are finished. Because we hold the hash table lock, we prevent new |
* IRQs from taking new references to the IRQ structure. |
*/ |
#include <arch.h> |
58,78 → 78,8 |
#include <console/console.h> |
#include <print.h> |
/** Execute code associated with IRQ notification. |
/** Free the top-half pseudocode. |
* |
* @param call Notification call. |
* @param code Top-half pseudocode. |
*/ |
static void code_execute(call_t *call, irq_code_t *code) |
{ |
unsigned int i; |
unative_t dstval = 0; |
if (!code) |
return; |
for (i = 0; i < code->cmdcount; i++) { |
switch (code->cmds[i].cmd) { |
case CMD_MEM_READ_1: |
dstval = *((uint8_t *) code->cmds[i].addr); |
break; |
case CMD_MEM_READ_2: |
dstval = *((uint16_t *) code->cmds[i].addr); |
break; |
case CMD_MEM_READ_4: |
dstval = *((uint32_t *) code->cmds[i].addr); |
break; |
case CMD_MEM_READ_8: |
dstval = *((uint64_t *) code->cmds[i].addr); |
break; |
case CMD_MEM_WRITE_1: |
*((uint8_t *) code->cmds[i].addr) = code->cmds[i].value; |
break; |
case CMD_MEM_WRITE_2: |
*((uint16_t *) code->cmds[i].addr) = |
code->cmds[i].value; |
break; |
case CMD_MEM_WRITE_4: |
*((uint32_t *) code->cmds[i].addr) = |
code->cmds[i].value; |
break; |
case CMD_MEM_WRITE_8: |
*((uint64_t *) code->cmds[i].addr) = |
code->cmds[i].value; |
break; |
#if defined(ia32) || defined(amd64) || defined(ia64) |
case CMD_PORT_READ_1: |
dstval = inb((long) code->cmds[i].addr); |
break; |
case CMD_PORT_WRITE_1: |
outb((long) code->cmds[i].addr, code->cmds[i].value); |
break; |
#endif |
#if defined(ia64) && defined(SKI) |
case CMD_IA64_GETCHAR: |
dstval = _getc(&ski_uconsole); |
break; |
#endif |
#if defined(ppc32) |
case CMD_PPC32_GETCHAR: |
dstval = cuda_get_scancode(); |
break; |
#endif |
default: |
break; |
} |
if (code->cmds[i].dstarg && code->cmds[i].dstarg < |
IPC_CALL_LEN) { |
call->data.args[code->cmds[i].dstarg] = dstval; |
} |
} |
} |
/** Free top-half pseudocode. |
* |
* @param code Pointer to the top-half pseudocode. |
*/ |
static void code_free(irq_code_t *code) |
140,7 → 90,7 |
} |
} |
/** Copy top-half pseudocode from userspace into the kernel. |
/** Copy the top-half pseudocode from userspace into the kernel. |
* |
* @param ucode Userspace address of the top-half pseudocode. |
* |
176,47 → 126,16 |
return code; |
} |
/** Unregister task from IRQ notification. |
* |
* @param box Answerbox associated with the notification. |
* @param inr IRQ number. |
* @param devno Device number. |
*/ |
void ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno) |
{ |
ipl_t ipl; |
irq_t *irq; |
ipl = interrupts_disable(); |
irq = irq_find_and_lock(inr, devno); |
if (irq) { |
if (irq->notif_cfg.answerbox == box) { |
code_free(irq->notif_cfg.code); |
irq->notif_cfg.notify = false; |
irq->notif_cfg.answerbox = NULL; |
irq->notif_cfg.code = NULL; |
irq->notif_cfg.method = 0; |
irq->notif_cfg.counter = 0; |
spinlock_lock(&box->irq_lock); |
list_remove(&irq->notif_cfg.link); |
spinlock_unlock(&box->irq_lock); |
spinlock_unlock(&irq->lock); |
} |
} |
interrupts_restore(ipl); |
} |
/** Register an answerbox as a receiving end for IRQ notifications. |
* |
* @param box Receiving answerbox. |
* @param inr IRQ number. |
* @param devno Device number. |
* @param method Method to be associated with the notification. |
* @param ucode Uspace pointer to top-half pseudocode. |
* @param box Receiving answerbox. |
* @param inr IRQ number. |
* @param devno Device number. |
* @param method Method to be associated with the notification. |
* @param ucode Uspace pointer to top-half pseudocode. |
* |
* @return EBADMEM, ENOENT or EEXISTS on failure or 0 on success. |
* @return EBADMEM, ENOENT or EEXISTS on failure or 0 on success. |
* |
*/ |
int ipc_irq_register(answerbox_t *box, inr_t inr, devno_t devno, |
unative_t method, irq_code_t *ucode) |
224,7 → 143,12 |
ipl_t ipl; |
irq_code_t *code; |
irq_t *irq; |
link_t *hlp; |
unative_t key[] = { |
(unative_t) inr, |
(unative_t) devno |
}; |
if (ucode) { |
code = code_from_uspace(ucode); |
if (!code) |
232,36 → 156,177 |
} else { |
code = NULL; |
} |
/* |
* Allocate and populate the IRQ structure. |
*/ |
irq = malloc(sizeof(irq_t), 0); |
irq_initialize(irq); |
irq->devno = devno; |
irq->inr = inr; |
irq->claim = ipc_irq_top_half_claim; |
irq->handler = ipc_irq_top_half_handler; |
irq->notif_cfg.notify = true; |
irq->notif_cfg.answerbox = box; |
irq->notif_cfg.method = method; |
irq->notif_cfg.code = code; |
irq->notif_cfg.counter = 0; |
/* |
* Enlist the IRQ structure in the uspace IRQ hash table and the |
* answerbox's list. |
*/ |
ipl = interrupts_disable(); |
irq = irq_find_and_lock(inr, devno); |
if (!irq) { |
interrupts_restore(ipl); |
spinlock_lock(&irq_uspace_hash_table_lock); |
hlp = hash_table_find(&irq_uspace_hash_table, key); |
if (hlp) { |
irq_t *hirq __attribute__((unused)) |
= hash_table_get_instance(hlp, irq_t, link); |
/* hirq is locked */ |
spinlock_unlock(&hirq->lock); |
code_free(code); |
return ENOENT; |
} |
if (irq->notif_cfg.answerbox) { |
spinlock_unlock(&irq->lock); |
spinlock_unlock(&irq_uspace_hash_table_lock); |
free(irq); |
interrupts_restore(ipl); |
code_free(code); |
return EEXISTS; |
} |
irq->notif_cfg.notify = true; |
irq->notif_cfg.answerbox = box; |
irq->notif_cfg.method = method; |
irq->notif_cfg.code = code; |
irq->notif_cfg.counter = 0; |
spinlock_lock(&irq->lock); /* Not really necessary, but paranoid */ |
spinlock_lock(&box->irq_lock); |
hash_table_insert(&irq_uspace_hash_table, key, &irq->link); |
list_append(&irq->notif_cfg.link, &box->irq_head); |
spinlock_unlock(&box->irq_lock); |
spinlock_unlock(&irq->lock); |
spinlock_unlock(&irq_uspace_hash_table_lock); |
interrupts_restore(ipl); |
return EOK; |
} |
/** Unregister task from IRQ notification. |
* |
* @param box Answerbox associated with the notification. |
* @param inr IRQ number. |
* @param devno Device number. |
*/ |
int ipc_irq_unregister(answerbox_t *box, inr_t inr, devno_t devno) |
{ |
ipl_t ipl; |
unative_t key[] = { |
(unative_t) inr, |
(unative_t) devno |
}; |
link_t *lnk; |
irq_t *irq; |
ipl = interrupts_disable(); |
spinlock_lock(&irq_uspace_hash_table_lock); |
lnk = hash_table_find(&irq_uspace_hash_table, key); |
if (!lnk) { |
spinlock_unlock(&irq_uspace_hash_table_lock); |
interrupts_restore(ipl); |
return ENOENT; |
} |
irq = hash_table_get_instance(lnk, irq_t, link); |
/* irq is locked */ |
spinlock_lock(&box->irq_lock); |
ASSERT(irq->notif_cfg.answerbox == box); |
/* Free up the pseudo code and associated structures. */ |
code_free(irq->notif_cfg.code); |
/* Remove the IRQ from the answerbox's list. */ |
list_remove(&irq->notif_cfg.link); |
/* |
* We need to drop the IRQ lock now because hash_table_remove() will try |
* to reacquire it. That basically violates the natural locking order, |
* but a deadlock in hash_table_remove() is prevented by the fact that |
* we already held the IRQ lock and didn't drop the hash table lock in |
* the meantime. |
*/ |
spinlock_unlock(&irq->lock); |
/* Remove the IRQ from the uspace IRQ hash table. */ |
hash_table_remove(&irq_uspace_hash_table, key, 2); |
spinlock_unlock(&irq_uspace_hash_table_lock); |
spinlock_unlock(&box->irq_lock); |
/* Free up the IRQ structure. */ |
free(irq); |
interrupts_restore(ipl); |
return EOK; |
} |
return 0; |
/** Disconnect all IRQ notifications from an answerbox. |
* |
* This function is effective because the answerbox contains |
* list of all irq_t structures that are registered to |
* send notifications to it. |
* |
* @param box Answerbox for which we want to carry out the cleanup. |
*/ |
void ipc_irq_cleanup(answerbox_t *box) |
{ |
ipl_t ipl; |
loop: |
ipl = interrupts_disable(); |
spinlock_lock(&irq_uspace_hash_table_lock); |
spinlock_lock(&box->irq_lock); |
while (box->irq_head.next != &box->irq_head) { |
link_t *cur = box->irq_head.next; |
irq_t *irq; |
DEADLOCK_PROBE_INIT(p_irqlock); |
unative_t key[2]; |
irq = list_get_instance(cur, irq_t, notif_cfg.link); |
if (!spinlock_trylock(&irq->lock)) { |
/* |
* Avoid deadlock by trying again. |
*/ |
spinlock_unlock(&box->irq_lock); |
spinlock_unlock(&irq_uspace_hash_table_lock); |
interrupts_restore(ipl); |
DEADLOCK_PROBE(p_irqlock, DEADLOCK_THRESHOLD); |
goto loop; |
} |
key[0] = irq->inr; |
key[1] = irq->devno; |
ASSERT(irq->notif_cfg.answerbox == box); |
/* Unlist from the answerbox. */ |
list_remove(&irq->notif_cfg.link); |
/* Free up the pseudo code and associated structures. */ |
code_free(irq->notif_cfg.code); |
/* |
* We need to drop the IRQ lock now because hash_table_remove() |
* will try to reacquire it. That basically violates the natural |
* locking order, but a deadlock in hash_table_remove() is |
* prevented by the fact that we already held the IRQ lock and |
* didn't drop the hash table lock in the meantime. |
*/ |
spinlock_unlock(&irq->lock); |
/* Remove from the hash table. */ |
hash_table_remove(&irq_uspace_hash_table, key, 2); |
free(irq); |
} |
spinlock_unlock(&box->irq_lock); |
spinlock_unlock(&irq_uspace_hash_table_lock); |
interrupts_restore(ipl); |
} |
/** Add a call to the proper answerbox queue. |
280,125 → 345,158 |
waitq_wakeup(&irq->notif_cfg.answerbox->wq, WAKEUP_FIRST); |
} |
/** Send notification message. |
/** Apply the top-half pseudo code to find out whether to accept the IRQ or not. |
* |
* @param irq IRQ structure. |
* @param a1 Driver-specific payload argument. |
* @param a2 Driver-specific payload argument. |
* @param a3 Driver-specific payload argument. |
* @param a4 Driver-specific payload argument. |
* @param a5 Driver-specific payload argument. |
* |
* @return IRQ_ACCEPT if the interrupt is accepted by the |
* pseudocode. IRQ_DECLINE otherwise. |
*/ |
void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3, |
unative_t a4, unative_t a5) |
irq_ownership_t ipc_irq_top_half_claim(irq_t *irq) |
{ |
call_t *call; |
unsigned int i; |
unative_t dstval; |
irq_code_t *code = irq->notif_cfg.code; |
unative_t *scratch = irq->notif_cfg.scratch; |
spinlock_lock(&irq->lock); |
if (irq->notif_cfg.answerbox) { |
call = ipc_call_alloc(FRAME_ATOMIC); |
if (!call) { |
spinlock_unlock(&irq->lock); |
return; |
if (!irq->notif_cfg.notify) |
return IRQ_DECLINE; |
if (!code) |
return IRQ_DECLINE; |
for (i = 0; i < code->cmdcount; i++) { |
unsigned int srcarg = code->cmds[i].srcarg; |
unsigned int dstarg = code->cmds[i].dstarg; |
if (srcarg >= IPC_CALL_LEN) |
break; |
if (dstarg >= IPC_CALL_LEN) |
break; |
switch (code->cmds[i].cmd) { |
case CMD_PIO_READ_8: |
dstval = pio_read_8((ioport8_t *) code->cmds[i].addr); |
if (dstarg) |
scratch[dstarg] = dstval; |
break; |
case CMD_PIO_READ_16: |
dstval = pio_read_16((ioport16_t *) code->cmds[i].addr); |
if (dstarg) |
scratch[dstarg] = dstval; |
break; |
case CMD_PIO_READ_32: |
dstval = pio_read_32((ioport32_t *) code->cmds[i].addr); |
if (dstarg) |
scratch[dstarg] = dstval; |
break; |
case CMD_PIO_WRITE_8: |
pio_write_8((ioport8_t *) code->cmds[i].addr, |
(uint8_t) code->cmds[i].value); |
break; |
case CMD_PIO_WRITE_16: |
pio_write_16((ioport16_t *) code->cmds[i].addr, |
(uint16_t) code->cmds[i].value); |
break; |
case CMD_PIO_WRITE_32: |
pio_write_32((ioport32_t *) code->cmds[i].addr, |
(uint32_t) code->cmds[i].value); |
break; |
case CMD_BTEST: |
if (srcarg && dstarg) { |
dstval = scratch[srcarg] & code->cmds[i].value; |
scratch[dstarg] = dstval; |
} |
break; |
case CMD_PREDICATE: |
if (srcarg && !scratch[srcarg]) { |
i += code->cmds[i].value; |
continue; |
} |
break; |
case CMD_ACCEPT: |
return IRQ_ACCEPT; |
break; |
case CMD_DECLINE: |
default: |
return IRQ_DECLINE; |
} |
call->flags |= IPC_CALL_NOTIF; |
IPC_SET_METHOD(call->data, irq->notif_cfg.method); |
IPC_SET_ARG1(call->data, a1); |
IPC_SET_ARG2(call->data, a2); |
IPC_SET_ARG3(call->data, a3); |
IPC_SET_ARG4(call->data, a4); |
IPC_SET_ARG5(call->data, a5); |
/* Put a counter to the message */ |
call->priv = ++irq->notif_cfg.counter; |
send_call(irq, call); |
} |
spinlock_unlock(&irq->lock); |
return IRQ_DECLINE; |
} |
/** Notify a task that an IRQ had occurred. |
/* IRQ top-half handler. |
* |
* We expect interrupts to be disabled and the irq->lock already held. |
* |
* @param irq IRQ structure. |
*/ |
void ipc_irq_send_notif(irq_t *irq) |
void ipc_irq_top_half_handler(irq_t *irq) |
{ |
call_t *call; |
ASSERT(irq); |
if (irq->notif_cfg.answerbox) { |
call_t *call; |
call = ipc_call_alloc(FRAME_ATOMIC); |
if (!call) { |
if (!call) |
return; |
} |
call->flags |= IPC_CALL_NOTIF; |
/* Put a counter to the message */ |
call->priv = ++irq->notif_cfg.counter; |
/* Set up args */ |
IPC_SET_METHOD(call->data, irq->notif_cfg.method); |
IPC_SET_ARG1(call->data, irq->notif_cfg.scratch[1]); |
IPC_SET_ARG2(call->data, irq->notif_cfg.scratch[2]); |
IPC_SET_ARG3(call->data, irq->notif_cfg.scratch[3]); |
IPC_SET_ARG4(call->data, irq->notif_cfg.scratch[4]); |
IPC_SET_ARG5(call->data, irq->notif_cfg.scratch[5]); |
/* Execute code to handle irq */ |
code_execute(call, irq->notif_cfg.code); |
send_call(irq, call); |
} |
} |
/** Disconnect all IRQ notifications from an answerbox. |
/** Send notification message. |
* |
* This function is effective because the answerbox contains |
* list of all irq_t structures that are registered to |
* send notifications to it. |
* |
* @param box Answerbox for which we want to carry out the cleanup. |
* @param irq IRQ structure. |
* @param a1 Driver-specific payload argument. |
* @param a2 Driver-specific payload argument. |
* @param a3 Driver-specific payload argument. |
* @param a4 Driver-specific payload argument. |
* @param a5 Driver-specific payload argument. |
*/ |
void ipc_irq_cleanup(answerbox_t *box) |
void ipc_irq_send_msg(irq_t *irq, unative_t a1, unative_t a2, unative_t a3, |
unative_t a4, unative_t a5) |
{ |
ipl_t ipl; |
loop: |
ipl = interrupts_disable(); |
spinlock_lock(&box->irq_lock); |
while (box->irq_head.next != &box->irq_head) { |
link_t *cur = box->irq_head.next; |
irq_t *irq; |
DEADLOCK_PROBE_INIT(p_irqlock); |
irq = list_get_instance(cur, irq_t, notif_cfg.link); |
if (!spinlock_trylock(&irq->lock)) { |
/* |
* Avoid deadlock by trying again. |
*/ |
spinlock_unlock(&box->irq_lock); |
interrupts_restore(ipl); |
DEADLOCK_PROBE(p_irqlock, DEADLOCK_THRESHOLD); |
goto loop; |
call_t *call; |
spinlock_lock(&irq->lock); |
if (irq->notif_cfg.answerbox) { |
call = ipc_call_alloc(FRAME_ATOMIC); |
if (!call) { |
spinlock_unlock(&irq->lock); |
return; |
} |
call->flags |= IPC_CALL_NOTIF; |
/* Put a counter to the message */ |
call->priv = ++irq->notif_cfg.counter; |
IPC_SET_METHOD(call->data, irq->notif_cfg.method); |
IPC_SET_ARG1(call->data, a1); |
IPC_SET_ARG2(call->data, a2); |
IPC_SET_ARG3(call->data, a3); |
IPC_SET_ARG4(call->data, a4); |
IPC_SET_ARG5(call->data, a5); |
ASSERT(irq->notif_cfg.answerbox == box); |
list_remove(&irq->notif_cfg.link); |
/* |
* Don't forget to free any top-half pseudocode. |
*/ |
code_free(irq->notif_cfg.code); |
irq->notif_cfg.notify = false; |
irq->notif_cfg.answerbox = NULL; |
irq->notif_cfg.code = NULL; |
irq->notif_cfg.method = 0; |
irq->notif_cfg.counter = 0; |
spinlock_unlock(&irq->lock); |
send_call(irq, call); |
} |
spinlock_unlock(&box->irq_lock); |
interrupts_restore(ipl); |
spinlock_unlock(&irq->lock); |
} |
/** @} |
//branches/tracing/kernel/generic/src/udebug/udebug.c |
---|
41,6 → 41,7 |
#include <debug.h> |
#include <udebug/udebug.h> |
#include <errno.h> |
#include <print.h> |
#include <arch.h> |
//branches/tracing/kernel/generic/src/udebug/udebug_ops.c |
---|
44,6 → 44,7 |
#include <proc/thread.h> |
#include <arch.h> |
#include <errno.h> |
#include <print.h> |
#include <syscall/copy.h> |
#include <ipc/ipc.h> |
#include <udebug/udebug.h> |
//branches/tracing/kernel/Makefile |
---|
30,23 → 30,28 |
## Include configuration |
# |
-include ../version |
-include Makefile.config |
include ../version |
-include ../Makefile.config |
-include ../config.defs |
INCLUDES = generic/include |
OPTIMIZATION = 3 |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
## Common compiler flags |
# |
DEFS = -D$(ARCH) -DARCH=\"$(ARCH)\" -DRELEASE=\"$(RELEASE)\" "-DNAME=\"$(NAME)\"" \ |
-DKERNEL |
DEFS = -DKERNEL -DRELEASE=$(RELEASE) "-DNAME=$(NAME)" |
GCC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) \ |
GCC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros ../config.h \ |
-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32 -finput-charset=UTF-8 \ |
-fno-builtin -Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes -Werror \ |
-nostdlib -nostdinc -pipe |
ICC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) \ |
ICC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros ../config.h \ |
-fno-builtin -Wall -Wmissing-prototypes -Werror \ |
-nostdlib -nostdinc \ |
-wd170 |
58,15 → 63,7 |
LFLAGS = -M |
AFLAGS = |
ifdef REVISION |
DEFS += "-DREVISION=\"$(REVISION)\"" |
endif |
ifdef TIMESTAMP |
DEFS += "-DTIMESTAMP=\"$(TIMESTAMP)\"" |
endif |
-include arch/$(ARCH)/Makefile.inc |
-include arch/$(KARCH)/Makefile.inc |
-include genarch/Makefile.inc |
## The at-sign |
84,88 → 81,6 |
# |
SYMTAB_SECTION=".section symtab.data, \"a\", $(ATSIGN)progbits;" |
## Setup kernel configuration |
# |
ifeq ($(CONFIG_DEBUG),y) |
DEFS += -DCONFIG_DEBUG |
endif |
ifeq ($(CONFIG_EDEBUG),y) |
DEFS += -DCONFIG_EDEBUG |
endif |
ifeq ($(CONFIG_DEBUG_SPINLOCK),y) |
DEFS += -DCONFIG_DEBUG_SPINLOCK |
endif |
ifeq ($(CONFIG_DEBUG_AS_WATCHPOINT),y) |
DEFS += -DCONFIG_DEBUG_AS_WATCHPOINT |
endif |
ifeq ($(CONFIG_FPU_LAZY),y) |
DEFS += -DCONFIG_FPU_LAZY |
endif |
ifeq ($(CONFIG_DEBUG_ALLREGS),y) |
DEFS += -DCONFIG_DEBUG_ALLREGS |
endif |
ifeq ($(CONFIG_VHPT),y) |
DEFS += -DCONFIG_VHPT |
endif |
ifeq ($(CONFIG_TSB),y) |
DEFS += -DCONFIG_TSB |
endif |
ifeq ($(CONFIG_Z8530),y) |
DEFS += -DCONFIG_Z8530 |
endif |
ifeq ($(CONFIG_NS16550),y) |
DEFS += -DCONFIG_NS16550 |
endif |
ifeq ($(CONFIG_I8042_INTERRUPT_DRIVEN),y) |
DEFS += -DCONFIG_I8042_INTERRUPT_DRIVEN |
endif |
ifeq ($(CONFIG_NS16550_INTERRUPT_DRIVEN),y) |
DEFS += -DCONFIG_NS16550_INTERRUPT_DRIVEN |
endif |
ifeq ($(CONFIG_IOSAPIC),y) |
DEFS += -DCONFIG_IOSAPIC |
endif |
ifeq ($(CONFIG_VIRT_IDX_DCACHE),y) |
DEFS += -DCONFIG_VIRT_IDX_DCACHE |
endif |
ifeq ($(CONFIG_FB),y) |
ifeq ($(ARCH),ia32) |
DEFS += -DCONFIG_VESA_WIDTH=$(CONFIG_VESA_WIDTH) |
DEFS += -DCONFIG_VESA_HEIGHT=$(CONFIG_VESA_HEIGHT) |
DEFS += -DCONFIG_VESA_BPP=$(CONFIG_VESA_BPP) |
endif |
ifeq ($(ARCH),amd64) |
DEFS += -DCONFIG_VESA_WIDTH=$(CONFIG_VESA_WIDTH) |
DEFS += -DCONFIG_VESA_HEIGHT=$(CONFIG_VESA_HEIGHT) |
DEFS += -DCONFIG_VESA_BPP=$(CONFIG_VESA_BPP) |
endif |
ifeq ($(ARCH),ia32xen) |
DEFS += -DCONFIG_VESA_WIDTH=$(CONFIG_VESA_WIDTH) |
DEFS += -DCONFIG_VESA_HEIGHT=$(CONFIG_VESA_HEIGHT) |
DEFS += -DCONFIG_VESA_BPP=$(CONFIG_VESA_BPP) |
endif |
endif |
ifeq ($(CONFIG_UDEBUG),y) |
DEFS += -DCONFIG_UDEBUG |
endif |
## Simple detection for the type of the host system |
# |
HOST = $(shell uname) |
190,6 → 105,7 |
OBJDUMP = $(BINUTILS_PREFIX)objdump |
LIBDIR = /usr/lib |
CFLAGS = $(GCC_CFLAGS) |
DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS) |
endif |
ifeq ($(COMPILER),icc_native) |
201,6 → 117,7 |
OBJDUMP = objdump |
LIBDIR = /usr/lib |
CFLAGS = $(ICC_CFLAGS) |
DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS) |
endif |
ifeq ($(COMPILER),suncc_native) |
212,6 → 129,8 |
OBJDUMP = $(BINUTILS_PREFIX)objdump |
LIBDIR = /usr/lib |
CFLAGS = $(SUNCC_CFLAGS) |
DEFS += $(CONFIG_DEFS) |
DEPEND_DEFS = $(DEFS) |
endif |
ifeq ($(COMPILER),gcc_cross) |
223,6 → 142,7 |
OBJDUMP = $(TOOLCHAIN_DIR)/bin/$(TARGET)-objdump |
LIBDIR = $(TOOLCHAIN_DIR)/lib |
CFLAGS = $(GCC_CFLAGS) |
DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS) |
endif |
## Generic kernel sources |
236,12 → 156,11 |
generic/src/adt/list.c \ |
generic/src/console/chardev.c \ |
generic/src/console/console.c \ |
generic/src/console/kconsole.c \ |
generic/src/console/cmd.c \ |
generic/src/cpu/cpu.c \ |
generic/src/ddi/ddi.c \ |
generic/src/ddi/irq.c \ |
generic/src/ddi/device.c \ |
generic/src/debug/symtab.c \ |
generic/src/interrupt/interrupt.c \ |
generic/src/main/main.c \ |
generic/src/main/kinit.c \ |
268,16 → 187,14 |
generic/src/lib/func.c \ |
generic/src/lib/memstr.c \ |
generic/src/lib/sort.c \ |
generic/src/lib/string.c \ |
generic/src/lib/elf.c \ |
generic/src/lib/rd.c \ |
generic/src/printf/printf_core.c \ |
generic/src/printf/printf.c \ |
generic/src/printf/sprintf.c \ |
generic/src/printf/snprintf.c \ |
generic/src/printf/vprintf.c \ |
generic/src/printf/vsprintf.c \ |
generic/src/printf/vsnprintf.c \ |
generic/src/debug/symtab.c \ |
generic/src/time/clock.c \ |
generic/src/time/timeout.c \ |
generic/src/time/delay.c \ |
296,9 → 213,19 |
generic/src/ipc/sysipc.c \ |
generic/src/ipc/ipcrsc.c \ |
generic/src/ipc/irq.c \ |
generic/src/ipc/event.c \ |
generic/src/security/cap.c \ |
generic/src/sysinfo/sysinfo.c |
## Kernel console support |
# |
ifeq ($(CONFIG_KCONSOLE),y) |
GENERIC_SOURCES += \ |
generic/src/console/kconsole.c \ |
generic/src/console/cmd.c |
endif |
## Udebug interface sources |
# |
315,7 → 242,6 |
# |
ifeq ($(CONFIG_TEST),y) |
DEFS += -DCONFIG_TEST |
CFLAGS += -Itest/ |
GENERIC_SOURCES += \ |
test/test.c \ |
322,17 → 248,12 |
test/atomic/atomic1.c \ |
test/btree/btree1.c \ |
test/avltree/avltree1.c \ |
test/debug/mips1.c \ |
test/fault/fault1.c \ |
test/fpu/fpu1.c \ |
test/fpu/sse1.c \ |
test/fpu/mips2.c \ |
test/mm/falloc1.c \ |
test/mm/falloc2.c \ |
test/mm/mapping1.c \ |
test/mm/slab1.c \ |
test/mm/slab2.c \ |
test/mm/purge1.c \ |
test/synch/rwlock1.c \ |
test/synch/rwlock2.c \ |
test/synch/rwlock3.c \ |
341,8 → 262,63 |
test/synch/semaphore1.c \ |
test/synch/semaphore2.c \ |
test/print/print1.c \ |
test/print/print2.c \ |
test/print/print3.c \ |
test/print/print4.c \ |
test/thread/thread1.c \ |
test/sysinfo/sysinfo1.c |
ifeq ($(KARCH),mips32) |
GENERIC_SOURCES += test/debug/mips1.c |
else |
GENERIC_SOURCES += test/debug/mips1_skip.c |
endif |
ifeq ($(KARCH),ia64) |
GENERIC_SOURCES += test/mm/purge1.c |
else |
GENERIC_SOURCES += test/mm/purge1_skip.c |
endif |
ifeq ($(CONFIG_FPU),y) |
ifeq ($(KARCH),ia32) |
TEST_FPU1 = y |
TEST_SSE1 = y |
GENERIC_SOURCES += test/fpu/fpu1_x86.c |
endif |
ifeq ($(KARCH),amd64) |
TEST_FPU1 = y |
TEST_SSE1 = y |
GENERIC_SOURCES += test/fpu/fpu1_x86.c |
endif |
ifeq ($(KARCH),ia64) |
TEST_FPU1 = y |
GENERIC_SOURCES += test/fpu/fpu1_ia64.c |
endif |
ifeq ($(KARCH),mips32) |
TEST_MIPS2 = y |
endif |
endif |
ifneq ($(TEST_FPU1),y) |
GENERIC_SOURCES += test/fpu/fpu1_skip.c |
endif |
ifeq ($(TEST_SSE1),y) |
GENERIC_SOURCES += test/fpu/sse1.c |
else |
GENERIC_SOURCES += test/fpu/sse1_skip.c |
endif |
ifeq ($(TEST_MIPS2),y) |
GENERIC_SOURCES += test/fpu/mips2.c |
else |
GENERIC_SOURCES += test/fpu/mips2_skip.c |
endif |
endif |
GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES))) |
349,25 → 325,24 |
ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES))) |
GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES))) |
.PHONY: all build config distclean clean archlinks depend disasm |
ifeq ($(CONFIG_SYMTAB),y) |
SYMTAB_OBJECTS := generic/src/debug/real_map.o |
else |
SYMTAB_OBJECTS := |
endif |
all: |
../tools/config.py kernel.config default $(ARCH) $(COMPILER) $(CONFIG_DEBUG) $(MACHINE) |
.PHONY: all build clean archlinks depend disasm |
all: ../Makefile.config ../config.h ../config.defs |
-rm Makefile.depend |
$(MAKE) -C . build |
build: kernel.bin disasm |
config: |
-rm Makefile.depend |
../tools/config.py kernel.config |
-include Makefile.depend |
distclean: clean |
-rm Makefile.config |
clean: |
-rm -f kernel.bin kernel.raw kernel.map kernel.map.pre kernel.objdump kernel.disasm generic/src/debug/real_map.bin Makefile.depend* generic/include/arch generic/include/genarch arch/$(ARCH)/_link.ld |
-rm -f kernel.bin kernel.raw kernel.map kernel.map.pre kernel.objdump kernel.disasm generic/src/debug/real_map.bin Makefile.depend* generic/include/arch generic/include/genarch arch/$(KARCH)/_link.ld |
find generic/src/ arch/*/src/ genarch/src/ test/ -name '*.o' -follow -exec rm \{\} \; |
for arch in arch/* ; do \ |
[ -e $$arch/_link.ld ] && rm $$arch/_link.ld 2>/dev/null ; \ |
374,24 → 349,24 |
done ; exit 0 |
archlinks: |
ln -sfn ../../arch/$(ARCH)/include/ generic/include/arch |
ln -sfn ../../arch/$(KARCH)/include/ generic/include/arch |
ln -sfn ../../genarch/include/ generic/include/genarch |
depend: archlinks |
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(ARCH_SOURCES) $(GENARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null |
-makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(ARCH_SOURCES) $(GENARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null |
arch/$(ARCH)/_link.ld: arch/$(ARCH)/_link.ld.in |
arch/$(KARCH)/_link.ld: arch/$(KARCH)/_link.ld.in |
$(GCC) $(DEFS) $(GCC_CFLAGS) -D__ASM__ -D__LINKER__ -E -x c $< | grep -v "^\#" > $@ |
generic/src/debug/real_map.bin: depend arch/$(ARCH)/_link.ld $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) |
generic/src/debug/real_map.bin: depend arch/$(KARCH)/_link.ld $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) |
echo $(SYMTAB_SECTION) | $(AS) $(AFLAGS) -o generic/src/debug/empty_map.o |
$(LD) -T arch/$(ARCH)/_link.ld $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) generic/src/debug/empty_map.o -o $@ -Map kernel.map.pre |
$(LD) -T arch/$(KARCH)/_link.ld $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) generic/src/debug/empty_map.o -o $@ -Map kernel.map.pre |
$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > kernel.objdump |
tools/genmap.py kernel.map.pre kernel.objdump generic/src/debug/real_map.bin |
# Do it once again, this time to get correct even the symbols |
# on architectures, that have bss after symtab |
echo $(SYMTAB_SECTION)" .incbin \"$@\"" | $(AS) $(AFLAGS) -o generic/src/debug/sizeok_map.o |
$(LD) -T arch/$(ARCH)/_link.ld $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) generic/src/debug/sizeok_map.o -o $@ -Map kernel.map.pre |
$(LD) -T arch/$(KARCH)/_link.ld $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) generic/src/debug/sizeok_map.o -o $@ -Map kernel.map.pre |
$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > kernel.objdump |
tools/genmap.py kernel.map.pre kernel.objdump generic/src/debug/real_map.bin |
398,8 → 373,8 |
generic/src/debug/real_map.o: generic/src/debug/real_map.bin |
echo $(SYMTAB_SECTION)" .incbin \"$<\"" | $(AS) $(AFLAGS) -o $@ |
kernel.raw: depend arch/$(ARCH)/_link.ld $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) generic/src/debug/real_map.o |
$(LD) -T arch/$(ARCH)/_link.ld $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) generic/src/debug/real_map.o -o $@ -Map kernel.map |
kernel.raw: depend arch/$(KARCH)/_link.ld $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(SYMTAB_OBJECTS) |
$(LD) -T arch/$(KARCH)/_link.ld $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(SYMTAB_OBJECTS) -o $@ -Map kernel.map |
kernel.bin: kernel.raw |
$(OBJCOPY) -O $(BFD) kernel.raw kernel.bin |
//branches/tracing/kernel/arch/ppc64/_link.ld.in |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/memstr.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/arg.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/atomic.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/arch.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/proc/task.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/proc/thread.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/boot/boot.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/faddr.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/asm.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/mm/frame.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/mm/page.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/mm/asid.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/mm/tlb.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/mm/as.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/context.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/debug.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/barrier.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/cpu.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/drivers/pic.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/asm/regname.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/context_offset.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/interrupt.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/fpu_context.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/exception.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/cycle.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/byteorder.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/cpuid.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/types.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/include/elf.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/Makefile.inc |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/ddi/ddi.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/asm.S |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/proc/scheduler.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/boot/boot.S |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/context.S |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/debug/panic.s |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/cpu/cpu.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/mm/as.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/mm/frame.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/mm/page.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/mm/tlb.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/dummy.s |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/interrupt.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/ppc64.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/drivers/pic.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/exception.S |
---|
File deleted |
//branches/tracing/kernel/arch/ppc64/src/fpu_context.S |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/context.S |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/debug |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/cpu |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/ia32xen.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/bios |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/pm.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/delay.s |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/smp/apic.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/smp/mps.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/smp/smp.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/smp/ipi.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/ddi |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/boot/boot.S |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/proc/task.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/proc/thread.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/proc/scheduler.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/debugger.c |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/mm/page.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/mm/tlb.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/mm/as.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/mm/frame.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/userspace.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/atomic.S |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/interrupt.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/drivers/xconsole.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/src/fpu_context.c |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/src/asm.S |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/_link.ld.in |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/barrier.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/debug.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/cpu.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/drivers/xconsole.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/context_offset.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/interrupt.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/fpu_context.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/cycle.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/byteorder.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/types.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/cpuid.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/elf.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/bios |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/memstr.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/smp |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/arg.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/ddi |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/pm.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/atomic.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/arch.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/proc |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/faddr.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/asm.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/hypercall.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/mm/frame.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/mm/page.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/mm/asid.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/mm/tlb.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/mm/as.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32xen/include/debugger.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/include/context.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/ia32xen/Makefile.inc |
---|
File deleted |
//branches/tracing/kernel/arch/sparc64/_link.ld.in |
---|
1,8 → 1,8 |
/** SPARC64 linker script |
* |
* It is ELF format, but its only section looks like this: |
* kernel text |
* kernel data |
* kernel text |
* kernel data |
* |
*/ |
11,7 → 11,7 |
ENTRY(kernel_image_start) |
SECTIONS { |
.image VMA: AT (LMA) { |
.image VMA: AT (LMA) { |
ktext_start = .; |
*(K_TEXT_START) |
*(.text); |
21,23 → 21,23 |
*(K_DATA_START) |
*(.rodata); |
*(.rodata.*); |
*(.data); /* initialized data */ |
*(.data); /* initialized data */ |
*(.sdata); |
*(.sdata2); |
*(.sbss); |
. = ALIGN(8); |
hardcoded_ktext_size = .; |
QUAD(ktext_end - ktext_start); |
QUAD(ktext_end - ktext_start); |
hardcoded_kdata_size = .; |
QUAD(kdata_end - kdata_start); |
hardcoded_load_address = .; |
QUAD(VMA); |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
symbol_table = .; |
*(symtab.*); /* Symbol table, must be LAST symbol!*/ |
*(symtab.*); /* Symbol table, must be LAST symbol!*/ |
kdata_end = .; |
} |
44,5 → 44,5 |
/DISCARD/ : { |
*(*); |
} |
} |
//branches/tracing/kernel/arch/sparc64/include/cpu_node.h |
---|
55,4 → 55,5 |
#endif |
/** @} |
*/ |
*/ |
//branches/tracing/kernel/arch/sparc64/include/fpu_context.h |
---|
37,7 → 37,6 |
#include <arch/types.h> |
#define ARCH_HAS_FPU |
#define FPU_CONTEXT_ALIGN 8 |
typedef struct { |
//branches/tracing/kernel/arch/sparc64/include/types.h |
---|
54,11 → 54,12 |
typedef uint64_t ipl_t; |
typedef uint64_t ioport_t; |
typedef uint64_t unative_t; |
typedef int64_t native_t; |
typedef struct { |
} fncptr_t; |
/**< Formats for uintptr_t, size_t, count_t and index_t */ |
#define PRIp "llx" |
#define PRIs "llu" |
//branches/tracing/kernel/arch/sparc64/include/memstr.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup sparc64 |
/** @addtogroup sparc64 |
* @{ |
*/ |
/** @file |
//branches/tracing/kernel/arch/sparc64/include/atomic.h |
---|
123,7 → 123,7 |
"ldx %0, %2\n" |
"brz %2, 0b\n" |
"nop\n" |
"ba 1b\n" |
"ba %xcc, 1b\n" |
"nop\n" |
"2:\n" |
: "+m" (*((uint64_t *) x)), "+r" (tmp1), "+r" (tmp2) : "r" (0) |
//branches/tracing/kernel/arch/sparc64/include/arch.h |
---|
45,6 → 45,12 |
#define NWINDOWS 8 /** Number of register window sets. */ |
#ifndef __ASM__ |
extern void arch_pre_main(void); |
#endif /* __ASM__ */ |
#endif |
/** @} |
//branches/tracing/kernel/arch/sparc64/include/boot/boot.h |
---|
48,9 → 48,12 |
#define TASKMAP_MAX_RECORDS 32 |
#define MEMMAP_MAX_RECORDS 32 |
#define BOOTINFO_TASK_NAME_BUFLEN 32 |
typedef struct { |
void * addr; |
uint32_t size; |
char name[BOOTINFO_TASK_NAME_BUFLEN]; |
} utask_t; |
typedef struct { |
//branches/tracing/kernel/arch/sparc64/include/asm.h |
---|
44,49 → 44,49 |
#include <arch/stack.h> |
#include <arch/barrier.h> |
static inline void outb(ioport_t port, uint8_t v) |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*((volatile uint8_t *)(port)) = v; |
*port = v; |
memory_barrier(); |
} |
static inline void outw(ioport_t port, uint16_t v) |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*((volatile uint16_t *)(port)) = v; |
*port = v; |
memory_barrier(); |
} |
static inline void outl(ioport_t port, uint32_t v) |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*((volatile uint32_t *)(port)) = v; |
*port = v; |
memory_barrier(); |
} |
static inline uint8_t inb(ioport_t port) |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
uint8_t rv; |
rv = *((volatile uint8_t *)(port)); |
rv = *port; |
memory_barrier(); |
return rv; |
} |
static inline uint16_t inw(ioport_t port) |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
uint16_t rv; |
rv = *((volatile uint16_t *)(port)); |
rv = *port; |
memory_barrier(); |
return rv; |
} |
static inline uint32_t inl(ioport_t port) |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
uint32_t rv; |
rv = *((volatile uint32_t *)(port)); |
rv = *port; |
memory_barrier(); |
return rv; |
//branches/tracing/kernel/arch/sparc64/include/trap/trap_table.h |
---|
100,7 → 100,7 |
.macro PREEMPTIBLE_HANDLER f |
sethi %hi(\f), %g1 |
b preemptible_handler |
ba %xcc, preemptible_handler |
or %g1, %lo(\f), %g1 |
.endm |
//branches/tracing/kernel/arch/sparc64/include/trap/mmu.h |
---|
103,17 → 103,20 |
* Note that branch-delay slots are used in order to save space. |
*/ |
0: |
mov VA_DMMU_TAG_ACCESS, %g1 |
ldxa [%g1] ASI_DMMU, %g1 ! read the faulting Context and VPN |
sethi %hi(fast_data_access_mmu_miss_data_hi), %g7 |
wr %g0, ASI_DMMU, %asi |
ldxa [VA_DMMU_TAG_ACCESS] %asi, %g1 ! read the faulting Context and VPN |
set TLB_TAG_ACCESS_CONTEXT_MASK, %g2 |
andcc %g1, %g2, %g3 ! get Context |
bnz 0f ! Context is non-zero |
bnz %xcc, 0f ! Context is non-zero |
andncc %g1, %g2, %g3 ! get page address into %g3 |
bz 0f ! page address is zero |
bz %xcc, 0f ! page address is zero |
ldx [%g7 + %lo(end_of_identity)], %g4 |
cmp %g3, %g4 |
bgeu %xcc, 0f |
sethi %hi(kernel_8k_tlb_data_template), %g2 |
ldx [%g2 + %lo(kernel_8k_tlb_data_template)], %g2 |
or %g3, %g2, %g2 |
ldx [%g7 + %lo(kernel_8k_tlb_data_template)], %g2 |
add %g3, %g2, %g2 |
stxa %g2, [%g0] ASI_DTLB_DATA_IN_REG ! identity map the kernel page |
retry |
138,8 → 141,7 |
* Read the Tag Access register for the higher-level handler. |
* This is necessary to survive nested DTLB misses. |
*/ |
mov VA_DMMU_TAG_ACCESS, %g2 |
ldxa [%g2] ASI_DMMU, %g2 |
ldxa [VA_DMMU_TAG_ACCESS] %asi, %g2 |
/* |
* g2 will be passed as an argument to fast_data_access_mmu_miss(). |
//branches/tracing/kernel/arch/sparc64/include/mm/frame.h |
---|
73,6 → 73,8 |
typedef union frame_address frame_address_t; |
extern uintptr_t last_frame; |
extern uintptr_t end_of_identity; |
extern void frame_arch_init(void); |
#define physmem_print() |
//branches/tracing/kernel/arch/sparc64/include/barrier.h |
---|
82,6 → 82,8 |
asm volatile ("membar #Sync\n"); |
} |
#if defined (US) |
#define smc_coherence(a) \ |
{ \ |
write_barrier(); \ |
97,6 → 99,22 |
flush((void *)(a) + i); \ |
} |
#elif defined (US3) |
#define smc_coherence(a) \ |
{ \ |
write_barrier(); \ |
flush_pipeline(); \ |
} |
#define smc_coherence_block(a, l) \ |
{ \ |
write_barrier(); \ |
flush_pipeline(); \ |
} |
#endif /* defined(US3) */ |
#endif |
/** @} |
//branches/tracing/kernel/arch/sparc64/include/drivers/z8530.h |
---|
File deleted |
//branches/tracing/kernel/arch/sparc64/include/drivers/ns16550.h |
---|
File deleted |
//branches/tracing/kernel/arch/sparc64/include/drivers/sgcn.h |
---|
36,17 → 36,19 |
#define KERN_sparc64_SGCN_H_ |
#include <arch/types.h> |
#include <console/chardev.h> |
#include <proc/thread.h> |
/* number of bytes in the TOC magic, including the terminating '\0' */ |
/* number of bytes in the TOC magic, including the NULL-terminator */ |
#define TOC_MAGIC_BYTES 8 |
/* number of bytes in the TOC key, including the terminating '\0' */ |
/* number of bytes in the TOC key, including the NULL-terminator */ |
#define TOC_KEY_SIZE 8 |
/* maximum number of entries in the SRAM table of contents */ |
#define MAX_TOC_ENTRIES 32 |
/* number of bytes in the SGCN buffer magic, including the terminating '\0' */ |
/* number of bytes in the SGCN buffer magic, including the NULL-terminator */ |
#define SGCN_MAGIC_BYTES 4 |
/** |
115,11 → 117,17 |
uint32_t out_wrptr; |
} __attribute__ ((packed)) sgcn_buffer_header_t; |
void sgcn_grab(void); |
void sgcn_release(void); |
void sgcn_poll(void); |
void sgcn_init(void); |
typedef struct { |
thread_t *thread; |
indev_t *srlnin; |
} sgcn_instance_t; |
extern void sgcn_grab(void); |
extern void sgcn_release(void); |
extern sgcn_instance_t *sgcnin_init(void); |
extern void sgcnin_wire(sgcn_instance_t *, indev_t *); |
extern void sgcnout_init(void); |
#endif |
/** @} |
//branches/tracing/kernel/arch/sparc64/include/drivers/kbd.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup sparc64 |
/** @addtogroup sparc64 |
* @{ |
*/ |
/** @file |
38,15 → 38,6 |
#include <arch/types.h> |
#include <genarch/ofw/ofw_tree.h> |
typedef enum { |
KBD_UNKNOWN, |
KBD_Z8530, |
KBD_NS16550, |
KBD_SGCN |
} kbd_type_t; |
extern kbd_type_t kbd_type; |
extern void kbd_init(ofw_tree_node_t *node); |
#endif |
//branches/tracing/kernel/arch/sparc64/include/drivers/scr.h |
---|
49,6 → 49,7 |
extern scr_type_t scr_type; |
extern void scr_init(ofw_tree_node_t *node); |
extern void scr_redraw(void); |
#endif |
//branches/tracing/kernel/arch/sparc64/include/cpu_family.h |
---|
79,4 → 79,5 |
#endif |
/** @} |
*/ |
*/ |
//branches/tracing/kernel/arch/sparc64/Makefile.inc |
---|
29,10 → 29,6 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
BFD_NAME = elf64-sparc |
BFD_ARCH = sparc |
BFD = binary |
46,94 → 42,55 |
DEFS += -D__64_BITS__ |
## Own configuration directives |
# |
## Compile with page hash table support. |
# |
CONFIG_PAGE_HT = y |
DEFS += -DCONFIG_PAGE_HT |
## Compile with support for address space identifiers. |
# |
CONFIG_ASID = y |
CONFIG_ASID_FIFO = y |
## Compile with support for framebuffer. |
# |
CONFIG_FB = y |
## Compile with support for Sun keyboard. |
# |
CONFIG_SUN_KBD = y |
## Compile with support for OpenFirmware device tree. |
# |
CONFIG_OFW_TREE = y |
ifeq ($(CONFIG_SMP),y) |
DEFS += -DCONFIG_SMP |
ifeq ($(PROCESSOR),us) |
DEFS += -DUS |
endif |
ifeq ($(CONFIG_SGCN),y) |
DEFS += -DCONFIG_SGCN |
endif |
ifeq ($(MACHINE),us) |
DEFS += -DUS |
endif |
ifeq ($(MACHINE),us3) |
ifeq ($(PROCESSOR),us3) |
DEFS += -DUS3 |
endif |
ARCH_SOURCES = \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/asm.S \ |
arch/$(ARCH)/src/panic.S \ |
arch/$(ARCH)/src/console.c \ |
arch/$(ARCH)/src/context.S \ |
arch/$(ARCH)/src/fpu_context.c \ |
arch/$(ARCH)/src/dummy.s \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/cache.S \ |
arch/$(ARCH)/src/mm/frame.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/sparc64.c \ |
arch/$(ARCH)/src/start.S \ |
arch/$(ARCH)/src/proc/scheduler.c \ |
arch/$(ARCH)/src/proc/thread.c \ |
arch/$(ARCH)/src/trap/mmu.S \ |
arch/$(ARCH)/src/trap/trap_table.S \ |
arch/$(ARCH)/src/trap/trap.c \ |
arch/$(ARCH)/src/trap/exception.c \ |
arch/$(ARCH)/src/trap/interrupt.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/tick.c \ |
arch/$(ARCH)/src/drivers/kbd.c \ |
arch/$(ARCH)/src/drivers/scr.c \ |
arch/$(ARCH)/src/drivers/sgcn.c \ |
arch/$(ARCH)/src/drivers/pci.c |
arch/$(KARCH)/src/cpu/cpu.c \ |
arch/$(KARCH)/src/asm.S \ |
arch/$(KARCH)/src/panic.S \ |
arch/$(KARCH)/src/console.c \ |
arch/$(KARCH)/src/context.S \ |
arch/$(KARCH)/src/fpu_context.c \ |
arch/$(KARCH)/src/dummy.s \ |
arch/$(KARCH)/src/mm/as.c \ |
arch/$(KARCH)/src/mm/cache.S \ |
arch/$(KARCH)/src/mm/frame.c \ |
arch/$(KARCH)/src/mm/page.c \ |
arch/$(KARCH)/src/mm/tlb.c \ |
arch/$(KARCH)/src/sparc64.c \ |
arch/$(KARCH)/src/start.S \ |
arch/$(KARCH)/src/proc/scheduler.c \ |
arch/$(KARCH)/src/proc/thread.c \ |
arch/$(KARCH)/src/trap/mmu.S \ |
arch/$(KARCH)/src/trap/trap_table.S \ |
arch/$(KARCH)/src/trap/trap.c \ |
arch/$(KARCH)/src/trap/exception.c \ |
arch/$(KARCH)/src/trap/interrupt.c \ |
arch/$(KARCH)/src/ddi/ddi.c \ |
arch/$(KARCH)/src/drivers/tick.c \ |
arch/$(KARCH)/src/drivers/kbd.c \ |
arch/$(KARCH)/src/drivers/sgcn.c \ |
arch/$(KARCH)/src/drivers/pci.c \ |
arch/$(KARCH)/src/drivers/fhc.c |
ifeq ($(CONFIG_FB),y) |
ARCH_SOURCES += \ |
arch/$(KARCH)/src/drivers/scr.c |
endif |
ifeq ($(CONFIG_SMP),y) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/smp/ipi.c \ |
arch/$(ARCH)/src/smp/smp.c |
ARCH_SOURCES += \ |
arch/$(KARCH)/src/smp/ipi.c \ |
arch/$(KARCH)/src/smp/smp.c |
endif |
ifeq ($(CONFIG_TSB),y) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/mm/tsb.c |
ARCH_SOURCES += \ |
arch/$(KARCH)/src/mm/tsb.c |
endif |
ifdef CONFIG_Z8530 |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/drivers/fhc.c |
endif |
//branches/tracing/kernel/arch/sparc64/src/smp/ipi.c |
---|
98,7 → 98,7 |
status = asi_u64_read(ASI_INTR_DISPATCH_STATUS, 0); |
if (status & INTR_DISPATCH_STATUS_BUSY) |
panic("Interrupt Dispatch Status busy bit set\n"); |
panic("Interrupt Dispatch Status busy bit set."); |
ASSERT(!(pstate_read() & PSTATE_IE_BIT)); |
151,7 → 151,7 |
func = tlb_shootdown_ipi_recv; |
break; |
default: |
panic("Unknown IPI (%d).\n", ipi); |
panic("Unknown IPI (%d).", ipi); |
break; |
} |
//branches/tracing/kernel/arch/sparc64/src/asm.S |
---|
225,10 → 225,15 |
.global memsetb |
memsetb: |
b _memsetb |
ba %xcc, _memsetb |
nop |
.global memsetw |
memsetw: |
ba %xcc, _memsetw |
nop |
.macro WRITE_ALTERNATE_REGISTER reg, bit |
rdpr %pstate, %g1 ! save PSTATE.PEF |
wrpr %g0, (\bit | PSTATE_PRIV_BIT), %pstate |
//branches/tracing/kernel/arch/sparc64/src/console.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup sparc64 |
/** @addtogroup sparc64 |
* @{ |
*/ |
/** @file |
37,16 → 37,8 |
#include <arch/drivers/scr.h> |
#include <arch/drivers/kbd.h> |
#include <arch/drivers/sgcn.h> |
#ifdef CONFIG_Z8530 |
#include <genarch/kbd/z8530.h> |
#endif |
#ifdef CONFIG_NS16550 |
#include <genarch/kbd/ns16550.h> |
#endif |
#include <genarch/srln/srln.h> |
#include <console/chardev.h> |
#include <console/console.h> |
#include <arch/asm.h> |
56,7 → 48,7 |
#include <genarch/ofw/ofw_tree.h> |
#include <arch.h> |
#include <panic.h> |
#include <func.h> |
#include <string.h> |
#include <print.h> |
#define KEYBOARD_POLL_PAUSE 50000 /* 50ms */ |
69,39 → 61,50 |
*/ |
static void standard_console_init(ofw_tree_node_t *aliases) |
{ |
stdin = NULL; |
ofw_tree_property_t *prop; |
ofw_tree_node_t *screen; |
ofw_tree_node_t *keyboard; |
#ifdef CONFIG_FB |
ofw_tree_property_t *prop_scr = ofw_tree_getprop(aliases, "screen"); |
if (!prop_scr) |
panic("Cannot find property 'screen'."); |
if (!prop_scr->value) |
panic("Cannot find screen alias."); |
ofw_tree_node_t *screen = ofw_tree_lookup(prop_scr->value); |
if (!screen) |
panic("Cannot find %s.", prop_scr->value); |
prop = ofw_tree_getprop(aliases, "screen"); |
if (!prop) |
panic("Can't find property \"screen\".\n"); |
if (!prop->value) |
panic("Can't find screen alias.\n"); |
screen = ofw_tree_lookup(prop->value); |
if (!screen) |
panic("Can't find %s\n", prop->value); |
scr_init(screen); |
#endif |
prop = ofw_tree_getprop(aliases, "keyboard"); |
if (!prop) |
panic("Can't find property \"keyboard\".\n"); |
if (!prop->value) |
panic("Can't find keyboard alias.\n"); |
keyboard = ofw_tree_lookup(prop->value); |
#ifdef CONFIG_SUN_KBD |
ofw_tree_property_t *prop_kbd = ofw_tree_getprop(aliases, "keyboard"); |
if (!prop_kbd) |
panic("Cannot find property 'keyboard'."); |
if (!prop_kbd->value) |
panic("Cannot find keyboard alias."); |
ofw_tree_node_t *keyboard = ofw_tree_lookup(prop_kbd->value); |
if (!keyboard) |
panic("Can't find %s\n", prop->value); |
panic("Cannot find %s.", prop_kbd->value); |
kbd_init(keyboard); |
#endif |
} |
/** Initilize I/O on the Serengeti machine. */ |
static void serengeti_init(void) |
{ |
sgcn_init(); |
#ifdef CONFIG_SGCN_KBD |
sgcn_instance_t *sgcn_instance = sgcnin_init(); |
if (sgcn_instance) { |
srln_instance_t *srln_instance = srln_init(); |
if (srln_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *srln = srln_wire(srln_instance, sink); |
sgcnin_wire(sgcn_instance, srln); |
} |
} |
#endif |
#ifdef CONFIG_SGCN_PRN |
sgcnout_init(); |
#endif |
} |
/** |
115,12 → 118,12 |
aliases = ofw_tree_lookup("/aliases"); |
if (!aliases) |
panic("Can't find /aliases.\n"); |
panic("Cannot find '/aliases'."); |
/* "def-cn" = "default console" */ |
prop = ofw_tree_getprop(aliases, "def-cn"); |
if ((!prop) || (!prop->value) || (strcmp(prop->value, "/sgcn") != 0)) { |
if ((!prop) || (!prop->value) || (str_cmp(prop->value, "/sgcn") != 0)) { |
standard_console_init(aliases); |
} else { |
serengeti_init(); |
128,72 → 131,18 |
} |
/** Kernel thread for polling keyboard. |
* |
* @param arg Ignored. |
*/ |
void kkbdpoll(void *arg) |
{ |
thread_detach(THREAD); |
#ifdef CONFIG_Z8530 |
if (kbd_type == KBD_Z8530) { |
/* |
* The z8530 driver is interrupt-driven. |
*/ |
return; |
} |
#endif |
#ifdef CONFIG_NS16550 |
#ifdef CONFIG_NS16550_INTERRUPT_DRIVEN |
if (kbd_type == KBD_NS16550) { |
/* |
* The ns16550 driver is interrupt-driven. |
*/ |
return; |
} |
#endif |
#endif |
while (1) { |
#ifdef CONFIG_NS16550 |
#ifndef CONFIG_NS16550_INTERRUPT_DRIVEN |
if (kbd_type == KBD_NS16550) |
ns16550_poll(); |
#endif |
#endif |
#ifdef CONFIG_SGCN |
if (kbd_type == KBD_SGCN) |
sgcn_poll(); |
#endif |
thread_usleep(KEYBOARD_POLL_PAUSE); |
} |
} |
/** Acquire console back for kernel |
* |
*/ |
void arch_grab_console(void) |
{ |
switch (kbd_type) { |
#ifdef CONFIG_Z8530 |
case KBD_Z8530: |
z8530_grab(); |
break; |
#ifdef CONFIG_FB |
scr_redraw(); |
#endif |
#ifdef CONFIG_NS16550 |
case KBD_NS16550: |
ns16550_grab(); |
break; |
#ifdef CONFIG_SGCN_KBD |
sgcn_grab(); |
#endif |
#ifdef CONFIG_SGCN |
case KBD_SGCN: |
sgcn_grab(); |
break; |
#endif |
default: |
break; |
} |
} |
/** Return console to userspace |
201,25 → 150,9 |
*/ |
void arch_release_console(void) |
{ |
switch (kbd_type) { |
#ifdef CONFIG_Z8530 |
case KBD_Z8530: |
z8530_release(); |
break; |
#ifdef CONFIG_SGCN_KBD |
sgcn_release(); |
#endif |
#ifdef CONFIG_NS16550 |
case KBD_NS16550: |
ns16550_release(); |
break; |
#endif |
#ifdef CONFIG_SGCN |
case KBD_SGCN: |
sgcn_release(); |
break; |
#endif |
default: |
break; |
} |
} |
/** @} |
//branches/tracing/kernel/arch/sparc64/src/sparc64.c |
---|
37,7 → 37,6 |
#include <config.h> |
#include <arch/trap/trap.h> |
#include <arch/console.h> |
#include <proc/thread.h> |
#include <console/console.h> |
#include <arch/boot/boot.h> |
#include <arch/arch.h> |
47,10 → 46,11 |
#include <genarch/ofw/ofw_tree.h> |
#include <userspace.h> |
#include <ddi/irq.h> |
#include <string.h> |
bootinfo_t bootinfo; |
/** Perform sparc64 specific initialization before main_bsp() is called. */ |
/** Perform sparc64-specific initialization before main_bsp() is called. */ |
void arch_pre_main(void) |
{ |
/* Copy init task info. */ |
61,6 → 61,8 |
for (i = 0; i < bootinfo.taskmap.count; i++) { |
init.tasks[i].addr = (uintptr_t) bootinfo.taskmap.tasks[i].addr; |
init.tasks[i].size = bootinfo.taskmap.tasks[i].size; |
str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN, |
bootinfo.taskmap.tasks[i].name); |
} |
/* Copy boot allocations info. */ |
86,8 → 88,6 |
* But we only create 128 buckets. |
*/ |
irq_init(1 << 11, 128); |
standalone_sparc64_console_init(); |
} |
} |
101,18 → 101,7 |
void arch_post_smp_init(void) |
{ |
static thread_t *t = NULL; |
if (!t) { |
/* |
* Create thread that polls keyboard. |
*/ |
t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll", true); |
if (!t) |
panic("cannot create kkbdpoll\n"); |
thread_ready(t); |
} |
standalone_sparc64_console_init(); |
} |
/** Calibrate delay loop. |
161,5 → 150,19 |
while (1); |
} |
/** Construct function pointer |
* |
* @param fptr function pointer structure |
* @param addr function address |
* @param caller calling function address |
* |
* @return address of the function pointer |
* |
*/ |
void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
{ |
return addr; |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/sparc64/src/trap/exception.c |
---|
40,62 → 40,67 |
#include <arch/asm.h> |
#include <arch/register.h> |
#include <debug.h> |
#include <print.h> |
#include <symtab.h> |
#include <print.h> |
void dump_istate(istate_t *istate) |
{ |
char *tpcs, *tnpcs; |
tpcs = symtab_fmt_name_lookup(istate->tpc); |
tnpcs = symtab_fmt_name_lookup(istate->tnpc); |
printf("TSTATE=%#" PRIx64 "\n", istate->tstate); |
printf("TPC=%#" PRIx64 " (%s)\n", istate->tpc, get_symtab_entry(istate->tpc)); |
printf("TNPC=%#" PRIx64 " (%s)\n", istate->tnpc, get_symtab_entry(istate->tnpc)); |
printf("TPC=%#" PRIx64 " (%s)\n", istate->tpc, tpcs); |
printf("TNPC=%#" PRIx64 " (%s)\n", istate->tnpc, tnpcs); |
} |
/** Handle instruction_access_exception. (0x8) */ |
void instruction_access_exception(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle instruction_access_error. (0xa) */ |
void instruction_access_error(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle illegal_instruction. (0x10) */ |
void illegal_instruction(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle privileged_opcode. (0x11) */ |
void privileged_opcode(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle unimplemented_LDD. (0x12) */ |
void unimplemented_LDD(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle unimplemented_STD. (0x13) */ |
void unimplemented_STD(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle fp_disabled. (0x20) */ |
113,9 → 118,9 |
#ifdef CONFIG_FPU_LAZY |
scheduler_fpu_lazy_request(); |
#else |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
#endif |
} |
122,98 → 127,98 |
/** Handle fp_exception_ieee_754. (0x21) */ |
void fp_exception_ieee_754(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle fp_exception_other. (0x22) */ |
void fp_exception_other(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle tag_overflow. (0x23) */ |
void tag_overflow(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle division_by_zero. (0x28) */ |
void division_by_zero(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle data_access_exception. (0x30) */ |
void data_access_exception(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
dump_sfsr_and_sfar(); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle data_access_error. (0x32) */ |
void data_access_error(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle mem_address_not_aligned. (0x34) */ |
void mem_address_not_aligned(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle LDDF_mem_address_not_aligned. (0x35) */ |
void LDDF_mem_address_not_aligned(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle STDF_mem_address_not_aligned. (0x36) */ |
void STDF_mem_address_not_aligned(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle privileged_action. (0x37) */ |
void privileged_action(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle LDQF_mem_address_not_aligned. (0x38) */ |
void LDQF_mem_address_not_aligned(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Handle STQF_mem_address_not_aligned. (0x39) */ |
void STQF_mem_address_not_aligned(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "%s\n", __func__); |
fault_if_from_uspace(istate, "%s.", __func__); |
dump_istate(istate); |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** @} |
//branches/tracing/kernel/arch/sparc64/src/trap/interrupt.c |
---|
72,7 → 72,7 |
uint64_t data0; |
status = asi_u64_read(ASI_INTR_DISPATCH_STATUS, 0); |
if (status & (!INTR_DISPATCH_STATUS_BUSY)) |
panic("Interrupt Dispatch Status busy bit not set\n"); |
panic("Interrupt Dispatch Status busy bit not set."); |
intrcv = asi_u64_read(ASI_INTR_RECEIVE, 0); |
#if defined (US) |
86,7 → 86,7 |
/* |
* The IRQ handler was found. |
*/ |
irq->handler(irq, irq->arg); |
irq->handler(irq); |
/* |
* See if there is a clear-interrupt-routine and call it. |
*/ |
//branches/tracing/kernel/arch/sparc64/src/trap/trap_table.S |
---|
341,7 → 341,7 |
.org trap_table + (TT_TRAP_INSTRUCTION_0+\cur)*ENTRY_SIZE |
.global trap_instruction_\cur\()_tl0 |
trap_instruction_\cur\()_tl0: |
ba trap_instruction_handler |
ba %xcc, trap_instruction_handler |
mov \cur, %g2 |
.endr |
478,9 → 478,9 |
*/ |
rdpr %tl, %g3 |
cmp %g3, 1 |
be 1f |
be %xcc, 1f |
nop |
0: ba 0b ! this is for debugging, if we ever get here |
0: ba %xcc, 0b ! this is for debugging, if we ever get here |
nop ! it will be easy to find |
1: |
499,7 → 499,7 |
wrpr %g4, 0, %cwp ! resynchronize CWP |
andcc %g3, TSTATE_PRIV_BIT, %g0 ! if this trap came from the privileged mode... |
bnz 0f ! ...skip setting of kernel stack and primary context |
bnz %xcc, 0f ! ...skip setting of kernel stack and primary context |
nop |
.endif |
545,7 → 545,7 |
flush %l0 |
.if NOT(\is_syscall) |
ba 1f |
ba %xcc, 1f |
nop |
0: |
save %sp, -PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE, %sp |
606,10 → 606,10 |
add %sp, PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE + STACK_BIAS + SAVED_TNPC, %o1 |
.else |
/* |
* Call the higher-level syscall handler. |
* Call the higher-level syscall handler and enable interrupts. |
*/ |
call syscall_handler |
nop |
wrpr %g0, PSTATE_PRIV_BIT | PSTATE_PEF_BIT | PSTATE_IE_BIT, %pstate |
mov %o0, %i0 ! copy the value returned by the syscall |
.endif |
672,7 → 672,7 |
and %l0, NWINDOWS - 1, %l0 ! %l0 mod NWINDOWS |
rdpr %cwp, %l1 |
cmp %l0, %l1 |
bz 0f ! CWP is ok |
bz %xcc, 0f ! CWP is ok |
nop |
/* |
712,7 → 712,7 |
.if NOT(\is_syscall) |
rdpr %tstate, %g1 |
andcc %g1, TSTATE_PRIV_BIT, %g0 ! if we are not returning to userspace..., |
bnz 1f ! ...skip restoring userspace windows |
bnz %xcc, 1f ! ...skip restoring userspace windows |
nop |
.endif |
749,7 → 749,7 |
*/ |
clr %g4 |
0: andcc %g7, UWB_ALIGNMENT - 1, %g0 ! alignment check |
bz 0f ! %g7 is UWB_ALIGNMENT-aligned, no more windows to refill |
bz %xcc, 0f ! %g7 is UWB_ALIGNMENT-aligned, no more windows to refill |
nop |
add %g7, -STACK_WINDOW_SAVE_AREA_SIZE, %g7 |
774,7 → 774,7 |
and %g3, NWINDOWS - 1, %g3 |
wrpr %g3, 0, %cwp ! switch to the preceeding window |
ba 0b |
ba %xcc, 0b |
inc %g4 |
0: |
785,7 → 785,7 |
wrpr %g1, 0, %cwp |
add %g4, %g2, %g2 |
cmp %g2, NWINDOWS - 2 |
bg 2f ! fix the CANRESTORE=NWINDOWS-1 anomaly |
bg %xcc, 2f ! fix the CANRESTORE=NWINDOWS-1 anomaly |
mov NWINDOWS - 2, %g1 ! use dealy slot for both cases |
sub %g1, %g2, %g1 |
//branches/tracing/kernel/arch/sparc64/src/mm/tlb.c |
---|
199,12 → 199,12 |
/** ITLB miss handler. */ |
void fast_instruction_access_mmu_miss(unative_t unused, istate_t *istate) |
{ |
uintptr_t va = ALIGN_DOWN(istate->tpc, PAGE_SIZE); |
uintptr_t page_16k = ALIGN_DOWN(istate->tpc, PAGE_SIZE); |
index_t index = (istate->tpc >> MMU_PAGE_WIDTH) % MMU_PAGES_PER_PAGE; |
pte_t *t; |
page_table_lock(AS, true); |
t = page_mapping_find(AS, va); |
t = page_mapping_find(AS, page_16k); |
if (t && PTE_EXECUTABLE(t)) { |
/* |
* The mapping was found in the software page hash table. |
222,7 → 222,8 |
* handler. |
*/ |
page_table_unlock(AS, true); |
if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
if (as_page_fault(page_16k, PF_ACCESS_EXEC, istate) == |
AS_PF_FAULT) { |
do_fast_instruction_access_mmu_miss_fault(istate, |
__func__); |
} |
242,11 → 243,13 |
*/ |
void fast_data_access_mmu_miss(tlb_tag_access_reg_t tag, istate_t *istate) |
{ |
uintptr_t va; |
uintptr_t page_8k; |
uintptr_t page_16k; |
index_t index; |
pte_t *t; |
va = ALIGN_DOWN((uint64_t) tag.vpn << MMU_PAGE_WIDTH, PAGE_SIZE); |
page_8k = (uint64_t) tag.vpn << MMU_PAGE_WIDTH; |
page_16k = ALIGN_DOWN(page_8k, PAGE_SIZE); |
index = tag.vpn % MMU_PAGES_PER_PAGE; |
if (tag.context == ASID_KERNEL) { |
254,6 → 257,15 |
/* NULL access in kernel */ |
do_fast_data_access_mmu_miss_fault(istate, tag, |
__func__); |
} else if (page_8k >= end_of_identity) { |
/* |
* The kernel is accessing the I/O space. |
* We still do identity mapping for I/O, |
* but without caching. |
*/ |
dtlb_insert_mapping(page_8k, KA2PA(page_8k), |
PAGESIZE_8K, false, false); |
return; |
} |
do_fast_data_access_mmu_miss_fault(istate, tag, "Unexpected " |
"kernel page fault."); |
260,7 → 272,7 |
} |
page_table_lock(AS, true); |
t = page_mapping_find(AS, va); |
t = page_mapping_find(AS, page_16k); |
if (t) { |
/* |
* The mapping was found in the software page hash table. |
278,7 → 290,8 |
* handler. |
*/ |
page_table_unlock(AS, true); |
if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
if (as_page_fault(page_16k, PF_ACCESS_READ, istate) == |
AS_PF_FAULT) { |
do_fast_data_access_mmu_miss_fault(istate, tag, |
__func__); |
} |
295,15 → 308,15 |
*/ |
void fast_data_access_protection(tlb_tag_access_reg_t tag, istate_t *istate) |
{ |
uintptr_t va; |
uintptr_t page_16k; |
index_t index; |
pte_t *t; |
va = ALIGN_DOWN((uint64_t) tag.vpn << MMU_PAGE_WIDTH, PAGE_SIZE); |
page_16k = ALIGN_DOWN((uint64_t) tag.vpn << MMU_PAGE_WIDTH, PAGE_SIZE); |
index = tag.vpn % MMU_PAGES_PER_PAGE; /* 16K-page emulation */ |
page_table_lock(AS, true); |
t = page_mapping_find(AS, va); |
t = page_mapping_find(AS, page_16k); |
if (t && PTE_WRITABLE(t)) { |
/* |
* The mapping was found in the software page hash table and is |
313,7 → 326,7 |
t->a = true; |
t->d = true; |
dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_SECONDARY, |
va + index * MMU_PAGE_SIZE); |
page_16k + index * MMU_PAGE_SIZE); |
dtlb_pte_copy(t, index, false); |
#ifdef CONFIG_TSB |
dtsb_pte_copy(t, index, false); |
325,7 → 338,8 |
* handler. |
*/ |
page_table_unlock(AS, true); |
if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) { |
if (as_page_fault(page_16k, PF_ACCESS_WRITE, istate) == |
AS_PF_FAULT) { |
do_fast_data_access_protection_fault(istate, tag, |
__func__); |
} |
424,9 → 438,9 |
void do_fast_instruction_access_mmu_miss_fault(istate_t *istate, |
const char *str) |
{ |
fault_if_from_uspace(istate, "%s\n", str); |
fault_if_from_uspace(istate, "%s.", str); |
dump_istate(istate); |
panic("%s\n", str); |
panic("%s.", str); |
} |
void do_fast_data_access_mmu_miss_fault(istate_t *istate, |
436,12 → 450,12 |
va = tag.vpn << MMU_PAGE_WIDTH; |
if (tag.context) { |
fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d)\n", str, va, |
fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str, va, |
tag.context); |
} |
dump_istate(istate); |
printf("Faulting page: %p, ASID=%d\n", va, tag.context); |
panic("%s\n", str); |
printf("Faulting page: %p, ASID=%d.\n", va, tag.context); |
panic("%s.", str); |
} |
void do_fast_data_access_protection_fault(istate_t *istate, |
452,12 → 466,12 |
va = tag.vpn << MMU_PAGE_WIDTH; |
if (tag.context) { |
fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d)\n", str, va, |
fault_if_from_uspace(istate, "%s, Page=%p (ASID=%d).", str, va, |
tag.context); |
} |
printf("Faulting page: %p, ASID=%d\n", va, tag.context); |
dump_istate(istate); |
panic("%s\n", str); |
panic("%s.", str); |
} |
void dump_sfsr_and_sfar(void) |
//branches/tracing/kernel/arch/sparc64/src/mm/frame.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup sparc64mm |
/** @addtogroup sparc64mm |
* @{ |
*/ |
/** @file |
79,7 → 79,8 |
*/ |
frame_mark_unavailable(ADDR2PFN(KA2PA(PFN2ADDR(0))), 1); |
} |
end_of_identity = PA2KA(last_frame); |
} |
/** @} |
//branches/tracing/kernel/arch/sparc64/src/mm/page.c |
---|
1,5 → 1,5 |
/* |
* Copyright (c) 2005 Jakub Jermar |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup sparc64mm |
/** @addtogroup sparc64mm |
* @{ |
*/ |
/** @file |
42,128 → 42,28 |
#include <align.h> |
#include <config.h> |
#ifdef CONFIG_SMP |
/** Entries locked in DTLB of BSP. |
* |
* Application processors need to have the same locked entries in their DTLBs as |
* the bootstrap processor. |
*/ |
static struct { |
uintptr_t virt_page; |
uintptr_t phys_page; |
int pagesize_code; |
} bsp_locked_dtlb_entry[DTLB_MAX_LOCKED_ENTRIES]; |
/** Number of entries in bsp_locked_dtlb_entry array. */ |
static count_t bsp_locked_dtlb_entries = 0; |
#endif /* CONFIG_SMP */ |
/** Perform sparc64 specific initialization of paging. */ |
void page_arch_init(void) |
{ |
if (config.cpu_active == 1) { |
if (config.cpu_active == 1) |
page_mapping_operations = &ht_mapping_operations; |
} else { |
#ifdef CONFIG_SMP |
unsigned int i; |
/* |
* Copy locked DTLB entries from the BSP. |
*/ |
for (i = 0; i < bsp_locked_dtlb_entries; i++) { |
dtlb_insert_mapping(bsp_locked_dtlb_entry[i].virt_page, |
bsp_locked_dtlb_entry[i].phys_page, |
bsp_locked_dtlb_entry[i].pagesize_code, true, |
false); |
} |
#endif |
} |
} |
/** Map memory-mapped device into virtual memory. |
* |
* So far, only DTLB is used to map devices into memory. Chances are that there |
* will be only a limited amount of devices that the kernel itself needs to |
* lock in DTLB. |
* We are currently using identity mapping for mapping device registers. |
* |
* @param physaddr Physical address of the page where the device is located. |
* Must be at least page-aligned. |
* @param size Size of the device's registers. Must not exceed 4M and must |
* include extra space caused by the alignment. |
* @param physaddr Physical address of the page where the device is |
* located. |
* @param size Size of the device's registers. |
* |
* @return Virtual address of the page where the device is mapped. |
* |
*/ |
uintptr_t hw_map(uintptr_t physaddr, size_t size) |
{ |
unsigned int order; |
unsigned int i; |
ASSERT(config.cpu_active == 1); |
struct { |
int pagesize_code; |
size_t increment; |
count_t count; |
} sizemap[] = { |
{ PAGESIZE_8K, 0, 1 }, /* 8K */ |
{ PAGESIZE_8K, MMU_PAGE_SIZE, 2 }, /* 16K */ |
{ PAGESIZE_8K, MMU_PAGE_SIZE, 4 }, /* 32K */ |
{ PAGESIZE_64K, 0, 1}, /* 64K */ |
{ PAGESIZE_64K, 8 * MMU_PAGE_SIZE, 2 }, /* 128K */ |
{ PAGESIZE_64K, 8 * MMU_PAGE_SIZE, 4 }, /* 256K */ |
{ PAGESIZE_512K, 0, 1 }, /* 512K */ |
{ PAGESIZE_512K, 64 * MMU_PAGE_SIZE, 2 }, /* 1M */ |
{ PAGESIZE_512K, 64 * MMU_PAGE_SIZE, 4 }, /* 2M */ |
{ PAGESIZE_4M, 0, 1 }, /* 4M */ |
{ PAGESIZE_4M, 512 * MMU_PAGE_SIZE, 2 } /* 8M */ |
}; |
ASSERT(ALIGN_UP(physaddr, MMU_PAGE_SIZE) == physaddr); |
ASSERT(size <= 8 * 1024 * 1024); |
if (size <= MMU_FRAME_SIZE) |
order = 0; |
else |
order = (fnzb64(size - 1) + 1) - MMU_FRAME_WIDTH; |
/* |
* Use virtual addresses that are beyond the limit of physical memory. |
* Thus, the physical address space will not be wasted by holes created |
* by frame_alloc(). |
*/ |
ASSERT(PA2KA(last_frame)); |
uintptr_t virtaddr = ALIGN_UP(PA2KA(last_frame), |
1 << (order + FRAME_WIDTH)); |
last_frame = ALIGN_UP(KA2PA(virtaddr) + size, |
1 << (order + FRAME_WIDTH)); |
for (i = 0; i < sizemap[order].count; i++) { |
/* |
* First, insert the mapping into DTLB. |
*/ |
dtlb_insert_mapping(virtaddr + i * sizemap[order].increment, |
physaddr + i * sizemap[order].increment, |
sizemap[order].pagesize_code, true, false); |
#ifdef CONFIG_SMP |
/* |
* Second, save the information about the mapping for APs. |
*/ |
bsp_locked_dtlb_entry[bsp_locked_dtlb_entries].virt_page = |
virtaddr + i * sizemap[order].increment; |
bsp_locked_dtlb_entry[bsp_locked_dtlb_entries].phys_page = |
physaddr + i * sizemap[order].increment; |
bsp_locked_dtlb_entry[bsp_locked_dtlb_entries].pagesize_code = |
sizemap[order].pagesize_code; |
bsp_locked_dtlb_entries++; |
#endif |
} |
return virtaddr; |
return PA2KA(physaddr); |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/sparc64/src/dummy.s |
---|
42,5 → 42,5 |
.global cpu_halt |
cpu_halt: |
b cpu_halt |
ba %xcc, cpu_halt |
nop |
//branches/tracing/kernel/arch/sparc64/src/drivers/fhc.c |
---|
45,6 → 45,7 |
#include <mm/slab.h> |
#include <arch/types.h> |
#include <genarch/ofw/ofw_tree.h> |
#include <sysinfo/sysinfo.h> |
fhc_t *central_fhc = NULL; |
86,6 → 87,13 |
fhc->uart_imap = (uint32_t *) hw_map(paddr, reg->size); |
/* |
* Set sysinfo data needed by the uspace FHC driver. |
*/ |
sysinfo_set_item_val("fhc.uart.size", NULL, reg->size); |
sysinfo_set_item_val("fhc.uart.physical", NULL, paddr); |
sysinfo_set_item_val("kbd.cir.fhc", NULL, 1); |
return fhc; |
} |
96,7 → 104,7 |
fhc->uart_imap[FHC_UART_IMAP] |= IMAP_V_MASK; |
break; |
default: |
panic("Unexpected INR (%d)\n", inr); |
panic("Unexpected INR (%d).", inr); |
break; |
} |
} |
111,7 → 119,7 |
fhc->uart_imap[FHC_UART_ICLR] = 0; |
break; |
default: |
panic("Unexpected INR (%d)\n", inr); |
panic("Unexpected INR (%d).", inr); |
break; |
} |
} |
//branches/tracing/kernel/arch/sparc64/src/drivers/kbd.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup sparc64 |
/** @addtogroup sparc64 |
* @{ |
*/ |
/** @file |
34,107 → 34,160 |
#include <arch/drivers/kbd.h> |
#include <genarch/ofw/ofw_tree.h> |
#ifdef CONFIG_SUN_KBD |
#include <genarch/kbrd/kbrd.h> |
#endif |
#ifdef CONFIG_Z8530 |
#include <genarch/kbd/z8530.h> |
#include <genarch/drivers/z8530/z8530.h> |
#endif |
#ifdef CONFIG_NS16550 |
#include <genarch/kbd/ns16550.h> |
#include <genarch/drivers/ns16550/ns16550.h> |
#endif |
#include <ddi/device.h> |
#include <console/console.h> |
#include <ddi/irq.h> |
#include <arch/mm/page.h> |
#include <arch/types.h> |
#include <align.h> |
#include <func.h> |
#include <string.h> |
#include <print.h> |
#include <sysinfo/sysinfo.h> |
kbd_type_t kbd_type = KBD_UNKNOWN; |
#ifdef CONFIG_SUN_KBD |
/** Initialize keyboard. |
* |
* Traverse OpenFirmware device tree in order to find necessary |
* info about the keyboard device. |
* |
* @param node Keyboard device node. |
*/ |
void kbd_init(ofw_tree_node_t *node) |
#ifdef CONFIG_Z8530 |
static bool kbd_z8530_init(ofw_tree_node_t *node) |
{ |
size_t offset; |
uintptr_t aligned_addr; |
ofw_tree_property_t *prop; |
const char *name; |
const char *name = ofw_tree_node_name(node); |
if (str_cmp(name, "zs") != 0) |
return false; |
/* |
* Read 'interrupts' property. |
*/ |
ofw_tree_property_t *prop = ofw_tree_getprop(node, "interrupts"); |
if ((!prop) || (!prop->value)) { |
printf("z8530: Unable to find interrupts property\n"); |
return false; |
} |
uint32_t interrupts = *((uint32_t *) prop->value); |
/* |
* Read 'reg' property. |
*/ |
prop = ofw_tree_getprop(node, "reg"); |
if ((!prop) || (!prop->value)) { |
printf("z8530: Unable to find reg property\n"); |
return false; |
} |
size_t size = ((ofw_fhc_reg_t *) prop->value)->size; |
uintptr_t pa; |
if (!ofw_fhc_apply_ranges(node->parent, |
((ofw_fhc_reg_t *) prop->value), &pa)) { |
printf("z8530: Failed to determine address\n"); |
return false; |
} |
inr_t inr; |
cir_t cir; |
void *cir_arg; |
if (!ofw_fhc_map_interrupt(node->parent, |
((ofw_fhc_reg_t *) prop->value), interrupts, &inr, &cir, |
&cir_arg)) { |
printf("z8530: Failed to determine interrupt\n"); |
return false; |
} |
name = ofw_tree_node_name(node); |
/* |
* Determine keyboard serial controller type. |
* We need to pass aligned address to hw_map(). |
* However, the physical keyboard address can |
* be pretty much unaligned, depending on the |
* underlying controller. |
*/ |
if (strcmp(name, "zs") == 0) |
kbd_type = KBD_Z8530; |
else if (strcmp(name, "su") == 0) |
kbd_type = KBD_NS16550; |
uintptr_t aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE); |
size_t offset = pa - aligned_addr; |
if (kbd_type == KBD_UNKNOWN) { |
printf("Unknown keyboard device.\n"); |
return; |
z8530_t *z8530 = (z8530_t *) |
(hw_map(aligned_addr, offset + size) + offset); |
z8530_instance_t *z8530_instance = z8530_init(z8530, inr, cir, cir_arg); |
if (z8530_instance) { |
kbrd_instance_t *kbrd_instance = kbrd_init(); |
if (kbrd_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *kbrd = kbrd_wire(kbrd_instance, sink); |
z8530_wire(z8530_instance, kbrd); |
} |
} |
/* |
* Read 'interrupts' property. |
* This is the necessary evil until the userspace drivers are |
* entirely self-sufficient. |
*/ |
uint32_t interrupts; |
prop = ofw_tree_getprop(node, "interrupts"); |
if (!prop || !prop->value) |
panic("Can't find \"interrupts\" property.\n"); |
interrupts = *((uint32_t *) prop->value); |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.inr", NULL, inr); |
sysinfo_set_item_val("kbd.address.kernel", NULL, |
(uintptr_t) z8530); |
sysinfo_set_item_val("kbd.address.physical", NULL, pa); |
sysinfo_set_item_val("kbd.type.z8530", NULL, true); |
return true; |
} |
#endif /* CONFIG_Z8530 */ |
#ifdef CONFIG_NS16550 |
static bool kbd_ns16550_init(ofw_tree_node_t *node) |
{ |
const char *name = ofw_tree_node_name(node); |
if (str_cmp(name, "su") != 0) |
return false; |
/* |
* Read 'interrupts' property. |
*/ |
ofw_tree_property_t *prop = ofw_tree_getprop(node, "interrupts"); |
if ((!prop) || (!prop->value)) { |
printf("ns16550: Unable to find interrupts property\n"); |
return false; |
} |
uint32_t interrupts = *((uint32_t *) prop->value); |
/* |
* Read 'reg' property. |
*/ |
prop = ofw_tree_getprop(node, "reg"); |
if (!prop || !prop->value) |
panic("Can't find \"reg\" property.\n"); |
if ((!prop) || (!prop->value)) { |
printf("ns16550: Unable to find reg property\n"); |
return false; |
} |
size_t size = ((ofw_ebus_reg_t *) prop->value)->size; |
uintptr_t pa; |
size_t size; |
if (!ofw_ebus_apply_ranges(node->parent, |
((ofw_ebus_reg_t *) prop->value), &pa)) { |
printf("ns16550: Failed to determine address\n"); |
return false; |
} |
inr_t inr; |
devno_t devno = device_assign_devno(); |
switch (kbd_type) { |
case KBD_Z8530: |
size = ((ofw_fhc_reg_t *) prop->value)->size; |
if (!ofw_fhc_apply_ranges(node->parent, |
((ofw_fhc_reg_t *) prop->value), &pa)) { |
printf("Failed to determine keyboard address.\n"); |
return; |
} |
if (!ofw_fhc_map_interrupt(node->parent, |
((ofw_fhc_reg_t *) prop->value), interrupts, &inr, &cir, |
&cir_arg)) { |
printf("Failed to determine keyboard interrupt.\n"); |
return; |
} |
break; |
case KBD_NS16550: |
size = ((ofw_ebus_reg_t *) prop->value)->size; |
if (!ofw_ebus_apply_ranges(node->parent, |
((ofw_ebus_reg_t *) prop->value), &pa)) { |
printf("Failed to determine keyboard address.\n"); |
return; |
} |
if (!ofw_ebus_map_interrupt(node->parent, |
((ofw_ebus_reg_t *) prop->value), interrupts, &inr, &cir, |
&cir_arg)) { |
printf("Failed to determine keyboard interrupt.\n"); |
return; |
}; |
break; |
default: |
panic("Unexpected type.\n"); |
cir_t cir; |
void *cir_arg; |
if (!ofw_ebus_map_interrupt(node->parent, |
((ofw_ebus_reg_t *) prop->value), interrupts, &inr, &cir, |
&cir_arg)) { |
printf("ns16550: Failed to determine interrupt\n"); |
return false; |
} |
/* |
143,26 → 196,58 |
* be pretty much unaligned, depending on the |
* underlying controller. |
*/ |
aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE); |
offset = pa - aligned_addr; |
uintptr_t vaddr = hw_map(aligned_addr, offset + size) + offset; |
uintptr_t aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE); |
size_t offset = pa - aligned_addr; |
ns16550_t *ns16550 = (ns16550_t *) |
(hw_map(aligned_addr, offset + size) + offset); |
ns16550_instance_t *ns16550_instance = ns16550_init(ns16550, inr, cir, cir_arg); |
if (ns16550_instance) { |
kbrd_instance_t *kbrd_instance = kbrd_init(); |
if (kbrd_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *kbrd = kbrd_wire(kbrd_instance, sink); |
ns16550_wire(ns16550_instance, kbrd); |
} |
} |
/* |
* This is the necessary evil until the userspace drivers are |
* entirely self-sufficient. |
*/ |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.inr", NULL, inr); |
sysinfo_set_item_val("kbd.address.kernel", NULL, |
(uintptr_t) ns16550); |
sysinfo_set_item_val("kbd.address.physical", NULL, pa); |
sysinfo_set_item_val("kbd.type.ns16550", NULL, true); |
return true; |
} |
switch (kbd_type) { |
#endif /* CONFIG_NS16550 */ |
/** Initialize keyboard. |
* |
* Traverse OpenFirmware device tree in order to find necessary |
* info about the keyboard device. |
* |
* @param node Keyboard device node. |
* |
*/ |
void kbd_init(ofw_tree_node_t *node) |
{ |
#ifdef CONFIG_Z8530 |
case KBD_Z8530: |
z8530_init(devno, vaddr, inr, cir, cir_arg); |
break; |
kbd_z8530_init(node); |
#endif |
#ifdef CONFIG_NS16550 |
case KBD_NS16550: |
ns16550_init(devno, (ioport_t)vaddr, inr, cir, cir_arg); |
break; |
kbd_ns16550_init(node); |
#endif |
default: |
printf("Kernel is not compiled with the necessary keyboard " |
"driver this machine requires.\n"); |
} |
} |
#endif /* CONFIG_SUN_KBD */ |
/** @} |
*/ |
//branches/tracing/kernel/arch/sparc64/src/drivers/scr.c |
---|
37,7 → 37,7 |
#include <genarch/fb/fb.h> |
#include <genarch/fb/visuals.h> |
#include <arch/types.h> |
#include <func.h> |
#include <string.h> |
#include <align.h> |
#include <print.h> |
63,13 → 63,13 |
name = ofw_tree_node_name(node); |
if (strcmp(name, "SUNW,m64B") == 0) |
if (str_cmp(name, "SUNW,m64B") == 0) |
scr_type = SCR_ATYFB; |
else if (strcmp(name, "SUNW,XVR-100") == 0) |
else if (str_cmp(name, "SUNW,XVR-100") == 0) |
scr_type = SCR_XVR; |
else if (strcmp(name, "SUNW,ffb") == 0) |
else if (str_cmp(name, "SUNW,ffb") == 0) |
scr_type = SCR_FFB; |
else if (strcmp(name, "cgsix") == 0) |
else if (str_cmp(name, "cgsix") == 0) |
scr_type = SCR_CGSIX; |
if (scr_type == SCR_UNKNOWN) { |
104,7 → 104,7 |
prop = ofw_tree_getprop(node, "reg"); |
if (!prop) |
panic("Can't find \"reg\" property.\n"); |
panic("Cannot find 'reg' property."); |
switch (scr_type) { |
case SCR_ATYFB: |
223,7 → 223,7 |
break; |
default: |
panic("Unexpected type.\n"); |
panic("Unexpected type."); |
} |
fb_properties_t props = { |
237,5 → 237,10 |
fb_init(&props); |
} |
void scr_redraw(void) |
{ |
fb_redraw(); |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/sparc64/src/drivers/sgcn.c |
---|
31,25 → 31,25 |
*/ |
/** |
* @file |
* @brief SGCN driver. |
* @brief SGCN driver. |
*/ |
#include <arch.h> |
#include <arch/drivers/sgcn.h> |
#include <arch/drivers/kbd.h> |
#include <genarch/ofw/ofw_tree.h> |
#include <debug.h> |
#include <func.h> |
#include <string.h> |
#include <print.h> |
#include <mm/page.h> |
#include <ipc/irq.h> |
#include <ddi/ddi.h> |
#include <ddi/device.h> |
#include <proc/thread.h> |
#include <console/chardev.h> |
#include <console/console.h> |
#include <ddi/device.h> |
#include <sysinfo/sysinfo.h> |
#include <synch/spinlock.h> |
#define POLL_INTERVAL 10000 |
/* |
* Physical address at which the SBBC starts. This value has been obtained |
* by inspecting (using Simics) memory accesses made by OBP. It is valid |
73,7 → 73,7 |
* that the OBP console buffer is not the only console buffer |
* which can be used. It is, however, used because when the kernel |
* is running, the OBP buffer is not used by OBP any more but OBP |
* has already made neccessary arangements so that the output will |
* has already made necessary arrangements so that the output will |
* be read from the OBP buffer and input will go to the OBP buffer. |
* Therefore HelenOS needs to make no such arrangements any more. |
*/ |
82,16 → 82,6 |
/* magic string contained at the beginning of the console buffer */ |
#define SGCN_BUFFER_MAGIC "CON" |
/** |
* The driver is polling based, but in order to notify the userspace |
* of a key being pressed, we need to supply the interface with some |
* interrupt number. The interrupt number can be arbitrary as it it |
* will never be used for identifying HW interrupts, but only in |
* notifying the userspace. |
*/ |
#define FICTIONAL_INR 1 |
/* |
* Returns a pointer to the object of a given type which is placed at the given |
* offset from the SRAM beginning. |
106,14 → 96,11 |
* offset from the console buffer beginning. |
*/ |
#define SGCN_BUFFER(type, offset) \ |
((type *) (sgcn_buffer_begin + (offset))) |
((type *) (sgcn_buffer_begin + (offset))) |
/** Returns a pointer to the console buffer header. */ |
#define SGCN_BUFFER_HEADER (SGCN_BUFFER(sgcn_buffer_header_t, 0)) |
/** defined in drivers/kbd.c */ |
extern kbd_type_t kbd_type; |
/** starting address of SRAM, will be set by the init_sram_begin function */ |
static uintptr_t sram_begin; |
123,14 → 110,9 |
*/ |
static uintptr_t sgcn_buffer_begin; |
/** |
* SGCN IRQ structure. So far used only for notifying the userspace of the |
* key being pressed, not for kernel being informed about keyboard interrupts. |
*/ |
static irq_t sgcn_irq; |
/* true iff the kernel driver should ignore pressed keys */ |
static bool kbd_disabled; |
// TODO think of a way how to synchronize accesses to SGCN buffer between the kernel and the userspace |
/* |
* Ensures that writing to the buffer and consequent update of the write pointer |
* are together one atomic operation. |
145,38 → 127,23 |
/* functions referenced from definitions of I/O operations structures */ |
static void sgcn_noop(chardev_t *); |
static void sgcn_putchar(chardev_t *, const char); |
static char sgcn_key_read(chardev_t *); |
static void sgcn_putchar(outdev_t *, const wchar_t, bool); |
/** character device operations */ |
static chardev_operations_t sgcn_ops = { |
.suspend = sgcn_noop, |
.resume = sgcn_noop, |
.read = sgcn_key_read, |
/** SGCN output device operations */ |
static outdev_operations_t sgcnout_ops = { |
.write = sgcn_putchar |
}; |
/** SGCN character device */ |
chardev_t sgcn_io; |
static outdev_t sgcnout; /**< SGCN output device. */ |
/** |
* Registers the physical area of the SRAM so that the userspace SGCN |
* driver can map it. Moreover, it sets some sysinfo values (SRAM address |
* and SRAM size). |
* Set some sysinfo values (SRAM address and SRAM size). |
*/ |
static void register_sram_parea(uintptr_t sram_begin_physical) |
static void register_sram(uintptr_t sram_begin_physical) |
{ |
static parea_t sram_parea; |
sram_parea.pbase = sram_begin_physical; |
sram_parea.vbase = (uintptr_t) sram_begin; |
sram_parea.frames = MAPPED_AREA_SIZE / FRAME_SIZE; |
sram_parea.cacheable = false; |
ddi_parea_register(&sram_parea); |
sysinfo_set_item_val("sram.area.size", NULL, MAPPED_AREA_SIZE); |
sysinfo_set_item_val("sram.address.physical", NULL, |
sram_begin_physical); |
sram_begin_physical); |
} |
/** |
187,9 → 154,6 |
* property of the "/chosen" OBP node. The sram_begin variable will |
* be set to the virtual address which maps to the SRAM physical |
* address. |
* |
* It also registers the physical area of SRAM and sets some sysinfo |
* values (SRAM address and SRAM size). |
*/ |
static void init_sram_begin(void) |
{ |
199,19 → 163,19 |
chosen = ofw_tree_lookup("/chosen"); |
if (!chosen) |
panic("Can't find /chosen.\n"); |
panic("Cannot find '/chosen'."); |
iosram_toc = ofw_tree_getprop(chosen, "iosram-toc"); |
if (!iosram_toc) |
panic("Can't find property \"iosram-toc\".\n"); |
panic("Cannot find property 'iosram-toc'."); |
if (!iosram_toc->value) |
panic("Can't find SRAM TOC.\n"); |
panic("Cannot find SRAM TOC."); |
sram_begin_physical = SBBC_START + SBBC_SRAM_OFFSET |
+ *((uint32_t *) iosram_toc->value); |
+ *((uint32_t *) iosram_toc->value); |
sram_begin = hw_map(sram_begin_physical, MAPPED_AREA_SIZE); |
register_sram_parea(sram_begin_physical); |
register_sram(sram_begin_physical); |
} |
/** |
227,14 → 191,19 |
*/ |
static void sgcn_buffer_begin_init(void) |
{ |
static bool initialized; |
if (initialized) |
return; |
init_sram_begin(); |
ASSERT(strcmp(SRAM_TOC->magic, SRAM_TOC_MAGIC) == 0); |
ASSERT(str_cmp(SRAM_TOC->magic, SRAM_TOC_MAGIC) == 0); |
/* lookup TOC entry with the correct key */ |
uint32_t i; |
for (i = 0; i < MAX_TOC_ENTRIES; i++) { |
if (strcmp(SRAM_TOC->keys[i].key, CONSOLE_KEY) == 0) |
if (str_cmp(SRAM_TOC->keys[i].key, CONSOLE_KEY) == 0) |
break; |
} |
ASSERT(i < MAX_TOC_ENTRIES); |
242,17 → 211,12 |
sgcn_buffer_begin = sram_begin + SRAM_TOC->keys[i].offset; |
sysinfo_set_item_val("sram.buffer.offset", NULL, |
SRAM_TOC->keys[i].offset); |
SRAM_TOC->keys[i].offset); |
initialized = true; |
} |
/** |
* Default suspend/resume operation for the input device. |
*/ |
static void sgcn_noop(chardev_t *d) |
{ |
} |
/** |
* Writes a single character to the SGCN (circular) output buffer |
* and updates the output write pointer so that SGCN gets to know |
* that the character has been written. |
265,7 → 229,7 |
/* we need pointers to volatile variables */ |
volatile char *buf_ptr = (volatile char *) |
SGCN_BUFFER(char, SGCN_BUFFER_HEADER->out_wrptr); |
SGCN_BUFFER(char, SGCN_BUFFER_HEADER->out_wrptr); |
volatile uint32_t *out_wrptr_ptr = &(SGCN_BUFFER_HEADER->out_wrptr); |
volatile uint32_t *out_rdptr_ptr = &(SGCN_BUFFER_HEADER->out_rdptr); |
291,66 → 255,31 |
} |
/** |
* SGCN output operation. Prints a single character to the SGCN. If the line |
* feed character is written ('\n'), the carriage return character ('\r') is |
* written straight away. |
* SGCN output operation. Prints a single character to the SGCN. Newline |
* character is converted to CRLF. |
*/ |
static void sgcn_putchar(struct chardev * cd, const char c) |
static void sgcn_putchar(outdev_t *od, const wchar_t ch, bool silent) |
{ |
spinlock_lock(&sgcn_output_lock); |
sgcn_do_putchar(c); |
if (c == '\n') { |
sgcn_do_putchar('\r'); |
if (!silent) { |
spinlock_lock(&sgcn_output_lock); |
if (ascii_check(ch)) { |
if (ch == '\n') |
sgcn_do_putchar('\r'); |
sgcn_do_putchar(ch); |
} else |
sgcn_do_putchar(U_SPECIAL); |
spinlock_unlock(&sgcn_output_lock); |
} |
spinlock_unlock(&sgcn_output_lock); |
} |
/** |
* Called when actively reading the character. Not implemented yet. |
*/ |
static char sgcn_key_read(chardev_t *d) |
{ |
return (char) 0; |
} |
/** |
* The driver works in polled mode, so no interrupt should be handled by it. |
*/ |
static irq_ownership_t sgcn_claim(void) |
{ |
return IRQ_DECLINE; |
} |
/** |
* The driver works in polled mode, so no interrupt should be handled by it. |
*/ |
static void sgcn_irq_handler(irq_t *irq, void *arg, ...) |
{ |
panic("Not yet implemented, SGCN works in polled mode.\n"); |
} |
/** |
* Grabs the input for kernel. |
*/ |
void sgcn_grab(void) |
{ |
ipl_t ipl = interrupts_disable(); |
volatile uint32_t *in_wrptr_ptr = &(SGCN_BUFFER_HEADER->in_wrptr); |
volatile uint32_t *in_rdptr_ptr = &(SGCN_BUFFER_HEADER->in_rdptr); |
/* skip all the user typed before the grab and hasn't been processed */ |
spinlock_lock(&sgcn_input_lock); |
*in_rdptr_ptr = *in_wrptr_ptr; |
spinlock_unlock(&sgcn_input_lock); |
spinlock_lock(&sgcn_irq.lock); |
sgcn_irq.notif_cfg.notify = false; |
spinlock_unlock(&sgcn_irq.lock); |
interrupts_restore(ipl); |
kbd_disabled = false; |
} |
/** |
358,12 → 287,7 |
*/ |
void sgcn_release(void) |
{ |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&sgcn_irq.lock); |
if (sgcn_irq.notif_cfg.answerbox) |
sgcn_irq.notif_cfg.notify = true; |
spinlock_unlock(&sgcn_irq.lock); |
interrupts_restore(ipl); |
kbd_disabled = true; |
} |
/** |
371,79 → 295,92 |
* there are some unread characters in the input queue. If so, it picks them up |
* and sends them to the upper layers of HelenOS. |
*/ |
void sgcn_poll(void) |
static void sgcn_poll(sgcn_instance_t *instance) |
{ |
uint32_t begin = SGCN_BUFFER_HEADER->in_begin; |
uint32_t end = SGCN_BUFFER_HEADER->in_end; |
uint32_t size = end - begin; |
if (kbd_disabled) |
return; |
spinlock_lock(&sgcn_input_lock); |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&sgcn_irq.lock); |
/* we need pointers to volatile variables */ |
volatile char *buf_ptr = (volatile char *) |
SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr); |
SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr); |
volatile uint32_t *in_wrptr_ptr = &(SGCN_BUFFER_HEADER->in_wrptr); |
volatile uint32_t *in_rdptr_ptr = &(SGCN_BUFFER_HEADER->in_rdptr); |
if (*in_rdptr_ptr != *in_wrptr_ptr) { |
if (sgcn_irq.notif_cfg.notify && sgcn_irq.notif_cfg.answerbox) { |
ipc_irq_send_notif(&sgcn_irq); |
spinlock_unlock(&sgcn_irq.lock); |
interrupts_restore(ipl); |
spinlock_unlock(&sgcn_input_lock); |
return; |
} |
} |
spinlock_unlock(&sgcn_irq.lock); |
interrupts_restore(ipl); |
while (*in_rdptr_ptr != *in_wrptr_ptr) { |
buf_ptr = (volatile char *) |
SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr); |
SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr); |
char c = *buf_ptr; |
*in_rdptr_ptr = (((*in_rdptr_ptr) - begin + 1) % size) + begin; |
if (c == '\r') { |
c = '\n'; |
} |
chardev_push_character(&sgcn_io, c); |
indev_push_character(instance->srlnin, c); |
} |
spinlock_unlock(&sgcn_input_lock); |
} |
/** |
* A public function which initializes I/O from/to Serengeti console |
* and sets it as a default input/output. |
* Polling thread function. |
*/ |
void sgcn_init(void) |
static void ksgcnpoll(void *instance) { |
while (1) { |
if (!silent) |
sgcn_poll(instance); |
thread_usleep(POLL_INTERVAL); |
} |
} |
/** |
* A public function which initializes input from the Serengeti console. |
*/ |
sgcn_instance_t *sgcnin_init(void) |
{ |
sgcn_buffer_begin_init(); |
sgcn_instance_t *instance = |
malloc(sizeof(sgcn_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->srlnin = NULL; |
instance->thread = thread_create(ksgcnpoll, instance, TASK, 0, |
"ksgcnpoll", true); |
if (!instance->thread) { |
free(instance); |
return NULL; |
} |
} |
return instance; |
} |
kbd_type = KBD_SGCN; |
void sgcnin_wire(sgcn_instance_t *instance, indev_t *srlnin) |
{ |
ASSERT(instance); |
ASSERT(srlnin); |
devno_t devno = device_assign_devno(); |
irq_initialize(&sgcn_irq); |
sgcn_irq.devno = devno; |
sgcn_irq.inr = FICTIONAL_INR; |
sgcn_irq.claim = sgcn_claim; |
sgcn_irq.handler = sgcn_irq_handler; |
irq_register(&sgcn_irq); |
instance->srlnin = srlnin; |
thread_ready(instance->thread); |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.type", NULL, KBD_SGCN); |
sysinfo_set_item_val("kbd.devno", NULL, devno); |
sysinfo_set_item_val("kbd.inr", NULL, FICTIONAL_INR); |
} |
/** |
* A public function which initializes output to the Serengeti console. |
*/ |
void sgcnout_init(void) |
{ |
sgcn_buffer_begin_init(); |
sysinfo_set_item_val("fb.kind", NULL, 4); |
chardev_initialize("sgcn_io", &sgcn_io, &sgcn_ops); |
stdin = &sgcn_io; |
stdout = &sgcn_io; |
outdev_initialize("sgcnout", &sgcnout, &sgcnout_ops); |
stdout = &sgcnout; |
} |
/** @} |
//branches/tracing/kernel/arch/sparc64/src/drivers/pci.c |
---|
42,8 → 42,9 |
#include <arch/types.h> |
#include <debug.h> |
#include <print.h> |
#include <func.h> |
#include <string.h> |
#include <arch/asm.h> |
#include <sysinfo/sysinfo.h> |
#define SABRE_INTERNAL_REG 0 |
#define PSYCHO_INTERNAL_REG 2 |
108,6 → 109,12 |
pci->op = &pci_sabre_ops; |
pci->reg = (uint64_t *) hw_map(paddr, reg[SABRE_INTERNAL_REG].size); |
/* |
* Set sysinfo data needed by the uspace OBIO driver. |
*/ |
sysinfo_set_item_val("obio.base.physical", NULL, paddr); |
sysinfo_set_item_val("kbd.cir.obio", NULL, 1); |
return pci; |
} |
149,6 → 156,12 |
pci->op = &pci_psycho_ops; |
pci->reg = (uint64_t *) hw_map(paddr, reg[PSYCHO_INTERNAL_REG].size); |
/* |
* Set sysinfo data needed by the uspace OBIO driver. |
*/ |
sysinfo_set_item_val("obio.base.physical", NULL, paddr); |
sysinfo_set_item_val("kbd.cir.obio", NULL, 1); |
return pci; |
} |
170,7 → 183,7 |
/* |
* First, verify this is a PCI node. |
*/ |
ASSERT(strcmp(ofw_tree_node_name(node), "pci") == 0); |
ASSERT(str_cmp(ofw_tree_node_name(node), "pci") == 0); |
/* |
* Determine PCI controller model. |
179,13 → 192,13 |
if (!prop || !prop->value) |
return NULL; |
if (strcmp(prop->value, "SUNW,sabre") == 0) { |
if (str_cmp(prop->value, "SUNW,sabre") == 0) { |
/* |
* PCI controller Sabre. |
* This model is found on UltraSPARC IIi based machines. |
*/ |
return pci_sabre_init(node); |
} else if (strcmp(prop->value, "SUNW,psycho") == 0) { |
} else if (str_cmp(prop->value, "SUNW,psycho") == 0) { |
/* |
* PCI controller Psycho. |
* Used on UltraSPARC II based processors, for instance, |
//branches/tracing/kernel/arch/sparc64/src/start.S |
---|
84,7 → 84,7 |
! l5 <= physmem_base[(PHYSMEM_ADDR_SIZE - 1):13] |
sllx %l5, 13 + (63 - (PHYSMEM_ADDR_SIZE - 1)), %l5 |
srlx %l5, 63 - (PHYSMEM_ADDR_SIZE - 1), %l5 |
/* |
* Setup basic runtime environment. |
*/ |
294,7 → 294,7 |
/* Not reached. */ |
0: |
ba 0b |
ba %xcc, 0b |
nop |
333,7 → 333,7 |
2: |
ldx [%g2], %g3 |
cmp %g3, %g1 |
bne 2b |
bne %xcc, 2b |
nop |
/* |
352,7 → 352,7 |
#endif |
0: |
ba 0b |
ba %xcc, 0b |
nop |
381,10 → 381,31 |
.quad 0 |
/* |
* This variable is used by the fast_data_MMU_miss trap handler. In runtime, it |
* is further modified to reflect the starting address of physical memory. |
* The fast_data_access_mmu_miss_data_hi label and the end_of_identity and |
* kernel_8k_tlb_data_template variables are meant to stay together, |
* aligned on 16B boundary. |
*/ |
.global fast_data_access_mmu_miss_data_hi |
.global end_of_identity |
.global kernel_8k_tlb_data_template |
.align 16 |
/* |
* This label is used by the fast_data_access_MMU_miss trap handler. |
*/ |
fast_data_access_mmu_miss_data_hi: |
/* |
* This variable is used by the fast_data_access_MMU_miss trap handler. |
* In runtime, it is modified to contain the address of the end of physical |
* memory. |
*/ |
end_of_identity: |
.quad -1 |
/* |
* This variable is used by the fast_data_access_MMU_miss trap handler. |
* In runtime, it is further modified to reflect the starting address of |
* physical memory. |
*/ |
kernel_8k_tlb_data_template: |
#ifdef CONFIG_VIRT_IDX_DCACHE |
.quad ((1 << TTE_V_SHIFT) | (PAGESIZE_8K << TTE_SIZE_SHIFT) | TTE_CP | \ |
//branches/tracing/kernel/arch/ia64/include/ski/ski.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia64/include/interrupt.h |
---|
53,10 → 53,10 |
#define VECTOR_TLB_SHOOTDOWN_IPI 0xf0 |
#define INTERRUPT_TIMER 255 |
#define IRQ_KBD (0x01+LAGACY_INTERRUPT_BASE) |
#define IRQ_MOUSE (0x0c+LAGACY_INTERRUPT_BASE) |
#define IRQ_KBD (0x01 + LEGACY_INTERRUPT_BASE) |
#define IRQ_MOUSE (0x0c + LEGACY_INTERRUPT_BASE) |
#define INTERRUPT_SPURIOUS 15 |
#define LAGACY_INTERRUPT_BASE 0x20 |
#define LEGACY_INTERRUPT_BASE 0x20 |
/** General Exception codes. */ |
#define GE_ILLEGALOP 0 |
117,7 → 117,7 |
/* |
* The following variables are defined only for break_instruction |
* handler. |
* handler. |
*/ |
uint64_t in0; |
uint64_t in1; |
153,6 → 153,7 |
extern void external_interrupt(uint64_t vector, istate_t *istate); |
extern void disabled_fp_register(uint64_t vector, istate_t *istate); |
extern void trap_virtual_enable_irqs(uint16_t irqmask); |
#endif |
//branches/tracing/kernel/arch/ia64/include/fpu_context.h |
---|
35,7 → 35,6 |
#ifndef KERN_ia64_FPU_CONTEXT_H_ |
#define KERN_ia64_FPU_CONTEXT_H_ |
#define ARCH_HAS_FPU 1 |
#define FPU_CONTEXT_ALIGN 16 |
#include <arch/types.h> |
//branches/tracing/kernel/arch/ia64/include/types.h |
---|
65,6 → 65,11 |
typedef uint64_t unative_t; |
typedef int64_t native_t; |
typedef struct { |
unative_t fnc; |
unative_t gp; |
} fncptr_t; |
#define PRIp "lx" /**< Format for uintptr_t. */ |
#define PRIs "lu" /**< Format for size_t. */ |
#define PRIc "lu" /**< Format for count_t. */ |
//branches/tracing/kernel/arch/ia64/include/atomic.h |
---|
37,16 → 37,17 |
/** Atomic addition. |
* |
* @param val Atomic value. |
* @param imm Value to add. |
* @param val Atomic value. |
* @param imm Value to add. |
* |
* @return Value before addition. |
* @return Value before addition. |
*/ |
static inline long atomic_add(atomic_t *val, int imm) |
{ |
long v; |
asm volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v), "+m" (val->count) : "i" (imm)); |
asm volatile ("fetchadd8.rel %0 = %1, %2\n" : "=r" (v), |
"+m" (val->count) : "i" (imm)); |
return v; |
} |
56,9 → 57,9 |
uint64_t v; |
asm volatile ( |
"movl %0=0x01;;\n" |
"xchg8 %0=%1,%0;;\n" |
: "=r" (v),"+m" (val->count) |
"movl %0 = 0x01;;\n" |
"xchg8 %0 = %1, %0;;\n" |
: "=r" (v), "+m" (val->count) |
); |
return v; |
65,15 → 66,36 |
} |
static inline void atomic_inc(atomic_t *val) { atomic_add(val, 1); } |
static inline void atomic_dec(atomic_t *val) { atomic_add(val, -1); } |
static inline void atomic_inc(atomic_t *val) |
{ |
atomic_add(val, 1); |
} |
static inline long atomic_preinc(atomic_t *val) { return atomic_add(val, 1) + 1; } |
static inline long atomic_predec(atomic_t *val) { return atomic_add(val, -1) - 1; } |
static inline void atomic_dec(atomic_t *val) |
{ |
atomic_add(val, -1); |
} |
static inline long atomic_postinc(atomic_t *val) { return atomic_add(val, 1); } |
static inline long atomic_postdec(atomic_t *val) { return atomic_add(val, -1); } |
static inline long atomic_preinc(atomic_t *val) |
{ |
return atomic_add(val, 1) + 1; |
} |
static inline long atomic_predec(atomic_t *val) |
{ |
return atomic_add(val, -1) - 1; |
} |
static inline long atomic_postinc(atomic_t *val) |
{ |
return atomic_add(val, 1); |
} |
static inline long atomic_postdec(atomic_t *val) |
{ |
return atomic_add(val, -1); |
} |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia64/include/proc/task.h |
---|
43,7 → 43,7 |
} task_arch_t; |
#define task_create_arch(t) {(t)->arch.iomap=NULL;} |
#define task_create_arch(t) { (t)->arch.iomap = NULL; } |
#define task_destroy_arch(t) |
#endif |
//branches/tracing/kernel/arch/ia64/include/arch.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia64 |
/** @addtogroup ia64 |
* @{ |
*/ |
/** @file |
37,8 → 37,10 |
#define LOADED_PROG_STACK_PAGES_NO 2 |
#include <arch/ski/ski.h> |
#include <arch/drivers/ski.h> |
extern void arch_pre_main(void); |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia64/include/bootinfo.h |
---|
39,10 → 39,13 |
#define EFI_MEMMAP_IO 1 |
#define EFI_MEMMAP_IO_PORTS 2 |
/** Size of buffer for storing task name in binit_task_t. */ |
#define BOOTINFO_TASK_NAME_BUFLEN 32 |
typedef struct { |
void *addr; |
unsigned long size; |
char name[BOOTINFO_TASK_NAME_BUFLEN]; |
} binit_task_t; |
typedef struct { |
68,7 → 71,6 |
unsigned long freq_scale; |
unsigned int wakeup_intno; |
int hello_configured; |
} bootinfo_t; |
extern bootinfo_t *bootinfo; |
//branches/tracing/kernel/arch/ia64/include/asm.h |
---|
36,59 → 36,72 |
#define KERN_ia64_ASM_H_ |
#include <config.h> |
#include <typedefs.h> |
#include <arch/types.h> |
#include <arch/register.h> |
typedef uint64_t ioport_t; |
#define IA64_IOSPACE_ADDRESS 0xE001000000000000ULL |
static inline void outb(ioport_t port,uint8_t v) |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
uintptr_t prt = (uintptr_t) port; |
*((ioport8_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
asm volatile ("mf\n" ::: "memory"); |
} |
static inline void outw(ioport_t port,uint16_t v) |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
uintptr_t prt = (uintptr_t) port; |
*((ioport16_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
asm volatile ("mf\n" ::: "memory"); |
} |
static inline void outl(ioport_t port,uint32_t v) |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
uintptr_t prt = (uintptr_t) port; |
*((ioport32_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
asm volatile ("mf\n" ::: "memory"); |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
uintptr_t prt = (uintptr_t) port; |
static inline uint8_t inb(ioport_t port) |
{ |
asm volatile ("mf\n" ::: "memory"); |
return *((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))); |
return *((ioport8_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))); |
} |
static inline uint16_t inw(ioport_t port) |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
uintptr_t prt = (uintptr_t) port; |
asm volatile ("mf\n" ::: "memory"); |
return *((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xffE) | ( (port >> 2) << 12 )))); |
return *((ioport16_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))); |
} |
static inline uint32_t inl(ioport_t port) |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
uintptr_t prt = (uintptr_t) port; |
asm volatile ("mf\n" ::: "memory"); |
return *((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))); |
return *((ioport32_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))); |
} |
/** Return base address of current stack |
* |
* Return the base address of the current stack. |
342,7 → 355,8 |
extern void cpu_sleep(void); |
extern void asm_delay_loop(uint32_t t); |
extern void switch_to_userspace(uintptr_t entry, uintptr_t sp, uintptr_t bsp, uintptr_t uspace_uarg, uint64_t ipsr, uint64_t rsc); |
extern void switch_to_userspace(uintptr_t, uintptr_t, uintptr_t, uintptr_t, |
uint64_t, uint64_t); |
#endif |
//branches/tracing/kernel/arch/ia64/include/mm/frame.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia64mm |
/** @addtogroup ia64mm |
* @{ |
*/ |
/** @file |
35,12 → 35,16 |
#ifndef KERN_ia64_FRAME_H_ |
#define KERN_ia64_FRAME_H_ |
#define FRAME_WIDTH 14 /* 16K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#define FRAME_WIDTH 14 /* 16K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#ifdef KERNEL |
#ifndef __ASM__ |
#include <arch/types.h> |
extern uintptr_t last_frame; |
extern void frame_arch_init(void); |
#define physmem_print() |
//branches/tracing/kernel/arch/ia64/include/mm/page.h |
---|
51,22 → 51,20 |
#define USPACE_IO_PAGE_WIDTH 12 /* 4K */ |
/* |
* Statically mapped IO spaces - offsets to 0xe...00 of virtual addresses |
* because of "minimal virtual bits implemented is 51" it is possible to |
* have values up to 0x0007000000000000 |
*/ |
/** Staticly mapped IO spaces - offsets to 0xe...00 of virtual adresses |
becauce of "minimal virtual bits implemented is 51" |
it is possible to have here values up to 0x0007000000000000 |
*/ |
/* Firmware area (bellow 4GB in phys mem) */ |
#define FW_OFFSET 0x00000000F0000000 |
/* Legacy IO space */ |
#define IO_OFFSET 0x0001000000000000 |
/* Videoram - now mapped to 0 as VGA text mode vram on 0xb8000*/ |
/* Videoram - now mapped to 0 as VGA text mode vram on 0xb8000 */ |
#define VIO_OFFSET 0x0002000000000000 |
#define PPN_SHIFT 12 |
#define VRN_SHIFT 61 |
81,8 → 79,8 |
#define REGION_REGISTERS 8 |
#define KA2PA(x) ((uintptr_t) (x-(VRN_KERNEL<<VRN_SHIFT))) |
#define PA2KA(x) ((uintptr_t) (x+(VRN_KERNEL<<VRN_SHIFT))) |
#define KA2PA(x) ((uintptr_t) (x - (VRN_KERNEL << VRN_SHIFT))) |
#define PA2KA(x) ((uintptr_t) (x + (VRN_KERNEL << VRN_SHIFT))) |
#define VHPT_WIDTH 20 /* 1M */ |
#define VHPT_SIZE (1 << VHPT_WIDTH) |
//branches/tracing/kernel/arch/ia64/include/mm/tlb.h |
---|
35,9 → 35,6 |
#ifndef KERN_ia64_TLB_H_ |
#define KERN_ia64_TLB_H_ |
#define tlb_arch_init() |
#define tlb_print() |
#include <arch/mm/page.h> |
#include <arch/mm/asid.h> |
#include <arch/interrupt.h> |
//branches/tracing/kernel/arch/ia64/include/mm/vhpt.h |
---|
44,8 → 44,8 |
{ |
vhpt_entry_t ventry; |
ventry.word[0]=tentry.word[0]; |
ventry.word[1]=tentry.word[1]; |
ventry.word[0] = tentry.word[0]; |
ventry.word[1] = tentry.word[1]; |
return ventry; |
} |
//branches/tracing/kernel/arch/ia64/include/register.h |
---|
40,11 → 40,11 |
#define PSR_I_MASK 0x4000 |
#define PSR_PK_MASK 0x8000 |
#define PSR_DT_MASK (1<<17) |
#define PSR_RT_MASK (1<<27) |
#define PSR_DT_MASK (1 << 17) |
#define PSR_RT_MASK (1 << 27) |
#define PSR_DFL_MASK (1<<18) |
#define PSR_DFH_MASK (1<<19) |
#define PSR_DFL_MASK (1 << 18) |
#define PSR_DFH_MASK (1 << 19) |
#define PSR_IT_MASK 0x0000001000000000 |
//branches/tracing/kernel/arch/ia64/include/debug.h |
---|
1,5 → 1,5 |
/* |
* Copyright (c) 2005 |
* Copyright (c) 2005 Ondrej Palkovsky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
//branches/tracing/kernel/arch/ia64/include/cpu.h |
---|
83,16 → 83,13 |
} |
static inline void ipi_send_ipi(int id,int eid,int intno) |
static inline void ipi_send_ipi(int id, int eid, int intno) |
{ |
(bootinfo->sapic)[2*(id*256+eid)]=intno; |
(bootinfo->sapic)[2 * (id * 256 + eid)] = intno; |
srlz_d(); |
} |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia64/include/drivers/i8042.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia64/include/drivers/ega.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia64/include/drivers/kbd.h |
---|
35,13 → 35,11 |
#ifndef KERN_ia64_KBD_H_ |
#define KERN_ia64_KBD_H_ |
#define KBD_UNKNOWN 0 |
#define KBD_SKI 1 |
#define KBD_LEGACY 2 |
#define KBD_NS16550 3 |
#define KBD_UNKNOWN 0 |
#define KBD_SKI 1 |
#define KBD_LEGACY 2 |
#define KBD_NS16550 3 |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia64/include/drivers/ski.h |
---|
0,0 → 1,56 |
/* |
* Copyright (c) 2005 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia64 |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KERN_ia64_SKI_H_ |
#define KERN_ia64_SKI_H_ |
#include <console/chardev.h> |
#include <proc/thread.h> |
typedef struct { |
thread_t *thread; |
indev_t *srlnin; |
} ski_instance_t; |
extern void skiout_init(void); |
extern ski_instance_t *skiin_init(void); |
extern void skiin_wire(ski_instance_t *, indev_t *); |
extern void ski_kbd_grab(void); |
extern void ski_kbd_release(void); |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia64/Makefile.inc |
---|
29,10 → 29,6 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
BFD_NAME = elf64-little |
BFD_ARCH = ia64-elf64 |
TARGET = ia64-pc-linux-gnu |
45,61 → 41,34 |
LFLAGS += -EL |
AFLAGS += -mconstant-gp |
DEFS += -D__64_BITS__ -D$(MACHINE) |
DEFS += -D__64_BITS__ |
## Compile with page hash table support. |
# |
CONFIG_PAGE_HT = y |
DEFS += -DCONFIG_PAGE_HT |
## Compile with support for address space identifiers. |
# |
CONFIG_ASID = y |
CONFIG_ASID_FIFO = y |
## Compile with support for software integer division. |
# |
CONFIG_SOFTINT = y |
ARCH_SOURCES = \ |
arch/$(ARCH)/src/start.S \ |
arch/$(ARCH)/src/asm.S \ |
arch/$(ARCH)/src/dummy.s \ |
arch/$(ARCH)/src/ia64.c \ |
arch/$(ARCH)/src/fpu_context.c \ |
arch/$(ARCH)/src/context.S \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/ivt.S \ |
arch/$(ARCH)/src/interrupt.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/mm/vhpt.c \ |
arch/$(ARCH)/src/proc/scheduler.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/smp/smp.c \ |
arch/$(ARCH)/src/drivers/it.c |
arch/$(KARCH)/src/start.S \ |
arch/$(KARCH)/src/asm.S \ |
arch/$(KARCH)/src/dummy.s \ |
arch/$(KARCH)/src/ia64.c \ |
arch/$(KARCH)/src/fpu_context.c \ |
arch/$(KARCH)/src/context.S \ |
arch/$(KARCH)/src/cpu/cpu.c \ |
arch/$(KARCH)/src/ivt.S \ |
arch/$(KARCH)/src/interrupt.c \ |
arch/$(KARCH)/src/mm/as.c \ |
arch/$(KARCH)/src/mm/frame.c \ |
arch/$(KARCH)/src/mm/page.c \ |
arch/$(KARCH)/src/mm/tlb.c \ |
arch/$(KARCH)/src/mm/vhpt.c \ |
arch/$(KARCH)/src/proc/scheduler.c \ |
arch/$(KARCH)/src/ddi/ddi.c \ |
arch/$(KARCH)/src/smp/smp.c \ |
arch/$(KARCH)/src/drivers/it.c |
ifeq ($(MACHINE),ski) |
ARCH_SOURCES += arch/$(ARCH)/src/ski/ski.c |
DEFS += -DSKI |
# BFD = elf64-ia64-little |
ARCH_SOURCES += arch/$(KARCH)/src/drivers/ski.c |
BFD = binary |
endif |
ifeq ($(MACHINE),i460GX) |
ARCH_SOURCES += arch/$(ARCH)/src/drivers/ega.c |
CONFIG_I8042 = y |
DEFS += -DI460GX -DCONFIG_I8042 |
DEFS += -DI460GX |
BFD = binary |
endif |
ifeq ($(CONFIG_SMP),y) |
DEFS += -DCONFIG_SMP |
endif |
//branches/tracing/kernel/arch/ia64/src/ski/ski.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia64/src/putchar.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia64/src/fpu_context.c |
---|
149,8 → 149,10 |
"stf.spill [%7] = f127, 0x80\n;;" |
: |
: "r" (&((fctx->fr)[0])), "r" (&((fctx->fr)[1])), "r" (&((fctx->fr)[2])), "r" (&((fctx->fr)[3])), |
"r" (&((fctx->fr)[4])), "r" (&((fctx->fr)[5])), "r" (&((fctx->fr)[6])), "r" (&((fctx->fr)[7])) |
: "r" (&((fctx->fr)[0])), "r" (&((fctx->fr)[1])), |
"r" (&((fctx->fr)[2])), "r" (&((fctx->fr)[3])), |
"r" (&((fctx->fr)[4])), "r" (&((fctx->fr)[5])), |
"r" (&((fctx->fr)[6])), "r" (&((fctx->fr)[7])) |
); |
} |
267,14 → 269,16 |
"ldf.fill f127 = [%7], 0x80\n;;" |
: |
: "r" (&((fctx->fr)[0])), "r" (&((fctx->fr)[1])), "r" (&((fctx->fr)[2])), "r" (&((fctx->fr)[3])), |
"r" (&((fctx->fr)[4])), "r" (&((fctx->fr)[5])), "r" (&((fctx->fr)[6])), "r" (&((fctx->fr)[7])) |
: "r" (&((fctx->fr)[0])), "r" (&((fctx->fr)[1])), |
"r" (&((fctx->fr)[2])), "r" (&((fctx->fr)[3])), |
"r" (&((fctx->fr)[4])), "r" (&((fctx->fr)[5])), |
"r" (&((fctx->fr)[6])), "r" (&((fctx->fr)[7])) |
); |
} |
void fpu_enable(void) |
{ |
uint64_t a = 0 ; |
uint64_t a = 0; |
asm volatile ( |
"rsm %0 ;;" |
//branches/tracing/kernel/arch/ia64/src/smp/smp.c |
---|
33,7 → 33,7 |
*/ |
#include <arch.h> |
#include <arch/ski/ski.h> |
#include <arch/drivers/ski.h> |
#include <arch/drivers/it.h> |
#include <arch/interrupt.h> |
#include <arch/barrier.h> |
51,10 → 51,7 |
#include <syscall/syscall.h> |
#include <ddi/irq.h> |
#include <ddi/device.h> |
#include <arch/drivers/ega.h> |
#include <arch/bootinfo.h> |
#include <genarch/kbd/i8042.h> |
#include <genarch/kbd/ns16550.h> |
#include <smp/smp.h> |
#include <smp/ipi.h> |
#include <arch/atomic.h> |
61,126 → 58,108 |
#include <panic.h> |
#include <print.h> |
#ifdef CONFIG_SMP |
extern char cpu_by_id_eid_list[256][256]; |
static void sapic_init(void) |
{ |
bootinfo->sapic=(unative_t *)(PA2KA((unative_t)(bootinfo->sapic))|FW_OFFSET); |
bootinfo->sapic = (unative_t *)(PA2KA((unative_t)(bootinfo->sapic)) | |
FW_OFFSET); |
} |
static void ipi_broadcast_arch_all(int ipi ) |
static void ipi_broadcast_arch_all(int ipi) |
{ |
int id,eid; |
int myid,myeid; |
int id, eid; |
int myid, myeid; |
myid=ia64_get_cpu_id(); |
myeid=ia64_get_cpu_eid(); |
myid = ia64_get_cpu_id(); |
myeid = ia64_get_cpu_eid(); |
for(id=0;id<256;id++) |
for(eid=0;eid<256;eid++) |
if((id!=myid) || (eid!=myeid)) |
ipi_send_ipi(id,eid,ipi); |
for (id = 0; id < 256; id++) |
for (eid = 0; eid < 256; eid++) |
if ((id != myid) || (eid != myeid)) |
ipi_send_ipi(id, eid, ipi); |
} |
void ipi_broadcast_arch(int ipi ) |
{ |
int id,eid; |
int myid,myeid; |
int id, eid; |
int myid, myeid; |
myid=ia64_get_cpu_id(); |
myeid=ia64_get_cpu_eid(); |
myid = ia64_get_cpu_id(); |
myeid = ia64_get_cpu_eid(); |
//printf("Sending ipi %d on %d\n",ipi,CPU->id); |
for(id=0;id<256;id++) |
for(eid=0;eid<256;eid++) |
if((id!=myid) || (eid!=myeid)) |
if(cpu_by_id_eid_list[id][eid]) |
ipi_send_ipi(id,eid,ipi); |
for (id = 0; id < 256; id++) |
for (eid = 0; eid < 256; eid++) |
if ((id != myid) || (eid != myeid)) |
if (cpu_by_id_eid_list[id][eid]) |
ipi_send_ipi(id, eid, ipi); |
} |
void smp_init(void) |
{ |
if(!bootinfo->hello_configured) return; |
//If we have not system prepared by hello, we are not able to start AP's |
//this means we are running on simulator |
if (!bootinfo->hello_configured) |
return; |
/* |
* If we have not got system prepared by hello, we are not able to start |
* AP's. This means we are running on a simulator. |
*/ |
sapic_init(); |
ipi_broadcast_arch_all(bootinfo->wakeup_intno); |
volatile long long brk; |
for(brk=0;brk<100LL*1024LL*1024LL;brk++); //wait a while before CPUs starts |
for (brk = 0; brk < 100LL * 1024LL * 1024LL; brk++) |
; /* wait a while before CPUs starts */ |
config.cpu_count=0; |
int id,eid; |
config.cpu_count = 0; |
int id, eid; |
for(id=0;id<256;id++) |
for(eid=0;eid<256;eid++) |
if(cpu_by_id_eid_list[id][eid]==1){ |
for (id = 0; id < 256; id++) |
for (eid = 0; eid < 256; eid++) |
if (cpu_by_id_eid_list[id][eid] == 1) { |
config.cpu_count++; |
cpu_by_id_eid_list[id][eid]=2; |
cpu_by_id_eid_list[id][eid] = 2; |
} |
} |
void kmp(void *arg __attribute__((unused))) |
{ |
int id,eid; |
int myid,myeid; |
int id, eid; |
int myid, myeid; |
myid=ia64_get_cpu_id(); |
myeid=ia64_get_cpu_eid(); |
myid = ia64_get_cpu_id(); |
myeid = ia64_get_cpu_eid(); |
for(id=0;id<256;id++) |
for(eid=0;eid<256;eid++) |
if((id!=myid) || (eid!=myeid)) |
if(cpu_by_id_eid_list[id][eid]!=0){ |
if(cpu_by_id_eid_list[id][eid]==1){ |
//config.cpu_count++; |
//cpu_by_id_eid_list[id][eid]=2; |
printf("Found Late CPU ID:%d EDI:%d Not added to system!!!\n",id,eid); |
for (id = 0; id < 256; id++) |
for (eid = 0; eid < 256; eid++) |
if ((id != myid) || (eid != myeid)) |
if (cpu_by_id_eid_list[id][eid] != 0) { |
if (cpu_by_id_eid_list[id][eid] == 1) { |
printf("Found Late CPU ID:%d " |
"EDI:%d Not added to " |
"system!!!\n", id, eid); |
continue; |
} |
cpu_by_id_eid_list[id][eid]=3; |
} |
cpu_by_id_eid_list[id][eid] = 3; |
/* |
* There may be just one AP being initialized at |
* the time. After it comes completely up, it is |
* There may be just one AP being |
* initialized at the time. After |
* it comes completely up, it is |
* supposed to wake us up. |
*/ |
if (waitq_sleep_timeout(&ap_completion_wq, 1000000, |
SYNCH_FLAGS_NONE) == ESYNCH_TIMEOUT) { |
printf("%s: waiting for cpu ID:%d EID:%d" |
"timed out\n", __FUNCTION__, |
id, eid); |
} |
if (waitq_sleep_timeout( |
&ap_completion_wq, 1000000, |
SYNCH_FLAGS_NONE) == |
ESYNCH_TIMEOUT) { |
printf("%s: waiting for cpu " |
"ID:%d EID:%d timed out\n", |
__FUNCTION__, id, eid); |
} |
} |
} |
#endif |
/*This is just a hack for linking with assembler - may be removed in future*/ |
#ifndef CONFIG_SMP |
void main_ap(void); |
void main_ap(void) |
{ |
while(1); |
} |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia64/src/ddi/ddi.c |
---|
1,5 → 1,6 |
/* |
* Copyright (c) 2006 Jakub Jermar, Jakub vana |
* Copyright (c) 2006 Jakub Jermar |
* Copyright (c) 2008 Jakub vana |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
38,38 → 39,36 |
#include <mm/slab.h> |
#include <errno.h> |
#define IO_MEMMAP_PAGES 16384 |
#define PORTS_PER_PAGE 4 |
#define IO_MEMMAP_PAGES 16384 |
#define PORTS_PER_PAGE 4 |
/** Enable I/O space range for task. |
* |
* Interrupts are disabled and task is locked. |
* |
* @param task Task. |
* @param ioaddr Startign I/O space address. |
* @param size Size of the enabled I/O range. |
* @param task Task. |
* @param ioaddr Starting I/O space address. |
* @param size Size of the enabled I/O range. |
* |
* @return 0 on success or an error code from errno.h. |
*/ |
int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size) |
{ |
if (!task->arch.iomap) { |
uint8_t *map; |
if(!task->arch.iomap) |
{ |
uint8_t *map; |
task->arch.iomap=malloc(sizeof(bitmap_t),0); |
map=malloc(BITS2BYTES(IO_MEMMAP_PAGES),0); |
task->arch.iomap = malloc(sizeof(bitmap_t), 0); |
map = malloc(BITS2BYTES(IO_MEMMAP_PAGES), 0); |
if(!map) |
return ENOMEM; |
bitmap_initialize(task->arch.iomap,map,IO_MEMMAP_PAGES); |
bitmap_clear_range(task->arch.iomap,0,IO_MEMMAP_PAGES); |
bitmap_initialize(task->arch.iomap, map, IO_MEMMAP_PAGES); |
bitmap_clear_range(task->arch.iomap, 0, IO_MEMMAP_PAGES); |
} |
uintptr_t iopage = ioaddr / PORTS_PER_PAGE; |
size = ALIGN_UP (size+ioaddr-4*iopage,PORTS_PER_PAGE); |
bitmap_set_range(task->arch.iomap,iopage,size/4); |
size = ALIGN_UP(size + ioaddr - 4 * iopage, PORTS_PER_PAGE); |
bitmap_set_range(task->arch.iomap, iopage, size / 4); |
return 0; |
} |
//branches/tracing/kernel/arch/ia64/src/asm.S |
---|
51,7 → 51,7 |
adds r14 = 7, in1 |
mov r2 = ar.lc |
mov r8 = in0 |
mov r8 = in0 ;; |
and r14 = -8, r14 ;; |
cmp.ne p6, p7 = r14, in1 |
(p7) br.cond.dpnt 3f ;; |
128,6 → 128,10 |
memsetb: |
br _memsetb |
.global memsetw |
memsetw: |
br _memsetw |
.global cpu_halt |
cpu_halt: |
br cpu_halt |
//branches/tracing/kernel/arch/ia64/src/proc/scheduler.c |
---|
47,14 → 47,17 |
{ |
} |
/** Prepare kernel stack pointers in bank 0 r22 and r23 and make sure the stack is mapped in DTR. */ |
/** Prepare kernel stack pointers in bank 0 r22 and r23 and make sure the stack |
* is mapped in DTR. |
*/ |
void before_thread_runs_arch(void) |
{ |
uintptr_t base; |
base = ALIGN_DOWN(config.base, 1<<KERNEL_PAGE_WIDTH); |
base = ALIGN_DOWN(config.base, 1 << KERNEL_PAGE_WIDTH); |
if ((uintptr_t) THREAD->kstack < base || (uintptr_t) THREAD->kstack > base + (1<<(KERNEL_PAGE_WIDTH))) { |
if ((uintptr_t) THREAD->kstack < base || |
(uintptr_t) THREAD->kstack > base + (1 << (KERNEL_PAGE_WIDTH))) { |
/* |
* Kernel stack of this thread is not mapped by DTR[TR_KERNEL]. |
* Use DTR[TR_KSTACK1] and DTR[TR_KSTACK2] to map it. |
64,8 → 67,11 |
dtr_purge((uintptr_t) THREAD->kstack, PAGE_WIDTH+1); |
/* insert DTR[TR_STACK1] and DTR[TR_STACK2] */ |
dtlb_kernel_mapping_insert((uintptr_t) THREAD->kstack, KA2PA(THREAD->kstack), true, DTR_KSTACK1); |
dtlb_kernel_mapping_insert((uintptr_t) THREAD->kstack + PAGE_SIZE, KA2PA(THREAD->kstack) + FRAME_SIZE, true, DTR_KSTACK2); |
dtlb_kernel_mapping_insert((uintptr_t) THREAD->kstack, |
KA2PA(THREAD->kstack), true, DTR_KSTACK1); |
dtlb_kernel_mapping_insert((uintptr_t) THREAD->kstack + |
PAGE_SIZE, KA2PA(THREAD->kstack) + FRAME_SIZE, true, |
DTR_KSTACK2); |
} |
/* |
//branches/tracing/kernel/arch/ia64/src/ia64.c |
---|
33,7 → 33,7 |
*/ |
#include <arch.h> |
#include <arch/ski/ski.h> |
#include <arch/drivers/ski.h> |
#include <arch/drivers/it.h> |
#include <arch/interrupt.h> |
#include <arch/barrier.h> |
50,11 → 50,14 |
#include <proc/uarg.h> |
#include <syscall/syscall.h> |
#include <ddi/irq.h> |
#include <ddi/device.h> |
#include <arch/drivers/ega.h> |
#include <arch/bootinfo.h> |
#include <genarch/kbd/i8042.h> |
#include <genarch/kbd/ns16550.h> |
#include <genarch/drivers/legacy/ia32/io.h> |
#include <genarch/drivers/ega/ega.h> |
#include <genarch/kbrd/kbrd.h> |
#include <genarch/srln/srln.h> |
#include <genarch/drivers/i8042/i8042.h> |
#include <genarch/drivers/ns16550/ns16550.h> |
#include <arch/drivers/kbd.h> |
#include <smp/smp.h> |
#include <smp/ipi.h> |
#include <arch/atomic.h> |
61,53 → 64,40 |
#include <panic.h> |
#include <print.h> |
#include <sysinfo/sysinfo.h> |
#include <string.h> |
/*NS16550 as a COM 1*/ |
#define NS16550_IRQ (4+LAGACY_INTERRUPT_BASE) |
#define NS16550_PORT 0x3f8 |
/* NS16550 as a COM 1 */ |
#define NS16550_IRQ (4 + LEGACY_INTERRUPT_BASE) |
bootinfo_t *bootinfo; |
static uint64_t iosapic_base=0xfec00000; |
static uint64_t iosapic_base = 0xfec00000; |
/** Performs ia64-specific initialization before main_bsp() is called. */ |
void arch_pre_main(void) |
{ |
/* Setup usermode init tasks. */ |
//#ifdef I460GX |
unsigned int i; |
init.cnt = bootinfo->taskmap.count; |
for (i = 0; i < init.cnt; i++) { |
init.tasks[i].addr = ((unsigned long) bootinfo->taskmap.tasks[i].addr) | VRN_MASK; |
init.tasks[i].addr = |
((unsigned long) bootinfo->taskmap.tasks[i].addr) | |
VRN_MASK; |
init.tasks[i].size = bootinfo->taskmap.tasks[i].size; |
str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN, |
bootinfo->taskmap.tasks[i].name); |
} |
/* |
#else |
init.cnt = 8; |
init.tasks[0].addr = INIT0_ADDRESS; |
init.tasks[0].size = INIT0_SIZE; |
init.tasks[1].addr = INIT0_ADDRESS + 0x400000; |
init.tasks[1].size = INIT0_SIZE; |
init.tasks[2].addr = INIT0_ADDRESS + 0x800000; |
init.tasks[2].size = INIT0_SIZE; |
init.tasks[3].addr = INIT0_ADDRESS + 0xc00000; |
init.tasks[3].size = INIT0_SIZE; |
init.tasks[4].addr = INIT0_ADDRESS + 0x1000000; |
init.tasks[4].size = INIT0_SIZE; |
init.tasks[5].addr = INIT0_ADDRESS + 0x1400000; |
init.tasks[5].size = INIT0_SIZE; |
init.tasks[6].addr = INIT0_ADDRESS + 0x1800000; |
init.tasks[6].size = INIT0_SIZE; |
init.tasks[7].addr = INIT0_ADDRESS + 0x1c00000; |
init.tasks[7].size = INIT0_SIZE; |
#endif*/ |
} |
void arch_pre_mm_init(void) |
{ |
/* Set Interruption Vector Address (i.e. location of interruption vector table). */ |
/* |
* Set Interruption Vector Address (i.e. location of interruption vector |
* table). |
*/ |
iva_write((uintptr_t) &ivt); |
srlz_d(); |
115,47 → 105,37 |
static void iosapic_init(void) |
{ |
uint64_t IOSAPIC = PA2KA((unative_t)(iosapic_base))|FW_OFFSET; |
uint64_t IOSAPIC = PA2KA((unative_t)(iosapic_base)) | FW_OFFSET; |
int i; |
int myid,myeid; |
int myid, myeid; |
myid=ia64_get_cpu_id(); |
myeid=ia64_get_cpu_eid(); |
myid = ia64_get_cpu_id(); |
myeid = ia64_get_cpu_eid(); |
for(i=0;i<16;i++) |
{ |
if(i==2) continue; //Disable Cascade interrupt |
((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i; |
for (i = 0; i < 16; i++) { |
if (i == 2) |
continue; /* Disable Cascade interrupt */ |
((uint32_t *)(IOSAPIC + 0x00))[0] = 0x10 + 2 * i; |
srlz_d(); |
((uint32_t*)(IOSAPIC+0x10))[0]=LAGACY_INTERRUPT_BASE+i; |
((uint32_t *)(IOSAPIC + 0x10))[0] = LEGACY_INTERRUPT_BASE + i; |
srlz_d(); |
((uint32_t*)(IOSAPIC+0x00))[0]=0x10+2*i+1; |
((uint32_t *)(IOSAPIC + 0x00))[0] = 0x10 + 2 * i + 1; |
srlz_d(); |
((uint32_t*)(IOSAPIC+0x10))[0]=myid<<(56-32) | myeid<<(48-32); |
((uint32_t *)(IOSAPIC + 0x10))[0] = myid << (56 - 32) | |
myeid << (48 - 32); |
srlz_d(); |
} |
} |
void arch_post_mm_init(void) |
{ |
if(config.cpu_active==1) |
{ |
if (config.cpu_active == 1) { |
iosapic_init(); |
irq_init(INR_COUNT, INR_COUNT); |
#ifdef SKI |
ski_init_console(); |
#else |
ega_init(); |
#endif |
} |
it_init(); |
it_init(); |
} |
void arch_post_cpu_init(void) |
166,78 → 146,70 |
{ |
} |
#ifdef I460GX |
#define POLL_INTERVAL 50000 /* 50 ms */ |
/** Kernel thread for polling keyboard. */ |
static void i8042_kkbdpoll(void *arg) |
void arch_post_smp_init(void) |
{ |
while (1) { |
#ifdef CONFIG_NS16550 |
#ifndef CONFIG_NS16550_INTERRUPT_DRIVEN |
ns16550_poll(); |
#endif |
#else |
#ifndef CONFIG_I8042_INTERRUPT_DRIVEN |
i8042_poll(); |
#endif |
#endif |
thread_usleep(POLL_INTERVAL); |
#ifdef MACHINE_ski |
ski_instance_t *ski_instance = skiin_init(); |
if (ski_instance) { |
srln_instance_t *srln_instance = srln_init(); |
if (srln_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *srln = srln_wire(srln_instance, sink); |
skiin_wire(ski_instance, srln); |
} |
} |
} |
skiout_init(); |
#endif |
void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused))); |
void end_of_irq_void(void *cir_arg __attribute__((unused)),inr_t inr __attribute__((unused))) |
{ |
return; |
} |
void arch_post_smp_init(void) |
{ |
{ |
/* |
* Create thread that polls keyboard. |
*/ |
#ifdef SKI |
thread_t *t; |
t = thread_create(kkbdpoll, NULL, TASK, 0, "kkbdpoll", true); |
if (!t) |
panic("cannot create kkbdpoll\n"); |
thread_ready(t); |
#endif |
#ifdef I460GX |
devno_t kbd = device_assign_devno(); |
/* keyboard controller */ |
#ifdef CONFIG_EGA |
ega_init(EGA_BASE, EGA_VIDEORAM); |
#endif |
#ifdef CONFIG_NS16550 |
ns16550_init(kbd, NS16550_PORT, NS16550_IRQ,end_of_irq_void,NULL); // as a COM 1 |
#else |
devno_t mouse = device_assign_devno(); |
i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE); |
ns16550_instance_t *ns16550_instance |
= ns16550_init((ns16550_t *) NS16550_BASE, NS16550_IRQ, NULL, NULL); |
if (ns16550_instance) { |
srln_instance_t *srln_instance = srln_init(); |
if (srln_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *srln = srln_wire(srln_instance, sink); |
ns16550_wire(ns16550_instance, srln); |
} |
} |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.inr", NULL, NS16550_IRQ); |
sysinfo_set_item_val("kbd.type", NULL, KBD_NS16550); |
sysinfo_set_item_val("kbd.address.physical", NULL, |
(uintptr_t) NS16550_BASE); |
sysinfo_set_item_val("kbd.address.kernel", NULL, |
(uintptr_t) NS16550_BASE); |
#endif |
thread_t *t; |
t = thread_create(i8042_kkbdpoll, NULL, TASK, 0, "kkbdpoll", true); |
if (!t) |
panic("cannot create kkbdpoll\n"); |
thread_ready(t); |
#endif |
#ifdef CONFIG_I8042 |
i8042_instance_t *i8042_instance = i8042_init((i8042_t *) I8042_BASE, IRQ_KBD); |
if (i8042_instance) { |
kbrd_instance_t *kbrd_instance = kbrd_init(); |
if (kbrd_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *kbrd = kbrd_wire(kbrd_instance, sink); |
i8042_wire(i8042_instance, kbrd); |
} |
} |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.inr", NULL, IRQ_KBD); |
sysinfo_set_item_val("kbd.type", NULL, KBD_LEGACY); |
sysinfo_set_item_val("kbd.address.physical", NULL, |
(uintptr_t) I8042_BASE); |
sysinfo_set_item_val("kbd.address.kernel", NULL, |
(uintptr_t) I8042_BASE); |
#endif |
sysinfo_set_item_val("ia64_iospace", NULL, true); |
sysinfo_set_item_val("ia64_iospace.address", NULL, true); |
sysinfo_set_item_val("ia64_iospace.address.virtual", NULL, IO_OFFSET); |
} |
249,26 → 221,25 |
psr.value = psr_read(); |
psr.cpl = PL_USER; |
psr.i = true; /* start with interrupts enabled */ |
psr.i = true; /* start with interrupts enabled */ |
psr.ic = true; |
psr.ri = 0; /* start with instruction #0 */ |
psr.bn = 1; /* start in bank 0 */ |
psr.ri = 0; /* start with instruction #0 */ |
psr.bn = 1; /* start in bank 0 */ |
asm volatile ("mov %0 = ar.rsc\n" : "=r" (rsc.value)); |
rsc.loadrs = 0; |
rsc.be = false; |
rsc.pl = PL_USER; |
rsc.mode = 3; /* eager mode */ |
rsc.mode = 3; /* eager mode */ |
switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry, |
((uintptr_t) kernel_uarg->uspace_stack)+PAGE_SIZE-ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT), |
((uintptr_t) kernel_uarg->uspace_stack)+PAGE_SIZE, |
(uintptr_t) kernel_uarg->uspace_uarg, |
psr.value, rsc.value); |
((uintptr_t) kernel_uarg->uspace_stack) + PAGE_SIZE - |
ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT), |
((uintptr_t) kernel_uarg->uspace_stack) + PAGE_SIZE, |
(uintptr_t) kernel_uarg->uspace_uarg, psr.value, rsc.value); |
while (1) { |
while (1) |
; |
} |
} |
/** Set thread-local-storage pointer. |
285,38 → 256,44 |
*/ |
void arch_grab_console(void) |
{ |
#ifdef SKI |
#ifdef MACHINE_ski |
ski_kbd_grab(); |
#else |
#ifdef CONFIG_NS16550 |
ns16550_grab(); |
#else |
i8042_grab(); |
#endif |
#endif |
#endif |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
#ifdef SKI |
#ifdef MACHINE_ski |
ski_kbd_release(); |
#else |
#ifdef CONFIG_NS16550 |
ns16550_release(); |
#else |
i8042_release(); |
#endif |
#endif |
} |
void arch_reboot(void) |
{ |
outb(0x64,0xfe); |
while (1); |
pio_write_8((ioport8_t *)0x64, 0xfe); |
while (1) |
; |
} |
/** Construct function pointer |
* |
* @param fptr function pointer structure |
* @param addr function address |
* @param caller calling function address |
* |
* @return address of the function pointer |
* |
*/ |
void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
{ |
fptr->fnc = (unative_t) addr; |
fptr->gp = ((unative_t *) caller)[1]; |
return (void *) fptr; |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia64/src/cpu/cpu.c |
---|
55,7 → 55,7 |
*((uint64_t *) &vendor[0 * sizeof(uint64_t)]) = CPU->arch.cpuid0; |
*((uint64_t *) &vendor[1 * sizeof(uint64_t)]) = CPU->arch.cpuid1; |
vendor[sizeof(vendor) - 1] = '\0'; |
vendor[sizeof(vendor) - 1] = 0; |
switch(m->arch.cpuid3.family) { |
case FAMILY_ITANIUM: |
70,8 → 70,8 |
} |
printf("cpu%d: %s (%s), archrev=%d, model=%d, revision=%d\n", CPU->id, |
family_str, vendor, CPU->arch.cpuid3.archrev, CPU->arch.cpuid3.model, |
CPU->arch.cpuid3.revision); |
family_str, vendor, CPU->arch.cpuid3.archrev, |
CPU->arch.cpuid3.model, CPU->arch.cpuid3.revision); |
} |
/** @} |
//branches/tracing/kernel/arch/ia64/src/mm/tlb.c |
---|
92,7 → 92,7 |
/** Invalidate entries belonging to an address space. |
* |
* @param asid Address space identifier. |
* @param asid Address space identifier. |
*/ |
void tlb_invalidate_asid(asid_t asid) |
{ |
131,59 → 131,45 |
uint64_t ps; |
switch (b) { |
case 0: /*cnt 1-3*/ |
case 0: /* cnt 1 - 3 */ |
ps = PAGE_WIDTH; |
break; |
case 1: /*cnt 4-15*/ |
/*cnt=((cnt-1)/4)+1;*/ |
ps = PAGE_WIDTH+2; |
va &= ~((1<<ps)-1); |
case 1: /* cnt 4 - 15 */ |
ps = PAGE_WIDTH + 2; |
va &= ~((1 << ps) - 1); |
break; |
case 2: /*cnt 16-63*/ |
/*cnt=((cnt-1)/16)+1;*/ |
ps = PAGE_WIDTH+4; |
va &= ~((1<<ps)-1); |
case 2: /* cnt 16 - 63 */ |
ps = PAGE_WIDTH + 4; |
va &= ~((1 << ps) - 1); |
break; |
case 3: /*cnt 64-255*/ |
/*cnt=((cnt-1)/64)+1;*/ |
ps = PAGE_WIDTH+6; |
va &= ~((1<<ps)-1); |
case 3: /* cnt 64 - 255 */ |
ps = PAGE_WIDTH + 6; |
va &= ~((1 << ps) - 1); |
break; |
case 4: /*cnt 256-1023*/ |
/*cnt=((cnt-1)/256)+1;*/ |
ps = PAGE_WIDTH+8; |
va &= ~((1<<ps)-1); |
case 4: /* cnt 256 - 1023 */ |
ps = PAGE_WIDTH + 8; |
va &= ~((1 << ps) - 1); |
break; |
case 5: /*cnt 1024-4095*/ |
/*cnt=((cnt-1)/1024)+1;*/ |
ps = PAGE_WIDTH+10; |
va &= ~((1<<ps)-1); |
case 5: /* cnt 1024 - 4095 */ |
ps = PAGE_WIDTH + 10; |
va &= ~((1 << ps) - 1); |
break; |
case 6: /*cnt 4096-16383*/ |
/*cnt=((cnt-1)/4096)+1;*/ |
ps = PAGE_WIDTH+12; |
va &= ~((1<<ps)-1); |
case 6: /* cnt 4096 - 16383 */ |
ps = PAGE_WIDTH + 12; |
va &= ~((1 << ps) - 1); |
break; |
case 7: /*cnt 16384-65535*/ |
case 8: /*cnt 65536-(256K-1)*/ |
/*cnt=((cnt-1)/16384)+1;*/ |
ps = PAGE_WIDTH+14; |
va &= ~((1<<ps)-1); |
case 7: /* cnt 16384 - 65535 */ |
case 8: /* cnt 65536 - (256K - 1) */ |
ps = PAGE_WIDTH + 14; |
va &= ~((1 << ps) - 1); |
break; |
default: |
/*cnt=((cnt-1)/(16384*16))+1;*/ |
ps=PAGE_WIDTH+18; |
va&=~((1<<ps)-1); |
ps = PAGE_WIDTH + 18; |
va &= ~((1 << ps) - 1); |
break; |
} |
/*cnt+=(page!=va);*/ |
for(; va<(page+cnt*(PAGE_SIZE)); va += (1<<ps)) { |
asm volatile ( |
"ptc.l %0,%1;;" |
: |
: "r" (va), "r" (ps<<2) |
); |
} |
for(; va < (page + cnt * PAGE_SIZE); va += (1 << ps)) |
asm volatile ("ptc.l %0, %1;;" :: "r" (va), "r" (ps << 2)); |
srlz_d(); |
srlz_i(); |
196,9 → 182,10 |
/** Insert data into data translation cache. |
* |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion format. |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion |
* format. |
*/ |
void dtc_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry) |
{ |
207,9 → 194,10 |
/** Insert data into instruction translation cache. |
* |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion format. |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion |
* format. |
*/ |
void itc_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry) |
{ |
218,10 → 206,12 |
/** Insert data into instruction or data translation cache. |
* |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion format. |
* @param dtc If true, insert into data translation cache, use instruction translation cache otherwise. |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion |
* format. |
* @param dtc If true, insert into data translation cache, use |
* instruction translation cache otherwise. |
*/ |
void tc_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry, bool dtc) |
{ |
244,19 → 234,20 |
} |
asm volatile ( |
"mov r8=psr;;\n" |
"mov r8 = psr;;\n" |
"rsm %0;;\n" /* PSR_IC_MASK */ |
"srlz.d;;\n" |
"srlz.i;;\n" |
"mov cr.ifa=%1\n" /* va */ |
"mov cr.itir=%2;;\n" /* entry.word[1] */ |
"cmp.eq p6,p7 = %4,r0;;\n" /* decide between itc and dtc */ |
"mov cr.ifa = %1\n" /* va */ |
"mov cr.itir = %2;;\n" /* entry.word[1] */ |
"cmp.eq p6,p7 = %4,r0;;\n" /* decide between itc and dtc */ |
"(p6) itc.i %3;;\n" |
"(p7) itc.d %3;;\n" |
"mov psr.l=r8;;\n" |
"mov psr.l = r8;;\n" |
"srlz.d;;\n" |
: |
: "i" (PSR_IC_MASK), "r" (va), "r" (entry.word[1]), "r" (entry.word[0]), "r" (dtc) |
: "i" (PSR_IC_MASK), "r" (va), "r" (entry.word[1]), |
"r" (entry.word[0]), "r" (dtc) |
: "p6", "p7", "r8" |
); |
269,12 → 260,14 |
/** Insert data into instruction translation register. |
* |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion format. |
* @param tr Translation register. |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion |
* format. |
* @param tr Translation register. |
*/ |
void itr_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry, index_t tr) |
void |
itr_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry, index_t tr) |
{ |
tr_mapping_insert(va, asid, entry, false, tr); |
} |
281,12 → 274,14 |
/** Insert data into data translation register. |
* |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion format. |
* @param tr Translation register. |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion |
* format. |
* @param tr Translation register. |
*/ |
void dtr_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry, index_t tr) |
void |
dtr_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry, index_t tr) |
{ |
tr_mapping_insert(va, asid, entry, true, tr); |
} |
293,13 → 288,17 |
/** Insert data into instruction or data translation register. |
* |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion format. |
* @param dtr If true, insert into data translation register, use instruction translation register otherwise. |
* @param tr Translation register. |
* @param va Virtual page address. |
* @param asid Address space identifier. |
* @param entry The rest of TLB entry as required by TLB insertion |
* format. |
* @param dtr If true, insert into data translation register, use |
* instruction translation register otherwise. |
* @param tr Translation register. |
*/ |
void tr_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry, bool dtr, index_t tr) |
void |
tr_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry, bool dtr, |
index_t tr) |
{ |
region_register rr; |
bool restore_rr = false; |
320,19 → 319,20 |
} |
asm volatile ( |
"mov r8=psr;;\n" |
"mov r8 = psr;;\n" |
"rsm %0;;\n" /* PSR_IC_MASK */ |
"srlz.d;;\n" |
"srlz.i;;\n" |
"mov cr.ifa=%1\n" /* va */ |
"mov cr.itir=%2;;\n" /* entry.word[1] */ |
"cmp.eq p6,p7=%5,r0;;\n" /* decide between itr and dtr */ |
"(p6) itr.i itr[%4]=%3;;\n" |
"(p7) itr.d dtr[%4]=%3;;\n" |
"mov psr.l=r8;;\n" |
"mov cr.ifa = %1\n" /* va */ |
"mov cr.itir = %2;;\n" /* entry.word[1] */ |
"cmp.eq p6,p7 = %5,r0;;\n" /* decide between itr and dtr */ |
"(p6) itr.i itr[%4] = %3;;\n" |
"(p7) itr.d dtr[%4] = %3;;\n" |
"mov psr.l = r8;;\n" |
"srlz.d;;\n" |
: |
: "i" (PSR_IC_MASK), "r" (va), "r" (entry.word[1]), "r" (entry.word[0]), "r" (tr), "r" (dtr) |
: "i" (PSR_IC_MASK), "r" (va), "r" (entry.word[1]), |
"r" (entry.word[0]), "r" (tr), "r" (dtr) |
: "p6", "p7", "r8" |
); |
345,12 → 345,15 |
/** Insert data into DTLB. |
* |
* @param page Virtual page address including VRN bits. |
* @param frame Physical frame address. |
* @param dtr If true, insert into data translation register, use data translation cache otherwise. |
* @param tr Translation register if dtr is true, ignored otherwise. |
* @param page Virtual page address including VRN bits. |
* @param frame Physical frame address. |
* @param dtr If true, insert into data translation register, use data |
* translation cache otherwise. |
* @param tr Translation register if dtr is true, ignored otherwise. |
*/ |
void dtlb_kernel_mapping_insert(uintptr_t page, uintptr_t frame, bool dtr, index_t tr) |
void |
dtlb_kernel_mapping_insert(uintptr_t page, uintptr_t frame, bool dtr, |
index_t tr) |
{ |
tlb_entry_t entry; |
376,18 → 379,18 |
* |
* Purge DTR entries used by the kernel. |
* |
* @param page Virtual page address including VRN bits. |
* @param width Width of the purge in bits. |
* @param page Virtual page address including VRN bits. |
* @param width Width of the purge in bits. |
*/ |
void dtr_purge(uintptr_t page, count_t width) |
{ |
asm volatile ("ptr.d %0, %1\n" : : "r" (page), "r" (width<<2)); |
asm volatile ("ptr.d %0, %1\n" : : "r" (page), "r" (width << 2)); |
} |
/** Copy content of PTE into data translation cache. |
* |
* @param t PTE. |
* @param t PTE. |
*/ |
void dtc_pte_copy(pte_t *t) |
{ |
413,7 → 416,7 |
/** Copy content of PTE into instruction translation cache. |
* |
* @param t PTE. |
* @param t PTE. |
*/ |
void itc_pte_copy(pte_t *t) |
{ |
440,8 → 443,8 |
/** Instruction TLB fault handler for faults with VHPT turned off. |
* |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
*/ |
void alternate_instruction_tlb_fault(uint64_t vector, istate_t *istate) |
{ |
469,83 → 472,77 |
*/ |
page_table_unlock(AS, true); |
if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate,"Page fault at %p",va); |
panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
fault_if_from_uspace(istate,"Page fault at %p.",va); |
panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid, |
istate->cr_iip); |
} |
} |
} |
static int is_io_page_accessible(int page) |
{ |
if(TASK->arch.iomap) return bitmap_get(TASK->arch.iomap,page); |
else return 0; |
if (TASK->arch.iomap) |
return bitmap_get(TASK->arch.iomap, page); |
else |
return 0; |
} |
#define IO_FRAME_BASE 0xFFFFC000000 |
/** There is special handling of memmaped lagacy io, because |
* of 4KB sized access |
* only for userspace |
/** |
* There is special handling of memory mapped legacy io, because of 4KB sized |
* access for userspace. |
* |
* @param va virtual address of page fault |
* @param istate Structure with saved interruption state. |
* @param va Virtual address of page fault. |
* @param istate Structure with saved interruption state. |
* |
* |
* @return 1 on success, 0 on fail |
* @return One on success, zero on failure. |
*/ |
static int try_memmap_io_insertion(uintptr_t va, istate_t *istate) |
{ |
if((va >= IO_OFFSET ) && (va < IO_OFFSET + (1<<IO_PAGE_WIDTH))) |
if(TASK){ |
uint64_t io_page=(va & ((1<<IO_PAGE_WIDTH)-1)) >> (USPACE_IO_PAGE_WIDTH); |
if(is_io_page_accessible(io_page)){ |
//printf("Insert %llX\n",va); |
if ((va >= IO_OFFSET ) && (va < IO_OFFSET + (1 << IO_PAGE_WIDTH))) { |
if (TASK) { |
uint64_t io_page = (va & ((1 << IO_PAGE_WIDTH) - 1)) >> |
USPACE_IO_PAGE_WIDTH; |
uint64_t page,frame; |
if (is_io_page_accessible(io_page)) { |
uint64_t page, frame; |
page = IO_OFFSET + (1 << USPACE_IO_PAGE_WIDTH) * io_page; |
frame = IO_FRAME_BASE + (1 << USPACE_IO_PAGE_WIDTH) * io_page; |
page = IO_OFFSET + |
(1 << USPACE_IO_PAGE_WIDTH) * io_page; |
frame = IO_FRAME_BASE + |
(1 << USPACE_IO_PAGE_WIDTH) * io_page; |
tlb_entry_t entry; |
entry.word[0] = 0; |
entry.word[1] = 0; |
entry.p = true; /* present */ |
entry.p = true; /* present */ |
entry.ma = MA_UNCACHEABLE; |
entry.a = true; /* already accessed */ |
entry.d = true; /* already dirty */ |
entry.a = true; /* already accessed */ |
entry.d = true; /* already dirty */ |
entry.pl = PL_USER; |
entry.ar = AR_READ | AR_WRITE; |
entry.ppn = frame >> PPN_SHIFT; //MUSIM spocitat frame |
entry.ppn = frame >> PPN_SHIFT; |
entry.ps = USPACE_IO_PAGE_WIDTH; |
dtc_mapping_insert(page, TASK->as->asid, entry); //Musim zjistit ASID |
dtc_mapping_insert(page, TASK->as->asid, entry); |
return 1; |
}else { |
fault_if_from_uspace(istate,"IO access fault at %p",va); |
return 0; |
} |
} else |
return 0; |
else |
return 0; |
} else { |
fault_if_from_uspace(istate, |
"IO access fault at %p.", va); |
} |
} |
} |
return 0; |
} |
/** Data TLB fault handler for faults with VHPT turned off. |
* |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
*/ |
void alternate_data_tlb_fault(uint64_t vector, istate_t *istate) |
{ |
579,13 → 576,16 |
page_table_unlock(AS, true); |
} else { |
page_table_unlock(AS, true); |
if (try_memmap_io_insertion(va,istate)) return; |
if (try_memmap_io_insertion(va, istate)) |
return; |
/* |
* Forward the page fault to the address space page fault handler. |
* Forward the page fault to the address space page fault |
* handler. |
*/ |
if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate,"Page fault at %p",va); |
panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
fault_if_from_uspace(istate,"Page fault at %p.",va); |
panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid, |
istate->cr_iip); |
} |
} |
} |
594,18 → 594,18 |
* |
* This fault should not occur. |
* |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
*/ |
void data_nested_tlb_fault(uint64_t vector, istate_t *istate) |
{ |
panic("%s\n", __func__); |
panic("%s.", __func__); |
} |
/** Data Dirty bit fault handler. |
* |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
*/ |
void data_dirty_bit_fault(uint64_t vector, istate_t *istate) |
{ |
630,10 → 630,9 |
dtc_pte_copy(t); |
} else { |
if (as_page_fault(va, PF_ACCESS_WRITE, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate,"Page fault at %p",va); |
panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
t->d = true; |
dtc_pte_copy(t); |
fault_if_from_uspace(istate,"Page fault at %p.",va); |
panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid, |
istate->cr_iip); |
} |
} |
page_table_unlock(AS, true); |
641,8 → 640,8 |
/** Instruction access bit fault handler. |
* |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
* @param vector Interruption vector. |
* @param istate Structure with saved interruption state. |
*/ |
void instruction_access_bit_fault(uint64_t vector, istate_t *istate) |
{ |
667,10 → 666,9 |
itc_pte_copy(t); |
} else { |
if (as_page_fault(va, PF_ACCESS_EXEC, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate,"Page fault at %p",va); |
panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
t->a = true; |
itc_pte_copy(t); |
fault_if_from_uspace(istate, "Page fault at %p.", va); |
panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid, |
istate->cr_iip); |
} |
} |
page_table_unlock(AS, true); |
704,10 → 702,9 |
dtc_pte_copy(t); |
} else { |
if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate,"Page fault at %p",va); |
panic("%s: va=%p, rid=%d, iip=%p\n", __func__, va, rid, istate->cr_iip); |
t->a = true; |
itc_pte_copy(t); |
fault_if_from_uspace(istate, "Page fault at %p.", va); |
panic("%s: va=%p, rid=%d, iip=%p.", __func__, va, rid, |
istate->cr_iip); |
} |
} |
page_table_unlock(AS, true); |
746,11 → 743,19 |
} else { |
page_table_unlock(AS, true); |
if (as_page_fault(va, PF_ACCESS_READ, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate,"Page fault at %p",va); |
panic("%s: va=%p, rid=%d\n", __func__, va, rid); |
fault_if_from_uspace(istate, "Page fault at %p.", va); |
panic("%s: va=%p, rid=%d.", __func__, va, rid); |
} |
} |
} |
void tlb_arch_init(void) |
{ |
} |
void tlb_print(void) |
{ |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia64/src/mm/vhpt.c |
---|
41,7 → 41,8 |
uintptr_t vhpt_set_up(void) |
{ |
vhpt_base = frame_alloc(VHPT_WIDTH - FRAME_WIDTH, FRAME_KA | FRAME_ATOMIC); |
vhpt_base = frame_alloc(VHPT_WIDTH - FRAME_WIDTH, |
FRAME_KA | FRAME_ATOMIC); |
if (!vhpt_base) |
panic("Kernel configured with VHPT but no memory for table."); |
vhpt_invalidate_all(); |
//branches/tracing/kernel/arch/ia64/src/mm/as.c |
---|
68,7 → 68,7 |
continue; |
rr.word = rr_read(i); |
rr.map.ve = false; /* disable VHPT walker */ |
rr.map.ve = false; /* disable VHPT walker */ |
rr.map.rid = ASID2RID(as->asid, i); |
rr.map.ps = PAGE_WIDTH; |
rr_write(i, rr.word); |
//branches/tracing/kernel/arch/ia64/src/mm/frame.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia64mm |
/** @addtogroup ia64mm |
* @{ |
*/ |
/** @file |
40,57 → 40,50 |
#include <align.h> |
#include <macros.h> |
/* |
* This is Ski-specific and certainly not sufficient |
* for real ia64 systems that provide memory map. |
*/ |
#define MEMORY_SIZE (256 * 1024 * 1024) |
#define MEMORY_BASE (0 * 64 * 1024 * 1024) |
#define KERNEL_RESERVED_AREA_BASE (0x4400000) |
#define KERNEL_RESERVED_AREA_SIZE (16 * 1024 * 1024) |
#define KERNEL_RESERVED_AREA_BASE (0x4400000) |
#define KERNEL_RESERVED_AREA_SIZE (16*1024*1024) |
#define ROM_BASE 0xa0000 /* for simulators */ |
#define ROM_SIZE (384 * 1024) /* for simulators */ |
#define ONE_TO_ONE_MAPPING_SIZE (256*1048576) // Mapped at start |
#define MIN_ZONE_SIZE (64 * 1024) |
#define ROM_BASE 0xa0000 //For ski |
#define ROM_SIZE (384 * 1024) //For ski |
void poke_char(int x,int y,char ch, char c); |
#define MINCONF 1 |
#define MIN_ZONE_SIZE (64*1024) |
uintptr_t last_frame = 0; |
uintptr_t last_frame; |
#define MINCONF 1 |
void frame_arch_init(void) |
{ |
if(config.cpu_active==1){ |
if (config.cpu_active == 1) { |
unsigned int i; |
for(i=0;i<bootinfo->memmap_items;i++){ |
if (bootinfo->memmap[i].type==EFI_MEMMAP_FREE_MEM){ |
uint64_t base=bootinfo->memmap[i].base; |
uint64_t size=bootinfo->memmap[i].size; |
uint64_t abase=ALIGN_UP(base,FRAME_SIZE); |
if(size>FRAME_SIZE) size -=abase-base; |
for (i = 0; i < bootinfo->memmap_items; i++) { |
if (bootinfo->memmap[i].type == EFI_MEMMAP_FREE_MEM) { |
uint64_t base = bootinfo->memmap[i].base; |
uint64_t size = bootinfo->memmap[i].size; |
uint64_t abase = ALIGN_UP(base, FRAME_SIZE); |
if(size>MIN_ZONE_SIZE) { |
zone_create(abase >> FRAME_WIDTH, (size) >> FRAME_WIDTH, max(MINCONF,((abase) >> FRAME_WIDTH)), 0); |
} |
if (size > FRAME_SIZE) |
size -= abase - base; |
if (size > MIN_ZONE_SIZE) { |
zone_create(abase >> FRAME_WIDTH, |
size >> FRAME_WIDTH, |
max(MINCONF, abase >> FRAME_WIDTH), |
0); |
} |
if (abase + size > last_frame) |
last_frame = abase + size; |
} |
} |
//zone_create(MEMORY_BASE >> FRAME_WIDTH, SIZE2FRAMES(MEMORY_SIZE), (MEMORY_SIZE) >> FRAME_WIDTH, 0); |
/* |
* Blacklist ROM regions. |
*/ |
frame_mark_unavailable(ADDR2PFN(ROM_BASE), SIZE2FRAMES(ROM_SIZE)); |
* Blacklist ROM regions. |
*/ |
frame_mark_unavailable(ADDR2PFN(ROM_BASE), |
SIZE2FRAMES(ROM_SIZE)); |
frame_mark_unavailable(ADDR2PFN(KERNEL_RESERVED_AREA_BASE), SIZE2FRAMES(KERNEL_RESERVED_AREA_SIZE)); |
frame_mark_unavailable(ADDR2PFN(KERNEL_RESERVED_AREA_BASE), |
SIZE2FRAMES(KERNEL_RESERVED_AREA_SIZE)); |
} |
} |
//branches/tracing/kernel/arch/ia64/src/mm/page.c |
---|
27,7 → 27,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia64mm |
/** @addtogroup ia64mm |
* @{ |
*/ |
/** @file |
63,9 → 63,9 |
void set_environment(void) |
{ |
region_register rr; |
pta_register pta; |
pta_register pta; |
int i; |
#ifdef CONFIG_VHPT |
#ifdef CONFIG_VHPT |
uintptr_t vhpt_base; |
#endif |
123,10 → 123,10 |
* |
* Interrupts must be disabled. |
* |
* @param page Address of virtual page including VRN bits. |
* @param asid Address space identifier. |
* @param page Address of virtual page including VRN bits. |
* @param asid Address space identifier. |
* |
* @return VHPT entry address. |
* @return VHPT entry address. |
*/ |
vhpt_entry_t *vhpt_hash(uintptr_t page, asid_t asid) |
{ |
167,10 → 167,11 |
* |
* Interrupts must be disabled. |
* |
* @param page Address of virtual page including VRN bits. |
* @param asid Address space identifier. |
* @param page Address of virtual page including VRN bits. |
* @param asid Address space identifier. |
* |
* @return True if page and asid match the page and asid of t, false otherwise. |
* @return True if page and asid match the page and asid of t, |
* false otherwise. |
*/ |
bool vhpt_compare(uintptr_t page, asid_t asid, vhpt_entry_t *v) |
{ |
211,12 → 212,15 |
/** Set up one VHPT entry. |
* |
* @param v VHPT entry to be set up. |
* @param page Virtual address of the page mapped by the entry. |
* @param asid Address space identifier of the address space to which page belongs. |
* @param frame Physical address of the frame to wich page is mapped. |
* @param flags Different flags for the mapping. |
* @param page Virtual address of the page mapped by the entry. |
* @param asid Address space identifier of the address space to which |
* page belongs. |
* @param frame Physical address of the frame to wich page is mapped. |
* @param flags Different flags for the mapping. |
*/ |
void vhpt_set_record(vhpt_entry_t *v, uintptr_t page, asid_t asid, uintptr_t frame, int flags) |
void |
vhpt_set_record(vhpt_entry_t *v, uintptr_t page, asid_t asid, uintptr_t frame, |
int flags) |
{ |
region_register rr_save, rr; |
index_t vrn; |
250,7 → 254,8 |
v->word[3] = 0; |
v->present.p = true; |
v->present.ma = (flags & PAGE_CACHEABLE) ? MA_WRITEBACK : MA_UNCACHEABLE; |
v->present.ma = (flags & PAGE_CACHEABLE) ? |
MA_WRITEBACK : MA_UNCACHEABLE; |
v->present.a = false; /* not accessed */ |
v->present.d = false; /* not dirty */ |
v->present.pl = (flags & PAGE_USER) ? PL_USER : PL_KERNEL; |
263,27 → 268,11 |
v->present.tag.tag_word = tag; |
} |
extern uintptr_t last_frame; |
uintptr_t hw_map(uintptr_t physaddr, size_t size) |
uintptr_t hw_map(uintptr_t physaddr, size_t size __attribute__ ((unused))) |
{ |
if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) |
panic("Unable to map physical memory %p (%d bytes)", physaddr, size) |
uintptr_t virtaddr = PA2KA(last_frame); |
pfn_t i; |
for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) { |
uintptr_t addr = PFN2ADDR(i); |
page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr, PAGE_NOT_CACHEABLE | PAGE_WRITE); |
} |
last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE); |
return virtaddr; |
/* THIS is a dirty hack. */ |
return (uintptr_t)((uint64_t)(PA2KA(physaddr)) + VIO_OFFSET); |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia64/src/interrupt.c |
---|
38,7 → 38,6 |
#include <ddi/irq.h> |
#include <panic.h> |
#include <print.h> |
#include <symtab.h> |
#include <debug.h> |
#include <console/console.h> |
#include <arch/types.h> |
54,6 → 53,8 |
#include <ipc/ipc.h> |
#include <synch/spinlock.h> |
#include <mm/tlb.h> |
#include <symtab.h> |
#include <putchar.h> |
#define VECTORS_64_BUNDLE 20 |
#define VECTORS_16_BUNDLE 48 |
137,9 → 138,9 |
{ |
char *ifa, *iipa, *iip; |
ifa = get_symtab_entry(istate->cr_ifa); |
iipa = get_symtab_entry(istate->cr_iipa); |
iip = get_symtab_entry(istate->cr_iip); |
ifa = symtab_fmt_name_lookup(istate->cr_ifa); |
iipa = symtab_fmt_name_lookup(istate->cr_iipa); |
iip = symtab_fmt_name_lookup(istate->cr_iip); |
putchar('\n'); |
printf("Interrupted context dump:\n"); |
186,21 → 187,21 |
break; |
} |
fault_if_from_uspace(istate, "General Exception (%s)", desc); |
fault_if_from_uspace(istate, "General Exception (%s).", desc); |
dump_interrupted_context(istate); |
panic("General Exception (%s)\n", desc); |
panic("General Exception (%s).", desc); |
} |
void disabled_fp_register(uint64_t vector, istate_t *istate) |
{ |
#ifdef CONFIG_FPU_LAZY |
scheduler_fpu_lazy_request(); |
#ifdef CONFIG_FPU_LAZY |
scheduler_fpu_lazy_request(); |
#else |
fault_if_from_uspace(istate, "Interruption: %#hx (%s)", |
fault_if_from_uspace(istate, "Interruption: %#hx (%s).", |
(uint16_t) vector, vector_to_string(vector)); |
dump_interrupted_context(istate); |
panic("Interruption: %#hx (%s)\n", (uint16_t) vector, |
panic("Interruption: %#hx (%s).", (uint16_t) vector, |
vector_to_string(vector)); |
#endif |
} |
228,10 → 229,10 |
void universal_handler(uint64_t vector, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "Interruption: %#hx (%s)\n", |
fault_if_from_uspace(istate, "Interruption: %#hx (%s).", |
(uint16_t) vector, vector_to_string(vector)); |
dump_interrupted_context(istate); |
panic("Interruption: %#hx (%s)\n", (uint16_t) vector, |
panic("Interruption: %#hx (%s).", (uint16_t) vector, |
vector_to_string(vector)); |
} |
244,72 → 245,66 |
void external_interrupt(uint64_t vector, istate_t *istate) |
{ |
cr_ivr_t ivr; |
irq_t *irq; |
ivr.value = ivr_read(); |
srlz_d(); |
switch (ivr.vector) { |
case INTERRUPT_SPURIOUS: |
switch (ivr.vector) { |
case INTERRUPT_SPURIOUS: |
#ifdef CONFIG_DEBUG |
printf("cpu%d: spurious interrupt\n", CPU->id); |
printf("cpu%d: spurious interrupt\n", CPU->id); |
#endif |
break; |
break; |
#ifdef CONFIG_SMP |
case VECTOR_TLB_SHOOTDOWN_IPI: |
tlb_shootdown_ipi_recv(); |
end_of_local_irq(); |
break; |
case VECTOR_TLB_SHOOTDOWN_IPI: |
tlb_shootdown_ipi_recv(); |
end_of_local_irq(); |
break; |
#endif |
case INTERRUPT_TIMER: |
{ |
irq_t *irq = irq_dispatch_and_lock(ivr.vector); |
if (irq) { |
irq->handler(irq, irq->arg); |
spinlock_unlock(&irq->lock); |
} else { |
panic("\nUnhandled Internal Timer Interrupt (%d)\n",ivr.vector); |
} |
} |
break; |
default: |
{ |
int ack=false; |
irq_t *irq = irq_dispatch_and_lock(ivr.vector); |
if (irq) { |
/* |
* The IRQ handler was found. |
*/ |
if (irq->preack) { |
/* Send EOI before processing the interrupt */ |
end_of_local_irq(); |
ack=true; |
} |
irq->handler(irq, irq->arg); |
spinlock_unlock(&irq->lock); |
} else { |
/* |
* Unhandled interrupt. |
*/ |
end_of_local_irq(); |
ack=true; |
case INTERRUPT_TIMER: |
irq = irq_dispatch_and_lock(ivr.vector); |
if (irq) { |
irq->handler(irq); |
spinlock_unlock(&irq->lock); |
} else { |
panic("Unhandled Internal Timer Interrupt (%d).", |
ivr.vector); |
} |
break; |
default: |
irq = irq_dispatch_and_lock(ivr.vector); |
if (irq) { |
/* |
* The IRQ handler was found. |
*/ |
if (irq->preack) { |
/* Send EOI before processing the interrupt */ |
end_of_local_irq(); |
} |
irq->handler(irq); |
if (!irq->preack) |
end_of_local_irq(); |
spinlock_unlock(&irq->lock); |
} else { |
/* |
* Unhandled interrupt. |
*/ |
end_of_local_irq(); |
#ifdef CONFIG_DEBUG |
printf("\nUnhandled External Interrupt Vector %d\n",ivr.vector); |
printf("\nUnhandled External Interrupt Vector %d\n", |
ivr.vector); |
#endif |
} |
if(!ack) end_of_local_irq(); |
} |
break; |
} |
break; |
} |
} |
void trap_virtual_enable_irqs(uint16_t irqmask) |
{ |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia64/src/start.S |
---|
32,17 → 32,15 |
#include <mm/asid.h> |
#define RR_MASK (0xFFFFFFFF00000002) |
#define RID_SHIFT 8 |
#define PS_SHIFT 2 |
#define RID_SHIFT 8 |
#define PS_SHIFT 2 |
#define KERNEL_TRANSLATION_I 0x0010000000000661 |
#define KERNEL_TRANSLATION_D 0x0010000000000661 |
#define KERNEL_TRANSLATION_VIO 0x0010000000000671 |
#define KERNEL_TRANSLATION_IO 0x00100FFFFC000671 |
#define KERNEL_TRANSLATION_FW 0x00100000F0000671 |
#define KERNEL_TRANSLATION_I 0x0010000000000661 |
#define KERNEL_TRANSLATION_D 0x0010000000000661 |
#define KERNEL_TRANSLATION_VIO 0x0010000000000671 |
#define KERNEL_TRANSLATION_IO 0x00100FFFFC000671 |
#define KERNEL_TRANSLATION_FW 0x00100000F0000671 |
.section K_TEXT_START, "ax" |
.global kernel_image_start |
51,18 → 49,19 |
kernel_image_start: |
.auto |
#identifi self(CPU) in OS structures by ID / EID |
mov r9=cr64 |
mov r10=1 |
movl r12=0xffffffff |
movl r8=cpu_by_id_eid_list |
and r8=r8,r12 |
shr r9=r9,16 |
add r8=r8,r9 |
st1 [r8]=r10 |
#ifdef CONFIG_SMP |
# Identify self(CPU) in OS structures by ID / EID |
mov r9 = cr64 |
mov r10 = 1 |
movl r12 = 0xffffffff |
movl r8 = cpu_by_id_eid_list |
and r8 = r8, r12 |
shr r9 = r9, 16 |
add r8 = r8, r9 |
st1 [r8] = r10 |
#endif |
mov psr.l = r0 |
srlz.i |
srlz.d |
69,39 → 68,29 |
# Fill TR.i and TR.d using Region Register #VRN_KERNEL |
movl r8 = (VRN_KERNEL << VRN_SHIFT) |
mov r9 = rr[r8] |
movl r10 = (RR_MASK) |
and r9 = r10, r9 |
movl r10 = ((RID_KERNEL << RID_SHIFT) | (KERNEL_PAGE_WIDTH << PS_SHIFT)) |
or r9 = r10, r9 |
mov rr[r8] = r9 |
movl r8 = (VRN_KERNEL << VRN_SHIFT) |
mov cr.ifa = r8 |
mov r11 = cr.itir ;; |
movl r10 = (KERNEL_PAGE_WIDTH << PS_SHIFT);; |
or r10 =r10 , r11 ;; |
mov cr.itir = r10;; |
mov r11 = cr.itir |
movl r10 = (KERNEL_PAGE_WIDTH << PS_SHIFT) |
or r10 = r10, r11 |
mov cr.itir = r10 |
movl r10 = (KERNEL_TRANSLATION_I) |
itr.i itr[r0] = r10 |
movl r10 = (KERNEL_TRANSLATION_D) |
itr.d dtr[r0] = r10 |
movl r7 = 1 |
movl r8 = (VRN_KERNEL << VRN_SHIFT) | VIO_OFFSET |
mov cr.ifa = r8 |
108,15 → 97,13 |
movl r10 = (KERNEL_TRANSLATION_VIO) |
itr.d dtr[r7] = r10 |
mov r11 = cr.itir |
movl r10 = ~0xfc |
and r10 = r10, r11 |
movl r11 = (IO_PAGE_WIDTH << PS_SHIFT) |
or r10 = r10, r11 |
mov cr.itir = r10 |
mov r11 = cr.itir ;; |
movl r10 = ~0xfc;; |
and r10 =r10 , r11 ;; |
movl r11 = (IO_PAGE_WIDTH << PS_SHIFT);; |
or r10 =r10 , r11 ;; |
mov cr.itir = r10;; |
movl r7 = 2 |
movl r8 = (VRN_KERNEL << VRN_SHIFT) | IO_OFFSET |
mov cr.ifa = r8 |
123,16 → 110,15 |
movl r10 = (KERNEL_TRANSLATION_IO) |
itr.d dtr[r7] = r10 |
# Setup mapping for fimware arrea (also SAPIC) |
#setup mapping for fimware arrea (also SAPIC) |
mov r11 = cr.itir ;; |
movl r10 = ~0xfc;; |
and r10 =r10 , r11 ;; |
movl r11 = (FW_PAGE_WIDTH << PS_SHIFT);; |
or r10 =r10 , r11 ;; |
mov cr.itir = r10;; |
mov r11 = cr.itir |
movl r10 = ~0xfc |
and r10 = r10, r11 |
movl r11 = (FW_PAGE_WIDTH << PS_SHIFT) |
or r10 = r10, r11 |
mov cr.itir = r10 |
movl r7 = 3 |
movl r8 = (VRN_KERNEL << VRN_SHIFT) | FW_OFFSET |
mov cr.ifa = r8 |
139,13 → 125,11 |
movl r10 = (KERNEL_TRANSLATION_FW) |
itr.d dtr[r7] = r10 |
# Initialize PSR |
# initialize PSR |
movl r10 = (PSR_DT_MASK | PSR_RT_MASK | PSR_IT_MASK | PSR_IC_MASK) /* Enable paging */ |
mov r9 = psr |
or r10 = r10, r9 |
mov cr.ipsr = r10 |
mov cr.ifs = r0 |
155,11 → 139,14 |
srlz.i |
.explicit |
/* |
* Return From Interupt is the only the way to fill upper half word of PSR. |
* Return From Interrupt is the only way to |
* fill the upper half word of PSR. |
*/ |
rfi;; |
rfi ;; |
.global paging_start |
paging_start: |
167,27 → 154,29 |
* Now we are paging. |
*/ |
# switch to register bank 1 |
# Switch to register bank 1 |
bsw.1 |
#Am'I BSP or AP |
movl r20=bsp_started;; |
ld8 r20=[r20];; |
cmp.eq p3,p2=r20,r0;; |
#ifdef CONFIG_SMP |
# Am I BSP or AP? |
movl r20 = bsp_started ;; |
ld8 r20 = [r20] ;; |
cmp.eq p3, p2 = r20, r0 ;; |
#else |
cmp.eq p3, p2 = r0, r0 ;; /* you are BSP */ |
#endif /* CONFIG_SMP */ |
# initialize register stack |
# Initialize register stack |
mov ar.rsc = r0 |
movl r8 = (VRN_KERNEL << VRN_SHIFT) ;; |
mov ar.bspstore = r8 |
loadrs |
# initialize memory stack to some sane value |
# Initialize memory stack to some sane value |
movl r12 = stack0 ;; |
add r12 = -16, r12 /* allocate a scratch area on the stack */ |
# initialize gp (Global Pointer) register |
# Initialize gp (Global Pointer) register |
movl r20 = (VRN_KERNEL << VRN_SHIFT);; |
or r20 = r20,r1;; |
movl r1 = _hardcoded_load_address |
212,16 → 201,17 |
srlz.i |
srlz.d ;; |
#ifdef CONFIG_SMP |
(p2) movl r18 = main_ap ;; |
(p2) mov b1 = r18 ;; |
(p2) br.call.sptk.many b0 = b1 |
#Mark that BSP is on |
mov r20=1;; |
movl r21=bsp_started;; |
st8 [r21]=r20;; |
# Mark that BSP is on |
mov r20 = 1 ;; |
movl r21 = bsp_started ;; |
st8 [r21] = r20 ;; |
#endif |
br.call.sptk.many b0 = arch_pre_main |
movl r18 = main_bsp ;; |
228,49 → 218,51 |
mov b1 = r18 ;; |
br.call.sptk.many b0 = b1 |
0: |
br 0b |
#ifdef CONFIG_SMP |
.align 4096 |
kernel_image_ap_start: |
.auto |
#identifi self(CPU) in OS structures by ID / EID |
mov r9=cr64 |
mov r10=1 |
movl r12=0xffffffff |
movl r8=cpu_by_id_eid_list |
and r8=r8,r12 |
shr r9=r9,16 |
add r8=r8,r9 |
st1 [r8]=r10 |
# Identify self(CPU) in OS structures by ID / EID |
mov r9 = cr64 |
mov r10 = 1 |
movl r12 = 0xffffffff |
movl r8 = cpu_by_id_eid_list |
and r8 = r8, r12 |
shr r9 = r9, 16 |
add r8 = r8, r9 |
st1 [r8] = r10 |
#wait for wakeup sychro signal (#3 in cpu_by_id_eid_list) |
# Wait for wakeup synchro signal (#3 in cpu_by_id_eid_list) |
kernel_image_ap_start_loop: |
movl r11=kernel_image_ap_start_loop |
and r11=r11,r12 |
movl r11 = kernel_image_ap_start_loop |
and r11 = r11, r12 |
mov b1 = r11 |
ld1 r20=[r8];; |
movl r21=3;; |
cmp.eq p2,p3=r20,r21;; |
(p3)br.call.sptk.many b0 = b1 |
ld1 r20 = [r8] ;; |
movl r21 = 3 ;; |
cmp.eq p2, p3 = r20, r21 ;; |
(p3) br.call.sptk.many b0 = b1 |
movl r11=kernel_image_start |
and r11=r11,r12 |
mov b1 = r11 |
movl r11 = kernel_image_start |
and r11 = r11, r12 |
mov b1 = r11 |
br.call.sptk.many b0 = b1 |
.align 16 |
.global bsp_started |
bsp_started: |
.space 8 |
.align 4096 |
.global cpu_by_id_eid_list |
cpu_by_id_eid_list: |
.space 65536 |
#endif /* CONFIG_SMP */ |
//branches/tracing/kernel/arch/ia64/src/drivers/ega.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia64/src/drivers/ski.c |
---|
0,0 → 1,246 |
/* |
* Copyright (c) 2005 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia64 |
* @{ |
*/ |
/** @file |
*/ |
#include <arch/drivers/ski.h> |
#include <console/console.h> |
#include <console/chardev.h> |
#include <sysinfo/sysinfo.h> |
#include <arch/types.h> |
#include <proc/thread.h> |
#include <synch/spinlock.h> |
#include <arch/asm.h> |
#include <arch/drivers/kbd.h> |
#include <string.h> |
#include <arch.h> |
enum { |
/** Interval between polling in microseconds */ |
POLL_INTERVAL = 10000, /* 0.01 s */ |
/** Max. number of characters to pull out at a time */ |
POLL_LIMIT = 30, |
SKI_INIT_CONSOLE = 20, |
SKI_GETCHAR = 21, |
SKI_PUTCHAR = 31 |
}; |
static void ski_putchar(outdev_t *, const wchar_t, bool); |
static outdev_operations_t skiout_ops = { |
.write = ski_putchar |
}; |
static outdev_t skiout; /**< Ski output device. */ |
static bool initialized = false; |
static bool kbd_disabled = false; |
/** Initialize debug console |
* |
* Issue SSC (Simulator System Call) to |
* to open debug console. |
* |
*/ |
static void ski_init(void) |
{ |
if (initialized) |
return; |
asm volatile ( |
"mov r15 = %0\n" |
"break 0x80000\n" |
: |
: "i" (SKI_INIT_CONSOLE) |
: "r15", "r8" |
); |
initialized = true; |
} |
static void ski_do_putchar(const wchar_t ch) |
{ |
asm volatile ( |
"mov r15 = %[cmd]\n" |
"mov r32 = %[ch]\n" /* r32 is in0 */ |
"break 0x80000\n" /* modifies r8 */ |
: |
: [cmd] "i" (SKI_PUTCHAR), [ch] "r" (ch) |
: "r15", "in0", "r8" |
); |
} |
/** Display character on debug console |
* |
* Use SSC (Simulator System Call) to |
* display character on debug console. |
* |
* @param dev Character device. |
* @param ch Character to be printed. |
* @param silent Whether the output should be silenced. |
* |
*/ |
static void ski_putchar(outdev_t *dev, const wchar_t ch, bool silent) |
{ |
if (!silent) { |
if (ascii_check(ch)) { |
if (ch == '\n') |
ski_do_putchar('\r'); |
ski_do_putchar(ch); |
} else |
ski_do_putchar(U_SPECIAL); |
} |
} |
void skiout_init(void) |
{ |
ski_init(); |
outdev_initialize("skiout", &skiout, &skiout_ops); |
stdout = &skiout; |
sysinfo_set_item_val("fb", NULL, false); |
} |
/** Ask debug console if a key was pressed. |
* |
* Use SSC (Simulator System Call) to |
* get character from debug console. |
* |
* This call is non-blocking. |
* |
* @return ASCII code of pressed key or 0 if no key pressed. |
* |
*/ |
static wchar_t ski_getchar(void) |
{ |
uint64_t ch; |
asm volatile ( |
"mov r15 = %1\n" |
"break 0x80000;;\n" /* modifies r8 */ |
"mov %0 = r8;;\n" |
: "=r" (ch) |
: "i" (SKI_GETCHAR) |
: "r15", "r8" |
); |
return (wchar_t) ch; |
} |
/** Ask keyboard if a key was pressed. |
* |
* If so, it will repeat and pull up to POLL_LIMIT characters. |
*/ |
static void poll_keyboard(ski_instance_t *instance) |
{ |
wchar_t ch; |
int count; |
if (kbd_disabled) |
return; |
count = POLL_LIMIT; |
while (count > 0) { |
ch = ski_getchar(); |
if (ch == '\0') |
break; |
indev_push_character(instance->srlnin, ch); |
--count; |
} |
} |
/** Kernel thread for polling keyboard. */ |
static void kskipoll(void *arg) |
{ |
ski_instance_t *instance = (ski_instance_t *) arg; |
while (true) { |
if (!silent) |
poll_keyboard(instance); |
thread_usleep(POLL_INTERVAL); |
} |
} |
ski_instance_t *skiin_init(void) |
{ |
ski_init(); |
ski_instance_t *instance = |
malloc(sizeof(ski_instance_t), FRAME_ATOMIC); |
if (instance) { |
instance->thread = thread_create(kskipoll, instance, TASK, 0, |
"kskipoll", true); |
if (!instance->thread) { |
free(instance); |
return NULL; |
} |
instance->srlnin = NULL; |
} |
return instance; |
} |
void skiin_wire(ski_instance_t *instance, indev_t *srlnin) |
{ |
ASSERT(instance); |
ASSERT(srlnin); |
instance->srlnin = srlnin; |
thread_ready(instance->thread); |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.type", NULL, KBD_SKI); |
} |
void ski_kbd_grab(void) |
{ |
kbd_disabled = false; |
} |
void ski_kbd_release(void) |
{ |
kbd_disabled = true; |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia64/src/drivers/it.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia64 |
/** @addtogroup ia64 |
* @{ |
*/ |
/** @file |
44,22 → 44,20 |
#include <ddi/device.h> |
#include <arch.h> |
#define IT_SERVICE_CLOCKS 64 |
#define IT_SERVICE_CLOCKS 64 |
#define FREQ_NUMERATOR_SHIFT 32 |
#define FREQ_NUMERATOR_MASK 0xffffffff00000000LL |
#define FREQ_NUMERATOR_SHIFT 32 |
#define FREQ_NUMERATOR_MASK 0xffffffff00000000ULL |
#define FREQ_DENOMINATOR_SHIFT 0 |
#define FREQ_DENOMINATOR_MASK 0xffffffffLL |
#define FREQ_DENOMINATOR_SHIFT 0 |
#define FREQ_DENOMINATOR_MASK 0xffffffffULL |
uint64_t it_delta; |
static irq_t it_irq; |
static irq_ownership_t it_claim(void); |
static void it_interrupt(irq_t *irq, void *arg, ...); |
static irq_ownership_t it_claim(irq_t *); |
static void it_interrupt(irq_t *); |
/** Initialize Interval Timer. */ |
void it_init(void) |
66,8 → 64,7 |
{ |
cr_itv_t itv; |
if(config.cpu_active==1) |
{ |
if (config.cpu_active == 1) { |
irq_initialize(&it_irq); |
it_irq.inr = INTERRUPT_TIMER; |
it_irq.devno = device_assign_devno(); |
76,12 → 73,13 |
irq_register(&it_irq); |
uint64_t base_freq; |
base_freq = ((bootinfo->freq_scale) & FREQ_NUMERATOR_MASK) >> FREQ_NUMERATOR_SHIFT; |
base_freq = ((bootinfo->freq_scale) & FREQ_NUMERATOR_MASK) >> |
FREQ_NUMERATOR_SHIFT; |
base_freq *= bootinfo->sys_freq; |
base_freq /= ((bootinfo->freq_scale) & FREQ_DENOMINATOR_MASK) >> FREQ_DENOMINATOR_SHIFT; |
base_freq /= ((bootinfo->freq_scale) & FREQ_DENOMINATOR_MASK) >> |
FREQ_DENOMINATOR_SHIFT; |
it_delta = base_freq /HZ; |
it_delta = base_freq / HZ; |
} |
/* initialize Interval Timer external interrupt vector */ |
106,13 → 104,13 |
* |
* @return Always IRQ_ACCEPT. |
*/ |
irq_ownership_t it_claim(void) |
irq_ownership_t it_claim(irq_t *irq) |
{ |
return IRQ_ACCEPT; |
} |
/** Process Interval Timer interrupt. */ |
void it_interrupt(irq_t *irq, void *arg, ...) |
void it_interrupt(irq_t *irq) |
{ |
int64_t c; |
int64_t m; |
//branches/tracing/kernel/arch/arm32/_link.ld.in |
---|
1,15 → 1,16 |
/* |
* ARM linker script |
* |
* ARM linker script |
* |
* kernel text |
* kernel data |
* |
* |
*/ |
#define KERNEL_LOAD_ADDRESS 0x80200000 |
OUTPUT_ARCH(arm) |
ENTRY(kernel_image_start) |
ENTRY(kernel_image_start) |
SECTIONS { |
. = KERNEL_LOAD_ADDRESS; |
.text : { |
19,29 → 20,29 |
} |
.data : { |
kdata_start = .; |
*(.data); /* initialized data */ |
*(.data); /* initialized data */ |
hardcoded_ktext_size = .; |
LONG(ktext_end - ktext_start); |
LONG(ktext_end - ktext_start); |
hardcoded_kdata_size = .; |
LONG(kdata_end - kdata_start); |
hardcoded_load_address = .; |
LONG(KERNEL_LOAD_ADDRESS); |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
*(.rodata*); |
*(.sdata); |
*(.reginfo); |
symbol_table = .; |
*(symtab.*); |
*(symtab.*); |
} |
.sbss : { |
*(.sbss); |
*(.scommon); |
} |
kdata_end = .; |
/DISCARD/ : { |
*(.mdebug*); |
*(.pdr); |
48,5 → 49,4 |
*(.comment); |
*(.note); |
} |
} |
//branches/tracing/kernel/arch/arm32/include/machine.h |
---|
File deleted |
//branches/tracing/kernel/arch/arm32/include/console.h |
---|
File deleted |
//branches/tracing/kernel/arch/arm32/include/boot.h |
---|
File deleted |
//branches/tracing/kernel/arch/arm32/include/debug/print.h |
---|
File deleted |
//branches/tracing/kernel/arch/arm32/include/asm/boot.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup arm32 |
/** @addtogroup arm32 |
* @{ |
*/ |
/** @file |
37,26 → 37,9 |
#define KERN_arm32_ASM_BOOT_H_ |
/** Size of a temporary stack used for initial kernel start. */ |
#define TEMP_STACK_SIZE 0x100 |
#define TEMP_STACK_SIZE 0x100 |
#ifndef __ASM__ |
/** Kernel entry point. |
* |
* Implemented in assembly. Copies boot_bootinfo (declared as bootinfo in |
* boot/arch/arm32/loader/main.c) to #bootinfo struct. Then jumps to |
* #arch_pre_main and #main_bsp. |
* |
* @param entry Entry point address (not used). |
* @param boot_bootinfo Struct holding information about loaded tasks. |
* @param bootinfo_size Size of the bootinfo structure. |
*/ |
extern void kernel_image_start(void *entry, void *boot_bootinfo, |
unsigned int bootinfo_size); |
#endif |
#endif |
/** @} |
*/ |
//branches/tracing/kernel/arch/arm32/include/regutils.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup arm32 |
/** @addtogroup arm32 |
* @{ |
*/ |
/** |
57,7 → 57,10 |
static inline uint32_t nm## _status_reg_read(void) \ |
{ \ |
uint32_t retval; \ |
asm volatile("mrs %0, " #reg : "=r" (retval)); \ |
asm volatile( \ |
"mrs %[retval], " #reg \ |
: [retval] "=r" (retval) \ |
); \ |
return retval; \ |
} |
64,7 → 67,10 |
#define GEN_STATUS_WRITE(nm,reg,fieldname, field) \ |
static inline void nm## _status_reg_ ##fieldname## _write(uint32_t value) \ |
{ \ |
asm volatile("msr " #reg "_" #field ", %0" : : "r" (value)); \ |
asm volatile( \ |
"msr " #reg "_" #field ", %[value]" \ |
:: [value] "r" (value) \ |
); \ |
} |
//branches/tracing/kernel/arch/arm32/include/types.h |
---|
64,6 → 64,9 |
typedef uint32_t unative_t; |
typedef int32_t native_t; |
typedef struct { |
} fncptr_t; |
#define PRIp "x" /**< Format for uintptr_t. */ |
#define PRIs "u" /**< Format for size_t. */ |
#define PRIc "u" /**< Format for count_t. */ |
//branches/tracing/kernel/arch/arm32/include/atomic.h |
---|
26,10 → 26,10 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup arm32 |
/** @addtogroup arm32 |
* @{ |
*/ |
/** @file |
/** @file |
* @brief Atomic operations. |
*/ |
42,26 → 42,26 |
* @param i Value to be added. |
* |
* @return Value after addition. |
* |
*/ |
static inline long atomic_add(atomic_t *val, int i) |
{ |
int ret; |
volatile long *mem = &(val->count); |
asm volatile ( |
"1:\n" |
"ldr r2, [%1] \n" |
"add r3, r2, %2 \n" |
"str r3, %0 \n" |
"swp r3, r3, [%1] \n" |
"cmp r3, r2 \n" |
"bne 1b \n" |
: "=m" (ret) |
: "r" (mem), "r" (i) |
"1:\n" |
"ldr r2, [%[mem]]\n" |
"add r3, r2, %[i]\n" |
"str r3, %[ret]\n" |
"swp r3, r3, [%[mem]]\n" |
"cmp r3, r2\n" |
"bne 1b\n" |
: [ret] "=m" (ret) |
: [mem] "r" (mem), [i] "r" (i) |
: "r3", "r2" |
); |
return ret; |
} |
//branches/tracing/kernel/arch/arm32/include/arch.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup arm32 |
/** @addtogroup arm32 |
* @{ |
*/ |
/** @file |
36,6 → 36,26 |
#ifndef KERN_arm32_ARCH_H_ |
#define KERN_arm32_ARCH_H_ |
#define TASKMAP_MAX_RECORDS 32 |
#define CPUMAP_MAX_RECORDS 32 |
#define BOOTINFO_TASK_NAME_BUFLEN 32 |
#include <typedefs.h> |
typedef struct { |
uintptr_t addr; |
uint32_t size; |
char name[BOOTINFO_TASK_NAME_BUFLEN]; |
} utask_t; |
typedef struct { |
uint32_t cnt; |
utask_t tasks[TASKMAP_MAX_RECORDS]; |
} bootinfo_t; |
extern void arch_pre_main(void *entry, bootinfo_t *bootinfo); |
#endif |
/** @} |
//branches/tracing/kernel/arch/arm32/include/asm.h |
---|
26,10 → 26,10 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup arm32 |
/** @addtogroup arm32 |
* @{ |
*/ |
/** @file |
/** @file |
* @brief Declarations of functions implemented in assembly. |
*/ |
36,6 → 36,7 |
#ifndef KERN_arm32_ASM_H_ |
#define KERN_arm32_ASM_H_ |
#include <typedefs.h> |
#include <arch/types.h> |
#include <arch/stack.h> |
#include <config.h> |
46,19 → 47,50 |
{ |
} |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*port = v; |
} |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*port = v; |
} |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*port = v; |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
return *port; |
} |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
return *port; |
} |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
return *port; |
} |
/** Return base address of current stack. |
* |
* |
* Return the base address of the current stack. |
* The stack is assumed to be STACK_SIZE bytes long. |
* The stack must start on page boundary. |
* |
*/ |
static inline uintptr_t get_stack_base(void) |
{ |
uintptr_t v; |
asm volatile ( |
"and %0, sp, %1\n" |
: "=r" (v) |
: "r" (~(STACK_SIZE - 1)) |
"and %[v], sp, %[size]\n" |
: [v] "=r" (v) |
: [size] "r" (~(STACK_SIZE - 1)) |
); |
return v; |
} |
//branches/tracing/kernel/arch/arm32/include/mm/frame.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup arm32mm |
/** @addtogroup arm32mm |
* @{ |
*/ |
/** @file |
36,8 → 36,8 |
#ifndef KERN_arm32_FRAME_H_ |
#define KERN_arm32_FRAME_H_ |
#define FRAME_WIDTH 12 /* 4KB frames */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#define FRAME_WIDTH 12 /* 4KB frames */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#ifdef KERNEL |
#ifndef __ASM__ |
44,8 → 44,8 |
#include <arch/types.h> |
#define BOOT_PAGE_TABLE_SIZE 0x4000 |
#define BOOT_PAGE_TABLE_ADDRESS 0x4000 |
#define BOOT_PAGE_TABLE_SIZE 0x4000 |
#define BOOT_PAGE_TABLE_ADDRESS 0x4000 |
#define BOOT_PAGE_TABLE_START_FRAME (BOOT_PAGE_TABLE_ADDRESS >> FRAME_WIDTH) |
#define BOOT_PAGE_TABLE_SIZE_IN_FRAMES (BOOT_PAGE_TABLE_SIZE >> FRAME_WIDTH) |
//branches/tracing/kernel/arch/arm32/include/mm/page.h |
---|
193,9 → 193,8 |
static inline void set_ptl0_addr(pte_level0_t *pt) |
{ |
asm volatile ( |
"mcr p15, 0, %0, c2, c0, 0 \n" |
: |
: "r"(pt) |
"mcr p15, 0, %[pt], c2, c0, 0\n" |
:: [pt] "r" (pt) |
); |
} |
//branches/tracing/kernel/arch/arm32/include/mm/tlb.h |
---|
36,9 → 36,6 |
#ifndef KERN_arm32_TLB_H_ |
#define KERN_arm32_TLB_H_ |
#define tlb_arch_init() |
#define tlb_print() |
#endif |
/** @} |
//branches/tracing/kernel/arch/arm32/include/barrier.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup arm32 |
/** @addtogroup arm32 |
* @{ |
*/ |
/** @file |
39,12 → 39,12 |
/* |
* TODO: implement true ARM memory barriers for macros below. |
*/ |
#define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") |
#define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") |
#define memory_barrier() asm volatile ("" ::: "memory") |
#define read_barrier() asm volatile ("" ::: "memory") |
#define write_barrier() asm volatile ("" ::: "memory") |
#define memory_barrier() asm volatile ("" ::: "memory") |
#define read_barrier() asm volatile ("" ::: "memory") |
#define write_barrier() asm volatile ("" ::: "memory") |
#define smc_coherence(a) |
#define smc_coherence_block(a, l) |
//branches/tracing/kernel/arch/arm32/include/drivers/gxemul.h |
---|
38,41 → 38,33 |
#ifndef KERN_arm32_GXEMUL_H_ |
#define KERN_arm32_GXEMUL_H_ |
#include <console/chardev.h> |
/** Last interrupt number (beginning from 0) whose status is probed |
/** Last interrupt number (beginning from 0) whose status is probed |
* from interrupt controller |
*/ |
#define GXEMUL_IRQC_MAX_IRQ 8 |
#define GXEMUL_IRQC_MAX_IRQ 8 |
#define GXEMUL_KBD_IRQ 2 |
#define GXEMUL_TIMER_IRQ 4 |
/** Timer frequency */ |
#define GXEMUL_TIMER_FREQ 100 |
#define GXEMUL_TIMER_FREQ 100 |
/** Struct containing mappings of gxemul HW devices into kernel part |
* of virtual address space. |
*/ |
typedef struct { |
uintptr_t videoram; |
uintptr_t kbd; |
uintptr_t rtc; |
uintptr_t rtc_freq; |
uintptr_t rtc_ack; |
uintptr_t irqc; |
uintptr_t irqc_mask; |
uintptr_t irqc_unmask; |
} gxemul_hw_map_t; |
#define GXEMUL_KBD_ADDRESS 0x10000000 |
#define GXEMUL_MP_ADDRESS 0x11000000 |
#define GXEMUL_FB_ADDRESS 0x12000000 |
#define GXEMUL_RTC_ADDRESS 0x15000000 |
#define GXEMUL_IRQC_ADDRESS 0x16000000 |
extern void gxemul_hw_map_init(void); |
extern void gxemul_console_init(devno_t devno); |
extern void gxemul_release_console(void); |
extern void gxemul_grab_console(void); |
extern void gxemul_timer_irq_start(void); |
extern void gxemul_debug_putc(char ch); |
extern void gxemul_cpu_halt(void); |
extern void gxemul_irq_exception(int exc_no, istate_t *istate); |
extern size_t gxemul_get_memory_size(void); |
extern uintptr_t gxemul_get_fb_address(void); |
extern void *gxemul_kbd; |
extern void *gxemul_rtc; |
extern void *gxemul_irqc; |
#define GXEMUL_HALT_OFFSET 0x010 |
#define GXEMUL_RTC_FREQ_OFFSET 0x100 |
#define GXEMUL_MP_MEMSIZE_OFFSET 0x090 |
#define GXEMUL_RTC_ACK_OFFSET 0x110 |
extern void gxemul_init(void); |
#endif |
/** @} |
//branches/tracing/kernel/arch/arm32/Makefile.inc |
---|
29,10 → 29,6 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
BFD_NAME = elf32-littlearm |
BFD_ARCH = arm |
BFD = binary |
39,62 → 35,27 |
TARGET = arm-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/arm |
KERNEL_LOAD_ADDRESS = 0x80200000 |
# ifeq ($(MACHINE), gxemul_testarm) |
DMACHINE = MACHINE_GXEMUL_TESTARM |
# endif |
ATSIGN = % |
GCC_CFLAGS += -fno-zero-initialized-in-bss |
DEFS += -D__32_BITS__ -DKERNEL_LOAD_ADDRESS=$(KERNEL_LOAD_ADDRESS) -D$(DMACHINE) |
DEFS += -D__32_BITS__ |
# Compile with framebuffer support |
ifeq ($(CONFIG_FB), y) |
DEFS += -DCONFIG_FB -DFB_INVERT_ENDIAN |
endif |
## Compile with hierarchical page tables support. |
# |
CONFIG_PAGE_PT = y |
DEFS += -DCONFIG_PAGE_PT |
## Compile with support for address space identifiers. |
# |
# no HW support for ASIDs |
#CONFIG_ASID = y |
#CONFIG_ASID_FIFO = y |
## Compile with support with software division and multiplication. |
# |
CONFIG_SOFTINT = y |
ARCH_SOURCES = \ |
arch/$(ARCH)/src/start.S \ |
arch/$(ARCH)/src/asm.S \ |
arch/$(ARCH)/src/arm32.c \ |
arch/$(ARCH)/src/context.S \ |
arch/$(ARCH)/src/dummy.S \ |
arch/$(ARCH)/src/panic.S \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/interrupt.c \ |
arch/$(ARCH)/src/debug/print.c \ |
arch/$(ARCH)/src/console.c \ |
arch/$(ARCH)/src/exception.c \ |
arch/$(ARCH)/src/userspace.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/mm/page_fault.c |
# ifeq ($(MACHINE), gxemul_testarm) |
ARCH_SOURCES += arch/$(ARCH)/src/drivers/gxemul.c |
# endif |
arch/$(KARCH)/src/start.S \ |
arch/$(KARCH)/src/asm.S \ |
arch/$(KARCH)/src/arm32.c \ |
arch/$(KARCH)/src/context.S \ |
arch/$(KARCH)/src/dummy.S \ |
arch/$(KARCH)/src/panic.S \ |
arch/$(KARCH)/src/cpu/cpu.c \ |
arch/$(KARCH)/src/ddi/ddi.c \ |
arch/$(KARCH)/src/interrupt.c \ |
arch/$(KARCH)/src/exception.c \ |
arch/$(KARCH)/src/userspace.c \ |
arch/$(KARCH)/src/mm/as.c \ |
arch/$(KARCH)/src/mm/frame.c \ |
arch/$(KARCH)/src/mm/page.c \ |
arch/$(KARCH)/src/mm/tlb.c \ |
arch/$(KARCH)/src/mm/page_fault.c \ |
arch/$(KARCH)/src/drivers/gxemul.c |
//branches/tracing/kernel/arch/arm32/src/debug/print.c |
---|
File deleted |
//branches/tracing/kernel/arch/arm32/src/console.c |
---|
File deleted |
//branches/tracing/kernel/arch/arm32/src/exception.c |
---|
34,13 → 34,12 |
*/ |
#include <arch/exception.h> |
#include <arch/debug/print.h> |
#include <arch/memstr.h> |
#include <arch/regutils.h> |
#include <interrupt.h> |
#include <arch/machine.h> |
#include <arch/mm/page_fault.h> |
#include <arch/barrier.h> |
#include <arch/drivers/gxemul.h> |
#include <print.h> |
#include <syscall/syscall.h> |
#include <udebug/udebug.h> |
64,57 → 63,60 |
* |
* Temporary exception stack is used to save a few registers |
* before stack switch takes place. |
* |
*/ |
inline static void setup_stack_and_save_regs() |
{ |
asm volatile( |
"ldr r13, =exc_stack \n" |
"stmfd r13!, {r0} \n" |
"mrs r0, spsr \n" |
"and r0, r0, #0x1f \n" |
"cmp r0, #0x10 \n" |
"bne 1f \n" |
asm volatile ( |
"ldr r13, =exc_stack\n" |
"stmfd r13!, {r0}\n" |
"mrs r0, spsr\n" |
"and r0, r0, #0x1f\n" |
"cmp r0, #0x10\n" |
"bne 1f\n" |
/* prev mode was usermode */ |
"ldmfd r13!, {r0} \n" |
"ldr r13, =supervisor_sp \n" |
"ldr r13, [r13] \n" |
"stmfd r13!, {lr} \n" |
"stmfd r13!, {r0-r12} \n" |
"stmfd r13!, {r13, lr}^ \n" |
"mrs r0, spsr \n" |
"stmfd r13!, {r0} \n" |
"b 2f \n" |
"ldmfd r13!, {r0}\n" |
"ldr r13, =supervisor_sp\n" |
"ldr r13, [r13]\n" |
"stmfd r13!, {lr}\n" |
"stmfd r13!, {r0-r12}\n" |
"stmfd r13!, {r13, lr}^\n" |
"mrs r0, spsr\n" |
"stmfd r13!, {r0}\n" |
"b 2f\n" |
/* mode was not usermode */ |
"1:\n" |
"stmfd r13!, {r1, r2, r3} \n" |
"mrs r1, cpsr \n" |
"mov r2, lr \n" |
"bic r1, r1, #0x1f \n" |
"orr r1, r1, r0 \n" |
"mrs r0, cpsr \n" |
"msr cpsr_c, r1 \n" |
"mov r3, r13 \n" |
"stmfd r13!, {r2} \n" |
"mov r2, lr \n" |
"stmfd r13!, {r4-r12} \n" |
"mov r1, r13 \n" |
/* the following two lines are for debugging */ |
"mov sp, #0 \n" |
"mov lr, #0 \n" |
"msr cpsr_c, r0 \n" |
"ldmfd r13!, {r4, r5, r6, r7} \n" |
"stmfd r1!, {r4, r5, r6} \n" |
"stmfd r1!, {r7} \n" |
"stmfd r1!, {r2} \n" |
"stmfd r1!, {r3} \n" |
"mrs r0, spsr \n" |
"stmfd r1!, {r0} \n" |
"mov r13, r1 \n" |
"2:\n" |
"1:\n" |
"stmfd r13!, {r1, r2, r3}\n" |
"mrs r1, cpsr\n" |
"mov r2, lr\n" |
"bic r1, r1, #0x1f\n" |
"orr r1, r1, r0\n" |
"mrs r0, cpsr\n" |
"msr cpsr_c, r1\n" |
"mov r3, r13\n" |
"stmfd r13!, {r2}\n" |
"mov r2, lr\n" |
"stmfd r13!, {r4-r12}\n" |
"mov r1, r13\n" |
/* the following two lines are for debugging */ |
"mov sp, #0\n" |
"mov lr, #0\n" |
"msr cpsr_c, r0\n" |
"ldmfd r13!, {r4, r5, r6, r7}\n" |
"stmfd r1!, {r4, r5, r6}\n" |
"stmfd r1!, {r7}\n" |
"stmfd r1!, {r2}\n" |
"stmfd r1!, {r3}\n" |
"mrs r0, spsr\n" |
"stmfd r1!, {r0}\n" |
"mov r13, r1\n" |
"2:\n" |
); |
} |
190,10 → 192,13 |
} |
/** Calls exception dispatch routine. */ |
#define CALL_EXC_DISPATCH(exception) \ |
asm("mov r0, %0" : : "i" (exception)); \ |
asm("mov r1, r13"); \ |
asm("bl exc_dispatch"); |
#define CALL_EXC_DISPATCH(exception) \ |
asm volatile ( \ |
"mov r0, %[exc]\n" \ |
"mov r1, r13\n" \ |
"bl exc_dispatch\n" \ |
:: [exc] "i" (exception) \ |
);\ |
/** General exception handler. |
* |
202,9 → 207,9 |
* |
* @param exception Exception number. |
*/ |
#define PROCESS_EXCEPTION(exception) \ |
setup_stack_and_save_regs(); \ |
CALL_EXC_DISPATCH(exception) \ |
#define PROCESS_EXCEPTION(exception) \ |
setup_stack_and_save_regs(); \ |
CALL_EXC_DISPATCH(exception) \ |
load_regs(); |
/** Updates specified exception vector to jump to given handler. |
255,7 → 260,10 |
/** Low-level Prefetch Abort Exception handler. */ |
static void prefetch_abort_exception_entry(void) |
{ |
asm("sub lr, lr, #4"); |
asm volatile ( |
"sub lr, lr, #4" |
); |
PROCESS_EXCEPTION(EXC_PREFETCH_ABORT); |
} |
262,7 → 270,10 |
/** Low-level Data Abort Exception handler. */ |
static void data_abort_exception_entry(void) |
{ |
asm("sub lr, lr, #8"); |
asm volatile ( |
"sub lr, lr, #8" |
); |
PROCESS_EXCEPTION(EXC_DATA_ABORT); |
} |
274,7 → 285,10 |
*/ |
static void irq_exception_entry(void) |
{ |
asm("sub lr, lr, #4"); |
asm volatile ( |
"sub lr, lr, #4" |
); |
setup_stack_and_save_regs(); |
switch_to_irq_servicing_mode(); |
294,6 → 308,12 |
istate->r3, istate->r4, istate->r5, istate->r6); |
} |
/** Returns the mask of active interrupts. */ |
static inline uint32_t gxemul_irqc_get_sources(void) |
{ |
return *((uint32_t *) gxemul_irqc); |
} |
/** Interrupt Exception handler. |
* |
* Determines the sources of interrupt and calls their handlers. |
300,7 → 320,23 |
*/ |
static void irq_exception(int exc_no, istate_t *istate) |
{ |
machine_irq_exception(exc_no, istate); |
uint32_t sources = gxemul_irqc_get_sources(); |
unsigned int i; |
for (i = 0; i < GXEMUL_IRQC_MAX_IRQ; i++) { |
if (sources & (1 << i)) { |
irq_t *irq = irq_dispatch_and_lock(i); |
if (irq) { |
/* The IRQ handler was found. */ |
irq->handler(irq); |
spinlock_unlock(&irq->lock); |
} else { |
/* Spurious interrupt.*/ |
printf("cpu%d: spurious interrupt (inum=%d)\n", |
CPU->id, i); |
} |
} |
} |
} |
/** Fills exception vectors with appropriate exception handlers. */ |
324,7 → 360,7 |
install_handler((unsigned) irq_exception_entry, |
(unsigned *) EXC_IRQ_VEC); |
install_handler((unsigned)fiq_exception_entry, |
install_handler((unsigned) fiq_exception_entry, |
(unsigned *) EXC_FIQ_VEC); |
} |
334,17 → 370,23 |
{ |
uint32_t control_reg; |
asm volatile("mrc p15, 0, %0, c1, c1" : "=r" (control_reg)); |
asm volatile ( |
"mrc p15, 0, %[control_reg], c1, c1" |
: [control_reg] "=r" (control_reg) |
); |
/* switch on the high vectors bit */ |
control_reg |= CP15_R1_HIGH_VECTORS_BIT; |
asm volatile("mcr p15, 0, %0, c1, c1" : : "r" (control_reg)); |
asm volatile ( |
"mcr p15, 0, %[control_reg], c1, c1" |
:: [control_reg] "r" (control_reg) |
); |
} |
#endif |
/** Initializes exception handling. |
* |
* |
* Installs low-level exception handlers and then registers |
* exceptions and their handlers to kernel exception dispatcher. |
*/ |
368,18 → 410,18 |
*/ |
void print_istate(istate_t *istate) |
{ |
dprintf("istate dump:\n"); |
dprintf(" r0: %x r1: %x r2: %x r3: %x\n", |
printf("istate dump:\n"); |
printf(" r0: %x r1: %x r2: %x r3: %x\n", |
istate->r0, istate->r1, istate->r2, istate->r3); |
dprintf(" r4: %x r5: %x r6: %x r7: %x\n", |
printf(" r4: %x r5: %x r6: %x r7: %x\n", |
istate->r4, istate->r5, istate->r6, istate->r7); |
dprintf(" r8: %x r8: %x r10: %x r11: %x\n", |
printf(" r8: %x r8: %x r10: %x r11: %x\n", |
istate->r8, istate->r9, istate->r10, istate->r11); |
dprintf(" r12: %x sp: %x lr: %x spsr: %x\n", |
printf(" r12: %x sp: %x lr: %x spsr: %x\n", |
istate->r12, istate->sp, istate->lr, istate->spsr); |
dprintf(" pc: %x\n", istate->pc); |
printf(" pc: %x\n", istate->pc); |
} |
/** @} |
//branches/tracing/kernel/arch/arm32/src/asm.S |
---|
30,6 → 30,7 |
.text |
.global memsetb |
.global memsetw |
.global memcpy |
.global memcpy_from_uspace |
.global memcpy_to_uspace |
39,6 → 40,9 |
memsetb: |
b _memsetb |
memsetw: |
b _memsetw |
memcpy: |
memcpy_from_uspace: |
memcpy_to_uspace: |
//branches/tracing/kernel/arch/arm32/src/arm32.c |
---|
34,36 → 34,37 |
*/ |
#include <arch.h> |
#include <arch/boot.h> |
#include <config.h> |
#include <arch/console.h> |
#include <ddi/device.h> |
#include <genarch/fb/fb.h> |
#include <genarch/fb/visuals.h> |
#include <genarch/drivers/dsrln/dsrlnin.h> |
#include <genarch/drivers/dsrln/dsrlnout.h> |
#include <genarch/srln/srln.h> |
#include <sysinfo/sysinfo.h> |
#include <console/console.h> |
#include <ddi/irq.h> |
#include <arch/debug/print.h> |
#include <arch/drivers/gxemul.h> |
#include <print.h> |
#include <config.h> |
#include <interrupt.h> |
#include <arch/regutils.h> |
#include <arch/machine.h> |
#include <userspace.h> |
#include <macros.h> |
#include <string.h> |
/** Information about loaded tasks. */ |
bootinfo_t bootinfo; |
/** Performs arm32 specific initialization before main_bsp() is called. */ |
void arch_pre_main(void) |
/** Performs arm32-specific initialization before main_bsp() is called. */ |
void arch_pre_main(void *entry __attribute__((unused)), bootinfo_t *bootinfo) |
{ |
unsigned int i; |
init.cnt = bootinfo.cnt; |
for (i = 0; i < bootinfo.cnt; ++i) { |
init.tasks[i].addr = bootinfo.tasks[i].addr; |
init.tasks[i].size = bootinfo.tasks[i].size; |
init.cnt = bootinfo->cnt; |
for (i = 0; i < min3(bootinfo->cnt, TASKMAP_MAX_RECORDS, CONFIG_INIT_TASKS); ++i) { |
init.tasks[i].addr = bootinfo->tasks[i].addr; |
init.tasks[i].size = bootinfo->tasks[i].size; |
str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN, |
bootinfo->tasks[i].name); |
} |
} |
/** Performs arm32 specific initialization before mm is initialized. */ |
76,26 → 77,27 |
/** Performs arm32 specific initialization afterr mm is initialized. */ |
void arch_post_mm_init(void) |
{ |
machine_hw_map_init(); |
gxemul_init(); |
/* Initialize exception dispatch table */ |
exception_init(); |
interrupt_init(); |
console_init(device_assign_devno()); |
#ifdef CONFIG_FB |
fb_properties_t prop = { |
.addr = machine_get_fb_address(), |
.addr = GXEMUL_FB_ADDRESS, |
.offset = 0, |
.x = 640, |
.y = 480, |
.scan = 1920, |
.visual = VISUAL_RGB_8_8_8, |
.visual = VISUAL_BGR_8_8_8, |
}; |
fb_init(&prop); |
#endif |
#else |
#ifdef CONFIG_ARM_PRN |
dsrlnout_init((ioport8_t *) gxemul_kbd); |
#endif /* CONFIG_ARM_PRN */ |
#endif /* CONFIG_FB */ |
} |
/** Performs arm32 specific tasks needed after cpu is initialized. |
124,6 → 126,30 |
*/ |
void arch_post_smp_init(void) |
{ |
#ifdef CONFIG_ARM_KBD |
/* |
* Initialize the GXemul keyboard port. Then initialize the serial line |
* module and connect it to the GXemul keyboard. |
*/ |
dsrlnin_instance_t *dsrlnin_instance |
= dsrlnin_init((dsrlnin_t *) gxemul_kbd, GXEMUL_KBD_IRQ); |
if (dsrlnin_instance) { |
srln_instance_t *srln_instance = srln_init(); |
if (srln_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *srln = srln_wire(srln_instance, sink); |
dsrlnin_wire(dsrlnin_instance, srln); |
} |
} |
/* |
* This is the necessary evil until the userspace driver is entirely |
* self-sufficient. |
*/ |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.inr", NULL, GXEMUL_KBD_IRQ); |
sysinfo_set_item_val("kbd.address.virtual", NULL, (unative_t) gxemul_kbd); |
#endif |
} |
157,7 → 183,8 |
/** Halts CPU. */ |
void cpu_halt(void) |
{ |
machine_cpu_halt(); |
*((char *) (gxemul_kbd + GXEMUL_HALT_OFFSET)) |
= 0; |
} |
/** Reboot. */ |
164,9 → 191,35 |
void arch_reboot() |
{ |
/* not implemented */ |
for (;;) |
; |
while (1); |
} |
/** Construct function pointer |
* |
* @param fptr function pointer structure |
* @param addr function address |
* @param caller calling function address |
* |
* @return address of the function pointer |
* |
*/ |
void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
{ |
return addr; |
} |
/** Acquire console back for kernel. */ |
void arch_grab_console(void) |
{ |
#ifdef CONFIG_FB |
fb_redraw(); |
#endif |
} |
/** Return console to userspace. */ |
void arch_release_console(void) |
{ |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/arm32/src/cpu/cpu.c |
---|
36,7 → 36,7 |
#include <arch/cpu.h> |
#include <cpu.h> |
#include <arch.h> |
#include <print.h> |
#include <print.h> |
/** Number of indexes left out in the #imp_data array */ |
#define IMP_DATA_START_OFFSET 0x40 |
82,10 → 82,10 |
{ |
uint32_t ident; |
asm volatile ( |
"mrc p15, 0, %0, c0, c0, 0\n" |
: "=r" (ident) |
"mrc p15, 0, %[ident], c0, c0, 0\n" |
: [ident] "=r" (ident) |
); |
cpu->imp_num = ident >> 24; |
cpu->variant_num = (ident << 8) >> 28; |
cpu->arch_num = (ident << 12) >> 28; |
//branches/tracing/kernel/arch/arm32/src/mm/tlb.c |
---|
48,7 → 48,7 |
asm volatile ( |
"eor r1, r1\n" |
"mcr p15, 0, r1, c8, c7, 0\n" |
: : : "r1" |
::: "r1" |
); |
} |
68,9 → 68,8 |
static inline void invalidate_page(uintptr_t page) |
{ |
asm volatile ( |
"mcr p15, 0, %0, c8, c7, 1" |
: |
: "r" (page) |
"mcr p15, 0, %[page], c8, c7, 1\n" |
:: [page] "r" (page) |
); |
} |
81,7 → 80,7 |
* @param page Address of the first page whose entry is to be invalidated. |
* @param cnt Number of entries to invalidate. |
*/ |
void tlb_invalidate_pages(asid_t asid, uintptr_t page, count_t cnt) |
void tlb_invalidate_pages(asid_t asid __attribute__((unused)), uintptr_t page, count_t cnt) |
{ |
unsigned int i; |
89,5 → 88,13 |
invalidate_page(page + i * PAGE_SIZE); |
} |
void tlb_arch_init(void) |
{ |
} |
void tlb_print(void) |
{ |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/arm32/src/mm/page_fault.c |
---|
34,7 → 34,6 |
*/ |
#include <panic.h> |
#include <arch/exception.h> |
#include <arch/debug/print.h> |
#include <arch/mm/page_fault.h> |
#include <mm/as.h> |
#include <genarch/mm/page_pt.h> |
49,12 → 48,13 |
static inline fault_status_t read_fault_status_register(void) |
{ |
fault_status_union_t fsu; |
/* fault status is stored in CP15 register 5 */ |
asm volatile ( |
"mrc p15, 0, %0, c5, c0, 0" |
: "=r"(fsu.dummy) |
"mrc p15, 0, %[dummy], c5, c0, 0" |
: [dummy] "=r" (fsu.dummy) |
); |
return fsu.fs; |
} |
61,17 → 61,18 |
/** Returns FAR (fault address register) content. |
* |
* @return FAR (fault address register) content (address that caused a page |
* fault) |
* fault) |
*/ |
static inline uintptr_t read_fault_address_register(void) |
{ |
uintptr_t ret; |
/* fault adress is stored in CP15 register 6 */ |
asm volatile ( |
"mrc p15, 0, %0, c6, c0, 0" |
: "=r"(ret) |
"mrc p15, 0, %[ret], c6, c0, 0" |
: [ret] "=r" (ret) |
); |
return ret; |
} |
80,29 → 81,26 |
* @param instr Instruction |
* |
* @return true when instruction is load/store, false otherwise |
* |
*/ |
static inline bool is_load_store_instruction(instruction_t instr) |
{ |
/* load store immediate offset */ |
if (instr.type == 0x2) { |
if (instr.type == 0x2) |
return true; |
} |
/* load store register offset */ |
if (instr.type == 0x3 && instr.bit4 == 0) { |
if ((instr.type == 0x3) && (instr.bit4 == 0)) |
return true; |
} |
/* load store multiple */ |
if (instr.type == 0x4) { |
if (instr.type == 0x4) |
return true; |
} |
/* oprocessor load/store */ |
if (instr.type == 0x6) { |
if (instr.type == 0x6) |
return true; |
} |
return false; |
} |
115,12 → 113,11 |
static inline bool is_swap_instruction(instruction_t instr) |
{ |
/* swap, swapb instruction */ |
if (instr.type == 0x0 && |
(instr.opcode == 0x8 || instr.opcode == 0xa) && |
instr.access == 0x0 && instr.bits567 == 0x4 && instr.bit4 == 1) { |
if ((instr.type == 0x0) && |
((instr.opcode == 0x8) || (instr.opcode == 0xa)) && |
(instr.access == 0x0) && (instr.bits567 == 0x4) && (instr.bit4 == 1)) |
return true; |
} |
return false; |
} |
142,8 → 139,8 |
/* undefined instructions */ |
if (instr.condition == 0xf) { |
panic("page_fault - instruction doesn't access memory " |
"(instr_code: %x, badvaddr:%x)", instr, badvaddr); |
panic("page_fault - instruction does not access memory " |
"(instr_code: %x, badvaddr:%x).", instr, badvaddr); |
return PF_ACCESS_EXEC; |
} |
162,7 → 159,7 |
} |
panic("page_fault - instruction doesn't access memory " |
"(instr_code: %x, badvaddr:%x)", instr, badvaddr); |
"(instr_code: %x, badvaddr:%x).", instr, badvaddr); |
return PF_ACCESS_EXEC; |
} |
184,12 → 181,12 |
if (ret == AS_PF_FAULT) { |
print_istate(istate); |
dprintf("page fault - pc: %x, va: %x, status: %x(%x), " |
printf("page fault - pc: %x, va: %x, status: %x(%x), " |
"access:%d\n", istate->pc, badvaddr, fsr.status, fsr, |
access); |
fault_if_from_uspace(istate, "Page fault: %#x", badvaddr); |
panic("page fault\n"); |
fault_if_from_uspace(istate, "Page fault: %#x.", badvaddr); |
panic("Page fault."); |
} |
} |
232,9 → 229,9 |
int ret = as_page_fault(istate->pc, PF_ACCESS_EXEC, istate); |
if (ret == AS_PF_FAULT) { |
dprintf("prefetch_abort\n"); |
printf("prefetch_abort\n"); |
print_istate(istate); |
panic("page fault - prefetch_abort at address: %x\n", |
panic("page fault - prefetch_abort at address: %x.", |
istate->pc); |
} |
//branches/tracing/kernel/arch/arm32/src/mm/frame.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup arm32mm |
/** @addtogroup arm32mm |
* @{ |
*/ |
/** @file |
35,9 → 35,8 |
#include <mm/frame.h> |
#include <arch/mm/frame.h> |
#include <arch/machine.h> |
#include <arch/drivers/gxemul.h> |
#include <config.h> |
#include <arch/debug/print.h> |
/** Address of the last frame in the memory. */ |
uintptr_t last_frame = 0; |
45,11 → 44,12 |
/** Creates memory zones. */ |
void frame_arch_init(void) |
{ |
/* all memory as one zone */ |
zone_create(0, ADDR2PFN(machine_get_memory_size()), |
last_frame = *((uintptr_t *) (GXEMUL_MP_ADDRESS + GXEMUL_MP_MEMSIZE_OFFSET)); |
/* All memory as one zone */ |
zone_create(0, ADDR2PFN(last_frame), |
BOOT_PAGE_TABLE_START_FRAME + BOOT_PAGE_TABLE_SIZE_IN_FRAMES, 0); |
last_frame = machine_get_memory_size(); |
/* blacklist boot page table */ |
frame_mark_unavailable(BOOT_PAGE_TABLE_START_FRAME, |
BOOT_PAGE_TABLE_SIZE_IN_FRAMES); |
58,10 → 58,9 |
/** Frees the boot page table. */ |
void boot_page_table_free(void) |
{ |
int i; |
for (i = 0; i < BOOT_PAGE_TABLE_SIZE_IN_FRAMES; i++) { |
unsigned int i; |
for (i = 0; i < BOOT_PAGE_TABLE_SIZE_IN_FRAMES; i++) |
frame_free(i * FRAME_SIZE + BOOT_PAGE_TABLE_ADDRESS); |
} |
} |
/** @} |
//branches/tracing/kernel/arch/arm32/src/mm/page.c |
---|
51,19 → 51,15 |
*/ |
void page_arch_init(void) |
{ |
int flags = PAGE_CACHEABLE; |
page_mapping_operations = &pt_mapping_operations; |
uintptr_t cur; |
int flags; |
page_mapping_operations = &pt_mapping_operations; |
flags = PAGE_CACHEABLE; |
/* PA2KA(identity) mapping for all frames until last_frame */ |
for (cur = 0; cur < last_frame; cur += FRAME_SIZE) { |
/* Kernel identity mapping */ |
for (cur = 0; cur < last_frame; cur += FRAME_SIZE) |
page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags); |
} |
/* create mapping for exception table at high offset */ |
/* Create mapping for exception table at high offset */ |
#ifdef HIGH_EXCEPTION_VECTORS |
void *virtaddr = frame_alloc(ONE_FRAME, FRAME_KA); |
page_mapping_insert(AS_KERNEL, EXC_BASE_ADDRESS, KA2PA(virtaddr), flags); |
70,9 → 66,9 |
#else |
#error "Only high exception vector supported now" |
#endif |
as_switch(NULL, AS_KERNEL); |
boot_page_table_free(); |
} |
90,10 → 86,10 |
{ |
if (last_frame + ALIGN_UP(size, PAGE_SIZE) > |
KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) { |
panic("Unable to map physical memory %p (%d bytes)", |
panic("Unable to map physical memory %p (%d bytes).", |
physaddr, size) |
} |
uintptr_t virtaddr = PA2KA(last_frame); |
pfn_t i; |
for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) { |
101,7 → 97,7 |
physaddr + PFN2ADDR(i), |
PAGE_NOT_CACHEABLE | PAGE_READ | PAGE_WRITE | PAGE_KERNEL); |
} |
last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE); |
return virtaddr; |
} |
//branches/tracing/kernel/arch/arm32/src/panic.S |
---|
31,5 → 31,5 |
.global panic_printf |
panic_printf: |
bl debug_printf |
bl printf |
bl cpu_halt |
//branches/tracing/kernel/arch/arm32/src/userspace.c |
---|
90,12 → 90,11 |
/* set user mode, set registers, jump */ |
asm volatile ( |
"mov sp, %0 \n" |
"msr spsr_c, %1 \n" |
"ldmfd sp!, {r0-r12, sp, lr}^ \n" |
"mov sp, %[ustate]\n" |
"msr spsr_c, %[user_mode]\n" |
"ldmfd sp!, {r0-r12, sp, lr}^\n" |
"ldmfd sp!, {pc}^\n" |
: |
: "r" (&ustate), "r" (user_mode) |
:: [ustate] "r" (&ustate), [user_mode] "r" (user_mode) |
); |
/* unreachable */ |
//branches/tracing/kernel/arch/arm32/src/interrupt.c |
---|
35,13 → 35,16 |
#include <arch/asm.h> |
#include <arch/regutils.h> |
#include <arch/drivers/gxemul.h> |
#include <ddi/irq.h> |
#include <arch/machine.h> |
#include <ddi/device.h> |
#include <interrupt.h> |
/** Initial size of a table holding interrupt handlers. */ |
#define IRQ_COUNT 8 |
static irq_t gxemul_timer_irq; |
/** Disable interrupts. |
* |
* @return Old interrupt priority level. |
49,7 → 52,7 |
ipl_t interrupts_disable(void) |
{ |
ipl_t ipl = current_status_reg_read(); |
current_status_reg_control_write(STATUS_REG_IRQ_DISABLED_BIT | ipl); |
return ipl; |
62,9 → 65,9 |
ipl_t interrupts_enable(void) |
{ |
ipl_t ipl = current_status_reg_read(); |
current_status_reg_control_write(ipl & ~STATUS_REG_IRQ_DISABLED_BIT); |
return ipl; |
} |
88,6 → 91,41 |
return current_status_reg_read(); |
} |
/** Starts gxemul Real Time Clock device, which asserts regular interrupts. |
* |
* @param frequency Interrupts frequency (0 disables RTC). |
*/ |
static void gxemul_timer_start(uint32_t frequency) |
{ |
*((uint32_t *) (gxemul_rtc + GXEMUL_RTC_FREQ_OFFSET)) |
= frequency; |
} |
static irq_ownership_t gxemul_timer_claim(irq_t *irq) |
{ |
return IRQ_ACCEPT; |
} |
/** Timer interrupt handler. |
* |
* @param irq Interrupt information. |
* @param arg Not used. |
*/ |
static void gxemul_timer_irq_handler(irq_t *irq) |
{ |
/* |
* We are holding a lock which prevents preemption. |
* Release the lock, call clock() and reacquire the lock again. |
*/ |
spinlock_unlock(&irq->lock); |
clock(); |
spinlock_lock(&irq->lock); |
/* acknowledge tick */ |
*((uint32_t *) (gxemul_rtc + GXEMUL_RTC_ACK_OFFSET)) |
= 0; |
} |
/** Initialize basic tables for exception dispatching |
* and starts the timer. |
*/ |
94,7 → 132,16 |
void interrupt_init(void) |
{ |
irq_init(IRQ_COUNT, IRQ_COUNT); |
machine_timer_irq_start(); |
irq_initialize(&gxemul_timer_irq); |
gxemul_timer_irq.devno = device_assign_devno(); |
gxemul_timer_irq.inr = GXEMUL_TIMER_IRQ; |
gxemul_timer_irq.claim = gxemul_timer_claim; |
gxemul_timer_irq.handler = gxemul_timer_irq_handler; |
irq_register(&gxemul_timer_irq); |
gxemul_timer_start(GXEMUL_TIMER_FREQ); |
} |
/** @} |
//branches/tracing/kernel/arch/arm32/src/drivers/gxemul.c |
---|
33,361 → 33,19 |
* @brief GXemul drivers. |
*/ |
#include <interrupt.h> |
#include <ipc/irq.h> |
#include <console/chardev.h> |
#include <arch/drivers/gxemul.h> |
#include <console/console.h> |
#include <sysinfo/sysinfo.h> |
#include <print.h> |
#include <ddi/device.h> |
#include <mm/page.h> |
#include <arch/machine.h> |
#include <arch/debug/print.h> |
/* Addresses of devices. */ |
#define GXEMUL_VIDEORAM 0x10000000 |
#define GXEMUL_KBD 0x10000000 |
#define GXEMUL_HALT_OFFSET 0x10 |
#define GXEMUL_RTC 0x15000000 |
#define GXEMUL_RTC_FREQ_OFFSET 0x100 |
#define GXEMUL_RTC_ACK_OFFSET 0x110 |
#define GXEMUL_IRQC 0x16000000 |
#define GXEMUL_IRQC_MASK_OFFSET 0x4 |
#define GXEMUL_IRQC_UNMASK_OFFSET 0x8 |
#define GXEMUL_MP 0x11000000 |
#define GXEMUL_MP_MEMSIZE_OFFSET 0x0090 |
#define GXEMUL_FB 0x12000000 |
void *gxemul_kbd; |
void *gxemul_rtc; |
void *gxemul_irqc; |
/* IRQs */ |
#define GXEMUL_KBD_IRQ 2 |
#define GXEMUL_TIMER_IRQ 4 |
static gxemul_hw_map_t gxemul_hw_map; |
static chardev_t console; |
static irq_t gxemul_console_irq; |
static irq_t gxemul_timer_irq; |
static bool hw_map_init_called = false; |
static void gxemul_kbd_enable(chardev_t *dev); |
static void gxemul_kbd_disable(chardev_t *dev); |
static void gxemul_write(chardev_t *dev, const char ch); |
static char gxemul_do_read(chardev_t *dev); |
static chardev_operations_t gxemul_ops = { |
.resume = gxemul_kbd_enable, |
.suspend = gxemul_kbd_disable, |
.write = gxemul_write, |
.read = gxemul_do_read, |
}; |
/** Returns the mask of active interrupts. */ |
static inline uint32_t gxemul_irqc_get_sources(void) |
void gxemul_init(void) |
{ |
return *((uint32_t *) gxemul_hw_map.irqc); |
gxemul_kbd = (void *) hw_map(GXEMUL_KBD_ADDRESS, PAGE_SIZE); |
gxemul_rtc = (void *) hw_map(GXEMUL_RTC_ADDRESS, PAGE_SIZE); |
gxemul_irqc = (void *) hw_map(GXEMUL_IRQC_ADDRESS, PAGE_SIZE); |
} |
/** Masks interrupt. |
* |
* @param irq interrupt number |
*/ |
static inline void gxemul_irqc_mask(uint32_t irq) |
{ |
*((uint32_t *) gxemul_hw_map.irqc_mask) = irq; |
} |
/** Unmasks interrupt. |
* |
* @param irq interrupt number |
*/ |
static inline void gxemul_irqc_unmask(uint32_t irq) |
{ |
*((uint32_t *) gxemul_hw_map.irqc_unmask) = irq; |
} |
/** Initializes #gxemul_hw_map. */ |
void gxemul_hw_map_init(void) |
{ |
gxemul_hw_map.videoram = hw_map(GXEMUL_VIDEORAM, PAGE_SIZE); |
gxemul_hw_map.kbd = hw_map(GXEMUL_KBD, PAGE_SIZE); |
gxemul_hw_map.rtc = hw_map(GXEMUL_RTC, PAGE_SIZE); |
gxemul_hw_map.irqc = hw_map(GXEMUL_IRQC, PAGE_SIZE); |
gxemul_hw_map.rtc_freq = gxemul_hw_map.rtc + GXEMUL_RTC_FREQ_OFFSET; |
gxemul_hw_map.rtc_ack = gxemul_hw_map.rtc + GXEMUL_RTC_ACK_OFFSET; |
gxemul_hw_map.irqc_mask = gxemul_hw_map.irqc + GXEMUL_IRQC_MASK_OFFSET; |
gxemul_hw_map.irqc_unmask = gxemul_hw_map.irqc + |
GXEMUL_IRQC_UNMASK_OFFSET; |
hw_map_init_called = true; |
} |
/** Putchar that works with gxemul. |
* |
* @param dev Not used. |
* @param ch Characted to be printed. |
*/ |
static void gxemul_write(chardev_t *dev, const char ch) |
{ |
*((char *) gxemul_hw_map.videoram) = ch; |
} |
/** Enables gxemul keyboard (interrupt unmasked). |
* |
* @param dev Not used. |
* |
* Called from getc(). |
*/ |
static void gxemul_kbd_enable(chardev_t *dev) |
{ |
gxemul_irqc_unmask(GXEMUL_KBD_IRQ); |
} |
/** Disables gxemul keyboard (interrupt masked). |
* |
* @param dev not used |
* |
* Called from getc(). |
*/ |
static void gxemul_kbd_disable(chardev_t *dev) |
{ |
gxemul_irqc_mask(GXEMUL_KBD_IRQ); |
} |
/** Read character using polling, assume interrupts disabled. |
* |
* @param dev Not used. |
*/ |
static char gxemul_do_read(chardev_t *dev) |
{ |
char ch; |
while (1) { |
ch = *((volatile char *) gxemul_hw_map.kbd); |
if (ch) { |
if (ch == '\r') |
return '\n'; |
if (ch == 0x7f) |
return '\b'; |
return ch; |
} |
} |
} |
/** Process keyboard interrupt. |
* |
* @param irq IRQ information. |
* @param arg Not used. |
*/ |
static void gxemul_irq_handler(irq_t *irq, void *arg, ...) |
{ |
if ((irq->notif_cfg.notify) && (irq->notif_cfg.answerbox)) { |
ipc_irq_send_notif(irq); |
} else { |
char ch = 0; |
ch = *((char *) gxemul_hw_map.kbd); |
if (ch == '\r') { |
ch = '\n'; |
} |
if (ch == 0x7f) { |
ch = '\b'; |
} |
chardev_push_character(&console, ch); |
} |
} |
static irq_ownership_t gxemul_claim(void) |
{ |
return IRQ_ACCEPT; |
} |
/** Acquire console back for kernel. */ |
void gxemul_grab_console(void) |
{ |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&gxemul_console_irq.lock); |
gxemul_console_irq.notif_cfg.notify = false; |
spinlock_unlock(&gxemul_console_irq.lock); |
interrupts_restore(ipl); |
} |
/** Return console to userspace. */ |
void gxemul_release_console(void) |
{ |
ipl_t ipl = interrupts_disable(); |
spinlock_lock(&gxemul_console_irq.lock); |
if (gxemul_console_irq.notif_cfg.answerbox) { |
gxemul_console_irq.notif_cfg.notify = true; |
} |
spinlock_unlock(&gxemul_console_irq.lock); |
interrupts_restore(ipl); |
} |
/** Initializes console object representing gxemul console. |
* |
* @param devno device number. |
*/ |
void gxemul_console_init(devno_t devno) |
{ |
chardev_initialize("gxemul_console", &console, &gxemul_ops); |
stdin = &console; |
stdout = &console; |
irq_initialize(&gxemul_console_irq); |
gxemul_console_irq.devno = devno; |
gxemul_console_irq.inr = GXEMUL_KBD_IRQ; |
gxemul_console_irq.claim = gxemul_claim; |
gxemul_console_irq.handler = gxemul_irq_handler; |
irq_register(&gxemul_console_irq); |
gxemul_irqc_unmask(GXEMUL_KBD_IRQ); |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.devno", NULL, devno); |
sysinfo_set_item_val("kbd.inr", NULL, GXEMUL_KBD_IRQ); |
sysinfo_set_item_val("kbd.address.virtual", NULL, gxemul_hw_map.kbd); |
} |
/** Starts gxemul Real Time Clock device, which asserts regular interrupts. |
* |
* @param frequency Interrupts frequency (0 disables RTC). |
*/ |
static void gxemul_timer_start(uint32_t frequency) |
{ |
*((uint32_t*) gxemul_hw_map.rtc_freq) = frequency; |
} |
static irq_ownership_t gxemul_timer_claim(void) |
{ |
return IRQ_ACCEPT; |
} |
/** Timer interrupt handler. |
* |
* @param irq Interrupt information. |
* @param arg Not used. |
*/ |
static void gxemul_timer_irq_handler(irq_t *irq, void *arg, ...) |
{ |
/* |
* We are holding a lock which prevents preemption. |
* Release the lock, call clock() and reacquire the lock again. |
*/ |
spinlock_unlock(&irq->lock); |
clock(); |
spinlock_lock(&irq->lock); |
/* acknowledge tick */ |
*((uint32_t*) gxemul_hw_map.rtc_ack) = 0; |
} |
/** Initializes and registers timer interrupt handler. */ |
static void gxemul_timer_irq_init(void) |
{ |
irq_initialize(&gxemul_timer_irq); |
gxemul_timer_irq.devno = device_assign_devno(); |
gxemul_timer_irq.inr = GXEMUL_TIMER_IRQ; |
gxemul_timer_irq.claim = gxemul_timer_claim; |
gxemul_timer_irq.handler = gxemul_timer_irq_handler; |
irq_register(&gxemul_timer_irq); |
} |
/** Starts timer. |
* |
* Initiates regular timer interrupts after initializing |
* corresponding interrupt handler. |
*/ |
void gxemul_timer_irq_start(void) |
{ |
gxemul_timer_irq_init(); |
gxemul_timer_start(GXEMUL_TIMER_FREQ); |
} |
/** Returns the size of emulated memory. |
* |
* @return Size in bytes. |
*/ |
size_t gxemul_get_memory_size(void) |
{ |
return *((int *) (GXEMUL_MP + GXEMUL_MP_MEMSIZE_OFFSET)); |
} |
/** Prints a character. |
* |
* @param ch Character to be printed. |
*/ |
void gxemul_debug_putc(char ch) |
{ |
char *addr = 0; |
if (!hw_map_init_called) { |
addr = (char *) GXEMUL_KBD; |
} else { |
addr = (char *) gxemul_hw_map.videoram; |
} |
*(addr) = ch; |
} |
/** Stops gxemul. */ |
void gxemul_cpu_halt(void) |
{ |
char * addr = 0; |
if (!hw_map_init_called) { |
addr = (char *) GXEMUL_KBD; |
} else { |
addr = (char *) gxemul_hw_map.videoram; |
} |
*(addr + GXEMUL_HALT_OFFSET) = '\0'; |
} |
/** Gxemul specific interrupt exception handler. |
* |
* Determines sources of the interrupt from interrupt controller and |
* calls high-level handlers for them. |
* |
* @param exc_no Interrupt exception number. |
* @param istate Saved processor state. |
*/ |
void gxemul_irq_exception(int exc_no, istate_t *istate) |
{ |
uint32_t sources = gxemul_irqc_get_sources(); |
int i; |
for (i = 0; i < GXEMUL_IRQC_MAX_IRQ; i++) { |
if (sources & (1 << i)) { |
irq_t *irq = irq_dispatch_and_lock(i); |
if (irq) { |
/* The IRQ handler was found. */ |
irq->handler(irq, irq->arg); |
spinlock_unlock(&irq->lock); |
} else { |
/* Spurious interrupt.*/ |
dprintf("cpu%d: spurious interrupt (inum=%d)\n", |
CPU->id, i); |
} |
} |
} |
} |
/** Returns address of framebuffer device. |
* |
* @return Address of framebuffer device. |
*/ |
uintptr_t gxemul_get_fb_address(void) |
{ |
return (uintptr_t) GXEMUL_FB; |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/arm32/src/start.S |
---|
40,30 → 40,12 |
mrs r3, cpsr |
bic r3, r3, #0x1f |
orr r3, r3, #0x13 |
msr cpsr_c, r3 |
msr cpsr_c, r3 |
ldr sp, =temp_stack |
cmp r2, #0 |
beq bootinfo_end |
ldr r3, =bootinfo |
bootinfo_loop: |
ldr r4, [r1] |
str r4, [r3] |
add r1, r1, #4 |
add r3, r3, #4 |
add r2, r2, #-4 |
cmp r2, #0 |
bne bootinfo_loop |
bootinfo_end: |
bl arch_pre_main |
bl main_bsp |
.space TEMP_STACK_SIZE |
74,4 → 56,3 |
supervisor_sp: |
.space 4 |
//branches/tracing/kernel/arch/ppc32/_link.ld.in |
---|
1,11 → 1,11 |
/** PPC32 linker script |
* |
* umapped section: |
* kernel text |
* kernel data |
* kernel text |
* kernel data |
* mapped section: |
* kernel text |
* kernel data |
* kernel text |
* kernel data |
* |
*/ |
27,7 → 27,7 |
unmapped_kdata_start = .; |
} |
.mapped PA2KA(BOOT_OFFSET): AT (BOOT_OFFSET) { |
.mapped PA2KA(BOOT_OFFSET): AT (BOOT_OFFSET) { |
ktext_start = .; |
*(K_TEXT_START); |
*(.text); |
37,22 → 37,22 |
*(K_DATA_START); |
*(.rodata); |
*(.rodata.*); |
*(.data); /* initialized data */ |
*(.data); /* initialized data */ |
*(.sdata); |
*(.sdata2); |
*(.sbss); |
hardcoded_ktext_size = .; |
LONG(ktext_end - ktext_start); |
LONG(ktext_end - ktext_start); |
hardcoded_kdata_size = .; |
LONG(kdata_end - kdata_start); |
hardcoded_load_address = .; |
LONG(PA2KA(BOOT_OFFSET)); |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
symbol_table = .; |
*(symtab.*); /* Symbol table, must be LAST symbol!*/ |
*(symtab.*); /* Symbol table, must be LAST symbol!*/ |
kdata_end = .; |
} |
} |
//branches/tracing/kernel/arch/ppc32/include/asm/regname.h |
---|
211,6 → 211,9 |
#define dbat2l 541 |
#define dbat3u 542 |
#define dbat3l 543 |
#define tlbmiss 980 |
#define ptehi 981 |
#define ptelo 982 |
#define hid0 1008 |
/* MSR bits */ |
220,6 → 223,7 |
#define msr_ee (1 << 15) |
/* HID0 bits */ |
#define hid0_sten (1 << 24) |
#define hid0_ice (1 << 15) |
#define hid0_dce (1 << 14) |
#define hid0_icfi (1 << 11) |
//branches/tracing/kernel/arch/ppc32/include/exception.h |
---|
75,6 → 75,7 |
uint32_t lr; |
uint32_t ctr; |
uint32_t xer; |
uint32_t dar; |
uint32_t r12; |
uint32_t sp; |
} istate_t; |
//branches/tracing/kernel/arch/ppc32/include/types.h |
---|
57,6 → 57,9 |
typedef uint32_t unative_t; |
typedef int32_t native_t; |
typedef struct { |
} fncptr_t; |
/**< Formats for uintptr_t, size_t, count_t and index_t */ |
#define PRIp "x" |
#define PRIs "u" |
84,11 → 87,13 |
/** Page Table Entry. */ |
typedef struct { |
unsigned p : 1; /**< Present bit. */ |
unsigned a : 1; /**< Accessed bit. */ |
unsigned g : 1; /**< Global bit. */ |
unsigned valid : 1; /**< Valid content even if not present. */ |
unsigned pfn : 20; /**< Physical frame number. */ |
unsigned present : 1; /**< Present bit. */ |
unsigned page_write_through : 1; /**< Write thought caching. */ |
unsigned page_cache_disable : 1; /**< No caching. */ |
unsigned accessed : 1; /**< Accessed bit. */ |
unsigned global : 1; /**< Global bit. */ |
unsigned valid : 1; /**< Valid content even if not present. */ |
unsigned pfn : 20; /**< Physical frame number. */ |
} pte_t; |
#endif |
//branches/tracing/kernel/arch/ppc32/include/arch.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ppc32 |
/** @addtogroup ppc32 |
* @{ |
*/ |
/** @file |
35,7 → 35,7 |
#ifndef KERN_ppc32_ARCH_H_ |
#define KERN_ppc32_ARCH_H_ |
#include <arch/drivers/cuda.h> |
extern void arch_pre_main(void); |
#endif |
//branches/tracing/kernel/arch/ppc32/include/boot/boot.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ppc32 |
/** @addtogroup ppc32 |
* @{ |
*/ |
/** @file |
35,21 → 35,24 |
#ifndef KERN_ppc32_BOOT_H_ |
#define KERN_ppc32_BOOT_H_ |
#define BOOT_OFFSET 0x8000 |
#define BOOT_OFFSET 0x8000 |
/* Temporary stack size for boot process */ |
#define TEMP_STACK_SIZE 0x1000 |
#define TEMP_STACK_SIZE 0x1000 |
#define TASKMAP_MAX_RECORDS 32 |
#define MEMMAP_MAX_RECORDS 32 |
#define TASKMAP_MAX_RECORDS 32 |
#define MEMMAP_MAX_RECORDS 32 |
#ifndef __ASM__ |
#define BOOTINFO_TASK_NAME_BUFLEN 32 |
#include <arch/types.h> |
typedef struct { |
uintptr_t addr; |
uint32_t size; |
char name[BOOTINFO_TASK_NAME_BUFLEN]; |
} utask_t; |
typedef struct { |
79,13 → 82,13 |
typedef struct { |
uintptr_t addr; |
unsigned int size; |
} keyboard_t; |
} macio_t; |
typedef struct { |
memmap_t memmap; |
taskmap_t taskmap; |
screen_t screen; |
keyboard_t keyboard; |
macio_t macio; |
} bootinfo_t; |
extern bootinfo_t bootinfo; |
//branches/tracing/kernel/arch/ppc32/include/asm.h |
---|
36,6 → 36,7 |
#define KERN_ppc32_ASM_H_ |
#include <arch/types.h> |
#include <typedefs.h> |
#include <config.h> |
/** Enable interrupts. |
149,6 → 150,36 |
extern void userspace_asm(uintptr_t uspace_uarg, uintptr_t stack, uintptr_t entry); |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*port = v; |
} |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*port = v; |
} |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*port = v; |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
return *port; |
} |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
return *port; |
} |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
return *port; |
} |
#endif |
/** @} |
//branches/tracing/kernel/arch/ppc32/include/mm/frame.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ppc32mm |
/** @addtogroup ppc32mm |
* @{ |
*/ |
/** @file |
35,13 → 35,13 |
#ifndef KERN_ppc32_FRAME_H_ |
#define KERN_ppc32_FRAME_H_ |
#define FRAME_WIDTH 12 /* 4K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#define FRAME_WIDTH 12 /* 4K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#ifdef KERNEL |
#ifndef __ASM__ |
#include <arch/types.h> |
#include <arch/types.h> |
extern uintptr_t last_frame; |
//branches/tracing/kernel/arch/ppc32/include/mm/page.h |
---|
120,7 → 120,7 |
/* Macros for querying the last-level PTEs. */ |
#define PTE_VALID_ARCH(pte) (*((uint32_t *) (pte)) != 0) |
#define PTE_PRESENT_ARCH(pte) ((pte)->p != 0) |
#define PTE_PRESENT_ARCH(pte) ((pte)->present != 0) |
#define PTE_GET_FRAME_ARCH(pte) ((pte)->pfn << 12) |
#define PTE_WRITABLE_ARCH(pte) 1 |
#define PTE_EXECUTABLE_ARCH(pte) 1 |
134,13 → 134,13 |
{ |
pte_t *p = &pt[i]; |
return ((1 << PAGE_CACHEABLE_SHIFT) | |
((!p->p) << PAGE_PRESENT_SHIFT) | |
return (((!p->page_cache_disable) << PAGE_CACHEABLE_SHIFT) | |
((!p->present) << PAGE_PRESENT_SHIFT) | |
(1 << PAGE_USER_SHIFT) | |
(1 << PAGE_READ_SHIFT) | |
(1 << PAGE_WRITE_SHIFT) | |
(1 << PAGE_EXEC_SHIFT) | |
(p->g << PAGE_GLOBAL_SHIFT)); |
(p->global << PAGE_GLOBAL_SHIFT)); |
} |
static inline void set_pt_flags(pte_t *pt, index_t i, int flags) |
147,8 → 147,9 |
{ |
pte_t *p = &pt[i]; |
p->p = !(flags & PAGE_NOT_PRESENT); |
p->g = (flags & PAGE_GLOBAL) != 0; |
p->page_cache_disable = !(flags & PAGE_CACHEABLE); |
p->present = !(flags & PAGE_NOT_PRESENT); |
p->global = (flags & PAGE_GLOBAL) != 0; |
p->valid = 1; |
} |
//branches/tracing/kernel/arch/ppc32/include/mm/tlb.h |
---|
39,6 → 39,11 |
#include <arch/types.h> |
#include <typedefs.h> |
#define WIMG_GUARDED 0x01 |
#define WIMG_COHERENT 0x02 |
#define WIMG_NO_CACHE 0x04 |
#define WIMG_WRITETHRU 0x08 |
typedef struct { |
unsigned v : 1; /**< Valid */ |
unsigned vsid : 24; /**< Virtual Segment ID */ |
53,9 → 58,27 |
unsigned pp : 2; /**< Page protection */ |
} phte_t; |
typedef struct { |
unsigned v : 1; |
unsigned vsid : 24; |
unsigned reserved0 : 1; |
unsigned api : 6; |
} ptehi_t; |
typedef struct { |
unsigned rpn : 20; |
unsigned xpn : 3; |
unsigned reserved0 : 1; |
unsigned c : 1; |
unsigned wimg : 4; |
unsigned x : 1; |
unsigned pp : 2; |
} ptelo_t; |
extern void pht_init(void); |
extern void pht_refill(int n, istate_t *istate); |
extern bool pht_real_refill(int n, istate_t *istate) __attribute__ ((section("K_UNMAPPED_TEXT_START"))); |
extern void pht_init(void); |
extern bool pht_refill_real(int n, istate_t *istate) __attribute__ ((section("K_UNMAPPED_TEXT_START"))); |
extern void tlb_refill_real(int n, uint32_t tlbmiss, ptehi_t ptehi, ptelo_t ptelo, istate_t *istate) __attribute__ ((section("K_UNMAPPED_TEXT_START"))); |
#endif |
//branches/tracing/kernel/arch/ppc32/include/barrier.h |
---|
55,6 → 55,7 |
"dcbst 0, %0\n" |
"sync\n" |
"icbi 0, %0\n" |
"sync\n" |
"isync\n" |
:: "r" (addr) |
); |
76,7 → 77,10 |
asm volatile ("icbi 0, %0\n" :: "r" (addr + i)); |
} |
asm volatile ("isync"); |
asm volatile ( |
"sync\n" |
"isync\n" |
); |
} |
#endif |
//branches/tracing/kernel/arch/ppc32/include/drivers/cuda.h |
---|
File deleted |
//branches/tracing/kernel/arch/ppc32/include/drivers/pic.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ppc32 |
/** @addtogroup ppc32 |
* @{ |
*/ |
/** @file |
36,6 → 36,7 |
#define KERN_ppc32_PIC_H_ |
#include <arch/types.h> |
#include <ddi/irq.h> |
#define PIC_PENDING_LOW 8 |
#define PIC_PENDING_HIGH 4 |
44,11 → 45,11 |
#define PIC_ACK_LOW 10 |
#define PIC_ACK_HIGH 6 |
void pic_init(uintptr_t base, size_t size); |
void pic_enable_interrupt(int intnum); |
void pic_disable_interrupt(int intnum); |
void pic_ack_interrupt(int intnum); |
int pic_get_pending(void); |
extern void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg); |
extern void pic_enable_interrupt(inr_t intnum); |
extern void pic_disable_interrupt(inr_t intnum); |
extern void pic_ack_interrupt(void *arg, inr_t intnum); |
extern int pic_get_pending(void); |
#endif |
//branches/tracing/kernel/arch/ppc32/Makefile.inc |
---|
29,10 → 29,6 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
BFD_NAME = elf32-powerpc |
BFD_ARCH = powerpc:common |
BFD = binary |
45,44 → 41,21 |
DEFS += -D__32_BITS__ |
## Own configuration directives |
# |
CONFIG_FB = y |
## Compile with hierarchical page tables support. |
# |
CONFIG_PAGE_PT = y |
DEFS += -DCONFIG_PAGE_PT |
## Compile with support for address space identifiers. |
# |
CONFIG_ASID = y |
CONFIG_ASID_FIFO = y |
## Compile with support for software integer division. |
# |
CONFIG_SOFTINT = y |
ARCH_SOURCES = \ |
arch/$(ARCH)/src/context.S \ |
arch/$(ARCH)/src/debug/panic.s \ |
arch/$(ARCH)/src/fpu_context.S \ |
arch/$(ARCH)/src/boot/boot.S \ |
arch/$(ARCH)/src/ppc32.c \ |
arch/$(ARCH)/src/dummy.s \ |
arch/$(ARCH)/src/exception.S \ |
arch/$(ARCH)/src/interrupt.c \ |
arch/$(ARCH)/src/asm.S \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/proc/scheduler.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/cuda.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/drivers/pic.c |
arch/$(KARCH)/src/context.S \ |
arch/$(KARCH)/src/debug/panic.s \ |
arch/$(KARCH)/src/fpu_context.S \ |
arch/$(KARCH)/src/boot/boot.S \ |
arch/$(KARCH)/src/ppc32.c \ |
arch/$(KARCH)/src/dummy.s \ |
arch/$(KARCH)/src/exception.S \ |
arch/$(KARCH)/src/interrupt.c \ |
arch/$(KARCH)/src/asm.S \ |
arch/$(KARCH)/src/cpu/cpu.c \ |
arch/$(KARCH)/src/proc/scheduler.c \ |
arch/$(KARCH)/src/ddi/ddi.c \ |
arch/$(KARCH)/src/mm/as.c \ |
arch/$(KARCH)/src/mm/frame.c \ |
arch/$(KARCH)/src/mm/page.c \ |
arch/$(KARCH)/src/mm/tlb.c \ |
arch/$(KARCH)/src/drivers/pic.c |
//branches/tracing/kernel/arch/ppc32/src/exception.S |
---|
60,7 → 60,7 |
2: |
subi sp, sp, 160 |
subi sp, sp, 164 |
stw r0, 8(sp) |
stw r2, 12(sp) |
stw r3, 16(sp) |
109,11 → 109,14 |
mfxer r12 |
stw r12, 148(sp) |
mfsprg1 r12 |
mfdar r12 |
stw r12, 152(sp) |
mfsprg1 r12 |
stw r12, 156(sp) |
mfsprg2 r12 |
stw r12, 156(sp) |
stw r12, 160(sp) |
.endm |
.org 0x100 |
137,16 → 140,7 |
exc_data_storage: |
CONTEXT_STORE |
li r3, 2 |
mr r4, sp |
addi r4, r4, 8 |
bl pht_real_refill |
cmpwi r3, 0 |
bne iret_real |
li r3, 2 |
b jump_to_kernel |
b data_storage |
.org 0x400 |
.global exc_instruction_storage |
153,17 → 147,8 |
exc_instruction_storage: |
CONTEXT_STORE |
li r3, 3 |
mr r4, sp |
addi r4, r4, 8 |
bl pht_real_refill |
cmpwi r3, 0 |
bne iret_real |
b instruction_storage |
li r3, 3 |
b jump_to_kernel |
.org 0x500 |
.global exc_external |
exc_external: |
223,7 → 208,7 |
.org 0xc00 |
.global exc_syscall |
exc_syscall: |
CONTEXT_STORE |
CONTEXT_STORE |
b jump_to_kernel_syscall |
235,7 → 220,63 |
li r3, 12 |
b jump_to_kernel |
.org 0x1000 |
.global exc_itlb_miss |
exc_itlb_miss: |
CONTEXT_STORE |
b tlb_miss |
.org 0x1100 |
.global exc_dtlb_miss_load |
exc_dtlb_miss_load: |
CONTEXT_STORE |
b tlb_miss |
.org 0x1200 |
.global exc_dtlb_miss_store |
exc_dtlb_miss_store: |
CONTEXT_STORE |
b tlb_miss |
.org 0x4000 |
data_storage: |
li r3, 2 |
mr r4, sp |
addi r4, r4, 8 |
bl pht_refill_real |
cmpwi r3, 0 |
bne iret_real |
li r3, 2 |
b jump_to_kernel |
instruction_storage: |
li r3, 3 |
mr r4, sp |
addi r4, r4, 8 |
bl pht_refill_real |
cmpwi r3, 0 |
bne iret_real |
li r3, 3 |
b jump_to_kernel |
tlb_miss: |
li r3, 16 |
mfspr r4, tlbmiss |
mfspr r5, ptehi |
mfspr r6, ptelo |
mr r7, sp |
addi r7, r7, 20 |
bl tlb_refill_real |
b iret_real |
jump_to_kernel: |
lis r12, iret@ha |
addi r12, r12, iret@l |
272,7 → 313,6 |
rfi |
iret_real: |
lwz r0, 8(sp) |
lwz r2, 12(sp) |
lwz r3, 16(sp) |
322,7 → 362,7 |
lwz r12, 148(sp) |
mtxer r12 |
lwz r12, 152(sp) |
lwz sp, 156(sp) |
lwz r12, 156(sp) |
lwz sp, 160(sp) |
rfi |
//branches/tracing/kernel/arch/ppc32/src/asm.S |
---|
34,6 → 34,7 |
.global iret |
.global iret_syscall |
.global memsetb |
.global memsetw |
.global memcpy |
.global memcpy_from_uspace |
.global memcpy_to_uspace |
131,8 → 132,8 |
lwz r12, 148(sp) |
mtxer r12 |
lwz r12, 152(sp) |
lwz sp, 156(sp) |
lwz r12, 156(sp) |
lwz sp, 160(sp) |
rfi |
197,14 → 198,17 |
lwz r12, 148(sp) |
mtxer r12 |
lwz r12, 152(sp) |
lwz sp, 156(sp) |
lwz r12, 156(sp) |
lwz sp, 160(sp) |
rfi |
memsetb: |
b _memsetb |
memsetw: |
b _memsetw |
memcpy: |
memcpy_from_uspace: |
memcpy_to_uspace: |
//branches/tracing/kernel/arch/ppc32/src/boot/boot.S |
---|
33,7 → 33,7 |
.global kernel_image_start |
kernel_image_start: |
# load temporal kernel stack |
lis sp, kernel_stack@ha |
52,7 → 52,7 |
beq bootinfo_end |
addis r3, r3, 0x8000 |
lis r31, bootinfo@ha |
addi r31, r31, bootinfo@l # r31 = bootinfo |
//branches/tracing/kernel/arch/ppc32/src/ppc32.c |
---|
35,7 → 35,7 |
#include <config.h> |
#include <arch.h> |
#include <arch/boot/boot.h> |
#include <arch/drivers/cuda.h> |
#include <genarch/drivers/via-cuda/cuda.h> |
#include <arch/interrupt.h> |
#include <genarch/fb/fb.h> |
#include <genarch/fb/visuals.h> |
42,24 → 42,29 |
#include <userspace.h> |
#include <proc/uarg.h> |
#include <console/console.h> |
#include <ddi/device.h> |
#include <ddi/irq.h> |
#include <arch/drivers/pic.h> |
#include <align.h> |
#include <macros.h> |
#include <string.h> |
#define IRQ_COUNT 64 |
#define IRQ_COUNT 64 |
#define IRQ_CUDA 10 |
bootinfo_t bootinfo; |
/** Performs ppc32-specific initialization before main_bsp() is called. */ |
void arch_pre_main(void) |
{ |
/* Setup usermode */ |
init.cnt = bootinfo.taskmap.count; |
uint32_t i; |
for (i = 0; i < bootinfo.taskmap.count; i++) { |
for (i = 0; i < min3(bootinfo.taskmap.count, TASKMAP_MAX_RECORDS, CONFIG_INIT_TASKS); i++) { |
init.tasks[i].addr = PA2KA(bootinfo.taskmap.tasks[i].addr); |
init.tasks[i].size = bootinfo.taskmap.tasks[i].size; |
str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN, |
bootinfo.taskmap.tasks[i].name); |
} |
} |
75,44 → 80,67 |
void arch_post_mm_init(void) |
{ |
if (config.cpu_active == 1) { |
#ifdef CONFIG_FB |
/* Initialize framebuffer */ |
unsigned int visual; |
switch (bootinfo.screen.bpp) { |
case 8: |
visual = VISUAL_INDIRECT_8; |
break; |
case 16: |
visual = VISUAL_RGB_5_5_5; |
break; |
case 24: |
visual = VISUAL_RGB_8_8_8; |
break; |
case 32: |
visual = VISUAL_RGB_0_8_8_8; |
break; |
default: |
panic("Unsupported bits per pixel"); |
if (bootinfo.screen.addr) { |
unsigned int visual; |
switch (bootinfo.screen.bpp) { |
case 8: |
visual = VISUAL_INDIRECT_8; |
break; |
case 16: |
visual = VISUAL_RGB_5_5_5; |
break; |
case 24: |
visual = VISUAL_RGB_8_8_8; |
break; |
case 32: |
visual = VISUAL_RGB_0_8_8_8; |
break; |
default: |
panic("Unsupported bits per pixel."); |
} |
fb_properties_t prop = { |
.addr = bootinfo.screen.addr, |
.offset = 0, |
.x = bootinfo.screen.width, |
.y = bootinfo.screen.height, |
.scan = bootinfo.screen.scanline, |
.visual = visual, |
}; |
fb_init(&prop); |
} |
fb_properties_t prop = { |
.addr = bootinfo.screen.addr, |
.offset = 0, |
.x = bootinfo.screen.width, |
.y = bootinfo.screen.height, |
.scan = bootinfo.screen.scanline, |
.visual = visual, |
}; |
fb_init(&prop); |
#endif |
/* Initialize IRQ routing */ |
irq_init(IRQ_COUNT, IRQ_COUNT); |
/* Initialize PIC */ |
pic_init(bootinfo.keyboard.addr, PAGE_SIZE); |
/* Initialize I/O controller */ |
cuda_init(device_assign_devno(), |
bootinfo.keyboard.addr + 0x16000, 2 * PAGE_SIZE); |
if (bootinfo.macio.addr) { |
/* Initialize PIC */ |
cir_t cir; |
void *cir_arg; |
pic_init(bootinfo.macio.addr, PAGE_SIZE, &cir, &cir_arg); |
#ifdef CONFIG_VIA_CUDA |
uintptr_t pa = bootinfo.macio.addr + 0x16000; |
uintptr_t aligned_addr = ALIGN_DOWN(pa, PAGE_SIZE); |
size_t offset = pa - aligned_addr; |
size_t size = 2 * PAGE_SIZE; |
cuda_t *cuda = (cuda_t *) |
(hw_map(aligned_addr, offset + size) + offset); |
/* Initialize I/O controller */ |
cuda_instance_t *cuda_instance = |
cuda_init(cuda, IRQ_CUDA, cir, cir_arg); |
if (cuda_instance) { |
indev_t *sink = stdin_wire(); |
cuda_wire(cuda_instance, sink); |
} |
#endif |
} |
/* Merge all zones to 1 big zone */ |
zone_merge_all(); |
143,8 → 171,7 |
(uintptr_t) kernel_uarg->uspace_entry); |
/* Unreachable */ |
for (;;) |
; |
while (true); |
} |
/** Acquire console back for kernel |
152,7 → 179,9 |
*/ |
void arch_grab_console(void) |
{ |
cuda_grab(); |
#ifdef CONFIG_FB |
fb_redraw(); |
#endif |
} |
/** Return console to userspace |
160,8 → 189,27 |
*/ |
void arch_release_console(void) |
{ |
cuda_release(); |
} |
/** Construct function pointer |
* |
* @param fptr function pointer structure |
* @param addr function address |
* @param caller calling function address |
* |
* @return address of the function pointer |
* |
*/ |
void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
{ |
return addr; |
} |
void arch_reboot(void) |
{ |
// TODO |
while (1); |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ppc32/src/mm/tlb.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ppc32mm |
/** @addtogroup ppc32mm |
* @{ |
*/ |
/** @file |
39,9 → 39,18 |
#include <mm/as.h> |
#include <arch.h> |
#include <print.h> |
#include <macros.h> |
#include <symtab.h> |
static unsigned int seed = 10; |
static unsigned int seed_real __attribute__ ((section("K_UNMAPPED_DATA_START"))) = 42; |
#define TLB_FLUSH \ |
"tlbie %0\n" \ |
"addi %0, %0, 0x1000\n" |
/** Try to find PTE for faulting address |
* |
* Try to find PTE for faulting address. |
66,7 → 75,7 |
* Check if the mapping exists in page tables. |
*/ |
pte_t *pte = page_mapping_find(as, badvaddr); |
if ((pte) && (pte->p)) { |
if ((pte) && (pte->present)) { |
/* |
* Mapping found in page tables. |
* Immediately succeed. |
88,7 → 97,7 |
*/ |
page_table_lock(as, lock); |
pte = page_mapping_find(as, badvaddr); |
ASSERT((pte) && (pte->p)); |
ASSERT((pte) && (pte->present)); |
*pfrc = 0; |
return pte; |
case AS_PF_DEFER: |
100,7 → 109,7 |
*pfrc = rc; |
return NULL; |
default: |
panic("unexpected rc (%d)\n", rc); |
panic("Unexpected rc (%d).", rc); |
} |
} |
} |
108,25 → 117,20 |
static void pht_refill_fail(uintptr_t badvaddr, istate_t *istate) |
{ |
char *symbol = ""; |
char *sym2 = ""; |
char *symbol; |
char *sym2; |
char *s = get_symtab_entry(istate->pc); |
if (s) |
symbol = s; |
s = get_symtab_entry(istate->lr); |
if (s) |
sym2 = s; |
symbol = symtab_fmt_name_lookup(istate->pc); |
sym2 = symtab_fmt_name_lookup(istate->lr); |
fault_if_from_uspace(istate, |
"%p: PHT Refill Exception at %p (%s<-%s)\n", badvaddr, |
"PHT Refill Exception on %p.", badvaddr); |
panic("%p: PHT Refill Exception at %p (%s<-%s).", badvaddr, |
istate->pc, symbol, sym2); |
panic("%p: PHT Refill Exception at %p (%s<-%s)\n", badvaddr, |
istate->pc, symbol, sym2); |
} |
static void pht_insert(const uintptr_t vaddr, const pfn_t pfn) |
static void pht_insert(const uintptr_t vaddr, const pte_t *pte) |
{ |
uint32_t page = (vaddr >> 12) & 0xffff; |
uint32_t api = (vaddr >> 22) & 0x3f; |
152,11 → 156,12 |
uint32_t i; |
bool found = false; |
/* Find unused or colliding |
PTE in PTEG */ |
/* Find colliding PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if ((!phte[base + i].v) || ((phte[base + i].vsid == vsid) && |
(phte[base + i].api == api))) { |
if ((phte[base + i].v) |
&& (phte[base + i].vsid == vsid) |
&& (phte[base + i].api == api) |
&& (phte[base + i].h == 0)) { |
found = true; |
break; |
} |
163,86 → 168,25 |
} |
if (!found) { |
/* Secondary hash (not) */ |
uint32_t base2 = (~hash & 0x3ff) << 3; |
/* Find unused or colliding |
PTE in PTEG */ |
/* Find unused PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if ((!phte[base2 + i].v) || |
((phte[base2 + i].vsid == vsid) && |
(phte[base2 + i].api == api))) { |
if (!phte[base + i].v) { |
found = true; |
base = base2; |
h = 1; |
break; |
} |
} |
if (!found) { |
// TODO: A/C precedence groups |
i = page % 8; |
} |
} |
phte[base + i].v = 1; |
phte[base + i].vsid = vsid; |
phte[base + i].h = h; |
phte[base + i].api = api; |
phte[base + i].rpn = pfn; |
phte[base + i].r = 0; |
phte[base + i].c = 0; |
phte[base + i].pp = 2; // FIXME |
} |
static void pht_real_insert(const uintptr_t vaddr, const pfn_t pfn) |
{ |
uint32_t page = (vaddr >> 12) & 0xffff; |
uint32_t api = (vaddr >> 22) & 0x3f; |
uint32_t vsid; |
asm volatile ( |
"mfsrin %0, %1\n" |
: "=r" (vsid) |
: "r" (vaddr) |
); |
uint32_t sdr1; |
asm volatile ( |
"mfsdr1 %0\n" |
: "=r" (sdr1) |
); |
phte_t *phte_physical = (phte_t *) (sdr1 & 0xffff0000); |
/* Primary hash (xor) */ |
uint32_t h = 0; |
uint32_t hash = vsid ^ page; |
uint32_t base = (hash & 0x3ff) << 3; |
uint32_t i; |
bool found = false; |
/* Find unused or colliding |
PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if ((!phte_physical[base + i].v) || |
((phte_physical[base + i].vsid == vsid) && |
(phte_physical[base + i].api == api))) { |
found = true; |
break; |
} |
} |
if (!found) { |
/* Secondary hash (not) */ |
uint32_t base2 = (~hash & 0x3ff) << 3; |
/* Find unused or colliding |
PTE in PTEG */ |
/* Find colliding PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if ((!phte_physical[base2 + i].v) || |
((phte_physical[base2 + i].vsid == vsid) && |
(phte_physical[base2 + i].api == api))) { |
if ((phte[base2 + i].v) |
&& (phte[base2 + i].vsid == vsid) |
&& (phte[base2 + i].api == api) |
&& (phte[base2 + i].h == 1)) { |
found = true; |
base = base2; |
h = 1; |
251,26 → 195,37 |
} |
if (!found) { |
// TODO: A/C precedence groups |
i = page % 8; |
/* Find unused PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if (!phte[base2 + i].v) { |
found = true; |
base = base2; |
h = 1; |
break; |
} |
} |
} |
if (!found) |
i = RANDI(seed) % 8; |
} |
phte_physical[base + i].v = 1; |
phte_physical[base + i].vsid = vsid; |
phte_physical[base + i].h = h; |
phte_physical[base + i].api = api; |
phte_physical[base + i].rpn = pfn; |
phte_physical[base + i].r = 0; |
phte_physical[base + i].c = 0; |
phte_physical[base + i].pp = 2; // FIXME |
phte[base + i].v = 1; |
phte[base + i].vsid = vsid; |
phte[base + i].h = h; |
phte[base + i].api = api; |
phte[base + i].rpn = pte->pfn; |
phte[base + i].r = 0; |
phte[base + i].c = 0; |
phte[base + i].wimg = (pte->page_cache_disable ? WIMG_NO_CACHE : 0); |
phte[base + i].pp = 2; // FIXME |
} |
/** Process Instruction/Data Storage Interrupt |
/** Process Instruction/Data Storage Exception |
* |
* @param n Interrupt vector number. |
* @param istate Interrupted register context. |
* @param n Exception vector number. |
* @param istate Interrupted register context. |
* |
*/ |
void pht_refill(int n, istate_t *istate) |
289,12 → 244,9 |
lock = true; |
} |
if (n == VECTOR_DATA_STORAGE) { |
asm volatile ( |
"mfdar %0\n" |
: "=r" (badvaddr) |
); |
} else |
if (n == VECTOR_DATA_STORAGE) |
badvaddr = istate->dar; |
else |
badvaddr = istate->pc; |
page_table_lock(as, lock); |
314,12 → 266,12 |
page_table_unlock(as, lock); |
return; |
default: |
panic("Unexpected pfrc (%d)\n", pfrc); |
panic("Unexpected pfrc (%d).", pfrc); |
} |
} |
pte->a = 1; /* Record access to PTE */ |
pht_insert(badvaddr, pte->pfn); |
pte->accessed = 1; /* Record access to PTE */ |
pht_insert(badvaddr, pte); |
page_table_unlock(as, lock); |
return; |
330,22 → 282,19 |
} |
/** Process Instruction/Data Storage Interrupt in Real Mode |
/** Process Instruction/Data Storage Exception in Real Mode |
* |
* @param n Interrupt vector number. |
* @param istate Interrupted register context. |
* @param n Exception vector number. |
* @param istate Interrupted register context. |
* |
*/ |
bool pht_real_refill(int n, istate_t *istate) |
bool pht_refill_real(int n, istate_t *istate) |
{ |
uintptr_t badvaddr; |
if (n == VECTOR_DATA_STORAGE) { |
asm volatile ( |
"mfdar %0\n" |
: "=r" (badvaddr) |
); |
} else |
if (n == VECTOR_DATA_STORAGE) |
badvaddr = istate->dar; |
else |
badvaddr = istate->pc; |
uint32_t physmem; |
354,15 → 303,140 |
: "=r" (physmem) |
); |
if ((badvaddr >= PA2KA(0)) && (badvaddr < PA2KA(physmem))) { |
pht_real_insert(badvaddr, KA2PA(badvaddr) >> 12); |
return true; |
if ((badvaddr < PA2KA(0)) || (badvaddr >= PA2KA(physmem))) |
return false; |
uint32_t page = (badvaddr >> 12) & 0xffff; |
uint32_t api = (badvaddr >> 22) & 0x3f; |
uint32_t vsid; |
asm volatile ( |
"mfsrin %0, %1\n" |
: "=r" (vsid) |
: "r" (badvaddr) |
); |
uint32_t sdr1; |
asm volatile ( |
"mfsdr1 %0\n" |
: "=r" (sdr1) |
); |
phte_t *phte_real = (phte_t *) (sdr1 & 0xffff0000); |
/* Primary hash (xor) */ |
uint32_t h = 0; |
uint32_t hash = vsid ^ page; |
uint32_t base = (hash & 0x3ff) << 3; |
uint32_t i; |
bool found = false; |
/* Find colliding PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if ((phte_real[base + i].v) |
&& (phte_real[base + i].vsid == vsid) |
&& (phte_real[base + i].api == api) |
&& (phte_real[base + i].h == 0)) { |
found = true; |
break; |
} |
} |
return false; |
if (!found) { |
/* Find unused PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if (!phte_real[base + i].v) { |
found = true; |
break; |
} |
} |
} |
if (!found) { |
/* Secondary hash (not) */ |
uint32_t base2 = (~hash & 0x3ff) << 3; |
/* Find colliding PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if ((phte_real[base2 + i].v) |
&& (phte_real[base2 + i].vsid == vsid) |
&& (phte_real[base2 + i].api == api) |
&& (phte_real[base2 + i].h == 1)) { |
found = true; |
base = base2; |
h = 1; |
break; |
} |
} |
if (!found) { |
/* Find unused PTE in PTEG */ |
for (i = 0; i < 8; i++) { |
if (!phte_real[base2 + i].v) { |
found = true; |
base = base2; |
h = 1; |
break; |
} |
} |
} |
if (!found) { |
/* Use secondary hash to avoid collisions |
with usual PHT refill handler. */ |
i = RANDI(seed_real) % 8; |
base = base2; |
h = 1; |
} |
} |
phte_real[base + i].v = 1; |
phte_real[base + i].vsid = vsid; |
phte_real[base + i].h = h; |
phte_real[base + i].api = api; |
phte_real[base + i].rpn = KA2PA(badvaddr) >> 12; |
phte_real[base + i].r = 0; |
phte_real[base + i].c = 0; |
phte_real[base + i].wimg = 0; |
phte_real[base + i].pp = 2; // FIXME |
return true; |
} |
/** Process ITLB/DTLB Miss Exception in Real Mode |
* |
* |
*/ |
void tlb_refill_real(int n, uint32_t tlbmiss, ptehi_t ptehi, ptelo_t ptelo, istate_t *istate) |
{ |
uint32_t badvaddr = tlbmiss & 0xfffffffc; |
uint32_t physmem; |
asm volatile ( |
"mfsprg3 %0\n" |
: "=r" (physmem) |
); |
if ((badvaddr < PA2KA(0)) || (badvaddr >= PA2KA(physmem))) |
return; // FIXME |
ptelo.rpn = KA2PA(badvaddr) >> 12; |
ptelo.wimg = 0; |
ptelo.pp = 2; // FIXME |
uint32_t index = 0; |
asm volatile ( |
"mtspr 981, %0\n" |
"mtspr 982, %1\n" |
"tlbld %2\n" |
"tlbli %2\n" |
: "=r" (index) |
: "r" (ptehi), |
"r" (ptelo) |
); |
} |
void tlb_arch_init(void) |
{ |
tlb_invalidate_all(); |
371,9 → 445,87 |
void tlb_invalidate_all(void) |
{ |
uint32_t index; |
asm volatile ( |
"tlbia\n" |
"li %0, 0\n" |
"sync\n" |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
TLB_FLUSH |
"eieio\n" |
"tlbsync\n" |
"sync\n" |
: "=r" (index) |
); |
} |
442,7 → 594,7 |
: "=r" (vsid) |
: "r" (sr << 28) |
); |
printf("vsid[%d]: VSID=%.*p (ASID=%d)%s%s\n", sr, |
printf("sr[%02u]: vsid=%.*p (asid=%u)%s%s\n", sr, |
sizeof(vsid) * 2, vsid & 0xffffff, (vsid & 0xffffff) >> 4, |
((vsid >> 30) & 1) ? " supervisor" : "", |
((vsid >> 29) & 1) ? " user" : ""); |
//branches/tracing/kernel/arch/ppc32/src/mm/frame.c |
---|
74,7 → 74,7 |
if (last_frame < ALIGN_UP(bootinfo.memmap.zones[i].start + bootinfo.memmap.zones[i].size, FRAME_SIZE)) |
last_frame = ALIGN_UP(bootinfo.memmap.zones[i].start + bootinfo.memmap.zones[i].size, FRAME_SIZE); |
} |
/* First is exception vector, second is 'implementation specific', |
third and fourth is reserved, other contain real mode code */ |
frame_mark_unavailable(0, 8); |
//branches/tracing/kernel/arch/ppc32/src/mm/page.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ppc32mm |
/** @addtogroup ppc32mm |
* @{ |
*/ |
/** @file |
49,7 → 49,7 |
{ |
if (last_frame + ALIGN_UP(size, PAGE_SIZE) > |
KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) |
panic("Unable to map physical memory %p (%" PRIs " bytes)", |
panic("Unable to map physical memory %p (%" PRIs " bytes).", |
physaddr, size) |
uintptr_t virtaddr = PA2KA(last_frame); |
//branches/tracing/kernel/arch/ppc32/src/dummy.s |
---|
30,6 → 30,7 |
.global asm_delay_loop |
.global sys_tls_set |
.global cpu_halt |
sys_tls_set: |
b sys_tls_set |
36,3 → 37,6 |
asm_delay_loop: |
blr |
cpu_halt: |
b cpu_halt |
//branches/tracing/kernel/arch/ppc32/src/interrupt.c |
---|
60,7 → 60,6 |
int inum; |
while ((inum = pic_get_pending()) != -1) { |
bool ack = false; |
irq_t *irq = irq_dispatch_and_lock(inum); |
if (irq) { |
/* |
69,11 → 68,17 |
if (irq->preack) { |
/* Acknowledge the interrupt before processing */ |
pic_ack_interrupt(inum); |
ack = true; |
if (irq->cir) |
irq->cir(irq->cir_arg, irq->inr); |
} |
irq->handler(irq, irq->arg); |
irq->handler(irq); |
if (!irq->preack) { |
if (irq->cir) |
irq->cir(irq->cir_arg, irq->inr); |
} |
spinlock_unlock(&irq->lock); |
} else { |
/* |
83,9 → 88,6 |
printf("cpu%u: spurious interrupt (inum=%d)\n", CPU->id, inum); |
#endif |
} |
if (!ack) |
pic_ack_interrupt(inum); |
} |
} |
92,8 → 94,8 |
static void exception_decrementer(int n, istate_t *istate) |
{ |
start_decrementer(); |
clock(); |
start_decrementer(); |
} |
#ifdef CONFIG_UDEBUG |
//branches/tracing/kernel/arch/ppc32/src/drivers/cuda.c |
---|
File deleted |
//branches/tracing/kernel/arch/ppc32/src/drivers/pic.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ppc32 |
/** @addtogroup ppc32 |
* @{ |
*/ |
/** @file |
38,53 → 38,61 |
#include <byteorder.h> |
#include <bitops.h> |
static volatile uint32_t *pic; |
static volatile uint32_t *pic = NULL; |
void pic_init(uintptr_t base, size_t size) |
void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg) |
{ |
pic = (uint32_t *) hw_map(base, size); |
*cir = pic_ack_interrupt; |
*cir_arg = NULL; |
} |
void pic_enable_interrupt(int intnum) |
void pic_enable_interrupt(inr_t intnum) |
{ |
if (intnum < 32) { |
pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] | (1 << intnum); |
} else { |
pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] | (1 << (intnum - 32)); |
if (pic) { |
if (intnum < 32) |
pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] | (1 << intnum); |
else |
pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] | (1 << (intnum - 32)); |
} |
} |
void pic_disable_interrupt(int intnum) |
void pic_disable_interrupt(inr_t intnum) |
{ |
if (intnum < 32) { |
pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] & (~(1 << intnum)); |
} else { |
pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] & (~(1 << (intnum - 32))); |
if (pic) { |
if (intnum < 32) |
pic[PIC_MASK_LOW] = pic[PIC_MASK_LOW] & (~(1 << intnum)); |
else |
pic[PIC_MASK_HIGH] = pic[PIC_MASK_HIGH] & (~(1 << (intnum - 32))); |
} |
} |
void pic_ack_interrupt(int intnum) |
void pic_ack_interrupt(void *arg, inr_t intnum) |
{ |
if (intnum < 32) |
pic[PIC_ACK_LOW] = 1 << intnum; |
else |
pic[PIC_ACK_HIGH] = 1 << (intnum - 32); |
if (pic) { |
if (intnum < 32) |
pic[PIC_ACK_LOW] = 1 << intnum; |
else |
pic[PIC_ACK_HIGH] = 1 << (intnum - 32); |
} |
} |
/** Return number of pending interrupt */ |
int pic_get_pending(void) |
{ |
int pending; |
pending = pic[PIC_PENDING_LOW]; |
if (pending) |
return fnzb32(pending); |
if (pic) { |
int pending; |
pending = pic[PIC_PENDING_LOW]; |
if (pending) |
return fnzb32(pending); |
pending = pic[PIC_PENDING_HIGH]; |
if (pending) |
return fnzb32(pending) + 32; |
} |
pending = pic[PIC_PENDING_HIGH]; |
if (pending) |
return fnzb32(pending) + 32; |
return -1; |
} |
//branches/tracing/kernel/arch/amd64/_link.ld.in |
---|
43,8 → 43,6 |
QUAD(unmapped_kdata_end - unmapped_kdata_start); |
*(COMMON); /* global variables */ |
*(.eh_frame); |
symbol_table = .; |
*(symtab.*); /* Symbol table, must be LAST symbol!*/ |
52,6 → 50,10 |
kdata_end = .; |
} |
/DISCARD/ : { |
*(*); |
} |
#ifdef CONFIG_SMP |
_hardcoded_unmapped_size = (unmapped_ktext_end - unmapped_ktext_start) + (unmapped_kdata_end - unmapped_kdata_start); |
//branches/tracing/kernel/arch/amd64/include/drivers/i8042.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/amd64/include/drivers/i8254.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/amd64/include/drivers/ega.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/amd64/include/drivers/vesa.h |
---|
File deleted |
//branches/tracing/kernel/arch/amd64/include/drivers/i8259.h |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/kernel/arch/amd64/include/interrupt.h |
---|
71,7 → 71,6 |
/** This is passed to interrupt handlers */ |
typedef struct { |
uint64_t rax; |
uint64_t rbx; |
uint64_t rcx; |
uint64_t rdx; |
uint64_t rsi; |
80,11 → 79,6 |
uint64_t r9; |
uint64_t r10; |
uint64_t r11; |
uint64_t r12; |
uint64_t r13; |
uint64_t r14; |
uint64_t r15; |
uint64_t rbp; |
uint64_t error_word; |
uint64_t rip; |
uint64_t cs; |
//branches/tracing/kernel/arch/amd64/include/types.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup amd64 |
/** @addtogroup amd64 |
* @{ |
*/ |
/** @file |
57,6 → 57,9 |
typedef uint64_t unative_t; |
typedef int64_t native_t; |
typedef struct { |
} fncptr_t; |
/**< Formats for uintptr_t, size_t, count_t and index_t */ |
#define PRIp "llx" |
#define PRIs "llu" |
//branches/tracing/kernel/arch/amd64/include/cpuid.h |
---|
35,14 → 35,15 |
#ifndef KERN_amd64_CPUID_H_ |
#define KERN_amd64_CPUID_H_ |
#define AMD_CPUID_EXTENDED 0x80000001 |
#define AMD_EXT_NOEXECUTE 20 |
#define AMD_EXT_LONG_MODE 29 |
#define AMD_CPUID_EXTENDED 0x80000001 |
#define AMD_EXT_NOEXECUTE 20 |
#define AMD_EXT_LONG_MODE 29 |
#define INTEL_CPUID_STANDARD 0x00000001 |
#define INTEL_CPUID_EXTENDED 0x80000000 |
#define INTEL_SSE2 26 |
#define INTEL_FXSAVE 24 |
#define INTEL_CPUID_LEVEL 0x00000000 |
#define INTEL_CPUID_STANDARD 0x00000001 |
#define INTEL_CPUID_EXTENDED 0x80000000 |
#define INTEL_SSE2 26 |
#define INTEL_FXSAVE 24 |
#ifndef __ASM__ |
//branches/tracing/kernel/arch/amd64/include/pm.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup amd64 |
/** @addtogroup amd64 |
* @{ |
*/ |
/** @file |
36,63 → 36,60 |
#define KERN_amd64_PM_H_ |
#ifndef __ASM__ |
# include <arch/types.h> |
# include <arch/context.h> |
#include <arch/types.h> |
#include <arch/context.h> |
#endif |
#define IDT_ITEMS 64 |
#define GDT_ITEMS 8 |
#define IDT_ITEMS 64 |
#define GDT_ITEMS 8 |
#define NULL_DES 0 |
/* Warning: Do not reorder next items, unless you look into syscall.c!!! */ |
#define KTEXT_DES 1 |
#define KDATA_DES 2 |
#define UDATA_DES 3 |
#define UTEXT_DES 4 |
#define KTEXT32_DES 5 |
/* EndOfWarning */ |
#define TSS_DES 6 |
#define NULL_DES 0 |
/* Warning: Do not reorder the following items, unless you look into syscall.c! */ |
#define KTEXT_DES 1 |
#define KDATA_DES 2 |
#define UDATA_DES 3 |
#define UTEXT_DES 4 |
#define KTEXT32_DES 5 |
/* End of warning */ |
#define TSS_DES 6 |
#ifdef CONFIG_FB |
#define VESA_INIT_DES 8 |
#define VESA_INIT_SEGMENT 0x8000 |
#undef GDT_ITEMS |
#define GDT_ITEMS 9 |
#define VESA_INIT_DES 8 |
#define VESA_INIT_SEGMENT 0x8000 |
#endif /*CONFIG_FB*/ |
#undef GDT_ITEMS |
#define GDT_ITEMS 9 |
#endif /* CONFIG_FB */ |
#define gdtselector(des) ((des) << 3) |
#define idtselector(des) ((des) << 4) |
#define gdtselector(des) ((des) << 3) |
#define idtselector(des) ((des) << 4) |
#define PL_KERNEL 0 |
#define PL_USER 3 |
#define PL_KERNEL 0 |
#define PL_USER 3 |
#define AR_PRESENT ( 1 << 7) |
#define AR_DATA (2 << 3) |
#define AR_CODE (3 << 3) |
#define AR_WRITABLE (1 << 1) |
#define AR_READABLE (1 << 1) |
#define AR_TSS (0x09) |
#define AR_INTERRUPT (0x0e) |
#define AR_TRAP (0x0f) |
#define AR_PRESENT (1<<7) |
#define AR_DATA (2<<3) |
#define AR_CODE (3<<3) |
#define AR_WRITABLE (1<<1) |
#define AR_READABLE (1<<1) |
#define AR_TSS (0x9) |
#define AR_INTERRUPT (0xe) |
#define AR_TRAP (0xf) |
#define DPL_KERNEL (PL_KERNEL << 5) |
#define DPL_USER (PL_USER << 5) |
#define DPL_KERNEL (PL_KERNEL<<5) |
#define DPL_USER (PL_USER<<5) |
#define TSS_BASIC_SIZE 104 |
#define TSS_IOMAP_SIZE (16 * 1024 + 1) /* 16K for bitmap + 1 terminating byte for convenience */ |
#define TSS_BASIC_SIZE 104 |
#define TSS_IOMAP_SIZE (16*1024+1) /* 16K for bitmap + 1 terminating byte for convenience */ |
#define IO_PORTS (64 * 1024) |
#define IO_PORTS (64*1024) |
#ifndef __ASM__ |
struct descriptor { |
typedef struct { |
unsigned limit_0_15: 16; |
unsigned base_0_15: 16; |
unsigned base_16_23: 8; |
103,10 → 100,9 |
unsigned special: 1; |
unsigned granularity : 1; |
unsigned base_24_31: 8; |
} __attribute__ ((packed)); |
typedef struct descriptor descriptor_t; |
} __attribute__ ((packed)) descriptor_t; |
struct tss_descriptor { |
typedef struct { |
unsigned limit_0_15: 16; |
unsigned base_0_15: 16; |
unsigned base_16_23: 8; |
121,10 → 117,9 |
unsigned base_24_31: 8; |
unsigned base_32_63 : 32; |
unsigned : 32; |
} __attribute__ ((packed)); |
typedef struct tss_descriptor tss_descriptor_t; |
} __attribute__ ((packed)) tss_descriptor_t; |
struct idescriptor { |
typedef struct { |
unsigned offset_0_15: 16; |
unsigned selector: 16; |
unsigned ist:3; |
135,22 → 130,19 |
unsigned offset_16_31: 16; |
unsigned offset_32_63: 32; |
unsigned : 32; |
} __attribute__ ((packed)); |
typedef struct idescriptor idescriptor_t; |
} __attribute__ ((packed)) idescriptor_t; |
struct ptr_16_64 { |
typedef struct { |
uint16_t limit; |
uint64_t base; |
} __attribute__ ((packed)); |
typedef struct ptr_16_64 ptr_16_64_t; |
} __attribute__ ((packed)) ptr_16_64_t; |
struct ptr_16_32 { |
typedef struct { |
uint16_t limit; |
uint32_t base; |
} __attribute__ ((packed)); |
typedef struct ptr_16_32 ptr_16_32_t; |
} __attribute__ ((packed)) ptr_16_32_t; |
struct tss { |
typedef struct { |
uint32_t reserve1; |
uint64_t rsp0; |
uint64_t rsp1; |
167,8 → 159,7 |
uint16_t reserve4; |
uint16_t iomap_base; |
uint8_t iomap[TSS_IOMAP_SIZE]; |
} __attribute__ ((packed)); |
typedef struct tss tss_t; |
} __attribute__ ((packed)) tss_t; |
extern tss_t *tss_p; |
//branches/tracing/kernel/arch/amd64/include/atomic.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup amd64 |
/** @addtogroup amd64 |
* @{ |
*/ |
/** @file |
41,17 → 41,29 |
static inline void atomic_inc(atomic_t *val) { |
#ifdef CONFIG_SMP |
asm volatile ("lock incq %0\n" : "+m" (val->count)); |
asm volatile ( |
"lock incq %[count]\n" |
: [count] "+m" (val->count) |
); |
#else |
asm volatile ("incq %0\n" : "+m" (val->count)); |
asm volatile ( |
"incq %[count]\n" |
: [count] "+m" (val->count) |
); |
#endif /* CONFIG_SMP */ |
} |
static inline void atomic_dec(atomic_t *val) { |
#ifdef CONFIG_SMP |
asm volatile ("lock decq %0\n" : "+m" (val->count)); |
asm volatile ( |
"lock decq %[count]\n" |
: [count] "+m" (val->count) |
); |
#else |
asm volatile ("decq %0\n" : "+m" (val->count)); |
asm volatile ( |
"decq %[count]\n" |
: [count] "+m" (val->count) |
); |
#endif /* CONFIG_SMP */ |
} |
58,12 → 70,12 |
static inline long atomic_postinc(atomic_t *val) |
{ |
long r = 1; |
asm volatile ( |
"lock xaddq %1, %0\n" |
: "+m" (val->count), "+r" (r) |
"lock xaddq %[r], %[count]\n" |
: [count] "+m" (val->count), [r] "+r" (r) |
); |
return r; |
} |
72,23 → 84,23 |
long r = -1; |
asm volatile ( |
"lock xaddq %1, %0\n" |
: "+m" (val->count), "+r" (r) |
"lock xaddq %[r], %[count]\n" |
: [count] "+m" (val->count), [r] "+r" (r) |
); |
return r; |
} |
#define atomic_preinc(val) (atomic_postinc(val) + 1) |
#define atomic_predec(val) (atomic_postdec(val) - 1) |
#define atomic_preinc(val) (atomic_postinc(val) + 1) |
#define atomic_predec(val) (atomic_postdec(val) - 1) |
static inline uint64_t test_and_set(atomic_t *val) { |
uint64_t v; |
asm volatile ( |
"movq $1, %0\n" |
"xchgq %0, %1\n" |
: "=r" (v), "+m" (val->count) |
"movq $1, %[v]\n" |
"xchgq %[v], %[count]\n" |
: [v] "=r" (v), [count] "+m" (val->count) |
); |
return v; |
99,7 → 111,7 |
static inline void atomic_lock_arch(atomic_t *val) |
{ |
uint64_t tmp; |
preemption_disable(); |
asm volatile ( |
"0:\n" |
106,15 → 118,15 |
#ifdef CONFIG_HT |
"pause\n" |
#endif |
"mov %0, %1\n" |
"testq %1, %1\n" |
"mov %[count], %[tmp]\n" |
"testq %[tmp], %[tmp]\n" |
"jnz 0b\n" /* lightweight looping on locked spinlock */ |
"incq %1\n" /* now use the atomic operation */ |
"xchgq %0, %1\n" |
"testq %1, %1\n" |
"incq %[tmp]\n" /* now use the atomic operation */ |
"xchgq %[count], %[tmp]\n" |
"testq %[tmp], %[tmp]\n" |
"jnz 0b\n" |
: "+m" (val->count), "=&r" (tmp) |
: [count] "+m" (val->count), [tmp] "=&r" (tmp) |
); |
/* |
* Prevent critical section code from bleeding out this way up. |
//branches/tracing/kernel/arch/amd64/include/boot/boot.h |
---|
42,8 → 42,17 |
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 |
#define MULTIBOOT_HEADER_FLAGS 0x00010003 |
#define MULTIBOOT_LOADER_MAGIC 0x2BADB002 |
#ifndef __ASM__ |
#ifdef CONFIG_SMP |
/* This is only a symbol so the type is dummy. Obtain the value using &. */ |
extern int _hardcoded_unmapped_size; |
#endif /* CONFIG_SMP */ |
#endif /* __ASM__ */ |
#endif |
/** @} |
//branches/tracing/kernel/arch/amd64/include/arch.h |
---|
35,6 → 35,10 |
#ifndef KERN_amd64_ARCH_H_ |
#define KERN_amd64_ARCH_H_ |
#include <genarch/multiboot/multiboot.h> |
extern void arch_pre_main(uint32_t, const multiboot_info_t *); |
#endif |
/** @} |
//branches/tracing/kernel/arch/amd64/include/asm.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup amd64 |
/** @addtogroup amd64 |
* @{ |
*/ |
/** @file |
36,6 → 36,8 |
#define KERN_amd64_ASM_H_ |
#include <config.h> |
#include <arch/types.h> |
#include <typedefs.h> |
extern void asm_delay_loop(uint32_t t); |
extern void asm_fake_loop(uint32_t t); |
45,12 → 47,17 |
* Return the base address of the current stack. |
* The stack is assumed to be STACK_SIZE bytes long. |
* The stack must start on page boundary. |
* |
*/ |
static inline uintptr_t get_stack_base(void) |
{ |
uintptr_t v; |
asm volatile ("andq %%rsp, %0\n" : "=r" (v) : "0" (~((uint64_t)STACK_SIZE-1))); |
asm volatile ( |
"andq %%rsp, %[v]\n" |
: [v] "=r" (v) |
: "0" (~((uint64_t) STACK_SIZE-1)) |
); |
return v; |
} |
62,7 → 69,11 |
static inline void cpu_halt(void) |
{ |
asm volatile ("hlt\n"); |
asm volatile ( |
"0:\n" |
" hlt\n" |
" jmp 0b\n" |
); |
} |
72,15 → 83,63 |
* |
* @param port Port to read from |
* @return Value read |
* |
*/ |
static inline uint8_t inb(uint16_t port) |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
uint8_t val; |
asm volatile ( |
"inb %w[port], %b[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
asm volatile ("inb %w1, %b0 \n" : "=a" (val) : "d" (port)); |
/** Word from port |
* |
* Get word from port |
* |
* @param port Port to read from |
* @return Value read |
* |
*/ |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
uint16_t val; |
asm volatile ( |
"inw %w[port], %w[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
/** Double word from port |
* |
* Get double word from port |
* |
* @param port Port to read from |
* @return Value read |
* |
*/ |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
uint32_t val; |
asm volatile ( |
"inl %w[port], %[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
/** Byte to port |
* |
* Output byte to port |
87,12 → 146,48 |
* |
* @param port Port to write to |
* @param val Value to write |
* |
*/ |
static inline void outb(uint16_t port, uint8_t val) |
static inline void pio_write_8(ioport8_t *port, uint8_t val) |
{ |
asm volatile ("outb %b0, %w1\n" : : "a" (val), "d" (port)); |
asm volatile ( |
"outb %b[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
/** Word to port |
* |
* Output word to port |
* |
* @param port Port to write to |
* @param val Value to write |
* |
*/ |
static inline void pio_write_16(ioport16_t *port, uint16_t val) |
{ |
asm volatile ( |
"outw %w[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
/** Double word to port |
* |
* Output double word to port |
* |
* @param port Port to write to |
* @param val Value to write |
* |
*/ |
static inline void pio_write_32(ioport32_t *port, uint32_t val) |
{ |
asm volatile ( |
"outl %[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
/** Swap Hidden part of GS register with visible one */ |
static inline void swapgs(void) |
{ |
105,15 → 200,18 |
* value of EFLAGS. |
* |
* @return Old interrupt priority level. |
* |
*/ |
static inline ipl_t interrupts_enable(void) { |
ipl_t v; |
__asm__ volatile ( |
asm volatile ( |
"pushfq\n" |
"popq %0\n" |
"popq %[v]\n" |
"sti\n" |
: "=r" (v) |
: [v] "=r" (v) |
); |
return v; |
} |
123,15 → 221,18 |
* value of EFLAGS. |
* |
* @return Old interrupt priority level. |
* |
*/ |
static inline ipl_t interrupts_disable(void) { |
ipl_t v; |
__asm__ volatile ( |
asm volatile ( |
"pushfq\n" |
"popq %0\n" |
"popq %[v]\n" |
"cli\n" |
: "=r" (v) |
); |
: [v] "=r" (v) |
); |
return v; |
} |
140,13 → 241,14 |
* Restore EFLAGS. |
* |
* @param ipl Saved interrupt priority level. |
* |
*/ |
static inline void interrupts_restore(ipl_t ipl) { |
__asm__ volatile ( |
"pushq %0\n" |
asm volatile ( |
"pushq %[ipl]\n" |
"popfq\n" |
: : "r" (ipl) |
); |
:: [ipl] "r" (ipl) |
); |
} |
/** Return interrupt priority level. |
154,14 → 256,17 |
* Return EFLAFS. |
* |
* @return Current interrupt priority level. |
* |
*/ |
static inline ipl_t interrupts_read(void) { |
ipl_t v; |
__asm__ volatile ( |
asm volatile ( |
"pushfq\n" |
"popq %0\n" |
: "=r" (v) |
"popq %[v]\n" |
: [v] "=r" (v) |
); |
return v; |
} |
168,21 → 273,25 |
/** Write to MSR */ |
static inline void write_msr(uint32_t msr, uint64_t value) |
{ |
__asm__ volatile ( |
"wrmsr;" : : "c" (msr), |
"a" ((uint32_t)(value)), |
"d" ((uint32_t)(value >> 32)) |
); |
asm volatile ( |
"wrmsr\n" |
:: "c" (msr), |
"a" ((uint32_t) (value)), |
"d" ((uint32_t) (value >> 32)) |
); |
} |
static inline unative_t read_msr(uint32_t msr) |
{ |
uint32_t ax, dx; |
__asm__ volatile ( |
"rdmsr;" : "=a"(ax), "=d"(dx) : "c" (msr) |
); |
return ((uint64_t)dx << 32) | ax; |
asm volatile ( |
"rdmsr\n" |
: "=a" (ax), "=d" (dx) |
: "c" (msr) |
); |
return ((uint64_t) dx << 32) | ax; |
} |
189,29 → 298,29 |
/** Enable local APIC |
* |
* Enable local APIC in MSR. |
* |
*/ |
static inline void enable_l_apic_in_msr() |
{ |
__asm__ volatile ( |
asm volatile ( |
"movl $0x1b, %%ecx\n" |
"rdmsr\n" |
"orl $(1<<11),%%eax\n" |
"orl $(1 << 11),%%eax\n" |
"orl $(0xfee00000),%%eax\n" |
"wrmsr\n" |
: |
: |
:"%eax","%ecx","%edx" |
); |
::: "%eax","%ecx","%edx" |
); |
} |
static inline uintptr_t * get_ip() |
{ |
uintptr_t *ip; |
__asm__ volatile ( |
"mov %%rip, %0" |
: "=r" (ip) |
); |
asm volatile ( |
"mov %%rip, %[ip]" |
: [ip] "=r" (ip) |
); |
return ip; |
} |
218,59 → 327,84 |
/** Invalidate TLB Entry. |
* |
* @param addr Address on a page whose TLB entry is to be invalidated. |
* |
*/ |
static inline void invlpg(uintptr_t addr) |
{ |
__asm__ volatile ("invlpg %0\n" :: "m" (*((unative_t *)addr))); |
asm volatile ( |
"invlpg %[addr]\n" |
:: [addr] "m" (*((unative_t *) addr)) |
); |
} |
/** Load GDTR register from memory. |
* |
* @param gdtr_reg Address of memory from where to load GDTR. |
* |
*/ |
static inline void gdtr_load(struct ptr_16_64 *gdtr_reg) |
static inline void gdtr_load(ptr_16_64_t *gdtr_reg) |
{ |
__asm__ volatile ("lgdtq %0\n" : : "m" (*gdtr_reg)); |
asm volatile ( |
"lgdtq %[gdtr_reg]\n" |
:: [gdtr_reg] "m" (*gdtr_reg) |
); |
} |
/** Store GDTR register to memory. |
* |
* @param gdtr_reg Address of memory to where to load GDTR. |
* |
*/ |
static inline void gdtr_store(struct ptr_16_64 *gdtr_reg) |
static inline void gdtr_store(ptr_16_64_t *gdtr_reg) |
{ |
__asm__ volatile ("sgdtq %0\n" : : "m" (*gdtr_reg)); |
asm volatile ( |
"sgdtq %[gdtr_reg]\n" |
:: [gdtr_reg] "m" (*gdtr_reg) |
); |
} |
/** Load IDTR register from memory. |
* |
* @param idtr_reg Address of memory from where to load IDTR. |
* |
*/ |
static inline void idtr_load(struct ptr_16_64 *idtr_reg) |
static inline void idtr_load(ptr_16_64_t *idtr_reg) |
{ |
__asm__ volatile ("lidtq %0\n" : : "m" (*idtr_reg)); |
asm volatile ( |
"lidtq %[idtr_reg]\n" |
:: [idtr_reg] "m" (*idtr_reg)); |
} |
/** Load TR from descriptor table. |
* |
* @param sel Selector specifying descriptor of TSS segment. |
* |
*/ |
static inline void tr_load(uint16_t sel) |
{ |
__asm__ volatile ("ltr %0" : : "r" (sel)); |
asm volatile ( |
"ltr %[sel]" |
:: [sel] "r" (sel) |
); |
} |
#define GEN_READ_REG(reg) static inline unative_t read_ ##reg (void) \ |
{ \ |
unative_t res; \ |
__asm__ volatile ("movq %%" #reg ", %0" : "=r" (res) ); \ |
return res; \ |
} |
{ \ |
unative_t res; \ |
asm volatile ( \ |
"movq %%" #reg ", %[res]" \ |
: [res] "=r" (res) \ |
); \ |
return res; \ |
} |
#define GEN_WRITE_REG(reg) static inline void write_ ##reg (unative_t regn) \ |
{ \ |
__asm__ volatile ("movq %0, %%" #reg : : "r" (regn)); \ |
} |
{ \ |
asm volatile ( \ |
"movq %[regn], %%" #reg \ |
:: [regn] "r" (regn) \ |
); \ |
} |
GEN_READ_REG(cr0) |
GEN_READ_REG(cr2) |
//branches/tracing/kernel/arch/amd64/include/mm/frame.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup amd64mm |
/** @addtogroup amd64mm |
* @{ |
*/ |
/** @file |
39,8 → 39,8 |
#include <arch/types.h> |
#endif /* __ASM__ */ |
#define FRAME_WIDTH 12 /* 4K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#define FRAME_WIDTH 12 /* 4K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#ifndef __ASM__ |
extern uintptr_t last_frame; |
//branches/tracing/kernel/arch/amd64/include/mm/tlb.h |
---|
35,9 → 35,6 |
#ifndef KERN_amd64_TLB_H_ |
#define KERN_amd64_TLB_H_ |
#define tlb_arch_init() |
#define tlb_print() |
#endif |
/** @} |
//branches/tracing/kernel/arch/amd64/include/cpu.h |
---|
35,9 → 35,9 |
#ifndef KERN_amd64_CPU_H_ |
#define KERN_amd64_CPU_H_ |
#define RFLAGS_IF (1 << 9) |
#define RFLAGS_DF (1 << 10) |
#define RFLAGS_RF (1 << 16) |
#define RFLAGS_IF (1 << 9) |
#define RFLAGS_DF (1 << 10) |
#define RFLAGS_RF (1 << 16) |
#define EFER_MSR_NUM 0xc0000080 |
#define AMD_SCE_FLAG 0 |
62,17 → 62,15 |
int family; |
int model; |
int stepping; |
struct tss *tss; |
tss_t *tss; |
count_t iomapver_copy; /** Copy of TASK's I/O Permission bitmap generation count. */ |
count_t iomapver_copy; /** Copy of TASK's I/O Permission bitmap generation count. */ |
} cpu_arch_t; |
struct star_msr { |
}; |
struct lstar_msr { |
}; |
extern void set_efer_flag(int flag); |
//branches/tracing/kernel/arch/amd64/Makefile.inc |
---|
29,10 → 29,6 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
BFD_NAME = elf64-x86-64 |
BFD_ARCH = i386:x86-64 |
BFD = binary |
45,83 → 41,50 |
ICC_CFLAGS += $(CMN1) |
SUNCC_CFLAGS += -m64 -xmodel=kernel |
DEFS += -DMACHINE=$(MACHINE) -D__64_BITS__ |
DEFS += -D__64_BITS__ |
## Accepted CPUs |
# |
ifeq ($(MACHINE),opteron) |
ifeq ($(PROCESSOR),opteron) |
CMN2 := -march=opteron |
GCC_CFLAGS += $(CMN2) |
ICC_CFLAGS += $(CMN2) |
SUNCC_CFLAGS += -xtarget=opteron |
DEFS += -DFENCES=p4 |
endif |
## Own configuration directives |
# |
CONFIG_ACPI = y |
## Compile with hierarchical page tables support. |
# |
CONFIG_PAGE_PT = y |
DEFS += -DCONFIG_PAGE_PT |
## Compile with i8042 support. |
# |
CONFIG_I8042 = y |
DEFS += -DCONFIG_I8042 |
## Accepted configuration directives |
# |
ifeq ($(CONFIG_SMP),y) |
DEFS += -DCONFIG_SMP |
endif |
ifeq ($(CONFIG_HT),y) |
DEFS += -DCONFIG_HT |
endif |
ifeq ($(CONFIG_SIMICS_FIX),y) |
DEFS += -DCONFIG_SIMICS_FIX |
endif |
ARCH_SOURCES = \ |
arch/$(ARCH)/src/fpu_context.c \ |
arch/$(ARCH)/src/boot/boot.S \ |
arch/$(ARCH)/src/boot/memmap.c \ |
arch/$(ARCH)/src/pm.c \ |
arch/$(ARCH)/src/context.S \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/ega.c \ |
arch/$(ARCH)/src/drivers/vesa.c \ |
arch/$(ARCH)/src/drivers/i8254.c \ |
arch/$(ARCH)/src/drivers/i8259.c \ |
arch/$(ARCH)/src/delay.S \ |
arch/$(ARCH)/src/amd64.c \ |
arch/$(ARCH)/src/bios/bios.c \ |
arch/$(ARCH)/src/interrupt.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/asm_utils.S \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/proc/scheduler.c \ |
arch/$(ARCH)/src/proc/task.c \ |
arch/$(ARCH)/src/proc/thread.c \ |
arch/$(ARCH)/src/userspace.c \ |
arch/$(ARCH)/src/syscall.c \ |
arch/$(ARCH)/src/debugger.c |
arch/$(KARCH)/src/fpu_context.c \ |
arch/$(KARCH)/src/boot/boot.S \ |
arch/$(KARCH)/src/boot/memmap.c \ |
arch/$(KARCH)/src/pm.c \ |
arch/$(KARCH)/src/context.S \ |
arch/$(KARCH)/src/ddi/ddi.c \ |
arch/$(KARCH)/src/drivers/vesa.c \ |
arch/$(KARCH)/src/drivers/i8254.c \ |
arch/$(KARCH)/src/drivers/i8259.c \ |
arch/$(KARCH)/src/delay.S \ |
arch/$(KARCH)/src/amd64.c \ |
arch/$(KARCH)/src/bios/bios.c \ |
arch/$(KARCH)/src/interrupt.c \ |
arch/$(KARCH)/src/mm/as.c \ |
arch/$(KARCH)/src/mm/frame.c \ |
arch/$(KARCH)/src/mm/page.c \ |
arch/$(KARCH)/src/mm/tlb.c \ |
arch/$(KARCH)/src/asm_utils.S \ |
arch/$(KARCH)/src/cpu/cpu.c \ |
arch/$(KARCH)/src/proc/scheduler.c \ |
arch/$(KARCH)/src/proc/task.c \ |
arch/$(KARCH)/src/proc/thread.c \ |
arch/$(KARCH)/src/userspace.c \ |
arch/$(KARCH)/src/syscall.c \ |
arch/$(KARCH)/src/debugger.c |
ifeq ($(CONFIG_SMP),y) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/smp/ap.S \ |
arch/$(ARCH)/src/smp/apic.c \ |
arch/$(ARCH)/src/smp/ipi.c \ |
arch/$(ARCH)/src/smp/mps.c \ |
arch/$(ARCH)/src/smp/smp.c |
arch/$(KARCH)/src/smp/ap.S \ |
arch/$(KARCH)/src/smp/apic.c \ |
arch/$(KARCH)/src/smp/ipi.c \ |
arch/$(KARCH)/src/smp/mps.c \ |
arch/$(KARCH)/src/smp/smp.c |
endif |
//branches/tracing/kernel/arch/amd64/src/fpu_context.c |
---|
39,9 → 39,9 |
void fpu_context_save(fpu_context_t *fctx) |
{ |
asm volatile ( |
"fxsave %0" |
: "=m"(*fctx) |
); |
"fxsave %[fctx]\n" |
: [fctx] "=m" (*fctx) |
); |
} |
/** Restore FPU (mmx,sse) context using fxrstor instruction */ |
48,9 → 48,9 |
void fpu_context_restore(fpu_context_t *fctx) |
{ |
asm volatile ( |
"fxrstor %0" |
: "=m"(*fctx) |
); |
"fxrstor %[fctx]\n" |
: [fctx] "=m" (*fctx) |
); |
} |
void fpu_init() |
57,7 → 57,7 |
{ |
/* TODO: Zero all SSE, MMX etc. registers */ |
asm volatile ( |
"fninit;" |
"fninit\n" |
); |
} |
//branches/tracing/kernel/arch/amd64/src/cpu/cpu.c |
---|
77,21 → 77,19 |
void cpu_setup_fpu(void) |
{ |
asm volatile ( |
"movq %%cr0, %%rax;" |
"btsq $1, %%rax;" /* cr0.mp */ |
"btrq $2, %%rax;" /* cr0.em */ |
"movq %%rax, %%cr0;" |
"movq %%cr4, %%rax;" |
"bts $9, %%rax;" /* cr4.osfxsr */ |
"movq %%rax, %%cr4;" |
: |
: |
:"%rax" |
); |
"movq %%cr0, %%rax\n" |
"btsq $1, %%rax\n" /* cr0.mp */ |
"btrq $2, %%rax\n" /* cr0.em */ |
"movq %%rax, %%cr0\n" |
"movq %%cr4, %%rax\n" |
"bts $9, %%rax\n" /* cr4.osfxsr */ |
"movq %%rax, %%cr4\n" |
::: "%rax" |
); |
} |
/** Set the TS flag to 1. |
/** Set the TS flag to 1. |
* |
* If a thread accesses coprocessor, exception is run, which |
* does a lazy fpu context switch. |
99,26 → 97,22 |
*/ |
void fpu_disable(void) |
{ |
asm volatile ( |
"mov %%cr0,%%rax;" |
"bts $3,%%rax;" |
"mov %%rax,%%cr0;" |
: |
: |
:"%rax" |
); |
asm volatile ( |
"mov %%cr0, %%rax\n" |
"bts $3, %%rax\n" |
"mov %%rax, %%cr0\n" |
::: "%rax" |
); |
} |
void fpu_enable(void) |
{ |
asm volatile ( |
"mov %%cr0,%%rax;" |
"btr $3,%%rax;" |
"mov %%rax,%%cr0;" |
: |
: |
:"%rax" |
); |
asm volatile ( |
"mov %%cr0, %%rax\n" |
"btr $3, %%rax\n" |
"mov %%rax, %%cr0\n" |
::: "%rax" |
); |
} |
void cpu_arch_init(void) |
//branches/tracing/kernel/arch/amd64/src/amd64.c |
---|
39,11 → 39,15 |
#include <config.h> |
#include <proc/thread.h> |
#include <arch/drivers/ega.h> |
#include <genarch/multiboot/multiboot.h> |
#include <genarch/drivers/legacy/ia32/io.h> |
#include <genarch/drivers/ega/ega.h> |
#include <arch/drivers/vesa.h> |
#include <genarch/kbd/i8042.h> |
#include <genarch/drivers/i8042/i8042.h> |
#include <genarch/kbrd/kbrd.h> |
#include <arch/drivers/i8254.h> |
#include <arch/drivers/i8259.h> |
#include <arch/boot/boot.h> |
#ifdef CONFIG_SMP |
#include <arch/smp/apic.h> |
61,9 → 65,8 |
#include <syscall/syscall.h> |
#include <console/console.h> |
#include <ddi/irq.h> |
#include <ddi/device.h> |
#include <sysinfo/sysinfo.h> |
/** Disable I/O on non-privileged levels |
* |
* Clean IOPL(12,13) and NT(14) flags in EFLAGS register |
70,15 → 73,13 |
*/ |
static void clean_IOPL_NT_flags(void) |
{ |
asm ( |
asm volatile ( |
"pushfq\n" |
"pop %%rax\n" |
"and $~(0x7000), %%rax\n" |
"pushq %%rax\n" |
"popfq\n" |
: |
: |
: "%rax" |
::: "%rax" |
); |
} |
88,16 → 89,31 |
*/ |
static void clean_AM_flag(void) |
{ |
asm ( |
asm volatile ( |
"mov %%cr0, %%rax\n" |
"and $~(0x40000), %%rax\n" |
"mov %%rax, %%cr0\n" |
: |
: |
: "%rax" |
::: "%rax" |
); |
} |
/** Perform amd64-specific initialization before main_bsp() is called. |
* |
* @param signature Should contain the multiboot signature. |
* @param mi Pointer to the multiboot information structure. |
*/ |
void arch_pre_main(uint32_t signature, const multiboot_info_t *mi) |
{ |
/* Parse multiboot information obtained from the bootloader. */ |
multiboot_info_parse(signature, mi); |
#ifdef CONFIG_SMP |
/* Copy AP bootstrap routines below 1 MB. */ |
memcpy((void *) AP_BOOT_OFFSET, (void *) BOOT_OFFSET, |
(size_t) &_hardcoded_unmapped_size); |
#endif |
} |
void arch_pre_mm_init(void) |
{ |
/* Enable no-execute pages */ |
133,13 → 149,17 |
/* hard clock */ |
i8254_init(); |
#ifdef CONFIG_FB |
if (vesa_present()) |
vesa_init(); |
else |
#endif |
ega_init(); /* video */ |
#ifdef CONFIG_EGA |
ega_init(EGA_BASE, EGA_VIDEORAM); /* video */ |
#else |
{} |
#endif |
/* Enable debugger */ |
debugger_init(); |
172,8 → 192,33 |
void arch_post_smp_init(void) |
{ |
/* keyboard controller */ |
i8042_init(device_assign_devno(), IRQ_KBD, device_assign_devno(), IRQ_MOUSE); |
#ifdef CONFIG_PC_KBD |
/* |
* Initialize the i8042 controller. Then initialize the keyboard |
* module and connect it to i8042. Enable keyboard interrupts. |
*/ |
i8042_instance_t *i8042_instance = i8042_init((i8042_t *) I8042_BASE, IRQ_KBD); |
if (i8042_instance) { |
kbrd_instance_t *kbrd_instance = kbrd_init(); |
if (kbrd_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *kbrd = kbrd_wire(kbrd_instance, sink); |
i8042_wire(i8042_instance, kbrd); |
trap_virtual_enable_irqs(1 << IRQ_KBD); |
} |
} |
/* |
* This is the necessary evil until the userspace driver is entirely |
* self-sufficient. |
*/ |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.inr", NULL, IRQ_KBD); |
sysinfo_set_item_val("kbd.address.physical", NULL, |
(uintptr_t) I8042_BASE); |
sysinfo_set_item_val("kbd.address.kernel", NULL, |
(uintptr_t) I8042_BASE); |
#endif |
} |
void calibrate_delay_loop(void) |
208,15 → 253,45 |
*/ |
void arch_grab_console(void) |
{ |
i8042_grab(); |
#ifdef CONFIG_FB |
if (vesa_present()) |
vesa_redraw(); |
else |
#endif |
#ifdef CONFIG_EGA |
ega_redraw(); |
#else |
{} |
#endif |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
i8042_release(); |
} |
/** Construct function pointer |
* |
* @param fptr function pointer structure |
* @param addr function address |
* @param caller calling function address |
* |
* @return address of the function pointer |
* |
*/ |
void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
{ |
return addr; |
} |
void arch_reboot(void) |
{ |
#ifdef CONFIG_PC_KBD |
i8042_cpu_reset((i8042_t *) I8042_BASE); |
#endif |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/amd64/src/pm.c |
---|
137,8 → 137,8 |
void gdt_tss_setlimit(descriptor_t *d, uint32_t limit) |
{ |
struct tss_descriptor *td = (tss_descriptor_t *) d; |
tss_descriptor_t *td = (tss_descriptor_t *) d; |
td->limit_0_15 = limit & 0xffff; |
td->limit_16_19 = (limit >> 16) & 0xf; |
} |
185,14 → 185,14 |
*/ |
void pm_init(void) |
{ |
descriptor_t *gdt_p = (struct descriptor *) gdtr.base; |
descriptor_t *gdt_p = (descriptor_t *) gdtr.base; |
tss_descriptor_t *tss_desc; |
/* |
* Each CPU has its private GDT and TSS. |
* All CPUs share one IDT. |
*/ |
if (config.cpu_active == 1) { |
idt_init(); |
/* |
200,20 → 200,19 |
* the heap hasn't been initialized so far. |
*/ |
tss_p = &tss; |
} |
else { |
} else { |
/* We are going to use malloc, which may return |
* non boot-mapped pointer, initialize the CR3 register |
* ahead of page_init */ |
write_cr3((uintptr_t) AS_KERNEL->genarch.page_table); |
tss_p = (struct tss *) malloc(sizeof(tss_t), FRAME_ATOMIC); |
tss_p = (tss_t *) malloc(sizeof(tss_t), FRAME_ATOMIC); |
if (!tss_p) |
panic("could not allocate TSS\n"); |
panic("Cannot allocate TSS."); |
} |
tss_initialize(tss_p); |
tss_desc = (tss_descriptor_t *) (&gdt_p[TSS_DES]); |
tss_desc->present = 1; |
tss_desc->type = AR_TSS; |
221,7 → 220,7 |
gdt_tss_setbase(&gdt_p[TSS_DES], (uintptr_t) tss_p); |
gdt_tss_setlimit(&gdt_p[TSS_DES], TSS_BASIC_SIZE - 1); |
gdtr_load(&gdtr); |
idtr_load(&idtr); |
/* |
231,24 → 230,5 |
tr_load(gdtselector(TSS_DES)); |
} |
/* Reboot the machine by initiating |
* a triple fault |
*/ |
void arch_reboot(void) |
{ |
preemption_disable(); |
ipl_t ipl = interrupts_disable(); |
memsetb(idt, sizeof(idt), 0); |
idtr_load(&idtr); |
interrupts_restore(ipl); |
asm volatile ( |
"int $0x03\n" |
"cli\n" |
"hlt\n" |
); |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/amd64/src/ddi/ddi.c |
---|
57,15 → 57,15 |
int ddi_iospace_enable_arch(task_t *task, uintptr_t ioaddr, size_t size) |
{ |
count_t bits; |
bits = ioaddr + size; |
if (bits > IO_PORTS) |
return ENOENT; |
if (task->arch.iomap.bits < bits) { |
bitmap_t oldiomap; |
uint8_t *newmap; |
/* |
* The I/O permission bitmap is too small and needs to be grown. |
*/ |
77,17 → 77,17 |
bitmap_initialize(&oldiomap, task->arch.iomap.map, |
task->arch.iomap.bits); |
bitmap_initialize(&task->arch.iomap, newmap, bits); |
/* |
* Mark the new range inaccessible. |
*/ |
bitmap_set_range(&task->arch.iomap, oldiomap.bits, |
bits - oldiomap.bits); |
/* |
* In case there really existed smaller iomap, |
* copy its contents and deallocate it. |
*/ |
*/ |
if (oldiomap.bits) { |
bitmap_copy(&task->arch.iomap, &oldiomap, |
oldiomap.bits); |
94,17 → 94,17 |
free(oldiomap.map); |
} |
} |
/* |
* Enable the range and we are done. |
*/ |
bitmap_clear_range(&task->arch.iomap, (index_t) ioaddr, (count_t) size); |
/* |
* Increment I/O Permission bitmap generation counter. |
*/ |
task->arch.iomapver++; |
return 0; |
} |
122,7 → 122,7 |
descriptor_t *gdt_p; |
tss_descriptor_t *tss_desc; |
count_t ver; |
/* First, copy the I/O Permission Bitmap. */ |
spinlock_lock(&TASK->lock); |
ver = TASK->arch.iomapver; |
140,7 → 140,7 |
bitmap_set_range(&iomap, ALIGN_UP(TASK->arch.iomap.bits, 8), 8); |
} |
spinlock_unlock(&TASK->lock); |
/* |
* Second, adjust TSS segment limit. |
* Take the extra ending byte will all bits set into account. |
151,10 → 151,10 |
gdtr_load(&cpugdtr); |
/* |
* Before we load new TSS limit, the current TSS descriptor |
* type must be changed to describe inactive TSS. |
*/ |
tss_desc = (tss_descriptor_t *) &gdt_p[TSS_DES]; |
* Before we load new TSS limit, the current TSS descriptor |
* type must be changed to describe inactive TSS. |
*/ |
tss_desc = (tss_descriptor_t *) &gdt_p[TSS_DES]; |
tss_desc->type = AR_TSS; |
tr_load(gdtselector(TSS_DES)); |
//branches/tracing/kernel/arch/amd64/src/asm_utils.S |
---|
26,23 → 26,17 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
#define IREGISTER_SPACE 120 |
#define IREGISTER_SPACE 72 |
#define IOFFSET_RAX 0x0 |
#define IOFFSET_RBX 0x8 |
#define IOFFSET_RCX 0x10 |
#define IOFFSET_RDX 0x18 |
#define IOFFSET_RSI 0x20 |
#define IOFFSET_RDI 0x28 |
#define IOFFSET_R8 0x30 |
#define IOFFSET_R9 0x38 |
#define IOFFSET_R10 0x40 |
#define IOFFSET_R11 0x48 |
#define IOFFSET_R12 0x50 |
#define IOFFSET_R13 0x58 |
#define IOFFSET_R14 0x60 |
#define IOFFSET_R15 0x68 |
#define IOFFSET_RBP 0x70 |
#define IOFFSET_RAX 0x0 |
#define IOFFSET_RCX 0x8 |
#define IOFFSET_RDX 0x10 |
#define IOFFSET_RSI 0x18 |
#define IOFFSET_RDI 0x20 |
#define IOFFSET_R8 0x28 |
#define IOFFSET_R9 0x30 |
#define IOFFSET_R10 0x38 |
#define IOFFSET_R11 0x40 |
# Mask for interrupts 0 - 31 (bits 0 - 31) where 0 means that int has no error word |
# and 1 means interrupt with error word |
173,7 → 167,7 |
rdmsr |
ret |
# Push all general purpose registers on stack except %rbp, %rsp |
# Push all volatile general purpose registers on stack |
.macro save_all_gpr |
movq %rax, IOFFSET_RAX(%rsp) |
movq %rcx, IOFFSET_RCX(%rsp) |
184,14 → 178,6 |
movq %r9, IOFFSET_R9(%rsp) |
movq %r10, IOFFSET_R10(%rsp) |
movq %r11, IOFFSET_R11(%rsp) |
#ifdef CONFIG_DEBUG_ALLREGS |
movq %rbx, IOFFSET_RBX(%rsp) |
movq %rbp, IOFFSET_RBP(%rsp) |
movq %r12, IOFFSET_R12(%rsp) |
movq %r13, IOFFSET_R13(%rsp) |
movq %r14, IOFFSET_R14(%rsp) |
movq %r15, IOFFSET_R15(%rsp) |
#endif |
.endm |
.macro restore_all_gpr |
204,21 → 190,9 |
movq IOFFSET_R9(%rsp), %r9 |
movq IOFFSET_R10(%rsp), %r10 |
movq IOFFSET_R11(%rsp), %r11 |
#ifdef CONFIG_DEBUG_ALLREGS |
movq IOFFSET_RBX(%rsp), %rbx |
movq IOFFSET_RBP(%rsp), %rbp |
movq IOFFSET_R12(%rsp), %r12 |
movq IOFFSET_R13(%rsp), %r13 |
movq IOFFSET_R14(%rsp), %r14 |
movq IOFFSET_R15(%rsp), %r15 |
#endif |
.endm |
#ifdef CONFIG_DEBUG_ALLREGS |
# define INTERRUPT_ALIGN 256 |
#else |
# define INTERRUPT_ALIGN 128 |
#endif |
#define INTERRUPT_ALIGN 128 |
## Declare interrupt handlers |
# |
//branches/tracing/kernel/arch/amd64/src/boot/vesa_ret.inc |
---|
0,0 → 1,19 |
.code32 |
vesa_init_protected: |
movw $gdtselector(KDATA_DES), %cx |
movw %cx, %es |
movw %cx, %ds # kernel data + stack |
movw %cx, %ss |
# |
# Simics seems to remove hidden part of GS on entering user mode |
# when _visible_ part of GS does not point to user-mode segment. |
# |
movw $gdtselector(UDATA_DES), %cx |
movw %cx, %fs |
movw %cx, %gs |
movl $START_STACK, %esp # initialize stack pointer |
jmpl $gdtselector(KTEXT32_DES), $vesa_meeting_point |
//branches/tracing/kernel/arch/amd64/src/boot/boot.S |
---|
1,4 → 1,4 |
# |
# Copyright (c) 2005 Ondrej Palkovsky |
# Copyright (c) 2006 Martin Decky |
# Copyright (c) 2008 Jakub Jermar |
37,7 → 37,7 |
#include <arch/cpuid.h> |
#define START_STACK (BOOT_OFFSET - BOOT_STACK_SIZE) |
.section K_TEXT_START, "ax" |
.code32 |
46,7 → 46,7 |
multiboot_header: |
.long MULTIBOOT_HEADER_MAGIC |
.long MULTIBOOT_HEADER_FLAGS |
.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) # checksum |
.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) # checksum |
.long multiboot_header |
.long unmapped_ktext_start |
.long 0 |
55,15 → 55,19 |
multiboot_image_start: |
cld |
movl $START_STACK, %esp # initialize stack pointer |
lgdtl bootstrap_gdtr # initialize Global Descriptor Table register |
movl $START_STACK, %esp # initialize stack pointer |
lgdtl bootstrap_gdtr # initialize Global Descriptor Table register |
movw $gdtselector(KDATA_DES), %cx |
movw %cx, %es |
movw %cx, %ds # kernel data + stack |
movw %cx, %ds # kernel data + stack |
movw %cx, %ss |
# |
# Simics seems to remove hidden part of GS on entering user mode |
# when _visible_ part of GS does not point to user-mode segment |
# when _visible_ part of GS does not point to user-mode segment. |
# |
movw $gdtselector(UDATA_DES), %cx |
movw %cx, %fs |
movw %cx, %gs |
71,17 → 75,19 |
jmpl $gdtselector(KTEXT32_DES), $multiboot_meeting_point |
multiboot_meeting_point: |
movl %eax, grub_eax # save parameters from GRUB |
movl %eax, grub_eax # save parameters from GRUB |
movl %ebx, grub_ebx |
# |
# Protected 32-bit. We want to reuse the code-seg descriptor, |
# the Default operand size must not be 1 when entering long mode |
# the Default operand size must not be 1 when entering long mode. |
# |
movl $(INTEL_CPUID_EXTENDED), %eax |
cpuid |
cmp $(INTEL_CPUID_EXTENDED), %eax |
movl $(INTEL_CPUID_EXTENDED), %eax |
cpuid |
cmp $(INTEL_CPUID_EXTENDED), %eax |
ja extended_cpuid_supported |
movl $extended_cpuid_msg, %esi |
jmp error_halt |
90,11 → 96,11 |
movl $(AMD_CPUID_EXTENDED), %eax |
cpuid |
bt $(AMD_EXT_LONG_MODE), %edx |
jc long_mode_supported |
jc long_mode_supported |
movl $long_mode_msg, %esi |
jmp error_halt |
long_mode_supported: |
bt $(AMD_EXT_NOEXECUTE), %edx |
108,7 → 114,7 |
movl $(INTEL_CPUID_STANDARD), %eax |
cpuid |
bt $(INTEL_FXSAVE), %edx |
jc fx_supported |
jc fx_supported |
movl $fx_msg, %esi |
jmp error_halt |
116,59 → 122,43 |
fx_supported: |
bt $(INTEL_SSE2), %edx |
jc sse2_supported |
jc sse2_supported |
movl $sse2_msg, %esi |
jmp error_halt |
sse2_supported: |
#ifdef CONFIG_FB |
mov $vesa_init, %esi |
mov $VESA_INIT_SEGMENT << 4, %edi |
mov $e_vesa_init - vesa_init, %ecx |
rep movsb |
mov $VESA_INIT_SEGMENT << 4, %edi |
jmpl *%edi |
vesa_meeting_point: |
mov %esi, KA2PA(vesa_ph_addr) |
mov %di, KA2PA(vesa_height) |
shr $16, %edi |
mov %di, KA2PA(vesa_width) |
mov %bx, KA2PA(vesa_scanline) |
shr $16, %ebx |
mov %bx, KA2PA(vesa_bpp) |
#endif |
#include "vesa_prot.inc" |
# |
# Enable 64-bit page translation entries - CR4.PAE = 1. |
# Paging is not enabled until after long mode is enabled |
# Paging is not enabled until after long mode is enabled. |
# |
movl %cr4, %eax |
btsl $5, %eax |
movl %eax, %cr4 |
# Set up paging tables |
# set up paging tables |
leal ptl_0, %eax |
movl %eax, %cr3 |
# Enable long mode |
# enable long mode |
movl $EFER_MSR_NUM, %ecx # EFER MSR number |
rdmsr # Read EFER |
btsl $AMD_LME_FLAG, %eax # Set LME = 1 |
wrmsr # Write EFER |
movl $EFER_MSR_NUM, %ecx # EFER MSR number |
rdmsr # read EFER |
btsl $AMD_LME_FLAG, %eax # set LME = 1 |
wrmsr # write EFER |
# Enable paging to activate long mode (set CR0.PG = 1) |
# enable paging to activate long mode (set CR0.PG = 1) |
movl %cr0, %eax |
btsl $31, %eax |
movl %eax, %cr0 |
# At this point we are in compatibility mode |
# at this point we are in compatibility mode |
jmpl $gdtselector(KTEXT_DES), $start64 |
175,362 → 165,29 |
.code64 |
start64: |
movq $(PA2KA(START_STACK)), %rsp |
movl grub_eax, %eax |
movl grub_ebx, %ebx |
cmpl $MULTIBOOT_LOADER_MAGIC, %eax # compare GRUB signature |
je valid_boot |
xorl %ecx, %ecx # no memory size or map available |
movl %ecx, e820counter |
jmp invalid_boot |
valid_boot: |
movl (%ebx), %eax # ebx = physical address of struct multiboot_info |
bt $3, %eax # mbi->flags[3] (mods_count, mods_addr valid) |
jc mods_valid |
xorq %rcx, %rcx |
movq %rcx, init |
jmp mods_end |
mods_valid: |
xorq %rcx, %rcx |
movl 20(%ebx), %ecx # mbi->mods_count |
movq %rcx, init |
cmpl $0, %ecx |
je mods_end |
movl 24(%ebx), %esi # mbi->mods_addr |
movq $init, %rdi |
mods_loop: |
xorq %rdx, %rdx |
movl 0(%esi), %edx # mods->mod_start |
movq $0xffff800000000000, %r10 |
addq %r10, %rdx |
movq %rdx, 8(%rdi) |
xorq %rdx, %rdx |
movl 4(%esi), %edx |
subl 0(%esi), %edx # mods->mod_end - mods->mod_start |
movq %rdx, 16(%rdi) |
addl $16, %esi |
addq $16, %rdi |
loop mods_loop |
mods_end: |
bt $6, %eax # mbi->flags[6] (mmap_length, mmap_addr valid) |
jc mmap_valid |
xorl %edx, %edx |
jmp mmap_invalid |
mmap_valid: |
movl 44(%ebx), %ecx # mbi->mmap_length |
movl 48(%ebx), %esi # mbi->mmap_addr |
movq $e820table, %rdi |
xorl %edx, %edx |
mmap_loop: |
cmpl $0, %ecx |
jle mmap_end |
movl 4(%esi), %eax # mmap->base_addr_low |
movl %eax, (%rdi) |
movl 8(%esi), %eax # mmap->base_addr_high |
movl %eax, 4(%rdi) |
movl 12(%esi), %eax # mmap->length_low |
movl %eax, 8(%rdi) |
movl 16(%esi), %eax # mmap->length_high |
movl %eax, 12(%rdi) |
movl 20(%esi), %eax # mmap->type |
movl %eax, 16(%rdi) |
movl (%esi), %eax # mmap->size |
addl $0x4, %eax |
addl %eax, %esi |
subl %eax, %ecx |
addq $MEMMAP_E820_RECORD_SIZE, %rdi |
incl %edx |
jmp mmap_loop |
mmap_end: |
mmap_invalid: |
movl %edx, e820counter |
invalid_boot: |
# call arch_pre_main(grub_eax, grub_ebx) |
xorq %rdi, %rdi |
movl grub_eax, %edi |
xorq %rsi, %rsi |
movl grub_ebx, %esi |
call arch_pre_main |
#ifdef CONFIG_SMP |
call main_bsp |
# copy AP bootstrap routines below 1 MB |
# not reached |
movq $BOOT_OFFSET, %rsi |
movq $AP_BOOT_OFFSET, %rdi |
movq $_hardcoded_unmapped_size, %rcx |
rep movsb |
#endif |
call main_bsp # never returns |
cli |
hlt |
hlt0: |
hlt |
jmp hlt0 |
#ifdef CONFIG_FB |
.code32 |
vesa_init: |
jmp $gdtselector(VESA_INIT_DES), $vesa_init_real - vesa_init |
.code16 |
vesa_init_real: |
mov %cr0, %eax |
and $~1, %eax |
mov %eax, %cr0 |
jmp $VESA_INIT_SEGMENT, $vesa_init_real2 - vesa_init |
vesa_init_real2: |
mov $VESA_INIT_SEGMENT, %bx |
mov %bx, %es |
mov %bx, %fs |
mov %bx, %gs |
mov %bx, %ds |
mov %bx, %ss |
movl $0x0000fffc, %esp |
movl $0x0000fffc, %ebp |
#define VESA_INFO_SIZE 1024 |
#define VESA_MODE_ATTRIBUTES_OFFSET 0 |
#define VESA_MODE_LIST_PTR_OFFSET 14 |
#define VESA_MODE_SCANLINE_OFFSET 16 |
#define VESA_MODE_WIDTH_OFFSET 18 |
#define VESA_MODE_HEIGHT_OFFSET 20 |
#define VESA_MODE_BPP_OFFSET 25 |
#define VESA_MODE_PHADDR_OFFSET 40 |
#define VESA_END_OF_MODES 0xffff |
#define VESA_OK 0x4f |
#define VESA_GET_INFO 0x4f00 |
#define VESA_GET_MODE_INFO 0x4f01 |
#define VESA_SET_MODE 0x4f02 |
#define VESA_SET_PALETTE 0x4f09 |
#define CONFIG_VESA_BPP_a 255 |
#if CONFIG_VESA_BPP == 24 |
#define CONFIG_VESA_BPP_VARIANT 32 |
#endif |
mov $VESA_GET_INFO, %ax |
mov $e_vesa_init - vesa_init, %di |
push %di |
int $0x10 |
pop %di |
cmp $VESA_OK, %al |
jnz 0f |
mov 2 + VESA_MODE_LIST_PTR_OFFSET(%di), %si |
mov %si, %gs |
mov VESA_MODE_LIST_PTR_OFFSET(%di), %si |
add $VESA_INFO_SIZE, %di |
1:# Try next mode |
mov %gs:(%si), %cx |
cmp $VESA_END_OF_MODES, %cx |
jz 0f |
inc %si |
inc %si |
push %cx |
push %di |
push %si |
mov $VESA_GET_MODE_INFO, %ax |
int $0x10 |
pop %si |
pop %di |
pop %cx |
cmp $VESA_OK, %al |
jnz 0f |
mov $CONFIG_VESA_WIDTH, %ax |
cmp VESA_MODE_WIDTH_OFFSET(%di), %ax |
jnz 1b |
mov $CONFIG_VESA_HEIGHT, %ax |
cmp VESA_MODE_HEIGHT_OFFSET(%di), %ax |
jnz 1b |
mov $CONFIG_VESA_BPP, %al |
cmp VESA_MODE_BPP_OFFSET(%di), %al |
#ifdef CONFIG_VESA_BPP_VARIANT |
jz 2f |
mov $CONFIG_VESA_BPP_VARIANT, %al |
cmp VESA_MODE_BPP_OFFSET(%di), %al |
#endif |
jnz 1b |
2: |
mov %cx, %bx |
or $0xc000, %bx |
push %di |
mov $VESA_SET_MODE, %ax |
int $0x10 |
pop %di |
cmp $VESA_OK, %al |
jnz 0f |
#if CONFIG_VESA_BPP == 8 |
# Set 3:2:3 VGA palette |
mov VESA_MODE_ATTRIBUTES_OFFSET(%di), %ax |
push %di |
mov $vga323 - vesa_init, %di |
mov $0x100, %ecx |
bt $5, %ax # Test if VGA compatible registers are present |
jnc vga_compat |
# Try VESA routine to set palette |
mov $VESA_SET_PALETTE, %ax |
xor %bl, %bl |
xor %dx, %dx |
int $0x10 |
jmp vga_not_compat |
vga_compat: |
# Try VGA registers to set palette |
movw $0x3c6, %dx # Set palette mask |
movb $0xff, %al |
outb %al, %dx |
movw $0x3c8, %dx # First index to set |
xor %al, %al |
outb %al, %dx |
movw $0x3c9, %dx # Data port |
vga_loop: |
movb %es:2(%di), %al |
outb %al, %dx |
movb %es:1(%di), %al |
outb %al, %dx |
movb %es:(%di), %al |
outb %al, %dx |
addw $4, %di |
loop vga_loop |
vga_not_compat: |
pop %di |
#endif |
mov VESA_MODE_PHADDR_OFFSET(%di), %esi |
mov VESA_MODE_WIDTH_OFFSET(%di), %ax |
shl $16, %eax |
mov VESA_MODE_HEIGHT_OFFSET(%di), %ax |
mov VESA_MODE_BPP_OFFSET(%di), %bl |
xor %bh, %bh |
shl $16, %ebx |
mov VESA_MODE_SCANLINE_OFFSET(%di), %bx |
mov %eax, %edi |
8: |
mov %cr0, %eax |
or $1, %eax |
mov %eax, %cr0 |
jmp 9f |
9: |
ljmpl $gdtselector(KTEXT32_DES), $(vesa_init_protect - vesa_init + VESA_INIT_SEGMENT << 4) |
0:# No prefered mode found |
mov $0x111, %cx |
push %di |
push %cx |
mov $VESA_GET_MODE_INFO, %ax |
int $0x10 |
pop %cx |
pop %di |
cmp $VESA_OK, %al |
jnz 1f |
jz 2b # Force relative jump |
1: |
mov $0x0003, %ax |
int $0x10 |
mov $0xffffffff, %edi # EGA text mode used, because of problems with VESA |
xor %ax, %ax |
jz 8b # Force relative jump |
vga323: |
#include "vga323.pal" |
.code32 |
vesa_init_protect: |
movw $gdtselector(KDATA_DES), %cx |
movw %cx, %es |
movw %cx, %ds # kernel data + stack |
movw %cx, %ss |
# Simics seems to remove hidden part of GS on entering user mode |
# when _visible_ part of GS does not point to user-mode segment |
movw $gdtselector(UDATA_DES), %cx |
movw %cx, %fs |
movw %cx, %gs |
movl $START_STACK, %esp # initialize stack pointer |
jmpl $gdtselector(KTEXT32_DES), $vesa_meeting_point |
.align 4 |
e_vesa_init: |
#endif |
# Print string from %esi to EGA display (in red) and halt |
error_halt: |
movl $0xb8000, %edi # base of EGA text mode memory |
movl $0xb8000, %edi # base of EGA text mode memory |
xorl %eax, %eax |
movw $0x3d4, %dx # read bits 8 - 15 of the cursor address |
movw $0x3d4, %dx # read bits 8 - 15 of the cursor address |
movb $0xe, %al |
outb %al, %dx |
538,7 → 195,7 |
inb %dx, %al |
shl $8, %ax |
movw $0x3d4, %dx # read bits 0 - 7 of the cursor address |
movw $0x3d4, %dx # read bits 0 - 7 of the cursor address |
movb $0xf, %al |
outb %al, %dx |
547,7 → 204,9 |
cmp $1920, %ax |
jbe cursor_ok |
movw $1920, %ax # sanity check for the cursor on the last line |
movw $1920, %ax # sanity check for the cursor on the last line |
cursor_ok: |
movw %ax, %bx |
554,7 → 213,7 |
shl $1, %eax |
addl %eax, %edi |
movw $0x0c00, %ax # black background, light red foreground |
movw $0x0c00, %ax # black background, light red foreground |
ploop: |
lodsb |
561,11 → 220,11 |
cmp $0, %al |
je ploop_end |
stosw |
inc %bx |
inc %bx |
jmp ploop |
ploop_end: |
movw $0x3d4, %dx # write bits 8 - 15 of the cursor address |
movw $0x3d4, %dx # write bits 8 - 15 of the cursor address |
movb $0xe, %al |
outb %al, %dx |
573,7 → 232,7 |
movb %bh, %al |
outb %al, %dx |
movw $0x3d4, %dx # write bits 0 - 7 of the cursor address |
movw $0x3d4, %dx # write bits 0 - 7 of the cursor address |
movb $0xf, %al |
outb %al, %dx |
580,17 → 239,20 |
movw $0x3d5, %dx |
movb %bl, %al |
outb %al, %dx |
cli |
hlt |
hlt1: |
hlt |
jmp hlt1 |
#include "vesa_real.inc" |
.section K_INI_PTLS, "aw", @progbits |
# |
# Macro for generating initial page table contents. |
# @param cnt Number of entries to generat. Must be multiple of 8. |
# @param g Number of GB that will be added to the mapping. |
# @param cnt Number of entries to generat. Must be multiple of 8. |
# @param g Number of GB that will be added to the mapping. |
# |
.macro ptl2gen cnt g |
.if \cnt |
642,7 → 304,7 |
# Mapping of [0; 1G) at -2G |
.quad ptl_2_0g + (PTL_WRITABLE | PTL_PRESENT) |
.fill 1, 8, 0 |
.align 4096 |
.global ptl_0 |
ptl_0: |
//branches/tracing/kernel/arch/amd64/src/boot/vesa_real.inc |
---|
0,0 → 1,0 |
link ../../../ia32/src/boot/vesa_real.inc |
//branches/tracing/kernel/arch/amd64/src/boot/vesa_prot.inc |
---|
0,0 → 1,0 |
link ../../../ia32/src/boot/vesa_prot.inc |
//branches/tracing/kernel/arch/amd64/src/boot/memmap.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup amd64mm |
/** @addtogroup amd64mm |
* @{ |
*/ |
/** @file |
//branches/tracing/kernel/arch/amd64/src/proc/scheduler.c |
---|
39,7 → 39,6 |
#include <arch.h> |
#include <arch/context.h> /* SP_DELTA */ |
#include <arch/asm.h> |
#include <arch/debugger.h> |
#include <print.h> |
#include <arch/pm.h> |
#include <arch/ddi/ddi.h> |
68,13 → 67,6 |
/* TLS support - set FS to thread local storage */ |
write_msr(AMD_MSR_FS, THREAD->arch.tls); |
#ifdef CONFIG_DEBUG_AS_WATCHPOINT |
/* Set watchpoint on AS to ensure that nobody sets it to zero */ |
if (CPU->id < BKPOINTS_MAX) |
breakpoint_add(&((the_t *) THREAD->kstack)->as, |
BKPOINT_WRITE | BKPOINT_CHECK_ZERO, CPU->id); |
#endif |
} |
void after_thread_ran_arch(void) |
//branches/tracing/kernel/arch/amd64/src/debugger.c |
---|
35,7 → 35,6 |
#include <arch/debugger.h> |
#include <console/kconsole.h> |
#include <console/cmd.h> |
#include <symtab.h> |
#include <print.h> |
#include <panic.h> |
#include <interrupt.h> |
44,6 → 43,7 |
#include <debug.h> |
#include <func.h> |
#include <smp/ipi.h> |
#include <symtab.h> |
typedef struct { |
uintptr_t address; /**< Breakpoint address */ |
54,6 → 54,8 |
static bpinfo_t breakpoints[BKPOINTS_MAX]; |
SPINLOCK_INITIALIZE(bkpoint_lock); |
#ifdef CONFIG_KCONSOLE |
static int cmd_print_breakpoints(cmd_arg_t *argv); |
static cmd_info_t bkpts_info = { |
.name = "bkpts", |
62,8 → 64,6 |
.argc = 0, |
}; |
#ifndef CONFIG_DEBUG_AS_WATCHPOINT |
static int cmd_del_breakpoint(cmd_arg_t *argv); |
static cmd_arg_t del_argv = { |
.type = ARG_TYPE_INT |
99,44 → 99,8 |
.argv = &addw_argv |
}; |
#endif |
#endif /* CONFIG_KCONSOLE */ |
/** Print table of active breakpoints */ |
int cmd_print_breakpoints(cmd_arg_t *argv __attribute__((unused))) |
{ |
unsigned int i; |
char *symbol; |
#ifdef __32_BITS__ |
printf("# Count Address In symbol\n"); |
printf("-- ----- ---------- ---------\n"); |
#endif |
#ifdef __64_BITS__ |
printf("# Count Address In symbol\n"); |
printf("-- ----- ------------------ ---------\n"); |
#endif |
for (i = 0; i < BKPOINTS_MAX; i++) |
if (breakpoints[i].address) { |
symbol = get_symtab_entry(breakpoints[i].address); |
#ifdef __32_BITS__ |
printf("%-2u %-5d %#10zx %s\n", i, |
breakpoints[i].counter, breakpoints[i].address, |
symbol); |
#endif |
#ifdef __64_BITS__ |
printf("%-2u %-5d %#18zx %s\n", i, |
breakpoints[i].counter, breakpoints[i].address, |
symbol); |
#endif |
} |
return 1; |
} |
/* Setup DR register according to table */ |
static void setup_dr(int curidx) |
{ |
237,16 → 201,16 |
/* Send IPI */ |
#ifdef CONFIG_SMP |
// ipi_broadcast(VECTOR_DEBUG_IPI); |
// ipi_broadcast(VECTOR_DEBUG_IPI); |
#endif |
return curidx; |
} |
#ifdef amd64 |
# define getip(x) ((x)->rip) |
#ifdef __64_BITS__ |
#define getip(x) ((x)->rip) |
#else |
# define getip(x) ((x)->eip) |
#define getip(x) ((x)->eip) |
#endif |
static void handle_exception(int slot, istate_t *istate) |
265,12 → 229,15 |
*((unative_t *) breakpoints[slot].address)); |
} |
} |
printf("Reached breakpoint %d:%lx(%s)\n", slot, getip(istate), |
get_symtab_entry(getip(istate))); |
printf("***Type 'exit' to exit kconsole.\n"); |
atomic_set(&haltstate,1); |
kconsole((void *) "debug"); |
atomic_set(&haltstate,0); |
printf("Reached breakpoint %d:%lx (%s)\n", slot, getip(istate), |
symtab_fmt_name_lookup(getip(istate))); |
#ifdef CONFIG_KCONSOLE |
atomic_set(&haltstate, 1); |
kconsole("debug", "Debug console ready.\n", false); |
atomic_set(&haltstate, 0); |
#endif |
} |
void breakpoint_del(int slot) |
299,42 → 266,8 |
#endif |
} |
#ifndef CONFIG_DEBUG_AS_WATCHPOINT |
/** Remove breakpoint from table */ |
int cmd_del_breakpoint(cmd_arg_t *argv) |
{ |
unative_t bpno = argv->intval; |
if (bpno > BKPOINTS_MAX) { |
printf("Invalid breakpoint number.\n"); |
return 0; |
} |
breakpoint_del(argv->intval); |
return 1; |
} |
/** Add new breakpoint to table */ |
static int cmd_add_breakpoint(cmd_arg_t *argv) |
{ |
int flags; |
int id; |
if (argv == &add_argv) { |
flags = BKPOINT_INSTR; |
} else { /* addwatchp */ |
flags = BKPOINT_WRITE; |
} |
printf("Adding breakpoint on address: %p\n", argv->intval); |
id = breakpoint_add((void *)argv->intval, flags, -1); |
if (id < 0) |
printf("Add breakpoint failed.\n"); |
else |
printf("Added breakpoint %d.\n", id); |
return 1; |
} |
#endif |
static void debug_exception(int n __attribute__((unused)), istate_t *istate) |
{ |
unative_t dr6; |
356,7 → 289,7 |
#endif |
/* Set RF to restart the instruction */ |
#ifdef amd64 |
#ifdef __64_BITS__ |
istate->rflags |= RFLAGS_RF; |
#else |
istate->eflags |= EFLAGS_RF; |
393,24 → 326,24 |
for (i = 0; i < BKPOINTS_MAX; i++) |
breakpoints[i].address = NULL; |
#ifdef CONFIG_KCONSOLE |
cmd_initialize(&bkpts_info); |
if (!cmd_register(&bkpts_info)) |
panic("could not register command %s\n", bkpts_info.name); |
printf("Cannot register command %s\n", bkpts_info.name); |
#ifndef CONFIG_DEBUG_AS_WATCHPOINT |
cmd_initialize(&delbkpt_info); |
if (!cmd_register(&delbkpt_info)) |
panic("could not register command %s\n", delbkpt_info.name); |
printf("Cannot register command %s\n", delbkpt_info.name); |
cmd_initialize(&addbkpt_info); |
if (!cmd_register(&addbkpt_info)) |
panic("could not register command %s\n", addbkpt_info.name); |
printf("Cannot register command %s\n", addbkpt_info.name); |
cmd_initialize(&addwatchp_info); |
if (!cmd_register(&addwatchp_info)) |
panic("could not register command %s\n", addwatchp_info.name); |
#endif |
printf("Cannot register command %s\n", addwatchp_info.name); |
#endif /* CONFIG_KCONSOLE */ |
exc_register(VECTOR_DEBUG, "debugger", debug_exception); |
#ifdef CONFIG_SMP |
418,5 → 351,77 |
#endif |
} |
#ifdef CONFIG_KCONSOLE |
/** Print table of active breakpoints */ |
int cmd_print_breakpoints(cmd_arg_t *argv __attribute__((unused))) |
{ |
unsigned int i; |
char *symbol; |
#ifdef __32_BITS__ |
printf("# Count Address In symbol\n"); |
printf("-- ----- ---------- ---------\n"); |
#endif |
#ifdef __64_BITS__ |
printf("# Count Address In symbol\n"); |
printf("-- ----- ------------------ ---------\n"); |
#endif |
for (i = 0; i < BKPOINTS_MAX; i++) |
if (breakpoints[i].address) { |
symbol = symtab_fmt_name_lookup( |
breakpoints[i].address); |
#ifdef __32_BITS__ |
printf("%-2u %-5d %#10zx %s\n", i, |
breakpoints[i].counter, breakpoints[i].address, |
symbol); |
#endif |
#ifdef __64_BITS__ |
printf("%-2u %-5d %#18zx %s\n", i, |
breakpoints[i].counter, breakpoints[i].address, |
symbol); |
#endif |
} |
return 1; |
} |
/** Remove breakpoint from table */ |
int cmd_del_breakpoint(cmd_arg_t *argv) |
{ |
unative_t bpno = argv->intval; |
if (bpno > BKPOINTS_MAX) { |
printf("Invalid breakpoint number.\n"); |
return 0; |
} |
breakpoint_del(argv->intval); |
return 1; |
} |
/** Add new breakpoint to table */ |
static int cmd_add_breakpoint(cmd_arg_t *argv) |
{ |
int flags; |
int id; |
if (argv == &add_argv) { |
flags = BKPOINT_INSTR; |
} else { /* addwatchp */ |
flags = BKPOINT_WRITE; |
} |
printf("Adding breakpoint on address: %p\n", argv->intval); |
id = breakpoint_add((void *)argv->intval, flags, -1); |
if (id < 0) |
printf("Add breakpoint failed.\n"); |
else |
printf("Added breakpoint %d.\n", id); |
return 1; |
} |
#endif /* CONFIG_KCONSOLE */ |
/** @} |
*/ |
//branches/tracing/kernel/arch/amd64/src/mm/page.c |
---|
180,7 → 180,7 |
page = read_cr2(); |
if (istate->error_word & PFERR_CODE_RSVD) |
panic("Reserved bit set in page table entry.\n"); |
panic("Reserved bit set in page table entry."); |
if (istate->error_word & PFERR_CODE_RW) |
access = PF_ACCESS_WRITE; |
190,11 → 190,11 |
access = PF_ACCESS_READ; |
if (as_page_fault(page, access, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate, "Page fault: %#x", page); |
fault_if_from_uspace(istate, "Page fault: %#x.", page); |
decode_istate(n, istate); |
printf("Page fault address: %llx\n", page); |
panic("page fault\n"); |
printf("Page fault address: %llx.\n", page); |
panic("Page fault."); |
} |
} |
202,7 → 202,7 |
uintptr_t hw_map(uintptr_t physaddr, size_t size) |
{ |
if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) |
panic("Unable to map physical memory %p (%d bytes)", physaddr, size) |
panic("Unable to map physical memory %p (%d bytes).", physaddr, size) |
uintptr_t virtaddr = PA2KA(last_frame); |
pfn_t i; |
//branches/tracing/kernel/arch/amd64/src/userspace.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup amd64 |
/** @addtogroup amd64 |
* @{ |
*/ |
/** @file |
47,36 → 47,33 |
*/ |
void userspace(uspace_arg_t *kernel_uarg) |
{ |
ipl_t ipl; |
ipl_t ipl = interrupts_disable(); |
ipl = interrupts_disable(); |
/* Clear CF,PF,AF,ZF,SF,DF,OF */ |
/* Clear CF, PF, AF, ZF, SF, DF, OF */ |
ipl &= ~(0xcd4); |
asm volatile ("" |
"pushq %0\n" |
"pushq %1\n" |
"pushq %2\n" |
"pushq %3\n" |
"pushq %4\n" |
"movq %5, %%rax\n" |
/* %rdi is defined to hold pcb_ptr - set it to 0 */ |
"xorq %%rdi, %%rdi\n" |
"iretq\n" |
: : |
"i" (gdtselector(UDATA_DES) | PL_USER), |
"r" (kernel_uarg->uspace_stack+THREAD_STACK_SIZE), |
"r" (ipl), |
"i" (gdtselector(UTEXT_DES) | PL_USER), |
"r" (kernel_uarg->uspace_entry), |
"r" (kernel_uarg->uspace_uarg) |
: "rax" |
); |
asm volatile ( |
"pushq %[udata_des]\n" |
"pushq %[stack_size]\n" |
"pushq %[ipl]\n" |
"pushq %[utext_des]\n" |
"pushq %[entry]\n" |
"movq %[uarg], %%rax\n" |
/* %rdi is defined to hold pcb_ptr - set it to 0 */ |
"xorq %%rdi, %%rdi\n" |
"iretq\n" |
:: [udata_des] "i" (gdtselector(UDATA_DES) | PL_USER), |
[stack_size] "r" (kernel_uarg->uspace_stack + THREAD_STACK_SIZE), |
[ipl] "r" (ipl), |
[utext_des] "i" (gdtselector(UTEXT_DES) | PL_USER), |
[entry] "r" (kernel_uarg->uspace_entry), |
[uarg] "r" (kernel_uarg->uspace_uarg) |
: "rax" |
); |
/* Unreachable */ |
for(;;) |
; |
while (1); |
} |
/** @} |
//branches/tracing/kernel/arch/amd64/src/interrupt.c |
---|
43,7 → 43,6 |
#include <mm/tlb.h> |
#include <mm/as.h> |
#include <arch.h> |
#include <symtab.h> |
#include <arch/asm.h> |
#include <proc/scheduler.h> |
#include <proc/thread.h> |
52,6 → 51,7 |
#include <arch/ddi/ddi.h> |
#include <interrupt.h> |
#include <ddi/irq.h> |
#include <symtab.h> |
/* |
* Interrupt and exception dispatching. |
64,10 → 64,8 |
void decode_istate(int n, istate_t *istate) |
{ |
char *symbol; |
/* uint64_t *x = &istate->stack[0]; */ |
if (!(symbol = get_symtab_entry(istate->rip))) |
symbol = ""; |
symbol = symtab_fmt_name_lookup(istate->rip); |
printf("-----EXCEPTION(%d) OCCURED----- ( %s )\n", n, __func__); |
printf("%%rip: %#llx (%s)\n", istate->rip, symbol); |
80,12 → 78,6 |
istate->rdi, istate->r8); |
printf("%%r9=%#llx, %%r10=%#llx, %%r11=%#llx\n", istate->r9, |
istate->r10, istate->r11); |
#ifdef CONFIG_DEBUG_ALLREGS |
printf("%%r12=%#llx, %%r13=%#llx, %%r14=%#llx\n", istate->r12, |
istate->r13, istate->r14); |
printf("%%r15=%#llx, %%rbx=%#llx, %%rbp=%#llx\n", istate->r15, |
istate->rbx, &istate->rbp); |
#endif |
printf("%%rsp=%#llx\n", &istate->stack[0]); |
} |
94,15 → 86,15 |
if (eoi_function) |
eoi_function(); |
else |
panic("no eoi_function\n"); |
panic("No eoi_function."); |
} |
static void null_interrupt(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "unserviced interrupt: %d", n); |
fault_if_from_uspace(istate, "Unserviced interrupt: %d.", n); |
decode_istate(n, istate); |
panic("unserviced interrupt\n"); |
panic("Unserviced interrupt."); |
} |
/** General Protection Fault. */ |
126,35 → 118,37 |
io_perm_bitmap_install(); |
return; |
} |
fault_if_from_uspace(istate, "general protection fault"); |
fault_if_from_uspace(istate, "General protection fault."); |
} |
decode_istate(n, istate); |
panic("general protection fault\n"); |
panic("General protection fault."); |
} |
static void ss_fault(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "stack fault"); |
fault_if_from_uspace(istate, "Stack fault."); |
decode_istate(n, istate); |
panic("stack fault\n"); |
panic("Stack fault."); |
} |
static void nm_fault(int n, istate_t *istate) |
{ |
#ifdef CONFIG_FPU_LAZY |
#ifdef CONFIG_FPU_LAZY |
scheduler_fpu_lazy_request(); |
#else |
fault_if_from_uspace(istate, "fpu fault"); |
panic("fpu fault"); |
fault_if_from_uspace(istate, "FPU fault."); |
panic("FPU fault."); |
#endif |
} |
#ifdef CONFIG_SMP |
static void tlb_shootdown_ipi(int n, istate_t *istate) |
{ |
trap_virtual_eoi(); |
tlb_shootdown_ipi_recv(); |
} |
#endif |
/** Handler of IRQ exceptions */ |
static void irq_interrupt(int n, istate_t *istate) |
177,7 → 171,7 |
trap_virtual_eoi(); |
ack = true; |
} |
irq->handler(irq, irq->arg); |
irq->handler(irq); |
spinlock_unlock(&irq->lock); |
} else { |
/* |
221,7 → 215,7 |
if (enable_irqs_function) |
enable_irqs_function(irqmask); |
else |
panic("no enable_irqs_function\n"); |
panic("No enable_irqs_function."); |
} |
void trap_virtual_disable_irqs(uint16_t irqmask) |
229,7 → 223,7 |
if (disable_irqs_function) |
disable_irqs_function(irqmask); |
else |
panic("no disable_irqs_function\n"); |
panic("No disable_irqs_function."); |
} |
/** @} |
//branches/tracing/kernel/arch/mips32/_link.ld.in |
---|
1,15 → 1,17 |
/* |
* MIPS32 linker script |
* |
* MIPS32 linker script |
* |
* kernel text |
* kernel data |
* |
* |
*/ |
#undef mips |
#define mips mips |
#define KERNEL_LOAD_ADDRESS 0x80100000 |
OUTPUT_ARCH(mips) |
ENTRY(kernel_image_start) |
SECTIONS { |
21,9 → 23,9 |
} |
.data : { |
kdata_start = .; |
*(.data); /* initialized data */ |
*(.data); /* initialized data */ |
hardcoded_ktext_size = .; |
LONG(ktext_end - ktext_start); |
LONG(ktext_end - ktext_start); |
hardcoded_kdata_size = .; |
LONG(kdata_end - kdata_start); |
hardcoded_load_address = .; |
33,21 → 35,21 |
*(.reginfo); |
*(.sbss); |
*(.scommon); |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
symbol_table = .; |
*(symtab.*); |
*(symtab.*); |
} |
_gp = . + 0x8000; |
.lit8 : { *(.lit8) } |
.lit4 : { *(.lit4) } |
kdata_end = .; |
/DISCARD/ : { |
*(.mdebug*); |
*(.pdr); |
*(.comment); |
*(.note); |
*(.mdebug*); |
*(.pdr); |
*(.comment); |
*(.note); |
} |
} |
//branches/tracing/kernel/arch/mips32/include/console.h |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/include/boot.h |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/include/asm/boot.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32 |
/** @addtogroup mips32 |
* @{ |
*/ |
/** @file |
//branches/tracing/kernel/arch/mips32/include/context_offset.h |
---|
76,26 → 76,17 |
#define EOFFSET_T5 0x30 |
#define EOFFSET_T6 0x34 |
#define EOFFSET_T7 0x38 |
#define EOFFSET_S0 0x3c |
#define EOFFSET_S1 0x40 |
#define EOFFSET_S2 0x44 |
#define EOFFSET_S3 0x48 |
#define EOFFSET_S4 0x4c |
#define EOFFSET_S5 0x50 |
#define EOFFSET_S6 0x54 |
#define EOFFSET_S7 0x58 |
#define EOFFSET_T8 0x5c |
#define EOFFSET_T9 0x60 |
#define EOFFSET_GP 0x64 |
#define EOFFSET_SP 0x68 |
#define EOFFSET_S8 0x6c |
#define EOFFSET_RA 0x70 |
#define EOFFSET_LO 0x74 |
#define EOFFSET_HI 0x78 |
#define EOFFSET_STATUS 0x7c |
#define EOFFSET_EPC 0x80 |
#define EOFFSET_K1 0x84 |
#define REGISTER_SPACE 136 |
#define EOFFSET_T8 0x3c |
#define EOFFSET_T9 0x40 |
#define EOFFSET_GP 0x44 |
#define EOFFSET_SP 0x48 |
#define EOFFSET_RA 0x4c |
#define EOFFSET_LO 0x50 |
#define EOFFSET_HI 0x54 |
#define EOFFSET_STATUS 0x58 |
#define EOFFSET_EPC 0x5c |
#define EOFFSET_K1 0x60 |
#define REGISTER_SPACE 100 |
#ifdef __ASM__ |
114,10 → 105,10 |
sw $s8,OFFSET_S8(\ctx) |
sw $gp,OFFSET_GP(\ctx) |
#ifndef KERNEL |
#ifndef KERNEL |
sw $k1,OFFSET_TLS(\ctx) |
# ifdef CONFIG_MIPS_FPU |
#ifdef CONFIG_FPU |
mfc1 $t0,$20 |
sw $t0, OFFSET_F20(\ctx) |
150,7 → 141,7 |
mfc1 $t0,$30 |
sw $t0, OFFSET_F30(\ctx) |
# endif /* CONFIG_MIPS_FPU */ |
#endif /* CONFIG_FPU */ |
#endif /* KERNEL */ |
sw $ra,OFFSET_PC(\ctx) |
172,7 → 163,7 |
#ifndef KERNEL |
lw $k1,OFFSET_TLS(\ctx) |
# ifdef CONFIG_MIPS_FPU |
#ifdef CONFIG_FPU |
lw $t0, OFFSET_F20(\ctx) |
mtc1 $t0,$20 |
205,9 → 196,9 |
lw $t0, OFFSET_F30(\ctx) |
mtc1 $t0,$30 |
# endif /* CONFIG_MIPS_FPU */ |
#endif /* CONFIG_FPU */ |
#endif /* KERNEL */ |
lw $ra,OFFSET_PC(\ctx) |
lw $sp,OFFSET_SP(\ctx) |
.endm |
//branches/tracing/kernel/arch/mips32/include/interrupt.h |
---|
38,9 → 38,11 |
#include <typedefs.h> |
#include <arch/exception.h> |
#define IVT_ITEMS 32 |
#define IVT_FIRST 0 |
#define IVT_ITEMS 32 |
#define IVT_FIRST 0 |
#define VECTOR_TLB_SHOOTDOWN_IPI EXC_Int |
extern function virtual_timer_fnc; |
extern uint32_t count_hi; |
//branches/tracing/kernel/arch/mips32/include/exception.h |
---|
73,19 → 73,10 |
uint32_t t5; |
uint32_t t6; |
uint32_t t7; |
uint32_t s0; |
uint32_t s1; |
uint32_t s2; |
uint32_t s3; |
uint32_t s4; |
uint32_t s5; |
uint32_t s6; |
uint32_t s7; |
uint32_t t8; |
uint32_t t9; |
uint32_t gp; |
uint32_t sp; |
uint32_t s8; |
uint32_t ra; |
uint32_t lo; |
//branches/tracing/kernel/arch/mips32/include/types.h |
---|
57,6 → 57,9 |
typedef uint32_t unative_t; |
typedef int32_t native_t; |
typedef struct { |
} fncptr_t; |
#define PRIp "x" /**< Format for uintptr_t. */ |
#define PRIs "u" /**< Format for size_t. */ |
#define PRIc "u" /**< Format for count_t. */ |
//branches/tracing/kernel/arch/mips32/include/elf.h |
---|
35,9 → 35,11 |
#ifndef KERN_mips32_ELF_H_ |
#define KERN_mips32_ELF_H_ |
#include <byteorder.h> |
#define ELF_MACHINE EM_MIPS |
#ifdef BIG_ENDIAN |
#ifdef ARCH_IS_BIG_ENDIAN |
# define ELF_DATA_ENCODING ELFDATA2MSB |
#else |
# define ELF_DATA_ENCODING ELFDATA2LSB |
//branches/tracing/kernel/arch/mips32/include/smp/order.h |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/include/smp/dorder.h |
---|
0,0 → 1,34 |
/* |
* Copyright (c) 2007 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef KERN_mips32_DORDER_H_ |
#define KERN_mips32_DORDER_H_ |
extern void ipi_broadcast_arch(int ipi); |
#endif |
//branches/tracing/kernel/arch/mips32/include/atomic.h |
---|
35,14 → 35,14 |
#ifndef KERN_mips32_ATOMIC_H_ |
#define KERN_mips32_ATOMIC_H_ |
#define atomic_inc(x) ((void) atomic_add(x, 1)) |
#define atomic_dec(x) ((void) atomic_add(x, -1)) |
#define atomic_inc(x) ((void) atomic_add(x, 1)) |
#define atomic_dec(x) ((void) atomic_add(x, -1)) |
#define atomic_postinc(x) (atomic_add(x, 1) - 1) |
#define atomic_postdec(x) (atomic_add(x, -1) + 1) |
#define atomic_postinc(x) (atomic_add(x, 1) - 1) |
#define atomic_postdec(x) (atomic_add(x, -1) + 1) |
#define atomic_preinc(x) atomic_add(x, 1) |
#define atomic_predec(x) atomic_add(x, -1) |
#define atomic_preinc(x) atomic_add(x, 1) |
#define atomic_predec(x) atomic_add(x, -1) |
/* Atomic addition of immediate value. |
* |
54,19 → 54,37 |
static inline long atomic_add(atomic_t *val, int i) |
{ |
long tmp, v; |
asm volatile ( |
"1:\n" |
" ll %0, %1\n" |
" addu %0, %0, %3\n" /* same as addi, but never traps on overflow */ |
" move %2, %0\n" |
" addu %0, %0, %3\n" /* same as addi, but never traps on overflow */ |
" move %2, %0\n" |
" sc %0, %1\n" |
" beq %0, %4, 1b\n" /* if the atomic operation failed, try again */ |
" beq %0, %4, 1b\n" /* if the atomic operation failed, try again */ |
" nop\n" |
: "=&r" (tmp), "+m" (val->count), "=&r" (v) |
: "r" (i), "i" (0) |
); |
); |
return v; |
} |
static inline uint32_t test_and_set(atomic_t *val) { |
uint32_t tmp, v; |
asm volatile ( |
"1:\n" |
" ll %2, %1\n" |
" bnez %2, 2f\n" |
" li %0, %3\n" |
" sc %0, %1\n" |
" beqz %0, 1b\n" |
"2:\n" |
: "=&r" (tmp), "+m" (val->count), "=&r" (v) |
: "i" (1) |
); |
return v; |
} |
//branches/tracing/kernel/arch/mips32/include/arch.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32 |
/** @addtogroup mips32 |
* @{ |
*/ |
/** @file |
35,6 → 35,29 |
#ifndef KERN_mips32_ARCH_H_ |
#define KERN_mips32_ARCH_H_ |
#define TASKMAP_MAX_RECORDS 32 |
#define CPUMAP_MAX_RECORDS 32 |
#define BOOTINFO_TASK_NAME_BUFLEN 32 |
#include <typedefs.h> |
extern count_t cpu_count; |
typedef struct { |
uintptr_t addr; |
uint32_t size; |
char name[BOOTINFO_TASK_NAME_BUFLEN]; |
} utask_t; |
typedef struct { |
uint32_t cpumap; |
uint32_t cnt; |
utask_t tasks[TASKMAP_MAX_RECORDS]; |
} bootinfo_t; |
extern void arch_pre_main(void *entry, bootinfo_t *bootinfo); |
#endif |
/** @} |
//branches/tracing/kernel/arch/mips32/include/asm.h |
---|
36,6 → 36,7 |
#define KERN_mips32_ASM_H_ |
#include <arch/types.h> |
#include <typedefs.h> |
#include <config.h> |
55,7 → 56,11 |
{ |
uintptr_t v; |
asm volatile ("and %0, $29, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1))); |
asm volatile ( |
"and %0, $29, %1\n" |
: "=r" (v) |
: "r" (~(STACK_SIZE-1)) |
); |
return v; |
} |
63,13 → 68,44 |
extern void cpu_halt(void); |
extern void asm_delay_loop(uint32_t t); |
extern void userspace_asm(uintptr_t ustack, uintptr_t uspace_uarg, |
uintptr_t entry); |
uintptr_t entry); |
extern ipl_t interrupts_disable(void); |
extern ipl_t interrupts_enable(void); |
extern void interrupts_restore(ipl_t ipl); |
extern ipl_t interrupts_read(void); |
extern void asm_delay_loop(uint32_t t); |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*port = v; |
} |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*port = v; |
} |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*port = v; |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
return *port; |
} |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
return *port; |
} |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
return *port; |
} |
#endif |
/** @} |
//branches/tracing/kernel/arch/mips32/include/mm/frame.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32mm |
/** @addtogroup mips32mm |
* @{ |
*/ |
/** @file |
35,12 → 35,14 |
#ifndef KERN_mips32_FRAME_H_ |
#define KERN_mips32_FRAME_H_ |
#define FRAME_WIDTH 14 /* 16K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#define FRAME_WIDTH 14 /* 16K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#ifdef KERNEL |
#ifndef __ASM__ |
#include <typedefs.h> |
extern void frame_arch_init(void); |
extern void physmem_print(void); |
//branches/tracing/kernel/arch/mips32/include/mm/asid.h |
---|
37,7 → 37,7 |
#include <arch/types.h> |
#define ASID_MAX_ARCH 255 /* 2^8 - 1 */ |
#define ASID_MAX_ARCH 255 /* 2^8 - 1 */ |
typedef uint8_t asid_t; |
//branches/tracing/kernel/arch/mips32/include/mm/tlb.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32mm |
/** @addtogroup mips32mm |
* @{ |
*/ |
/** @file |
40,42 → 40,38 |
#include <arch/mm/asid.h> |
#include <arch/exception.h> |
#ifdef TLBCNT |
# define TLB_ENTRY_COUNT TLBCNT |
#else |
# define TLB_ENTRY_COUNT 48 |
#endif |
#define TLB_ENTRY_COUNT 48 |
#define TLB_WIRED 1 |
#define TLB_KSTACK_WIRED_INDEX 0 |
#define TLB_WIRED 1 |
#define TLB_KSTACK_WIRED_INDEX 0 |
#define TLB_PAGE_MASK_4K (0x000 << 13) |
#define TLB_PAGE_MASK_16K (0x003 << 13) |
#define TLB_PAGE_MASK_64K (0x00f << 13) |
#define TLB_PAGE_MASK_256K (0x03f << 13) |
#define TLB_PAGE_MASK_1M (0x0ff << 13) |
#define TLB_PAGE_MASK_4M (0x3ff << 13) |
#define TLB_PAGE_MASK_16M (0xfff << 13) |
#define TLB_PAGE_MASK_4K (0x000 << 13) |
#define TLB_PAGE_MASK_16K (0x003 << 13) |
#define TLB_PAGE_MASK_64K (0x00f << 13) |
#define TLB_PAGE_MASK_256K (0x03f << 13) |
#define TLB_PAGE_MASK_1M (0x0ff << 13) |
#define TLB_PAGE_MASK_4M (0x3ff << 13) |
#define TLB_PAGE_MASK_16M (0xfff << 13) |
#define PAGE_UNCACHED 2 |
#define PAGE_CACHEABLE_EXC_WRITE 5 |
#define PAGE_UNCACHED 2 |
#define PAGE_CACHEABLE_EXC_WRITE 5 |
typedef union { |
struct { |
#ifdef BIG_ENDIAN |
unsigned : 2; /* zero */ |
unsigned pfn : 24; /* frame number */ |
unsigned c : 3; /* cache coherency attribute */ |
unsigned d : 1; /* dirty/write-protect bit */ |
unsigned v : 1; /* valid bit */ |
unsigned g : 1; /* global bit */ |
unsigned : 2; /* zero */ |
unsigned pfn : 24; /* frame number */ |
unsigned c : 3; /* cache coherency attribute */ |
unsigned d : 1; /* dirty/write-protect bit */ |
unsigned v : 1; /* valid bit */ |
unsigned g : 1; /* global bit */ |
#else |
unsigned g : 1; /* global bit */ |
unsigned v : 1; /* valid bit */ |
unsigned d : 1; /* dirty/write-protect bit */ |
unsigned c : 3; /* cache coherency attribute */ |
unsigned pfn : 24; /* frame number */ |
unsigned : 2; /* zero */ |
unsigned g : 1; /* global bit */ |
unsigned v : 1; /* valid bit */ |
unsigned d : 1; /* dirty/write-protect bit */ |
unsigned c : 3; /* cache coherency attribute */ |
unsigned pfn : 24; /* frame number */ |
unsigned : 2; /* zero */ |
#endif |
} __attribute__ ((packed)); |
uint32_t value; |
163,7 → 159,7 |
asm volatile ("tlbwr\n\t"); |
} |
#define tlb_invalidate(asid) tlb_invalidate_asid(asid) |
#define tlb_invalidate(asid) tlb_invalidate_asid(asid) |
extern void tlb_invalid(istate_t *istate); |
extern void tlb_refill(istate_t *istate); |
//branches/tracing/kernel/arch/mips32/include/cpu.h |
---|
42,7 → 42,7 |
uint32_t imp_num; |
uint32_t rev_num; |
} cpu_arch_t; |
#endif |
/** @} |
//branches/tracing/kernel/arch/mips32/include/drivers/serial.h |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/include/drivers/msim.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32 |
/** @addtogroup mips32 |
* @{ |
*/ |
/** @file |
36,16 → 36,10 |
#define KERN_mips32_MSIM_H_ |
/** Address of devices. */ |
#define MSIM_VIDEORAM 0x90000000 |
#define MSIM_KBD_ADDRESS 0x90000000 |
#define MSIM_KBD_IRQ 2 |
#define MSIM_VIDEORAM 0x90000000 |
#define MSIM_KBD_ADDRESS 0x90000000 |
#define MSIM_KBD_IRQ 2 |
#include <console/chardev.h> |
void msim_console(devno_t devno); |
void msim_kbd_release(void); |
void msim_kbd_grab(void); |
#endif |
/** @} |
//branches/tracing/kernel/arch/mips32/Makefile.inc |
---|
29,87 → 29,48 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
BFD_ARCH = mips |
BFD = binary |
TARGET = mipsel-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/mipsel |
KERNEL_LOAD_ADDRESS = 0x80100000 |
GCC_CFLAGS += -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3 |
GCC_CFLAGS += -mno-abicalls -G 0 -fno-zero-initialized-in-bss |
DEFS += -D__32_BITS__ |
DEFS += -D__32_BITS__ -DMACHINE=$(MACHINE) -DKERNEL_LOAD_ADDRESS=${KERNEL_LOAD_ADDRESS} |
## Compile with hierarchical page tables support. |
# |
CONFIG_PAGE_PT = y |
DEFS += -DCONFIG_PAGE_PT |
## Compile with support for address space identifiers. |
# |
CONFIG_ASID = y |
CONFIG_ASID_FIFO = y |
## Accepted MACHINEs |
# |
ifeq ($(MACHINE),lgxemul) |
BFD_NAME = elf32-tradlittlemips |
BFD = binary |
GCC_CFLAGS += -DFB_INVERT_ENDIAN -DARCH_HAS_FPU -mips3 |
endif |
ifeq ($(MACHINE),bgxemul) |
BFD_NAME = elf32-bigmips |
BFD = ecoff-bigmips |
TARGET = mips-sgi-irix5 |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips/bin |
GCC_CFLAGS += -EB -DBIG_ENDIAN -DARCH_HAS_FPU -mips3 |
BFD_NAME = elf32-tradbigmips |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips |
TARGET = mips-linux-gnu |
GCC_CFLAGS += -DBIG_ENDIAN |
endif |
ifeq ($(MACHINE),simics) |
# SIMICS 4kc emulation is broken, although for instructions |
# that do not bother us |
BFD_NAME = elf32-tradlittlemips |
BFD = elf32-tradlittlemips |
GCC_CFLAGS += -mhard-float -mips3 -DTLBCNT=16 |
TLBCNT = 16 |
endif |
ifeq ($(MACHINE),msim) |
BFD_NAME = elf32-tradlittlemips |
BFD = binary |
GCC_CFLAGS += -mhard-float -mips3 |
GCC_CFLAGS += -mhard-float |
endif |
## Compile with support for software integer division. |
# |
CONFIG_SOFTINT = y |
ARCH_SOURCES = \ |
arch/$(ARCH)/src/start.S \ |
arch/$(ARCH)/src/context.S \ |
arch/$(ARCH)/src/panic.S \ |
arch/$(ARCH)/src/mips32.c \ |
arch/$(ARCH)/src/dummy.S \ |
arch/$(ARCH)/src/console.c \ |
arch/$(ARCH)/src/asm.S \ |
arch/$(ARCH)/src/exception.c \ |
arch/$(ARCH)/src/interrupt.c \ |
arch/$(ARCH)/src/cache.c \ |
arch/$(ARCH)/src/debugger.c \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/fpu_context.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/msim.c \ |
arch/$(ARCH)/src/drivers/serial.c \ |
arch/$(ARCH)/src/smp/order.c |
arch/$(KARCH)/src/start.S \ |
arch/$(KARCH)/src/context.S \ |
arch/$(KARCH)/src/panic.S \ |
arch/$(KARCH)/src/mips32.c \ |
arch/$(KARCH)/src/asm.S \ |
arch/$(KARCH)/src/exception.c \ |
arch/$(KARCH)/src/interrupt.c \ |
arch/$(KARCH)/src/cache.c \ |
arch/$(KARCH)/src/debugger.c \ |
arch/$(KARCH)/src/cpu/cpu.c \ |
arch/$(KARCH)/src/mm/frame.c \ |
arch/$(KARCH)/src/mm/page.c \ |
arch/$(KARCH)/src/mm/tlb.c \ |
arch/$(KARCH)/src/mm/as.c \ |
arch/$(KARCH)/src/fpu_context.c \ |
arch/$(KARCH)/src/ddi/ddi.c \ |
arch/$(KARCH)/src/smp/dorder.c \ |
arch/$(KARCH)/src/smp/smp.c |
//branches/tracing/kernel/arch/mips32/src/drivers/msim.c |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/src/drivers/serial.c |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/src/dummy.S |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/src/console.c |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/src/fpu_context.c |
---|
40,7 → 40,7 |
void fpu_disable(void) |
{ |
#ifdef ARCH_HAS_FPU |
#ifdef CONFIG_FPU |
cp0_status_write(cp0_status_read() & ~cp0_status_fpu_bit); |
#endif |
} |
47,7 → 47,7 |
void fpu_enable(void) |
{ |
#ifdef ARCH_HAS_FPU |
#ifdef CONFIG_FPU |
cp0_status_write(cp0_status_read() | cp0_status_fpu_bit); |
#endif |
} |
//branches/tracing/kernel/arch/mips32/src/exception.c |
---|
41,14 → 41,13 |
#include <arch.h> |
#include <debug.h> |
#include <proc/thread.h> |
#include <symtab.h> |
#include <print.h> |
#include <interrupt.h> |
#include <func.h> |
#include <console/kconsole.h> |
#include <ddi/irq.h> |
#include <arch/debugger.h> |
#include <udebug/udebug.h> |
#include <symtab.h> |
static char * exctable[] = { |
"Interrupt", |
75,25 → 74,21 |
static void print_regdump(istate_t *istate) |
{ |
char *pcsymbol = ""; |
char *rasymbol = ""; |
char *pcsymbol, *rasymbol; |
char *s = get_symtab_entry(istate->epc); |
if (s) |
pcsymbol = s; |
s = get_symtab_entry(istate->ra); |
if (s) |
rasymbol = s; |
printf("PC: %#x(%s) RA: %#x(%s), SP(%p)\n", istate->epc, pcsymbol, istate->ra, rasymbol, istate->sp); |
pcsymbol = symtab_fmt_name_lookup(istate->epc); |
rasymbol = symtab_fmt_name_lookup(istate->ra); |
printf("PC: %#x(%s) RA: %#x(%s), SP(%p)\n", istate->epc, pcsymbol, |
istate->ra, rasymbol, istate->sp); |
} |
static void unhandled_exception(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "unhandled exception %s", exctable[n]); |
fault_if_from_uspace(istate, "Unhandled exception %s.", exctable[n]); |
print_regdump(istate); |
panic("unhandled exception %s\n", exctable[n]); |
panic("Unhandled exception %s.", exctable[n]); |
} |
static void reserved_instr_exception(int n, istate_t *istate) |
142,8 → 137,8 |
if (cp0_cause_coperr(cp0_cause_read()) == fpu_cop_id) |
scheduler_fpu_lazy_request(); |
else { |
fault_if_from_uspace(istate, "unhandled Coprocessor Unusable Exception"); |
panic("unhandled Coprocessor Unusable Exception\n"); |
fault_if_from_uspace(istate, "Unhandled Coprocessor Unusable Exception."); |
panic("Unhandled Coprocessor Unusable Exception."); |
} |
} |
#endif |
154,7 → 149,7 |
int i; |
/* decode interrupt number and process the interrupt */ |
cause = (cp0_cause_read() >> 8) &0xff; |
cause = (cp0_cause_read() >> 8) & 0xff; |
for (i = 0; i < 8; i++) { |
if (cause & (1 << i)) { |
163,7 → 158,7 |
/* |
* The IRQ handler was found. |
*/ |
irq->handler(irq, irq->arg); |
irq->handler(irq); |
spinlock_unlock(&irq->lock); |
} else { |
/* |
170,7 → 165,8 |
* Spurious interrupt. |
*/ |
#ifdef CONFIG_DEBUG |
printf("cpu%u: spurious interrupt (inum=%d)\n", CPU->id, i); |
printf("cpu%u: spurious interrupt (inum=%d)\n", |
CPU->id, i); |
#endif |
} |
} |
180,7 → 176,7 |
/** Handle syscall userspace call */ |
static void syscall_exception(int n, istate_t *istate) |
{ |
panic("Syscall is handled through shortcut"); |
panic("Syscall is handled through shortcut."); |
} |
void exception_init(void) |
//branches/tracing/kernel/arch/mips32/src/smp/order.c |
---|
File deleted |
//branches/tracing/kernel/arch/mips32/src/smp/dorder.c |
---|
0,0 → 1,47 |
/* |
* Copyright (c) 2007 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32 |
* @{ |
*/ |
/** @file |
*/ |
#include <arch/smp/dorder.h> |
#define MSIM_DORDER_ADDRESS 0xB0000004 |
void ipi_broadcast_arch(int ipi) |
{ |
#ifdef CONFIG_SMP |
*((volatile unsigned int *) MSIM_DORDER_ADDRESS) = 0x7FFFFFFF; |
#endif |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/mips32/src/smp/smp.c |
---|
0,0 → 1,53 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32 |
* @{ |
*/ |
/** @file |
*/ |
#include <config.h> |
#include <smp/smp.h> |
#include <arch/arch.h> |
#ifdef CONFIG_SMP |
void smp_init(void) |
{ |
config.cpu_count = cpu_count; |
} |
void kmp(void *arg __attribute__((unused))) |
{ |
} |
#endif /* CONFIG_SMP */ |
/** @} |
*/ |
//branches/tracing/kernel/arch/mips32/src/asm.S |
---|
27,17 → 27,17 |
# |
#include <arch/asm/regname.h> |
.text |
.macro cp0_read reg |
mfc0 $2,\reg |
mfc0 $2, \reg |
j $31 |
nop |
.endm |
.macro cp0_write reg |
mtc0 $4,\reg |
mtc0 $4, \reg |
j $31 |
nop |
.endm |
46,6 → 46,11 |
.set noreorder |
.set nomacro |
.global asm_delay_loop |
asm_delay_loop: |
j $31 |
nop |
.global cpu_halt |
cpu_halt: |
j cpu_halt |
58,6 → 63,12 |
nop |
.global memsetw |
memsetw: |
j _memsetw |
nop |
.global memcpy |
.global memcpy_from_uspace |
.global memcpy_to_uspace |
66,235 → 77,238 |
memcpy: |
memcpy_from_uspace: |
memcpy_to_uspace: |
addiu $v0,$a1,3 |
li $v1,-4 # 0xfffffffffffffffc |
and $v0,$v0,$v1 |
beq $a1,$v0,3f |
move $t0,$a0 |
move $t2,$a0 # save dst |
move $t2, $a0 # save dst |
addiu $v0, $a1, 3 |
li $v1, -4 # 0xfffffffffffffffc |
and $v0, $v0, $v1 |
beq $a1, $v0, 3f |
move $t0, $a0 |
0: |
beq $a2, $zero, 2f |
move $a3, $zero |
1: |
addu $v0, $a1, $a3 |
lbu $a0, 0($v0) |
addu $v1, $t0, $a3 |
addiu $a3, $a3, 1 |
bne $a3, $a2, 1b |
sb $a0, 0($v1) |
2: |
jr $ra |
move $v0, $t2 |
3: |
addiu $v0, $a0, 3 |
and $v0, $v0, $v1 |
bne $a0, $v0, 0b |
srl $t1, $a2, 2 |
beq $t1, $zero, 5f |
move $a3, $zero |
move $a3, $zero |
move $a0, $zero |
4: |
addu $v0, $a1, $a0 |
lw $v1, 0($v0) |
addiu $a3, $a3, 1 |
addu $v0, $t0, $a0 |
sw $v1, 0($v0) |
bne $a3, $t1, 4b |
addiu $a0, $a0, 4 |
5: |
andi $a2, $a2, 0x3 |
beq $a2, $zero, 2b |
nop |
sll $v0, $a3, 2 |
addu $t1, $v0, $t0 |
move $a3, $zero |
addu $t0, $v0, $a1 |
6: |
addu $v0, $t0, $a3 |
lbu $a0, 0($v0) |
addu $v1, $t1, $a3 |
addiu $a3, $a3, 1 |
bne $a3, $a2, 6b |
sb $a0, 0($v1) |
jr $ra |
move $v0, $t2 |
0: |
beq $a2,$zero,2f |
move $a3,$zero |
1: |
addu $v0,$a1,$a3 |
lbu $a0,0($v0) |
addu $v1,$t0,$a3 |
addiu $a3,$a3,1 |
bne $a3,$a2,1b |
sb $a0,0($v1) |
2: |
jr $ra |
move $v0,$t2 |
3: |
addiu $v0,$a0,3 |
and $v0,$v0,$v1 |
bne $a0,$v0,0b |
srl $t1,$a2,2 |
beq $t1,$zero,5f |
move $a3,$zero |
move $a3,$zero |
move $a0,$zero |
4: |
addu $v0,$a1,$a0 |
lw $v1,0($v0) |
addiu $a3,$a3,1 |
addu $v0,$t0,$a0 |
sw $v1,0($v0) |
bne $a3,$t1,4b |
addiu $a0,$a0,4 |
5: |
andi $a2,$a2,0x3 |
beq $a2,$zero,2b |
nop |
sll $v0,$a3,2 |
addu $t1,$v0,$t0 |
move $a3,$zero |
addu $t0,$v0,$a1 |
6: |
addu $v0,$t0,$a3 |
lbu $a0,0($v0) |
addu $v1,$t1,$a3 |
addiu $a3,$a3,1 |
bne $a3,$a2,6b |
sb $a0,0($v1) |
jr $ra |
move $v0,$t2 |
memcpy_from_uspace_failover_address: |
memcpy_to_uspace_failover_address: |
jr $ra |
move $v0, $zero |
jr $ra |
move $v0, $zero |
.macro fpu_gp_save reg ctx |
mfc1 $t0,$\reg |
sw $t0, \reg*4(\ctx) |
mfc1 $t0, $\reg |
sw $t0, \reg * 4(\ctx) |
.endm |
.macro fpu_gp_restore reg ctx |
lw $t0, \reg*4(\ctx) |
mtc1 $t0,$\reg |
lw $t0, \reg * 4(\ctx) |
mtc1 $t0, $\reg |
.endm |
.macro fpu_ct_save reg ctx |
cfc1 $t0,$1 |
sw $t0, (\reg+32)*4(\ctx) |
cfc1 $t0, $1 |
sw $t0, (\reg + 32) * 4(\ctx) |
.endm |
.macro fpu_ct_restore reg ctx |
lw $t0, (\reg+32)*4(\ctx) |
ctc1 $t0,$\reg |
lw $t0, (\reg + 32) * 4(\ctx) |
ctc1 $t0, $\reg |
.endm |
.global fpu_context_save |
fpu_context_save: |
#ifdef ARCH_HAS_FPU |
fpu_gp_save 0,$a0 |
fpu_gp_save 1,$a0 |
fpu_gp_save 2,$a0 |
fpu_gp_save 3,$a0 |
fpu_gp_save 4,$a0 |
fpu_gp_save 5,$a0 |
fpu_gp_save 6,$a0 |
fpu_gp_save 7,$a0 |
fpu_gp_save 8,$a0 |
fpu_gp_save 9,$a0 |
fpu_gp_save 10,$a0 |
fpu_gp_save 11,$a0 |
fpu_gp_save 12,$a0 |
fpu_gp_save 13,$a0 |
fpu_gp_save 14,$a0 |
fpu_gp_save 15,$a0 |
fpu_gp_save 16,$a0 |
fpu_gp_save 17,$a0 |
fpu_gp_save 18,$a0 |
fpu_gp_save 19,$a0 |
fpu_gp_save 20,$a0 |
fpu_gp_save 21,$a0 |
fpu_gp_save 22,$a0 |
fpu_gp_save 23,$a0 |
fpu_gp_save 24,$a0 |
fpu_gp_save 25,$a0 |
fpu_gp_save 26,$a0 |
fpu_gp_save 27,$a0 |
fpu_gp_save 28,$a0 |
fpu_gp_save 29,$a0 |
fpu_gp_save 30,$a0 |
fpu_gp_save 31,$a0 |
fpu_ct_save 1,$a0 |
fpu_ct_save 2,$a0 |
fpu_ct_save 3,$a0 |
fpu_ct_save 4,$a0 |
fpu_ct_save 5,$a0 |
fpu_ct_save 6,$a0 |
fpu_ct_save 7,$a0 |
fpu_ct_save 8,$a0 |
fpu_ct_save 9,$a0 |
fpu_ct_save 10,$a0 |
fpu_ct_save 11,$a0 |
fpu_ct_save 12,$a0 |
fpu_ct_save 13,$a0 |
fpu_ct_save 14,$a0 |
fpu_ct_save 15,$a0 |
fpu_ct_save 16,$a0 |
fpu_ct_save 17,$a0 |
fpu_ct_save 18,$a0 |
fpu_ct_save 19,$a0 |
fpu_ct_save 20,$a0 |
fpu_ct_save 21,$a0 |
fpu_ct_save 22,$a0 |
fpu_ct_save 23,$a0 |
fpu_ct_save 24,$a0 |
fpu_ct_save 25,$a0 |
fpu_ct_save 26,$a0 |
fpu_ct_save 27,$a0 |
fpu_ct_save 28,$a0 |
fpu_ct_save 29,$a0 |
fpu_ct_save 30,$a0 |
fpu_ct_save 31,$a0 |
#endif |
#ifdef CONFIG_FPU |
fpu_gp_save 0, $a0 |
fpu_gp_save 1, $a0 |
fpu_gp_save 2, $a0 |
fpu_gp_save 3, $a0 |
fpu_gp_save 4, $a0 |
fpu_gp_save 5, $a0 |
fpu_gp_save 6, $a0 |
fpu_gp_save 7, $a0 |
fpu_gp_save 8, $a0 |
fpu_gp_save 9, $a0 |
fpu_gp_save 10, $a0 |
fpu_gp_save 11, $a0 |
fpu_gp_save 12, $a0 |
fpu_gp_save 13, $a0 |
fpu_gp_save 14, $a0 |
fpu_gp_save 15, $a0 |
fpu_gp_save 16, $a0 |
fpu_gp_save 17, $a0 |
fpu_gp_save 18, $a0 |
fpu_gp_save 19, $a0 |
fpu_gp_save 20, $a0 |
fpu_gp_save 21, $a0 |
fpu_gp_save 22, $a0 |
fpu_gp_save 23, $a0 |
fpu_gp_save 24, $a0 |
fpu_gp_save 25, $a0 |
fpu_gp_save 26, $a0 |
fpu_gp_save 27, $a0 |
fpu_gp_save 28, $a0 |
fpu_gp_save 29, $a0 |
fpu_gp_save 30, $a0 |
fpu_gp_save 31, $a0 |
fpu_ct_save 1, $a0 |
fpu_ct_save 2, $a0 |
fpu_ct_save 3, $a0 |
fpu_ct_save 4, $a0 |
fpu_ct_save 5, $a0 |
fpu_ct_save 6, $a0 |
fpu_ct_save 7, $a0 |
fpu_ct_save 8, $a0 |
fpu_ct_save 9, $a0 |
fpu_ct_save 10, $a0 |
fpu_ct_save 11, $a0 |
fpu_ct_save 12, $a0 |
fpu_ct_save 13, $a0 |
fpu_ct_save 14, $a0 |
fpu_ct_save 15, $a0 |
fpu_ct_save 16, $a0 |
fpu_ct_save 17, $a0 |
fpu_ct_save 18, $a0 |
fpu_ct_save 19, $a0 |
fpu_ct_save 20, $a0 |
fpu_ct_save 21, $a0 |
fpu_ct_save 22, $a0 |
fpu_ct_save 23, $a0 |
fpu_ct_save 24, $a0 |
fpu_ct_save 25, $a0 |
fpu_ct_save 26, $a0 |
fpu_ct_save 27, $a0 |
fpu_ct_save 28, $a0 |
fpu_ct_save 29, $a0 |
fpu_ct_save 30, $a0 |
fpu_ct_save 31, $a0 |
#endif |
j $ra |
nop |
.global fpu_context_restore |
fpu_context_restore: |
#ifdef ARCH_HAS_FPU |
fpu_gp_restore 0,$a0 |
fpu_gp_restore 1,$a0 |
fpu_gp_restore 2,$a0 |
fpu_gp_restore 3,$a0 |
fpu_gp_restore 4,$a0 |
fpu_gp_restore 5,$a0 |
fpu_gp_restore 6,$a0 |
fpu_gp_restore 7,$a0 |
fpu_gp_restore 8,$a0 |
fpu_gp_restore 9,$a0 |
fpu_gp_restore 10,$a0 |
fpu_gp_restore 11,$a0 |
fpu_gp_restore 12,$a0 |
fpu_gp_restore 13,$a0 |
fpu_gp_restore 14,$a0 |
fpu_gp_restore 15,$a0 |
fpu_gp_restore 16,$a0 |
fpu_gp_restore 17,$a0 |
fpu_gp_restore 18,$a0 |
fpu_gp_restore 19,$a0 |
fpu_gp_restore 20,$a0 |
fpu_gp_restore 21,$a0 |
fpu_gp_restore 22,$a0 |
fpu_gp_restore 23,$a0 |
fpu_gp_restore 24,$a0 |
fpu_gp_restore 25,$a0 |
fpu_gp_restore 26,$a0 |
fpu_gp_restore 27,$a0 |
fpu_gp_restore 28,$a0 |
fpu_gp_restore 29,$a0 |
fpu_gp_restore 30,$a0 |
fpu_gp_restore 31,$a0 |
fpu_ct_restore 1,$a0 |
fpu_ct_restore 2,$a0 |
fpu_ct_restore 3,$a0 |
fpu_ct_restore 4,$a0 |
fpu_ct_restore 5,$a0 |
fpu_ct_restore 6,$a0 |
fpu_ct_restore 7,$a0 |
fpu_ct_restore 8,$a0 |
fpu_ct_restore 9,$a0 |
fpu_ct_restore 10,$a0 |
fpu_ct_restore 11,$a0 |
fpu_ct_restore 12,$a0 |
fpu_ct_restore 13,$a0 |
fpu_ct_restore 14,$a0 |
fpu_ct_restore 15,$a0 |
fpu_ct_restore 16,$a0 |
fpu_ct_restore 17,$a0 |
fpu_ct_restore 18,$a0 |
fpu_ct_restore 19,$a0 |
fpu_ct_restore 20,$a0 |
fpu_ct_restore 21,$a0 |
fpu_ct_restore 22,$a0 |
fpu_ct_restore 23,$a0 |
fpu_ct_restore 24,$a0 |
fpu_ct_restore 25,$a0 |
fpu_ct_restore 26,$a0 |
fpu_ct_restore 27,$a0 |
fpu_ct_restore 28,$a0 |
fpu_ct_restore 29,$a0 |
fpu_ct_restore 30,$a0 |
fpu_ct_restore 31,$a0 |
#endif |
#ifdef CONFIG_FPU |
fpu_gp_restore 0, $a0 |
fpu_gp_restore 1, $a0 |
fpu_gp_restore 2, $a0 |
fpu_gp_restore 3, $a0 |
fpu_gp_restore 4, $a0 |
fpu_gp_restore 5, $a0 |
fpu_gp_restore 6, $a0 |
fpu_gp_restore 7, $a0 |
fpu_gp_restore 8, $a0 |
fpu_gp_restore 9, $a0 |
fpu_gp_restore 10, $a0 |
fpu_gp_restore 11, $a0 |
fpu_gp_restore 12, $a0 |
fpu_gp_restore 13, $a0 |
fpu_gp_restore 14, $a0 |
fpu_gp_restore 15, $a0 |
fpu_gp_restore 16, $a0 |
fpu_gp_restore 17, $a0 |
fpu_gp_restore 18, $a0 |
fpu_gp_restore 19, $a0 |
fpu_gp_restore 20, $a0 |
fpu_gp_restore 21, $a0 |
fpu_gp_restore 22, $a0 |
fpu_gp_restore 23, $a0 |
fpu_gp_restore 24, $a0 |
fpu_gp_restore 25, $a0 |
fpu_gp_restore 26, $a0 |
fpu_gp_restore 27, $a0 |
fpu_gp_restore 28, $a0 |
fpu_gp_restore 29, $a0 |
fpu_gp_restore 30, $a0 |
fpu_gp_restore 31, $a0 |
fpu_ct_restore 1, $a0 |
fpu_ct_restore 2, $a0 |
fpu_ct_restore 3, $a0 |
fpu_ct_restore 4, $a0 |
fpu_ct_restore 5, $a0 |
fpu_ct_restore 6, $a0 |
fpu_ct_restore 7, $a0 |
fpu_ct_restore 8, $a0 |
fpu_ct_restore 9, $a0 |
fpu_ct_restore 10, $a0 |
fpu_ct_restore 11, $a0 |
fpu_ct_restore 12, $a0 |
fpu_ct_restore 13, $a0 |
fpu_ct_restore 14, $a0 |
fpu_ct_restore 15, $a0 |
fpu_ct_restore 16, $a0 |
fpu_ct_restore 17, $a0 |
fpu_ct_restore 18, $a0 |
fpu_ct_restore 19, $a0 |
fpu_ct_restore 20, $a0 |
fpu_ct_restore 21, $a0 |
fpu_ct_restore 22, $a0 |
fpu_ct_restore 23, $a0 |
fpu_ct_restore 24, $a0 |
fpu_ct_restore 25, $a0 |
fpu_ct_restore 26, $a0 |
fpu_ct_restore 27, $a0 |
fpu_ct_restore 28, $a0 |
fpu_ct_restore 29, $a0 |
fpu_ct_restore 30, $a0 |
fpu_ct_restore 31, $a0 |
#endif |
j $ra |
nop |
//branches/tracing/kernel/arch/mips32/src/cache.c |
---|
38,7 → 38,7 |
void cache_error(istate_t *istate) |
{ |
panic("cache_error exception (epc=%p)\n", istate->epc); |
panic("cache_error exception (epc=%p).", istate->epc); |
} |
/** @} |
//branches/tracing/kernel/arch/mips32/src/debugger.c |
---|
37,16 → 37,18 |
#include <memstr.h> |
#include <console/kconsole.h> |
#include <console/cmd.h> |
#include <symtab.h> |
#include <print.h> |
#include <panic.h> |
#include <arch.h> |
#include <arch/cp0.h> |
#include <func.h> |
#include <symtab.h> |
bpinfo_t breakpoints[BKPOINTS_MAX]; |
SPINLOCK_INITIALIZE(bkpoint_lock); |
#ifdef CONFIG_KCONSOLE |
static int cmd_print_breakpoints(cmd_arg_t *argv); |
static cmd_info_t bkpts_info = { |
.name = "bkpts", |
123,10 → 125,12 |
{0, 0} /* EndOfTable */ |
}; |
/** Test, if the given instruction is a jump or branch instruction |
* |
* @param instr Instruction code |
* @return true - it is jump instruction, false otherwise |
* |
*/ |
static bool is_jump(unative_t instr) |
{ |
158,7 → 162,7 |
for (i = 0; i < BKPOINTS_MAX; i++) { |
if (breakpoints[i].address == (uintptr_t)argv->intval) { |
printf("Duplicate breakpoint %d.\n", i); |
spinlock_unlock(&bkpoints_lock); |
spinlock_unlock(&bkpoint_lock); |
return 0; |
} else if (breakpoints[i].address == (uintptr_t)argv->intval + |
sizeof(unative_t) || breakpoints[i].address == |
165,10 → 169,10 |
(uintptr_t)argv->intval - sizeof(unative_t)) { |
printf("Adjacent breakpoints not supported, conflict " |
"with %d.\n", i); |
spinlock_unlock(&bkpoints_lock); |
spinlock_unlock(&bkpoint_lock); |
return 0; |
} |
} |
for (i = 0; i < BKPOINTS_MAX; i++) |
255,8 → 259,9 |
for (i = 0; i < BKPOINTS_MAX; i++) |
if (breakpoints[i].address) { |
symbol = get_symtab_entry(breakpoints[i].address); |
symbol = symtab_fmt_name_lookup( |
breakpoints[i].address); |
printf("%-2u %-5d %#10zx %-6s %-7s %-8s %s\n", i, |
breakpoints[i].counter, breakpoints[i].address, |
((breakpoints[i].flags & BKPOINT_INPROG) ? "true" : |
267,6 → 272,8 |
return 1; |
} |
#endif |
/** Initialize debugger */ |
void debugger_init() |
{ |
274,22 → 281,24 |
for (i = 0; i < BKPOINTS_MAX; i++) |
breakpoints[i].address = NULL; |
#ifdef CONFIG_KCONSOLE |
cmd_initialize(&bkpts_info); |
if (!cmd_register(&bkpts_info)) |
panic("could not register command %s\n", bkpts_info.name); |
printf("Cannot register command %s\n", bkpts_info.name); |
cmd_initialize(&delbkpt_info); |
if (!cmd_register(&delbkpt_info)) |
panic("could not register command %s\n", delbkpt_info.name); |
printf("Cannot register command %s\n", delbkpt_info.name); |
cmd_initialize(&addbkpt_info); |
if (!cmd_register(&addbkpt_info)) |
panic("could not register command %s\n", addbkpt_info.name); |
printf("Cannot register command %s\n", addbkpt_info.name); |
cmd_initialize(&addbkpte_info); |
if (!cmd_register(&addbkpte_info)) |
panic("could not register command %s\n", addbkpte_info.name); |
printf("Cannot register command %s\n", addbkpte_info.name); |
#endif |
} |
/** Handle breakpoint |
308,7 → 317,7 |
/* test branch delay slot */ |
if (cp0_cause_read() & 0x80000000) |
panic("Breakpoint in branch delay slot not supported.\n"); |
panic("Breakpoint in branch delay slot not supported."); |
spinlock_lock(&bkpoint_lock); |
for (i = 0; i < BKPOINTS_MAX; i++) { |
340,9 → 349,10 |
if (cur->flags & BKPOINT_INPROG) |
printf("Warning: breakpoint recursion\n"); |
if (!(cur->flags & BKPOINT_FUNCCALL)) |
if (!(cur->flags & BKPOINT_FUNCCALL)) { |
printf("***Breakpoint %d: %p in %s.\n", i, fireaddr, |
get_symtab_entry(istate->epc)); |
symtab_fmt_name_lookup(istate->epc)); |
} |
/* Return first instruction back */ |
((uint32_t *)cur->address)[0] = cur->instruction; |
355,8 → 365,9 |
} |
cur->flags |= BKPOINT_INPROG; |
} else { |
printf("***Breakpoint %p in %s.\n", fireaddr, |
get_symtab_entry(fireaddr)); |
printf("***Breakpoint %d: %p in %s.\n", i, fireaddr, |
symtab_fmt_name_lookup(fireaddr)); |
/* Move on to next instruction */ |
istate->epc += 4; |
} |
367,19 → 378,20 |
if (cur->bkfunc) |
cur->bkfunc(cur, istate); |
} else { |
printf("***Type 'exit' to exit kconsole.\n"); |
#ifdef CONFIG_KCONSOLE |
/* This disables all other processors - we are not SMP, |
* actually this gets us to cpu_halt, if scheduler() is run |
* - we generally do not want scheduler to be run from debug, |
* so this is a good idea |
*/ |
atomic_set(&haltstate,1); |
atomic_set(&haltstate, 1); |
spinlock_unlock(&bkpoint_lock); |
kconsole("debug"); |
kconsole("debug", "Debug console ready.\n", false); |
spinlock_lock(&bkpoint_lock); |
atomic_set(&haltstate,0); |
atomic_set(&haltstate, 0); |
#endif |
} |
if (cur && cur->address == fireaddr && (cur->flags & BKPOINT_INPROG)) { |
/* Remove one-shot breakpoint */ |
//branches/tracing/kernel/arch/mips32/src/cpu/cpu.c |
---|
48,7 → 48,7 |
{ "MIPS", "R2000" }, /* 0x01 */ |
{ "MIPS", "R3000" }, /* 0x02 */ |
{ "MIPS", "R6000" }, /* 0x03 */ |
{ "MIPS", " R4000/R4400" }, /* 0x04 */ |
{ "MIPS", "R4000/R4400" }, /* 0x04 */ |
{ "LSI Logic", "R3000" }, /* 0x05 */ |
{ "MIPS", "R6000A" }, /* 0x06 */ |
{ "IDT", "3051/3052" }, /* 0x07 */ |
123,9 → 123,9 |
data = &imp_data[m->arch.imp_num]; |
} |
printf("cpu%d: %s %s (rev=%d.%d, imp=%d)\n", |
printf("cpu%u: %s %s (rev=%d.%d, imp=%d)\n", |
m->id, data->vendor, data->model, m->arch.rev_num >> 4, |
m->arch.rev_num & 0xf, m->arch.imp_num); |
m->arch.rev_num & 0x0f, m->arch.imp_num); |
} |
/** @} |
//branches/tracing/kernel/arch/mips32/src/mm/tlb.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32mm |
/** @addtogroup mips32mm |
* @{ |
*/ |
/** @file |
40,12 → 40,12 |
#include <arch/cp0.h> |
#include <panic.h> |
#include <arch.h> |
#include <symtab.h> |
#include <synch/spinlock.h> |
#include <synch/mutex.h> |
#include <print.h> |
#include <debug.h> |
#include <align.h> |
#include <interrupt.h> |
#include <symtab.h> |
static void tlb_refill_fail(istate_t *); |
static void tlb_invalid_fail(istate_t *); |
92,15 → 92,15 |
uintptr_t badvaddr; |
pte_t *pte; |
int pfrc; |
badvaddr = cp0_badvaddr_read(); |
spinlock_lock(&AS->lock); |
mutex_lock(&AS->lock); |
asid = AS->asid; |
spinlock_unlock(&AS->lock); |
mutex_unlock(&AS->lock); |
page_table_lock(AS, true); |
pte = find_mapping_and_check(badvaddr, PF_ACCESS_READ, istate, &pfrc); |
if (!pte) { |
switch (pfrc) { |
115,7 → 115,7 |
page_table_unlock(AS, true); |
return; |
default: |
panic("unexpected pfrc (%d)\n", pfrc); |
panic("Unexpected pfrc (%d).", pfrc); |
} |
} |
199,7 → 199,7 |
page_table_unlock(AS, true); |
return; |
default: |
panic("unexpected pfrc (%d)\n", pfrc); |
panic("Unexpected pfrc (%d).", pfrc); |
} |
} |
282,7 → 282,7 |
page_table_unlock(AS, true); |
return; |
default: |
panic("unexpected pfrc (%d)\n", pfrc); |
panic("Unexpected pfrc (%d).", pfrc); |
} |
} |
320,19 → 320,14 |
void tlb_refill_fail(istate_t *istate) |
{ |
char *symbol = ""; |
char *sym2 = ""; |
char *symbol, *sym2; |
char *s = get_symtab_entry(istate->epc); |
if (s) |
symbol = s; |
s = get_symtab_entry(istate->ra); |
if (s) |
sym2 = s; |
fault_if_from_uspace(istate, "TLB Refill Exception on %p", |
symbol = symtab_fmt_name_lookup(istate->epc); |
sym2 = symtab_fmt_name_lookup(istate->ra); |
fault_if_from_uspace(istate, "TLB Refill Exception on %p.", |
cp0_badvaddr_read()); |
panic("%x: TLB Refill Exception at %x(%s<-%s)\n", cp0_badvaddr_read(), |
panic("%x: TLB Refill Exception at %x (%s<-%s).", cp0_badvaddr_read(), |
istate->epc, symbol, sym2); |
} |
339,27 → 334,25 |
void tlb_invalid_fail(istate_t *istate) |
{ |
char *symbol = ""; |
char *symbol; |
char *s = get_symtab_entry(istate->epc); |
if (s) |
symbol = s; |
fault_if_from_uspace(istate, "TLB Invalid Exception on %p", |
symbol = symtab_fmt_name_lookup(istate->epc); |
fault_if_from_uspace(istate, "TLB Invalid Exception on %p.", |
cp0_badvaddr_read()); |
panic("%x: TLB Invalid Exception at %x(%s)\n", cp0_badvaddr_read(), |
panic("%x: TLB Invalid Exception at %x (%s).", cp0_badvaddr_read(), |
istate->epc, symbol); |
} |
void tlb_modified_fail(istate_t *istate) |
{ |
char *symbol = ""; |
char *symbol; |
char *s = get_symtab_entry(istate->epc); |
if (s) |
symbol = s; |
fault_if_from_uspace(istate, "TLB Modified Exception on %p", |
symbol = symtab_fmt_name_lookup(istate->epc); |
fault_if_from_uspace(istate, "TLB Modified Exception on %p.", |
cp0_badvaddr_read()); |
panic("%x: TLB Modified Exception at %x(%s)\n", cp0_badvaddr_read(), |
panic("%x: TLB Modified Exception at %x (%s).", cp0_badvaddr_read(), |
istate->epc, symbol); |
} |
433,7 → 426,7 |
return NULL; |
break; |
default: |
panic("unexpected rc (%d)\n", rc); |
panic("Unexpected rc (%d).", rc); |
} |
} |
//branches/tracing/kernel/arch/mips32/src/mm/frame.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32mm |
/** @addtogroup mips32mm |
* @{ |
*/ |
/** @file |
40,22 → 40,22 |
#include <mm/asid.h> |
#include <config.h> |
#include <arch/drivers/msim.h> |
#include <arch/drivers/serial.h> |
#include <print.h> |
#define ZERO_PAGE_MASK TLB_PAGE_MASK_256K |
#define ZERO_FRAMES 2048 |
#define ZERO_PAGE_WIDTH 18 /* 256K */ |
#define ZERO_PAGE_SIZE (1 << ZERO_PAGE_WIDTH) |
#define ZERO_PAGE_ASID ASID_INVALID |
#define ZERO_PAGE_TLBI 0 |
#define ZERO_PAGE_ADDR 0 |
#define ZERO_PAGE_OFFSET (ZERO_PAGE_SIZE / sizeof(uint32_t) - 1) |
#define ZERO_PAGE_VALUE (((volatile uint32_t *) ZERO_PAGE_ADDR)[ZERO_PAGE_OFFSET]) |
#define ZERO_PAGE_MASK TLB_PAGE_MASK_256K |
#define ZERO_FRAMES 2048 |
#define ZERO_PAGE_WIDTH 18 /* 256K */ |
#define ZERO_PAGE_SIZE (1 << ZERO_PAGE_WIDTH) |
#define ZERO_PAGE_ASID ASID_INVALID |
#define ZERO_PAGE_TLBI 0 |
#define ZERO_PAGE_ADDR 0 |
#define ZERO_PAGE_OFFSET (ZERO_PAGE_SIZE / sizeof(uint32_t) - 1) |
#define ZERO_PAGE_VALUE (((volatile uint32_t *) ZERO_PAGE_ADDR)[ZERO_PAGE_OFFSET]) |
#define ZERO_PAGE_VALUE_KSEG1(frame) (((volatile uint32_t *) (0xa0000000 + (frame << ZERO_PAGE_WIDTH)))[ZERO_PAGE_OFFSET]) |
#define ZERO_PAGE_VALUE_KSEG1(frame) \ |
(((volatile uint32_t *) (0xa0000000 + (frame << ZERO_PAGE_WIDTH)))[ZERO_PAGE_OFFSET]) |
#define MAX_REGIONS 32 |
#define MAX_REGIONS 32 |
typedef struct { |
pfn_t start; |
65,7 → 65,6 |
static count_t phys_regions_count = 0; |
static phys_region_t phys_regions[MAX_REGIONS]; |
/** Check whether frame is available |
* |
* Returns true if given frame is generally available for use. |
75,7 → 74,7 |
*/ |
static bool frame_available(pfn_t frame) |
{ |
#if MACHINE == msim |
#ifdef MACHINE_msim |
/* MSIM device (dprinter) */ |
if (frame == (KA2PA(MSIM_VIDEORAM) >> ZERO_PAGE_WIDTH)) |
return false; |
84,14 → 83,8 |
if (frame == (KA2PA(MSIM_KBD_ADDRESS) >> ZERO_PAGE_WIDTH)) |
return false; |
#endif |
#if MACHINE == simics |
/* Simics device (serial line) */ |
if (frame == (KA2PA(SERIAL_ADDRESS) >> ZERO_PAGE_WIDTH)) |
return false; |
#endif |
#if (MACHINE == lgxemul) || (MACHINE == bgxemul) |
#if defined(MACHINE_lgxemul) || defined(MACHINE_bgxemul) |
/* gxemul devices */ |
if (overlaps(frame << ZERO_PAGE_WIDTH, ZERO_PAGE_SIZE, |
0x10000000, MB2SIZE(256))) |
218,7 → 211,7 |
ZERO_PAGE_VALUE = 0xdeadbeef; |
if (ZERO_PAGE_VALUE != 0xdeadbeef) |
avail = false; |
#if (MACHINE == lgxemul) || (MACHINE == bgxemul) |
#if defined(MACHINE_lgxemul) || defined(MACHINE_bgxemul) |
else { |
ZERO_PAGE_VALUE_KSEG1(frame) = 0xaabbccdd; |
if (ZERO_PAGE_VALUE_KSEG1(frame) != 0xaabbccdd) |
//branches/tracing/kernel/arch/mips32/src/mm/page.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup mips32mm |
/** @addtogroup mips32mm |
* @{ |
*/ |
/** @file |
35,6 → 35,7 |
#include <arch/mm/page.h> |
#include <genarch/mm/page_pt.h> |
#include <mm/page.h> |
#include <mm/frame.h> |
void page_arch_init(void) |
{ |
//branches/tracing/kernel/arch/mips32/src/interrupt.c |
---|
41,8 → 41,9 |
#include <ipc/sysipc.h> |
#include <ddi/device.h> |
#define IRQ_COUNT 8 |
#define TIMER_IRQ 7 |
#define IRQ_COUNT 8 |
#define TIMER_IRQ 7 |
#define DORDER_IRQ 5 |
function virtual_timer_fnc = NULL; |
static irq_t timer_irq; |
100,12 → 101,12 |
cp0_compare_write(nextcount); |
} |
static irq_ownership_t timer_claim(void) |
static irq_ownership_t timer_claim(irq_t *irq) |
{ |
return IRQ_ACCEPT; |
} |
static void timer_irq_handler(irq_t *irq, void *arg, ...) |
static void timer_irq_handler(irq_t *irq) |
{ |
unsigned long drift; |
//branches/tracing/kernel/arch/mips32/src/mips32.c |
---|
33,20 → 33,17 |
*/ |
#include <arch.h> |
#include <arch/boot.h> |
#include <arch/cp0.h> |
#include <arch/exception.h> |
#include <mm/as.h> |
#include <userspace.h> |
#include <arch/console.h> |
#include <memstr.h> |
#include <proc/thread.h> |
#include <proc/uarg.h> |
#include <print.h> |
#include <console/console.h> |
#include <syscall/syscall.h> |
#include <sysinfo/sysinfo.h> |
#include <arch/interrupt.h> |
#include <console/chardev.h> |
#include <arch/barrier.h> |
53,39 → 50,51 |
#include <arch/debugger.h> |
#include <genarch/fb/fb.h> |
#include <genarch/fb/visuals.h> |
#include <genarch/drivers/dsrln/dsrlnin.h> |
#include <genarch/drivers/dsrln/dsrlnout.h> |
#include <genarch/srln/srln.h> |
#include <macros.h> |
#include <ddi/device.h> |
#include <config.h> |
#include <string.h> |
#include <arch/drivers/msim.h> |
#include <arch/asm/regname.h> |
/* Size of the code jumping to the exception handler code |
* - J+NOP |
/* Size of the code jumping to the exception handler code |
* - J+NOP |
*/ |
#define EXCEPTION_JUMP_SIZE 8 |
#define EXCEPTION_JUMP_SIZE 8 |
#define TLB_EXC ((char *) 0x80000000) |
#define NORM_EXC ((char *) 0x80000180) |
#define CACHE_EXC ((char *) 0x80000100) |
#define TLB_EXC ((char *) 0x80000000) |
#define NORM_EXC ((char *) 0x80000180) |
#define CACHE_EXC ((char *) 0x80000100) |
/* Why the linker moves the variable 64K away in assembler |
* when not in .text section ???????? |
* when not in .text section? |
*/ |
/* Stack pointer saved when entering user mode */ |
uintptr_t supervisor_sp __attribute__ ((section (".text"))); |
/* Stack pointer saved when entering user mode */ |
/* TODO: How do we do it on SMP system???? */ |
bootinfo_t bootinfo __attribute__ ((section (".text"))); |
void arch_pre_main(void) |
count_t cpu_count = 0; |
/** Performs mips32-specific initialization before main_bsp() is called. */ |
void arch_pre_main(void *entry __attribute__((unused)), bootinfo_t *bootinfo) |
{ |
/* Setup usermode */ |
init.cnt = bootinfo.cnt; |
init.cnt = bootinfo->cnt; |
uint32_t i; |
count_t i; |
for (i = 0; i < min3(bootinfo->cnt, TASKMAP_MAX_RECORDS, CONFIG_INIT_TASKS); i++) { |
init.tasks[i].addr = bootinfo->tasks[i].addr; |
init.tasks[i].size = bootinfo->tasks[i].size; |
str_cpy(init.tasks[i].name, CONFIG_TASK_NAME_BUFLEN, |
bootinfo->tasks[i].name); |
} |
for (i = 0; i < bootinfo.cnt; i++) { |
init.tasks[i].addr = bootinfo.tasks[i].addr; |
init.tasks[i].size = bootinfo.tasks[i].size; |
for (i = 0; i < CPUMAP_MAX_RECORDS; i++) { |
if ((bootinfo->cpumap & (1 << i)) != 0) |
cpu_count++; |
} |
} |
111,12 → 120,12 |
*/ |
cp0_status_write(cp0_status_read() & |
~(cp0_status_bev_bootstrap_bit | cp0_status_erl_error_bit)); |
/* |
* Mask all interrupts |
/* |
* Mask all interrupts |
*/ |
cp0_mask_all_int(); |
debugger_init(); |
} |
123,7 → 132,7 |
void arch_post_mm_init(void) |
{ |
interrupt_init(); |
console_init(device_assign_devno()); |
#ifdef CONFIG_FB |
/* GXemul framebuffer */ |
fb_properties_t gxemul_prop = { |
132,11 → 141,14 |
.x = 640, |
.y = 480, |
.scan = 1920, |
.visual = VISUAL_RGB_8_8_8, |
.visual = VISUAL_BGR_8_8_8, |
}; |
fb_init(&gxemul_prop); |
#endif |
sysinfo_set_item_val("machine." STRING(MACHINE), NULL, 1); |
#else |
#ifdef CONFIG_MIPS_PRN |
dsrlnout_init((ioport8_t *) MSIM_KBD_ADDRESS); |
#endif /* CONFIG_MIPS_PRN */ |
#endif /* CONFIG_FB */ |
} |
void arch_post_cpu_init(void) |
149,8 → 161,37 |
void arch_post_smp_init(void) |
{ |
#ifdef CONFIG_MIPS_KBD |
/* |
* Initialize the msim/GXemul keyboard port. Then initialize the serial line |
* module and connect it to the msim/GXemul keyboard. Enable keyboard interrupts. |
*/ |
dsrlnin_instance_t *dsrlnin_instance |
= dsrlnin_init((dsrlnin_t *) MSIM_KBD_ADDRESS, MSIM_KBD_IRQ); |
if (dsrlnin_instance) { |
srln_instance_t *srln_instance = srln_init(); |
if (srln_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *srln = srln_wire(srln_instance, sink); |
dsrlnin_wire(dsrlnin_instance, srln); |
cp0_unmask_int(MSIM_KBD_IRQ); |
} |
} |
/* |
* This is the necessary evil until the userspace driver is entirely |
* self-sufficient. |
*/ |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.inr", NULL, MSIM_KBD_IRQ); |
sysinfo_set_item_val("kbd.address.virtual", NULL, MSIM_KBD_ADDRESS); |
#endif |
} |
void calibrate_delay_loop(void) |
{ |
} |
void userspace(uspace_arg_t *kernel_uarg) |
{ |
/* EXL = 1, UM = 1, IE = 1 */ |
161,8 → 202,7 |
(uintptr_t) kernel_uarg->uspace_uarg, |
(uintptr_t) kernel_uarg->uspace_entry); |
while (1) |
; |
while (1); |
} |
/** Perform mips32 specific tasks needed before the new task is run. */ |
194,10 → 234,36 |
void arch_reboot(void) |
{ |
___halt(); |
while (1) |
; |
while (1); |
} |
/** Construct function pointer |
* |
* @param fptr function pointer structure |
* @param addr function address |
* @param caller calling function address |
* |
* @return address of the function pointer |
* |
*/ |
void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
{ |
return addr; |
} |
void arch_grab_console(void) |
{ |
#ifdef CONFIG_FB |
fb_redraw(); |
#endif |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/mips32/src/start.S |
---|
31,7 → 31,7 |
#include <arch/asm/boot.h> |
#include <arch/context_offset.h> |
#include <arch/stack.h> |
.text |
.set noat |
75,18 → 75,6 |
mfhi $at |
sw $at, EOFFSET_HI(\r) |
#ifdef CONFIG_DEBUG_ALLREGS |
sw $s0, EOFFSET_S0(\r) |
sw $s1, EOFFSET_S1(\r) |
sw $s2, EOFFSET_S2(\r) |
sw $s3, EOFFSET_S3(\r) |
sw $s4, EOFFSET_S4(\r) |
sw $s5, EOFFSET_S5(\r) |
sw $s6, EOFFSET_S6(\r) |
sw $s7, EOFFSET_S7(\r) |
sw $s8, EOFFSET_S8(\r) |
#endif |
sw $gp, EOFFSET_GP(\r) |
sw $ra, EOFFSET_RA(\r) |
sw $k1, EOFFSET_K1(\r) |
132,17 → 120,6 |
lw $t8, EOFFSET_T8(\r) |
lw $t9, EOFFSET_T9(\r) |
#ifdef CONFIG_DEBUG_ALLREGS |
lw $s0, EOFFSET_S0(\r) |
lw $s1, EOFFSET_S1(\r) |
lw $s2, EOFFSET_S2(\r) |
lw $s3, EOFFSET_S3(\r) |
lw $s4, EOFFSET_S4(\r) |
lw $s5, EOFFSET_S5(\r) |
lw $s6, EOFFSET_S6(\r) |
lw $s7, EOFFSET_S7(\r) |
lw $s8, EOFFSET_S8(\r) |
#endif |
lw $gp, EOFFSET_GP(\r) |
lw $ra, EOFFSET_RA(\r) |
lw $k1, EOFFSET_K1(\r) |
175,9 → 152,9 |
ori $k0, $k0, %lo(supervisor_sp) |
# Move $k0 (superveisor_sp) |
lw $k0, 0($k0) |
1: |
1: |
.endm |
.org 0x0 |
kernel_image_start: |
/* Load temporary stack */ |
184,31 → 161,12 |
lui $sp, %hi(end_stack) |
ori $sp, $sp, %lo(end_stack) |
/* $a1 contains physical address of bootinfo_t */ |
/* $a2 contains size of bootinfo_t */ |
beq $a2, $0, bootinfo_end |
/* Not sure about this, but might be needed for PIC code???? */ |
/* Not sure about this, but might |
be needed for PIC code */ |
lui $gp, 0x8000 |
lui $a3, %hi(bootinfo) |
ori $a3, $a3, %lo(bootinfo) |
/* $a1 contains physical address of bootinfo_t */ |
bootinfo_loop: |
lw $v0, 0($a1) |
sw $v0, 0($a3) |
addi $a1, $a1, 4 |
addi $a3, $a3, 4 |
addi $a2, $a2, -4 |
bgtz $a2, bootinfo_loop |
nop |
bootinfo_end: |
jal arch_pre_main |
nop |
228,8 → 186,8 |
exception_entry: |
j exception_handler |
nop |
nop |
exception_handler: |
KERNEL_STACK_TO_K0 |
sub $k0, REGISTER_SPACE |
238,17 → 196,17 |
mfc0 $k0, $cause |
sra $k0, $k0, 0x2 # cp0_exc_cause() part 1 |
andi $k0, $k0, 0x1f # cp0_exc_cause() part 2 |
sub $k0, 8 # 8 = SYSCALL |
sra $k0, $k0, 0x2 # cp0_exc_cause() part 1 |
andi $k0, $k0, 0x1f # cp0_exc_cause() part 2 |
sub $k0, 8 # 8 = SYSCALL |
beqz $k0, syscall_shortcut |
add $k0, 8 # Revert $k0 back to correct exc number |
add $k0, 8 # Revert $k0 back to correct exc number |
REGISTERS_STORE_AND_EXC_RESET $sp |
move $a1, $sp |
jal exc_dispatch # exc_dispatch(excno, register_space) |
jal exc_dispatch # exc_dispatch(excno, register_space) |
move $a0, $k0 |
REGISTERS_LOAD $sp |
//branches/tracing/kernel/arch/ia32/_link.ld.in |
---|
1,11 → 1,11 |
/** IA-32 linker script |
* |
* |
* umapped section: |
* kernel text |
* kernel data |
* kernel text |
* kernel data |
* mapped section: |
* kernel text |
* kernel data |
* kernel text |
* kernel data |
*/ |
#include <arch/boot/boot.h> |
28,9 → 28,9 |
ktext_end = .; |
kdata_start = .; |
*(.data); /* initialized data */ |
*(.rodata*); /* string literals */ |
*(COMMON); /* global variables */ |
*(.data); /* initialized data */ |
*(.rodata*); /* string literals */ |
*(COMMON); /* global variables */ |
hardcoded_load_address = .; |
LONG(PA2KA(BOOT_OFFSET)); |
hardcoded_ktext_size = .; |
42,23 → 42,23 |
hardcoded_unmapped_kdata_size = .; |
LONG(unmapped_kdata_end - unmapped_kdata_start); |
symbol_table = .; |
*(symtab.*); /* Symbol table, must be LAST symbol! */ |
*(.bss); /* uninitialized static variables */ |
*(symtab.*); /* Symbol table, must be LAST symbol! */ |
*(.bss); /* uninitialized static variables */ |
kdata_end = .; |
} |
/DISCARD/ : { |
*(.note.GNU-stack); |
*(.note.GNU-stack); |
*(.comment); |
} |
#ifdef CONFIG_SMP |
#ifdef CONFIG_SMP |
_hardcoded_unmapped_size = (unmapped_ktext_end - unmapped_ktext_start) + (unmapped_kdata_end - unmapped_kdata_start); |
ap_boot = unmapped_ap_boot - BOOT_OFFSET + AP_BOOT_OFFSET; |
ap_gdtr = unmapped_ap_gdtr - BOOT_OFFSET + AP_BOOT_OFFSET; |
protected_ap_gdtr = PA2KA(ap_gdtr); |
#endif /* CONFIG_SMP */ |
} |
//branches/tracing/kernel/arch/ia32/include/interrupt.h |
---|
73,10 → 73,6 |
uint32_t eax; |
uint32_t ecx; |
uint32_t edx; |
uint32_t esi; |
uint32_t edi; |
uint32_t ebp; |
uint32_t ebx; |
uint32_t gs; |
uint32_t fs; |
//branches/tracing/kernel/arch/ia32/include/fpu_context.h |
---|
37,7 → 37,6 |
#include <arch/types.h> |
#define ARCH_HAS_FPU |
#define FPU_CONTEXT_ALIGN 16 |
void fpu_fxsr(void); |
//branches/tracing/kernel/arch/ia32/include/types.h |
---|
57,6 → 57,9 |
typedef uint32_t unative_t; |
typedef int32_t native_t; |
typedef struct { |
} fncptr_t; |
#define PRIp "x" /**< Format for uintptr_t. */ |
#define PRIs "u" /**< Format for size_t. */ |
#define PRIc "u" /**< Format for count_t. */ |
//branches/tracing/kernel/arch/ia32/include/cpuid.h |
---|
35,6 → 35,13 |
#ifndef KERN_ia32_CPUID_H_ |
#define KERN_ia32_CPUID_H_ |
#define INTEL_CPUID_LEVEL 0x00000000 |
#define INTEL_CPUID_STANDARD 0x00000001 |
#define INTEL_PSE 3 |
#define INTEL_SEP 11 |
#ifndef __ASM__ |
#include <arch/types.h> |
typedef struct { |
74,21 → 81,21 |
uint32_t val, ret; |
asm volatile ( |
"pushf\n" /* read flags */ |
"popl %0\n" |
"movl %0, %1\n" |
"pushf\n" /* read flags */ |
"popl %[ret]\n" |
"movl %[ret], %[val]\n" |
"btcl $21, %1\n" /* swap the ID bit */ |
"btcl $21, %[val]\n" /* swap the ID bit */ |
"pushl %1\n" /* propagate the change into flags */ |
"pushl %[val]\n" /* propagate the change into flags */ |
"popf\n" |
"pushf\n" |
"popl %1\n" |
"popl %[val]\n" |
"andl $(1 << 21), %0\n" /* interrested only in ID bit */ |
"andl $(1 << 21), %1\n" |
"xorl %1, %0\n" |
: "=r" (ret), "=r" (val) |
"andl $(1 << 21), %[ret]\n" /* interrested only in ID bit */ |
"andl $(1 << 21), %[val]\n" |
"xorl %[val], %[ret]\n" |
: [ret] "=r" (ret), [val] "=r" (val) |
); |
return ret; |
98,11 → 105,13 |
{ |
asm volatile ( |
"cpuid\n" |
: "=a" (info->cpuid_eax), "=b" (info->cpuid_ebx), "=c" (info->cpuid_ecx), "=d" (info->cpuid_edx) |
: "=a" (info->cpuid_eax), "=b" (info->cpuid_ebx), |
"=c" (info->cpuid_ecx), "=d" (info->cpuid_edx) |
: "a" (cmd) |
); |
} |
#endif /* !def __ASM__ */ |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia32/include/atomic.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
41,17 → 41,29 |
static inline void atomic_inc(atomic_t *val) { |
#ifdef CONFIG_SMP |
asm volatile ("lock incl %0\n" : "+m" (val->count)); |
asm volatile ( |
"lock incl %[count]\n" |
: [count] "+m" (val->count) |
); |
#else |
asm volatile ("incl %0\n" : "+m" (val->count)); |
asm volatile ( |
"incl %[count]\n" |
: [count] "+m" (val->count) |
); |
#endif /* CONFIG_SMP */ |
} |
static inline void atomic_dec(atomic_t *val) { |
#ifdef CONFIG_SMP |
asm volatile ("lock decl %0\n" : "+m" (val->count)); |
asm volatile ( |
"lock decl %[count]\n" |
: [count] "+m" (val->count) |
); |
#else |
asm volatile ("decl %0\n" : "+m" (val->count)); |
asm volatile ( |
"decl %[count]\n" |
: [count] "+m" (val->count) |
); |
#endif /* CONFIG_SMP */ |
} |
58,12 → 70,12 |
static inline long atomic_postinc(atomic_t *val) |
{ |
long r = 1; |
asm volatile ( |
"lock xaddl %1, %0\n" |
: "+m" (val->count), "+r" (r) |
"lock xaddl %[r], %[count]\n" |
: [count] "+m" (val->count), [r] "+r" (r) |
); |
return r; |
} |
72,23 → 84,23 |
long r = -1; |
asm volatile ( |
"lock xaddl %1, %0\n" |
: "+m" (val->count), "+r"(r) |
"lock xaddl %[r], %[count]\n" |
: [count] "+m" (val->count), [r] "+r"(r) |
); |
return r; |
} |
#define atomic_preinc(val) (atomic_postinc(val) + 1) |
#define atomic_predec(val) (atomic_postdec(val) - 1) |
#define atomic_preinc(val) (atomic_postinc(val) + 1) |
#define atomic_predec(val) (atomic_postdec(val) - 1) |
static inline uint32_t test_and_set(atomic_t *val) { |
uint32_t v; |
asm volatile ( |
"movl $1, %0\n" |
"xchgl %0, %1\n" |
: "=r" (v),"+m" (val->count) |
"movl $1, %[v]\n" |
"xchgl %[v], %[count]\n" |
: [v] "=r" (v), [count] "+m" (val->count) |
); |
return v; |
98,22 → 110,22 |
static inline void atomic_lock_arch(atomic_t *val) |
{ |
uint32_t tmp; |
preemption_disable(); |
asm volatile ( |
"0:\n" |
#ifdef CONFIG_HT |
"pause\n" /* Pentium 4's HT love this instruction */ |
"pause\n" /* Pentium 4's HT love this instruction */ |
#endif |
"mov %0, %1\n" |
"testl %1, %1\n" |
"mov %[count], %[tmp]\n" |
"testl %[tmp], %[tmp]\n" |
"jnz 0b\n" /* lightweight looping on locked spinlock */ |
"incl %1\n" /* now use the atomic operation */ |
"xchgl %0, %1\n" |
"testl %1, %1\n" |
"incl %[tmp]\n" /* now use the atomic operation */ |
"xchgl %[count], %[tmp]\n" |
"testl %[tmp], %[tmp]\n" |
"jnz 0b\n" |
: "+m" (val->count), "=&r"(tmp) |
: [count] "+m" (val->count), [tmp] "=&r" (tmp) |
); |
/* |
* Prevent critical section code from bleeding out this way up. |
//branches/tracing/kernel/arch/ia32/include/pm.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
35,61 → 35,59 |
#ifndef KERN_ia32_PM_H_ |
#define KERN_ia32_PM_H_ |
#define IDT_ITEMS 64 |
#define GDT_ITEMS 7 |
#define IDT_ITEMS 64 |
#define GDT_ITEMS 7 |
#define VESA_INIT_SEGMENT 0x8000 |
#define NULL_DES 0 |
#define KTEXT_DES 1 |
#define KDATA_DES 2 |
#define UTEXT_DES 3 |
#define UDATA_DES 4 |
#define TSS_DES 5 |
#define TLS_DES 6 /* Pointer to Thread-Local-Storage data */ |
#define NULL_DES 0 |
#define KTEXT_DES 1 |
#define KDATA_DES 2 |
#define UTEXT_DES 3 |
#define UDATA_DES 4 |
#define TSS_DES 5 |
#define TLS_DES 6 /* Pointer to Thread-Local-Storage data */ |
#ifdef CONFIG_FB |
#define VESA_INIT_SEGMENT 0x8000 |
#define VESA_INIT_DES 7 |
#define VESA_INIT_SEGMENT 0x8000 |
#define VESA_INIT_DES 7 |
#define KTEXT32_DES KTEXT_DES |
#undef GDT_ITEMS |
#define GDT_ITEMS 8 |
#define GDT_ITEMS 8 |
#endif /* CONFIG_FB */ |
#define gdtselector(des) ((des) << 3) |
#define selector(des) ((des) << 3) |
#define PL_KERNEL 0 |
#define PL_USER 3 |
#define PL_KERNEL 0 |
#define PL_USER 3 |
#define AR_PRESENT (1 << 7) |
#define AR_DATA (2 << 3) |
#define AR_CODE (3 << 3) |
#define AR_WRITABLE (1 << 1) |
#define AR_INTERRUPT (0x0e) |
#define AR_TSS (0x09) |
#define AR_PRESENT (1 << 7) |
#define AR_DATA (2 << 3) |
#define AR_CODE (3 << 3) |
#define AR_WRITABLE (1 << 1) |
#define AR_INTERRUPT (0xe) |
#define AR_TSS (0x9) |
#define DPL_KERNEL (PL_KERNEL << 5) |
#define DPL_USER (PL_USER << 5) |
#define DPL_KERNEL (PL_KERNEL << 5) |
#define DPL_USER (PL_USER << 5) |
#define TSS_BASIC_SIZE 104 |
#define TSS_IOMAP_SIZE (16 * 1024 + 1) /* 16K for bitmap + 1 terminating byte for convenience */ |
#define TSS_BASIC_SIZE 104 |
#define TSS_IOMAP_SIZE (16 * 1024 + 1) /* 16K for bitmap + 1 terminating byte for convenience */ |
#define IO_PORTS (64 * 1024) |
#define IO_PORTS (64 * 1024) |
#ifndef __ASM__ |
#include <arch/types.h> |
#include <arch/context.h> |
struct ptr_16_32 { |
typedef struct { |
uint16_t limit; |
uint32_t base; |
} __attribute__ ((packed)); |
typedef struct ptr_16_32 ptr_16_32_t; |
} __attribute__ ((packed)) ptr_16_32_t; |
struct descriptor { |
typedef struct { |
unsigned limit_0_15: 16; |
unsigned base_0_15: 16; |
unsigned base_16_23: 8; |
100,19 → 98,17 |
unsigned special: 1; |
unsigned granularity : 1; |
unsigned base_24_31: 8; |
} __attribute__ ((packed)); |
typedef struct descriptor descriptor_t; |
} __attribute__ ((packed)) descriptor_t; |
struct idescriptor { |
typedef struct { |
unsigned offset_0_15: 16; |
unsigned selector: 16; |
unsigned unused: 8; |
unsigned access: 8; |
unsigned offset_16_31: 16; |
} __attribute__ ((packed)); |
typedef struct idescriptor idescriptor_t; |
} __attribute__ ((packed)) idescriptor_t; |
struct tss { |
typedef struct { |
uint16_t link; |
unsigned : 16; |
uint32_t esp0; |
152,13 → 148,12 |
unsigned : 16; |
uint16_t iomap_base; |
uint8_t iomap[TSS_IOMAP_SIZE]; |
} __attribute__ ((packed)); |
typedef struct tss tss_t; |
} __attribute__ ((packed)) tss_t; |
extern ptr_16_32_t gdtr; |
extern ptr_16_32_t bootstrap_gdtr; |
extern ptr_16_32_t protected_ap_gdtr; |
extern struct tss *tss_p; |
extern tss_t *tss_p; |
extern descriptor_t gdt[]; |
//branches/tracing/kernel/arch/ia32/include/boot/memmap.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
35,24 → 35,29 |
#ifndef KERN_ia32_MEMMAP_H_ |
#define KERN_ia32_MEMMAP_H_ |
/* E820h memory range types - other values*/ |
/* Free memory */ |
#define MEMMAP_MEMORY_AVAILABLE 1 |
/* Not available for OS */ |
#define MEMMAP_MEMORY_RESERVED 2 |
/* OS may use it after reading ACPI table */ |
#define MEMMAP_MEMORY_ACPI 3 |
/* Unusable, required to be saved and restored across an NVS sleep */ |
#define MEMMAP_MEMORY_NVS 4 |
/* Corrupted memory */ |
#define MEMMAP_MEMORY_UNUSABLE 5 |
/* E820h memory range types */ |
/* size of one entry */ |
#define MEMMAP_E820_RECORD_SIZE 20 |
/* maximum entries */ |
#define MEMMAP_E820_MAX_RECORDS 32 |
/* Free memory */ |
#define MEMMAP_MEMORY_AVAILABLE 1 |
/* Not available for OS */ |
#define MEMMAP_MEMORY_RESERVED 2 |
/* OS may use it after reading ACPI table */ |
#define MEMMAP_MEMORY_ACPI 3 |
/* Unusable, required to be saved and restored across an NVS sleep */ |
#define MEMMAP_MEMORY_NVS 4 |
/* Corrupted memory */ |
#define MEMMAP_MEMORY_UNUSABLE 5 |
/* Size of one entry */ |
#define MEMMAP_E820_RECORD_SIZE 20 |
/* Maximum entries */ |
#define MEMMAP_E820_MAX_RECORDS 32 |
#ifndef __ASM__ |
#include <arch/types.h> |
//branches/tracing/kernel/arch/ia32/include/boot/boot.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
35,15 → 35,24 |
#ifndef KERN_ia32_BOOT_H_ |
#define KERN_ia32_BOOT_H_ |
#define BOOT_OFFSET 0x108000 |
#define AP_BOOT_OFFSET 0x8000 |
#define BOOT_STACK_SIZE 0x400 |
#define BOOT_OFFSET 0x108000 |
#define AP_BOOT_OFFSET 0x8000 |
#define BOOT_STACK_SIZE 0x400 |
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 |
#define MULTIBOOT_HEADER_FLAGS 0x00010003 |
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002 |
#define MULTIBOOT_HEADER_FLAGS 0x00010003 |
#define MULTIBOOT_LOADER_MAGIC 0x2BADB002 |
#ifndef __ASM__ |
#ifdef CONFIG_SMP |
/* This is only a symbol so the type is dummy. Obtain the value using &. */ |
extern int _hardcoded_unmapped_size; |
#endif /* CONFIG_SMP */ |
#endif /* __ASM__ */ |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia32/include/arch.h |
---|
1,5 → 1,5 |
/* |
* Copyright (c) 2005 Martin Decky |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
35,6 → 35,10 |
#ifndef KERN_ia32_ARCH_H_ |
#define KERN_ia32_ARCH_H_ |
#include <genarch/multiboot/multiboot.h> |
extern void arch_pre_main(uint32_t, const multiboot_info_t *); |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia32/include/asm.h |
---|
27,7 → 27,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
38,6 → 38,7 |
#include <arch/pm.h> |
#include <arch/types.h> |
#include <typedefs.h> |
#include <config.h> |
extern uint32_t interrupt_handler_size; |
55,11 → 56,16 |
/** Halt CPU |
* |
* Halt the current CPU until interrupt event. |
* Halt the current CPU. |
* |
*/ |
static inline void cpu_halt(void) |
{ |
asm volatile ("hlt\n"); |
asm volatile ( |
"0:\n" |
" hlt\n" |
" jmp 0b\n" |
); |
} |
static inline void cpu_sleep(void) |
68,16 → 74,22 |
} |
#define GEN_READ_REG(reg) static inline unative_t read_ ##reg (void) \ |
{ \ |
unative_t res; \ |
asm volatile ("movl %%" #reg ", %0" : "=r" (res) ); \ |
return res; \ |
} |
{ \ |
unative_t res; \ |
asm volatile ( \ |
"movl %%" #reg ", %[res]" \ |
: [res] "=r" (res) \ |
); \ |
return res; \ |
} |
#define GEN_WRITE_REG(reg) static inline void write_ ##reg (unative_t regn) \ |
{ \ |
asm volatile ("movl %0, %%" #reg : : "r" (regn)); \ |
} |
{ \ |
asm volatile ( \ |
"movl %[regn], %%" #reg \ |
:: [regn] "r" (regn) \ |
); \ |
} |
GEN_READ_REG(cr0) |
GEN_READ_REG(cr2) |
104,10 → 116,14 |
* |
* @param port Port to write to |
* @param val Value to write |
* |
*/ |
static inline void outb(uint16_t port, uint8_t val) |
static inline void pio_write_8(ioport8_t *port, uint8_t val) |
{ |
asm volatile ("outb %b0, %w1\n" : : "a" (val), "d" (port) ); |
asm volatile ( |
"outb %b[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
/** Word to port |
116,10 → 132,14 |
* |
* @param port Port to write to |
* @param val Value to write |
* |
*/ |
static inline void outw(uint16_t port, uint16_t val) |
static inline void pio_write_16(ioport16_t *port, uint16_t val) |
{ |
asm volatile ("outw %w0, %w1\n" : : "a" (val), "d" (port) ); |
asm volatile ( |
"outw %w[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
/** Double word to port |
128,10 → 148,14 |
* |
* @param port Port to write to |
* @param val Value to write |
* |
*/ |
static inline void outl(uint16_t port, uint32_t val) |
static inline void pio_write_32(ioport32_t *port, uint32_t val) |
{ |
asm volatile ("outl %l0, %w1\n" : : "a" (val), "d" (port) ); |
asm volatile ( |
"outl %[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
/** Byte from port |
140,12 → 164,18 |
* |
* @param port Port to read from |
* @return Value read |
* |
*/ |
static inline uint8_t inb(uint16_t port) |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
uint8_t val; |
asm volatile ("inb %w1, %b0 \n" : "=a" (val) : "d" (port) ); |
asm volatile ( |
"inb %w[port], %b[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
155,12 → 185,18 |
* |
* @param port Port to read from |
* @return Value read |
* |
*/ |
static inline uint16_t inw(uint16_t port) |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
uint16_t val; |
asm volatile ("inw %w1, %w0 \n" : "=a" (val) : "d" (port) ); |
asm volatile ( |
"inw %w[port], %w[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
170,12 → 206,18 |
* |
* @param port Port to read from |
* @return Value read |
* |
*/ |
static inline uint32_t inl(uint16_t port) |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
uint32_t val; |
asm volatile ("inl %w1, %l0 \n" : "=a" (val) : "d" (port) ); |
asm volatile ( |
"inl %w[port], %[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
185,16 → 227,19 |
* value of EFLAGS. |
* |
* @return Old interrupt priority level. |
* |
*/ |
static inline ipl_t interrupts_enable(void) |
{ |
ipl_t v; |
asm volatile ( |
"pushf\n\t" |
"popl %0\n\t" |
"pushf\n" |
"popl %[v]\n" |
"sti\n" |
: "=r" (v) |
: [v] "=r" (v) |
); |
return v; |
} |
204,16 → 249,19 |
* value of EFLAGS. |
* |
* @return Old interrupt priority level. |
* |
*/ |
static inline ipl_t interrupts_disable(void) |
{ |
ipl_t v; |
asm volatile ( |
"pushf\n\t" |
"popl %0\n\t" |
"pushf\n" |
"popl %[v]\n" |
"cli\n" |
: "=r" (v) |
: [v] "=r" (v) |
); |
return v; |
} |
222,13 → 270,14 |
* Restore EFLAGS. |
* |
* @param ipl Saved interrupt priority level. |
* |
*/ |
static inline void interrupts_restore(ipl_t ipl) |
{ |
asm volatile ( |
"pushl %0\n\t" |
"pushl %[ipl]\n" |
"popf\n" |
: : "r" (ipl) |
:: [ipl] "r" (ipl) |
); |
} |
235,15 → 284,18 |
/** Return interrupt priority level. |
* |
* @return EFLAFS. |
* |
*/ |
static inline ipl_t interrupts_read(void) |
{ |
ipl_t v; |
asm volatile ( |
"pushf\n\t" |
"popl %0\n" |
: "=r" (v) |
"pushf\n" |
"popl %[v]\n" |
: [v] "=r" (v) |
); |
return v; |
} |
250,16 → 302,24 |
/** Write to MSR */ |
static inline void write_msr(uint32_t msr, uint64_t value) |
{ |
asm volatile ("wrmsr" : : "c" (msr), "a" ((uint32_t)(value)), |
"d" ((uint32_t)(value >> 32))); |
asm volatile ( |
"wrmsr" |
:: "c" (msr), "a" ((uint32_t) (value)), |
"d" ((uint32_t) (value >> 32)) |
); |
} |
static inline uint64_t read_msr(uint32_t msr) |
{ |
uint32_t ax, dx; |
asm volatile ("rdmsr" : "=a"(ax), "=d"(dx) : "c" (msr)); |
return ((uint64_t)dx << 32) | ax; |
asm volatile ( |
"rdmsr" |
: "=a" (ax), "=d" (dx) |
: "c" (msr) |
); |
return ((uint64_t) dx << 32) | ax; |
} |
268,6 → 328,7 |
* Return the base address of the current stack. |
* The stack is assumed to be STACK_SIZE bytes long. |
* The stack must start on page boundary. |
* |
*/ |
static inline uintptr_t get_stack_base(void) |
{ |
274,8 → 335,8 |
uintptr_t v; |
asm volatile ( |
"andl %%esp, %0\n" |
: "=r" (v) |
"andl %%esp, %[v]\n" |
: [v] "=r" (v) |
: "0" (~(STACK_SIZE - 1)) |
); |
286,11 → 347,12 |
static inline uintptr_t * get_ip() |
{ |
uintptr_t *ip; |
asm volatile ( |
"mov %%eip, %0" |
: "=r" (ip) |
); |
"mov %%eip, %[ip]" |
: [ip] "=r" (ip) |
); |
return ip; |
} |
297,46 → 359,66 |
/** Invalidate TLB Entry. |
* |
* @param addr Address on a page whose TLB entry is to be invalidated. |
* |
*/ |
static inline void invlpg(uintptr_t addr) |
{ |
asm volatile ("invlpg %0\n" :: "m" (*(unative_t *)addr)); |
asm volatile ( |
"invlpg %[addr]\n" |
:: [addr] "m" (*(unative_t *) addr) |
); |
} |
/** Load GDTR register from memory. |
* |
* @param gdtr_reg Address of memory from where to load GDTR. |
* |
*/ |
static inline void gdtr_load(ptr_16_32_t *gdtr_reg) |
{ |
asm volatile ("lgdtl %0\n" : : "m" (*gdtr_reg)); |
asm volatile ( |
"lgdtl %[gdtr_reg]\n" |
:: [gdtr_reg] "m" (*gdtr_reg) |
); |
} |
/** Store GDTR register to memory. |
* |
* @param gdtr_reg Address of memory to where to load GDTR. |
* |
*/ |
static inline void gdtr_store(ptr_16_32_t *gdtr_reg) |
{ |
asm volatile ("sgdtl %0\n" : : "m" (*gdtr_reg)); |
asm volatile ( |
"sgdtl %[gdtr_reg]\n" |
:: [gdtr_reg] "m" (*gdtr_reg) |
); |
} |
/** Load IDTR register from memory. |
* |
* @param idtr_reg Address of memory from where to load IDTR. |
* |
*/ |
static inline void idtr_load(ptr_16_32_t *idtr_reg) |
{ |
asm volatile ("lidtl %0\n" : : "m" (*idtr_reg)); |
asm volatile ( |
"lidtl %[idtr_reg]\n" |
:: [idtr_reg] "m" (*idtr_reg) |
); |
} |
/** Load TR from descriptor table. |
* |
* @param sel Selector specifying descriptor of TSS segment. |
* |
*/ |
static inline void tr_load(uint16_t sel) |
{ |
asm volatile ("ltr %0" : : "r" (sel)); |
asm volatile ( |
"ltr %[sel]" |
:: [sel] "r" (sel) |
); |
} |
#endif |
//branches/tracing/kernel/arch/ia32/include/mm/frame.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32mm |
/** @addtogroup ia32mm |
* @{ |
*/ |
/** @file |
35,8 → 35,8 |
#ifndef KERN_ia32_FRAME_H_ |
#define KERN_ia32_FRAME_H_ |
#define FRAME_WIDTH 12 /* 4K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#define FRAME_WIDTH 12 /* 4K */ |
#define FRAME_SIZE (1 << FRAME_WIDTH) |
#ifdef KERNEL |
#ifndef __ASM__ |
//branches/tracing/kernel/arch/ia32/include/mm/tlb.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32mm |
/** @addtogroup ia32mm |
* @{ |
*/ |
/** @file |
35,9 → 35,6 |
#ifndef KERN_ia32_TLB_H_ |
#define KERN_ia32_TLB_H_ |
#define tlb_arch_init() |
#define tlb_print() |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia32/include/mm/as.h |
---|
42,7 → 42,7 |
#define USER_ADDRESS_SPACE_START_ARCH ((unsigned long) 0x00000000) |
#define USER_ADDRESS_SPACE_END_ARCH ((unsigned long) 0x7fffffff) |
#define USTACK_ADDRESS_ARCH (USER_ADDRESS_SPACE_END_ARCH-(PAGE_SIZE-1)) |
#define USTACK_ADDRESS_ARCH (USER_ADDRESS_SPACE_END_ARCH - (PAGE_SIZE - 1)) |
typedef struct { |
} as_arch_t; |
//branches/tracing/kernel/arch/ia32/include/barrier.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
46,8 → 46,8 |
* Provisions are made to prevent compiler from reordering instructions itself. |
*/ |
#define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") |
#define CS_ENTER_BARRIER() asm volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() asm volatile ("" ::: "memory") |
static inline void cpuid_serialization(void) |
{ |
58,30 → 58,30 |
); |
} |
#ifdef CONFIG_FENCES_P4 |
# define memory_barrier() asm volatile ("mfence\n" ::: "memory") |
# define read_barrier() asm volatile ("lfence\n" ::: "memory") |
# ifdef CONFIG_WEAK_MEMORY |
# define write_barrier() asm volatile ("sfence\n" ::: "memory") |
# else |
# define write_barrier() asm volatile( "" ::: "memory"); |
# endif |
#elif CONFIG_FENCES_P3 |
# define memory_barrier() cpuid_serialization() |
# define read_barrier() cpuid_serialization() |
# ifdef CONFIG_WEAK_MEMORY |
# define write_barrier() asm volatile ("sfence\n" ::: "memory") |
# else |
# define write_barrier() asm volatile( "" ::: "memory"); |
# endif |
#if defined(CONFIG_FENCES_P4) |
#define memory_barrier() asm volatile ("mfence\n" ::: "memory") |
#define read_barrier() asm volatile ("lfence\n" ::: "memory") |
#ifdef CONFIG_WEAK_MEMORY |
#define write_barrier() asm volatile ("sfence\n" ::: "memory") |
#else |
#define write_barrier() asm volatile ("" ::: "memory"); |
#endif |
#elif defined(CONFIG_FENCES_P3) |
#define memory_barrier() cpuid_serialization() |
#define read_barrier() cpuid_serialization() |
#ifdef CONFIG_WEAK_MEMORY |
#define write_barrier() asm volatile ("sfence\n" ::: "memory") |
#else |
#define write_barrier() asm volatile ("" ::: "memory"); |
#endif |
#else |
# define memory_barrier() cpuid_serialization() |
# define read_barrier() cpuid_serialization() |
# ifdef CONFIG_WEAK_MEMORY |
# define write_barrier() cpuid_serialization() |
# else |
# define write_barrier() asm volatile( "" ::: "memory"); |
# endif |
#define memory_barrier() cpuid_serialization() |
#define read_barrier() cpuid_serialization() |
#ifdef CONFIG_WEAK_MEMORY |
#define write_barrier() cpuid_serialization() |
#else |
#define write_barrier() asm volatile ("" ::: "memory"); |
#endif |
#endif |
/* |
90,8 → 90,8 |
* queueing in the store buffer drain to the memory (even though it would be |
* sufficient for them to drain to the D-cache). |
*/ |
#define smc_coherence(a) write_barrier() |
#define smc_coherence_block(a, l) write_barrier() |
#define smc_coherence(a) write_barrier() |
#define smc_coherence_block(a, l) write_barrier() |
#endif |
//branches/tracing/kernel/arch/ia32/include/cpu.h |
---|
51,11 → 51,11 |
#include <arch/asm.h> |
typedef struct { |
int vendor; |
int family; |
int model; |
int stepping; |
struct tss *tss; |
unsigned int vendor; |
unsigned int family; |
unsigned int model; |
unsigned int stepping; |
tss_t *tss; |
count_t iomapver_copy; /** Copy of TASK's I/O Permission bitmap generation count. */ |
} cpu_arch_t; |
//branches/tracing/kernel/arch/ia32/include/drivers/i8042.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32/include/drivers/ega.h |
---|
File deleted |
//branches/tracing/kernel/arch/ia32/include/drivers/i8254.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
//branches/tracing/kernel/arch/ia32/include/drivers/vesa.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
36,6 → 36,7 |
#define KERN_ia32_VESA_H_ |
extern int vesa_present(void); |
extern void vesa_redraw(void); |
extern void vesa_init(void); |
#endif |
//branches/tracing/kernel/arch/ia32/include/drivers/i8259.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
38,13 → 38,13 |
#include <arch/types.h> |
#include <arch/interrupt.h> |
#define PIC_PIC0PORT1 0x20 |
#define PIC_PIC0PORT2 0x21 |
#define PIC_PIC1PORT1 0xa0 |
#define PIC_PIC1PORT2 0xa1 |
#define PIC_PIC0PORT1 ((ioport8_t *) 0x20) |
#define PIC_PIC0PORT2 ((ioport8_t *) 0x21) |
#define PIC_PIC1PORT1 ((ioport8_t *) 0xa0) |
#define PIC_PIC1PORT2 ((ioport8_t *) 0xa1) |
#define PIC_NEEDICW4 (1<<0) |
#define PIC_ICW1 (1<<4) |
#define PIC_NEEDICW4 (1 << 0) |
#define PIC_ICW1 (1 << 4) |
extern void i8259_init(void); |
extern void pic_enable_irqs(uint16_t irqmask); |
//branches/tracing/kernel/arch/ia32/Makefile.inc |
---|
29,10 → 29,6 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
BFD_NAME = elf32-i386 |
BFD_ARCH = i386 |
BFD = binary |
39,7 → 35,7 |
TARGET = i686-pc-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/i686 |
DEFS += -DMACHINE=$(MACHINE) -D__32_BITS__ |
DEFS += -D__32_BITS__ |
CMN1 = -m32 |
GCC_CFLAGS += $(CMN1) |
49,121 → 45,66 |
## Accepted CPUs |
# |
ifeq ($(MACHINE),athlon-xp) |
FPU_NO_CFLAGS = -mno-mmx -mno-sse -mno-3dnow |
ifeq ($(PROCESSOR),athlon_xp) |
CMN2 = -march=athlon-xp |
GCC_CFLAGS += $(CMN2) |
ICC_CFLAGS += $(CMN2) |
SUNCC_CFLAGS += -xarch=ssea |
DEFS += -DCONFIG_FENCES_P3 |
CONFIG_SMP = n |
CONFIG_HT = n |
endif |
ifeq ($(MACHINE),athlon-mp) |
FPU_NO_CFLAGS = -mno-mmx -mno-sse -mno-3dnow |
ifeq ($(PROCESSOR),athlon_mp) |
CMN2 = -march=athlon-mp |
GCC_CFLAGS += $(CMN2) |
ICC_CFLAGS += $(CMN2) |
SUNCC_CFLAGS += xarch=ssea |
DEFS += -DCONFIG_FENCES_P3 |
CONFIG_HT = n |
endif |
ifeq ($(MACHINE),pentium3) |
FPU_NO_CFLAGS = -mno-mmx -mno-sse |
ifeq ($(PROCESSOR),pentium3) |
CMN2 = -march=pentium3 |
GCC_CFLAGS += $(CMN2) |
ICC_CFLAGS += $(CMN2) |
SUNCC_CFLAGS += -xarch=sse |
DEFS += -DCONFIG_FENCES_P3 |
CONFIG_HT = n |
endif |
ifeq ($(MACHINE),core) |
FPU_NO_CFLAGS = -mno-mmx -mno-sse -mno-sse2 -mno-sse3 |
ifeq ($(PROCESSOR),pentium4) |
CMN2 = -march=pentium4 |
SUNCC_CFLAGS += -xarch=sse2 |
endif |
ifeq ($(PROCESSOR),core) |
CMN2 = -march=prescott |
GCC_CFLAGS += $(CMN2) |
ICC_CFLAGS += $(CMN2) |
SUNCC_CFLAGS += -xarch=sse3 |
DEFS += -DCONFIG_FENCES_P4 |
endif |
ifeq ($(MACHINE),pentium4) |
FPU_NO_CFLAGS = -mno-mmx -mno-sse -mno-sse2 |
GCC_CFLAGS += -march=pentium4 |
ICC_CFLAGS += -march=pentium4 |
SUNCC_CFLAGS += -xarch=sse2 |
DEFS += -DCONFIG_FENCES_P4 |
endif |
## Own configuration directives |
# |
FPU_NO_CFLAGS = -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow |
GCC_CFLAGS += $(CMN2) |
ICC_CFLAGS += $(CMN2) |
CONFIG_ACPI = y |
## Compile with hierarchical page tables support. |
# |
CONFIG_PAGE_PT = y |
DEFS += -DCONFIG_PAGE_PT |
## Compile with i8042 controller support |
# |
CONFIG_I8042 = y |
DEFS += -DCONFIG_I8042 |
## Accepted configuration directives |
# |
ifeq ($(CONFIG_SMP),y) |
DEFS += -DCONFIG_SMP |
endif |
ifeq ($(CONFIG_HT),y) |
DEFS += -DCONFIG_HT |
endif |
ifeq ($(CONFIG_SIMICS_FIX),y) |
DEFS += -DCONFIG_SIMICS_FIX |
endif |
## Compile with support for software integer division. |
# |
CONFIG_SOFTINT = y |
ARCH_SOURCES = \ |
arch/$(ARCH)/src/context.S \ |
arch/$(ARCH)/src/debug/panic.s \ |
arch/$(ARCH)/src/delay.s \ |
arch/$(ARCH)/src/asm.S \ |
arch/$(ARCH)/src/proc/scheduler.c \ |
arch/$(ARCH)/src/proc/task.c \ |
arch/$(ARCH)/src/proc/thread.c \ |
arch/$(ARCH)/src/bios/bios.c \ |
arch/$(ARCH)/src/smp/ap.S \ |
arch/$(ARCH)/src/smp/apic.c \ |
arch/$(ARCH)/src/smp/mps.c \ |
arch/$(ARCH)/src/smp/smp.c \ |
arch/$(ARCH)/src/atomic.S \ |
arch/$(ARCH)/src/smp/ipi.c \ |
arch/$(ARCH)/src/ia32.c \ |
arch/$(ARCH)/src/interrupt.c \ |
arch/$(ARCH)/src/pm.c \ |
arch/$(ARCH)/src/userspace.c \ |
arch/$(ARCH)/src/cpu/cpu.c \ |
arch/$(ARCH)/src/mm/as.c \ |
arch/$(ARCH)/src/mm/frame.c \ |
arch/$(ARCH)/src/mm/page.c \ |
arch/$(ARCH)/src/mm/tlb.c \ |
arch/$(ARCH)/src/ddi/ddi.c \ |
arch/$(ARCH)/src/drivers/i8254.c \ |
arch/$(ARCH)/src/drivers/i8259.c \ |
arch/$(ARCH)/src/drivers/ega.c \ |
arch/$(ARCH)/src/drivers/vesa.c \ |
arch/$(ARCH)/src/boot/boot.S \ |
arch/$(ARCH)/src/boot/memmap.c \ |
arch/$(ARCH)/src/fpu_context.c \ |
arch/$(ARCH)/src/debugger.c \ |
arch/$(ARCH)/src/syscall.c |
arch/$(KARCH)/src/context.S \ |
arch/$(KARCH)/src/debug/panic.s \ |
arch/$(KARCH)/src/delay.s \ |
arch/$(KARCH)/src/asm.S \ |
arch/$(KARCH)/src/proc/scheduler.c \ |
arch/$(KARCH)/src/proc/task.c \ |
arch/$(KARCH)/src/proc/thread.c \ |
arch/$(KARCH)/src/bios/bios.c \ |
arch/$(KARCH)/src/smp/ap.S \ |
arch/$(KARCH)/src/smp/apic.c \ |
arch/$(KARCH)/src/smp/mps.c \ |
arch/$(KARCH)/src/smp/smp.c \ |
arch/$(KARCH)/src/atomic.S \ |
arch/$(KARCH)/src/smp/ipi.c \ |
arch/$(KARCH)/src/ia32.c \ |
arch/$(KARCH)/src/interrupt.c \ |
arch/$(KARCH)/src/pm.c \ |
arch/$(KARCH)/src/userspace.c \ |
arch/$(KARCH)/src/cpu/cpu.c \ |
arch/$(KARCH)/src/mm/as.c \ |
arch/$(KARCH)/src/mm/frame.c \ |
arch/$(KARCH)/src/mm/page.c \ |
arch/$(KARCH)/src/mm/tlb.c \ |
arch/$(KARCH)/src/ddi/ddi.c \ |
arch/$(KARCH)/src/drivers/i8254.c \ |
arch/$(KARCH)/src/drivers/i8259.c \ |
arch/$(KARCH)/src/drivers/vesa.c \ |
arch/$(KARCH)/src/boot/boot.S \ |
arch/$(KARCH)/src/boot/memmap.c \ |
arch/$(KARCH)/src/fpu_context.c \ |
arch/$(KARCH)/src/debugger.c \ |
arch/$(KARCH)/src/syscall.c |
ifeq ($(CONFIG_UDEBUG),y) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/breakpoint.c |
ARCH_SOURCES += \ |
arch/$(KARCH)/src/breakpoint.c |
endif |
//branches/tracing/kernel/arch/ia32/src/fpu_context.c |
---|
44,46 → 44,43 |
static void fpu_context_f_save(fpu_context_t *fctx) |
{ |
asm volatile ( |
"fnsave %0" |
: "=m"(*fctx) |
); |
"fnsave %[fctx]" |
: [fctx] "=m" (*fctx) |
); |
} |
static void fpu_context_f_restore(fpu_context_t *fctx) |
{ |
asm volatile ( |
"frstor %0" |
: "=m"(*fctx) |
); |
"frstor %[fctx]" |
: [fctx] "=m" (*fctx) |
); |
} |
static void fpu_context_fx_save(fpu_context_t *fctx) |
{ |
asm volatile ( |
"fxsave %0" |
: "=m"(*fctx) |
); |
"fxsave %[fctx]" |
: [fctx] "=m" (*fctx) |
); |
} |
static void fpu_context_fx_restore(fpu_context_t *fctx) |
{ |
asm volatile ( |
"fxrstor %0" |
: "=m"(*fctx) |
); |
"fxrstor %[fctx]" |
: [fctx] "=m" (*fctx) |
); |
} |
/* |
Setup using fxsr instruction |
*/ |
/* Setup using fxsr instruction */ |
void fpu_fxsr(void) |
{ |
fpu_save=fpu_context_fx_save; |
fpu_restore=fpu_context_fx_restore; |
} |
/* |
Setup using not fxsr instruction |
*/ |
/* Setup using not fxsr instruction */ |
void fpu_fsr(void) |
{ |
fpu_save = fpu_context_f_save; |
102,16 → 99,18 |
void fpu_init() |
{ |
uint32_t help0 = 0, help1 = 0; |
uint32_t help0 = 0; |
uint32_t help1 = 0; |
asm volatile ( |
"fninit;\n" |
"stmxcsr %0\n" |
"mov %0,%1;\n" |
"or %2,%1;\n" |
"mov %1,%0;\n" |
"ldmxcsr %0;\n" |
: "+m" (help0), "+r" (help1) |
: "i" (0x1f80) |
"fninit\n" |
"stmxcsr %[help0]\n" |
"mov %[help0], %[help1]\n" |
"or %[magic], %[help1]\n" |
"mov %[help1], %[help0]\n" |
"ldmxcsr %[help0]\n" |
: [help0] "+m" (help0), [help1] "+r" (help1) |
: [magic] "i" (0x1f80) |
); |
} |
//branches/tracing/kernel/arch/ia32/src/ia32.c |
---|
1,5 → 1,7 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* Copyright (c) 2009 Jiri Svoboda |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
38,9 → 40,12 |
#include <arch/pm.h> |
#include <arch/drivers/ega.h> |
#include <genarch/multiboot/multiboot.h> |
#include <genarch/drivers/legacy/ia32/io.h> |
#include <genarch/drivers/ega/ega.h> |
#include <arch/drivers/vesa.h> |
#include <genarch/kbd/i8042.h> |
#include <genarch/drivers/i8042/i8042.h> |
#include <genarch/kbrd/kbrd.h> |
#include <arch/drivers/i8254.h> |
#include <arch/drivers/i8259.h> |
61,12 → 66,30 |
#include <proc/thread.h> |
#include <syscall/syscall.h> |
#include <console/console.h> |
#include <ddi/device.h> |
#include <sysinfo/sysinfo.h> |
#include <arch/boot/boot.h> |
#ifdef CONFIG_SMP |
#include <arch/smp/apic.h> |
#endif |
/** Perform ia32-specific initialization before main_bsp() is called. |
* |
* @param signature Should contain the multiboot signature. |
* @param mi Pointer to the multiboot information structure. |
*/ |
void arch_pre_main(uint32_t signature, const multiboot_info_t *mi) |
{ |
/* Parse multiboot information obtained from the bootloader. */ |
multiboot_info_parse(signature, mi); |
#ifdef CONFIG_SMP |
/* Copy AP bootstrap routines below 1 MB. */ |
memcpy((void *) AP_BOOT_OFFSET, (void *) BOOT_OFFSET, |
(size_t) &_hardcoded_unmapped_size); |
#endif |
} |
void arch_pre_mm_init(void) |
{ |
pm_init(); |
88,13 → 111,17 |
/* hard clock */ |
i8254_init(); |
#ifdef CONFIG_FB |
if (vesa_present()) |
if (vesa_present()) |
vesa_init(); |
else |
#endif |
ega_init(); /* video */ |
#ifdef CONFIG_EGA |
ega_init(EGA_BASE, EGA_VIDEORAM); /* video */ |
#else |
{} |
#endif |
/* Enable debugger */ |
debugger_init(); |
129,10 → 156,33 |
void arch_post_smp_init(void) |
{ |
devno_t kbd = device_assign_devno(); |
devno_t mouse = device_assign_devno(); |
/* keyboard controller */ |
i8042_init(kbd, IRQ_KBD, mouse, IRQ_MOUSE); |
#ifdef CONFIG_PC_KBD |
/* |
* Initialize the i8042 controller. Then initialize the keyboard |
* module and connect it to i8042. Enable keyboard interrupts. |
*/ |
i8042_instance_t *i8042_instance = i8042_init((i8042_t *) I8042_BASE, IRQ_KBD); |
if (i8042_instance) { |
kbrd_instance_t *kbrd_instance = kbrd_init(); |
if (kbrd_instance) { |
indev_t *sink = stdin_wire(); |
indev_t *kbrd = kbrd_wire(kbrd_instance, sink); |
i8042_wire(i8042_instance, kbrd); |
trap_virtual_enable_irqs(1 << IRQ_KBD); |
} |
} |
/* |
* This is the necessary evil until the userspace driver is entirely |
* self-sufficient. |
*/ |
sysinfo_set_item_val("kbd", NULL, true); |
sysinfo_set_item_val("kbd.inr", NULL, IRQ_KBD); |
sysinfo_set_item_val("kbd.address.physical", NULL, |
(uintptr_t) I8042_BASE); |
sysinfo_set_item_val("kbd.address.kernel", NULL, |
(uintptr_t) I8042_BASE); |
#endif |
} |
void calibrate_delay_loop(void) |
165,15 → 215,45 |
*/ |
void arch_grab_console(void) |
{ |
i8042_grab(); |
#ifdef CONFIG_FB |
if (vesa_present()) |
vesa_redraw(); |
else |
#endif |
#ifdef CONFIG_EGA |
ega_redraw(); |
#else |
{} |
#endif |
} |
/** Return console to userspace |
* |
*/ |
void arch_release_console(void) |
{ |
i8042_release(); |
} |
/** Construct function pointer |
* |
* @param fptr function pointer structure |
* @param addr function address |
* @param caller calling function address |
* |
* @return address of the function pointer |
* |
*/ |
void *arch_construct_function(fncptr_t *fptr, void *addr, void *caller) |
{ |
return addr; |
} |
void arch_reboot(void) |
{ |
#ifdef CONFIG_PC_KBD |
i8042_cpu_reset((i8042_t *) I8042_BASE); |
#endif |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia32/src/asm.S |
---|
268,14 → 268,6 |
pushl %fs |
pushl %gs |
#ifdef CONFIG_DEBUG_ALLREGS |
pushl %ebx |
pushl %ebp |
pushl %edi |
pushl %esi |
#else |
subl $16, %esp |
#endif |
pushl %edx |
pushl %ecx |
pushl %eax |
297,14 → 289,6 |
popl %eax |
popl %ecx |
popl %edx |
#ifdef CONFIG_DEBUG_ALLREGS |
popl %esi |
popl %edi |
popl %ebp |
popl %ebx |
#else |
addl $16, %esp |
#endif |
popl %gs |
popl %fs |
//branches/tracing/kernel/arch/ia32/src/cpu/cpu.c |
---|
48,17 → 48,17 |
* Identification of CPUs. |
* Contains only non-MP-Specification specific SMP code. |
*/ |
#define AMD_CPUID_EBX 0x68747541 |
#define AMD_CPUID_ECX 0x444d4163 |
#define AMD_CPUID_EDX 0x69746e65 |
#define AMD_CPUID_EBX 0x68747541 |
#define AMD_CPUID_ECX 0x444d4163 |
#define AMD_CPUID_EDX 0x69746e65 |
#define INTEL_CPUID_EBX 0x756e6547 |
#define INTEL_CPUID_ECX 0x6c65746e |
#define INTEL_CPUID_EDX 0x49656e69 |
#define INTEL_CPUID_EBX 0x756e6547 |
#define INTEL_CPUID_ECX 0x6c65746e |
#define INTEL_CPUID_EDX 0x49656e69 |
enum vendor { |
VendorUnknown=0, |
VendorUnknown = 0, |
VendorAMD, |
VendorIntel |
}; |
65,19 → 65,17 |
static char *vendor_str[] = { |
"Unknown Vendor", |
"AuthenticAMD", |
"GenuineIntel" |
"AMD", |
"Intel" |
}; |
void fpu_disable(void) |
{ |
asm volatile ( |
"mov %%cr0,%%eax;" |
"or $8,%%eax;" |
"mov %%eax,%%cr0;" |
: |
: |
:"%eax" |
"mov %%cr0, %%eax\n" |
"or $8, %%eax\n" |
"mov %%eax, %%cr0\n" |
::: "%eax" |
); |
} |
84,13 → 82,11 |
void fpu_enable(void) |
{ |
asm volatile ( |
"mov %%cr0,%%eax;" |
"and $0xffFFffF7,%%eax;" |
"mov %%eax,%%cr0;" |
: |
: |
:"%eax" |
); |
"mov %%cr0, %%eax\n" |
"and $0xffFFffF7, %%eax\n" |
"mov %%eax,%%cr0\n" |
::: "%eax" |
); |
} |
void cpu_arch_init(void) |
102,11 → 98,11 |
CPU->arch.tss = tss_p; |
CPU->arch.tss->iomap_base = &CPU->arch.tss->iomap[0] - ((uint8_t *) CPU->arch.tss); |
CPU->fpu_owner = NULL; |
cpuid(1, &info); |
fi.word = info.cpuid_edx; |
efi.word = info.cpuid_ecx; |
113,15 → 109,15 |
if (fi.bits.fxsr) |
fpu_fxsr(); |
else |
fpu_fsr(); |
fpu_fsr(); |
if (fi.bits.sse) { |
asm volatile ( |
"mov %%cr4,%0\n" |
"or %1,%0\n" |
"mov %0,%%cr4\n" |
: "+r" (help) |
: "i" (CR4_OSFXSR_MASK|(1<<10)) |
"mov %%cr4, %[help]\n" |
"or %[mask], %[help]\n" |
"mov %[help], %%cr4\n" |
: [help] "+r" (help) |
: [mask] "i" (CR4_OSFXSR_MASK | (1 << 10)) |
); |
} |
140,29 → 136,31 |
/* |
* Check for AMD processor. |
*/ |
if (info.cpuid_ebx==AMD_CPUID_EBX && info.cpuid_ecx==AMD_CPUID_ECX && info.cpuid_edx==AMD_CPUID_EDX) { |
if ((info.cpuid_ebx == AMD_CPUID_EBX) |
&& (info.cpuid_ecx == AMD_CPUID_ECX) |
&& (info.cpuid_edx == AMD_CPUID_EDX)) |
CPU->arch.vendor = VendorAMD; |
} |
/* |
* Check for Intel processor. |
*/ |
if (info.cpuid_ebx==INTEL_CPUID_EBX && info.cpuid_ecx==INTEL_CPUID_ECX && info.cpuid_edx==INTEL_CPUID_EDX) { |
if ((info.cpuid_ebx == INTEL_CPUID_EBX) |
&& (info.cpuid_ecx == INTEL_CPUID_ECX) |
&& (info.cpuid_edx == INTEL_CPUID_EDX)) |
CPU->arch.vendor = VendorIntel; |
} |
cpuid(1, &info); |
CPU->arch.family = (info.cpuid_eax>>8)&0xf; |
CPU->arch.model = (info.cpuid_eax>>4)&0xf; |
CPU->arch.stepping = (info.cpuid_eax>>0)&0xf; |
CPU->arch.family = (info.cpuid_eax >> 8) & 0x0f; |
CPU->arch.model = (info.cpuid_eax >> 4) & 0x0f; |
CPU->arch.stepping = (info.cpuid_eax >> 0) & 0x0f; |
} |
} |
void cpu_print_report(cpu_t* m) |
void cpu_print_report(cpu_t* cpu) |
{ |
printf("cpu%d: (%s family=%d model=%d stepping=%d) %dMHz\n", |
m->id, vendor_str[m->arch.vendor], m->arch.family, m->arch.model, m->arch.stepping, |
m->frequency_mhz); |
printf("cpu%u: (%s family=%u model=%u stepping=%u) %" PRIu16 " MHz\n", |
cpu->id, vendor_str[cpu->arch.vendor], cpu->arch.family, |
cpu->arch.model, cpu->arch.stepping, cpu->frequency_mhz); |
} |
/** @} |
//branches/tracing/kernel/arch/ia32/src/syscall.c |
---|
44,7 → 44,7 |
extern void sysenter_handler(void); |
/* set kernel mode CS selector */ |
write_msr(IA32_MSR_SYSENTER_CS, selector(KTEXT_DES)); |
write_msr(IA32_MSR_SYSENTER_CS, gdtselector(KTEXT_DES)); |
/* set kernel mode entry point */ |
write_msr(IA32_MSR_SYSENTER_EIP, (uint32_t) sysenter_handler); |
} |
//branches/tracing/kernel/arch/ia32/src/pm.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
112,7 → 112,7 |
void tss_initialize(tss_t *t) |
{ |
memsetb(t, sizeof(struct tss), 0); |
memsetb(t, sizeof(tss_t), 0); |
} |
/* |
127,7 → 127,7 |
d = &idt[i]; |
d->unused = 0; |
d->selector = selector(KTEXT_DES); |
d->selector = gdtselector(KTEXT_DES); |
d->access = AR_PRESENT | AR_INTERRUPT; /* masking interrupt */ |
154,7 → 154,7 |
"and $0xffff8fff, %%eax\n" |
"push %%eax\n" |
"popfl\n" |
: : : "eax" |
::: "eax" |
); |
} |
165,7 → 165,7 |
"mov %%cr0, %%eax\n" |
"and $0xfffbffff, %%eax\n" |
"mov %%eax, %%cr0\n" |
: : : "eax" |
::: "eax" |
); |
} |
198,7 → 198,7 |
else { |
tss_p = (tss_t *) malloc(sizeof(tss_t), FRAME_ATOMIC); |
if (!tss_p) |
panic("could not allocate TSS\n"); |
panic("Cannot allocate TSS."); |
} |
tss_initialize(tss_p); |
214,7 → 214,7 |
* As of this moment, the current CPU has its own GDT pointing |
* to its own TSS. We just need to load the TR register. |
*/ |
tr_load(selector(TSS_DES)); |
tr_load(gdtselector(TSS_DES)); |
clean_IOPL_NT_flags(); /* Disable I/O on nonprivileged levels and clear NT flag. */ |
clean_AM_flag(); /* Disable alignment check */ |
232,28 → 232,5 |
gdtr_load(&cpugdtr); |
} |
/* Reboot the machine by initiating |
* a triple fault |
*/ |
void arch_reboot(void) |
{ |
preemption_disable(); |
ipl_t ipl = interrupts_disable(); |
memsetb(idt, sizeof(idt), 0); |
ptr_16_32_t idtr; |
idtr.limit = sizeof(idt); |
idtr.base = (uintptr_t) idt; |
idtr_load(&idtr); |
interrupts_restore(ipl); |
asm volatile ( |
"int $0x03\n" |
"cli\n" |
"hlt\n" |
); |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia32/src/smp/smp.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
75,12 → 75,12 |
l_apic_address = (uintptr_t) frame_alloc(ONE_FRAME, |
FRAME_ATOMIC | FRAME_KA); |
if (!l_apic_address) |
panic("cannot allocate address for l_apic\n"); |
panic("Cannot allocate address for l_apic."); |
io_apic_address = (uintptr_t) frame_alloc(ONE_FRAME, |
FRAME_ATOMIC | FRAME_KA); |
if (!io_apic_address) |
panic("cannot allocate address for io_apic\n"); |
panic("Cannot allocate address for io_apic."); |
if (config.cpu_count > 1) { |
page_mapping_insert(AS_KERNEL, l_apic_address, |
122,8 → 122,8 |
* Save 0xa to address 0xf of the CMOS RAM. |
* BIOS will not do the POST after the INIT signal. |
*/ |
outb(0x70, 0xf); |
outb(0x71, 0xa); |
pio_write_8((ioport8_t *)0x70, 0xf); |
pio_write_8((ioport8_t *)0x71, 0xa); |
pic_disable_irqs(0xffff); |
apic_init(); |
131,8 → 131,8 |
uint8_t apic = l_apic_id(); |
for (i = 0; i < ops->cpu_count(); i++) { |
struct descriptor *gdt_new; |
descriptor_t *gdt_new; |
/* |
* Skip processors marked unusable. |
*/ |
154,14 → 154,19 |
/* |
* Prepare new GDT for CPU in question. |
*/ |
gdt_new = (struct descriptor *) malloc(GDT_ITEMS * |
sizeof(struct descriptor), FRAME_ATOMIC | FRAME_LOW_4_GiB); |
/* XXX Flag FRAME_LOW_4_GiB was removed temporarily, |
* it needs to be replaced by a generic fuctionality of |
* the memory subsystem |
*/ |
gdt_new = (descriptor_t *) malloc(GDT_ITEMS * |
sizeof(descriptor_t), FRAME_ATOMIC); |
if (!gdt_new) |
panic("couldn't allocate memory for GDT\n"); |
panic("Cannot allocate memory for GDT."); |
memcpy(gdt_new, gdt, GDT_ITEMS * sizeof(struct descriptor)); |
memsetb(&gdt_new[TSS_DES], sizeof(struct descriptor), 0); |
protected_ap_gdtr.limit = GDT_ITEMS * sizeof(struct descriptor); |
memcpy(gdt_new, gdt, GDT_ITEMS * sizeof(descriptor_t)); |
memsetb(&gdt_new[TSS_DES], sizeof(descriptor_t), 0); |
protected_ap_gdtr.limit = GDT_ITEMS * sizeof(descriptor_t); |
protected_ap_gdtr.base = KA2PA((uintptr_t) gdt_new); |
gdtr.base = (uintptr_t) gdt_new; |
//branches/tracing/kernel/arch/ia32/src/smp/apic.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
132,12 → 132,12 |
#endif |
} |
static irq_ownership_t l_apic_timer_claim(void) |
static irq_ownership_t l_apic_timer_claim(irq_t *irq) |
{ |
return IRQ_ACCEPT; |
} |
static void l_apic_timer_irq_handler(irq_t *irq, void *arg __attribute__((unused)), ...) |
static void l_apic_timer_irq_handler(irq_t *irq) |
{ |
/* |
* Holding a spinlock could prevent clock() from preempting |
//branches/tracing/kernel/arch/ia32/src/ddi/ddi.c |
---|
156,7 → 156,7 |
* type must be changed to describe inactive TSS. |
*/ |
gdt_p[TSS_DES].access = AR_PRESENT | AR_TSS | DPL_KERNEL; |
tr_load(selector(TSS_DES)); |
tr_load(gdtselector(TSS_DES)); |
/* |
* Update the generation count so that faults caused by |
//branches/tracing/kernel/arch/ia32/src/proc/scheduler.c |
---|
38,7 → 38,6 |
#include <proc/thread.h> |
#include <arch.h> |
#include <arch/context.h> /* SP_DELTA */ |
#include <arch/debugger.h> |
#include <arch/pm.h> |
#include <arch/asm.h> |
#include <arch/ddi/ddi.h> |
60,25 → 59,16 |
{ |
uintptr_t kstk = (uintptr_t) &THREAD->kstack[THREAD_STACK_SIZE - |
SP_DELTA]; |
/* Set kernel stack for CP3 -> CPL0 switch via SYSENTER */ |
write_msr(IA32_MSR_SYSENTER_ESP, kstk); |
/* Set kernel stack for CPL3 -> CPL0 switch via interrupt */ |
CPU->arch.tss->esp0 = kstk; |
CPU->arch.tss->ss0 = selector(KDATA_DES); |
CPU->arch.tss->ss0 = gdtselector(KDATA_DES); |
/* Set up TLS in GS register */ |
set_tls_desc(THREAD->arch.tls); |
#ifdef CONFIG_DEBUG_AS_WATCHPOINT |
/* Set watchpoint on AS to ensure that nobody sets it to zero */ |
if (CPU->id < BKPOINTS_MAX) { |
the_t *the = THE; |
breakpoint_add(&((the_t *) the->thread->kstack)->as, |
BKPOINT_WRITE | BKPOINT_CHECK_ZERO, the->cpu->id); |
} |
#endif |
} |
void after_thread_ran_arch(void) |
//branches/tracing/kernel/arch/ia32/src/boot/vga323.pal |
---|
1,256 → 1,256 |
.byte 0x3f, 0x3f, 0x3f, 0x00 |
.byte 0x36, 0x3f, 0x3f, 0x00 |
.byte 0x2d, 0x3f, 0x3f, 0x00 |
.byte 0x24, 0x3f, 0x3f, 0x00 |
.byte 0x1b, 0x3f, 0x3f, 0x00 |
.byte 0x12, 0x3f, 0x3f, 0x00 |
.byte 0x09, 0x3f, 0x3f, 0x00 |
.byte 0x00, 0x3f, 0x3f, 0x00 |
.byte 0x3f, 0x2a, 0x3f, 0x00 |
.byte 0x36, 0x2a, 0x3f, 0x00 |
.byte 0x2d, 0x2a, 0x3f, 0x00 |
.byte 0x24, 0x2a, 0x3f, 0x00 |
.byte 0x1b, 0x2a, 0x3f, 0x00 |
.byte 0x12, 0x2a, 0x3f, 0x00 |
.byte 0x09, 0x2a, 0x3f, 0x00 |
.byte 0x00, 0x2a, 0x3f, 0x00 |
.byte 0x3f, 0x15, 0x3f, 0x00 |
.byte 0x36, 0x15, 0x3f, 0x00 |
.byte 0x2d, 0x15, 0x3f, 0x00 |
.byte 0x24, 0x15, 0x3f, 0x00 |
.byte 0x1b, 0x15, 0x3f, 0x00 |
.byte 0x12, 0x15, 0x3f, 0x00 |
.byte 0x09, 0x15, 0x3f, 0x00 |
.byte 0x00, 0x15, 0x3f, 0x00 |
.byte 0x3f, 0x00, 0x3f, 0x00 |
.byte 0x36, 0x00, 0x3f, 0x00 |
.byte 0x2d, 0x00, 0x3f, 0x00 |
.byte 0x24, 0x00, 0x3f, 0x00 |
.byte 0x1b, 0x00, 0x3f, 0x00 |
.byte 0x12, 0x00, 0x3f, 0x00 |
.byte 0x09, 0x00, 0x3f, 0x00 |
.byte 0x00, 0x00, 0x3f, 0x00 |
.byte 0x3f, 0x3f, 0x36, 0x00 |
.byte 0x36, 0x3f, 0x36, 0x00 |
.byte 0x2d, 0x3f, 0x36, 0x00 |
.byte 0x24, 0x3f, 0x36, 0x00 |
.byte 0x1b, 0x3f, 0x36, 0x00 |
.byte 0x12, 0x3f, 0x36, 0x00 |
.byte 0x09, 0x3f, 0x36, 0x00 |
.byte 0x00, 0x3f, 0x36, 0x00 |
.byte 0x3f, 0x2a, 0x36, 0x00 |
.byte 0x36, 0x2a, 0x36, 0x00 |
.byte 0x2d, 0x2a, 0x36, 0x00 |
.byte 0x24, 0x2a, 0x36, 0x00 |
.byte 0x1b, 0x2a, 0x36, 0x00 |
.byte 0x12, 0x2a, 0x36, 0x00 |
.byte 0x09, 0x2a, 0x36, 0x00 |
.byte 0x00, 0x2a, 0x36, 0x00 |
.byte 0x3f, 0x15, 0x36, 0x00 |
.byte 0x36, 0x15, 0x36, 0x00 |
.byte 0x2d, 0x15, 0x36, 0x00 |
.byte 0x24, 0x15, 0x36, 0x00 |
.byte 0x1b, 0x15, 0x36, 0x00 |
.byte 0x12, 0x15, 0x36, 0x00 |
.byte 0x09, 0x15, 0x36, 0x00 |
.byte 0x00, 0x15, 0x36, 0x00 |
.byte 0x3f, 0x00, 0x36, 0x00 |
.byte 0x36, 0x00, 0x36, 0x00 |
.byte 0x2d, 0x00, 0x36, 0x00 |
.byte 0x24, 0x00, 0x36, 0x00 |
.byte 0x1b, 0x00, 0x36, 0x00 |
.byte 0x12, 0x00, 0x36, 0x00 |
.byte 0x09, 0x00, 0x36, 0x00 |
.byte 0x00, 0x00, 0x36, 0x00 |
.byte 0x3f, 0x3f, 0x2d, 0x00 |
.byte 0x36, 0x3f, 0x2d, 0x00 |
.byte 0x2d, 0x3f, 0x2d, 0x00 |
.byte 0x24, 0x3f, 0x2d, 0x00 |
.byte 0x1b, 0x3f, 0x2d, 0x00 |
.byte 0x12, 0x3f, 0x2d, 0x00 |
.byte 0x09, 0x3f, 0x2d, 0x00 |
.byte 0x00, 0x3f, 0x2d, 0x00 |
.byte 0x3f, 0x2a, 0x2d, 0x00 |
.byte 0x36, 0x2a, 0x2d, 0x00 |
.byte 0x2d, 0x2a, 0x2d, 0x00 |
.byte 0x24, 0x2a, 0x2d, 0x00 |
.byte 0x1b, 0x2a, 0x2d, 0x00 |
.byte 0x12, 0x2a, 0x2d, 0x00 |
.byte 0x09, 0x2a, 0x2d, 0x00 |
.byte 0x00, 0x2a, 0x2d, 0x00 |
.byte 0x3f, 0x15, 0x2d, 0x00 |
.byte 0x36, 0x15, 0x2d, 0x00 |
.byte 0x2d, 0x15, 0x2d, 0x00 |
.byte 0x24, 0x15, 0x2d, 0x00 |
.byte 0x1b, 0x15, 0x2d, 0x00 |
.byte 0x12, 0x15, 0x2d, 0x00 |
.byte 0x09, 0x15, 0x2d, 0x00 |
.byte 0x00, 0x15, 0x2d, 0x00 |
.byte 0x3f, 0x00, 0x2d, 0x00 |
.byte 0x36, 0x00, 0x2d, 0x00 |
.byte 0x2d, 0x00, 0x2d, 0x00 |
.byte 0x24, 0x00, 0x2d, 0x00 |
.byte 0x1b, 0x00, 0x2d, 0x00 |
.byte 0x12, 0x00, 0x2d, 0x00 |
.byte 0x09, 0x00, 0x2d, 0x00 |
.byte 0x00, 0x00, 0x2d, 0x00 |
.byte 0x3f, 0x3f, 0x24, 0x00 |
.byte 0x36, 0x3f, 0x24, 0x00 |
.byte 0x2d, 0x3f, 0x24, 0x00 |
.byte 0x24, 0x3f, 0x24, 0x00 |
.byte 0x1b, 0x3f, 0x24, 0x00 |
.byte 0x12, 0x3f, 0x24, 0x00 |
.byte 0x09, 0x3f, 0x24, 0x00 |
.byte 0x00, 0x3f, 0x24, 0x00 |
.byte 0x3f, 0x2a, 0x24, 0x00 |
.byte 0x36, 0x2a, 0x24, 0x00 |
.byte 0x2d, 0x2a, 0x24, 0x00 |
.byte 0x24, 0x2a, 0x24, 0x00 |
.byte 0x1b, 0x2a, 0x24, 0x00 |
.byte 0x12, 0x2a, 0x24, 0x00 |
.byte 0x09, 0x2a, 0x24, 0x00 |
.byte 0x00, 0x2a, 0x24, 0x00 |
.byte 0x3f, 0x15, 0x24, 0x00 |
.byte 0x36, 0x15, 0x24, 0x00 |
.byte 0x2d, 0x15, 0x24, 0x00 |
.byte 0x24, 0x15, 0x24, 0x00 |
.byte 0x1b, 0x15, 0x24, 0x00 |
.byte 0x12, 0x15, 0x24, 0x00 |
.byte 0x09, 0x15, 0x24, 0x00 |
.byte 0x00, 0x15, 0x24, 0x00 |
.byte 0x3f, 0x00, 0x24, 0x00 |
.byte 0x36, 0x00, 0x24, 0x00 |
.byte 0x2d, 0x00, 0x24, 0x00 |
.byte 0x24, 0x00, 0x24, 0x00 |
.byte 0x1b, 0x00, 0x24, 0x00 |
.byte 0x12, 0x00, 0x24, 0x00 |
.byte 0x09, 0x00, 0x24, 0x00 |
.byte 0x00, 0x00, 0x24, 0x00 |
.byte 0x3f, 0x3f, 0x1b, 0x00 |
.byte 0x36, 0x3f, 0x1b, 0x00 |
.byte 0x2d, 0x3f, 0x1b, 0x00 |
.byte 0x24, 0x3f, 0x1b, 0x00 |
.byte 0x1b, 0x3f, 0x1b, 0x00 |
.byte 0x12, 0x3f, 0x1b, 0x00 |
.byte 0x09, 0x3f, 0x1b, 0x00 |
.byte 0x00, 0x3f, 0x1b, 0x00 |
.byte 0x3f, 0x2a, 0x1b, 0x00 |
.byte 0x36, 0x2a, 0x1b, 0x00 |
.byte 0x2d, 0x2a, 0x1b, 0x00 |
.byte 0x24, 0x2a, 0x1b, 0x00 |
.byte 0x1b, 0x2a, 0x1b, 0x00 |
.byte 0x12, 0x2a, 0x1b, 0x00 |
.byte 0x09, 0x2a, 0x1b, 0x00 |
.byte 0x00, 0x2a, 0x1b, 0x00 |
.byte 0x3f, 0x15, 0x1b, 0x00 |
.byte 0x36, 0x15, 0x1b, 0x00 |
.byte 0x2d, 0x15, 0x1b, 0x00 |
.byte 0x24, 0x15, 0x1b, 0x00 |
.byte 0x1b, 0x15, 0x1b, 0x00 |
.byte 0x12, 0x15, 0x1b, 0x00 |
.byte 0x09, 0x15, 0x1b, 0x00 |
.byte 0x00, 0x15, 0x1b, 0x00 |
.byte 0x3f, 0x00, 0x1b, 0x00 |
.byte 0x36, 0x00, 0x1b, 0x00 |
.byte 0x2d, 0x00, 0x1b, 0x00 |
.byte 0x24, 0x00, 0x1b, 0x00 |
.byte 0x1b, 0x00, 0x1b, 0x00 |
.byte 0x12, 0x00, 0x1b, 0x00 |
.byte 0x09, 0x00, 0x1b, 0x00 |
.byte 0x00, 0x00, 0x1b, 0x00 |
.byte 0x3f, 0x3f, 0x12, 0x00 |
.byte 0x36, 0x3f, 0x12, 0x00 |
.byte 0x2d, 0x3f, 0x12, 0x00 |
.byte 0x24, 0x3f, 0x12, 0x00 |
.byte 0x1b, 0x3f, 0x12, 0x00 |
.byte 0x12, 0x3f, 0x12, 0x00 |
.byte 0x09, 0x3f, 0x12, 0x00 |
.byte 0x00, 0x3f, 0x12, 0x00 |
.byte 0x3f, 0x2a, 0x12, 0x00 |
.byte 0x36, 0x2a, 0x12, 0x00 |
.byte 0x2d, 0x2a, 0x12, 0x00 |
.byte 0x24, 0x2a, 0x12, 0x00 |
.byte 0x1b, 0x2a, 0x12, 0x00 |
.byte 0x12, 0x2a, 0x12, 0x00 |
.byte 0x09, 0x2a, 0x12, 0x00 |
.byte 0x00, 0x2a, 0x12, 0x00 |
.byte 0x3f, 0x15, 0x12, 0x00 |
.byte 0x36, 0x15, 0x12, 0x00 |
.byte 0x2d, 0x15, 0x12, 0x00 |
.byte 0x24, 0x15, 0x12, 0x00 |
.byte 0x1b, 0x15, 0x12, 0x00 |
.byte 0x12, 0x15, 0x12, 0x00 |
.byte 0x09, 0x15, 0x12, 0x00 |
.byte 0x00, 0x15, 0x12, 0x00 |
.byte 0x3f, 0x00, 0x12, 0x00 |
.byte 0x36, 0x00, 0x12, 0x00 |
.byte 0x2d, 0x00, 0x12, 0x00 |
.byte 0x24, 0x00, 0x12, 0x00 |
.byte 0x1b, 0x00, 0x12, 0x00 |
.byte 0x12, 0x00, 0x12, 0x00 |
.byte 0x09, 0x00, 0x12, 0x00 |
.byte 0x00, 0x00, 0x12, 0x00 |
.byte 0x3f, 0x3f, 0x09, 0x00 |
.byte 0x36, 0x3f, 0x09, 0x00 |
.byte 0x2d, 0x3f, 0x09, 0x00 |
.byte 0x24, 0x3f, 0x09, 0x00 |
.byte 0x1b, 0x3f, 0x09, 0x00 |
.byte 0x12, 0x3f, 0x09, 0x00 |
.byte 0x09, 0x3f, 0x09, 0x00 |
.byte 0x00, 0x3f, 0x09, 0x00 |
.byte 0x3f, 0x2a, 0x09, 0x00 |
.byte 0x36, 0x2a, 0x09, 0x00 |
.byte 0x2d, 0x2a, 0x09, 0x00 |
.byte 0x24, 0x2a, 0x09, 0x00 |
.byte 0x1b, 0x2a, 0x09, 0x00 |
.byte 0x12, 0x2a, 0x09, 0x00 |
.byte 0x09, 0x2a, 0x09, 0x00 |
.byte 0x00, 0x2a, 0x09, 0x00 |
.byte 0x3f, 0x15, 0x09, 0x00 |
.byte 0x36, 0x15, 0x09, 0x00 |
.byte 0x2d, 0x15, 0x09, 0x00 |
.byte 0x24, 0x15, 0x09, 0x00 |
.byte 0x1b, 0x15, 0x09, 0x00 |
.byte 0x12, 0x15, 0x09, 0x00 |
.byte 0x09, 0x15, 0x09, 0x00 |
.byte 0x00, 0x15, 0x09, 0x00 |
.byte 0x3f, 0x00, 0x09, 0x00 |
.byte 0x36, 0x00, 0x09, 0x00 |
.byte 0x2d, 0x00, 0x09, 0x00 |
.byte 0x24, 0x00, 0x09, 0x00 |
.byte 0x1b, 0x00, 0x09, 0x00 |
.byte 0x12, 0x00, 0x09, 0x00 |
.byte 0x09, 0x00, 0x09, 0x00 |
.byte 0x00, 0x00, 0x09, 0x00 |
.byte 0x3f, 0x3f, 0x00, 0x00 |
.byte 0x36, 0x3f, 0x00, 0x00 |
.byte 0x2d, 0x3f, 0x00, 0x00 |
.byte 0x24, 0x3f, 0x00, 0x00 |
.byte 0x1b, 0x3f, 0x00, 0x00 |
.byte 0x12, 0x3f, 0x00, 0x00 |
.byte 0x09, 0x3f, 0x00, 0x00 |
.byte 0x00, 0x3f, 0x00, 0x00 |
.byte 0x3f, 0x2a, 0x00, 0x00 |
.byte 0x36, 0x2a, 0x00, 0x00 |
.byte 0x2d, 0x2a, 0x00, 0x00 |
.byte 0x24, 0x2a, 0x00, 0x00 |
.byte 0x1b, 0x2a, 0x00, 0x00 |
.byte 0x12, 0x2a, 0x00, 0x00 |
.byte 0x09, 0x2a, 0x00, 0x00 |
.byte 0x00, 0x2a, 0x00, 0x00 |
.byte 0x3f, 0x15, 0x00, 0x00 |
.byte 0x36, 0x15, 0x00, 0x00 |
.byte 0x2d, 0x15, 0x00, 0x00 |
.byte 0x24, 0x15, 0x00, 0x00 |
.byte 0x1b, 0x15, 0x00, 0x00 |
.byte 0x12, 0x15, 0x00, 0x00 |
.byte 0x09, 0x15, 0x00, 0x00 |
.byte 0x00, 0x15, 0x00, 0x00 |
.byte 0x3f, 0x00, 0x00, 0x00 |
.byte 0x36, 0x00, 0x00, 0x00 |
.byte 0x2d, 0x00, 0x00, 0x00 |
.byte 0x24, 0x00, 0x00, 0x00 |
.byte 0x1b, 0x00, 0x00, 0x00 |
.byte 0x12, 0x00, 0x00, 0x00 |
.byte 0x09, 0x00, 0x00, 0x00 |
.byte 0x00, 0x00, 0x00, 0x00 |
.byte 0x09, 0x00, 0x00, 0x00 |
.byte 0x12, 0x00, 0x00, 0x00 |
.byte 0x1b, 0x00, 0x00, 0x00 |
.byte 0x24, 0x00, 0x00, 0x00 |
.byte 0x2d, 0x00, 0x00, 0x00 |
.byte 0x36, 0x00, 0x00, 0x00 |
.byte 0x3f, 0x00, 0x00, 0x00 |
.byte 0x00, 0x15, 0x00, 0x00 |
.byte 0x09, 0x15, 0x00, 0x00 |
.byte 0x12, 0x15, 0x00, 0x00 |
.byte 0x1b, 0x15, 0x00, 0x00 |
.byte 0x24, 0x15, 0x00, 0x00 |
.byte 0x2d, 0x15, 0x00, 0x00 |
.byte 0x36, 0x15, 0x00, 0x00 |
.byte 0x3f, 0x15, 0x00, 0x00 |
.byte 0x00, 0x2a, 0x00, 0x00 |
.byte 0x09, 0x2a, 0x00, 0x00 |
.byte 0x12, 0x2a, 0x00, 0x00 |
.byte 0x1b, 0x2a, 0x00, 0x00 |
.byte 0x24, 0x2a, 0x00, 0x00 |
.byte 0x2d, 0x2a, 0x00, 0x00 |
.byte 0x36, 0x2a, 0x00, 0x00 |
.byte 0x3f, 0x2a, 0x00, 0x00 |
.byte 0x00, 0x3f, 0x00, 0x00 |
.byte 0x09, 0x3f, 0x00, 0x00 |
.byte 0x12, 0x3f, 0x00, 0x00 |
.byte 0x1b, 0x3f, 0x00, 0x00 |
.byte 0x24, 0x3f, 0x00, 0x00 |
.byte 0x2d, 0x3f, 0x00, 0x00 |
.byte 0x36, 0x3f, 0x00, 0x00 |
.byte 0x3f, 0x3f, 0x00, 0x00 |
.byte 0x00, 0x00, 0x09, 0x00 |
.byte 0x09, 0x00, 0x09, 0x00 |
.byte 0x12, 0x00, 0x09, 0x00 |
.byte 0x1b, 0x00, 0x09, 0x00 |
.byte 0x24, 0x00, 0x09, 0x00 |
.byte 0x2d, 0x00, 0x09, 0x00 |
.byte 0x36, 0x00, 0x09, 0x00 |
.byte 0x3f, 0x00, 0x09, 0x00 |
.byte 0x00, 0x15, 0x09, 0x00 |
.byte 0x09, 0x15, 0x09, 0x00 |
.byte 0x12, 0x15, 0x09, 0x00 |
.byte 0x1b, 0x15, 0x09, 0x00 |
.byte 0x24, 0x15, 0x09, 0x00 |
.byte 0x2d, 0x15, 0x09, 0x00 |
.byte 0x36, 0x15, 0x09, 0x00 |
.byte 0x3f, 0x15, 0x09, 0x00 |
.byte 0x00, 0x2a, 0x09, 0x00 |
.byte 0x09, 0x2a, 0x09, 0x00 |
.byte 0x12, 0x2a, 0x09, 0x00 |
.byte 0x1b, 0x2a, 0x09, 0x00 |
.byte 0x24, 0x2a, 0x09, 0x00 |
.byte 0x2d, 0x2a, 0x09, 0x00 |
.byte 0x36, 0x2a, 0x09, 0x00 |
.byte 0x3f, 0x2a, 0x09, 0x00 |
.byte 0x00, 0x3f, 0x09, 0x00 |
.byte 0x09, 0x3f, 0x09, 0x00 |
.byte 0x12, 0x3f, 0x09, 0x00 |
.byte 0x1b, 0x3f, 0x09, 0x00 |
.byte 0x24, 0x3f, 0x09, 0x00 |
.byte 0x2d, 0x3f, 0x09, 0x00 |
.byte 0x36, 0x3f, 0x09, 0x00 |
.byte 0x3f, 0x3f, 0x09, 0x00 |
.byte 0x00, 0x00, 0x12, 0x00 |
.byte 0x09, 0x00, 0x12, 0x00 |
.byte 0x12, 0x00, 0x12, 0x00 |
.byte 0x1b, 0x00, 0x12, 0x00 |
.byte 0x24, 0x00, 0x12, 0x00 |
.byte 0x2d, 0x00, 0x12, 0x00 |
.byte 0x36, 0x00, 0x12, 0x00 |
.byte 0x3f, 0x00, 0x12, 0x00 |
.byte 0x00, 0x15, 0x12, 0x00 |
.byte 0x09, 0x15, 0x12, 0x00 |
.byte 0x12, 0x15, 0x12, 0x00 |
.byte 0x1b, 0x15, 0x12, 0x00 |
.byte 0x24, 0x15, 0x12, 0x00 |
.byte 0x2d, 0x15, 0x12, 0x00 |
.byte 0x36, 0x15, 0x12, 0x00 |
.byte 0x3f, 0x15, 0x12, 0x00 |
.byte 0x00, 0x2a, 0x12, 0x00 |
.byte 0x09, 0x2a, 0x12, 0x00 |
.byte 0x12, 0x2a, 0x12, 0x00 |
.byte 0x1b, 0x2a, 0x12, 0x00 |
.byte 0x24, 0x2a, 0x12, 0x00 |
.byte 0x2d, 0x2a, 0x12, 0x00 |
.byte 0x36, 0x2a, 0x12, 0x00 |
.byte 0x3f, 0x2a, 0x12, 0x00 |
.byte 0x00, 0x3f, 0x12, 0x00 |
.byte 0x09, 0x3f, 0x12, 0x00 |
.byte 0x12, 0x3f, 0x12, 0x00 |
.byte 0x1b, 0x3f, 0x12, 0x00 |
.byte 0x24, 0x3f, 0x12, 0x00 |
.byte 0x2d, 0x3f, 0x12, 0x00 |
.byte 0x36, 0x3f, 0x12, 0x00 |
.byte 0x3f, 0x3f, 0x12, 0x00 |
.byte 0x00, 0x00, 0x1b, 0x00 |
.byte 0x09, 0x00, 0x1b, 0x00 |
.byte 0x12, 0x00, 0x1b, 0x00 |
.byte 0x1b, 0x00, 0x1b, 0x00 |
.byte 0x24, 0x00, 0x1b, 0x00 |
.byte 0x2d, 0x00, 0x1b, 0x00 |
.byte 0x36, 0x00, 0x1b, 0x00 |
.byte 0x3f, 0x00, 0x1b, 0x00 |
.byte 0x00, 0x15, 0x1b, 0x00 |
.byte 0x09, 0x15, 0x1b, 0x00 |
.byte 0x12, 0x15, 0x1b, 0x00 |
.byte 0x1b, 0x15, 0x1b, 0x00 |
.byte 0x24, 0x15, 0x1b, 0x00 |
.byte 0x2d, 0x15, 0x1b, 0x00 |
.byte 0x36, 0x15, 0x1b, 0x00 |
.byte 0x3f, 0x15, 0x1b, 0x00 |
.byte 0x00, 0x2a, 0x1b, 0x00 |
.byte 0x09, 0x2a, 0x1b, 0x00 |
.byte 0x12, 0x2a, 0x1b, 0x00 |
.byte 0x1b, 0x2a, 0x1b, 0x00 |
.byte 0x24, 0x2a, 0x1b, 0x00 |
.byte 0x2d, 0x2a, 0x1b, 0x00 |
.byte 0x36, 0x2a, 0x1b, 0x00 |
.byte 0x3f, 0x2a, 0x1b, 0x00 |
.byte 0x00, 0x3f, 0x1b, 0x00 |
.byte 0x09, 0x3f, 0x1b, 0x00 |
.byte 0x12, 0x3f, 0x1b, 0x00 |
.byte 0x1b, 0x3f, 0x1b, 0x00 |
.byte 0x24, 0x3f, 0x1b, 0x00 |
.byte 0x2d, 0x3f, 0x1b, 0x00 |
.byte 0x36, 0x3f, 0x1b, 0x00 |
.byte 0x3f, 0x3f, 0x1b, 0x00 |
.byte 0x00, 0x00, 0x24, 0x00 |
.byte 0x09, 0x00, 0x24, 0x00 |
.byte 0x12, 0x00, 0x24, 0x00 |
.byte 0x1b, 0x00, 0x24, 0x00 |
.byte 0x24, 0x00, 0x24, 0x00 |
.byte 0x2d, 0x00, 0x24, 0x00 |
.byte 0x36, 0x00, 0x24, 0x00 |
.byte 0x3f, 0x00, 0x24, 0x00 |
.byte 0x00, 0x15, 0x24, 0x00 |
.byte 0x09, 0x15, 0x24, 0x00 |
.byte 0x12, 0x15, 0x24, 0x00 |
.byte 0x1b, 0x15, 0x24, 0x00 |
.byte 0x24, 0x15, 0x24, 0x00 |
.byte 0x2d, 0x15, 0x24, 0x00 |
.byte 0x36, 0x15, 0x24, 0x00 |
.byte 0x3f, 0x15, 0x24, 0x00 |
.byte 0x00, 0x2a, 0x24, 0x00 |
.byte 0x09, 0x2a, 0x24, 0x00 |
.byte 0x12, 0x2a, 0x24, 0x00 |
.byte 0x1b, 0x2a, 0x24, 0x00 |
.byte 0x24, 0x2a, 0x24, 0x00 |
.byte 0x2d, 0x2a, 0x24, 0x00 |
.byte 0x36, 0x2a, 0x24, 0x00 |
.byte 0x3f, 0x2a, 0x24, 0x00 |
.byte 0x00, 0x3f, 0x24, 0x00 |
.byte 0x09, 0x3f, 0x24, 0x00 |
.byte 0x12, 0x3f, 0x24, 0x00 |
.byte 0x1b, 0x3f, 0x24, 0x00 |
.byte 0x24, 0x3f, 0x24, 0x00 |
.byte 0x2d, 0x3f, 0x24, 0x00 |
.byte 0x36, 0x3f, 0x24, 0x00 |
.byte 0x3f, 0x3f, 0x24, 0x00 |
.byte 0x00, 0x00, 0x2d, 0x00 |
.byte 0x09, 0x00, 0x2d, 0x00 |
.byte 0x12, 0x00, 0x2d, 0x00 |
.byte 0x1b, 0x00, 0x2d, 0x00 |
.byte 0x24, 0x00, 0x2d, 0x00 |
.byte 0x2d, 0x00, 0x2d, 0x00 |
.byte 0x36, 0x00, 0x2d, 0x00 |
.byte 0x3f, 0x00, 0x2d, 0x00 |
.byte 0x00, 0x15, 0x2d, 0x00 |
.byte 0x09, 0x15, 0x2d, 0x00 |
.byte 0x12, 0x15, 0x2d, 0x00 |
.byte 0x1b, 0x15, 0x2d, 0x00 |
.byte 0x24, 0x15, 0x2d, 0x00 |
.byte 0x2d, 0x15, 0x2d, 0x00 |
.byte 0x36, 0x15, 0x2d, 0x00 |
.byte 0x3f, 0x15, 0x2d, 0x00 |
.byte 0x00, 0x2a, 0x2d, 0x00 |
.byte 0x09, 0x2a, 0x2d, 0x00 |
.byte 0x12, 0x2a, 0x2d, 0x00 |
.byte 0x1b, 0x2a, 0x2d, 0x00 |
.byte 0x24, 0x2a, 0x2d, 0x00 |
.byte 0x2d, 0x2a, 0x2d, 0x00 |
.byte 0x36, 0x2a, 0x2d, 0x00 |
.byte 0x3f, 0x2a, 0x2d, 0x00 |
.byte 0x00, 0x3f, 0x2d, 0x00 |
.byte 0x09, 0x3f, 0x2d, 0x00 |
.byte 0x12, 0x3f, 0x2d, 0x00 |
.byte 0x1b, 0x3f, 0x2d, 0x00 |
.byte 0x24, 0x3f, 0x2d, 0x00 |
.byte 0x2d, 0x3f, 0x2d, 0x00 |
.byte 0x36, 0x3f, 0x2d, 0x00 |
.byte 0x3f, 0x3f, 0x2d, 0x00 |
.byte 0x00, 0x00, 0x36, 0x00 |
.byte 0x09, 0x00, 0x36, 0x00 |
.byte 0x12, 0x00, 0x36, 0x00 |
.byte 0x1b, 0x00, 0x36, 0x00 |
.byte 0x24, 0x00, 0x36, 0x00 |
.byte 0x2d, 0x00, 0x36, 0x00 |
.byte 0x36, 0x00, 0x36, 0x00 |
.byte 0x3f, 0x00, 0x36, 0x00 |
.byte 0x00, 0x15, 0x36, 0x00 |
.byte 0x09, 0x15, 0x36, 0x00 |
.byte 0x12, 0x15, 0x36, 0x00 |
.byte 0x1b, 0x15, 0x36, 0x00 |
.byte 0x24, 0x15, 0x36, 0x00 |
.byte 0x2d, 0x15, 0x36, 0x00 |
.byte 0x36, 0x15, 0x36, 0x00 |
.byte 0x3f, 0x15, 0x36, 0x00 |
.byte 0x00, 0x2a, 0x36, 0x00 |
.byte 0x09, 0x2a, 0x36, 0x00 |
.byte 0x12, 0x2a, 0x36, 0x00 |
.byte 0x1b, 0x2a, 0x36, 0x00 |
.byte 0x24, 0x2a, 0x36, 0x00 |
.byte 0x2d, 0x2a, 0x36, 0x00 |
.byte 0x36, 0x2a, 0x36, 0x00 |
.byte 0x3f, 0x2a, 0x36, 0x00 |
.byte 0x00, 0x3f, 0x36, 0x00 |
.byte 0x09, 0x3f, 0x36, 0x00 |
.byte 0x12, 0x3f, 0x36, 0x00 |
.byte 0x1b, 0x3f, 0x36, 0x00 |
.byte 0x24, 0x3f, 0x36, 0x00 |
.byte 0x2d, 0x3f, 0x36, 0x00 |
.byte 0x36, 0x3f, 0x36, 0x00 |
.byte 0x3f, 0x3f, 0x36, 0x00 |
.byte 0x00, 0x00, 0x3f, 0x00 |
.byte 0x09, 0x00, 0x3f, 0x00 |
.byte 0x12, 0x00, 0x3f, 0x00 |
.byte 0x1b, 0x00, 0x3f, 0x00 |
.byte 0x24, 0x00, 0x3f, 0x00 |
.byte 0x2d, 0x00, 0x3f, 0x00 |
.byte 0x36, 0x00, 0x3f, 0x00 |
.byte 0x3f, 0x00, 0x3f, 0x00 |
.byte 0x00, 0x15, 0x3f, 0x00 |
.byte 0x09, 0x15, 0x3f, 0x00 |
.byte 0x12, 0x15, 0x3f, 0x00 |
.byte 0x1b, 0x15, 0x3f, 0x00 |
.byte 0x24, 0x15, 0x3f, 0x00 |
.byte 0x2d, 0x15, 0x3f, 0x00 |
.byte 0x36, 0x15, 0x3f, 0x00 |
.byte 0x3f, 0x15, 0x3f, 0x00 |
.byte 0x00, 0x2a, 0x3f, 0x00 |
.byte 0x09, 0x2a, 0x3f, 0x00 |
.byte 0x12, 0x2a, 0x3f, 0x00 |
.byte 0x1b, 0x2a, 0x3f, 0x00 |
.byte 0x24, 0x2a, 0x3f, 0x00 |
.byte 0x2d, 0x2a, 0x3f, 0x00 |
.byte 0x36, 0x2a, 0x3f, 0x00 |
.byte 0x3f, 0x2a, 0x3f, 0x00 |
.byte 0x00, 0x3f, 0x3f, 0x00 |
.byte 0x09, 0x3f, 0x3f, 0x00 |
.byte 0x12, 0x3f, 0x3f, 0x00 |
.byte 0x1b, 0x3f, 0x3f, 0x00 |
.byte 0x24, 0x3f, 0x3f, 0x00 |
.byte 0x2d, 0x3f, 0x3f, 0x00 |
.byte 0x36, 0x3f, 0x3f, 0x00 |
.byte 0x3f, 0x3f, 0x3f, 0x00 |
//branches/tracing/kernel/arch/ia32/src/boot/vesa_ret.inc |
---|
0,0 → 1,12 |
.code32 |
vesa_init_protected: |
movw $gdtselector(KDATA_DES), %cx |
movw %cx, %es |
movw %cx, %fs |
movw %cx, %gs |
movw %cx, %ds # kernel data + stack |
movw %cx, %ss |
movl $START_STACK, %esp # initialize stack pointer |
jmpl $gdtselector(KTEXT_DES), $vesa_meeting_point |
//branches/tracing/kernel/arch/ia32/src/boot/boot.S |
---|
31,6 → 31,7 |
#include <arch/boot/memmap.h> |
#include <arch/mm/page.h> |
#include <arch/pm.h> |
#include <arch/cpuid.h> |
#define START_STACK (BOOT_OFFSET - BOOT_STACK_SIZE) |
42,40 → 43,41 |
multiboot_header: |
.long MULTIBOOT_HEADER_MAGIC |
.long MULTIBOOT_HEADER_FLAGS |
.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) # checksum |
.long -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) # checksum |
.long multiboot_header |
.long unmapped_ktext_start |
.long 0 |
.long 0 |
.long multiboot_image_start |
multiboot_image_start: |
cld |
movl $START_STACK, %esp # initialize stack pointer |
lgdt KA2PA(bootstrap_gdtr) # initialize Global Descriptor Table register |
movw $selector(KDATA_DES), %cx |
movl $START_STACK, %esp # initialize stack pointer |
lgdt KA2PA(bootstrap_gdtr) # initialize Global Descriptor Table register |
movw $gdtselector(KDATA_DES), %cx |
movw %cx, %es |
movw %cx, %fs |
movw %cx, %gs |
movw %cx, %ds # kernel data + stack |
movw %cx, %ds # kernel data + stack |
movw %cx, %ss |
jmpl $selector(KTEXT_DES), $multiboot_meeting_point |
jmpl $gdtselector(KTEXT_DES), $multiboot_meeting_point |
multiboot_meeting_point: |
movl %eax, grub_eax # save parameters from GRUB |
movl %eax, grub_eax # save parameters from GRUB |
movl %ebx, grub_ebx |
xorl %eax, %eax |
cpuid |
cmp $0x0, %eax # any function > 0? |
movl $(INTEL_CPUID_LEVEL), %eax |
cpuid |
cmp $0x0, %eax # any function > 0? |
jbe pse_unsupported |
movl $0x1, %eax # Basic function code 1 |
movl $(INTEL_CPUID_STANDARD), %eax |
cpuid |
bt $3, %edx # Test if PSE is supported |
bt $(INTEL_PSE), %edx |
jc pse_supported |
pse_unsupported: |
movl $pse_msg, %esi |
jmp error_halt |
82,138 → 84,31 |
pse_supported: |
#ifdef CONFIG_FB |
mov $vesa_init, %esi |
mov $VESA_INIT_SEGMENT << 4, %edi |
mov $e_vesa_init - vesa_init, %ecx |
rep movsb |
mov $VESA_INIT_SEGMENT << 4, %edi |
jmpl *%edi |
bt $(INTEL_SEP), %edx |
jc sep_supported |
vesa_meeting_point: |
movl $sep_msg, %esi |
jmp error_halt |
mov %esi, KA2PA(vesa_ph_addr) |
mov %di, KA2PA(vesa_height) |
shr $16, %edi |
mov %di, KA2PA(vesa_width) |
mov %bx, KA2PA(vesa_scanline) |
shr $16, %ebx |
mov %bx, KA2PA(vesa_bpp) |
#endif |
sep_supported: |
#include "vesa_prot.inc" |
# map kernel and turn paging on |
call map_kernel |
call map_kernel # map kernel and turn paging on |
# call arch_pre_main(grub_eax, grub_ebx) |
pushl grub_ebx |
pushl grub_eax |
call arch_pre_main |
movl grub_eax, %eax |
movl grub_ebx, %ebx |
cmpl $MULTIBOOT_LOADER_MAGIC, %eax # compare GRUB signature |
je valid_boot |
xorl %ecx, %ecx # no memory map available |
movl %ecx, e820counter |
jmp invalid_boot |
valid_boot: |
movl (%ebx), %eax # ebx = physical address of struct multiboot_info |
bt $3, %eax # mbi->flags[3] (mods_count, mods_addr valid) |
jc mods_valid |
xorl %ecx, %ecx |
movl %ecx, init |
jmp mods_end |
mods_valid: |
movl 20(%ebx), %ecx # mbi->mods_count |
movl %ecx, init |
cmpl $0, %ecx |
je mods_end |
movl 24(%ebx), %esi # mbi->mods_addr |
movl $init, %edi |
mods_loop: |
movl 0(%esi), %edx # mods->mod_start |
addl $0x80000000, %edx |
movl %edx, 4(%edi) |
movl 4(%esi), %edx |
subl 0(%esi), %edx # mods->mod_end - mods->mod_start |
movl %edx, 8(%edi) |
addl $16, %esi |
addl $8 , %edi |
loop mods_loop |
mods_end: |
bt $6, %eax # mbi->flags[6] (mmap_length, mmap_addr valid) |
jc mmap_valid |
xorl %edx, %edx |
jmp mmap_invalid |
mmap_valid: |
movl 44(%ebx), %ecx # mbi->mmap_length |
movl 48(%ebx), %esi # mbi->mmap_addr |
movl $e820table, %edi |
xorl %edx, %edx |
mmap_loop: |
cmpl $0, %ecx |
jle mmap_end |
movl 4(%esi), %eax # mmap->base_addr_low |
movl %eax, (%edi) |
movl 8(%esi), %eax # mmap->base_addr_high |
movl %eax, 4(%edi) |
movl 12(%esi), %eax # mmap->length_low |
movl %eax, 8(%edi) |
movl 16(%esi), %eax # mmap->length_high |
movl %eax, 12(%edi) |
movl 20(%esi), %eax # mmap->type |
movl %eax, 16(%edi) |
movl (%esi), %eax # mmap->size |
addl $0x4, %eax |
addl %eax, %esi |
subl %eax, %ecx |
addl $MEMMAP_E820_RECORD_SIZE, %edi |
incl %edx |
jmp mmap_loop |
mmap_end: |
mmap_invalid: |
movl %edx, e820counter |
invalid_boot: |
call main_bsp |
#ifdef CONFIG_SMP |
# copy AP bootstrap routines below 1 MB |
movl $BOOT_OFFSET, %esi |
movl $AP_BOOT_OFFSET, %edi |
movl $_hardcoded_unmapped_size, %ecx |
rep movsb |
#endif |
call main_bsp # never returns |
# not reached |
cli |
hlt |
hlt0: |
hlt |
jmp hlt0 |
.global map_kernel |
map_kernel: |
222,8 → 117,8 |
# For simplicity, we map the entire 4G space. |
# |
movl %cr4, %ecx |
orl $(1 << 4), %ecx # turn PSE on |
andl $(~(1 << 5)), %ecx # turn PAE off |
orl $(1 << 4), %ecx # turn PSE on |
andl $(~(1 << 5)), %ecx # turn PAE off |
movl %ecx, %cr4 |
movl $(page_directory + 0), %esi |
230,30 → 125,31 |
movl $(page_directory + 2048), %edi |
xorl %ecx, %ecx |
xorl %ebx, %ebx |
0: |
movl $((1 << 7) | (1 << 1) | (1 << 0)), %eax |
orl %ebx, %eax |
movl %eax, (%esi, %ecx, 4) # mapping 0x00000000 + %ecx * 4M => 0x00000000 + %ecx * 4M |
movl %eax, (%edi, %ecx, 4) # mapping 0x80000000 + %ecx * 4M => 0x00000000 + %ecx * 4M |
addl $(4 * 1024 * 1024), %ebx |
incl %ecx |
cmpl $512, %ecx |
jl 0b |
floop: |
movl $((1 << 7) | (1 << 1) | (1 << 0)), %eax |
orl %ebx, %eax |
movl %eax, (%esi, %ecx, 4) # mapping 0x00000000 + %ecx * 4M => 0x00000000 + %ecx * 4M |
movl %eax, (%edi, %ecx, 4) # mapping 0x80000000 + %ecx * 4M => 0x00000000 + %ecx * 4M |
addl $(4 * 1024 * 1024), %ebx |
incl %ecx |
cmpl $512, %ecx |
jl floop |
movl %esi, %cr3 |
movl %cr0, %ebx |
orl $(1 << 31), %ebx # turn paging on |
orl $(1 << 31), %ebx # turn paging on |
movl %ebx, %cr0 |
ret |
# Print string from %esi to EGA display (in red) and halt |
error_halt: |
movl $0xb8000, %edi # base of EGA text mode memory |
movl $0xb8000, %edi # base of EGA text mode memory |
xorl %eax, %eax |
movw $0x3d4, %dx # read bits 8 - 15 of the cursor address |
movw $0x3d4, %dx # read bits 8 - 15 of the cursor address |
movb $0xe, %al |
outb %al, %dx |
261,7 → 157,7 |
inb %dx, %al |
shl $8, %ax |
movw $0x3d4, %dx # read bits 0 - 7 of the cursor address |
movw $0x3d4, %dx # read bits 0 - 7 of the cursor address |
movb $0xf, %al |
outb %al, %dx |
270,7 → 166,9 |
cmp $1920, %ax |
jbe cursor_ok |
movw $1920, %ax # sanity check for the cursor on the last line |
movw $1920, %ax # sanity check for the cursor on the last line |
cursor_ok: |
movw %ax, %bx |
277,7 → 175,7 |
shl $1, %eax |
addl %eax, %edi |
movw $0x0c00, %ax # black background, light red foreground |
movw $0x0c00, %ax # black background, light red foreground |
ploop: |
lodsb |
284,11 → 182,11 |
cmp $0, %al |
je ploop_end |
stosw |
inc %bx |
inc %bx |
jmp ploop |
ploop_end: |
movw $0x3d4, %dx # write bits 8 - 15 of the cursor address |
movw $0x3d4, %dx # write bits 8 - 15 of the cursor address |
movb $0xe, %al |
outb %al, %dx |
296,7 → 194,7 |
movb %bh, %al |
outb %al, %dx |
movw $0x3d4, %dx # write bits 0 - 7 of the cursor address |
movw $0x3d4, %dx # write bits 0 - 7 of the cursor address |
movb $0xf, %al |
outb %al, %dx |
303,240 → 201,14 |
movw $0x3d5, %dx |
movb %bl, %al |
outb %al, %dx |
cli |
hlt |
hlt1: |
hlt |
jmp hlt1 |
#ifdef CONFIG_FB |
vesa_init: |
jmp $selector(VESA_INIT_DES), $vesa_init_real - vesa_init |
.code16 |
vesa_init_real: |
mov %cr0, %eax |
and $~1, %eax |
mov %eax, %cr0 |
jmp $VESA_INIT_SEGMENT, $vesa_init_real2 - vesa_init |
vesa_init_real2: |
mov $VESA_INIT_SEGMENT, %bx |
mov %bx, %es |
mov %bx, %fs |
mov %bx, %gs |
mov %bx, %ds |
mov %bx, %ss |
movl %esp, %eax |
movl $0x0000fffc, %esp |
movl $0x0000fffc, %ebp |
pushl %eax |
#define VESA_INFO_SIZE 1024 |
#include "vesa_real.inc" |
#define VESA_MODE_ATTRIBUTES_OFFSET 0 |
#define VESA_MODE_LIST_PTR_OFFSET 14 |
#define VESA_MODE_SCANLINE_OFFSET 16 |
#define VESA_MODE_WIDTH_OFFSET 18 |
#define VESA_MODE_HEIGHT_OFFSET 20 |
#define VESA_MODE_BPP_OFFSET 25 |
#define VESA_MODE_PHADDR_OFFSET 40 |
#define VESA_END_OF_MODES 0xffff |
#define VESA_OK 0x4f |
#define VESA_GET_INFO 0x4f00 |
#define VESA_GET_MODE_INFO 0x4f01 |
#define VESA_SET_MODE 0x4f02 |
#define VESA_SET_PALETTE 0x4f09 |
#if CONFIG_VESA_BPP == 24 |
#define CONFIG_VESA_BPP_VARIANT 32 |
#endif |
mov $VESA_GET_INFO, %ax |
mov $e_vesa_init - vesa_init, %di |
push %di |
int $0x10 |
pop %di |
cmp $VESA_OK, %al |
jnz 0f |
mov 2 + VESA_MODE_LIST_PTR_OFFSET(%di), %si |
mov %si, %gs |
mov VESA_MODE_LIST_PTR_OFFSET(%di), %si |
add $VESA_INFO_SIZE, %di |
1:# Try next mode |
mov %gs:(%si), %cx |
cmp $VESA_END_OF_MODES, %cx |
jz 0f |
inc %si |
inc %si |
push %cx |
push %di |
push %si |
mov $VESA_GET_MODE_INFO, %ax |
int $0x10 |
pop %si |
pop %di |
pop %cx |
cmp $VESA_OK, %al |
jnz 0f |
mov $CONFIG_VESA_WIDTH, %ax |
cmp VESA_MODE_WIDTH_OFFSET(%di), %ax |
jnz 1b |
mov $CONFIG_VESA_HEIGHT, %ax |
cmp VESA_MODE_HEIGHT_OFFSET(%di), %ax |
jnz 1b |
mov $CONFIG_VESA_BPP, %al |
cmp VESA_MODE_BPP_OFFSET(%di), %al |
#ifdef CONFIG_VESA_BPP_VARIANT |
jz 2f |
mov $CONFIG_VESA_BPP_VARIANT, %al |
cmp VESA_MODE_BPP_OFFSET(%di), %al |
#endif |
jnz 1b |
2: |
mov %cx, %bx |
or $0xc000, %bx |
push %di |
mov $VESA_SET_MODE, %ax |
int $0x10 |
pop %di |
cmp $VESA_OK, %al |
jnz 0f |
#if CONFIG_VESA_BPP == 8 |
# Set 3:2:3 VGA palette |
mov VESA_MODE_ATTRIBUTES_OFFSET(%di), %ax |
push %di |
mov $vga323 - vesa_init, %di |
mov $0x100, %ecx |
bt $5, %ax # Test if VGA compatible registers are present |
jnc vga_compat |
# Try VESA routine to set palette |
mov $VESA_SET_PALETTE, %ax |
xor %bl, %bl |
xor %dx, %dx |
int $0x10 |
jmp vga_not_compat |
vga_compat: |
# Try VGA registers to set palette |
movw $0x3c6, %dx # Set palette mask |
movb $0xff, %al |
outb %al, %dx |
movw $0x3c8, %dx # First index to set |
xor %al, %al |
outb %al, %dx |
movw $0x3c9, %dx # Data port |
vga_loop: |
movb %es:2(%di), %al |
outb %al, %dx |
movb %es:1(%di), %al |
outb %al, %dx |
movb %es:(%di), %al |
outb %al, %dx |
addw $4, %di |
loop vga_loop |
vga_not_compat: |
pop %di |
#endif |
mov VESA_MODE_PHADDR_OFFSET(%di), %esi |
mov VESA_MODE_WIDTH_OFFSET(%di), %ax |
shl $16, %eax |
mov VESA_MODE_HEIGHT_OFFSET(%di), %ax |
mov VESA_MODE_BPP_OFFSET(%di), %bl |
xor %bh, %bh |
shl $16, %ebx |
mov VESA_MODE_SCANLINE_OFFSET(%di), %bx |
mov %eax, %edi |
8: |
mov %cr0, %eax |
or $1, %eax |
mov %eax, %cr0 |
jmp 9f |
9: |
ljmpl $selector(KTEXT_DES), $(vesa_init_protect - vesa_init + VESA_INIT_SEGMENT << 4) |
0:# No prefered mode found |
mov $0x111, %cx |
push %di |
push %cx |
mov $VESA_GET_MODE_INFO, %ax |
int $0x10 |
pop %cx |
pop %di |
cmp $VESA_OK, %al |
jnz 1f |
jz 2b # Force relative jump |
1: |
mov $0x0003, %ax |
int $0x10 |
mov $0xffffffff, %edi # EGA text mode used, because of problems with VESA |
xor %ax, %ax |
jz 8b # Force relative jump |
vga323: |
#include "vga323.pal" |
.code32 |
vesa_init_protect: |
movw $selector(KDATA_DES), %cx |
movw %cx, %es |
movw %cx, %fs |
movw %cx, %gs |
movw %cx, %ds # kernel data + stack |
movw %cx, %ss |
movl $START_STACK, %esp # initialize stack pointer |
jmpl $selector(KTEXT_DES), $vesa_meeting_point |
.align 4 |
e_vesa_init: |
#endif |
.section K_DATA_START, "aw", @progbits |
.align 4096 |
551,3 → 223,6 |
pse_msg: |
.asciz "Page Size Extension not supported. System halted." |
sep_msg: |
.asciz "SYSENTER/SYSEXIT not supported. System halted." |
//branches/tracing/kernel/arch/ia32/src/boot/vesa_real.inc |
---|
0,0 → 1,373 |
#ifdef CONFIG_FB |
#include <macros.h> |
#define VESA_INFO_SIZE 1024 |
#define VESA_MODE_ATTRIBUTES_OFFSET 0 |
#define VESA_MODE_LIST_PTR_OFFSET 14 |
#define VESA_MODE_SCANLINE_OFFSET 16 |
#define VESA_MODE_WIDTH_OFFSET 18 |
#define VESA_MODE_HEIGHT_OFFSET 20 |
#define VESA_MODE_BPP_OFFSET 25 |
#define VESA_MODE_RED_MASK_OFFSET 31 |
#define VESA_MODE_RED_POS_OFFSET 32 |
#define VESA_MODE_GREEN_MASK_OFFSET 33 |
#define VESA_MODE_GREEN_POS_OFFSET 34 |
#define VESA_MODE_BLUE_MASK_OFFSET 35 |
#define VESA_MODE_BLUE_POS_OFFSET 36 |
#define VESA_MODE_PHADDR_OFFSET 40 |
#define VESA_END_OF_MODES 0xffff |
#define VESA_OK 0x4f |
#define VESA_GET_INFO 0x4f00 |
#define VESA_GET_MODE_INFO 0x4f01 |
#define VESA_SET_MODE 0x4f02 |
#define VESA_SET_PALETTE 0x4f09 |
.code32 |
vesa_init: |
jmp $gdtselector(VESA_INIT_DES), $vesa_init_real - vesa_init |
.code16 |
vesa_init_real: |
mov %cr0, %eax |
and $~1, %eax |
mov %eax, %cr0 |
jmp $VESA_INIT_SEGMENT, $vesa_init_real2 - vesa_init |
vesa_init_real2: |
mov $VESA_INIT_SEGMENT, %bx |
mov %bx, %es |
mov %bx, %fs |
mov %bx, %gs |
mov %bx, %ds |
mov %bx, %ss |
movl %esp, %eax |
movl $0x0000fffc, %esp |
movl $0x0000fffc, %ebp |
pushl %eax |
# parse default mode string |
mov $default_mode - vesa_init, %di |
xor %eax, %eax |
xor %ebx, %ebx |
mov $8, %ecx |
parse_width: |
mov (%di), %al |
# check for digit |
cmp $'0', %al |
jb parse_width_done |
cmp $'9', %al |
ja parse_width_done |
sub $'0', %al |
# multiply default_width by 10 and add digit |
mov default_width - vesa_init, %bx |
lea (%ebx, %ebx, 4), %ebx |
shl $1, %ebx |
add %ax, %bx |
mov %bx, default_width - vesa_init |
inc %di |
loop parse_width |
parse_width_done: |
mov (%di), %al |
cmp $0, %al |
jz parse_done |
inc %di |
mov $8, %ecx |
parse_height: |
mov (%di), %al |
# check for digit |
cmp $'0', %al |
jb parse_height_done |
cmp $'9', %al |
ja parse_height_done |
sub $'0', %al |
# multiply default_height by 10 and add digit |
mov default_height - vesa_init, %bx |
lea (%ebx, %ebx, 4), %ebx |
shl $1, %ebx |
add %ax, %bx |
mov %bx, default_height - vesa_init |
inc %di |
loop parse_height |
parse_height_done: |
mov (%di), %al |
cmp $0, %al |
jz parse_done |
inc %di |
mov $4, %ecx |
parse_bpp: |
mov (%di), %al |
# check for digit |
cmp $'0', %al |
jb parse_bpp_done |
cmp $'9', %al |
ja parse_bpp_done |
sub $'0', %al |
# multiply default_bpp by 10 and add digit |
mov default_bpp - vesa_init, %bx |
lea (%ebx, %ebx, 4), %ebx |
shl $1, %ebx |
add %ax, %bx |
mov %bx, default_bpp - vesa_init |
inc %di |
loop parse_bpp |
parse_bpp_done: |
parse_done: |
mov $VESA_GET_INFO, %ax |
mov $e_vesa_init - vesa_init, %di |
push %di |
int $0x10 |
pop %di |
cmp $VESA_OK, %al |
jnz no_mode |
mov 2 + VESA_MODE_LIST_PTR_OFFSET(%di), %si |
mov %si, %gs |
mov VESA_MODE_LIST_PTR_OFFSET(%di), %si |
add $VESA_INFO_SIZE, %di |
next_mode: |
# try next mode |
mov %gs:(%si), %cx |
cmp $VESA_END_OF_MODES, %cx |
je no_mode |
inc %si |
inc %si |
push %cx |
push %di |
push %si |
mov $VESA_GET_MODE_INFO, %ax |
int $0x10 |
pop %si |
pop %di |
pop %cx |
cmp $VESA_OK, %al |
jne no_mode |
# check for proper attributes (supported, color, graphics, linear framebuffer) |
mov VESA_MODE_ATTRIBUTES_OFFSET(%di), %ax |
and $0x99, %ax |
cmp $0x99, %ax |
jne next_mode |
# check for proper resolution |
mov default_width - vesa_init, %ax |
cmp VESA_MODE_WIDTH_OFFSET(%di), %ax |
jne next_mode |
mov default_height - vesa_init, %ax |
cmp VESA_MODE_HEIGHT_OFFSET(%di), %ax |
jne next_mode |
# check for proper bpp |
mov default_bpp - vesa_init, %al |
cmp VESA_MODE_BPP_OFFSET(%di), %al |
je set_mode |
mov $24, %al |
cmp default_bpp - vesa_init, %al |
jne next_mode |
# for 24 bpp modes accept also 32 bit bpp |
mov $32, %al |
cmp VESA_MODE_BPP_OFFSET(%di), %al |
jne next_mode |
set_mode: |
mov %cx, %bx |
or $0xc000, %bx |
push %di |
mov $VESA_SET_MODE, %ax |
int $0x10 |
pop %di |
cmp $VESA_OK, %al |
jnz no_mode |
# set 3:2:3 VGA palette |
mov VESA_MODE_BPP_OFFSET(%di), %al |
cmp $8, %al |
jnz vga_not_set |
mov VESA_MODE_ATTRIBUTES_OFFSET(%di), %ax |
push %di |
mov $vga323 - vesa_init, %di |
mov $0x100, %ecx |
bt $5, %ax # test if VGA compatible registers are present |
jnc vga_compat |
# try VESA routine to set palette |
mov $VESA_SET_PALETTE, %ax |
xor %bl, %bl |
xor %dx, %dx |
int $0x10 |
cmp $0x00, %ah |
je vga_not_compat |
vga_compat: |
# try VGA registers to set palette |
movw $0x3c6, %dx # set palette mask |
movb $0xff, %al |
outb %al, %dx |
movw $0x3c8, %dx # first index to set |
xor %al, %al |
outb %al, %dx |
movw $0x3c9, %dx # data port |
vga_loop: |
movb %es:2(%di), %al |
outb %al, %dx |
movb %es:1(%di), %al |
outb %al, %dx |
movb %es:(%di), %al |
outb %al, %dx |
addw $4, %di |
loop vga_loop |
vga_not_compat: |
pop %di |
vga_not_set: |
# store mode parameters |
# eax = bpp[8] scanline[16] |
# ebx = width[16] height[16] |
# edx = red_mask[8] red_pos[8] green_mask[8] green_pos[8] |
# esi = blue_mask[8] blue_pos[8] |
# edi = linear frame buffer |
mov VESA_MODE_BPP_OFFSET(%di), %al |
xor %ah, %ah |
shl $16, %eax |
mov VESA_MODE_SCANLINE_OFFSET(%di), %ax |
mov VESA_MODE_WIDTH_OFFSET(%di), %bx |
shl $16, %ebx |
mov VESA_MODE_HEIGHT_OFFSET(%di), %bx |
mov VESA_MODE_BLUE_MASK_OFFSET(%di), %dl |
shl $8, %edx |
mov VESA_MODE_BLUE_POS_OFFSET(%di), %dl |
mov %edx, %esi |
mov VESA_MODE_RED_MASK_OFFSET(%di), %dl |
shl $8, %edx |
mov VESA_MODE_RED_POS_OFFSET(%di), %dl |
shl $8, %edx |
mov VESA_MODE_GREEN_MASK_OFFSET(%di), %dl |
shl $8, %edx |
mov VESA_MODE_GREEN_POS_OFFSET(%di), %dl |
mov VESA_MODE_PHADDR_OFFSET(%di), %edi |
vesa_leave_real: |
mov %cr0, %ecx |
or $1, %ecx |
mov %ecx, %cr0 |
jmp vesa_leave_real2 |
vesa_leave_real2: |
ljmpl $gdtselector(KTEXT32_DES), $(vesa_init_protected - vesa_init + VESA_INIT_SEGMENT << 4) |
no_mode: |
# no prefered mode found |
mov $0x111, %cx |
push %di |
push %cx |
mov $VESA_GET_MODE_INFO, %ax |
int $0x10 |
pop %cx |
pop %di |
cmp $VESA_OK, %al |
jnz text_mode |
jz set_mode # force relative jump |
text_mode: |
# reset to EGA text mode (because of problems with VESA) |
mov $0x0003, %ax |
int $0x10 |
mov $0xffffffff, %edi |
xor %ax, %ax |
jz vesa_leave_real # force relative jump |
vga323: |
#include "vga323.pal" |
default_width: |
.word 0 |
default_height: |
.word 0 |
default_bpp: |
.byte 0 |
default_mode: |
.ascii STRING(CONFIG_VESA_MODE) |
.ascii "-" |
.asciz STRING(CONFIG_VESA_BPP) |
.fill 24 |
#include "vesa_ret.inc" |
.align 4 |
e_vesa_init: |
#endif |
//branches/tracing/kernel/arch/ia32/src/boot/vesa_prot.inc |
---|
0,0 → 1,107 |
#ifdef CONFIG_FB |
#define MULTIBOOT_LOADER_MAGIC 0x2BADB002 |
#define MBINFO_BIT_CMDLINE 2 |
#define MBINFO_OFFSET_CMDLINE 16 |
# copy real mode VESA initialization code |
mov $vesa_init, %esi |
mov $VESA_INIT_SEGMENT << 4, %edi |
mov $e_vesa_init - vesa_init, %ecx |
rep movsb |
# check for GRUB command line |
mov grub_eax, %eax |
cmp $MULTIBOOT_LOADER_MAGIC, %eax |
jne no_cmdline |
mov grub_ebx, %ebx |
mov (%ebx), %eax |
bt $MBINFO_BIT_CMDLINE, %eax |
jnc no_cmdline |
# skip the kernel path in command line |
mov MBINFO_OFFSET_CMDLINE(%ebx), %esi |
skip_loop: |
lodsb |
cmp $0, %al |
je no_cmdline |
cmp $' ', %al |
je skip_loop_done |
jmp skip_loop |
skip_loop_done: |
space_loop: |
mov (%esi), %al |
cmp $0, %al |
je no_cmdline |
cmp $' ', %al |
jne space_loop_done |
inc %esi |
jmp space_loop |
space_loop_done: |
# copy at most 23 characters from command line |
mov $VESA_INIT_SEGMENT << 4, %edi |
add $default_mode - vesa_init, %edi |
mov $23, %ecx |
cmd_loop: |
lodsb |
stosb |
cmp $0, %al |
je cmd_loop_done |
loop cmd_loop |
cmd_loop_done: |
# zero termination |
xor %eax, %eax |
stosb |
no_cmdline: |
# jump to the real mode |
mov $VESA_INIT_SEGMENT << 4, %edi |
jmpl *%edi |
vesa_meeting_point: |
# returned back to protected mode |
mov %ax, KA2PA(vesa_scanline) |
shr $16, %eax |
mov %ax, KA2PA(vesa_bpp) |
mov %bx, KA2PA(vesa_height) |
shr $16, %ebx |
mov %bx, KA2PA(vesa_width) |
mov %dl, KA2PA(vesa_green_pos) |
shr $8, %edx |
mov %dl, KA2PA(vesa_green_mask) |
shr $8, %edx |
mov %dl, KA2PA(vesa_red_pos) |
shr $8, %edx |
mov %dl, KA2PA(vesa_red_mask) |
mov %esi, %edx |
mov %dl, KA2PA(vesa_blue_pos) |
shr $8, %edx |
mov %dl, KA2PA(vesa_blue_mask) |
mov %edi, KA2PA(vesa_ph_addr) |
#endif |
//branches/tracing/kernel/arch/ia32/src/mm/tlb.c |
---|
67,5 → 67,13 |
invlpg(page + i * PAGE_SIZE); |
} |
void tlb_arch_init(void) |
{ |
} |
void tlb_print(void) |
{ |
} |
/** @} |
*/ |
//branches/tracing/kernel/arch/ia32/src/mm/frame.c |
---|
54,26 → 54,57 |
static void init_e820_memory(pfn_t minconf) |
{ |
unsigned int i; |
pfn_t start, conf; |
size_t size; |
for (i = 0; i < e820counter; i++) { |
uint64_t base = e820table[i].base_address; |
uint64_t size = e820table[i].size; |
#ifdef __32_BITS__ |
/* Ignore physical memory above 4 GB */ |
if ((base >> 32) != 0) |
continue; |
/* Clip regions above 4 GB */ |
if (((base + size) >> 32) != 0) |
size = 0xffffffff - base; |
#endif |
pfn_t pfn; |
count_t count; |
if (e820table[i].type == MEMMAP_MEMORY_AVAILABLE) { |
start = ADDR2PFN(ALIGN_UP(e820table[i].base_address, FRAME_SIZE)); |
size = SIZE2FRAMES(ALIGN_DOWN(e820table[i].size, FRAME_SIZE)); |
/* To be safe, make available zone possibly smaller */ |
pfn = ADDR2PFN(ALIGN_UP(base, FRAME_SIZE)); |
count = SIZE2FRAMES(ALIGN_DOWN(size, FRAME_SIZE)); |
if ((minconf < start) || (minconf >= start + size)) |
conf = start; |
pfn_t conf; |
if ((minconf < pfn) || (minconf >= pfn + count)) |
conf = pfn; |
else |
conf = minconf; |
zone_create(start, size, conf, 0); |
zone_create(pfn, count, conf, ZONE_AVAILABLE); |
if (last_frame < ALIGN_UP(e820table[i].base_address + |
e820table[i].size, FRAME_SIZE)) |
last_frame = |
ALIGN_UP(e820table[i].base_address + e820table[i].size, FRAME_SIZE); |
} |
// XXX this has to be removed |
if (last_frame < ALIGN_UP(base + size, FRAME_SIZE)) |
last_frame = ALIGN_UP(base + size, FRAME_SIZE); |
} |
if (e820table[i].type == MEMMAP_MEMORY_RESERVED) { |
/* To be safe, make reserved zone possibly larger */ |
pfn = ADDR2PFN(ALIGN_DOWN(base, FRAME_SIZE)); |
count = SIZE2FRAMES(ALIGN_UP(size, FRAME_SIZE)); |
zone_create(pfn, count, 0, ZONE_RESERVED); |
} |
if (e820table[i].type == MEMMAP_MEMORY_ACPI) { |
/* To be safe, make firmware zone possibly larger */ |
pfn = ADDR2PFN(ALIGN_DOWN(base, (uintptr_t) FRAME_SIZE)); |
count = SIZE2FRAMES(ALIGN_UP(size, (uintptr_t) FRAME_SIZE)); |
zone_create(pfn, count, 0, ZONE_FIRMWARE); |
} |
} |
} |
113,16 → 144,14 |
if (config.cpu_active == 1) { |
minconf = 1; |
#ifdef CONFIG_SMP |
minconf = max(minconf, |
ADDR2PFN(AP_BOOT_OFFSET + hardcoded_unmapped_ktext_size + |
hardcoded_unmapped_kdata_size)); |
#endif |
#ifdef CONFIG_SIMICS_FIX |
minconf = max(minconf, ADDR2PFN(0x10000)); |
#endif |
init_e820_memory(minconf); |
/* Reserve frame 0 (BIOS data) */ |
frame_mark_unavailable(0, 1); |
131,12 → 160,7 |
frame_mark_unavailable(AP_BOOT_OFFSET >> FRAME_WIDTH, |
(hardcoded_unmapped_ktext_size + |
hardcoded_unmapped_kdata_size) >> FRAME_WIDTH); |
#ifdef CONFIG_SIMICS_FIX |
/* Don't know why, but these addresses help */ |
frame_mark_unavailable(0xd000 >> FRAME_WIDTH, 3); |
#endif |
#endif |
} |
} |
//branches/tracing/kernel/arch/ia32/src/mm/page.c |
---|
53,7 → 53,7 |
{ |
uintptr_t cur; |
int flags; |
if (config.cpu_active == 1) { |
page_mapping_operations = &pt_mapping_operations; |
66,12 → 66,12 |
flags |= PAGE_GLOBAL; |
page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags); |
} |
exc_register(14, "page_fault", (iroutine) page_fault); |
write_cr3((uintptr_t) AS_KERNEL->genarch.page_table); |
} else |
write_cr3((uintptr_t) AS_KERNEL->genarch.page_table); |
paging_on(); |
} |
79,7 → 79,7 |
uintptr_t hw_map(uintptr_t physaddr, size_t size) |
{ |
if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH)) |
panic("Unable to map physical memory %p (%d bytes)", physaddr, size) |
panic("Unable to map physical memory %p (%d bytes).", physaddr, size) |
uintptr_t virtaddr = PA2KA(last_frame); |
pfn_t i; |
101,8 → 101,8 |
page = read_cr2(); |
if (istate->error_word & PFERR_CODE_RSVD) |
panic("Reserved bit set in page directory.\n"); |
panic("Reserved bit set in page directory."); |
if (istate->error_word & PFERR_CODE_RW) |
access = PF_ACCESS_WRITE; |
else |
109,11 → 109,11 |
access = PF_ACCESS_READ; |
if (as_page_fault(page, access, istate) == AS_PF_FAULT) { |
fault_if_from_uspace(istate, "Page fault: %#x", page); |
fault_if_from_uspace(istate, "Page fault: %#x.", page); |
decode_istate(istate); |
printf("page fault address: %#lx\n", page); |
panic("page fault\n"); |
panic("Page fault."); |
} |
} |
//branches/tracing/kernel/arch/ia32/src/userspace.c |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** @file |
47,10 → 47,8 |
*/ |
void userspace(uspace_arg_t *kernel_uarg) |
{ |
ipl_t ipl; |
ipl = interrupts_disable(); |
ipl_t ipl = interrupts_disable(); |
asm volatile ( |
/* |
* Clear nested task flag. |
60,35 → 58,33 |
"and $0xffffbfff, %%eax\n" |
"push %%eax\n" |
"popfl\n" |
/* Set up GS register (TLS) */ |
"movl %6, %%gs\n" |
"pushl %0\n" |
"pushl %1\n" |
"pushl %2\n" |
"pushl %3\n" |
"pushl %4\n" |
"movl %5, %%eax\n" |
"movl %[tls_des], %%gs\n" |
"pushl %[udata_des]\n" |
"pushl %[stack_size]\n" |
"pushl %[ipl]\n" |
"pushl %[utext_des]\n" |
"pushl %[entry]\n" |
"movl %[uarg], %%eax\n" |
/* %ebx is defined to hold pcb_ptr - set it to 0 */ |
"xorl %%ebx, %%ebx\n" |
"xorl %%ebx, %%ebx\n" |
"iret\n" |
: |
: "i" (selector(UDATA_DES) | PL_USER), |
"r" ((uint8_t *) kernel_uarg->uspace_stack + |
THREAD_STACK_SIZE), |
"r" (ipl), |
"i" (selector(UTEXT_DES) | PL_USER), |
"r" (kernel_uarg->uspace_entry), |
"r" (kernel_uarg->uspace_uarg), |
"r" (selector(TLS_DES)) |
: |
: [udata_des] "i" (gdtselector(UDATA_DES) | PL_USER), |
[stack_size] "r" ((uint8_t *) kernel_uarg->uspace_stack + THREAD_STACK_SIZE), |
[ipl] "r" (ipl), |
[utext_des] "i" (gdtselector(UTEXT_DES) | PL_USER), |
[entry] "r" (kernel_uarg->uspace_entry), |
[uarg] "r" (kernel_uarg->uspace_uarg), |
[tls_des] "r" (gdtselector(TLS_DES)) |
: "eax"); |
/* Unreachable */ |
for(;;) |
; |
while (1); |
} |
/** @} |
//branches/tracing/kernel/arch/ia32/src/interrupt.c |
---|
44,7 → 44,6 |
#include <mm/tlb.h> |
#include <mm/as.h> |
#include <arch.h> |
#include <symtab.h> |
#include <proc/thread.h> |
#include <proc/task.h> |
#include <synch/spinlock.h> |
52,6 → 51,7 |
#include <ipc/sysipc.h> |
#include <interrupt.h> |
#include <ddi/irq.h> |
#include <symtab.h> |
/* |
* Interrupt and exception dispatching. |
63,10 → 63,9 |
void decode_istate(istate_t *istate) |
{ |
char *symbol = get_symtab_entry(istate->eip); |
char *symbol; |
if (!symbol) |
symbol = ""; |
symbol = symtab_fmt_name_lookup(istate->eip); |
if (CPU) |
printf("----------------EXCEPTION OCCURED (cpu%u)----------------\n", CPU->id); |
77,9 → 76,6 |
printf("ERROR_WORD=%#lx\n", istate->error_word); |
printf("%%cs=%#lx,flags=%#lx\n", istate->cs, istate->eflags); |
printf("%%eax=%#lx, %%ecx=%#lx, %%edx=%#lx, %%esp=%p\n", istate->eax, istate->ecx, istate->edx, &istate->stack[0]); |
#ifdef CONFIG_DEBUG_ALLREGS |
printf("%%esi=%#lx, %%edi=%#lx, %%ebp=%#lx, %%ebx=%#lx\n", istate->esi, istate->edi, istate->ebp, istate->ebx); |
#endif |
printf("stack: %#lx, %#lx, %#lx, %#lx\n", istate->stack[0], istate->stack[1], istate->stack[2], istate->stack[3]); |
printf(" %#lx, %#lx, %#lx, %#lx\n", istate->stack[4], istate->stack[5], istate->stack[6], istate->stack[7]); |
} |
89,16 → 85,16 |
if (eoi_function) |
eoi_function(); |
else |
panic("no eoi_function\n"); |
panic("No eoi_function."); |
} |
static void null_interrupt(int n, istate_t *istate) |
{ |
fault_if_from_uspace(istate, "unserviced interrupt: %d", n); |
fault_if_from_uspace(istate, "Unserviced interrupt: %d.", n); |
decode_istate(istate); |
panic("unserviced interrupt: %d\n", n); |
panic("Unserviced interrupt: %d.", n); |
} |
/** General Protection Fault. */ |
122,19 → 118,19 |
io_perm_bitmap_install(); |
return; |
} |
fault_if_from_uspace(istate, "general protection fault"); |
fault_if_from_uspace(istate, "General protection fault."); |
} |
decode_istate(istate); |
panic("general protection fault\n"); |
panic("General protection fault."); |
} |
static void ss_fault(int n __attribute__((unused)), istate_t *istate) |
{ |
fault_if_from_uspace(istate, "stack fault"); |
fault_if_from_uspace(istate, "Stack fault."); |
decode_istate(istate); |
panic("stack fault\n"); |
panic("Stack fault."); |
} |
static void simd_fp_exception(int n __attribute__((unused)), istate_t *istate) |
141,15 → 137,15 |
{ |
uint32_t mxcsr; |
asm ( |
"stmxcsr %0;\n" |
: "=m" (mxcsr) |
"stmxcsr %[mxcsr]\n" |
: [mxcsr] "=m" (mxcsr) |
); |
fault_if_from_uspace(istate, "SIMD FP exception(19), MXCSR: %#zx", |
fault_if_from_uspace(istate, "SIMD FP exception(19), MXCSR: %#zx.", |
(unative_t) mxcsr); |
decode_istate(istate); |
printf("MXCSR: %#lx\n", mxcsr); |
panic("SIMD FP exception(19)\n"); |
panic("SIMD FP exception(19)."); |
} |
static void nm_fault(int n __attribute__((unused)), istate_t *istate __attribute__((unused))) |
157,8 → 153,8 |
#ifdef CONFIG_FPU_LAZY |
scheduler_fpu_lazy_request(); |
#else |
fault_if_from_uspace(istate, "fpu fault"); |
panic("fpu fault"); |
fault_if_from_uspace(istate, "FPU fault."); |
panic("FPU fault."); |
#endif |
} |
191,7 → 187,7 |
trap_virtual_eoi(); |
ack = true; |
} |
irq->handler(irq, irq->arg); |
irq->handler(irq); |
spinlock_unlock(&irq->lock); |
} else { |
/* |
233,7 → 229,7 |
if (enable_irqs_function) |
enable_irqs_function(irqmask); |
else |
panic("no enable_irqs_function\n"); |
panic("No enable_irqs_function."); |
} |
void trap_virtual_disable_irqs(uint16_t irqmask) |
241,7 → 237,7 |
if (disable_irqs_function) |
disable_irqs_function(irqmask); |
else |
panic("no disable_irqs_function\n"); |
panic("No disable_irqs_function."); |
} |
/** @} |
//branches/tracing/kernel/arch/ia32/src/drivers/ega.c |
---|
File deleted |
//branches/tracing/kernel/arch/ia32/src/drivers/vesa.c |
---|
56,12 → 56,20 |
uint16_t vesa_bpp; |
uint16_t vesa_scanline; |
uint8_t vesa_red_mask; |
uint8_t vesa_red_pos; |
uint8_t vesa_green_mask; |
uint8_t vesa_green_pos; |
uint8_t vesa_blue_mask; |
uint8_t vesa_blue_pos; |
int vesa_present(void) |
{ |
if (vesa_width != 0xffff) |
if ((vesa_width != 0xffff) && (vesa_height != 0xffff)) |
return true; |
if (vesa_height != 0xffff) |
return true; |
return false; |
} |
74,7 → 82,12 |
visual = VISUAL_INDIRECT_8; |
break; |
case 16: |
visual = VISUAL_RGB_5_6_5; |
if ((vesa_red_mask == 5) && (vesa_red_pos == 10) |
&& (vesa_green_mask == 5) && (vesa_green_pos == 5) |
&& (vesa_blue_mask == 5) && (vesa_blue_pos == 0)) |
visual = VISUAL_RGB_5_5_5; |
else |
visual = VISUAL_RGB_5_6_5; |
break; |
case 24: |
visual = VISUAL_RGB_8_8_8; |
83,7 → 96,7 |
visual = VISUAL_RGB_0_8_8_8; |
break; |
default: |
panic("Unsupported bits per pixel"); |
panic("Unsupported bits per pixel."); |
} |
fb_properties_t vesa_props = { |
97,6 → 110,11 |
fb_init(&vesa_props); |
} |
void vesa_redraw(void) |
{ |
fb_redraw(); |
} |
#endif |
/** @} |
//branches/tracing/kernel/arch/ia32/src/drivers/i8259.c |
---|
49,28 → 49,28 |
void i8259_init(void) |
{ |
/* ICW1: this is ICW1, ICW4 to follow */ |
outb(PIC_PIC0PORT1, PIC_ICW1 | PIC_NEEDICW4); |
pio_write_8(PIC_PIC0PORT1, PIC_ICW1 | PIC_NEEDICW4); |
/* ICW2: IRQ 0 maps to INT IRQBASE */ |
outb(PIC_PIC0PORT2, IVT_IRQBASE); |
pio_write_8(PIC_PIC0PORT2, IVT_IRQBASE); |
/* ICW3: pic1 using IRQ IRQ_PIC1 */ |
outb(PIC_PIC0PORT2, 1 << IRQ_PIC1); |
pio_write_8(PIC_PIC0PORT2, 1 << IRQ_PIC1); |
/* ICW4: i8086 mode */ |
outb(PIC_PIC0PORT2, 1); |
pio_write_8(PIC_PIC0PORT2, 1); |
/* ICW1: ICW1, ICW4 to follow */ |
outb(PIC_PIC1PORT1, PIC_ICW1 | PIC_NEEDICW4); |
pio_write_8(PIC_PIC1PORT1, PIC_ICW1 | PIC_NEEDICW4); |
/* ICW2: IRQ 8 maps to INT (IVT_IRQBASE + 8) */ |
outb(PIC_PIC1PORT2, IVT_IRQBASE + 8); |
pio_write_8(PIC_PIC1PORT2, IVT_IRQBASE + 8); |
/* ICW3: pic1 is known as IRQ_PIC1 */ |
outb(PIC_PIC1PORT2, IRQ_PIC1); |
pio_write_8(PIC_PIC1PORT2, IRQ_PIC1); |
/* ICW4: i8086 mode */ |
outb(PIC_PIC1PORT2, 1); |
pio_write_8(PIC_PIC1PORT2, 1); |
/* |
* Register interrupt handler for the PIC spurious interrupt. |
94,12 → 94,12 |
uint8_t x; |
if (irqmask & 0xff) { |
x = inb(PIC_PIC0PORT2); |
outb(PIC_PIC0PORT2, (uint8_t) (x & (~(irqmask & 0xff)))); |
x = pio_read_8(PIC_PIC0PORT2); |
pio_write_8(PIC_PIC0PORT2, (uint8_t) (x & (~(irqmask & 0xff)))); |
} |
if (irqmask >> 8) { |
x = inb(PIC_PIC1PORT2); |
outb(PIC_PIC1PORT2, (uint8_t) (x & (~(irqmask >> 8)))); |
x = pio_read_8(PIC_PIC1PORT2); |
pio_write_8(PIC_PIC1PORT2, (uint8_t) (x & (~(irqmask >> 8)))); |
} |
} |
108,19 → 108,19 |
uint8_t x; |
if (irqmask & 0xff) { |
x = inb(PIC_PIC0PORT2); |
outb(PIC_PIC0PORT2, (uint8_t) (x | (irqmask & 0xff))); |
x = pio_read_8(PIC_PIC0PORT2); |
pio_write_8(PIC_PIC0PORT2, (uint8_t) (x | (irqmask & 0xff))); |
} |
if (irqmask >> 8) { |
x = inb(PIC_PIC1PORT2); |
outb(PIC_PIC1PORT2, (uint8_t) (x | (irqmask >> 8))); |
x = pio_read_8(PIC_PIC1PORT2); |
pio_write_8(PIC_PIC1PORT2, (uint8_t) (x | (irqmask >> 8))); |
} |
} |
void pic_eoi(void) |
{ |
outb(0x20, 0x20); |
outb(0xa0, 0x20); |
pio_write_8((ioport8_t *)0x20, 0x20); |
pio_write_8((ioport8_t *)0xa0, 0x20); |
} |
void pic_spurious(int n __attribute__((unused)), istate_t *istate __attribute__((unused))) |
//branches/tracing/kernel/arch/ia32/src/drivers/i8254.c |
---|
26,12 → 26,12 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia32 |
/** @addtogroup ia32 |
* @{ |
*/ |
/** |
* @file |
* @brief i8254 chip driver. |
* @brief i8254 chip driver. |
* |
* Low level time functions. |
*/ |
53,8 → 53,8 |
#include <ddi/irq.h> |
#include <ddi/device.h> |
#define CLK_PORT1 0x40 |
#define CLK_PORT4 0x43 |
#define CLK_PORT1 ((ioport8_t *)0x40) |
#define CLK_PORT4 ((ioport8_t *)0x43) |
#define CLK_CONST 1193180 |
#define MAGIC_NUMBER 1194 |
61,12 → 61,12 |
static irq_t i8254_irq; |
static irq_ownership_t i8254_claim(void) |
static irq_ownership_t i8254_claim(irq_t *irq) |
{ |
return IRQ_ACCEPT; |
} |
static void i8254_irq_handler(irq_t *irq, void *arg __attribute__((unused)), ...) |
static void i8254_irq_handler(irq_t *irq) |
{ |
/* |
* This IRQ is responsible for kernel preemption. |
94,10 → 94,10 |
void i8254_normal_operation(void) |
{ |
outb(CLK_PORT4, 0x36); |
pio_write_8(CLK_PORT4, 0x36); |
pic_disable_irqs(1 << IRQ_CLK); |
outb(CLK_PORT1, (CLK_CONST / HZ) & 0xf); |
outb(CLK_PORT1, (CLK_CONST / HZ) >> 8); |
pio_write_8(CLK_PORT1, (CLK_CONST / HZ) & 0xf); |
pio_write_8(CLK_PORT1, (CLK_CONST / HZ) >> 8); |
pic_enable_irqs(1 << IRQ_CLK); |
} |
114,36 → 114,36 |
* One-shot timer. Count-down from 0xffff at 1193180Hz |
* MAGIC_NUMBER is the magic value for 1ms. |
*/ |
outb(CLK_PORT4, 0x30); |
outb(CLK_PORT1, 0xff); |
outb(CLK_PORT1, 0xff); |
pio_write_8(CLK_PORT4, 0x30); |
pio_write_8(CLK_PORT1, 0xff); |
pio_write_8(CLK_PORT1, 0xff); |
do { |
/* will read both status and count */ |
outb(CLK_PORT4, 0xc2); |
not_ok = (uint8_t) ((inb(CLK_PORT1) >> 6) & 1); |
t1 = inb(CLK_PORT1); |
t1 |= inb(CLK_PORT1) << 8; |
pio_write_8(CLK_PORT4, 0xc2); |
not_ok = (uint8_t) ((pio_read_8(CLK_PORT1) >> 6) & 1); |
t1 = pio_read_8(CLK_PORT1); |
t1 |= pio_read_8(CLK_PORT1) << 8; |
} while (not_ok); |
asm_delay_loop(LOOPS); |
outb(CLK_PORT4, 0xd2); |
t2 = inb(CLK_PORT1); |
t2 |= inb(CLK_PORT1) << 8; |
pio_write_8(CLK_PORT4, 0xd2); |
t2 = pio_read_8(CLK_PORT1); |
t2 |= pio_read_8(CLK_PORT1) << 8; |
/* |
* We want to determine the overhead of the calibrating mechanism. |
*/ |
outb(CLK_PORT4, 0xd2); |
o1 = inb(CLK_PORT1); |
o1 |= inb(CLK_PORT1) << 8; |
pio_write_8(CLK_PORT4, 0xd2); |
o1 = pio_read_8(CLK_PORT1); |
o1 |= pio_read_8(CLK_PORT1) << 8; |
asm_fake_loop(LOOPS); |
outb(CLK_PORT4, 0xd2); |
o2 = inb(CLK_PORT1); |
o2 |= inb(CLK_PORT1) << 8; |
pio_write_8(CLK_PORT4, 0xd2); |
o2 = pio_read_8(CLK_PORT1); |
o2 |= pio_read_8(CLK_PORT1) << 8; |
CPU->delay_loop_const = |
((MAGIC_NUMBER * LOOPS) / 1000) / ((t1 - t2) - (o1 - o2)) + |
//branches/tracing/tools/xtui.py |
---|
0,0 → 1,260 |
# |
# Copyright (c) 2009 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions |
# are met: |
# |
# - Redistributions of source code must retain the above copyright |
# notice, this list of conditions and the following disclaimer. |
# - Redistributions in binary form must reproduce the above copyright |
# notice, this list of conditions and the following disclaimer in the |
# documentation and/or other materials provided with the distribution. |
# - The name of the author may not be used to endorse or promote products |
# derived from this software without specific prior written permission. |
# |
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
""" |
Text User Interface wrapper |
""" |
import sys |
import os |
def call_dlg(dlgcmd, *args, **kw): |
"Wrapper for calling 'dialog' program" |
indesc, outdesc = os.pipe() |
pid = os.fork() |
if (not pid): |
os.close(2) |
os.dup(outdesc) |
os.close(indesc) |
dlgargs = [dlgcmd] |
for key, val in kw.items(): |
dlgargs.append('--' + key) |
dlgargs.append(val) |
dlgargs += args |
os.execlp(dlgcmd, *dlgargs) |
os.close(outdesc) |
try: |
errout = os.fdopen(indesc, 'r') |
data = errout.read() |
errout.close() |
pid, status = os.wait() |
except: |
# Reset terminal |
os.system('reset') |
raise |
if (not os.WIFEXITED(status)): |
# Reset terminal |
os.system('reset') |
raise EOFError |
status = os.WEXITSTATUS(status) |
if (status == 255): |
raise EOFError |
return (status, data) |
try: |
import snack |
newt = True |
dialog = False |
except ImportError: |
newt = False |
dlgcmd = os.environ.get('DIALOG', 'dialog') |
if (call_dlg(dlgcmd, '--print-maxsize')[0] != 0): |
dialog = False |
else: |
dialog = True |
width_extra = 13 |
height_extra = 11 |
def width_fix(screen, width): |
"Correct width to screen size" |
if (width + width_extra > screen.width): |
width = screen.width - width_extra |
if (width <= 0): |
width = screen.width |
return width |
def height_fix(screen, height): |
"Correct height to screen size" |
if (height + height_extra > screen.height): |
height = screen.height - height_extra |
if (height <= 0): |
height = screen.height |
return height |
def screen_init(): |
"Initialize the screen" |
if (newt): |
return snack.SnackScreen() |
return None |
def screen_done(screen): |
"Cleanup the screen" |
if (newt): |
screen.finish() |
def choice_window(screen, title, text, options, position): |
"Create options menu" |
maxopt = 0 |
for option in options: |
length = len(option) |
if (length > maxopt): |
maxopt = length |
width = maxopt |
height = len(options) |
if (newt): |
width = width_fix(screen, width + width_extra) |
height = height_fix(screen, height) |
if (height > 3): |
large = True |
else: |
large = False |
buttonbar = snack.ButtonBar(screen, ('Done', 'Cancel')) |
textbox = snack.TextboxReflowed(width, text) |
listbox = snack.Listbox(height, scroll = large, returnExit = 1) |
cnt = 0 |
for option in options: |
listbox.append(option, cnt) |
cnt += 1 |
if (position != None): |
listbox.setCurrent(position) |
grid = snack.GridForm(screen, title, 1, 3) |
grid.add(textbox, 0, 0) |
grid.add(listbox, 0, 1, padding = (0, 1, 0, 1)) |
grid.add(buttonbar, 0, 2, growx = 1) |
retval = grid.runOnce() |
return (buttonbar.buttonPressed(retval), listbox.current()) |
elif (dialog): |
if (width < 35): |
width = 35 |
args = [] |
cnt = 0 |
for option in options: |
args.append(str(cnt + 1)) |
args.append(option) |
cnt += 1 |
kw = {} |
if (position != None): |
kw['default-item'] = str(position + 1) |
status, data = call_dlg(dlgcmd, '--title', title, '--extra-button', '--extra-label', 'Done', '--menu', text, str(height + height_extra), str(width + width_extra), str(cnt), *args, **kw) |
if (status == 1): |
return ('cancel', None) |
try: |
choice = int(data) - 1 |
except ValueError: |
return ('cancel', None) |
if (status == 0): |
return (None, choice) |
return ('done', choice) |
sys.stdout.write("\n *** %s *** \n%s\n\n" % (title, text)) |
maxcnt = len(str(len(options))) |
cnt = 0 |
for option in options: |
sys.stdout.write("%*s. %s\n" % (maxcnt, cnt + 1, option)) |
cnt += 1 |
sys.stdout.write("\n%*s. Done\n" % (maxcnt, '0')) |
sys.stdout.write("%*s. Quit\n\n" % (maxcnt, 'q')) |
while True: |
if (position != None): |
sys.stdout.write("Selection[%s]: " % str(position + 1)) |
else: |
sys.stdout.write("Selection: ") |
inp = sys.stdin.readline() |
if (not inp): |
raise EOFError |
if (not inp.strip()): |
if (position != None): |
return (None, position) |
continue |
if (inp.strip() == 'q'): |
return ('cancel', None) |
try: |
choice = int(inp.strip()) |
except ValueError: |
continue |
if (choice == 0): |
return ('done', 0) |
if (choice < 1) or (choice > len(options)): |
continue |
return (None, choice - 1) |
def error_dialog(screen, title, msg): |
"Print error dialog" |
width = len(msg) |
if (newt): |
width = width_fix(screen, width) |
buttonbar = snack.ButtonBar(screen, ['Ok']) |
textbox = snack.TextboxReflowed(width, msg) |
grid = snack.GridForm(screen, title, 1, 2) |
grid.add(textbox, 0, 0, padding = (0, 0, 0, 1)) |
grid.add(buttonbar, 0, 1, growx = 1) |
grid.runOnce() |
elif (dialog): |
call_dlg(dlgcmd, '--title', title, '--msgbox', msg, '6', str(width + width_extra)) |
else: |
sys.stdout.write("\n%s: %s\n" % (title, msg)) |
//branches/tracing/tools/mkfat.py |
---|
138,7 → 138,7 |
char name[8] /* file name */ |
char ext[3] /* file extension */ |
uint8_t attr /* file attributes */ |
padding[1] /* reserved for NT */ |
uint8_t lcase /* file name case (NT extension) */ |
uint8_t ctime_fine /* create time (fine resolution) */ |
uint16_t ctime /* create time */ |
uint16_t cdate /* create date */ |
217,6 → 217,7 |
else: |
dir_entry.attr = 0x20 |
dir_entry.lcase = 0x18 |
dir_entry.ctime_fine = 0 # FIXME |
dir_entry.ctime = 0 # FIXME |
dir_entry.cdate = 0 # FIXME |
//branches/tracing/tools/config.py |
---|
1,6 → 1,7 |
#!/usr/bin/env python |
# |
# Copyright (c) 2006 Ondrej Palkovsky |
# Copyright (c) 2009 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
27,512 → 28,432 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
""" |
HelenOS configuration script |
HelenOS configuration system |
""" |
import sys |
import os |
import re |
import commands |
import xtui |
INPUT = sys.argv[1] |
OUTPUT = 'Makefile.config' |
TMPOUTPUT = 'Makefile.config.tmp' |
MAKEFILE = 'Makefile.config' |
MACROS = 'config.h' |
DEFS = 'config.defs' |
PRECONF = 'defaults' |
class DefaultDialog: |
"Wrapper dialog that tries to return default values" |
def __init__(self, dlg): |
self.dlg = dlg |
def read_defaults(fname, defaults): |
"Read saved values from last configuration run" |
inf = file(fname, 'r') |
for line in inf: |
res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line) |
if (res): |
defaults[res.group(1)] = res.group(2) |
inf.close() |
def set_title(self,text): |
self.dlg.set_title(text) |
def yesno(self, text, default=None): |
if default is not None: |
return default |
return self.dlg.yesno(text, default) |
def noyes(self, text, default=None): |
if default is not None: |
return default |
return self.dlg.noyes(text, default) |
def choice(self, text, choices, defopt=None): |
if defopt is not None: |
return choices[defopt][0] |
return self.dlg.choice(text, choices, defopt) |
def check_condition(text, defaults, ask_names): |
"Check that the condition specified on input line is True (only CNF and DNF is supported)" |
ctype = 'cnf' |
if ((')|' in text) or ('|(' in text)): |
ctype = 'dnf' |
if (ctype == 'cnf'): |
conds = text.split('&') |
else: |
conds = text.split('|') |
for cond in conds: |
if (cond.startswith('(')) and (cond.endswith(')')): |
cond = cond[1:-1] |
inside = check_inside(cond, defaults, ctype) |
if (ctype == 'cnf') and (not inside): |
return False |
if (ctype == 'dnf') and (inside): |
return True |
if (ctype == 'cnf'): |
return True |
return False |
class NoDialog: |
def __init__(self): |
self.printed = None |
self.title = 'HelenOS Configuration' |
def check_inside(text, defaults, ctype): |
"Check for condition" |
if (ctype == 'cnf'): |
conds = text.split('|') |
else: |
conds = text.split('&') |
for cond in conds: |
res = re.match(r'^(.*?)(!?=)(.*)$', cond) |
if (not res): |
raise RuntimeError("Invalid condition: %s" % cond) |
condname = res.group(1) |
oper = res.group(2) |
condval = res.group(3) |
if (not defaults.has_key(condname)): |
varval = '' |
else: |
varval = defaults[condname] |
if (varval == '*'): |
varval = 'y' |
if (ctype == 'cnf'): |
if (oper == '=') and (condval == varval): |
return True |
if (oper == '!=') and (condval != varval): |
return True |
else: |
if (oper == '=') and (condval != varval): |
return False |
if (oper == '!=') and (condval == varval): |
return False |
if (ctype == 'cnf'): |
return False |
return True |
def print_title(self): |
if not self.printed: |
sys.stdout.write("\n*** %s ***\n" % self.title) |
self.printed = True |
def parse_config(fname, ask_names): |
"Parse configuration file" |
inf = file(fname, 'r') |
name = '' |
choices = [] |
for line in inf: |
if (line.startswith('!')): |
# Ask a question |
res = re.search(r'!\s*(?:\[(.*?)\])?\s*([^\s]+)\s*\((.*)\)\s*$', line) |
if (not res): |
raise RuntimeError("Weird line: %s" % line) |
cond = res.group(1) |
varname = res.group(2) |
vartype = res.group(3) |
ask_names.append((varname, vartype, name, choices, cond)) |
name = '' |
choices = [] |
continue |
if (line.startswith('@')): |
# Add new line into the 'choices' array |
res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line) |
if not res: |
raise RuntimeError("Bad line: %s" % line) |
choices.append((res.group(2), res.group(3))) |
continue |
if (line.startswith('%')): |
# Name of the option |
name = line[1:].strip() |
continue |
if ((line.startswith('#')) or (line == '\n')): |
# Comment or empty line |
continue |
raise RuntimeError("Unknown syntax: %s" % line) |
inf.close() |
def set_title(self, text): |
self.title = text |
self.printed = False |
def noyes(self, text, default=None): |
if not default: |
default = 'n' |
return self.yesno(text, default) |
def yesno(self, text, default=None): |
self.print_title() |
if default != 'n': |
default = 'y' |
while 1: |
sys.stdout.write("%s (y/n)[%s]: " % (text,default)) |
inp = sys.stdin.readline() |
if not inp: |
raise EOFError |
inp = inp.strip().lower() |
if not inp: |
return default |
if inp == 'y': |
return 'y' |
elif inp == 'n': |
return 'n' |
def yes_no(default): |
"Return '*' if yes, ' ' if no" |
if (default == 'y'): |
return '*' |
return ' ' |
def _print_choice(self, text, choices, defopt): |
sys.stdout.write('%s:\n' % text) |
for i,(text,descr) in enumerate(choices): |
if descr is '': |
sys.stdout.write('\t%2d. %s\n' % (i, text)) |
else: |
sys.stdout.write('\t%2d. %s\n' % (i, descr)) |
if defopt is not None: |
sys.stdout.write('Enter choice number[%d]: ' % defopt) |
else: |
sys.stdout.write('Enter choice number: ') |
def subchoice(screen, name, choices, default): |
"Return choice of choices" |
maxkey = 0 |
for key, val in choices: |
length = len(key) |
if (length > maxkey): |
maxkey = length |
options = [] |
position = None |
cnt = 0 |
for key, val in choices: |
if ((default) and (key == default)): |
position = cnt |
options.append(" %-*s %s " % (maxkey, key, val)) |
cnt += 1 |
(button, value) = xtui.choice_window(screen, name, 'Choose value', options, position) |
if (button == 'cancel'): |
return None |
return choices[value][0] |
def menu(self, text, choices, button, defopt=None): |
self.title = 'Main menu' |
menu = [] |
for key, descr in choices: |
txt = key + (45-len(key))*' ' + ': ' + descr |
menu.append((key, txt)) |
return self.choice(text, [button] + menu) |
def choice(self, text, choices, defopt=None): |
self.print_title() |
while 1: |
self._print_choice(text, choices, defopt) |
inp = sys.stdin.readline() |
if not inp: |
raise EOFError |
if not inp.strip(): |
if defopt is not None: |
return choices[defopt][0] |
continue |
try: |
number = int(inp.strip()) |
except ValueError: |
continue |
if number < 0 or number >= len(choices): |
continue |
return choices[number][0] |
def check_choices(defaults, ask_names): |
"Check whether all accessible variables have a default" |
for varname, vartype, name, choices, cond in ask_names: |
if ((cond) and (not check_condition(cond, defaults, ask_names))): |
continue |
if (not defaults.has_key(varname)): |
return False |
return True |
def create_output(mkname, mcname, dfname, defaults, ask_names): |
"Create output configuration" |
revision = commands.getoutput('svnversion . 2> /dev/null') |
timestamp = commands.getoutput('date "+%Y-%m-%d %H:%M:%S"') |
outmk = file(mkname, 'w') |
outmc = file(mcname, 'w') |
outdf = file(dfname, 'w') |
outmk.write('#########################################\n') |
outmk.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
outmk.write('#########################################\n\n') |
outmc.write('/***************************************\n') |
outmc.write(' * AUTO-GENERATED FILE, DO NOT EDIT!!! *\n') |
outmc.write(' ***************************************/\n\n') |
outdf.write('#########################################\n') |
outdf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
outdf.write('#########################################\n\n') |
outdf.write('CONFIG_DEFS =') |
for varname, vartype, name, choices, cond in ask_names: |
if ((cond) and (not check_condition(cond, defaults, ask_names))): |
continue |
if (not defaults.has_key(varname)): |
default = '' |
else: |
default = defaults[varname] |
if (default == '*'): |
default = 'y' |
outmk.write('# %s\n%s = %s\n\n' % (name, varname, default)) |
if ((vartype == "y") or (vartype == "n") or (vartype == "y/n") or (vartype == "n/y")): |
if (default == "y"): |
outmc.write('/* %s */\n#define %s\n\n' % (name, varname)) |
outdf.write(' -D%s' % varname) |
else: |
outmc.write('/* %s */\n#define %s %s\n#define %s_%s\n\n' % (name, varname, default, varname, default)) |
outdf.write(' -D%s=%s -D%s_%s' % (varname, default, varname, default)) |
outmk.write('REVISION = %s\n' % revision) |
outmk.write('TIMESTAMP = %s\n' % timestamp) |
outmc.write('#define REVISION %s\n' % revision) |
outmc.write('#define TIMESTAMP %s\n' % timestamp) |
outdf.write(' "-DREVISION=%s" "-DTIMESTAMP=%s"\n' % (revision, timestamp)) |
outmk.close() |
outmc.close() |
outdf.close() |
def eof_checker(fnc): |
def wrapper(self, *args, **kw): |
try: |
return fnc(self, *args, **kw) |
except EOFError: |
return getattr(self.bckdialog,fnc.func_name)(*args, **kw) |
return wrapper |
def sorted_dir(root): |
list = os.listdir(root) |
list.sort() |
return list |
class Dialog(NoDialog): |
def __init__(self): |
NoDialog.__init__(self) |
self.dlgcmd = os.environ.get('DIALOG','dialog') |
self.title = '' |
self.backtitle = 'HelenOS Configuration' |
if os.system('%s --print-maxsize >/dev/null 2>&1' % self.dlgcmd) != 0: |
raise NotImplementedError |
self.bckdialog = NoDialog() |
def read_preconfigured(root, fname, screen, defaults): |
options = [] |
opt2path = {} |
cnt = 0 |
# Look for profiles |
for name in sorted_dir(root): |
path = os.path.join(root, name) |
canon = os.path.join(path, fname) |
if ((os.path.isdir(path)) and (os.path.exists(canon)) and (os.path.isfile(canon))): |
subprofile = False |
# Look for subprofiles |
for subname in sorted_dir(path): |
subpath = os.path.join(path, subname) |
subcanon = os.path.join(subpath, fname) |
if ((os.path.isdir(subpath)) and (os.path.exists(subcanon)) and (os.path.isfile(subcanon))): |
subprofile = True |
options.append("%s (%s)" % (name, subname)) |
opt2path[cnt] = (canon, subcanon) |
cnt += 1 |
if (not subprofile): |
options.append(name) |
opt2path[cnt] = (canon, None) |
cnt += 1 |
(button, value) = xtui.choice_window(screen, 'Load preconfigured defaults', 'Choose configuration profile', options, None) |
if (button == 'cancel'): |
return None |
read_defaults(opt2path[value][0], defaults) |
if (opt2path[value][1] != None): |
read_defaults(opt2path[value][1], defaults) |
def set_title(self,text): |
self.title = text |
self.bckdialog.set_title(text) |
def calldlg(self,*args,**kw): |
"Wrapper for calling 'dialog' program" |
indesc, outdesc = os.pipe() |
pid = os.fork() |
if not pid: |
os.close(2) |
os.dup(outdesc) |
os.close(indesc) |
dlgargs = [self.dlgcmd,'--title',self.title, |
'--backtitle', self.backtitle] |
for key,val in kw.items(): |
dlgargs.append('--'+key) |
dlgargs.append(val) |
dlgargs += args |
os.execlp(self.dlgcmd,*dlgargs) |
os.close(outdesc) |
try: |
errout = os.fdopen(indesc,'r') |
data = errout.read() |
errout.close() |
pid,status = os.wait() |
except: |
os.system('reset') # Reset terminal |
raise |
if not os.WIFEXITED(status): |
os.system('reset') # Reset terminal |
raise EOFError |
status = os.WEXITSTATUS(status) |
if status == 255: |
raise EOFError |
return status,data |
def yesno(self, text, default=None): |
if text[-1] not in ('?',':'): |
text = text + ':' |
width = '50' |
height = '5' |
if len(text) < 48: |
text = ' '*int(((48-len(text))/2)) + text |
else: |
width = '0' |
height = '0' |
if default == 'n': |
res,data = self.calldlg('--defaultno','--yesno',text,height,width) |
else: |
res,data = self.calldlg('--yesno',text,height,width) |
if res == 0: |
return 'y' |
return 'n' |
yesno = eof_checker(yesno) |
def menu(self, text, choices, button, defopt=None): |
self.title = 'Main menu' |
text = text + ':' |
width = '70' |
height = str(8 + len(choices)) |
args = [] |
for key,val in choices: |
args.append(key) |
args.append(val) |
kw = {} |
if defopt: |
kw['default-item'] = choices[defopt][0] |
res,data = self.calldlg('--ok-label','Change', |
'--extra-label',button[1], |
'--extra-button', |
'--menu',text,height,width, |
str(len(choices)),*args,**kw) |
if res == 3: |
return button[0] |
if res == 1: # Cancel |
sys.exit(1) |
elif res: |
print data |
raise EOFError |
return data |
menu = eof_checker(menu) |
def choice(self, text, choices, defopt=None): |
text = text + ':' |
width = '50' |
height = str(8 + len(choices)) |
args = [] |
for key,val in choices: |
args.append(key) |
args.append(val) |
kw = {} |
if defopt: |
kw['default-item'] = choices[defopt][0] |
res,data = self.calldlg('--nocancel','--menu',text,height,width, |
str(len(choices)),*args, **kw) |
if res: |
print data |
raise EOFError |
return data |
choice = eof_checker(choice) |
def read_defaults(fname,defaults): |
"Read saved values from last configuration run" |
f = file(fname,'r') |
for line in f: |
res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line) |
if res: |
defaults[res.group(1)] = res.group(2) |
f.close() |
def check_condition(text, defaults, asked_names): |
seen_vars = [ x[0] for x in asked_names ] |
ctype = 'cnf' |
if ')|' in text or '|(' in text: |
ctype = 'dnf' |
if ctype == 'cnf': |
conds = text.split('&') |
else: |
conds = text.split('|') |
for cond in conds: |
if cond.startswith('(') and cond.endswith(')'): |
cond = cond[1:-1] |
inside = check_inside(cond, defaults, ctype, seen_vars) |
if ctype == 'cnf' and not inside: |
return False |
if ctype == 'dnf' and inside: |
return True |
if ctype == 'cnf': |
return True |
return False |
def check_inside(text, defaults, ctype, seen_vars): |
""" |
Check that the condition specified on input line is True |
only CNF is supported |
""" |
if ctype == 'cnf': |
conds = text.split('|') |
else: |
conds = text.split('&') |
for cond in conds: |
res = re.match(r'^(.*?)(!?=)(.*)$', cond) |
if not res: |
raise RuntimeError("Invalid condition: %s" % cond) |
condname = res.group(1) |
oper = res.group(2) |
condval = res.group(3) |
if condname not in seen_vars: |
varval = '' |
## raise RuntimeError("Variable %s not defined before being asked." %\ |
## condname) |
elif not defaults.has_key(condname): |
raise RuntimeError("Condition var %s does not exist: %s" % \ |
(condname,text)) |
else: |
varval = defaults[condname] |
if ctype == 'cnf': |
if oper == '=' and condval == varval: |
return True |
if oper == '!=' and condval != varval: |
return True |
else: |
if oper== '=' and condval != varval: |
return False |
if oper== '!=' and condval == varval: |
return False |
if ctype=='cnf': |
return False |
return True |
def parse_config(input, output, dlg, defaults={}, askonly=None): |
"Parse configuration file and create Makefile.config on the fly" |
def ask_the_question(dialog): |
"Ask question based on the type of variables to ask" |
# This is quite a hack, this thingy is written just to |
# have access to local variables.. |
if vartype == 'y/n': |
return dialog.yesno(comment, default) |
elif vartype == 'n/y': |
return dialog.noyes(comment, default) |
elif vartype == 'choice': |
defopt = None |
if default is not None: |
for i,(key,val) in enumerate(choices): |
if key == default: |
defopt = i |
break |
return dialog.choice(comment, choices, defopt) |
else: |
raise RuntimeError("Bad method: %s" % vartype) |
f = file(input, 'r') |
outf = file(output, 'w') |
outf.write('#########################################\n') |
outf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n') |
outf.write('#########################################\n\n') |
asked_names = [] |
comment = '' |
default = None |
choices = [] |
for line in f: |
if line.startswith('%'): |
res = re.match(r'^%\s*(?:\[(.*?)\])?\s*(.*)$', line) |
if not res: |
raise RuntimeError('Invalid command: %s' % line) |
if res.group(1): |
if not check_condition(res.group(1), defaults, |
asked_names): |
continue |
args = res.group(2).strip().split(' ') |
cmd = args[0].lower() |
args = args[1:] |
if cmd == 'saveas': |
outf.write('%s = %s\n' % (args[1],defaults[args[0]])) |
elif cmd == 'shellcmd': |
varname = args[0] |
args = args[1:] |
for i,arg in enumerate(args): |
if arg.startswith('$'): |
args[i] = defaults[arg[1:]] |
data,status = commands.getstatusoutput(' '.join(args)) |
if status: |
raise RuntimeError('Error running: %s' % ' '.join(args)) |
outf.write('%s = %s\n' % (varname,data.strip())) |
continue |
if line.startswith('!'): |
# Ask a question |
res = re.search(r'!\s*(?:\[(.*?)\])?\s*([^\s]+)\s*\((.*)\)\s*$', line) |
if not res: |
raise RuntimeError("Weird line: %s" % line) |
varname = res.group(2) |
vartype = res.group(3) |
default = defaults.get(varname,None) |
if res.group(1): |
if not check_condition(res.group(1), defaults, |
asked_names): |
if default is not None: |
outf.write('#!# %s = %s\n' % (varname, default)) |
# Clear cumulated values |
comment = '' |
default = None |
choices = [] |
continue |
asked_names.append((varname,comment)) |
if default is None or not askonly or askonly == varname: |
default = ask_the_question(dlg) |
else: |
default = ask_the_question(DefaultDialog(dlg)) |
outf.write('%s = %s\n' % (varname, default)) |
# Remeber the selected value |
defaults[varname] = default |
# Clear cumulated values |
comment = '' |
default = None |
choices = [] |
continue |
if line.startswith('@'): |
# Add new line into the 'choice array' |
res = re.match(r'@\s*(?:\[(.*?)\])?\s*"(.*?)"\s*(.*)$', line) |
if not res: |
raise RuntimeError("Bad line: %s" % line) |
if res.group(1): |
if not check_condition(res.group(1),defaults, |
asked_names): |
continue |
choices.append((res.group(2), res.group(3))) |
continue |
# All other things print to output file |
outf.write(line) |
if re.match(r'^#[^#]', line): |
# Last comment before question will be displayed to the user |
comment = line[1:].strip() |
elif line.startswith('## '): |
# Set title of the dialog window |
dlg.set_title(line[2:].strip()) |
outf.write('\n') |
outf.write('REVISION = %s\n' % commands.getoutput('svnversion . 2> /dev/null')) |
outf.write('TIMESTAMP = %s\n' % commands.getoutput('date "+%Y-%m-%d %H:%M:%S"')) |
outf.close() |
f.close() |
return asked_names |
def main(): |
defaults = {} |
try: |
dlg = Dialog() |
except NotImplementedError: |
dlg = NoDialog() |
if len(sys.argv) >= 3 and sys.argv[2]=='default': |
defmode = True |
else: |
defmode = False |
# Default run will update the configuration file |
# with newest options |
if os.path.exists(OUTPUT): |
read_defaults(OUTPUT, defaults) |
# Get ARCH from command line if specified |
if len(sys.argv) >= 4: |
defaults['ARCH'] = sys.argv[3] |
defaults['PLATFORM'] = sys.argv[3] |
defaults = {} |
ask_names = [] |
# Get COMPILER from command line if specified |
if len(sys.argv) >= 5: |
defaults['COMPILER'] = sys.argv[4] |
# Parse configuration file |
parse_config(INPUT, ask_names) |
# Get CONFIG_DEBUG from command line if specified |
if len(sys.argv) >= 6: |
defaults['CONFIG_DEBUG'] = sys.argv[5] |
# Read defaults from previous run |
if os.path.exists(MAKEFILE): |
read_defaults(MAKEFILE, defaults) |
# Get MACHINE/IMAGE from command line if specified |
if len(sys.argv) >= 7: |
defaults['MACHINE'] = sys.argv[6] |
defaults['IMAGE'] = sys.argv[6] |
# Default mode: only check defaults and regenerate configuration |
if ((len(sys.argv) >= 3) and (sys.argv[2] == 'default')): |
if (check_choices(defaults, ask_names)): |
create_output(MAKEFILE, MACROS, DEFS, defaults, ask_names) |
return 0 |
# Check mode: only check defaults |
if ((len(sys.argv) >= 3) and (sys.argv[2] == 'check')): |
if (check_choices(defaults, ask_names)): |
return 0 |
return 1 |
screen = xtui.screen_init() |
try: |
selname = None |
position = None |
while True: |
# Cancel out all defaults which have to be deduced |
for varname, vartype, name, choices, cond in ask_names: |
if ((vartype == 'y') and (defaults.has_key(varname)) and (defaults[varname] == '*')): |
defaults[varname] = None |
options = [] |
opt2row = {} |
cnt = 1 |
options.append(" --- Load preconfigured defaults ... ") |
for varname, vartype, name, choices, cond in ask_names: |
if ((cond) and (not check_condition(cond, defaults, ask_names))): |
continue |
if (varname == selname): |
position = cnt |
if (not defaults.has_key(varname)): |
default = None |
else: |
default = defaults[varname] |
if (vartype == 'choice'): |
# Check if the default is an acceptable value |
if ((default) and (not default in [choice[0] for choice in choices])): |
default = None |
defaults.pop(varname) |
# If there is just one option, use it |
if (len(choices) == 1): |
defaults[varname] = choices[0][0] |
continue |
if (default == None): |
options.append("? %s --> " % name) |
else: |
options.append(" %s [%s] --> " % (name, default)) |
elif (vartype == 'y'): |
defaults[varname] = '*' |
continue |
elif (vartype == 'n'): |
defaults[varname] = 'n' |
continue |
elif (vartype == 'y/n'): |
if (default == None): |
default = 'y' |
defaults[varname] = default |
options.append(" <%s> %s " % (yes_no(default), name)) |
elif (vartype == 'n/y'): |
if (default == None): |
default = 'n' |
defaults[varname] = default |
options.append(" <%s> %s " % (yes_no(default), name)) |
else: |
raise RuntimeError("Unknown variable type: %s" % vartype) |
opt2row[cnt] = (varname, vartype, name, choices) |
cnt += 1 |
if (position >= options): |
position = None |
(button, value) = xtui.choice_window(screen, 'HelenOS configuration', 'Choose configuration option', options, position) |
if (button == 'cancel'): |
return 'Configuration canceled' |
if (button == 'done'): |
if (check_choices(defaults, ask_names)): |
break |
else: |
xtui.error_dialog(screen, 'Error', 'Some options have still undefined values. These options are marked with the "?" sign.') |
continue |
if (value == 0): |
read_preconfigured(PRECONF, MAKEFILE, screen, defaults) |
position = 1 |
continue |
position = None |
if (not opt2row.has_key(value)): |
raise RuntimeError("Error selecting value: %s" % value) |
(selname, seltype, name, choices) = opt2row[value] |
if (not defaults.has_key(selname)): |
default = None |
else: |
default = defaults[selname] |
if (seltype == 'choice'): |
defaults[selname] = subchoice(screen, name, choices, default) |
elif ((seltype == 'y/n') or (seltype == 'n/y')): |
if (defaults[selname] == 'y'): |
defaults[selname] = 'n' |
else: |
defaults[selname] = 'y' |
finally: |
xtui.screen_done(screen) |
create_output(MAKEFILE, MACROS, DEFS, defaults, ask_names) |
return 0 |
# Dry run only with defaults |
varnames = parse_config(INPUT, TMPOUTPUT, DefaultDialog(dlg), defaults) |
# If not in default mode, present selection of all possibilities |
if not defmode: |
defopt = 0 |
while 1: |
# varnames contains variable names that were in the |
# last question set |
choices = [ (x[1],defaults[x[0]]) for x in varnames ] |
res = dlg.menu('Configuration',choices,('save','Save'),defopt) |
if res == 'save': |
parse_config(INPUT, TMPOUTPUT, DefaultDialog(dlg), defaults) |
break |
# transfer description back to varname |
for i,(vname,descr) in enumerate(varnames): |
if res == descr: |
defopt = i |
break |
# Ask the user a simple question, produce output |
# as if the user answered all the other questions |
# with default answer |
varnames = parse_config(INPUT, TMPOUTPUT, dlg, defaults, |
askonly=varnames[i][0]) |
if os.path.exists(OUTPUT): |
os.unlink(OUTPUT) |
os.rename(TMPOUTPUT, OUTPUT) |
if not defmode and dlg.yesno('Rebuild everything?') == 'y': |
os.execlp('make','make','clean','build') |
if __name__ == '__main__': |
main() |
sys.exit(main()) |
//branches/tracing/uspace/uspace.config |
---|
File deleted |
//branches/tracing/uspace/app/bdsh/input.c |
---|
33,6 → 33,11 |
#include <stdlib.h> |
#include <string.h> |
#include <io/stream.h> |
#include <console.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <errno.h> |
#include <bool.h> |
#include "config.h" |
#include "util.h" |
41,21 → 46,8 |
#include "errors.h" |
#include "exec.h" |
extern volatile unsigned int cli_interactive; |
/* Not exposed in input.h */ |
static void cli_restricted(char *); |
static void read_line(char *, int); |
/* More than a macro than anything */ |
static void cli_restricted(char *cmd) |
{ |
printf("%s is not available in %s mode\n", cmd, |
cli_interactive ? "interactive" : "non-interactive"); |
return; |
} |
/* Tokenizes input from console, sees if the first word is a built-in, if so |
* invokes the built-in entry point (a[0]) passing all arguments in a[] to |
* the handler */ |
69,14 → 61,11 |
if (NULL == usr->line) |
return CL_EFAIL; |
tmp = cli_strdup(usr->line); |
tmp = str_dup(usr->line); |
/* Break up what the user typed, space delimited */ |
/* TODO: Protect things in quotes / ticks, expand wildcards */ |
cmd[n] = cli_strtok(tmp, " "); |
cmd[n] = strtok(tmp, " "); |
while (cmd[n] && n < WORD_MAX) { |
cmd[++n] = cli_strtok(NULL, " "); |
cmd[++n] = strtok(NULL, " "); |
} |
/* We have rubbish */ |
85,39 → 74,19 |
goto finit; |
} |
/* Its a builtin command */ |
/* Its a builtin command ? */ |
if ((i = (is_builtin(cmd[0]))) > -1) { |
/* Its not available in this mode, see what try_exec() thinks */ |
if (builtin_is_restricted(i)) { |
rc = try_exec(cmd[0], cmd); |
if (rc) |
/* No external matching it could be found, tell the |
* user that the command does exist, but is not |
* available in this mode. */ |
cli_restricted(cmd[0]); |
goto finit; |
} |
/* Its a builtin, its available, run it */ |
rc = run_builtin(i, cmd, usr); |
goto finit; |
/* We repeat the same dance for modules */ |
/* Its a module ? */ |
} else if ((i = (is_module(cmd[0]))) > -1) { |
if (module_is_restricted(i)) { |
rc = try_exec(cmd[0], cmd); |
if (rc) |
cli_restricted(cmd[0]); |
goto finit; |
} |
rc = run_module(i, cmd); |
goto finit; |
} else { |
/* Its not a module or builtin, restricted or otherwise. |
* See what try_exec() thinks of it and just pass its return |
* value back to the caller */ |
rc = try_exec(cmd[0], cmd); |
goto finit; |
} |
/* See what try_exec thinks of it */ |
rc = try_exec(cmd[0], cmd); |
finit: |
if (NULL != usr->line) { |
free(usr->line); |
129,31 → 98,46 |
return rc; |
} |
/* Borrowed from Jiri Svoboda's 'cli' uspace app */ |
static void read_line(char *buffer, int n) |
{ |
char c; |
int chars; |
kbd_event_t ev; |
size_t offs, otmp; |
wchar_t dec; |
chars = 0; |
while (chars < n - 1) { |
c = getchar(); |
if (c < 0) |
offs = 0; |
while (true) { |
fflush(stdout); |
if (kbd_get_event(&ev) < 0) |
return; |
if (c == '\n') |
if (ev.type == KE_RELEASE) |
continue; |
if (ev.key == KC_ENTER || ev.key == KC_NENTER) |
break; |
if (c == '\b') { |
if (chars > 0) { |
if (ev.key == KC_BACKSPACE) { |
if (offs > 0) { |
/* |
* Back up until we reach valid start of |
* character. |
*/ |
while (offs > 0) { |
--offs; otmp = offs; |
dec = str_decode(buffer, &otmp, n); |
if (dec != U_SPECIAL) |
break; |
} |
putchar('\b'); |
--chars; |
} |
continue; |
} |
putchar(c); |
buffer[chars++] = c; |
if (ev.c >= ' ') { |
//putchar(ev.c); |
if (chr_encode(ev.c, buffer, &offs, n - 1) == EOK) |
console_putchar(ev.c); |
} |
} |
putchar('\n'); |
buffer[chars] = '\0'; |
buffer[offs] = '\0'; |
} |
/* TODO: |
162,15 → 146,16 |
void get_input(cliuser_t *usr) |
{ |
char line[INPUT_MAX]; |
size_t len = 0; |
console_set_style(STYLE_EMPHASIS); |
printf("%s", usr->prompt); |
console_set_style(STYLE_NORMAL); |
read_line(line, INPUT_MAX); |
len = strlen(line); |
/* Make sure we don't have rubbish or a C/R happy user */ |
if (len == 0 || line[0] == '\n') |
if (str_cmp(line, "") == 0 || str_cmp(line, "\n") == 0) |
return; |
usr->line = cli_strdup(line); |
usr->line = str_dup(line); |
return; |
} |
//branches/tracing/uspace/app/bdsh/AUTHORS |
---|
8,9 → 8,6 |
* Based on the HelenOS testing sub-system written by Martin Decky |
* cli_strtok() and cli_strtok_r() (util.c) were adapted from the FreeBSD |
strtok() and strtok_r() functions written by Wes Peters. |
* read_line() (input.c) was written by Jiri Svoboda |
Individual author copyrights are listed in the headers of each file. |
//branches/tracing/uspace/app/bdsh/cmds/mknewcmd |
---|
46,8 → 46,6 |
-e, --entry Entry function of the command (def: cmd_${def}) |
-h, --help-entry Entry function for command help (def: help_cmd_${def}) |
-a, --alias Alias (nickname) for this command (def: none) |
-r, --restrict Restriction level (interactive, non-interactive, both) |
(def: module is both, builtin is interactive only) |
-t, --type Type of command (module or builtin) (def: module) |
-H, --help This help summary |
-V, --version Print $PROGNAME version and exit normally |
67,8 → 65,7 |
$PROGNAME -n foo -d "Foo power" -a bar -r both -t module modules/foo |
The example would generate a modular command named 'foo', which is also |
reached by typing 'bar' and available in either interactive or noninteractive |
mode. |
reached by typing 'bar'. |
Skeletal files do *not* depend on the autoconf generated "config.h" unless you |
include it. This may or may not be desirable depending on your use. |
97,7 → 94,6 |
"${CMDDESC}", |
&${CMDENTRY}, |
&${HELPENTRY}, |
${CMDRESTRICT} |
}, |
EOF |
107,7 → 103,6 |
NULL, |
&${CMDENTRY}, |
&${HELPENTRY}, |
${CMDRESTRICT} |
}, |
EOF |
167,7 → 162,7 |
#include "${CMDNAME}.h" |
#include "cmds.h" |
static char *cmdname = "${CMDNAME}"; |
static const char *cmdname = "${CMDNAME}"; |
/* Dispays help for ${CMDNAME} in various levels */ |
void ${HELPENTRY}(unsigned int level) |
234,8 → 229,8 |
# We need at least one |
[ $# = 0 ] && usage && exit 1; |
TEMP=$(getopt -o n:d:e:h:a:r:t:HV \ |
--long name:,desc:,entry:,help-entry:,alias:,restrict:,type:,help,version \ |
TEMP=$(getopt -o n:d:e:h:a:t:HV \ |
--long name:,desc:,entry:,help-entry:,alias:,type:,help,version \ |
-- "$@") || { |
echo "Try $PROGNAME --help for help" |
} |
269,11 → 264,6 |
shift 2 |
continue |
;; |
-r | --restrict) |
CMDRESTRICT="$2" |
shift 2 |
continue |
;; |
-t | --type) |
CMDTYPE="$2" |
shift 2 |
305,30 → 295,7 |
[ -n "$CMDTYPE" ] || CMDTYPE="module" |
[ -n "$OUTDIR" ] || OUTDIR="${CMDTYPE}s/${CMDNAME}" |
# Builtins typically only need to be available in interactive mode, |
# set the default accordingly. |
[ -n "$CMDRESTRICT" ] || { |
[ "$CMDTYPE" = "module" ] && CMDRESTRICT="both" |
[ "$CMDTYPE" = "builtin" ] && CMDRESTRICT="interactive" |
} |
# Set the restriction level as the structure expects to see it |
case "$CMDRESTRICT" in |
0 | both) |
CMDRESTRICT="0" |
;; |
1 | non-interactive) |
CMDRESTRICT="1" |
;; |
-1 | interactive) |
CMDRESTRICT="-1" |
;; |
*) |
usage |
exit 1 |
;; |
esac |
# Do a little sanity |
[ -d $OUTDIR ] && { |
echo "$OUTDIR already exists, remove it to proceed." |
//branches/tracing/uspace/app/bdsh/cmds/mod_cmds.c |
---|
53,26 → 53,6 |
extern volatile unsigned int cli_interactive; |
int module_is_restricted(int pos) |
{ |
/* Restriction Levels: |
* -1 -> Available only in interactive mode |
* 0 -> Available in any mode |
* 1 -> Available only in non-interactive mode */ |
module_t *mod = modules; |
mod += pos; |
/* We're interactive, and the module is OK to run */ |
if (cli_interactive && mod->restricted <= 0) |
return 0; |
/* We're not interactive, and the module is OK to run */ |
if (!cli_interactive && mod->restricted >= 0) |
return 0; |
/* Anything else is just a big fat no :) */ |
return 1; |
} |
/* Checks if an entry function matching command exists in modules[], if so |
* its position in the array is returned */ |
int is_module(const char *command) |
84,7 → 64,7 |
return -2; |
for (mod = modules; mod->name != NULL; mod++, i++) { |
if (!strcmp(mod->name, command)) |
if (!str_cmp(mod->name, command)) |
return i; |
} |
101,7 → 81,7 |
return -1; |
for(i=0; mod_aliases[i] != NULL; i+=2) { |
if (!strcmp(mod_aliases[i], command)) |
if (!str_cmp(mod_aliases[i], command)) |
return 1; |
} |
117,7 → 97,7 |
return (char *)NULL; |
for(i=0; mod_aliases[i] != NULL; i++) { |
if (!strcmp(mod_aliases[i], command)) |
if (!str_cmp(mod_aliases[i], command)) |
return (char *)mod_aliases[++i]; |
i++; |
} |
//branches/tracing/uspace/app/bdsh/cmds/modules/quit/quit.c |
---|
File deleted |
//branches/tracing/uspace/app/bdsh/cmds/modules/quit/quit_def.h |
---|
File deleted |
//branches/tracing/uspace/app/bdsh/cmds/modules/quit/entry.h |
---|
File deleted |
//branches/tracing/uspace/app/bdsh/cmds/modules/quit/quit.h |
---|
File deleted |
//branches/tracing/uspace/app/bdsh/cmds/modules/mv/mv.c |
---|
0,0 → 1,70 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <errno.h> |
#include "config.h" |
#include "util.h" |
#include "errors.h" |
#include "entry.h" |
#include "mv.h" |
#include "cmds.h" |
static const char *cmdname = "mv"; |
/* Dispays help for mv in various levels */ |
void help_cmd_mv(unsigned int level) |
{ |
printf("'%s' renames files\n", cmdname); |
return; |
} |
/* Main entry point for mv, accepts an array of arguments */ |
int cmd_mv(char **argv) |
{ |
unsigned int argc; |
int rc; |
argc = cli_count_args(argv); |
if (argc != 3) { |
printf("%s: invalid number of arguments.\n", |
cmdname); |
return CMD_FAILURE; |
} |
rc = rename(argv[1], argv[2]); |
if (rc != EOK) { |
printf("Unable to rename %s to %s (rc=%d)\n", |
argv[1], argv[2], rc); |
return CMD_FAILURE; |
} |
return CMD_SUCCESS; |
} |
//branches/tracing/uspace/app/bdsh/cmds/modules/mv/mv_def.h |
---|
0,0 → 1,14 |
{ |
"mv", |
"The mv command", |
&cmd_mv, |
&help_cmd_mv, |
}, |
{ |
"ren", |
NULL, |
&cmd_mv, |
&help_cmd_mv, |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/mv/entry.h |
---|
0,0 → 1,9 |
#ifndef MV_ENTRY_H |
#define MV_ENTRY_H |
/* Entry points for the mv command */ |
extern int cmd_mv(char **); |
extern void help_cmd_mv(unsigned int); |
#endif /* MV_ENTRY_H */ |
//branches/tracing/uspace/app/bdsh/cmds/modules/mv/mv.h |
---|
0,0 → 1,8 |
#ifndef MV_H |
#define MV_H |
/* Prototypes for the mv command, excluding entry points */ |
#endif /* MV_H */ |
//branches/tracing/uspace/app/bdsh/cmds/modules/touch/touch.c |
---|
37,6 → 37,7 |
#include <fcntl.h> |
#include <dirent.h> |
#include <sys/types.h> |
#include <string.h> |
#include "config.h" |
#include "errors.h" |
79,7 → 80,7 |
} |
for (i = 1; i < argc; i ++) { |
buff = cli_strdup(argv[i]); |
buff = str_dup(argv[i]); |
dirp = opendir(buff); |
if (dirp) { |
cli_error(CL_ENOTSUP, "%s is a directory", buff); |
//branches/tracing/uspace/app/bdsh/cmds/modules/touch/touch_def.h |
---|
3,6 → 3,5 |
"Create files or update access times", |
&cmd_touch, |
&help_cmd_touch, |
0 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/mount/mount.c |
---|
0,0 → 1,82 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <vfs/vfs.h> |
#include <errno.h> |
#include "config.h" |
#include "util.h" |
#include "errors.h" |
#include "entry.h" |
#include "mount.h" |
#include "cmds.h" |
static const char *cmdname = "mount"; |
/* Dispays help for mount in various levels */ |
void help_cmd_mount(unsigned int level) |
{ |
static char helpfmt[] = |
"Usage: %s <fstype> <mp> <dev> [<moptions>]\n"; |
if (level == HELP_SHORT) { |
printf("'%s' mounts a file system.\n", cmdname); |
} else { |
help_cmd_mount(HELP_SHORT); |
printf(helpfmt, cmdname); |
} |
return; |
} |
/* Main entry point for mount, accepts an array of arguments */ |
int cmd_mount(char **argv) |
{ |
unsigned int argc; |
char *mopts = ""; |
int rc; |
argc = cli_count_args(argv); |
if ((argc < 4) || (argc > 5)) { |
printf("%s: invalid number of arguments.\n", |
cmdname); |
return CMD_FAILURE; |
} |
if (argc == 5) |
mopts = argv[4]; |
rc = mount(argv[1], argv[2], argv[3], mopts, 0); |
if (rc != EOK) { |
printf("Unable to mount %s filesystem to %s on %s (rc=%d)\n", |
argv[1], argv[2], argv[3], rc); |
return CMD_FAILURE; |
} |
return CMD_SUCCESS; |
} |
//branches/tracing/uspace/app/bdsh/cmds/modules/mount/mount_def.h |
---|
0,0 → 1,7 |
{ |
"mount", |
"The mount command", |
&cmd_mount, |
&help_cmd_mount, |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/mount/entry.h |
---|
0,0 → 1,9 |
#ifndef MOUNT_ENTRY_H |
#define MOUNT_ENTRY_H |
/* Entry points for the mount command */ |
extern int cmd_mount(char **); |
extern void help_cmd_mount(unsigned int); |
#endif /* MOUNT_ENTRY_H */ |
//branches/tracing/uspace/app/bdsh/cmds/modules/mount/mount.h |
---|
0,0 → 1,8 |
#ifndef MOUNT_H |
#define MOUNT_H |
/* Prototypes for the mount command, excluding entry points */ |
#endif /* MOUNT_H */ |
//branches/tracing/uspace/app/bdsh/cmds/modules/cp/cp.c |
---|
34,7 → 34,6 |
#include <getopt.h> |
#include <string.h> |
#include <fcntl.h> |
#include <assert.h> |
#include "config.h" |
#include "util.h" |
#include "errors.h" |
70,7 → 69,8 |
return (int) t1; |
} |
static int64_t copy_file(const char *src, const char *dest, size_t blen, int vb) |
static int64_t copy_file(const char *src, const char *dest, |
size_t blen, int vb) |
{ |
int fd1, fd2, bytes = 0; |
off_t total = 0; |
124,12 → 124,19 |
goto err; |
res -= bytes; |
} while (res > 0); |
assert(res == 0); |
/* TODO: re-insert assert() once this is stand alone, |
* removed as abort() exits the entire shell |
*/ |
if (res != 0) { |
printf("\n%d more bytes than actually exist were copied\n", res); |
goto err; |
} |
} |
if (bytes < 0) { |
err: |
printf("Error copying %s, (%d)\n", src, bytes); |
printf("\nError copying %s, (%d)\n", src, bytes); |
copied = bytes; |
} |
//branches/tracing/uspace/app/bdsh/cmds/modules/cp/cp_def.h |
---|
3,6 → 3,5 |
"Copy files and directories", |
&cmd_cp, |
&help_cmd_cp, |
0 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/mkdir/mkdir.c |
---|
93,7 → 93,7 |
/* Its a good idea to allocate path, plus we (may) need a copy of |
* path to tokenize if parents are specified */ |
if (NULL == (tmp = cli_strdup(path))) { |
if (NULL == (tmp = str_dup(path))) { |
cli_error(CL_ENOMEM, "%s: path too big?", cmdname); |
return 1; |
} |
128,9 → 128,9 |
absolute = 1; |
/* TODO: Canonify the path prior to tokenizing it, see below */ |
dirs[i] = cli_strtok(tmp, "/"); |
dirs[i] = strtok(tmp, "/"); |
while (dirs[i] && i < 255) |
dirs[++i] = cli_strtok(NULL, "/"); |
dirs[++i] = strtok(NULL, "/"); |
if (NULL == dirs[0]) |
return 1; |
149,7 → 149,7 |
while (dirs[i] != NULL) { |
/* Sometimes make or scripts conjoin odd paths. Account for something |
* like this: ../../foo/bar/../foo/foofoo/./bar */ |
if (!strcmp(dirs[i], "..") || !strcmp(dirs[i], ".")) { |
if (!str_cmp(dirs[i], "..") || !str_cmp(dirs[i], ".")) { |
if (0 != (chdir(dirs[i]))) { |
cli_error(CL_EFAIL, "%s: impossible path: %s", |
cmdname, path); |
//branches/tracing/uspace/app/bdsh/cmds/modules/mkdir/mkdir_def.h |
---|
3,14 → 3,6 |
"Create new directories", |
&cmd_mkdir, |
&help_cmd_mkdir, |
0 |
}, |
{ |
"md", |
NULL, |
&cmd_mkdir, |
&help_cmd_mkdir, |
0 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/cat/cat.c |
---|
87,7 → 87,8 |
off_t total = 0; |
char *buff = NULL; |
if (-1 == (fd = open(fname, O_RDONLY))) { |
fd = open(fname, O_RDONLY); |
if (fd < 0) { |
printf("Unable to open %s\n", fname); |
return 1; |
} |
//branches/tracing/uspace/app/bdsh/cmds/modules/cat/cat_def.h |
---|
3,6 → 3,5 |
"Show the contents of a file", |
&cmd_cat, |
&help_cmd_cat, |
0 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/help/help.c |
---|
107,7 → 107,7 |
} |
if (argc == 3) { |
if (!strcmp("extended", argv[2])) |
if (!str_cmp("extended", argv[2])) |
level = HELP_LONG; |
else |
level = HELP_SHORT; |
133,13 → 133,11 |
/* First, show a list of built in commands that are available in this mode */ |
for (cmd = builtins; cmd->name != NULL; cmd++, i++) { |
if (!builtin_is_restricted(i)) { |
if (is_builtin_alias(cmd->name)) |
printf(" %-16s\tAlias for `%s'\n", cmd->name, |
alias_for_builtin(cmd->name)); |
else |
printf(" %-16s\t%s\n", cmd->name, cmd->desc); |
} |
} |
i = 0; |
146,13 → 144,11 |
/* Now, show a list of module commands that are available in this mode */ |
for (mod = modules; mod->name != NULL; mod++, i++) { |
if (!module_is_restricted(i)) { |
if (is_module_alias(mod->name)) |
printf(" %-16s\tAlias for `%s'\n", mod->name, |
alias_for_module(mod->name)); |
else |
printf(" %-16s\t%s\n", mod->name, mod->desc); |
} |
} |
printf("\n Try %s %s for more information on how `%s' works.\n\n", |
//branches/tracing/uspace/app/bdsh/cmds/modules/help/help_def.h |
---|
3,5 → 3,4 |
"Show help for commands", |
&cmd_help, |
&help_cmd_help, |
0 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/sleep/sleep_def.h |
---|
3,6 → 3,5 |
"Pause for given time interval (in seconds)", |
&cmd_sleep, |
&help_cmd_sleep, |
0 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/kcon/kcon.h |
---|
0,0 → 1,8 |
#ifndef KCON_H |
#define KCON_H |
/* Prototypes for the kcon command, excluding entry points */ |
#endif /* KCON_H */ |
//branches/tracing/uspace/app/bdsh/cmds/modules/kcon/entry.h |
---|
0,0 → 1,9 |
#ifndef KCON_ENTRY_H |
#define KCON_ENTRY_H |
/* Entry points for the kcon command */ |
extern int cmd_kcon(char **); |
extern void help_cmd_kcon(unsigned int); |
#endif /* KCON_ENTRY_H */ |
//branches/tracing/uspace/app/bdsh/cmds/modules/kcon/kcon.c |
---|
0,0 → 1,72 |
/* Copyright (c) 2008, Tim Post <tinkertim@gmail.com> |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions are met: |
* |
* Redistributions of source code must retain the above copyright notice, this |
* list of conditions and the following disclaimer. |
* |
* Redistributions in binary form must reproduce the above copyright notice, |
* this list of conditions and the following disclaimer in the documentation |
* and/or other materials provided with the distribution. |
* |
* Neither the name of the original program's authors nor the names of its |
* contributors may be used to endorse or promote products derived from this |
* software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <console.h> |
#include "config.h" |
#include "util.h" |
#include "errors.h" |
#include "entry.h" |
#include "kcon.h" |
#include "cmds.h" |
static char *cmdname = "kcon"; |
/* Dispays help for kcon in various levels */ |
void help_cmd_kcon(unsigned int level) |
{ |
printf("`kcon' switches to the kernel debug console.\n"); |
if (level != HELP_SHORT) { |
printf("Usage: %s\n", cmdname); |
} |
return; |
} |
/* Main entry point for kcon, accepts an array of arguments */ |
int cmd_kcon(char **argv) |
{ |
unsigned int argc; |
argc = cli_count_args(argv); |
if (argc != 1) { |
printf("%s - incorrect number of arguments. Try `%s --help'\n", |
cmdname, cmdname); |
return CMD_FAILURE; |
} |
console_kcon_enable(); |
return CMD_SUCCESS; |
} |
//branches/tracing/uspace/app/bdsh/cmds/modules/kcon/kcon_def.h |
---|
0,0 → 1,7 |
{ |
"kcon", |
"Switch to kernel console", |
&cmd_kcon, |
&help_cmd_kcon, |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/pwd/pwd_def.h |
---|
3,5 → 3,4 |
"Prints the current working directory", |
&cmd_pwd, |
&help_cmd_pwd, |
-1 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/module_aliases.h |
---|
12,10 → 12,7 |
* the entry point being reached. */ |
char *mod_aliases[] = { |
"exit", "quit", |
"md", "mkdir", |
"del", "rm", |
"dir", "ls", |
"ren", "mv", |
NULL, NULL |
}; |
//branches/tracing/uspace/app/bdsh/cmds/modules/modules.h |
---|
18,7 → 18,6 |
/* Prototypes for each module's entry (help/exec) points */ |
#include "help/entry.h" |
#include "quit/entry.h" |
#include "mkdir/entry.h" |
#include "rm/entry.h" |
#include "cat/entry.h" |
27,6 → 26,9 |
#include "pwd/entry.h" |
#include "sleep/entry.h" |
#include "cp/entry.h" |
#include "mv/entry.h" |
#include "mount/entry.h" |
#include "kcon/entry.h" |
/* Each .def function fills the module_t struct with the individual name, entry |
* point, help entry point, etc. You can use config.h to control what modules |
34,7 → 36,6 |
module_t modules[] = { |
#include "help/help_def.h" |
#include "quit/quit_def.h" |
#include "mkdir/mkdir_def.h" |
#include "rm/rm_def.h" |
#include "cat/cat_def.h" |
43,6 → 44,10 |
#include "pwd/pwd_def.h" |
#include "sleep/sleep_def.h" |
#include "cp/cp_def.h" |
#include "mv/mv_def.h" |
#include "mount/mount_def.h" |
#include "kcon/kcon_def.h" |
{NULL, NULL, NULL, NULL} |
}; |
//branches/tracing/uspace/app/bdsh/cmds/modules/rm/rm.c |
---|
33,7 → 33,6 |
#include <unistd.h> |
#include <fcntl.h> |
#include <dirent.h> |
#include <assert.h> |
#include <getopt.h> |
#include "config.h" |
217,9 → 216,13 |
i = optind; |
while (NULL != argv[i]) { |
len = strlen(argv[i]) + 2; |
len = str_size(argv[i]) + 2; |
buff = (char *) realloc(buff, len); |
assert(buff != NULL); |
if (buff == NULL) { |
printf("rm: out of memory\n"); |
ret = 1; |
break; |
} |
memset(buff, 0, sizeof(buff)); |
snprintf(buff, len, argv[i]); |
//branches/tracing/uspace/app/bdsh/cmds/modules/rm/rm_def.h |
---|
3,14 → 3,5 |
"Remove files and directories", |
&cmd_rm, |
&help_cmd_rm, |
0 |
}, |
{ |
"del", |
NULL, |
&cmd_rm, |
&help_cmd_rm, |
0 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/ls/ls.c |
---|
50,6 → 50,24 |
static char *cmdname = "ls"; |
static inline off_t flen(const char *f) |
{ |
int fd; |
off_t size; |
fd = open(f, O_RDONLY); |
if (fd == -1) |
return 0; |
size = lseek(fd, 0, SEEK_END); |
close(fd); |
if (size < 0) |
size = 0; |
return size; |
} |
static unsigned int ls_scope(const char *path) |
{ |
int fd; |
96,7 → 114,7 |
ls_print_dir(dp->d_name); |
break; |
case LS_FILE: |
ls_print_file(dp->d_name); |
ls_print_file(dp->d_name, buff); |
break; |
case LS_BOGUS: |
/* Odd chance it was deleted from the time readdir() found |
120,14 → 138,14 |
static void ls_print_dir(const char *d) |
{ |
printf("%-40s\t<DIR>\n", d); |
printf("%-40s\t<dir>\n", d); |
return; |
} |
static void ls_print_file(const char *f) |
static void ls_print_file(const char *name, const char *pathname) |
{ |
printf("%-40s\n", f); |
printf("%-40s\t%llu\n", name, (long long) flen(pathname)); |
return; |
} |
164,7 → 182,7 |
if (argc == 1) |
getcwd(buff, PATH_MAX); |
else |
strncpy(buff, argv[1], PATH_MAX); |
str_cpy(buff, PATH_MAX, argv[1]); |
scope = ls_scope(buff); |
174,7 → 192,7 |
free(buff); |
return CMD_FAILURE; |
case LS_FILE: |
ls_print_file(buff); |
ls_print_file(buff, buff); |
break; |
case LS_DIR: |
dirp = opendir(buff); |
//branches/tracing/uspace/app/bdsh/cmds/modules/ls/ls_def.h |
---|
3,14 → 3,4 |
"List files and directories", |
&cmd_ls, |
&help_cmd_ls, |
0 |
}, |
{ |
"dir", |
NULL, |
&cmd_ls, |
&help_cmd_ls, |
0 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/modules/ls/ls.h |
---|
10,7 → 10,7 |
static unsigned int ls_scope(const char *); |
static void ls_scan_dir(const char *, DIR *); |
static void ls_print_dir(const char *); |
static void ls_print_file(const char *); |
static void ls_print_file(const char *, const char *); |
#endif /* LS_H */ |
//branches/tracing/uspace/app/bdsh/cmds/builtins/builtins.h |
---|
4,9 → 4,11 |
#include "config.h" |
#include "cd/entry.h" |
#include "exit/entry.h" |
builtin_t builtins[] = { |
#include "cd/cd_def.h" |
#include "exit/exit_def.h" |
{NULL, NULL, NULL, NULL} |
}; |
//branches/tracing/uspace/app/bdsh/cmds/builtins/cd/cd_def.h |
---|
3,12 → 3,4 |
"Change the current working directory", |
&cmd_cd, |
&help_cmd_cd, |
-1 |
}, |
{ |
"chdir", |
NULL, |
&cmd_cd, |
&help_cmd_cd, |
-1 |
}, |
//branches/tracing/uspace/app/bdsh/cmds/builtins/exit/exit.h |
---|
0,0 → 1,6 |
#ifndef EXIT_H |
#define EXIT_H |
/* Prototypes for the quit command (excluding entry points) */ |
#endif |
//branches/tracing/uspace/app/bdsh/cmds/builtins/exit/entry.h |
---|
0,0 → 1,12 |
#ifndef EXIT_ENTRY_H_ |
#define EXIT_ENTRY_H_ |
#include "scli.h" |
/* Entry points for the quit command */ |
extern void help_cmd_exit(unsigned int); |
extern int cmd_exit(char *[], cliuser_t *); |
#endif |
//branches/tracing/uspace/app/bdsh/cmds/builtins/exit/exit.c |
---|
0,0 → 1,55 |
/* Copyright (c) 2008, Tim Post <tinkertim@gmail.com> |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions are met: |
* |
* Redistributions of source code must retain the above copyright notice, this |
* list of conditions and the following disclaimer. |
* |
* Redistributions in binary form must reproduce the above copyright notice, |
* this list of conditions and the following disclaimer in the documentation |
* and/or other materials provided with the distribution. |
* |
* Neither the name of the original program's authors nor the names of its |
* contributors may be used to endorse or promote products derived from this |
* software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include "entry.h" |
#include "exit.h" |
#include "cmds.h" |
static const char *cmdname = "exit"; |
extern volatile unsigned int cli_quit; |
extern const char *progname; |
void help_cmd_exit(unsigned int level) |
{ |
printf("Type `%s' to exit %s\n", cmdname, progname); |
return; |
} |
/* Quits the program and returns the status of whatever command |
* came before invoking 'quit' */ |
int cmd_exit(char *argv[], cliuser_t *usr) |
{ |
/* Inform that we're outta here */ |
cli_quit = 1; |
return CMD_SUCCESS; |
} |
//branches/tracing/uspace/app/bdsh/cmds/builtins/exit/exit_def.h |
---|
0,0 → 1,6 |
{ |
"exit", |
"Exit the shell", |
&cmd_exit, |
&help_cmd_exit, |
}, |
//branches/tracing/uspace/app/bdsh/cmds/builtins/builtin_aliases.h |
---|
4,7 → 4,6 |
/* See modules/module_aliases.h for an explanation of this file */ |
char *builtin_aliases[] = { |
"chdir", "cd", |
NULL, NULL |
}; |
//branches/tracing/uspace/app/bdsh/cmds/cmds.h |
---|
36,7 → 36,6 |
char *desc; /* Description of the command */ |
mod_entry_t entry; /* Command (exec) entry function */ |
mod_help_t help; /* Command (help) entry function */ |
int restricted; /* Restricts to interactive/non-interactive only */ |
} module_t; |
/* Builtin structure, same as modules except different types of entry points */ |
//branches/tracing/uspace/app/bdsh/cmds/builtin_cmds.c |
---|
40,19 → 40,6 |
extern volatile unsigned int cli_interactive; |
int builtin_is_restricted(int pos) |
{ |
builtin_t *cmd = builtins; |
cmd += pos; |
if (cli_interactive && cmd->restricted <= 0) |
return 0; |
if (!cli_interactive && cmd->restricted >= 0) |
return 0; |
return 1; |
} |
int is_builtin(const char *command) |
{ |
builtin_t *cmd; |
62,7 → 49,7 |
return -2; |
for (cmd = builtins; cmd->name != NULL; cmd++, i++) { |
if (!strcmp(cmd->name, command)) |
if (!str_cmp(cmd->name, command)) |
return i; |
} |
77,7 → 64,7 |
return -1; |
for(i=0; builtin_aliases[i] != NULL; i+=2) { |
if (!strcmp(builtin_aliases[i], command)) |
if (!str_cmp(builtin_aliases[i], command)) |
return 1; |
} |
92,7 → 79,7 |
return (char *)NULL; |
for(i=0; builtin_aliases[i] != NULL; i++) { |
if (!strcmp(builtin_aliases[i], command)) |
if (!str_cmp(builtin_aliases[i], command)) |
return (char *)builtin_aliases[++i]; |
i++; |
} |
//branches/tracing/uspace/app/bdsh/util.c |
---|
1,7 → 1,4 |
/* Copyright (c) 2008, Tim Post <tinkertim@gmail.com> |
* Copyright (C) 1998 by Wes Peters <wes@softweyr.com> |
* Copyright (c) 1988, 1993 The Regents of the University of California. |
* All rights reserved by all copyright holders. |
/* Copyright (c) 2008, Tim Post <tinkertim@gmail.com> - All rights reserved |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions are met: |
30,18 → 27,6 |
* POSSIBILITY OF SUCH DAMAGE. |
*/ |
/* NOTES: |
* 1 - Various functions were adapted from FreeBSD (copyright holders noted above) |
* these functions are identified with comments. |
* |
* 2 - Some of these have since appeared in libc. They remain here for various |
* reasons, such as the eventual integration of garbage collection for things |
* that allocate memory and don't automatically free it. |
* |
* 3 - Things that expect a pointer to an allocated string do _no_ sanity checking |
* if developing on a simulator with no debugger, take care :) |
*/ |
#include <stdio.h> |
#include <string.h> |
#include <stdarg.h> |
54,71 → 39,6 |
extern volatile int cli_errno; |
/* some platforms do not have strdup, implement it here. |
* Returns a pointer to an allocated string or NULL on failure */ |
char * cli_strdup(const char *s1) |
{ |
size_t len = strlen(s1) + 1; |
void *ret = malloc(len); |
if (ret == NULL) { |
cli_errno = CL_ENOMEM; |
return (char *) NULL; |
} |
cli_errno = CL_EOK; |
return (char *) memcpy(ret, s1, len); |
} |
/* Ported from FBSD strtok.c 8.1 (Berkeley) 6/4/93 */ |
char * cli_strtok_r(char *s, const char *delim, char **last) |
{ |
char *spanp, *tok; |
int c, sc; |
if (s == NULL && (s = *last) == NULL) { |
cli_errno = CL_EFAIL; |
return (NULL); |
} |
cont: |
c = *s++; |
for (spanp = (char *)delim; (sc = *spanp++) != 0;) { |
if (c == sc) |
goto cont; |
} |
if (c == 0) { /* no non-delimiter characters */ |
*last = NULL; |
return (NULL); |
} |
tok = s - 1; |
for (;;) { |
c = *s++; |
spanp = (char *)delim; |
do { |
if ((sc = *spanp++) == c) { |
if (c == 0) |
s = NULL; |
else |
s[-1] = '\0'; |
*last = s; |
return (tok); |
} |
} while (sc != 0); |
} |
} |
/* Ported from FBSD strtok.c 8.1 (Berkeley) 6/4/93 */ |
char * cli_strtok(char *s, const char *delim) |
{ |
static char *last; |
return (cli_strtok_r(s, delim, &last)); |
} |
/* Count and return the # of elements in an array */ |
unsigned int cli_count_args(char **args) |
{ |
//branches/tracing/uspace/app/bdsh/util.h |
---|
3,11 → 3,6 |
#include "scli.h" |
/* Internal string handlers */ |
extern char * cli_strdup(const char *); |
extern char * cli_strtok_r(char *, const char *, char **); |
extern char * cli_strtok(char *, const char *); |
/* Utility functions */ |
extern unsigned int cli_count_args(char **); |
extern unsigned int cli_set_prompt(cliuser_t *usr); |
//branches/tracing/uspace/app/bdsh/exec.c |
---|
71,7 → 71,7 |
char *path_tok; |
char *path[PATH_MAX]; |
int n = 0, i = 0; |
size_t x = strlen(cmd) + 2; |
size_t x = str_size(cmd) + 2; |
found = (char *)malloc(PATH_MAX); |
80,18 → 80,18 |
return (char *) cmd; |
} |
path_tok = cli_strdup(PATH); |
path_tok = str_dup(PATH); |
/* Extract the PATH env to a path[] array */ |
path[n] = cli_strtok(path_tok, PATH_DELIM); |
path[n] = strtok(path_tok, PATH_DELIM); |
while (NULL != path[n]) { |
if ((strlen(path[n]) + x ) > PATH_MAX) { |
if ((str_size(path[n]) + x ) > PATH_MAX) { |
cli_error(CL_ENOTSUP, |
"Segment %d of path is too large, search ends at segment %d", |
n, n-1); |
break; |
} |
path[++n] = cli_strtok(NULL, PATH_DELIM); |
path[++n] = strtok(NULL, PATH_DELIM); |
} |
/* We now have n places to look for the command */ |
114,7 → 114,7 |
task_id_t tid; |
char *tmp; |
tmp = cli_strdup(find_command(cmd)); |
tmp = str_dup(find_command(cmd)); |
free(found); |
tid = task_spawn((const char *)tmp, argv); |
121,7 → 121,7 |
free(tmp); |
if (tid == 0) { |
cli_error(CL_EEXEC, "Can not spawn %s", cmd); |
cli_error(CL_EEXEC, "Cannot spawn `%s'.", cmd); |
return 1; |
} else { |
return 0; |
//branches/tracing/uspace/app/bdsh/scli.c |
---|
45,7 → 45,6 |
/* Globals that are modified during start-up that modules/builtins |
* should be aware of. */ |
volatile unsigned int cli_quit = 0; |
volatile unsigned int cli_interactive = 1; |
volatile unsigned int cli_verbocity = 1; |
/* The official name of this program |
//branches/tracing/uspace/app/bdsh/Makefile |
---|
30,25 → 30,17 |
# POSSIBILITY OF SUCH DAMAGE. |
include ../../../version |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I../../srv/kbd/include |
LIBS = $(LIBC_PREFIX)/libc.a |
DEFS += -DRELEASE=\"$(RELEASE)\" |
DEFS += -DRELEASE=$(RELEASE) |
ifdef REVISION |
DEFS += "-DREVISION=\"$(TIMESTAMP)\"" |
endif |
ifdef TIMESTAMP |
DEFS += "-DTIMESTAMP=\"$(TIMESTAMP)\"" |
endif |
PROGRAM = bdsh |
# Any directory that cleaning targets should know about |
57,7 → 49,6 |
cmds/ \ |
cmds/modules/ \ |
cmds/modules/help/ \ |
cmds/modules/quit/ \ |
cmds/modules/mkdir/ \ |
cmds/modules/rm/ \ |
cmds/modules/cat/ \ |
66,12 → 57,15 |
cmds/modules/pwd/ \ |
cmds/modules/sleep/ \ |
cmds/modules/cp/ \ |
cmds/modules/mv/ \ |
cmds/modules/mount \ |
cmds/modules/kcon/ \ |
cmds/builtins/ \ |
cmds/builtins/exit/\ |
cmds/builtins/cd/ |
SOURCES = \ |
cmds/modules/help/help.c \ |
cmds/modules/quit/quit.c \ |
cmds/modules/mkdir/mkdir.c \ |
cmds/modules/rm/rm.c \ |
cmds/modules/cat/cat.c \ |
80,6 → 74,10 |
cmds/modules/pwd/pwd.c \ |
cmds/modules/sleep/sleep.c \ |
cmds/modules/cp/cp.c \ |
cmds/modules/mv/mv.c \ |
cmds/modules/mount/mount.c \ |
cmds/modules/kcon/kcon.c \ |
cmds/builtins/exit/exit.c \ |
cmds/builtins/cd/cd.c \ |
cmds/mod_cmds.c \ |
cmds/builtin_cmds.c \ |
112,7 → 110,7 |
@$(CC) -M $(CFLAGS) $(INC) $*.c > $*.d |
$(PROGRAM): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(PROGRAM).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(PROGRAM).map |
# Everything else is a phony target |
.PHONY: all clean distclean depend disasm |
//branches/tracing/uspace/app/init/init.c |
---|
27,9 → 27,9 |
*/ |
/** @addtogroup init Init |
* @brief Init process for testing purposes. |
* @brief Init process for user space environment configuration. |
* @{ |
*/ |
*/ |
/** |
* @file |
*/ |
36,6 → 36,7 |
#include <stdio.h> |
#include <unistd.h> |
#include <ipc/ipc.h> |
#include <vfs/vfs.h> |
#include <bool.h> |
#include <errno.h> |
42,22 → 43,23 |
#include <fcntl.h> |
#include <task.h> |
#include <malloc.h> |
#include <macros.h> |
#include <console.h> |
#include <string.h> |
#include "init.h" |
#include "version.h" |
static void console_wait(void) |
{ |
while (get_cons_phone() < 0) |
usleep(50000); // FIXME |
} |
static bool mount_fs(const char *fstype) |
{ |
int rc = -1; |
char *opts = ""; |
if (str_cmp(fstype, "tmpfs") == 0) |
opts = "restore"; |
while (rc < 0) { |
rc = mount(fstype, "/", "initrd"); |
rc = mount(fstype, "/", "initrd", opts, IPC_FLAG_BLOCKING); |
switch (rc) { |
case EOK: |
printf(NAME ": Root filesystem mounted\n"); |
71,8 → 73,6 |
case ENOENT: |
printf(NAME ": Unknown filesystem type (%s)\n", fstype); |
return false; |
default: |
sleep(5); // FIXME |
} |
} |
82,24 → 82,21 |
static void spawn(char *fname) |
{ |
char *argv[2]; |
printf(NAME ": Spawning %s\n", fname); |
argv[0] = fname; |
argv[1] = NULL; |
if (task_spawn(fname, argv) != 0) { |
/* Success */ |
sleep(1); |
} |
if (!task_spawn(fname, argv)) |
printf(NAME ": Error spawning %s\n", fname); |
} |
int main(int argc, char *argv[]) |
{ |
info_print(); |
sleep(5); // FIXME |
if (!mount_fs("tmpfs") && !mount_fs("fat")) { |
if (!mount_fs(STRING(RDFMT))) { |
printf(NAME ": Exiting\n"); |
return -1; |
} |
108,6 → 105,8 |
spawn("/srv/fb"); |
spawn("/srv/kbd"); |
spawn("/srv/console"); |
spawn("/srv/fhc"); |
spawn("/srv/obio"); |
console_wait(); |
version_print(); |
//branches/tracing/uspace/app/init/version.c |
---|
35,19 → 35,20 |
#include <unistd.h> |
#include <stdio.h> |
#include <macros.h> |
#include "init.h" |
#include "version.h" |
char *release = RELEASE; |
char *release = STRING(RELEASE); |
#ifdef REVISION |
char *revision = ", revision " REVISION; |
char *revision = ", revision " STRING(REVISION); |
#else |
char *revision = ""; |
#endif |
#ifdef TIMESTAMP |
char *timestamp = "\nBuilt on " TIMESTAMP; |
char *timestamp = "\nBuilt on " STRING(TIMESTAMP); |
#else |
char *timestamp = ""; |
#endif |
60,7 → 61,8 |
/** Print version information. */ |
void version_print(void) |
{ |
printf("HelenOS init\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n", release, revision, timestamp); |
printf("HelenOS init\nRelease %s%s%s\n", release, revision, timestamp); |
printf("Copyright (c) 2001-2009 HelenOS project\n"); |
} |
/** @} |
//branches/tracing/uspace/app/init/Makefile |
---|
27,7 → 27,6 |
# |
include ../../../version |
include ../../Makefile.config |
## Setup toolchain |
# |
34,21 → 33,14 |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I../../srv/kbd/include |
LIBS = $(LIBC_PREFIX)/libc.a |
DEFS += -DRELEASE=\"$(RELEASE)\" |
DEFS += -DRELEASE=$(RELEASE) |
ifdef REVISION |
DEFS += "-DREVISION=\"$(REVISION)\"" |
endif |
ifdef TIMESTAMP |
DEFS += "-DTIMESTAMP=\"$(TIMESTAMP)\"" |
endif |
## Sources |
# |
66,13 → 58,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/app/debug/main.c |
---|
178,7 → 178,7 |
int idx_found; |
int num_found; |
len = strlen(cmd_argv[0]); |
len = str_length(cmd_argv[0]); |
cmp_len = 1; |
/* Silence warnings */ |
190,7 → 190,7 |
num_found = 0; |
i = 0; |
while (cmd_table[i].name != NULL) { |
if (strncmp(cmd_table[i].name, cmd_argv[0], cmp_len) == 0) { |
if (str_lcmp(cmd_table[i].name, cmd_argv[0], cmp_len) == 0) { |
idx_found = i; |
++num_found; |
} |
//branches/tracing/uspace/app/debug/Makefile |
---|
32,8 → 32,9 |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
include arch/$(ARCH)/Makefile.inc |
include arch/$(UARCH)/Makefile.inc |
include genarch/Makefile.inc |
CFLAGS += -I../../srv/kbd/include -Igenarch/idec |
58,7 → 59,7 |
all: inc $(OUTPUT) disasm |
inc: |
ln -sfn ../arch/$(ARCH)/include include/arch |
ln -sfn ../arch/$(UARCH)/include include/arch |
-include Makefile.depend |
70,7 → 71,7 |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: |
$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm |
//branches/tracing/uspace/app/debug/arch/arm32/Makefile.inc |
---|
27,6 → 27,6 |
# |
ARCH_SOURCES := \ |
arch/$(ARCH)/src/arm32.c |
arch/$(UARCH)/src/arm32.c |
CONFIG_IDEC = y |
//branches/tracing/uspace/app/debug/arch/ppc32/Makefile.inc |
---|
27,6 → 27,6 |
# |
ARCH_SOURCES := \ |
arch/$(ARCH)/src/ppc32.c |
arch/$(UARCH)/src/ppc32.c |
CONFIG_IDEC = y |
//branches/tracing/uspace/app/debug/arch/mips32/Makefile.inc |
---|
27,6 → 27,6 |
# |
ARCH_SOURCES := \ |
arch/$(ARCH)/src/mips32.c |
arch/$(UARCH)/src/mips32.c |
CONFIG_IDEC = y |
//branches/tracing/uspace/app/debug/arch/ia32/Makefile.inc |
---|
26,4 → 26,4 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
ARCH_SOURCES := arch/$(ARCH)/src/ia32.c |
ARCH_SOURCES := arch/$(UARCH)/src/ia32.c |
//branches/tracing/uspace/app/tester/console/console1.def |
---|
0,0 → 1,6 |
{ |
"console1", |
"Console color test", |
&test_console1, |
true |
}, |
//branches/tracing/uspace/app/tester/console/console1.c |
---|
0,0 → 1,109 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <io/stream.h> |
#include <async.h> |
#include "../tester.h" |
#include <console.h> |
const char *color_name[] = { |
[COLOR_BLACK] = "black", |
[COLOR_BLUE] = "blue", |
[COLOR_GREEN] = "green", |
[COLOR_CYAN] = "cyan", |
[COLOR_RED] = "red", |
[COLOR_MAGENTA] = "magenta", |
[COLOR_YELLOW] = "yellow", |
[COLOR_WHITE] = "white" |
}; |
char * test_console1(bool quiet) |
{ |
int i, j; |
printf("Style test: "); |
console_set_style(STYLE_NORMAL); |
printf("normal "); |
console_set_style(STYLE_EMPHASIS); |
printf("emphasized"); |
console_set_style(STYLE_NORMAL); |
printf(".\n"); |
printf("Foreground color test:\n"); |
for (j = 0; j < 2; j++) { |
for (i = COLOR_BLACK; i <= COLOR_WHITE; i++) { |
console_set_color(i, COLOR_WHITE, |
j ? CATTR_BRIGHT : 0); |
printf(" %s ", color_name[i]); |
} |
console_set_color(COLOR_BLACK, COLOR_WHITE, 0); |
putchar('\n'); |
} |
printf("Background color test:\n"); |
for (j = 0; j < 2; j++) { |
for (i = COLOR_BLACK; i <= COLOR_WHITE; i++) { |
console_set_color(COLOR_WHITE, i, |
j ? CATTR_BRIGHT : 0); |
printf(" %s ", color_name[i]); |
} |
console_set_color(COLOR_BLACK, COLOR_WHITE, 0); |
putchar('\n'); |
} |
printf("Now let's test RGB colors:\n"); |
for (i = 0; i < 255; i += 16) { |
console_set_rgb_color(0xffffff, i << 16); |
putchar('X'); |
} |
console_set_color(COLOR_BLACK, COLOR_WHITE, 0); |
putchar('\n'); |
for (i = 0; i < 255; i += 16) { |
console_set_rgb_color(0xffffff, i << 8); |
putchar('X'); |
} |
console_set_color(COLOR_BLACK, COLOR_WHITE, 0); |
putchar('\n'); |
for (i = 0; i < 255; i += 16) { |
console_set_rgb_color(0xffffff, i); |
putchar('X'); |
} |
console_set_color(COLOR_BLACK, COLOR_WHITE, 0); |
putchar('\n'); |
printf("[press a key]\n"); |
getchar(); |
return NULL; |
} |
//branches/tracing/uspace/app/tester/stdio/stdio1.def |
---|
0,0 → 1,6 |
{ |
"stdio1", |
"ANSI C streams reading test", |
&test_stdio1, |
true |
}, |
//branches/tracing/uspace/app/tester/stdio/stdio2.def |
---|
0,0 → 1,6 |
{ |
"stdio2", |
"ANSI C streams writing test", |
&test_stdio2, |
true |
}, |
//branches/tracing/uspace/app/tester/stdio/stdio1.c |
---|
0,0 → 1,85 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <errno.h> |
#include "../tester.h" |
#define BUF_SIZE 32 |
static char buf[BUF_SIZE + 1]; |
char * test_stdio1(bool quiet) |
{ |
FILE *f; |
char *file_name = "/readme"; |
size_t n; |
int c; |
printf("Open file '%s'\n", file_name); |
errno = 0; |
f = fopen(file_name, "rt"); |
if (f == NULL) printf("errno = %d\n", errno); |
if (f == NULL) |
return "Failed opening file."; |
n = fread(buf, 1, BUF_SIZE, f); |
if (ferror(f)) { |
fclose(f); |
return "Failed reading file."; |
} |
printf("Read %d bytes.\n", n); |
buf[n] = '\0'; |
printf("Read string '%s'.\n", buf); |
printf("Seek to beginning.\n"); |
if (fseek(f, 0, SEEK_SET) != 0) { |
fclose(f); |
return "Failed seeking."; |
} |
printf("Read using fgetc().\n"); |
while (true) { |
c = fgetc(f); |
if (c == EOF) break; |
printf("'%c'", c); |
} |
printf("[EOF]\n"); |
printf("Closing.\n"); |
if (fclose(f) != 0) |
return "Failed closing."; |
return NULL; |
} |
//branches/tracing/uspace/app/tester/stdio/stdio2.c |
---|
0,0 → 1,69 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <errno.h> |
#include "../tester.h" |
char * test_stdio2(bool quiet) |
{ |
FILE *f; |
char *file_name = "/test"; |
size_t n; |
int c; |
printf("Open file '%s' for writing\n", file_name); |
errno = 0; |
f = fopen(file_name, "wt"); |
if (f == NULL) |
return "Failed opening file."; |
fprintf(f, "Integer: %d, string: '%s'\n", 42, "Hello!"); |
if (fclose(f) != 0) |
return "Failed closing file."; |
printf("Open file '%s' for reading\n", file_name); |
f = fopen(file_name, "rt"); |
if (f == NULL) |
return "Failed opening file."; |
printf("File contains:\n"); |
while (true) { |
c = fgetc(f); |
if (c == EOF) break; |
putchar(c); |
} |
if (fclose(f) != 0) |
return "Failed closing file."; |
return NULL; |
} |
//branches/tracing/uspace/app/tester/tester.c |
---|
47,6 → 47,7 |
test_t tests[] = { |
#include "thread/thread1.def" |
#include "print/print1.def" |
#include "print/print4.def" |
#include "fault/fault1.def" |
#include "fault/fault2.def" |
#include "ipc/register.def" |
58,6 → 59,9 |
#include "devmap/devmap1.def" |
#include "loop/loop1.def" |
#include "vfs/vfs1.def" |
#include "console/console1.def" |
#include "stdio/stdio1.def" |
#include "stdio/stdio2.def" |
#include "debug/debug1.def" |
{NULL, NULL, NULL} |
}; |
//branches/tracing/uspace/app/tester/devmap/devmap1.c |
---|
132,17 → 132,15 |
int phone; |
ipcarg_t callback_phonehash; |
phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP, DEVMAP_DRIVER, 0); |
while (phone < 0) { |
usleep(100000); |
phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP, |
DEVMAP_DRIVER, 0); |
phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAP, DEVMAP_DRIVER, 0); |
if (phone < 0) { |
printf("Failed to connect to device mapper\n"); |
return -1; |
} |
req = async_send_2(phone, DEVMAP_DRIVER_REGISTER, 0, 0, &answer); |
retval = ipc_data_write_start(phone, (char *)name, strlen(name) + 1); |
retval = ipc_data_write_start(phone, (char *)name, str_size(name) + 1); |
if (retval != EOK) { |
async_wait_for(req, NULL); |
175,7 → 173,7 |
req = async_send_2(driver_phone, DEVMAP_DEVICE_GET_HANDLE, 0, 0, |
&answer); |
retval = ipc_data_write_start(driver_phone, name, strlen(name) + 1); |
retval = ipc_data_write_start(driver_phone, name, str_size(name) + 1); |
if (retval != EOK) { |
printf("Failed to send device name '%s'.\n", name); |
217,7 → 215,7 |
req = async_send_2(driver_phone, DEVMAP_DEVICE_REGISTER, 0, 0, &answer); |
retval = ipc_data_write_start(driver_phone, (char *)name, |
strlen(name) + 1); |
str_size(name) + 1); |
if (retval != EOK) { |
printf("Failed to send device name '%s'.\n", name); |
//branches/tracing/uspace/app/tester/print/print4.c |
---|
0,0 → 1,92 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#include <unistd.h> |
#include "../tester.h" |
#define PRIx8 "x" |
char *test_print4(bool quiet) |
{ |
if (!quiet) { |
printf("ASCII printable characters (32 - 127) using printf(\"%%c\") and printf(\"%%lc\"):\n"); |
uint8_t group; |
for (group = 1; group < 4; group++) { |
printf("%#" PRIx8 ": ", group << 5); |
uint8_t index; |
for (index = 0; index < 32; index++) |
printf("%c", (char) ((group << 5) + index)); |
printf(" "); |
for (index = 0; index < 32; index++) |
printf("%lc", (wchar_t) ((group << 5) + index)); |
printf("\n"); |
} |
printf("\nExtended ASCII characters (128 - 255) using printf(\"%%lc\"):\n"); |
for (group = 4; group < 8; group++) { |
printf("%#" PRIx8 ": ", group << 5); |
uint8_t index; |
for (index = 0; index < 32; index++) |
printf("%lc", (wchar_t) ((group << 5) + index)); |
printf("\n"); |
} |
printf("\nUTF-8 strings using printf(\"%%s\"):\n"); |
printf("English: %s\n", "Quick brown fox jumps over the lazy dog"); |
printf("Czech: %s\n", "Příliš žluťoučký kůň úpěl ďábelské ódy"); |
printf("Greek: %s\n", "Ὦ ξεῖν’, ἀγγέλλειν Λακεδαιμονίοις ὅτι τῇδε"); |
printf("Hebrew: %s\n", "משוואת ברנולי היא משוואה בהידרודינמיקה"); |
printf("Arabic: %s\n", "التوزيع الجغرافي للحمل العنقودي"); |
printf("Russian: %s\n", "Леннон познакомился с художницей-авангардисткой"); |
printf("Armenian: %s\n", "Սկսեց հրատարակվել Երուսաղեմի հայկական"); |
printf("\nUTF-32 strings using printf(\"%%ls\"):\n"); |
printf("English: %ls\n", L"Quick brown fox jumps over the lazy dog"); |
printf("Czech: %ls\n", L"Příliš žluťoučký kůň úpěl ďábelské ódy"); |
printf("Greek: %ls\n", L"Ὦ ξεῖν’, ἀγγέλλειν Λακεδαιμονίοις ὅτι τῇδε"); |
printf("Hebrew: %ls\n", L"משוואת ברנולי היא משוואה בהידרודינמיקה"); |
printf("Arabic: %ls\n", L"التوزيع الجغرافي للحمل العنقودي"); |
printf("Russian: %ls\n", L"Леннон познакомился с художницей-авангардисткой"); |
printf("Armenian: %ls\n", L"Սկսեց հրատարակվել Երուսաղեմի հայկական"); |
printf("Test: [%d] '%lc'\n", L'\x0161', L'\x0161'); |
} |
printf("[Press a key]\n"); |
getchar(); |
return NULL; |
} |
//branches/tracing/uspace/app/tester/print/print4.def |
---|
0,0 → 1,6 |
{ |
"print4", |
"Unicode test", |
&test_print4, |
true |
}, |
//branches/tracing/uspace/app/tester/tester.h |
---|
60,6 → 60,7 |
extern char * test_thread1(bool quiet); |
extern char * test_print1(bool quiet); |
extern char * test_print4(bool quiet); |
extern char * test_fault1(bool quiet); |
extern char * test_fault2(bool quiet); |
extern char * test_register(bool quiet); |
71,6 → 72,9 |
extern char * test_devmap1(bool quiet); |
extern char * test_loop1(bool quiet); |
extern char * test_vfs1(bool quiet); |
extern char * test_console1(bool quiet); |
extern char * test_stdio1(bool quiet); |
extern char * test_stdio2(bool quiet); |
extern char * test_debug1(bool quiet); |
extern test_t tests[]; |
//branches/tracing/uspace/app/tester/Makefile |
---|
29,10 → 29,9 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I../../srv/kbd/include -ggdb |
46,6 → 45,7 |
SOURCES = tester.c \ |
thread/thread1.c \ |
print/print1.c \ |
print/print4.c \ |
fault/fault1.c \ |
fault/fault2.c \ |
ipc/register.c \ |
56,6 → 56,9 |
ipc/hangup.c \ |
loop/loop1.c \ |
devmap/devmap1.c \ |
console/console1.c \ |
stdio/stdio1.c \ |
stdio/stdio2.c \ |
vfs/vfs1.c \ |
debug/debug1.c |
68,13 → 71,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OBJECTS) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/app/tester/vfs/vfs1.c |
---|
45,7 → 45,7 |
{ |
int rc; |
rc = mount("tmpfs", "/", "nulldev0"); |
rc = mount("tmpfs", "/", "nulldev0", "", 0); |
switch (rc) { |
case EOK: |
if (!quiet) |
//branches/tracing/uspace/app/tetris/scores.c |
---|
55,6 → 55,9 |
#include <stdio.h> |
/* #include <stdlib.h> */ |
#include <string.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <stdlib.h> |
/* #include <time.h> */ |
/* #include <term.h> */ |
/* #include <unistd.h> */ |
114,7 → 117,8 |
*/ |
static void copyhiscore(int dest, int src) |
{ |
strcpy(scores[dest].hs_name, scores[src].hs_name); |
str_cpy(scores[dest].hs_name, STR_BOUNDS(MAXLOGNAME) + 1, |
scores[src].hs_name); |
scores[dest].hs_score = scores[src].hs_score; |
scores[dest].hs_level = scores[src].hs_level; |
} |
122,32 → 126,58 |
void insertscore(int score, int level) |
{ |
int i,j; |
int key; |
size_t off; |
kbd_event_t ev; |
clear_screen(); |
moveto(10 , 10); |
puts("Insert your name: "); |
strncpy(scores[NUMSPOTS - 1].hs_name, "Player", MAXLOGNAME); |
i = 6; |
str_cpy(scores[NUMSPOTS - 1].hs_name, STR_BOUNDS(MAXLOGNAME) + 1, |
"Player"); |
i = 6; off = 6; |
moveto(10 , 28); |
printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
key = getchar(); |
while(key != '\n') { |
if (key == '\b') { |
if (i > 0) |
scores[NUMSPOTS - 1].hs_name[--i] = '\0'; |
} else { |
if (i < (MAXLOGNAME - 1)) |
scores[NUMSPOTS - 1].hs_name[i++] = key; |
scores[NUMSPOTS - 1].hs_name[i] = '\0'; |
while (1) { |
fflush(stdout); |
if (kbd_get_event(&ev) != EOK) |
exit(1); |
if (ev.type == KE_RELEASE) |
continue; |
if (ev.key == KC_ENTER || ev.key == KC_NENTER) |
break; |
if (ev.key == KC_BACKSPACE) { |
if (i > 0) { |
wchar_t uc; |
--i; |
while (off > 0) { |
--off; |
size_t otmp = off; |
uc = str_decode(scores[NUMSPOTS - 1].hs_name, |
&otmp, STR_BOUNDS(MAXLOGNAME) + 1); |
if (uc != U_SPECIAL) |
break; |
} |
scores[NUMSPOTS - 1].hs_name[off] = '\0'; |
} |
} else if (ev.c != '\0') { |
if (i < (MAXLOGNAME - 1)) { |
if (chr_encode(ev.c, scores[NUMSPOTS - 1].hs_name, |
&off, STR_BOUNDS(MAXLOGNAME) + 1) == EOK) { |
++i; |
} |
scores[NUMSPOTS - 1].hs_name[off] = '\0'; |
} |
} |
moveto(10 , 28); |
printf("%s%.*s",scores[NUMSPOTS - 1].hs_name,MAXLOGNAME-i,"........................................"); |
key = getchar(); |
} |
scores[NUMSPOTS - 1].hs_score = score; |
167,7 → 197,7 |
{ |
int i; |
for(i = 0; i < NUMSPOTS; i++) { |
strncpy(scores[i].hs_name, "HelenOS Team", MAXLOGNAME); |
str_cpy(scores[i].hs_name, STR_BOUNDS(MAXLOGNAME) + 1, "HelenOS Team"); |
scores[i].hs_score = (NUMSPOTS - i) * 200; |
scores[i].hs_level = (i + 1 > MAXLEVEL?MAXLEVEL:i + 1); |
} |
261,7 → 291,7 |
/* change = 0; */ |
/* me = thisuser(); */ |
/* for (i = 0, sp = &scores[0]; i < nscores; i++, sp++) { */ |
/* if (sp->hs_level != level || strcmp(sp->hs_name, me) != 0) */ |
/* if (sp->hs_level != level || str_cmp(sp->hs_name, me) != 0) */ |
/* continue; */ |
/* if (score > sp->hs_score) { */ |
/* (void)printf("%s bettered %s %d score of %d!\n", */ |
389,7 → 419,7 |
/* * This is O(n^2), but do you think we care? */ |
/* *\/ */ |
/* for (j = 0, pu = count; j < numnames; j++, pu++) */ |
/* if (strcmp(sp->hs_name, pu->name) == 0) */ |
/* if (str_cmp(sp->hs_name, pu->name) == 0) */ |
/* break; */ |
/* if (j == numnames) { */ |
/* /\* */ |
526,7 → 556,7 |
/* if (me != NULL && */ |
/* sp->hs_level == level && */ |
/* sp->hs_score == score && */ |
/* strcmp(sp->hs_name, me) == 0) { */ |
/* str_cmp(sp->hs_name, me) == 0) { */ |
/* putpad(SOstr); */ |
/* highlight = 1; */ |
/* } */ |
//branches/tracing/uspace/app/tetris/input.c |
---|
57,7 → 57,9 |
#include "tetris.h" |
#include <async.h> |
#include "../../srv/console/console.h" |
#include <ipc/console.h> |
#include <console.h> |
#include <kbd/kbd.h> |
/* return true iff the given timeval is positive */ |
#define TV_POS(tv) \ |
111,10 → 113,11 |
s = NULL; |
if (!lastchar) { |
again: |
if (!getchar_inprog) { |
cons_phone = get_cons_phone(); |
cons_phone = console_open(true); |
getchar_inprog = async_send_2(cons_phone, |
CONSOLE_GETCHAR, 0, 0, &charcall); |
CONSOLE_GETKEY, 0, 0, &charcall); |
} |
if (!s) |
async_wait_for(getchar_inprog, &rc); |
127,7 → 130,10 |
if (rc) { |
stop("end of file, help"); |
} |
lastchar = IPC_GET_ARG1(charcall); |
if (IPC_GET_ARG1(charcall) == KE_RELEASE) |
goto again; |
lastchar = IPC_GET_ARG4(charcall); |
} |
if (tvp) { |
/* since there is input, we may not have timed out */ |
//branches/tracing/uspace/app/tetris/screen.c |
---|
50,13 → 50,12 |
#include <stdlib.h> |
#include <string.h> |
#include <unistd.h> |
#include <io/stream.h> |
#include <console.h> |
#include <async.h> |
#include "screen.h" |
#include "tetris.h" |
#include "../../srv/console/console.h" |
#include <ipc/console.h> |
static cell curscreen[B_SIZE]; /* 1 => standout (or otherwise marked) */ |
static int curscore; |
73,29 → 72,19 |
putchar(*(s++)); |
} |
static int con_phone; |
static void set_style(int fgcolor, int bgcolor) |
{ |
async_msg_2(con_phone, CONSOLE_SET_STYLE, fgcolor, bgcolor); |
} |
static void start_standout(void) |
{ |
set_style(0xf0f0f0, 0); |
console_set_rgb_color(0xf0f0f0, 0); |
} |
static void resume_normal(void) |
{ |
set_style(0, 0xf0f0f0); |
console_set_rgb_color(0, 0xf0f0f0); |
} |
void clear_screen(void) |
{ |
async_msg_0(con_phone, CONSOLE_CLEAR); |
console_clear(); |
moveto(0, 0); |
} |
107,7 → 96,7 |
{ |
resume_normal(); |
async_msg_0(con_phone, CONSOLE_CLEAR); |
console_clear(); |
curscore = -1; |
memset((char *)curscreen, 0, sizeof(curscreen)); |
} |
118,8 → 107,7 |
void |
scr_init(void) |
{ |
con_phone = get_cons_phone(); |
async_msg_1(con_phone, CONSOLE_CURSOR_VISIBILITY, 0); |
console_cursor_visibility(0); |
resume_normal(); |
scr_clear(); |
} |
126,20 → 114,14 |
void moveto(int r, int c) |
{ |
async_msg_2(con_phone, CONSOLE_GOTO, r, c); |
console_goto(r, c); |
} |
static void fflush(void) |
{ |
async_msg_0(con_phone, CONSOLE_FLUSH); |
} |
winsize_t winsize; |
static int get_display_size(winsize_t *ws) |
{ |
return async_req_0_2(con_phone, CONSOLE_GETSIZE, &ws->ws_row, |
&ws->ws_col); |
return console_get_size(&ws->ws_row, &ws->ws_col); |
} |
/* |
287,7 → 269,7 |
} |
if (cur_so) |
resume_normal(); |
fflush(); |
fflush(stdout); |
} |
/* |
298,7 → 280,7 |
scr_msg(char *s, int set) |
{ |
int l = strlen(s); |
int l = str_size(s); |
moveto(Rows - 2, ((Cols - l) >> 1) - 1); |
if (set) |
//branches/tracing/uspace/app/tetris/scores.h |
---|
45,9 → 45,11 |
* Tetris scores. |
*/ |
#include <sys/time.h> |
#include <string.h> |
#define MAXLOGNAME 16 |
struct highscore { |
char hs_name[MAXLOGNAME + 1]; /* login name */ |
char hs_name[STR_BOUNDS(MAXLOGNAME) + 1]; /* login name */ |
int hs_score; /* raw score */ |
int hs_level; /* play level */ |
// time_t hs_time; /* time at game end */ |
//branches/tracing/uspace/app/tetris/screen.h |
---|
49,8 → 49,8 |
#include <async.h> |
typedef struct { |
ipcarg_t ws_row; |
ipcarg_t ws_col; |
int ws_row; |
int ws_col; |
} winsize_t; |
extern winsize_t winsize; |
//branches/tracing/uspace/app/tetris/tetris.c |
---|
277,7 → 277,7 |
/* classic = 1; */ |
/* break; */ |
/* case 'k': */ |
/* if (strlen(keys = optarg) != 6) */ |
/* if (str_size(keys = optarg) != 6) */ |
/* usage(); */ |
/* break; */ |
/* case 'l': */ |
311,7 → 311,7 |
errx(1, "duplicate command keys specified."); |
} |
if (keys[i] == ' ') |
strncpy(key_write[i], "<space>", sizeof key_write[i]); |
str_cpy(key_write[i], sizeof key_write[i], "<space>"); |
else { |
key_write[i][0] = keys[i]; |
key_write[i][1] = '\0'; |
390,7 → 390,7 |
scr_update(); |
scr_msg(key_msg, 0); |
scr_msg(msg, 1); |
// (void) fflush(stdout); |
(void) fflush(stdout); |
} while (rwait((struct timeval *)NULL) == -1); |
scr_msg(msg, 0); |
scr_msg(key_msg, 1); |
//branches/tracing/uspace/app/tetris/Makefile |
---|
1,7 → 1,6 |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
LIBS = $(LIBC_PREFIX)/libc.a |
20,7 → 19,7 |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend *.o |
//branches/tracing/uspace/app/klog/Makefile |
---|
29,10 → 29,9 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
LIBS = $(LIBC_PREFIX)/libc.a |
54,13 → 53,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/app/klog/klog.c |
---|
27,9 → 27,9 |
*/ |
/** @addtogroup klog KLog |
* @brief HelenOS KLog |
* @brief HelenOS KLog |
* @{ |
*/ |
*/ |
/** |
* @file |
*/ |
41,31 → 41,27 |
#include <as.h> |
#include <sysinfo.h> |
#include <io/stream.h> |
#include <console.h> |
#include <event.h> |
#include <errno.h> |
#define NAME "klog" |
#define KLOG_SIZE PAGE_SIZE |
/* Pointer to klog area */ |
static char *klog; |
static wchar_t *klog; |
static count_t klog_length; |
static void console_wait(void) |
{ |
while (get_cons_phone() < 0) |
usleep(50000); // FIXME |
} |
static void interrupt_received(ipc_callid_t callid, ipc_call_t *call) |
{ |
async_serialize_start(); |
size_t klog_start = (size_t) IPC_GET_ARG1(*call); |
size_t klog_len = (size_t) IPC_GET_ARG2(*call); |
size_t klog_stored = (size_t) IPC_GET_ARG3(*call); |
size_t i; |
count_t klog_start = (count_t) IPC_GET_ARG1(*call); |
count_t klog_len = (count_t) IPC_GET_ARG2(*call); |
count_t klog_stored = (count_t) IPC_GET_ARG3(*call); |
count_t i; |
for (i = klog_len - klog_stored; i < klog_len; i++) |
putchar(klog[(klog_start + i) % KLOG_SIZE]); |
putchar(klog[(klog_start + i) % klog_length]); |
async_serialize_end(); |
} |
74,22 → 70,24 |
{ |
console_wait(); |
klog = (char *) as_get_mappable_page(KLOG_SIZE); |
count_t klog_pages = sysinfo_value("klog.pages"); |
size_t klog_size = klog_pages * PAGE_SIZE; |
klog_length = klog_size / sizeof(wchar_t); |
klog = (wchar_t *) as_get_mappable_page(klog_pages); |
if (klog == NULL) { |
printf(NAME ": Error allocating memory area\n"); |
return -1; |
} |
int res = ipc_share_in_start_1_0(PHONE_NS, (void *) klog, KLOG_SIZE, |
SERVICE_MEM_KLOG); |
int res = ipc_share_in_start_1_0(PHONE_NS, (void *) klog, |
klog_size, SERVICE_MEM_KLOG); |
if (res != EOK) { |
printf(NAME ": Error initializing memory area\n"); |
return -1; |
} |
int inr = sysinfo_value("klog.inr"); |
int devno = sysinfo_value("klog.devno"); |
if (ipc_register_irq(inr, devno, 0, NULL) != EOK) { |
if (event_subscribe(EVENT_KLOG, 0) != EOK) { |
printf(NAME ": Error registering klog notifications\n"); |
return -1; |
} |
97,7 → 95,7 |
async_set_interrupt_received(interrupt_received); |
klog_update(); |
async_manager(); |
return 0; |
} |
//branches/tracing/uspace/app/trace/trace.c |
---|
49,7 → 49,7 |
#include "proto.h" |
#include <ipc/services.h> |
#include "../../srv/vfs/vfs.h" |
#include "../../srv/console/console.h" |
#include <ipc/console.h> |
#include "syscalls.h" |
#include "ipcp.h" |
519,7 → 519,7 |
int rc; |
/* Spawn a program loader */ |
ldr = loader_spawn(path); |
ldr = loader_connect(); |
if (ldr == NULL) |
return 0; |
623,7 → 623,7 |
V_INTEGER, |
V_INTEGER, |
V_INTEGER, |
V_INTEGER |
V_INTEGER |
}; |
next_thread_id = 1; |
642,17 → 642,32 |
proto_add_oper(p, VFS_MOUNT, o); |
/* o = oper_new("unmount", 0, arg_def); |
proto_add_oper(p, VFS_UNMOUNT, o);*/ |
o = oper_new("open", 2, arg_def, V_INT_ERRNO, 0, resp_def); |
proto_add_oper(p, VFS_OPEN, o); |
o = oper_new("close", 1, arg_def, V_ERRNO, 0, resp_def); |
proto_add_oper(p, VFS_CLOSE, o); |
o = oper_new("seek", 3, arg_def, V_ERRNO, 0, resp_def); |
proto_add_oper(p, VFS_SEEK, o); |
o = oper_new("mkdir", 1, arg_def, V_ERRNO, 0, resp_def); |
proto_add_oper(p, VFS_MKDIR, o); |
o = oper_new("unlink", 0, arg_def, V_ERRNO, 0, resp_def); |
proto_add_oper(p, VFS_UNLINK, o); |
o = oper_new("rename", 0, arg_def, V_ERRNO, 0, resp_def); |
proto_add_oper(p, VFS_RENAME, o); |
proto_register(SERVICE_VFS, p); |
p = proto_new("console"); |
resp_def[0] = V_CHAR; |
o = oper_new("getchar", 0, arg_def, V_INTEGER, 2, resp_def); |
proto_add_oper(p, CONSOLE_GETCHAR, o); |
resp_def[0] = V_INTEGER; resp_def[1] = V_INTEGER; |
resp_def[2] = V_INTEGER; resp_def[3] = V_CHAR; |
o = oper_new("getkey", 0, arg_def, V_ERRNO, 4, resp_def); |
proto_add_oper(p, CONSOLE_GETKEY, o); |
arg_def[0] = V_CHAR; |
o = oper_new("putchar", 1, arg_def, V_VOID, 0, resp_def); |
proto_add_oper(p, CONSOLE_PUTCHAR, o); |
o = oper_new("write", 0, arg_def, V_VOID, 0, resp_def); |
proto_add_oper(p, CONSOLE_WRITE, o); |
o = oper_new("clear", 0, arg_def, V_VOID, 0, resp_def); |
proto_add_oper(p, CONSOLE_CLEAR, o); |
666,9 → 681,15 |
o = oper_new("flush", 0, arg_def, V_VOID, 0, resp_def); |
proto_add_oper(p, CONSOLE_FLUSH, o); |
arg_def[0] = V_INTEGER; |
o = oper_new("set_style", 1, arg_def, V_VOID, 0, resp_def); |
proto_add_oper(p, CONSOLE_SET_STYLE, o); |
arg_def[0] = V_INTEGER; arg_def[1] = V_INTEGER; arg_def[2] = V_INTEGER; |
o = oper_new("set_color", 3, arg_def, V_VOID, 0, resp_def); |
proto_add_oper(p, CONSOLE_SET_COLOR, o); |
arg_def[0] = V_INTEGER; arg_def[1] = V_INTEGER; |
o = oper_new("set_style", 2, arg_def, V_INTEGER, 0, resp_def); |
proto_add_oper(p, CONSOLE_SET_STYLE, o); |
o = oper_new("set_rgb_color", 2, arg_def, V_VOID, 0, resp_def); |
proto_add_oper(p, CONSOLE_SET_RGB_COLOR, o); |
o = oper_new("cursor_visibility", 1, arg_def, V_VOID, 0, resp_def); |
proto_add_oper(p, CONSOLE_CURSOR_VISIBILITY, o); |
//branches/tracing/uspace/app/trace/Makefile |
---|
29,10 → 29,9 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I../../srv/kbd/include |
65,7 → 64,7 |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: |
$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm |
//branches/tracing/uspace/app/trace/syscalls.c |
---|
59,11 → 59,14 |
[SYS_IPC_ANSWER_FAST] = { "ipc_answer_fast", 6, V_ERRNO }, |
[SYS_IPC_ANSWER_SLOW] = { "ipc_answer_slow", 2, V_ERRNO }, |
[SYS_IPC_FORWARD_FAST] = { "ipc_forward_fast", 6, V_ERRNO }, |
[SYS_IPC_FORWARD_SLOW] = { "ipc_forward_slow", 3, V_ERRNO }, |
[SYS_IPC_WAIT] = { "ipc_wait_for_call", 3, V_HASH }, |
[SYS_IPC_HANGUP] = { "ipc_hangup", 1, V_ERRNO }, |
[SYS_IPC_REGISTER_IRQ] = { "ipc_register_irq", 4, V_ERRNO }, |
[SYS_IPC_UNREGISTER_IRQ] = { "ipc_unregister_irq", 2, V_ERRNO }, |
[SYS_EVENT_SUBSCRIBE] = { "event_subscribe", 2, V_ERRNO }, |
[SYS_CAP_GRANT] = { "cap_grant", 2, V_ERRNO }, |
[SYS_CAP_REVOKE] = { "cap_revoke", 2, V_ERRNO }, |
[SYS_PHYSMEM_MAP] = { "physmem_map", 4, V_ERRNO }, |
//branches/tracing/uspace/dist/readme |
---|
1,0 → 0,0 |
Lorem ipsum. |
Multilingual text test |
---------------------- |
English: Quick brown fox jumps over the lazy dog |
Czech: Příliš žluťoučký kůň úpěl ďábelské ódy |
Greek: Ὦ ξεῖν’, ἀγγέλλειν Λακεδαιμονίοις ὅτι τῇδε |
Hebrew: משוואת ברנולי היא משוואה בהידרודינמיקה |
Arabic: التوزيع الجغرافي للحمل العنقودي |
Russian: Леннон познакомился с художницей-авангардисткой |
Armenian: Սկսեց հրատարակվել Երուսաղեմի հայկական |
//branches/tracing/uspace/lib/libfs/libfs.c |
---|
148,9 → 148,9 |
if (last < next) |
last += PLB_SIZE; |
void *par = NULL; |
void *cur = ops->root_get(dev_handle); |
void *tmp = NULL; |
fs_node_t *par = NULL; |
fs_node_t *cur = ops->root_get(dev_handle); |
fs_node_t *tmp = NULL; |
if (ops->plb_get_char(next) == '/') |
next++; /* eat slash */ |
189,39 → 189,33 |
ipc_answer_0(rid, ENOTDIR); |
goto out; |
} |
void *nodep; |
fs_node_t *fn; |
if (lflag & L_CREATE) |
nodep = ops->create(dev_handle, lflag); |
fn = ops->create(dev_handle, lflag); |
else |
nodep = ops->node_get(dev_handle, |
fn = ops->node_get(dev_handle, |
index); |
if (nodep) { |
if (fn) { |
int rc; |
rc = ops->link(cur, nodep, component); |
rc = ops->link(cur, fn, component); |
if (rc != EOK) { |
if (lflag & L_CREATE) { |
(void)ops->destroy( |
nodep); |
(void)ops->destroy(fn); |
} |
ipc_answer_0(rid, rc); |
} else { |
ipc_answer_5(rid, EOK, |
fs_handle, dev_handle, |
ops->index_get(nodep), |
ops->size_get(nodep), |
ops->lnkcnt_get(nodep)); |
ops->node_put(nodep); |
ops->index_get(fn), |
ops->size_get(fn), |
ops->lnkcnt_get(fn)); |
ops->node_put(fn); |
} |
} else { |
ipc_answer_0(rid, ENOSPC); |
} |
goto out; |
} else if (lflag & L_PARENT) { |
/* return parent */ |
ipc_answer_5(rid, EOK, fs_handle, dev_handle, |
ops->index_get(cur), ops->size_get(cur), |
ops->lnkcnt_get(cur)); |
} |
ipc_answer_0(rid, ENOENT); |
goto out; |
263,26 → 257,26 |
assert(len); |
component[len] = '\0'; |
void *nodep; |
fs_node_t *fn; |
if (lflag & L_CREATE) |
nodep = ops->create(dev_handle, lflag); |
fn = ops->create(dev_handle, lflag); |
else |
nodep = ops->node_get(dev_handle, index); |
if (nodep) { |
fn = ops->node_get(dev_handle, index); |
if (fn) { |
int rc; |
rc = ops->link(cur, nodep, component); |
rc = ops->link(cur, fn, component); |
if (rc != EOK) { |
if (lflag & L_CREATE) |
(void)ops->destroy(nodep); |
(void)ops->destroy(fn); |
ipc_answer_0(rid, rc); |
} else { |
ipc_answer_5(rid, EOK, |
fs_handle, dev_handle, |
ops->index_get(nodep), |
ops->size_get(nodep), |
ops->lnkcnt_get(nodep)); |
ops->node_put(nodep); |
ops->index_get(fn), |
ops->size_get(fn), |
ops->lnkcnt_get(fn)); |
ops->node_put(fn); |
} |
} else { |
ipc_answer_0(rid, ENOSPC); |
294,18 → 288,9 |
} |
/* handle hit */ |
if (lflag & L_PARENT) { |
ops->node_put(cur); |
cur = par; |
par = NULL; |
if (!cur) { |
ipc_answer_0(rid, ENOENT); |
goto out; |
} |
} |
if (lflag & L_UNLINK) { |
unsigned old_lnkcnt = ops->lnkcnt_get(cur); |
int res = ops->unlink(par, cur); |
int res = ops->unlink(par, cur, component); |
ipc_answer_5(rid, (ipcarg_t)res, fs_handle, dev_handle, |
ops->index_get(cur), ops->size_get(cur), old_lnkcnt); |
goto out; |
//branches/tracing/uspace/lib/libfs/libfs.h |
---|
42,21 → 42,25 |
#include <async.h> |
typedef struct { |
void * (* match)(void *, const char *); |
void * (* node_get)(dev_handle_t, fs_index_t); |
void (* node_put)(void *); |
void * (* create)(dev_handle_t, int); |
int (* destroy)(void *); |
int (* link)(void *, void *, const char *); |
int (* unlink)(void *, void *); |
fs_index_t (* index_get)(void *); |
size_t (* size_get)(void *); |
unsigned (* lnkcnt_get)(void *); |
bool (* has_children)(void *); |
void *(* root_get)(dev_handle_t); |
void *data; /**< Data of the file system implementation. */ |
} fs_node_t; |
typedef struct { |
fs_node_t * (* match)(fs_node_t *, const char *); |
fs_node_t * (* node_get)(dev_handle_t, fs_index_t); |
void (* node_put)(fs_node_t *); |
fs_node_t * (* create)(dev_handle_t, int); |
int (* destroy)(fs_node_t *); |
int (* link)(fs_node_t *, fs_node_t *, const char *); |
int (* unlink)(fs_node_t *, fs_node_t *, const char *); |
fs_index_t (* index_get)(fs_node_t *); |
size_t (* size_get)(fs_node_t *); |
unsigned (* lnkcnt_get)(fs_node_t *); |
bool (* has_children)(fs_node_t *); |
fs_node_t *(* root_get)(dev_handle_t); |
char (* plb_get_char)(unsigned pos); |
bool (* is_directory)(void *); |
bool (* is_file)(void *); |
bool (* is_directory)(fs_node_t *); |
bool (* is_file)(fs_node_t *); |
} libfs_ops_t; |
typedef struct { |
//branches/tracing/uspace/lib/libfs/Makefile |
---|
30,9 → 30,8 |
## Common compiler flags |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../libc |
LIBC_PREFIX = ../libc |
## Setup toolchain |
# |
59,7 → 58,7 |
find . -name '*.o' -follow -exec rm \{\} \; |
depend: |
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null |
-makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null |
libfs.a: depend $(OBJECTS) |
$(AR) rc libfs.a $(OBJECTS) |
//branches/tracing/uspace/lib/libblock/libblock.c |
---|
27,15 → 27,15 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libblock |
/** @addtogroup libblock |
* @{ |
*/ |
*/ |
/** |
* @file |
* @brief |
*/ |
#include "libblock.h" |
#include "libblock.h" |
#include "../../srv/vfs/vfs.h" |
#include "../../srv/rd/rd.h" |
#include <ipc/devmap.h> |
146,7 → 146,7 |
if (!com_area) { |
return ENOMEM; |
} |
dev_phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP, |
dev_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAP, |
DEVMAP_CONNECT_TO_DEVICE, dev_handle); |
if (dev_phone < 0) { |
//branches/tracing/uspace/lib/libblock/Makefile |
---|
30,9 → 30,8 |
## Common compiler flags |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../libc |
LIBC_PREFIX = ../libc |
## Setup toolchain |
# |
59,7 → 58,7 |
find . -name '*.o' -follow -exec rm \{\} \; |
depend: |
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null |
-makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null |
libblock.a: depend $(OBJECTS) |
$(AR) rc libblock.a $(OBJECTS) |
//branches/tracing/uspace/lib/softfloat/Makefile |
---|
29,28 → 29,27 |
## Common compiler flags |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../libc |
LIBC_PREFIX = ../libc |
## Setup toolchain |
# |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS +=-Iinclude -Iarch/$(ARCH)/include/ |
CFLAGS +=-Iinclude -Iarch/$(UARCH)/include/ |
## Sources |
# |
GENERIC_SOURCES = \ |
generic/add.c \ |
generic/common.c \ |
generic/comparison.c \ |
generic/conversion.c \ |
generic/div.c \ |
generic/mul.c \ |
generic/other.c \ |
generic/softfloat.c \ |
GENERIC_SOURCES = \ |
generic/add.c \ |
generic/common.c \ |
generic/comparison.c \ |
generic/conversion.c \ |
generic/div.c \ |
generic/mul.c \ |
generic/other.c \ |
generic/softfloat.c \ |
generic/sub.c |
ARCH_SOURCES = |
68,7 → 67,7 |
find generic/ -name '*.o' -follow -exec rm \{\} \; |
depend: |
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null |
-makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null |
libsoftfloat.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS) |
$(AR) rc libsoftfloat.a $(ARCH_OBJECTS) $(GENERIC_OBJECTS) |
//branches/tracing/uspace/lib/softfloat/arch/ppc64/include/functions.h |
---|
File deleted |
//branches/tracing/uspace/lib/softint/Makefile |
---|
29,9 → 29,8 |
## Common compiler flags |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../libc |
LIBC_PREFIX = ../libc |
## Setup toolchain |
# |
60,7 → 59,7 |
find generic/ -name '*.o' -follow -exec rm \{\} \; |
depend: |
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null |
-makedepend -f - -- $(DEPEMD_DEFS) $(CFLAGS) -- $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null |
libsoftint.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS) |
$(AR) rc libsoftint.a $(ARCH_OBJECTS) $(GENERIC_OBJECTS) |
//branches/tracing/uspace/lib/libc/include/ddi.h |
---|
37,9 → 37,11 |
#include <task.h> |
extern int physmem_map(void *pf, void *vp, unsigned long pages, int flags); |
extern int iospace_enable(task_id_t id, void *ioaddr, unsigned long size); |
extern int preemption_control(int enable); |
extern int device_assign_devno(void); |
extern int physmem_map(void *, void *, unsigned long, int); |
extern int iospace_enable(task_id_t, void *, unsigned long); |
extern int preemption_control(int); |
extern int pio_enable(void *, size_t, void **); |
#endif |
//branches/tracing/uspace/lib/libc/include/console.h |
---|
0,0 → 1,65 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_CONSOLE_H_ |
#define LIBC_CONSOLE_H_ |
#include <console/style.h> |
#include <console/color.h> |
#include <sys/types.h> |
#include <bool.h> |
extern int console_open(bool); |
extern void console_close(void); |
extern void console_wait(void); |
extern void console_clear(void); |
extern void console_goto(int, int); |
extern void console_putchar(wchar_t); |
extern ssize_t console_write(const char *, size_t); |
extern void console_putstr(const char *); |
extern void console_flush(void); |
extern int console_get_size(int *, int *); |
extern void console_set_style(int); |
extern void console_set_color(int, int, int); |
extern void console_set_rgb_color(int, int); |
extern void console_cursor_visibility(int); |
extern void console_kcon_enable(void); |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/string.h |
---|
35,32 → 35,60 |
#ifndef LIBC_STRING_H_ |
#define LIBC_STRING_H_ |
#include <mem.h> |
#include <sys/types.h> |
#include <bool.h> |
#define bzero(ptr, len) memset((ptr), 0, (len)) |
#define U_SPECIAL '?' |
#define U_BOM 0xfeff |
extern void * memset(void *, int, size_t); |
extern void * memcpy(void *, const void *, size_t); |
extern void * memmove(void *, const void *, size_t); |
/** No size limit constant */ |
#define STR_NO_LIMIT ((size_t) -1) |
extern int bcmp(const char *, const char *, size_t); |
/** Maximum size of a string containing @c length characters */ |
#define STR_BOUNDS(length) ((length) << 2) |
extern int strcmp(const char *, const char *); |
extern int strncmp(const char *, const char *, size_t); |
extern int stricmp(const char *, const char *); |
extern wchar_t str_decode(const char *str, size_t *offset, size_t sz); |
extern int chr_encode(const wchar_t ch, char *str, size_t *offset, size_t sz); |
extern char *strcpy(char *, const char *); |
extern char *strncpy(char *, const char *, size_t); |
extern size_t str_size(const char *str); |
extern size_t wstr_size(const wchar_t *str); |
extern char *strcat(char *, const char *); |
extern size_t str_lsize(const char *str, count_t max_len); |
extern size_t wstr_lsize(const wchar_t *str, count_t max_len); |
extern size_t strlen(const char *); |
extern count_t str_length(const char *str); |
extern count_t wstr_length(const wchar_t *wstr); |
extern char *strdup(const char *); |
extern count_t str_nlength(const char *str, size_t size); |
extern count_t wstr_nlength(const wchar_t *str, size_t size); |
extern char *strchr(const char *, int); |
extern char *strrchr(const char *, int); |
extern bool ascii_check(wchar_t ch); |
extern bool chr_check(wchar_t ch); |
extern int str_cmp(const char *s1, const char *s2); |
extern int str_lcmp(const char *s1, const char *s2, count_t max_len); |
extern void str_cpy(char *dest, size_t size, const char *src); |
extern void str_ncpy(char *dest, size_t size, const char *src, size_t n); |
extern void str_append(char *dest, size_t size, const char *src); |
extern void wstr_nstr(char *dst, const wchar_t *src, size_t size); |
extern const char *str_chr(const char *str, wchar_t ch); |
extern const char *str_rchr(const char *str, wchar_t ch); |
extern bool wstr_linsert(wchar_t *str, wchar_t ch, count_t pos, count_t max_pos); |
extern bool wstr_remove(wchar_t *str, count_t pos); |
extern char *str_dup(const char *); |
/* |
* TODO: Get rid of this. |
*/ |
extern int stricmp(const char *, const char *); |
extern long int strtol(const char *, char **, int); |
extern unsigned long strtoul(const char *, char **, int); |
//branches/tracing/uspace/lib/libc/include/vfs/vfs.h |
---|
39,7 → 39,8 |
extern char *absolutize(const char *, size_t *); |
extern int mount(const char *, const char *, const char *); |
extern int mount(const char *, const char *, const char *, const char *, |
const unsigned int flags); |
#endif |
//branches/tracing/uspace/lib/libc/include/async.h |
---|
76,7 → 76,7 |
#define async_send_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, dataptr) \ |
async_send_slow((phoneid), (method), (arg1), (arg2), (arg3), (arg4), \ |
(arg5), (dataptr)) |
extern aid_t async_send_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr); |
extern aid_t async_send_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, |
86,8 → 86,8 |
extern int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, |
suseconds_t timeout); |
fid_t async_new_connection(ipcarg_t in_phone_hash,ipc_callid_t callid, |
ipc_call_t *call, void (*cthread)(ipc_callid_t,ipc_call_t *)); |
fid_t async_new_connection(ipcarg_t in_phone_hash, ipc_callid_t callid, |
ipc_call_t *call, void (*cthread)(ipc_callid_t, ipc_call_t *)); |
void async_usleep(suseconds_t timeout); |
void async_create_manager(void); |
void async_destroy_manager(void); |
98,27 → 98,27 |
/* Wrappers for simple communication */ |
#define async_msg_0(phone, method) \ |
ipc_call_async_0((phone), (method), NULL, NULL, !in_interrupt_handler()) |
ipc_call_async_0((phone), (method), NULL, NULL, true) |
#define async_msg_1(phone, method, arg1) \ |
ipc_call_async_1((phone), (method), (arg1), NULL, NULL, \ |
!in_interrupt_handler()) |
true) |
#define async_msg_2(phone, method, arg1, arg2) \ |
ipc_call_async_2((phone), (method), (arg1), (arg2), NULL, NULL, \ |
!in_interrupt_handler()) |
true) |
#define async_msg_3(phone, method, arg1, arg2, arg3) \ |
ipc_call_async_3((phone), (method), (arg1), (arg2), (arg3), NULL, NULL, \ |
!in_interrupt_handler()) |
true) |
#define async_msg_4(phone, method, arg1, arg2, arg3, arg4) \ |
ipc_call_async_4((phone), (method), (arg1), (arg2), (arg3), (arg4), NULL, \ |
NULL, !in_interrupt_handler()) |
NULL, true) |
#define async_msg_5(phone, method, arg1, arg2, arg3, arg4, arg5) \ |
ipc_call_async_5((phone), (method), (arg1), (arg2), (arg3), (arg4), \ |
(arg5), NULL, NULL, !in_interrupt_handler()) |
(arg5), NULL, NULL, true) |
/* |
* User-friendly wrappers for async_req_fast() and async_req_slow(). The macros |
* are in the form async_req_m_n(), where m is the number of payload arguments |
* and n is the number of return arguments. The macros decidce between the fast |
* and n is the number of return arguments. The macros decide between the fast |
* and slow verion based on m. |
*/ |
#define async_req_0_0(phoneid, method) \ |
253,8 → 253,6 |
fibril_dec_sercount(); |
} |
extern bool in_interrupt_handler(void); |
extern atomic_t async_futex; |
#endif |
//branches/tracing/uspace/lib/libc/include/stdio.h |
---|
49,17 → 49,31 |
int n; \ |
n = snprintf(buf, sizeof(buf), fmt, ##__VA_ARGS__); \ |
if (n > 0) \ |
(void) __SYSCALL3(SYS_KLOG, 1, (sysarg_t) buf, strlen(buf)); \ |
(void) __SYSCALL3(SYS_KLOG, 1, (sysarg_t) buf, str_size(buf)); \ |
} |
typedef struct { |
/** Underlying file descriptor. */ |
int fd; |
/** Error indicator. */ |
int error; |
/** End-of-file indicator. */ |
int eof; |
} FILE; |
extern FILE *stdin, *stdout, *stderr; |
extern int getchar(void); |
extern int puts(const char *); |
extern int putchar(int); |
extern int fflush(FILE *); |
extern int printf(const char *, ...); |
extern int asprintf(char **, const char *, ...); |
extern int sprintf(char *, const char *fmt, ...); |
extern int sprintf(char *, const char *, ...); |
extern int snprintf(char *, size_t , const char *, ...); |
extern int vprintf(const char *, va_list); |
66,11 → 80,35 |
extern int vsprintf(char *, const char *, va_list); |
extern int vsnprintf(char *, size_t, const char *, va_list); |
#define fprintf(f, fmt, ...) printf(fmt, ##__VA_ARGS__) |
extern int rename(const char *, const char *); |
extern FILE *fopen(const char *, const char *); |
extern int fclose(FILE *); |
extern size_t fread(void *, size_t, size_t, FILE *); |
extern size_t fwrite(const void *, size_t, size_t, FILE *); |
extern int feof(FILE *); |
extern int ferror(FILE *); |
extern void clearerr(FILE *); |
extern int fgetc(FILE *); |
extern int fputc(int, FILE *); |
extern int fputs(const char *, FILE *); |
extern int fprintf(FILE *, const char *, ...); |
extern int vfprintf(FILE *, const char *, va_list); |
#define getc fgetc |
#define putc fputc |
extern int fseek(FILE *, long, int); |
#ifndef SEEK_SET |
#define SEEK_SET 0 |
#define SEEK_CUR 1 |
#define SEEK_END 2 |
#endif |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/task.h |
---|
40,6 → 40,7 |
typedef uint64_t task_id_t; |
extern task_id_t task_get_id(void); |
extern int task_set_name(const char *name); |
extern task_id_t task_spawn(const char *path, char *const argv[]); |
#endif |
//branches/tracing/uspace/lib/libc/include/unistd.h |
---|
44,9 → 44,11 |
#define getpagesize() (PAGE_SIZE) |
#define SEEK_SET 0 |
#define SEEK_CUR 1 |
#define SEEK_END 2 |
#ifndef SEEK_SET |
#define SEEK_SET 0 |
#define SEEK_CUR 1 |
#define SEEK_END 2 |
#endif |
extern ssize_t write(int, const void *, size_t); |
extern ssize_t read(int, void *, size_t); |
58,7 → 60,7 |
extern int chdir(const char *); |
extern char *getcwd(char *buf, size_t); |
extern void _exit(int status); |
extern void _exit(int status) __attribute__ ((noreturn)); |
extern void *sbrk(ssize_t incr); |
extern int usleep(unsigned long usec); |
extern unsigned int sleep(unsigned int seconds); |
//branches/tracing/uspace/lib/libc/include/thread.h |
---|
45,7 → 45,7 |
extern void __thread_main(uspace_arg_t *); |
extern int thread_create(void (*)(void *), void *, char *, thread_id_t *); |
extern void thread_exit(int); |
extern void thread_exit(int) __attribute__ ((noreturn)); |
extern void thread_detach(thread_id_t); |
extern int thread_join(thread_id_t); |
extern thread_id_t thread_get_id(void); |
//branches/tracing/uspace/lib/libc/include/kbd/kbd.h |
---|
0,0 → 1,65 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_KBD_H_ |
#define LIBC_KBD_H_ |
#include <sys/types.h> |
typedef enum kbd_ev_type { |
KE_PRESS, |
KE_RELEASE |
} kbd_ev_type_t; |
/** Keyboard event structure. */ |
typedef struct { |
/** Press or release event. */ |
kbd_ev_type_t type; |
/** Keycode of the key that was pressed or released. */ |
unsigned int key; |
/** Bitmask of modifiers held. */ |
unsigned int mods; |
/** The character that was generated or '\0' for none. */ |
wchar_t c; |
} kbd_event_t; |
extern int kbd_get_event(kbd_event_t *); |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/kbd/keycode.h |
---|
0,0 → 1,220 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_KBD_KEYCODE_H_ |
#define LIBC_KBD_KEYCODE_H_ |
/** Keycode definitions. |
* |
* A keycode identifies a key by its position on the keyboard, rather |
* than by its label. For human readability, key positions are noted |
* with the key label on a keyboard with US layout. This label has |
* nothing to do with the character, that the key produces |
* -- this is determined by the keymap. |
* |
* The keyboard model reflects a standard PC keyboard layout. |
* Non-standard keyboards need to be mapped to this model in some |
* logical way. Scancodes are mapped to keycodes with a scanmap. |
* |
* For easier mapping to the model and to emphasize the nature of keycodes, |
* they really are organized here by position, rather than by label. |
*/ |
enum keycode { |
/* Main block row 1 */ |
KC_BACKTICK = 1, |
KC_1, |
KC_2, |
KC_3, |
KC_4, |
KC_5, |
KC_6, |
KC_7, |
KC_8, |
KC_9, |
KC_0, |
KC_MINUS, |
KC_EQUALS, |
KC_BACKSPACE, |
/* Main block row 2 */ |
KC_TAB, |
KC_Q, |
KC_W, |
KC_E, |
KC_R, |
KC_T, |
KC_Y, |
KC_U, |
KC_I, |
KC_O, |
KC_P, |
KC_LBRACKET, |
KC_RBRACKET, |
/* Main block row 3 */ |
KC_CAPS_LOCK, |
KC_A, |
KC_S, |
KC_D, |
KC_F, |
KC_G, |
KC_H, |
KC_J, |
KC_K, |
KC_L, |
KC_SEMICOLON, |
KC_QUOTE, |
KC_BACKSLASH, |
KC_ENTER, |
/* Main block row 4 */ |
KC_LSHIFT, |
KC_Z, |
KC_X, |
KC_C, |
KC_V, |
KC_B, |
KC_N, |
KC_M, |
KC_COMMA, |
KC_PERIOD, |
KC_SLASH, |
KC_RSHIFT, |
/* Main block row 5 */ |
KC_LCTRL, |
KC_LALT, |
KC_SPACE, |
KC_RALT, |
KC_RCTRL, |
/* Function keys block */ |
KC_ESCAPE, |
KC_F1, |
KC_F2, |
KC_F3, |
KC_F4, |
KC_F5, |
KC_F6, |
KC_F7, |
KC_F8, |
KC_F9, |
KC_F10, |
KC_F11, |
KC_F12, |
KC_PRTSCR, |
KC_SCROLL_LOCK, |
KC_PAUSE, |
/* Cursor keys block */ |
KC_INSERT, |
KC_HOME, |
KC_PAGE_UP, |
KC_DELETE, |
KC_END, |
KC_PAGE_DOWN, |
KC_UP, |
KC_LEFT, |
KC_DOWN, |
KC_RIGHT, |
/* Numeric block */ |
KC_NUM_LOCK, |
KC_NSLASH, |
KC_NTIMES, |
KC_NMINUS, |
KC_NPLUS, |
KC_NENTER, |
KC_N7, |
KC_N8, |
KC_N9, |
KC_N4, |
KC_N5, |
KC_N6, |
KC_N1, |
KC_N2, |
KC_N3, |
KC_N0, |
KC_NPERIOD |
} keycode_t; |
enum keymod { |
KM_LSHIFT = 0x001, |
KM_RSHIFT = 0x002, |
KM_LCTRL = 0x004, |
KM_RCTRL = 0x008, |
KM_LALT = 0x010, |
KM_RALT = 0x020, |
KM_CAPS_LOCK = 0x040, |
KM_NUM_LOCK = 0x080, |
KM_SCROLL_LOCK = 0x100, |
KM_SHIFT = KM_LSHIFT | KM_RSHIFT, |
KM_CTRL = KM_LCTRL | KM_RCTRL, |
KM_ALT = KM_LALT | KM_RALT |
} keymod_t; |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/console/color.h |
---|
0,0 → 1,55 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_CONSOLE_COLOR_H_ |
#define LIBC_CONSOLE_COLOR_H_ |
enum console_color { |
COLOR_BLACK = 0, |
COLOR_BLUE = 1, |
COLOR_GREEN = 2, |
COLOR_CYAN = 3, |
COLOR_RED = 4, |
COLOR_MAGENTA = 5, |
COLOR_YELLOW = 6, |
COLOR_WHITE = 7, |
CATTR_BRIGHT = 8, |
CATTR_BLINK = 8 |
}; |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/console/style.h |
---|
0,0 → 1,46 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_CONSOLE_STYLE_H_ |
#define LIBC_CONSOLE_STYLE_H_ |
enum console_style { |
STYLE_NORMAL = 0, |
STYLE_EMPHASIS = 1 |
}; |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/mem.h |
---|
0,0 → 1,51 |
/* |
* Copyright (c) 2005 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_MEM_H_ |
#define LIBC_MEM_H_ |
#include <sys/types.h> |
#define bzero(ptr, len) memset((ptr), 0, (len)) |
extern void * memset(void *, int, size_t); |
extern void * memcpy(void *, const void *, size_t); |
extern void * memmove(void *, const void *, size_t); |
extern int bcmp(const char *, const char *, size_t); |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/loader/loader.h |
---|
44,7 → 44,8 |
int phone_id; |
} loader_t; |
extern loader_t *loader_spawn(char *name); |
extern int loader_spawn(const char *); |
extern loader_t *loader_connect(void); |
extern int loader_get_task_id(loader_t *, task_id_t *); |
extern int loader_set_pathname(loader_t *, const char *); |
extern int loader_set_args(loader_t *, char *const []); |
//branches/tracing/uspace/lib/libc/include/io/printf_core.h |
---|
39,16 → 39,19 |
#include <stdarg.h> |
/** Structure for specifying output methods for different printf clones. */ |
struct printf_spec { |
/* Output function, returns count of printed characters or EOF */ |
int (*write)(void *, size_t, void *); |
/* Support data - output stream specification, its state, locks,... */ |
typedef struct printf_spec { |
/* String output function, returns number of printed characters or EOF */ |
int (*str_write)(const char *, size_t, void *); |
/* Wide string output function, returns number of printed characters or EOF */ |
int (*wstr_write)(const wchar_t *, size_t, void *); |
/* User data - output stream specification, state, locks, etc. */ |
void *data; |
} printf_spec_t; |
}; |
int printf_core(const char *fmt, printf_spec_t *ps, va_list ap); |
int printf_core(const char *fmt, struct printf_spec *ps ,va_list ap); |
#endif |
/** @} |
//branches/tracing/uspace/lib/libc/include/io/stream.h |
---|
37,18 → 37,12 |
#include <libarch/types.h> |
#define EMFILE -17 |
#define EMFILE -17 |
extern void open_console(void); |
extern void close_console(void); |
extern ssize_t read_stdin(void *, size_t); |
extern int klog_puts(const char *); |
extern void klog_update(void); |
extern ssize_t read_stdin(void *, size_t); |
extern ssize_t write_stdout(const void *, size_t); |
extern ssize_t write_stderr(const void *, size_t); |
extern int get_cons_phone(void); |
#endif |
/** @} |
//branches/tracing/uspace/lib/libc/include/event.h |
---|
0,0 → 1,46 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_EVENT_H_ |
#define LIBC_EVENT_H_ |
#include <kernel/ipc/event_types.h> |
#include <ipc/ipc.h> |
extern int event_subscribe(event_type_t, ipcarg_t); |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/macros.h |
---|
0,0 → 1,50 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_MACROS_H_ |
#define LIBC_MACROS_H_ |
#define SIZE2KB(size) ((size) >> 10) |
#define SIZE2MB(size) ((size) >> 20) |
#define KB2SIZE(kb) ((kb) << 10) |
#define MB2SIZE(mb) ((mb) << 20) |
#define STRING(arg) STRING_ARG(arg) |
#define STRING_ARG(arg) #arg |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/ipc/bus.h |
---|
0,0 → 1,47 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libcipc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_BUS_H_ |
#define LIBC_BUS_H_ |
#include <ipc/ipc.h> |
typedef enum { |
BUS_CLEAR_INTERRUPT = IPC_FIRST_USER_METHOD |
} bus_request_t; |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/ipc/ipc.h |
---|
47,8 → 47,7 |
} ipc_call_t; |
typedef sysarg_t ipc_callid_t; |
typedef void (* ipc_async_callback_t)(void *private, int retval, |
ipc_call_t *data); |
typedef void (* ipc_async_callback_t)(void *, int, ipc_call_t *); |
/* |
* User-friendly wrappers for ipc_call_sync_fast() and ipc_call_sync_slow(). |
173,22 → 172,20 |
ipc_call_sync_slow((phoneid), (method), (arg1), (arg2), (arg3), \ |
(arg4), (arg5), (res1), (res2), (res3), (res4), (res5)) |
extern int ipc_call_sync_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t *result1, ipcarg_t *result2, |
ipcarg_t *result3, ipcarg_t *result4, ipcarg_t *result5); |
extern int ipc_call_sync_fast(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t, |
ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *); |
extern int ipc_call_sync_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, |
ipcarg_t *result1, ipcarg_t *result2, ipcarg_t *result3, ipcarg_t *result4, |
ipcarg_t *result5); |
extern int ipc_call_sync_slow(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t, |
ipcarg_t, ipcarg_t, ipcarg_t *, ipcarg_t *, ipcarg_t *, ipcarg_t *, |
ipcarg_t *); |
extern ipc_callid_t ipc_wait_cycle(ipc_call_t *call, uint32_t usec, int flags); |
extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *data, uint32_t usec); |
extern ipc_callid_t ipc_wait_cycle(ipc_call_t *, uint32_t, int); |
extern ipc_callid_t ipc_wait_for_call_timeout(ipc_call_t *, uint32_t); |
static inline ipc_callid_t ipc_wait_for_call(ipc_call_t *data) |
{ |
return ipc_wait_for_call_timeout(data, SYNCH_NO_TIMEOUT); |
} |
extern ipc_callid_t ipc_trywait_for_call(ipc_call_t *data); |
extern ipc_callid_t ipc_trywait_for_call(ipc_call_t *); |
/* |
* User-friendly wrappers for ipc_answer_fast() and ipc_answer_slow(). |
209,10 → 206,10 |
#define ipc_answer_5(callid, retval, arg1, arg2, arg3, arg4, arg5) \ |
ipc_answer_slow((callid), (retval), (arg1), (arg2), (arg3), (arg4), (arg5)) |
extern ipcarg_t ipc_answer_fast(ipc_callid_t callid, ipcarg_t retval, |
ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4); |
extern ipcarg_t ipc_answer_slow(ipc_callid_t callid, ipcarg_t retval, |
ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5); |
extern ipcarg_t ipc_answer_fast(ipc_callid_t, ipcarg_t, ipcarg_t, ipcarg_t, |
ipcarg_t, ipcarg_t); |
extern ipcarg_t ipc_answer_slow(ipc_callid_t, ipcarg_t, ipcarg_t, ipcarg_t, |
ipcarg_t, ipcarg_t, ipcarg_t); |
/* |
* User-friendly wrappers for ipc_call_async_fast() and ipc_call_async_slow(). |
220,8 → 217,7 |
* arguments. The macros decide between the fast and the slow version according |
* to m. |
*/ |
#define ipc_call_async_0(phoneid, method, private, callback, \ |
can_preempt) \ |
#define ipc_call_async_0(phoneid, method, private, callback, can_preempt) \ |
ipc_call_async_fast((phoneid), (method), 0, 0, 0, 0, (private), \ |
(callback), (can_preempt)) |
#define ipc_call_async_1(phoneid, method, arg1, private, callback, \ |
245,23 → 241,24 |
ipc_call_async_slow((phoneid), (method), (arg1), (arg2), (arg3), \ |
(arg4), (arg5), (private), (callback), (can_preempt)) |
extern void ipc_call_async_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, void *private, |
ipc_async_callback_t callback, int can_preempt); |
extern void ipc_call_async_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, void *private, |
ipc_async_callback_t callback, int can_preempt); |
extern void ipc_call_async_fast(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t, |
ipcarg_t, void *, ipc_async_callback_t, int); |
extern void ipc_call_async_slow(int, ipcarg_t, ipcarg_t, ipcarg_t, ipcarg_t, |
ipcarg_t, ipcarg_t, void *, ipc_async_callback_t, int); |
extern int ipc_connect_to_me(int phoneid, int arg1, int arg2, int arg3, |
ipcarg_t *phone); |
extern int ipc_connect_me_to(int phoneid, int arg1, int arg2, int arg3); |
extern int ipc_hangup(int phoneid); |
extern int ipc_register_irq(int inr, int devno, int method, irq_code_t *code); |
extern int ipc_unregister_irq(int inr, int devno); |
extern int ipc_forward_fast(ipc_callid_t callid, int phoneid, int method, |
ipcarg_t arg1, ipcarg_t arg2, int mode); |
#define IPC_FLAG_BLOCKING 0x01 |
extern int ipc_connect_to_me(int, int, int, int, ipcarg_t *); |
extern int ipc_connect_me_to(int, int, int, int); |
extern int ipc_connect_me_to_blocking(int, int, int, int); |
extern int ipc_hangup(int); |
extern int ipc_register_irq(int, int, int, irq_code_t *); |
extern int ipc_unregister_irq(int, int); |
extern int ipc_forward_fast(ipc_callid_t, int, int, ipcarg_t, ipcarg_t, int); |
extern int ipc_forward_slow(ipc_callid_t, int, int, ipcarg_t, ipcarg_t, |
ipcarg_t, ipcarg_t, ipcarg_t, int); |
/* |
* User-friendly wrappers for ipc_share_in_start(). |
*/ |
274,24 → 271,22 |
#define ipc_share_in_start_1_1(phoneid, dst, size, arg, flags) \ |
ipc_share_in_start((phoneid), (dst), (size), (arg), (flags)) |
extern int ipc_share_in_start(int phoneid, void *dst, size_t size, ipcarg_t arg, |
int *flags); |
extern int ipc_share_in_receive(ipc_callid_t *callid, size_t *size); |
extern int ipc_share_in_finalize(ipc_callid_t callid, void *src, int flags); |
extern int ipc_share_out_start(int phoneid, void *src, int flags); |
extern int ipc_share_out_receive(ipc_callid_t *callid, size_t *size, int *flags); |
extern int ipc_share_out_finalize(ipc_callid_t callid, void *dst); |
extern int ipc_data_read_start(int phoneid, void *dst, size_t size); |
extern int ipc_data_read_receive(ipc_callid_t *callid, size_t *size); |
extern int ipc_data_read_finalize(ipc_callid_t callid, const void *src, |
size_t size); |
extern int ipc_data_write_start(int phoneid, const void *src, size_t size); |
extern int ipc_data_write_receive(ipc_callid_t *callid, size_t *size); |
extern int ipc_data_write_finalize(ipc_callid_t callid, void *dst, size_t size); |
extern int ipc_share_in_start(int, void *, size_t, ipcarg_t, int *); |
extern int ipc_share_in_receive(ipc_callid_t *, size_t *); |
extern int ipc_share_in_finalize(ipc_callid_t, void *, int ); |
extern int ipc_share_out_start(int, void *, int); |
extern int ipc_share_out_receive(ipc_callid_t *, size_t *, int *); |
extern int ipc_share_out_finalize(ipc_callid_t, void *); |
extern int ipc_data_read_start(int, void *, size_t); |
extern int ipc_data_read_receive(ipc_callid_t *, size_t *); |
extern int ipc_data_read_finalize(ipc_callid_t, const void *, size_t); |
extern int ipc_data_write_start(int, const void *, size_t); |
extern int ipc_data_write_receive(ipc_callid_t *, size_t *); |
extern int ipc_data_write_finalize(ipc_callid_t, void *, size_t); |
#include <task.h> |
extern int ipc_connect_kbox(task_id_t id); |
extern int ipc_connect_kbox(task_id_t); |
#endif |
//branches/tracing/uspace/lib/libc/include/ipc/console.h |
---|
0,0 → 1,58 |
/* |
* Copyright (c) 2006 Josef Cejka |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libcipc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef LIBC_IPC_CONSOLE_H_ |
#define LIBC_IPC_CONSOLE_H_ |
#include <ipc/ipc.h> |
typedef enum { |
CONSOLE_GETKEY = IPC_FIRST_USER_METHOD, |
CONSOLE_PUTCHAR, |
CONSOLE_WRITE, |
CONSOLE_CLEAR, |
CONSOLE_GOTO, |
CONSOLE_GETSIZE, |
CONSOLE_FLUSH, |
CONSOLE_SET_STYLE, |
CONSOLE_SET_COLOR, |
CONSOLE_SET_RGB_COLOR, |
CONSOLE_CURSOR_VISIBILITY, |
CONSOLE_KCON_ENABLE |
} console_request_t; |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/include/ipc/services.h |
---|
30,8 → 30,8 |
* @{ |
*/ |
/** |
* @file services.h |
* @brief List of all known services and their codes. |
* @file services.h |
* @brief List of all known services and their codes. |
*/ |
#ifndef LIBIPC_SERVICES_H_ |
38,12 → 38,15 |
#define LIBIPC_SERVICES_H_ |
typedef enum { |
SERVICE_PCI = 1, |
SERVICE_LOAD = 1, |
SERVICE_PCI, |
SERVICE_KEYBOARD, |
SERVICE_VIDEO, |
SERVICE_CONSOLE, |
SERVICE_VFS, |
SERVICE_DEVMAP |
SERVICE_DEVMAP, |
SERVICE_FHC, |
SERVICE_OBIO |
} services_t; |
/* Memory area to be received from NS */ |
//branches/tracing/uspace/lib/libc/include/ipc/fb.h |
---|
48,10 → 48,11 |
FB_VIEWPORT_CREATE, |
FB_VIEWPORT_DELETE, |
FB_SET_STYLE, |
FB_SET_COLOR, |
FB_SET_RGB_COLOR, |
FB_GET_RESOLUTION, |
FB_DRAW_TEXT_DATA, |
FB_FLUSH, |
FB_VIEWPORT_DB, |
FB_DRAW_PPM, |
FB_PREPARE_SHM, |
FB_DROP_SHM, |
59,7 → 60,6 |
FB_VP_DRAW_PIXMAP, |
FB_VP2PIXMAP, |
FB_DROP_PIXMAP, |
FB_TRANS_PUTCHAR, |
FB_ANIM_CREATE, |
FB_ANIM_DROP, |
FB_ANIM_ADDPIXMAP, |
66,10 → 66,11 |
FB_ANIM_CHGVP, |
FB_ANIM_START, |
FB_ANIM_STOP, |
FB_POINTER_MOVE |
FB_POINTER_MOVE, |
FB_SCREEN_YIELD, |
FB_SCREEN_RECLAIM |
} fb_request_t; |
#endif |
/** @} |
//branches/tracing/uspace/lib/libc/include/errno.h |
---|
35,6 → 35,10 |
#ifndef LIBC_ERRNO_H_ |
#define LIBC_ERRNO_H_ |
/* TODO: support threads/fibrils */ |
extern int _errno; |
#define errno _errno |
#include <kernel/errno.h> |
#define ENAMETOOLONG (-256) |
//branches/tracing/uspace/lib/libc/include/sys/types.h |
---|
37,11 → 37,15 |
#include <libarch/types.h> |
typedef unsigned long size_t; |
typedef signed long ssize_t; |
typedef long off_t; |
typedef int mode_t; |
typedef int32_t wchar_t; |
typedef volatile uint8_t ioport8_t; |
typedef volatile uint16_t ioport16_t; |
typedef volatile uint32_t ioport32_t; |
#endif |
/** @} |
//branches/tracing/uspace/lib/libc/Makefile.toolchain |
---|
26,16 → 26,26 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
DEFS = -DARCH=$(ARCH) |
CFLAGS = -fno-builtin -Wall -Werror-implicit-function-declaration -Wmissing-prototypes -O3 -nostdlib -nostdinc -I$(LIBC_PREFIX)/include -pipe |
CFLAGS = -fno-builtin -Wall -Werror-implicit-function-declaration \ |
-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32 -finput-charset=UTF-8 \ |
-Wmissing-prototypes -O3 -nostdlib -nostdinc -imacros \ |
$(LIBC_PREFIX)/../../../config.h -I$(LIBC_PREFIX)/include -pipe -g |
LFLAGS = -M -N $(SOFTINT_PREFIX)/libsoftint.a |
AFLAGS = |
#-Werror |
## Cross-toolchain prefix |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
## Setup platform configuration |
# |
include $(LIBC_PREFIX)/arch/$(ARCH)/Makefile.inc |
-include $(LIBC_PREFIX)/../../../Makefile.config |
-include $(LIBC_PREFIX)/../../../config.defs |
-include $(LIBC_PREFIX)/arch/$(UARCH)/Makefile.inc |
## Simple detection of the host system |
# |
59,6 → 69,7 |
AR = $(BINUTILS_PREFIX)ar |
OBJCOPY = $(BINUTILS_PREFIX)objcopy |
OBJDUMP = $(BINUTILS_PREFIX)objdump |
DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS) |
endif |
ifeq ($(COMPILER),icc_native) |
68,6 → 79,7 |
AR = ar |
OBJCOPY = objcopy |
OBJDUMP = objdump |
DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS) |
endif |
ifeq ($(COMPILER),gcc_cross) |
77,5 → 89,5 |
AR = $(TOOLCHAIN_DIR)/$(TARGET)-ar |
OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy |
OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump |
DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS) |
endif |
//branches/tracing/uspace/lib/libc/generic/kbd.c |
---|
0,0 → 1,62 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#include <stdio.h> |
#include <io/stream.h> |
#include <kbd/kbd.h> |
#include <ipc/ipc.h> |
#include <ipc/console.h> |
#include <console.h> |
#include <async.h> |
int kbd_get_event(kbd_event_t *ev) |
{ |
int cons_phone = console_open(true); |
ipcarg_t r0, r1, r2, r3; |
int rc; |
rc = async_req_0_4(cons_phone, CONSOLE_GETKEY, &r0, &r1, &r2, &r3); |
if (rc < 0) |
return -1; |
ev->type = r0; |
ev->key = r1; |
ev->mods = r2; |
ev->c = r3; |
return 0; |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/ddi.c |
---|
33,26 → 33,42 |
*/ |
#include <ddi.h> |
#include <libarch/ddi.h> |
#include <libc.h> |
#include <task.h> |
#include <as.h> |
#include <align.h> |
#include <libarch/config.h> |
#include <kernel/ddi/ddi_arg.h> |
/** Return unique device number. |
* |
* @return New unique device number. |
* |
*/ |
int device_assign_devno(void) |
{ |
return __SYSCALL0(SYS_DEVICE_ASSIGN_DEVNO); |
} |
/** Map piece of physical memory to task. |
* |
* Caller of this function must have the CAP_MEM_MANAGER capability. |
* |
* @param pf Physical address of the starting frame. |
* @param vp Virtual address of the sterting page. |
* @param pages Number of pages to map. |
* @param flags Flags for the new address space area. |
* @param pf Physical address of the starting frame. |
* @param vp Virtual address of the starting page. |
* @param pages Number of pages to map. |
* @param flags Flags for the new address space area. |
* |
* @return 0 on success, EPERM if the caller lacks the CAP_MEM_MANAGER capability, |
* ENOENT if there is no task with specified ID and ENOMEM if there |
* was some problem in creating address space area. |
* @return 0 on success, EPERM if the caller lacks the |
* CAP_MEM_MANAGER capability, ENOENT if there is no task |
* with specified ID and ENOMEM if there was some problem |
* in creating address space area. |
*/ |
int physmem_map(void *pf, void *vp, unsigned long pages, int flags) |
{ |
return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp, pages, flags); |
return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp, pages, |
flags); |
} |
/** Enable I/O space range to task. |
59,13 → 75,14 |
* |
* Caller of this function must have the IO_MEM_MANAGER capability. |
* |
* @param id Task ID. |
* @param ioaddr Starting address of the I/O range. |
* @param size Size of the range. |
* @param id Task ID. |
* @param ioaddr Starting address of the I/O range. |
* @param size Size of the range. |
* |
* @return 0 on success, EPERM if the caller lacks the CAP_IO_MANAGER capability, |
* ENOENT if there is no task with specified ID and ENOMEM if there |
* was some problem in allocating memory. |
* @return 0 on success, EPERM if the caller lacks the |
* CAP_IO_MANAGER capability, ENOENT if there is no task |
* with specified ID and ENOMEM if there was some problem |
* in allocating memory. |
*/ |
int iospace_enable(task_id_t id, void *ioaddr, unsigned long size) |
{ |
80,7 → 97,7 |
/** Interrupt control |
* |
* @param enable 1 - enable interrupts, 0 - disable interrupts |
* @param enable 1 - enable interrupts, 0 - disable interrupts |
*/ |
int preemption_control(int enable) |
{ |
87,5 → 104,36 |
return __SYSCALL1(SYS_PREEMPT_CONTROL, (sysarg_t) enable); |
} |
/** Enable PIO for specified I/O range. |
* |
* @param pio_addr I/O start address. |
* @param size Size of the I/O region. |
* @param use_addr Address where the final address for application's PIO |
* will be stored. |
* |
* @return Zero on success or negative error code. |
*/ |
int pio_enable(void *pio_addr, size_t size, void **use_addr) |
{ |
void *phys; |
void *virt; |
size_t offset; |
unsigned int pages; |
#ifdef IO_SPACE_BOUNDARY |
if (pio_addr < IO_SPACE_BOUNDARY) { |
*use_addr = pio_addr; |
return iospace_enable(task_get_id(), pio_addr, size); |
} |
#endif |
phys = ALIGN_DOWN((uintptr_t) pio_addr, PAGE_SIZE); |
offset = pio_addr - phys; |
pages = ALIGN_UP(offset + size, PAGE_SIZE) >> PAGE_WIDTH; |
virt = as_get_mappable_page(pages); |
*use_addr = virt + offset; |
return physmem_map(phys, virt, pages, AS_AREA_READ | AS_AREA_WRITE); |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/console.c |
---|
0,0 → 1,274 |
/* |
* Copyright (c) 2006 Josef Cejka |
* Copyright (c) 2006 Jakub Vana |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#include <libc.h> |
#include <async.h> |
#include <io/stream.h> |
#include <ipc/console.h> |
#include <ipc/services.h> |
#include <errno.h> |
#include <string.h> |
#include <console.h> |
static int console_phone = -1; |
/** Size of cbuffer. */ |
#define CBUFFER_SIZE 256 |
/** Buffer for writing characters to the console. */ |
static char cbuffer[CBUFFER_SIZE]; |
/** Pointer to end of cbuffer. */ |
static char *cbuffer_end = cbuffer + CBUFFER_SIZE; |
/** Pointer to first available field in cbuffer. */ |
static char *cbp = cbuffer; |
/** Write one character to the console via IPC. */ |
static void cons_putchar(wchar_t c) |
{ |
console_wait(); |
async_msg_1(console_phone, CONSOLE_PUTCHAR, c); |
} |
/** Write characters to the console via IPC or to klog */ |
static ssize_t cons_write(const char *buf, size_t size) |
{ |
console_open(false); |
if (console_phone >= 0) { |
async_serialize_start(); |
ipc_call_t answer; |
aid_t req = async_send_0(console_phone, CONSOLE_WRITE, &answer); |
ipcarg_t rc = ipc_data_write_start(console_phone, (void *) buf, size); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
return (ssize_t) rc; |
} |
async_wait_for(req, &rc); |
async_serialize_end(); |
if (rc == EOK) |
return (ssize_t) IPC_GET_ARG1(answer); |
else |
return -1; |
} else |
return __SYSCALL3(SYS_KLOG, 1, (sysarg_t) buf, size); |
} |
/** Write all data from output buffer to the console. */ |
static void cbuffer_flush(void) |
{ |
size_t len = cbp - cbuffer; |
while (len > 0) { |
ssize_t rc = cons_write(cbuffer, cbp - cbuffer); |
if (rc < 0) |
return; |
len -= rc; |
} |
cbp = cbuffer; |
} |
/** Drop all data in console output buffer. */ |
static void cbuffer_drain(void) |
{ |
cbp = cbuffer; |
} |
/** Write one character to the output buffer. */ |
static inline void cbuffer_putc(char c) |
{ |
if (cbp == cbuffer_end) |
cbuffer_flush(); |
*cbp++ = c; |
if (c == '\n') |
cbuffer_flush(); |
} |
int console_open(bool blocking) |
{ |
if (console_phone < 0) { |
int phone; |
if (blocking) |
phone = ipc_connect_me_to_blocking(PHONE_NS, |
SERVICE_CONSOLE, 0, 0); |
else |
phone = ipc_connect_me_to(PHONE_NS, |
SERVICE_CONSOLE, 0, 0); |
if (phone >= 0) |
console_phone = phone; |
} |
return console_phone; |
} |
void console_close(void) |
{ |
if (console_phone >= 0) { |
if (ipc_hangup(console_phone) == 0) |
console_phone = -1; |
} |
} |
void console_wait(void) |
{ |
while (console_phone < 0) |
console_open(true); |
} |
void console_clear(void) |
{ |
console_wait(); |
cbuffer_drain(); |
async_msg_0(console_phone, CONSOLE_CLEAR); |
} |
int console_get_size(int *rows, int *cols) |
{ |
console_wait(); |
ipcarg_t r; |
ipcarg_t c; |
int rc = async_req_0_2(console_phone, CONSOLE_GETSIZE, &r, &c); |
*rows = (int) r; |
*cols = (int) c; |
return rc; |
} |
void console_set_style(int style) |
{ |
console_wait(); |
cbuffer_flush(); |
async_msg_1(console_phone, CONSOLE_SET_STYLE, style); |
} |
void console_set_color(int fg_color, int bg_color, int flags) |
{ |
console_wait(); |
cbuffer_flush(); |
async_msg_3(console_phone, CONSOLE_SET_COLOR, fg_color, bg_color, flags); |
} |
void console_set_rgb_color(int fg_color, int bg_color) |
{ |
console_wait(); |
cbuffer_flush(); |
async_msg_2(console_phone, CONSOLE_SET_RGB_COLOR, fg_color, bg_color); |
} |
void console_cursor_visibility(int show) |
{ |
console_wait(); |
cbuffer_flush(); |
async_msg_1(console_phone, CONSOLE_CURSOR_VISIBILITY, show != 0); |
} |
void console_kcon_enable(void) |
{ |
console_wait(); |
cbuffer_flush(); |
async_msg_0(console_phone, CONSOLE_KCON_ENABLE); |
} |
void console_goto(int row, int col) |
{ |
console_wait(); |
cbuffer_flush(); |
async_msg_2(console_phone, CONSOLE_GOTO, row, col); |
} |
void console_putchar(wchar_t c) |
{ |
console_wait(); |
cbuffer_flush(); |
cons_putchar(c); |
} |
/** Write characters to the console. */ |
ssize_t console_write(const char *buf, size_t size) |
{ |
size_t left = size; |
while (left > 0) { |
cbuffer_putc(*buf++); |
left--; |
} |
return size; |
} |
/** Write a NULL-terminated string to the console. */ |
void console_putstr(const char *str) |
{ |
size_t left = str_size(str); |
while (left > 0) { |
ssize_t rc = console_write(str, left); |
if (rc < 0) { |
/* Error */ |
return; |
} |
str += rc; |
left -= rc; |
} |
} |
/** Flush all output to the console or klog. */ |
void console_flush(void) |
{ |
cbuffer_flush(); |
if (console_phone >= 0) |
async_msg_0(console_phone, CONSOLE_FLUSH); |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/task.c |
---|
38,6 → 38,7 |
#include <stdlib.h> |
#include <errno.h> |
#include <loader/loader.h> |
#include <string.h> |
task_id_t task_get_id(void) |
{ |
48,6 → 49,17 |
return task_id; |
} |
/** Set the task name. |
* |
* @param name The new name, typically the command used to execute the |
* program. |
* @return Zero on success or negative error code. |
*/ |
int task_set_name(const char *name) |
{ |
return __SYSCALL2(SYS_TASK_SET_NAME, (sysarg_t) name, str_size(name)); |
} |
/** Create a new task by running an executable from the filesystem. |
* |
* This is really just a convenience wrapper over the more complicated |
63,8 → 75,8 |
task_id_t task_id; |
int rc; |
/* Spawn a program loader. */ |
ldr = loader_spawn(path); |
/* Connect to a program loader. */ |
ldr = loader_connect(); |
if (ldr == NULL) |
return 0; |
89,7 → 101,6 |
goto error; |
/* Run it. */ |
/* Load the program. */ |
rc = loader_run(ldr); |
if (rc != EOK) |
goto error; |
//branches/tracing/uspace/lib/libc/generic/getopt.c |
---|
241,7 → 241,7 |
} |
} |
if ((optchar = (int)*place++) == (int)':' || |
(oli = strchr(options + (IGNORE_FIRST ? 1 : 0), optchar)) == NULL) { |
(oli = str_chr(options + (IGNORE_FIRST ? 1 : 0), optchar)) == NULL) { |
/* option letter unknown or ':' */ |
if (!*place) |
++optind; |
377,20 → 377,20 |
nonopt_start = nonopt_end = -1; |
return -1; |
} |
if ((has_equal = strchr(current_argv, '=')) != NULL) { |
if ((has_equal = str_chr(current_argv, '=')) != NULL) { |
/* argument found (--option=arg) */ |
current_argv_len = has_equal - current_argv; |
has_equal++; |
} else |
current_argv_len = strlen(current_argv); |
current_argv_len = str_size(current_argv); |
for (i = 0; long_options[i].name; i++) { |
/* find matching long option */ |
if (strncmp(current_argv, long_options[i].name, |
current_argv_len)) |
if (str_lcmp(current_argv, long_options[i].name, |
str_nlength(current_argv, current_argv_len))) |
continue; |
if (strlen(long_options[i].name) == |
if (str_size(long_options[i].name) == |
(unsigned)current_argv_len) { |
/* exact match */ |
match = i; |
//branches/tracing/uspace/lib/libc/generic/string.c |
---|
1,7 → 1,6 |
/* |
* Copyright (c) 2005 Martin Decky |
* Copyright (C) 1998 by Wes Peters <wes@softweyr.com> |
* Copyright (c) 1988, 1993 The Regents of the University of California. |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
35,180 → 34,665 |
*/ |
#include <string.h> |
#include <unistd.h> |
#include <stdlib.h> |
#include <assert.h> |
#include <limits.h> |
#include <ctype.h> |
#include <limits.h> |
#include <malloc.h> |
#include <errno.h> |
#include <align.h> |
#include <sys/types.h> |
#include <malloc.h> |
#include <mem.h> |
#include <string.h> |
/* Dummy implementation of mem/ functions */ |
/** Byte mask consisting of lowest @n bits (out of 8) */ |
#define LO_MASK_8(n) ((uint8_t) ((1 << (n)) - 1)) |
void *memset(void *s, int c, size_t n) |
/** Byte mask consisting of lowest @n bits (out of 32) */ |
#define LO_MASK_32(n) ((uint32_t) ((1 << (n)) - 1)) |
/** Byte mask consisting of highest @n bits (out of 8) */ |
#define HI_MASK_8(n) (~LO_MASK_8(8 - (n))) |
/** Number of data bits in a UTF-8 continuation byte */ |
#define CONT_BITS 6 |
/** Decode a single character from a string. |
* |
* Decode a single character from a string of size @a size. Decoding starts |
* at @a offset and this offset is moved to the beginning of the next |
* character. In case of decoding error, offset generally advances at least |
* by one. However, offset is never moved beyond size. |
* |
* @param str String (not necessarily NULL-terminated). |
* @param offset Byte offset in string where to start decoding. |
* @param size Size of the string (in bytes). |
* |
* @return Value of decoded character, U_SPECIAL on decoding error or |
* NULL if attempt to decode beyond @a size. |
* |
*/ |
wchar_t str_decode(const char *str, size_t *offset, size_t size) |
{ |
char *os = s; |
if (*offset + 1 > size) |
return 0; |
while (n--) |
*(os++) = c; |
/* First byte read from string */ |
uint8_t b0 = (uint8_t) str[(*offset)++]; |
return s; |
/* Determine code length */ |
unsigned int b0_bits; /* Data bits in first byte */ |
unsigned int cbytes; /* Number of continuation bytes */ |
if ((b0 & 0x80) == 0) { |
/* 0xxxxxxx (Plain ASCII) */ |
b0_bits = 7; |
cbytes = 0; |
} else if ((b0 & 0xe0) == 0xc0) { |
/* 110xxxxx 10xxxxxx */ |
b0_bits = 5; |
cbytes = 1; |
} else if ((b0 & 0xf0) == 0xe0) { |
/* 1110xxxx 10xxxxxx 10xxxxxx */ |
b0_bits = 4; |
cbytes = 2; |
} else if ((b0 & 0xf8) == 0xf0) { |
/* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ |
b0_bits = 3; |
cbytes = 3; |
} else { |
/* 10xxxxxx -- unexpected continuation byte */ |
return U_SPECIAL; |
} |
if (*offset + cbytes > size) |
return U_SPECIAL; |
wchar_t ch = b0 & LO_MASK_8(b0_bits); |
/* Decode continuation bytes */ |
while (cbytes > 0) { |
uint8_t b = (uint8_t) str[(*offset)++]; |
/* Must be 10xxxxxx */ |
if ((b & 0xc0) != 0x80) |
return U_SPECIAL; |
/* Shift data bits to ch */ |
ch = (ch << CONT_BITS) | (wchar_t) (b & LO_MASK_8(CONT_BITS)); |
cbytes--; |
} |
return ch; |
} |
struct along { |
unsigned long n; |
} __attribute__ ((packed)); |
/** Encode a single character to string representation. |
* |
* Encode a single character to string representation (i.e. UTF-8) and store |
* it into a buffer at @a offset. Encoding starts at @a offset and this offset |
* is moved to the position where the next character can be written to. |
* |
* @param ch Input character. |
* @param str Output buffer. |
* @param offset Byte offset where to start writing. |
* @param size Size of the output buffer (in bytes). |
* |
* @return EOK if the character was encoded successfully, EOVERFLOW if there |
* was not enough space in the output buffer or EINVAL if the character |
* code was invalid. |
*/ |
int chr_encode(const wchar_t ch, char *str, size_t *offset, size_t size) |
{ |
if (*offset >= size) |
return EOVERFLOW; |
if (!chr_check(ch)) |
return EINVAL; |
/* Unsigned version of ch (bit operations should only be done |
on unsigned types). */ |
uint32_t cc = (uint32_t) ch; |
/* Determine how many continuation bytes are needed */ |
unsigned int b0_bits; /* Data bits in first byte */ |
unsigned int cbytes; /* Number of continuation bytes */ |
if ((cc & ~LO_MASK_32(7)) == 0) { |
b0_bits = 7; |
cbytes = 0; |
} else if ((cc & ~LO_MASK_32(11)) == 0) { |
b0_bits = 5; |
cbytes = 1; |
} else if ((cc & ~LO_MASK_32(16)) == 0) { |
b0_bits = 4; |
cbytes = 2; |
} else if ((cc & ~LO_MASK_32(21)) == 0) { |
b0_bits = 3; |
cbytes = 3; |
} else { |
/* Codes longer than 21 bits are not supported */ |
return EINVAL; |
} |
/* Check for available space in buffer */ |
if (*offset + cbytes >= size) |
return EOVERFLOW; |
/* Encode continuation bytes */ |
unsigned int i; |
for (i = cbytes; i > 0; i--) { |
str[*offset + i] = 0x80 | (cc & LO_MASK_32(CONT_BITS)); |
cc = cc >> CONT_BITS; |
} |
/* Encode first byte */ |
str[*offset] = (cc & LO_MASK_32(b0_bits)) | HI_MASK_8(8 - b0_bits - 1); |
/* Advance offset */ |
*offset += cbytes + 1; |
return EOK; |
} |
static void *unaligned_memcpy(void *dst, const void *src, size_t n) |
/** Get size of string. |
* |
* Get the number of bytes which are used by the string @a str (excluding the |
* NULL-terminator). |
* |
* @param str String to consider. |
* |
* @return Number of bytes used by the string |
* |
*/ |
size_t str_size(const char *str) |
{ |
int i, j; |
struct along *adst = dst; |
const struct along *asrc = src; |
size_t size = 0; |
while (*str++ != 0) |
size++; |
return size; |
} |
for (i = 0; i < n / sizeof(unsigned long); i++) |
adst[i].n = asrc[i].n; |
/** Get size of wide string. |
* |
* Get the number of bytes which are used by the wide string @a str (excluding the |
* NULL-terminator). |
* |
* @param str Wide string to consider. |
* |
* @return Number of bytes used by the wide string |
* |
*/ |
size_t wstr_size(const wchar_t *str) |
{ |
return (wstr_length(str) * sizeof(wchar_t)); |
} |
/** Get size of string with length limit. |
* |
* Get the number of bytes which are used by up to @a max_len first |
* characters in the string @a str. If @a max_len is greater than |
* the length of @a str, the entire string is measured (excluding the |
* NULL-terminator). |
* |
* @param str String to consider. |
* @param max_len Maximum number of characters to measure. |
* |
* @return Number of bytes used by the characters. |
* |
*/ |
size_t str_lsize(const char *str, count_t max_len) |
{ |
count_t len = 0; |
size_t offset = 0; |
while (len < max_len) { |
if (str_decode(str, &offset, STR_NO_LIMIT) == 0) |
break; |
for (j = 0; j < n % sizeof(unsigned long); j++) |
((unsigned char *) (((unsigned long *) dst) + i))[j] = |
((unsigned char *) (((unsigned long *) src) + i))[j]; |
return (char *) dst; |
len++; |
} |
return offset; |
} |
void *memcpy(void *dst, const void *src, size_t n) |
/** Get size of wide string with length limit. |
* |
* Get the number of bytes which are used by up to @a max_len first |
* wide characters in the wide string @a str. If @a max_len is greater than |
* the length of @a str, the entire wide string is measured (excluding the |
* NULL-terminator). |
* |
* @param str Wide string to consider. |
* @param max_len Maximum number of wide characters to measure. |
* |
* @return Number of bytes used by the wide characters. |
* |
*/ |
size_t wstr_lsize(const wchar_t *str, count_t max_len) |
{ |
int i, j; |
return (wstr_nlength(str, max_len * sizeof(wchar_t)) * sizeof(wchar_t)); |
} |
if (((long) dst & (sizeof(long) - 1)) || |
((long) src & (sizeof(long) - 1))) |
return unaligned_memcpy(dst, src, n); |
/** Get number of characters in a string. |
* |
* @param str NULL-terminated string. |
* |
* @return Number of characters in string. |
* |
*/ |
count_t str_length(const char *str) |
{ |
count_t len = 0; |
size_t offset = 0; |
while (str_decode(str, &offset, STR_NO_LIMIT) != 0) |
len++; |
return len; |
} |
for (i = 0; i < n / sizeof(unsigned long); i++) |
((unsigned long *) dst)[i] = ((unsigned long *) src)[i]; |
for (j = 0; j < n % sizeof(unsigned long); j++) |
((unsigned char *) (((unsigned long *) dst) + i))[j] = |
((unsigned char *) (((unsigned long *) src) + i))[j]; |
return (char *) dst; |
/** Get number of characters in a wide string. |
* |
* @param str NULL-terminated wide string. |
* |
* @return Number of characters in @a str. |
* |
*/ |
count_t wstr_length(const wchar_t *wstr) |
{ |
count_t len = 0; |
while (*wstr++ != 0) |
len++; |
return len; |
} |
void *memmove(void *dst, const void *src, size_t n) |
/** Get number of characters in a string with size limit. |
* |
* @param str NULL-terminated string. |
* @param size Maximum number of bytes to consider. |
* |
* @return Number of characters in string. |
* |
*/ |
count_t str_nlength(const char *str, size_t size) |
{ |
int i, j; |
count_t len = 0; |
size_t offset = 0; |
if (src > dst) |
return memcpy(dst, src, n); |
while (str_decode(str, &offset, size) != 0) |
len++; |
return len; |
} |
for (j = (n % sizeof(unsigned long)) - 1; j >= 0; j--) |
((unsigned char *) ((unsigned long *) dst))[j] = |
((unsigned char *) ((unsigned long *) src))[j]; |
/** Get number of characters in a string with size limit. |
* |
* @param str NULL-terminated string. |
* @param size Maximum number of bytes to consider. |
* |
* @return Number of characters in string. |
* |
*/ |
count_t wstr_nlength(const wchar_t *str, size_t size) |
{ |
count_t len = 0; |
count_t limit = ALIGN_DOWN(size, sizeof(wchar_t)); |
count_t offset = 0; |
while ((offset < limit) && (*str++ != 0)) { |
len++; |
offset += sizeof(wchar_t); |
} |
return len; |
} |
for (i = n / sizeof(unsigned long) - 1; i >=0 ; i--) |
((unsigned long *) dst)[i] = ((unsigned long *) src)[i]; |
return (char *) dst; |
/** Check whether character is plain ASCII. |
* |
* @return True if character is plain ASCII. |
* |
*/ |
bool ascii_check(wchar_t ch) |
{ |
if ((ch >= 0) && (ch <= 127)) |
return true; |
return false; |
} |
/** Compare two memory areas. |
/** Check whether character is valid |
* |
* @param s1 Pointer to the first area to compare. |
* @param s2 Pointer to the second area to compare. |
* @param len Size of the first area in bytes. Both areas must have |
* the same length. |
* @return If len is 0, return zero. If the areas match, return |
* zero. Otherwise return non-zero. |
* @return True if character is a valid Unicode code point. |
* |
*/ |
int bcmp(const char *s1, const char *s2, size_t len) |
bool chr_check(wchar_t ch) |
{ |
for (; len && *s1++ == *s2++; len--) |
; |
return len; |
if ((ch >= 0) && (ch <= 1114111)) |
return true; |
return false; |
} |
/** Count the number of characters in the string, not including terminating 0. |
/** Compare two NULL terminated strings. |
* |
* @param str String. |
* @return Number of characters in string. |
* Do a char-by-char comparison of two NULL-terminated strings. |
* The strings are considered equal iff they consist of the same |
* characters on the minimum of their lengths. |
* |
* @param s1 First string to compare. |
* @param s2 Second string to compare. |
* |
* @return 0 if the strings are equal, -1 if first is smaller, |
* 1 if second smaller. |
* |
*/ |
size_t strlen(const char *str) |
int str_cmp(const char *s1, const char *s2) |
{ |
size_t counter = 0; |
wchar_t c1 = 0; |
wchar_t c2 = 0; |
size_t off1 = 0; |
size_t off2 = 0; |
while (str[counter] != 0) |
counter++; |
while (true) { |
c1 = str_decode(s1, &off1, STR_NO_LIMIT); |
c2 = str_decode(s2, &off2, STR_NO_LIMIT); |
return counter; |
if (c1 < c2) |
return -1; |
if (c1 > c2) |
return 1; |
if (c1 == 0 || c2 == 0) |
break; |
} |
return 0; |
} |
int strcmp(const char *a, const char *b) |
/** Compare two NULL terminated strings with length limit. |
* |
* Do a char-by-char comparison of two NULL-terminated strings. |
* The strings are considered equal iff they consist of the same |
* characters on the minimum of their lengths and the length limit. |
* |
* @param s1 First string to compare. |
* @param s2 Second string to compare. |
* @param max_len Maximum number of characters to consider. |
* |
* @return 0 if the strings are equal, -1 if first is smaller, |
* 1 if second smaller. |
* |
*/ |
int str_lcmp(const char *s1, const char *s2, count_t max_len) |
{ |
int c = 0; |
wchar_t c1 = 0; |
wchar_t c2 = 0; |
while (a[c] && b[c] && (!(a[c] - b[c]))) |
c++; |
size_t off1 = 0; |
size_t off2 = 0; |
return (a[c] - b[c]); |
count_t len = 0; |
while (true) { |
if (len >= max_len) |
break; |
c1 = str_decode(s1, &off1, STR_NO_LIMIT); |
c2 = str_decode(s2, &off2, STR_NO_LIMIT); |
if (c1 < c2) |
return -1; |
if (c1 > c2) |
return 1; |
if (c1 == 0 || c2 == 0) |
break; |
++len; |
} |
return 0; |
} |
int strncmp(const char *a, const char *b, size_t n) |
/** Copy string. |
* |
* Copy source string @a src to destination buffer @a dest. |
* No more than @a size bytes are written. If the size of the output buffer |
* is at least one byte, the output string will always be well-formed, i.e. |
* null-terminated and containing only complete characters. |
* |
* @param dst Destination buffer. |
* @param count Size of the destination buffer (must be > 0). |
* @param src Source string. |
*/ |
void str_cpy(char *dest, size_t size, const char *src) |
{ |
size_t c = 0; |
wchar_t ch; |
size_t src_off; |
size_t dest_off; |
while (c < n && a[c] && b[c] && (!(a[c] - b[c]))) |
c++; |
/* There must be space for a null terminator in the buffer. */ |
assert(size > 0); |
return ( c < n ? a[c] - b[c] : 0); |
src_off = 0; |
dest_off = 0; |
while ((ch = str_decode(src, &src_off, STR_NO_LIMIT)) != 0) { |
if (chr_encode(ch, dest, &dest_off, size - 1) != EOK) |
break; |
} |
dest[dest_off] = '\0'; |
} |
/** Copy size-limited substring. |
* |
* Copy prefix of string @a src of max. size @a size to destination buffer |
* @a dest. No more than @a size bytes are written. The output string will |
* always be well-formed, i.e. null-terminated and containing only complete |
* characters. |
* |
* No more than @a n bytes are read from the input string, so it does not |
* have to be null-terminated. |
* |
* @param dst Destination buffer. |
* @param count Size of the destination buffer (must be > 0). |
* @param src Source string. |
* @param n Maximum number of bytes to read from @a src. |
*/ |
void str_ncpy(char *dest, size_t size, const char *src, size_t n) |
{ |
wchar_t ch; |
size_t src_off; |
size_t dest_off; |
/* There must be space for a null terminator in the buffer. */ |
assert(size > 0); |
src_off = 0; |
dest_off = 0; |
while ((ch = str_decode(src, &src_off, n)) != 0) { |
if (chr_encode(ch, dest, &dest_off, size - 1) != EOK) |
break; |
} |
dest[dest_off] = '\0'; |
} |
int stricmp(const char *a, const char *b) |
/** Append one string to another. |
* |
* Append source string @a src to string in destination buffer @a dest. |
* Size of the destination buffer is @a dest. If the size of the output buffer |
* is at least one byte, the output string will always be well-formed, i.e. |
* null-terminated and containing only complete characters. |
* |
* @param dst Destination buffer. |
* @param count Size of the destination buffer. |
* @param src Source string. |
*/ |
void str_append(char *dest, size_t size, const char *src) |
{ |
int c = 0; |
size_t dstr_size; |
dstr_size = str_size(dest); |
str_cpy(dest + dstr_size, size - dstr_size, src); |
} |
/** Copy NULL-terminated wide string to string |
* |
* Copy source wide string @a src to destination buffer @a dst. |
* No more than @a size bytes are written. NULL-terminator is always |
* written after the last succesfully copied character (i.e. if the |
* destination buffer is has at least 1 byte, it will be always |
* NULL-terminated). |
* |
* @param src Source wide string. |
* @param dst Destination buffer. |
* @param count Size of the destination buffer. |
* |
*/ |
void wstr_nstr(char *dst, const wchar_t *src, size_t size) |
{ |
/* No space for the NULL-terminator in the buffer */ |
if (size == 0) |
return; |
while (a[c] && b[c] && (!(tolower(a[c]) - tolower(b[c])))) |
c++; |
wchar_t ch; |
count_t src_idx = 0; |
size_t dst_off = 0; |
return (tolower(a[c]) - tolower(b[c])); |
while ((ch = src[src_idx++]) != 0) { |
if (chr_encode(ch, dst, &dst_off, size) != EOK) |
break; |
} |
if (dst_off >= size) |
dst[size - 1] = 0; |
else |
dst[dst_off] = 0; |
} |
/** Return pointer to the first occurence of character c in string. |
/** Find first occurence of character in string. |
* |
* @param str Scanned string. |
* @param c Searched character (taken as one byte). |
* @return Pointer to the matched character or NULL if it is not |
* found in given string. |
* @param str String to search. |
* @param ch Character to look for. |
* |
* @return Pointer to character in @a str or NULL if not found. |
*/ |
char *strchr(const char *str, int c) |
const char *str_chr(const char *str, wchar_t ch) |
{ |
while (*str != '\0') { |
if (*str == (char) c) |
return (char *) str; |
str++; |
wchar_t acc; |
size_t off = 0; |
size_t last = 0; |
while ((acc = str_decode(str, &off, STR_NO_LIMIT)) != 0) { |
if (acc == ch) |
return (str + last); |
last = off; |
} |
return NULL; |
} |
/** Return pointer to the last occurence of character c in string. |
/** Find last occurence of character in string. |
* |
* @param str Scanned string. |
* @param c Searched character (taken as one byte). |
* @return Pointer to the matched character or NULL if it is not |
* found in given string. |
* @param str String to search. |
* @param ch Character to look for. |
* |
* @return Pointer to character in @a str or NULL if not found. |
*/ |
char *strrchr(const char *str, int c) |
const char *str_rchr(const char *str, wchar_t ch) |
{ |
char *retval = NULL; |
while (*str != '\0') { |
if (*str == (char) c) |
retval = (char *) str; |
str++; |
wchar_t acc; |
size_t off = 0; |
size_t last = 0; |
char *res = NULL; |
while ((acc = str_decode(str, &off, STR_NO_LIMIT)) != 0) { |
if (acc == ch) |
res = (str + last); |
last = off; |
} |
return res; |
} |
return (char *) retval; |
/** Insert a wide character into a wide string. |
* |
* Insert a wide character into a wide string at position |
* @a pos. The characters after the position are shifted. |
* |
* @param str String to insert to. |
* @param ch Character to insert to. |
* @param pos Character index where to insert. |
@ @param max_pos Characters in the buffer. |
* |
* @return True if the insertion was sucessful, false if the position |
* is out of bounds. |
* |
*/ |
bool wstr_linsert(wchar_t *str, wchar_t ch, count_t pos, count_t max_pos) |
{ |
count_t len = wstr_length(str); |
if ((pos > len) || (pos + 1 > max_pos)) |
return false; |
count_t i; |
for (i = len; i + 1 > pos; i--) |
str[i + 1] = str[i]; |
str[pos] = ch; |
return true; |
} |
/** Remove a wide character from a wide string. |
* |
* Remove a wide character from a wide string at position |
* @a pos. The characters after the position are shifted. |
* |
* @param str String to remove from. |
* @param pos Character index to remove. |
* |
* @return True if the removal was sucessful, false if the position |
* is out of bounds. |
* |
*/ |
bool wstr_remove(wchar_t *str, count_t pos) |
{ |
count_t len = wstr_length(str); |
if (pos >= len) |
return false; |
count_t i; |
for (i = pos + 1; i <= len; i++) |
str[i - 1] = str[i]; |
return true; |
} |
int stricmp(const char *a, const char *b) |
{ |
int c = 0; |
while (a[c] && b[c] && (!(tolower(a[c]) - tolower(b[c])))) |
c++; |
return (tolower(a[c]) - tolower(b[c])); |
} |
/** Convert string to a number. |
* Core of strtol and strtoul functions. |
* |
358,91 → 842,47 |
return (sgn ? -number : number); |
} |
char *strcpy(char *dest, const char *src) |
char *str_dup(const char *src) |
{ |
char *orig = dest; |
while ((*(dest++) = *(src++))) |
; |
return orig; |
} |
size_t size = str_size(src); |
void *dest = malloc(size + 1); |
char *strncpy(char *dest, const char *src, size_t n) |
{ |
char *orig = dest; |
while ((*(dest++) = *(src++)) && --n) |
; |
return orig; |
} |
if (dest == NULL) |
return (char *) NULL; |
char *strcat(char *dest, const char *src) |
{ |
char *orig = dest; |
while (*dest++) |
; |
--dest; |
while ((*dest++ = *src++)) |
; |
return orig; |
return (char *) memcpy(dest, src, size + 1); |
} |
char * strdup(const char *s1) |
char *strtok(char *s, const char *delim) |
{ |
size_t len = strlen(s1) + 1; |
void *ret = malloc(len); |
static char *next; |
if (ret == NULL) |
return (char *) NULL; |
return (char *) memcpy(ret, s1, len); |
return strtok_r(s, delim, &next); |
} |
/* Ported from FBSD strtok.c 8.1 (Berkeley) 6/4/93 */ |
char * strtok_r(char *s, const char *delim, char **last) |
char *strtok_r(char *s, const char *delim, char **next) |
{ |
char *spanp, *tok; |
int c, sc; |
char *start, *end; |
if (s == NULL && (s = *last) == NULL) |
return (NULL); |
if (s == NULL) |
s = *next; |
cont: |
c = *s++; |
for (spanp = (char *)delim; (sc = *spanp++) != 0;) { |
if (c == sc) |
goto cont; |
} |
/* Skip over leading delimiters. */ |
while (*s && (str_chr(delim, *s) != NULL)) ++s; |
start = s; |
if (c == 0) { /* no non-delimiter characters */ |
*last = NULL; |
return (NULL); |
} |
/* Skip over token characters. */ |
while (*s && (str_chr(delim, *s) == NULL)) ++s; |
end = s; |
*next = (*s ? s + 1 : s); |
tok = s - 1; |
for (;;) { |
c = *s++; |
spanp = (char *)delim; |
do { |
if ((sc = *spanp++) == c) { |
if (c == 0) |
s = NULL; |
else |
s[-1] = '\0'; |
*last = s; |
return (tok); |
} |
} while (sc != 0); |
if (start == end) { |
return NULL; /* No more tokens. */ |
} |
} |
/* Ported from FBSD strtok.c 8.1 (Berkeley) 6/4/93 */ |
char * strtok(char *s, const char *delim) |
{ |
static char *last; |
return (strtok_r(s, delim, &last)); |
/* Overwrite delimiter with NULL terminator. */ |
*end = '\0'; |
return start; |
} |
/** @} |
//branches/tracing/uspace/lib/libc/generic/loader.c |
---|
34,6 → 34,7 |
#include <ipc/ipc.h> |
#include <ipc/loader.h> |
#include <ipc/services.h> |
#include <libc.h> |
#include <task.h> |
#include <string.h> |
50,33 → 51,27 |
* @return Pointer to the loader connection structure (should be |
* de-allocated using free() after use). |
*/ |
loader_t *loader_spawn(char *name) |
int loader_spawn(const char *name) |
{ |
int phone_id, rc; |
return __SYSCALL2(SYS_PROGRAM_SPAWN_LOADER, |
(sysarg_t) name, str_size(name)); |
} |
loader_t *loader_connect(void) |
{ |
loader_t *ldr; |
int phone_id; |
/* |
* Ask kernel to spawn a new loader task. |
*/ |
rc = __SYSCALL3(SYS_PROGRAM_SPAWN_LOADER, (sysarg_t) &phone_id, |
(sysarg_t) name, strlen(name)); |
if (rc != 0) |
phone_id = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_LOAD, 0, 0); |
if (phone_id < 0) |
return NULL; |
/* |
* Say hello so that the loader knows the incoming connection's |
* phone hash. |
*/ |
rc = async_req_0_0(phone_id, LOADER_HELLO); |
if (rc != EOK) |
return NULL; |
ldr = malloc(sizeof(loader_t)); |
if (ldr == NULL) |
return NULL; |
ldr->phone_id = phone_id; |
return ldr; |
return ldr; |
} |
/** Get ID of the new task. |
173,7 → 168,7 |
ap = argv; |
buffer_size = 0; |
while (*ap != NULL) { |
buffer_size += strlen(*ap) + 1; |
buffer_size += str_size(*ap) + 1; |
++ap; |
} |
183,9 → 178,10 |
/* Now fill the buffer with null-terminated argument strings */ |
ap = argv; |
dp = arg_buf; |
while (*ap != NULL) { |
strcpy(dp, *ap); |
dp += strlen(*ap) + 1; |
str_cpy(dp, buffer_size - (dp - arg_buf), *ap); |
dp += str_size(*ap) + 1; |
++ap; |
} |
247,6 → 243,8 |
if (rc != EOK) |
return rc; |
ipc_hangup(ldr->phone_id); |
ldr->phone_id = 0; |
return EOK; |
} |
//branches/tracing/uspace/lib/libc/generic/thread.c |
---|
109,7 → 109,7 |
uarg->uspace_uarg = uarg; |
rc = __SYSCALL4(SYS_THREAD_CREATE, (sysarg_t) uarg, (sysarg_t) name, |
(sysarg_t) strlen(name), (sysarg_t) tid); |
(sysarg_t) str_size(name), (sysarg_t) tid); |
if (rc) { |
/* |
130,6 → 130,8 |
void thread_exit(int status) |
{ |
__SYSCALL1(SYS_THREAD_EXIT, (sysarg_t) status); |
for (;;) |
; |
} |
/** Detach thread. |
152,6 → 154,7 |
*/ |
int thread_join(thread_id_t thread) |
{ |
return 0; |
} |
/** Get current thread ID. |
//branches/tracing/uspace/lib/libc/generic/libc.c |
---|
48,11 → 48,14 |
#include <ipc/ipc.h> |
#include <async.h> |
#include <as.h> |
#include <console.h> |
#include <loader/pcb.h> |
extern char _heap; |
extern int main(int argc, char *argv[]); |
int _errno; |
void _exit(int status) |
{ |
thread_exit(status); |
69,8 → 72,6 |
f = fibril_setup(); |
__tcb_set(f->tcb); |
open_console(); |
/* Save the PCB pointer */ |
__pcb = (pcb_t *)pcb_ptr; |
83,6 → 84,7 |
} |
main(argc, argv); |
console_flush(); |
} |
void __exit(void) |
//branches/tracing/uspace/lib/libc/generic/ipc.c |
---|
598,7 → 598,7 |
ipcarg_t newphid; |
int res; |
res = ipc_call_sync_3_5(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3, |
res = ipc_call_sync_3_5(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3, |
NULL, NULL, NULL, NULL, &newphid); |
if (res) |
return res; |
605,6 → 605,30 |
return newphid; |
} |
/** Ask through phone for a new connection to some service. |
* |
* If the connection is not available at the moment, the |
* call will block. |
* |
* @param phoneid Phone handle used for contacting the other side. |
* @param arg1 User defined argument. |
* @param arg2 User defined argument. |
* @param arg3 User defined argument. |
* |
* @return New phone handle on success or a negative error code. |
*/ |
int ipc_connect_me_to_blocking(int phoneid, int arg1, int arg2, int arg3) |
{ |
ipcarg_t newphid; |
int res; |
res = ipc_call_sync_4_5(phoneid, IPC_M_CONNECT_ME_TO, arg1, arg2, arg3, |
IPC_FLAG_BLOCKING, NULL, NULL, NULL, NULL, &newphid); |
if (res) |
return res; |
return newphid; |
} |
/** Hang up a phone. |
* |
* @param phoneid Handle of the phone to be hung up. |
666,6 → 690,23 |
arg2, mode); |
} |
int ipc_forward_slow(ipc_callid_t callid, int phoneid, int method, |
ipcarg_t arg1, ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, |
int mode) |
{ |
ipc_call_t data; |
IPC_SET_METHOD(data, method); |
IPC_SET_ARG1(data, arg1); |
IPC_SET_ARG2(data, arg2); |
IPC_SET_ARG3(data, arg3); |
IPC_SET_ARG4(data, arg4); |
IPC_SET_ARG5(data, arg5); |
return __SYSCALL3(SYS_IPC_FORWARD_SLOW, callid, (sysarg_t) &data, mode); |
} |
/** Wrapper for making IPC_M_SHARE_IN calls. |
* |
* @param phoneid Phone that will be used to contact the receiving side. |
//branches/tracing/uspace/lib/libc/generic/async.c |
---|
30,64 → 30,65 |
* @{ |
*/ |
/** @file |
*/ |
*/ |
/** |
* Asynchronous library |
* |
* The aim of this library is facilitating writing programs utilizing the |
* asynchronous nature of HelenOS IPC, yet using a normal way of programming. |
* The aim of this library is to provide a facility for writing programs which |
* utilize the asynchronous nature of HelenOS IPC, yet using a normal way of |
* programming. |
* |
* You should be able to write very simple multithreaded programs, the async |
* framework will automatically take care of most synchronization problems. |
* |
* Default semantics: |
* - async_send_*(): send asynchronously. If the kernel refuses to send |
* more messages, [ try to get responses from kernel, if |
* nothing found, might try synchronous ] |
* - async_send_*(): Send asynchronously. If the kernel refuses to send |
* more messages, [ try to get responses from kernel, if |
* nothing found, might try synchronous ] |
* |
* Example of use (pseudo C): |
* |
* |
* 1) Multithreaded client application |
* |
* fibril_create(fibril1, ...); |
* fibril_create(fibril2, ...); |
* ... |
* |
* int fibril1(void *arg) |
* { |
* conn = ipc_connect_me_to(); |
* c1 = async_send(conn); |
* c2 = async_send(conn); |
* async_wait_for(c1); |
* async_wait_for(c2); |
* ... |
* } |
* fibril_create(fibril1, ...); |
* fibril_create(fibril2, ...); |
* ... |
* |
* int fibril1(void *arg) |
* { |
* conn = ipc_connect_me_to(); |
* c1 = async_send(conn); |
* c2 = async_send(conn); |
* async_wait_for(c1); |
* async_wait_for(c2); |
* ... |
* } |
* |
* |
* 2) Multithreaded server application |
* main() |
* { |
* async_manager(); |
* } |
* |
* |
* my_client_connection(icallid, *icall) |
* { |
* if (want_refuse) { |
* ipc_answer_0(icallid, ELIMIT); |
* return; |
* } |
* ipc_answer_0(icallid, EOK); |
* main() |
* { |
* async_manager(); |
* } |
* |
* callid = async_get_call(&call); |
* handle_call(callid, call); |
* ipc_answer_2(callid, 1, 2, 3); |
* my_client_connection(icallid, *icall) |
* { |
* if (want_refuse) { |
* ipc_answer_0(icallid, ELIMIT); |
* return; |
* } |
* ipc_answer_0(icallid, EOK); |
* |
* callid = async_get_call(&call); |
* .... |
* } |
* callid = async_get_call(&call); |
* handle_call(callid, call); |
* ipc_answer_2(callid, 1, 2, 3); |
* |
* callid = async_get_call(&call); |
* ... |
* } |
* |
*/ |
#include <futex.h> |
104,24 → 105,26 |
#include <bool.h> |
atomic_t async_futex = FUTEX_INITIALIZER; |
static hash_table_t conn_hash_table; |
static LIST_INITIALIZE(timeout_list); |
/** Structures of this type represent a waiting fibril. */ |
typedef struct { |
/** Expiration time. */ |
struct timeval expires; |
struct timeval expires; |
/** If true, this struct is in the timeout list. */ |
int inlist; |
bool inlist; |
/** Timeout list link. */ |
link_t link; |
/** Identification of and link to the waiting fibril. */ |
fid_t fid; |
/** If true, this fibril is currently active. */ |
int active; |
bool active; |
/** If true, we have timed out. */ |
int timedout; |
bool timedout; |
} awaiter_t; |
typedef struct { |
128,10 → 131,11 |
awaiter_t wdata; |
/** If reply was received. */ |
int done; |
bool done; |
/** Pointer to where the answer data is stored. */ |
ipc_call_t *dataptr; |
ipc_call_t *dataptr; |
ipcarg_t retval; |
} amsg_t; |
147,24 → 151,24 |
typedef struct { |
awaiter_t wdata; |
/** Hash table link. */ |
link_t link; |
/** Incoming phone hash. */ |
ipcarg_t in_phone_hash; |
ipcarg_t in_phone_hash; |
/** Messages that should be delivered to this fibril. */ |
link_t msg_queue; |
link_t msg_queue; |
/** Identification of the opening call. */ |
ipc_callid_t callid; |
/** Call data of the opening call. */ |
ipc_call_t call; |
/** Identification of the closing call. */ |
ipc_callid_t close_callid; |
/** Fibril function that will be used to handle the connection. */ |
void (*cfibril)(ipc_callid_t, ipc_call_t *); |
} connection_t; |
172,12 → 176,6 |
/** Identifier of the incoming connection handled by the current fibril. */ |
__thread connection_t *FIBRIL_connection; |
/** |
* If true, it is forbidden to use async_req functions and all preemption is |
* disabled. |
*/ |
__thread int _in_interrupt_handler; |
static void default_client_connection(ipc_callid_t callid, ipc_call_t *call); |
static void default_interrupt_received(ipc_callid_t callid, ipc_call_t *call); |
185,6 → 183,7 |
* Pointer to a fibril function that will be used to handle connections. |
*/ |
static async_client_conn_t client_connection = default_client_connection; |
/** |
* Pointer to a fibril function that will be used to handle interrupt |
* notifications. |
191,46 → 190,39 |
*/ |
static async_client_conn_t interrupt_received = default_interrupt_received; |
/* |
* Getter for _in_interrupt_handler. We need to export the value of this thread |
* local variable to other modules, but the binutils 2.18 linkers die on an |
* attempt to export this symbol in the header file. For now, consider this as a |
* workaround. |
*/ |
bool in_interrupt_handler(void) |
{ |
return _in_interrupt_handler; |
} |
#define CONN_HASH_TABLE_CHAINS 32 |
static hash_table_t conn_hash_table; |
static LIST_INITIALIZE(timeout_list); |
#define CONN_HASH_TABLE_CHAINS 32 |
/** Compute hash into the connection hash table based on the source phone hash. |
* |
* @param key Pointer to source phone hash. |
* @param key Pointer to source phone hash. |
* |
* @return Index into the connection hash table. |
* @return Index into the connection hash table. |
* |
*/ |
static hash_index_t conn_hash(unsigned long *key) |
{ |
assert(key); |
return ((*key) >> 4) % CONN_HASH_TABLE_CHAINS; |
return (((*key) >> 4) % CONN_HASH_TABLE_CHAINS); |
} |
/** Compare hash table item with a key. |
* |
* @param key Array containing the source phone hash as the only item. |
* @param keys Expected 1 but ignored. |
* @param item Connection hash table item. |
* @param key Array containing the source phone hash as the only item. |
* @param keys Expected 1 but ignored. |
* @param item Connection hash table item. |
* |
* @return True on match, false otherwise. |
* @return True on match, false otherwise. |
* |
*/ |
static int conn_compare(unsigned long key[], hash_count_t keys, link_t *item) |
{ |
connection_t *hs; |
hs = hash_table_get_instance(item, connection_t, link); |
return key[0] == hs->in_phone_hash; |
connection_t *hs = hash_table_get_instance(item, connection_t, link); |
return (key[0] == hs->in_phone_hash); |
} |
/** Connection hash table removal callback function. |
238,7 → 230,8 |
* This function is called whenever a connection is removed from the connection |
* hash table. |
* |
* @param item Connection hash table item being removed. |
* @param item Connection hash table item being removed. |
* |
*/ |
static void conn_remove(link_t *item) |
{ |
255,23 → 248,24 |
/** Sort in current fibril's timeout request. |
* |
* @param wd Wait data of the current fibril. |
* @param wd Wait data of the current fibril. |
* |
*/ |
static void insert_timeout(awaiter_t *wd) |
{ |
link_t *tmp; |
awaiter_t *cur; |
wd->timedout = 0; |
wd->inlist = 1; |
tmp = timeout_list.next; |
wd->timedout = false; |
wd->inlist = true; |
link_t *tmp = timeout_list.next; |
while (tmp != &timeout_list) { |
cur = list_get_instance(tmp, awaiter_t, link); |
awaiter_t *cur = list_get_instance(tmp, awaiter_t, link); |
if (tv_gteq(&cur->expires, &wd->expires)) |
break; |
tmp = tmp->next; |
} |
list_append(&wd->link, tmp); |
} |
281,93 → 275,146 |
* its message queue. If the fibril was not active, it is activated and all |
* timeouts are unregistered. |
* |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* |
* @return Zero if the call doesn't match any connection. |
* One if the call was passed to the respective connection |
* fibril. |
* @return False if the call doesn't match any connection. |
* True if the call was passed to the respective connection fibril. |
* |
*/ |
static int route_call(ipc_callid_t callid, ipc_call_t *call) |
static bool route_call(ipc_callid_t callid, ipc_call_t *call) |
{ |
connection_t *conn; |
msg_t *msg; |
link_t *hlp; |
unsigned long key; |
futex_down(&async_futex); |
key = call->in_phone_hash; |
hlp = hash_table_find(&conn_hash_table, &key); |
unsigned long key = call->in_phone_hash; |
link_t *hlp = hash_table_find(&conn_hash_table, &key); |
if (!hlp) { |
futex_up(&async_futex); |
return 0; |
return false; |
} |
conn = hash_table_get_instance(hlp, connection_t, link); |
msg = malloc(sizeof(*msg)); |
connection_t *conn = hash_table_get_instance(hlp, connection_t, link); |
msg_t *msg = malloc(sizeof(*msg)); |
if (!msg) { |
futex_up(&async_futex); |
return false; |
} |
msg->callid = callid; |
msg->call = *call; |
list_append(&msg->link, &conn->msg_queue); |
if (IPC_GET_METHOD(*call) == IPC_M_PHONE_HUNGUP) |
conn->close_callid = callid; |
/* If the connection fibril is waiting for an event, activate it */ |
if (!conn->wdata.active) { |
/* If in timeout list, remove it */ |
if (conn->wdata.inlist) { |
conn->wdata.inlist = 0; |
conn->wdata.inlist = false; |
list_remove(&conn->wdata.link); |
} |
conn->wdata.active = 1; |
conn->wdata.active = true; |
fibril_add_ready(conn->wdata.fid); |
} |
futex_up(&async_futex); |
return true; |
} |
return 1; |
/** Notification fibril. |
* |
* When a notification arrives, a fibril with this implementing function is |
* created. It calls interrupt_received() and does the final cleanup. |
* |
* @param arg Message structure pointer. |
* |
* @return Always zero. |
* |
*/ |
static int notification_fibril(void *arg) |
{ |
msg_t *msg = (msg_t *) arg; |
interrupt_received(msg->callid, &msg->call); |
free(msg); |
return 0; |
} |
/** Process interrupt notification. |
* |
* A new fibril is created which would process the notification. |
* |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* |
* @return False if an error occured. |
* True if the call was passed to the notification fibril. |
* |
*/ |
static bool process_notification(ipc_callid_t callid, ipc_call_t *call) |
{ |
futex_down(&async_futex); |
msg_t *msg = malloc(sizeof(*msg)); |
if (!msg) { |
futex_up(&async_futex); |
return false; |
} |
msg->callid = callid; |
msg->call = *call; |
fid_t fid = fibril_create(notification_fibril, msg); |
fibril_add_ready(fid); |
futex_up(&async_futex); |
return true; |
} |
/** Return new incoming message for the current (fibril-local) connection. |
* |
* @param call Storage where the incoming call data will be stored. |
* @param usecs Timeout in microseconds. Zero denotes no timeout. |
* @param call Storage where the incoming call data will be stored. |
* @param usecs Timeout in microseconds. Zero denotes no timeout. |
* |
* @return If no timeout was specified, then a hash of the |
* incoming call is returned. If a timeout is specified, |
* then a hash of the incoming call is returned unless |
* the timeout expires prior to receiving a message. In |
* that case zero is returned. |
* @return If no timeout was specified, then a hash of the |
* incoming call is returned. If a timeout is specified, |
* then a hash of the incoming call is returned unless |
* the timeout expires prior to receiving a message. In |
* that case zero is returned. |
* |
*/ |
ipc_callid_t async_get_call_timeout(ipc_call_t *call, suseconds_t usecs) |
{ |
msg_t *msg; |
ipc_callid_t callid; |
connection_t *conn; |
assert(FIBRIL_connection); |
assert(FIBRIL_connection); |
/* GCC 4.1.0 coughs on FIBRIL_connection-> dereference, |
/* Why doing this? |
* GCC 4.1.0 coughs on FIBRIL_connection-> dereference. |
* GCC 4.1.1 happilly puts the rdhwr instruction in delay slot. |
* I would never expect to find so many errors in |
* a compiler *($&$(*&$ |
* I would never expect to find so many errors in |
* a compiler. |
*/ |
conn = FIBRIL_connection; |
connection_t *conn = FIBRIL_connection; |
futex_down(&async_futex); |
if (usecs) { |
gettimeofday(&conn->wdata.expires, NULL); |
tv_add(&conn->wdata.expires, usecs); |
} else { |
conn->wdata.inlist = 0; |
} |
} else |
conn->wdata.inlist = false; |
/* If nothing in queue, wait until something arrives */ |
while (list_empty(&conn->msg_queue)) { |
if (usecs) |
insert_timeout(&conn->wdata); |
conn->wdata.active = 0; |
conn->wdata.active = false; |
/* |
* Note: the current fibril will be rescheduled either due to a |
* timeout or due to an arriving message destined to it. In the |
375,13 → 422,14 |
* case, route_call() will perform the wakeup. |
*/ |
fibril_switch(FIBRIL_TO_MANAGER); |
/* |
* Futex is up after getting back from async_manager get it |
* again. |
* Futex is up after getting back from async_manager. |
* Get it again. |
*/ |
futex_down(&async_futex); |
if (usecs && conn->wdata.timedout && |
list_empty(&conn->msg_queue)) { |
if ((usecs) && (conn->wdata.timedout) |
&& (list_empty(&conn->msg_queue))) { |
/* If we timed out -> exit */ |
futex_up(&async_futex); |
return 0; |
388,9 → 436,10 |
} |
} |
msg = list_get_instance(conn->msg_queue.next, msg_t, link); |
msg_t *msg = list_get_instance(conn->msg_queue.next, msg_t, link); |
list_remove(&msg->link); |
callid = msg->callid; |
ipc_callid_t callid = msg->callid; |
*call = msg->call; |
free(msg); |
402,8 → 451,9 |
* |
* This function is defined as a weak symbol - to be redefined in user code. |
* |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* |
*/ |
static void default_client_connection(ipc_callid_t callid, ipc_call_t *call) |
{ |
412,8 → 462,11 |
/** Default fibril function that gets called to handle interrupt notifications. |
* |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* This function is defined as a weak symbol - to be redefined in user code. |
* |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* |
*/ |
static void default_interrupt_received(ipc_callid_t callid, ipc_call_t *call) |
{ |
424,17 → 477,17 |
* When a new connection arrives, a fibril with this implementing function is |
* created. It calls client_connection() and does the final cleanup. |
* |
* @param arg Connection structure pointer. |
* @param arg Connection structure pointer. |
* |
* @return Always zero. |
* @return Always zero. |
* |
*/ |
static int connection_fibril(void *arg) |
static int connection_fibril(void *arg) |
{ |
unsigned long key; |
msg_t *msg; |
int close_answered = 0; |
/* Setup fibril-local connection pointer */ |
/* |
* Setup fibril-local connection pointer and call client_connection(). |
* |
*/ |
FIBRIL_connection = (connection_t *) arg; |
FIBRIL_connection->cfibril(FIBRIL_connection->callid, |
&FIBRIL_connection->call); |
441,20 → 494,20 |
/* Remove myself from the connection hash table */ |
futex_down(&async_futex); |
key = FIBRIL_connection->in_phone_hash; |
unsigned long key = FIBRIL_connection->in_phone_hash; |
hash_table_remove(&conn_hash_table, &key, 1); |
futex_up(&async_futex); |
/* Answer all remaining messages with EHANGUP */ |
while (!list_empty(&FIBRIL_connection->msg_queue)) { |
msg = list_get_instance(FIBRIL_connection->msg_queue.next, |
msg_t, link); |
msg_t *msg |
= list_get_instance(FIBRIL_connection->msg_queue.next, msg_t, link); |
list_remove(&msg->link); |
if (msg->callid == FIBRIL_connection->close_callid) |
close_answered = 1; |
ipc_answer_0(msg->callid, EHANGUP); |
free(msg); |
} |
if (FIBRIL_connection->close_callid) |
ipc_answer_0(FIBRIL_connection->close_callid, EOK); |
463,43 → 516,45 |
/** Create a new fibril for a new connection. |
* |
* Creates new fibril for connection, fills in connection structures and inserts |
* Create new fibril for connection, fill in connection structures and inserts |
* it into the hash table, so that later we can easily do routing of messages to |
* particular fibrils. |
* |
* @param in_phone_hash Identification of the incoming connection. |
* @param callid Hash of the opening IPC_M_CONNECT_ME_TO call. |
* If callid is zero, the connection was opened by |
* accepting the IPC_M_CONNECT_TO_ME call and this function |
* is called directly by the server. |
* @param call Call data of the opening call. |
* @param cfibril Fibril function that should be called upon opening the |
* connection. |
* @param in_phone_hash Identification of the incoming connection. |
* @param callid Hash of the opening IPC_M_CONNECT_ME_TO call. |
* If callid is zero, the connection was opened by |
* accepting the IPC_M_CONNECT_TO_ME call and this function |
* is called directly by the server. |
* @param call Call data of the opening call. |
* @param cfibril Fibril function that should be called upon opening the |
* connection. |
* |
* @return New fibril id or NULL on failure. |
* @return New fibril id or NULL on failure. |
* |
*/ |
fid_t async_new_connection(ipcarg_t in_phone_hash, ipc_callid_t callid, |
ipc_call_t *call, void (*cfibril)(ipc_callid_t, ipc_call_t *)) |
{ |
connection_t *conn; |
unsigned long key; |
conn = malloc(sizeof(*conn)); |
connection_t *conn = malloc(sizeof(*conn)); |
if (!conn) { |
if (callid) |
ipc_answer_0(callid, ENOMEM); |
return NULL; |
} |
conn->in_phone_hash = in_phone_hash; |
list_initialize(&conn->msg_queue); |
conn->callid = callid; |
conn->close_callid = 0; |
conn->close_callid = false; |
if (call) |
conn->call = *call; |
conn->wdata.active = 1; /* We will activate the fibril ASAP */ |
/* We will activate the fibril ASAP */ |
conn->wdata.active = true; |
conn->cfibril = cfibril; |
conn->wdata.fid = fibril_create(connection_fibril, conn); |
if (!conn->wdata.fid) { |
free(conn); |
if (callid) |
506,14 → 561,16 |
ipc_answer_0(callid, ENOMEM); |
return NULL; |
} |
/* Add connection to the connection hash table */ |
key = conn->in_phone_hash; |
ipcarg_t key = conn->in_phone_hash; |
futex_down(&async_futex); |
hash_table_insert(&conn_hash_table, &key, &conn->link); |
futex_up(&async_futex); |
fibril_add_ready(conn->wdata.fid); |
return conn->wdata.fid; |
} |
522,19 → 579,18 |
* If the call has the IPC_M_CONNECT_ME_TO method, a new connection is created. |
* Otherwise the call is routed to its connection fibril. |
* |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* @param callid Hash of the incoming call. |
* @param call Data of the incoming call. |
* |
*/ |
static void handle_call(ipc_callid_t callid, ipc_call_t *call) |
{ |
/* Unrouted call - do some default behaviour */ |
if ((callid & IPC_CALLID_NOTIFICATION)) { |
_in_interrupt_handler = 1; |
(*interrupt_received)(callid, call); |
_in_interrupt_handler = 0; |
process_notification(callid, call); |
return; |
} |
} |
switch (IPC_GET_METHOD(*call)) { |
case IPC_M_CONNECT_ME_TO: |
/* Open new connection with fibril etc. */ |
542,11 → 598,11 |
client_connection); |
return; |
} |
/* Try to route the call through the connection hash table */ |
if (route_call(callid, call)) |
return; |
/* Unknown call from unknown phone - hang it up */ |
ipc_answer_0(callid, EHANGUP); |
} |
555,47 → 611,44 |
static void handle_expired_timeouts(void) |
{ |
struct timeval tv; |
awaiter_t *waiter; |
link_t *cur; |
gettimeofday(&tv, NULL); |
futex_down(&async_futex); |
cur = timeout_list.next; |
link_t *cur = timeout_list.next; |
while (cur != &timeout_list) { |
waiter = list_get_instance(cur, awaiter_t, link); |
awaiter_t *waiter = list_get_instance(cur, awaiter_t, link); |
if (tv_gt(&waiter->expires, &tv)) |
break; |
cur = cur->next; |
list_remove(&waiter->link); |
waiter->inlist = 0; |
waiter->timedout = 1; |
waiter->inlist = false; |
waiter->timedout = true; |
/* |
* Redundant condition? |
* The fibril should not be active when it gets here. |
* Redundant condition? |
* The fibril should not be active when it gets here. |
*/ |
if (!waiter->active) { |
waiter->active = 1; |
waiter->active = true; |
fibril_add_ready(waiter->fid); |
} |
} |
futex_up(&async_futex); |
} |
/** Endless loop dispatching incoming calls and answers. |
* |
* @return Never returns. |
* @return Never returns. |
* |
*/ |
static int async_manager_worker(void) |
{ |
ipc_call_t call; |
ipc_callid_t callid; |
int timeout; |
awaiter_t *waiter; |
struct timeval tv; |
while (1) { |
while (true) { |
if (fibril_switch(FIBRIL_FROM_MANAGER)) { |
futex_up(&async_futex); |
/* |
604,11 → 657,17 |
*/ |
continue; |
} |
futex_down(&async_futex); |
suseconds_t timeout; |
if (!list_empty(&timeout_list)) { |
waiter = list_get_instance(timeout_list.next, awaiter_t, |
link); |
awaiter_t *waiter |
= list_get_instance(timeout_list.next, awaiter_t, link); |
struct timeval tv; |
gettimeofday(&tv, NULL); |
if (tv_gteq(&tv, &waiter->expires)) { |
futex_up(&async_futex); |
handle_expired_timeouts(); |
617,19 → 676,21 |
timeout = tv_sub(&waiter->expires, &tv); |
} else |
timeout = SYNCH_NO_TIMEOUT; |
futex_up(&async_futex); |
callid = ipc_wait_cycle(&call, timeout, SYNCH_FLAGS_NONE); |
ipc_call_t call; |
ipc_callid_t callid |
= ipc_wait_cycle(&call, timeout, SYNCH_FLAGS_NONE); |
if (!callid) { |
handle_expired_timeouts(); |
continue; |
} |
if (callid & IPC_CALLID_ANSWERED) { |
if (callid & IPC_CALLID_ANSWERED) |
continue; |
} |
handle_call(callid, &call); |
} |
637,16 → 698,17 |
} |
/** Function to start async_manager as a standalone fibril. |
* |
* |
* When more kernel threads are used, one async manager should exist per thread. |
* |
* @param arg Unused. |
* @param arg Unused. |
* @return Never returns. |
* |
* @return Never returns. |
*/ |
static int async_manager_fibril(void *arg) |
{ |
futex_up(&async_futex); |
/* |
* async_futex is always locked when entering manager |
*/ |
658,9 → 720,7 |
/** Add one manager to manager list. */ |
void async_create_manager(void) |
{ |
fid_t fid; |
fid = fibril_create(async_manager_fibril, NULL); |
fid_t fid = fibril_create(async_manager_fibril, NULL); |
fibril_add_manager(fid); |
} |
672,7 → 732,7 |
/** Initialize the async framework. |
* |
* @return Zero on success or an error code. |
* @return Zero on success or an error code. |
*/ |
int _async_init(void) |
{ |
692,30 → 752,33 |
* |
* Notify the fibril which is waiting for this message that it has arrived. |
* |
* @param private Pointer to the asynchronous message record. |
* @param retval Value returned in the answer. |
* @param data Call data of the answer. |
* @param arg Pointer to the asynchronous message record. |
* @param retval Value returned in the answer. |
* @param data Call data of the answer. |
*/ |
static void reply_received(void *private, int retval, ipc_call_t *data) |
static void reply_received(void *arg, int retval, ipc_call_t *data) |
{ |
amsg_t *msg = (amsg_t *) private; |
amsg_t *msg = (amsg_t *) arg; |
msg->retval = retval; |
futex_down(&async_futex); |
/* Copy data after futex_down, just in case the call was detached */ |
if (msg->dataptr) |
*msg->dataptr = *data; |
*msg->dataptr = *data; |
write_barrier(); |
/* Remove message from timeout list */ |
if (msg->wdata.inlist) |
list_remove(&msg->wdata.link); |
msg->done = 1; |
msg->done = true; |
if (!msg->wdata.active) { |
msg->wdata.active = 1; |
msg->wdata.active = true; |
fibril_add_ready(msg->wdata.fid); |
} |
futex_up(&async_futex); |
} |
724,38 → 787,35 |
* The return value can be used as input for async_wait() to wait for |
* completion. |
* |
* @param phoneid Handle of the phone that will be used for the send. |
* @param method Service-defined method. |
* @param arg1 Service-defined payload argument. |
* @param arg2 Service-defined payload argument. |
* @param arg3 Service-defined payload argument. |
* @param arg4 Service-defined payload argument. |
* @param dataptr If non-NULL, storage where the reply data will be |
* stored. |
* @param phoneid Handle of the phone that will be used for the send. |
* @param method Service-defined method. |
* @param arg1 Service-defined payload argument. |
* @param arg2 Service-defined payload argument. |
* @param arg3 Service-defined payload argument. |
* @param arg4 Service-defined payload argument. |
* @param dataptr If non-NULL, storage where the reply data will be |
* stored. |
* |
* @return Hash of the sent message. |
* @return Hash of the sent message or 0 on error. |
* |
*/ |
aid_t async_send_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipc_call_t *dataptr) |
{ |
amsg_t *msg; |
if (_in_interrupt_handler) { |
printf("Cannot send asynchronous request in interrupt " |
"handler.\n"); |
_exit(1); |
} |
msg = malloc(sizeof(*msg)); |
msg->done = 0; |
amsg_t *msg = malloc(sizeof(*msg)); |
if (!msg) |
return 0; |
msg->done = false; |
msg->dataptr = dataptr; |
/* We may sleep in the next method, but it will use its own mechanism */ |
msg->wdata.active = 1; |
msg->wdata.active = true; |
ipc_call_async_4(phoneid, method, arg1, arg2, arg3, arg4, msg, |
reply_received, 1); |
reply_received, true); |
return (aid_t) msg; |
} |
764,113 → 824,118 |
* The return value can be used as input for async_wait() to wait for |
* completion. |
* |
* @param phoneid Handle of the phone that will be used for the send. |
* @param method Service-defined method. |
* @param arg1 Service-defined payload argument. |
* @param arg2 Service-defined payload argument. |
* @param arg3 Service-defined payload argument. |
* @param arg4 Service-defined payload argument. |
* @param arg5 Service-defined payload argument. |
* @param dataptr If non-NULL, storage where the reply data will be |
* stored. |
* @param phoneid Handle of the phone that will be used for the send. |
* @param method Service-defined method. |
* @param arg1 Service-defined payload argument. |
* @param arg2 Service-defined payload argument. |
* @param arg3 Service-defined payload argument. |
* @param arg4 Service-defined payload argument. |
* @param arg5 Service-defined payload argument. |
* @param dataptr If non-NULL, storage where the reply data will be |
* stored. |
* |
* @return Hash of the sent message. |
* @return Hash of the sent message or 0 on error. |
* |
*/ |
aid_t async_send_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, |
ipc_call_t *dataptr) |
{ |
amsg_t *msg; |
if (_in_interrupt_handler) { |
printf("Cannot send asynchronous request in interrupt " |
"handler.\n"); |
_exit(1); |
} |
msg = malloc(sizeof(*msg)); |
msg->done = 0; |
amsg_t *msg = malloc(sizeof(*msg)); |
if (!msg) |
return 0; |
msg->done = false; |
msg->dataptr = dataptr; |
/* We may sleep in next method, but it will use its own mechanism */ |
msg->wdata.active = 1; |
msg->wdata.active = true; |
ipc_call_async_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, msg, |
reply_received, 1); |
reply_received, true); |
return (aid_t) msg; |
} |
/** Wait for a message sent by the async framework. |
* |
* @param amsgid Hash of the message to wait for. |
* @param retval Pointer to storage where the retval of the answer will |
* be stored. |
* @param amsgid Hash of the message to wait for. |
* @param retval Pointer to storage where the retval of the answer will |
* be stored. |
* |
*/ |
void async_wait_for(aid_t amsgid, ipcarg_t *retval) |
{ |
amsg_t *msg = (amsg_t *) amsgid; |
futex_down(&async_futex); |
if (msg->done) { |
futex_up(&async_futex); |
goto done; |
} |
msg->wdata.fid = fibril_get_id(); |
msg->wdata.active = 0; |
msg->wdata.inlist = 0; |
msg->wdata.active = false; |
msg->wdata.inlist = false; |
/* Leave the async_futex locked when entering this function */ |
fibril_switch(FIBRIL_TO_MANAGER); |
/* futex is up automatically after fibril_switch...*/ |
/* Futex is up automatically after fibril_switch */ |
done: |
if (retval) |
*retval = msg->retval; |
free(msg); |
} |
/** Wait for a message sent by the async framework, timeout variant. |
* |
* @param amsgid Hash of the message to wait for. |
* @param retval Pointer to storage where the retval of the answer will |
* be stored. |
* @param timeout Timeout in microseconds. |
* @param amsgid Hash of the message to wait for. |
* @param retval Pointer to storage where the retval of the answer will |
* be stored. |
* @param timeout Timeout in microseconds. |
* |
* @return Zero on success, ETIMEOUT if the timeout has expired. |
* @return Zero on success, ETIMEOUT if the timeout has expired. |
* |
*/ |
int async_wait_timeout(aid_t amsgid, ipcarg_t *retval, suseconds_t timeout) |
{ |
amsg_t *msg = (amsg_t *) amsgid; |
/* TODO: Let it go through the event read at least once */ |
if (timeout < 0) |
return ETIMEOUT; |
futex_down(&async_futex); |
if (msg->done) { |
futex_up(&async_futex); |
goto done; |
} |
gettimeofday(&msg->wdata.expires, NULL); |
tv_add(&msg->wdata.expires, timeout); |
msg->wdata.fid = fibril_get_id(); |
msg->wdata.active = 0; |
msg->wdata.active = false; |
insert_timeout(&msg->wdata); |
/* Leave the async_futex locked when entering this function */ |
fibril_switch(FIBRIL_TO_MANAGER); |
/* futex is up automatically after fibril_switch...*/ |
/* Futex is up automatically after fibril_switch */ |
if (!msg->done) |
return ETIMEOUT; |
done: |
if (retval) |
*retval = msg->retval; |
free(msg); |
return 0; |
} |
878,38 → 943,38 |
* |
* The current fibril is suspended but the thread continues to execute. |
* |
* @param timeout Duration of the wait in microseconds. |
* @param timeout Duration of the wait in microseconds. |
* |
*/ |
void async_usleep(suseconds_t timeout) |
{ |
amsg_t *msg; |
amsg_t *msg = malloc(sizeof(*msg)); |
if (_in_interrupt_handler) { |
printf("Cannot call async_usleep in interrupt handler.\n"); |
_exit(1); |
} |
msg = malloc(sizeof(*msg)); |
if (!msg) |
return; |
msg->wdata.fid = fibril_get_id(); |
msg->wdata.active = 0; |
msg->wdata.active = false; |
gettimeofday(&msg->wdata.expires, NULL); |
tv_add(&msg->wdata.expires, timeout); |
futex_down(&async_futex); |
insert_timeout(&msg->wdata); |
/* Leave the async_futex locked when entering this function */ |
fibril_switch(FIBRIL_TO_MANAGER); |
/* futex is up automatically after fibril_switch()...*/ |
/* Futex is up automatically after fibril_switch() */ |
free(msg); |
} |
/** Setter for client_connection function pointer. |
* |
* @param conn Function that will implement a new connection fibril. |
* @param conn Function that will implement a new connection fibril. |
* |
*/ |
void async_set_client_connection(async_client_conn_t conn) |
{ |
918,12 → 983,12 |
/** Setter for interrupt_received function pointer. |
* |
* @param conn Function that will implement a new interrupt |
* notification fibril. |
* @param intr Function that will implement a new interrupt |
* notification fibril. |
*/ |
void async_set_interrupt_received(async_client_conn_t conn) |
void async_set_interrupt_received(async_client_conn_t intr) |
{ |
interrupt_received = conn; |
interrupt_received = intr; |
} |
/** Pseudo-synchronous message sending - fast version. |
933,18 → 998,20 |
* This function can only transfer 4 register payload arguments. For |
* transferring more arguments, see the slower async_req_slow(). |
* |
* @param phoneid Hash of the phone through which to make the call. |
* @param method Method of the call. |
* @param arg1 Service-defined payload argument. |
* @param arg2 Service-defined payload argument. |
* @param arg3 Service-defined payload argument. |
* @param arg4 Service-defined payload argument. |
* @param r1 If non-NULL, storage for the 1st reply argument. |
* @param r2 If non-NULL, storage for the 2nd reply argument. |
* @param r3 If non-NULL, storage for the 3rd reply argument. |
* @param r4 If non-NULL, storage for the 4th reply argument. |
* @param r5 If non-NULL, storage for the 5th reply argument. |
* @return Return code of the reply or a negative error code. |
* @param phoneid Hash of the phone through which to make the call. |
* @param method Method of the call. |
* @param arg1 Service-defined payload argument. |
* @param arg2 Service-defined payload argument. |
* @param arg3 Service-defined payload argument. |
* @param arg4 Service-defined payload argument. |
* @param r1 If non-NULL, storage for the 1st reply argument. |
* @param r2 If non-NULL, storage for the 2nd reply argument. |
* @param r3 If non-NULL, storage for the 3rd reply argument. |
* @param r4 If non-NULL, storage for the 4th reply argument. |
* @param r5 If non-NULL, storage for the 5th reply argument. |
* |
* @return Return code of the reply or a negative error code. |
* |
*/ |
ipcarg_t async_req_fast(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t *r1, ipcarg_t *r2, |
951,21 → 1018,27 |
ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5) |
{ |
ipc_call_t result; |
ipcarg_t rc; |
aid_t eid = async_send_4(phoneid, method, arg1, arg2, arg3, arg4, |
&result); |
ipcarg_t rc; |
async_wait_for(eid, &rc); |
if (r1) |
if (r1) |
*r1 = IPC_GET_ARG1(result); |
if (r2) |
*r2 = IPC_GET_ARG2(result); |
if (r3) |
*r3 = IPC_GET_ARG3(result); |
if (r4) |
*r4 = IPC_GET_ARG4(result); |
if (r5) |
*r5 = IPC_GET_ARG5(result); |
return rc; |
} |
973,19 → 1046,21 |
* |
* Send message asynchronously and return only after the reply arrives. |
* |
* @param phoneid Hash of the phone through which to make the call. |
* @param method Method of the call. |
* @param arg1 Service-defined payload argument. |
* @param arg2 Service-defined payload argument. |
* @param arg3 Service-defined payload argument. |
* @param arg4 Service-defined payload argument. |
* @param arg5 Service-defined payload argument. |
* @param r1 If non-NULL, storage for the 1st reply argument. |
* @param r2 If non-NULL, storage for the 2nd reply argument. |
* @param r3 If non-NULL, storage for the 3rd reply argument. |
* @param r4 If non-NULL, storage for the 4th reply argument. |
* @param r5 If non-NULL, storage for the 5th reply argument. |
* @return Return code of the reply or a negative error code. |
* @param phoneid Hash of the phone through which to make the call. |
* @param method Method of the call. |
* @param arg1 Service-defined payload argument. |
* @param arg2 Service-defined payload argument. |
* @param arg3 Service-defined payload argument. |
* @param arg4 Service-defined payload argument. |
* @param arg5 Service-defined payload argument. |
* @param r1 If non-NULL, storage for the 1st reply argument. |
* @param r2 If non-NULL, storage for the 2nd reply argument. |
* @param r3 If non-NULL, storage for the 3rd reply argument. |
* @param r4 If non-NULL, storage for the 4th reply argument. |
* @param r5 If non-NULL, storage for the 5th reply argument. |
* |
* @return Return code of the reply or a negative error code. |
* |
*/ |
ipcarg_t async_req_slow(int phoneid, ipcarg_t method, ipcarg_t arg1, |
ipcarg_t arg2, ipcarg_t arg3, ipcarg_t arg4, ipcarg_t arg5, ipcarg_t *r1, |
992,21 → 1067,27 |
ipcarg_t *r2, ipcarg_t *r3, ipcarg_t *r4, ipcarg_t *r5) |
{ |
ipc_call_t result; |
ipcarg_t rc; |
aid_t eid = async_send_5(phoneid, method, arg1, arg2, arg3, arg4, arg5, |
&result); |
ipcarg_t rc; |
async_wait_for(eid, &rc); |
if (r1) |
if (r1) |
*r1 = IPC_GET_ARG1(result); |
if (r2) |
*r2 = IPC_GET_ARG2(result); |
if (r3) |
*r3 = IPC_GET_ARG3(result); |
if (r4) |
*r4 = IPC_GET_ARG4(result); |
if (r5) |
*r5 = IPC_GET_ARG5(result); |
return rc; |
} |
//branches/tracing/uspace/lib/libc/generic/vfs/vfs.c |
---|
31,7 → 31,7 |
*/ |
/** @file |
*/ |
#include <vfs/vfs.h> |
#include <vfs/canonify.h> |
#include <stdlib.h> |
49,7 → 49,7 |
#include <errno.h> |
#include <string.h> |
#include <ipc/devmap.h> |
#include "../../srv/vfs/vfs.h" |
#include "../../../srv/vfs/vfs.h" |
int vfs_phone = -1; |
futex_t vfs_phone_futex = FUTEX_INITIALIZER; |
57,7 → 57,7 |
futex_t cwd_futex = FUTEX_INITIALIZER; |
DIR *cwd_dir = NULL; |
char *cwd_path = NULL; |
size_t cwd_len = 0; |
size_t cwd_size = 0; |
char *absolutize(const char *path, size_t *retlen) |
{ |
65,22 → 65,22 |
char *ncwd_path_nc; |
futex_down(&cwd_futex); |
size_t len = strlen(path); |
size_t size = str_size(path); |
if (*path != '/') { |
if (!cwd_path) { |
futex_up(&cwd_futex); |
return NULL; |
} |
ncwd_path_nc = malloc(cwd_len + 1 + len + 1); |
ncwd_path_nc = malloc(cwd_size + 1 + size + 1); |
if (!ncwd_path_nc) { |
futex_up(&cwd_futex); |
return NULL; |
} |
strcpy(ncwd_path_nc, cwd_path); |
ncwd_path_nc[cwd_len] = '/'; |
ncwd_path_nc[cwd_len + 1] = '\0'; |
str_cpy(ncwd_path_nc, cwd_size + 1 + size + 1, cwd_path); |
ncwd_path_nc[cwd_size] = '/'; |
ncwd_path_nc[cwd_size + 1] = '\0'; |
} else { |
ncwd_path_nc = malloc(len + 1); |
ncwd_path_nc = malloc(size + 1); |
if (!ncwd_path_nc) { |
futex_up(&cwd_futex); |
return NULL; |
87,7 → 87,7 |
} |
ncwd_path_nc[0] = '\0'; |
} |
strcat(ncwd_path_nc, path); |
str_append(ncwd_path_nc, cwd_size + 1 + size + 1, path); |
ncwd_path = canonify(ncwd_path_nc, retlen); |
if (!ncwd_path) { |
futex_up(&cwd_futex); |
99,7 → 99,7 |
* the address in ncwd_path need not be the same as ncwd_path_nc, even |
* though they both point into the same dynamically allocated buffer. |
*/ |
ncwd_path = strdup(ncwd_path); |
ncwd_path = str_dup(ncwd_path); |
free(ncwd_path_nc); |
if (!ncwd_path) { |
futex_up(&cwd_futex); |
109,34 → 109,39 |
return ncwd_path; |
} |
static int vfs_connect(void) |
static void vfs_connect(void) |
{ |
if (vfs_phone < 0) |
vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0, 0); |
return vfs_phone; |
while (vfs_phone < 0) |
vfs_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_VFS, 0, 0); |
} |
static int device_get_handle(const char *name, dev_handle_t *handle) |
static int device_get_handle(const char *name, dev_handle_t *handle, |
const unsigned int flags) |
{ |
int phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP, DEVMAP_CLIENT, |
0); |
int phone; |
if (flags & IPC_FLAG_BLOCKING) |
phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_DEVMAP, DEVMAP_CLIENT, 0); |
else |
phone = ipc_connect_me_to(PHONE_NS, SERVICE_DEVMAP, DEVMAP_CLIENT, 0); |
if (phone < 0) |
return phone; |
ipc_call_t answer; |
aid_t req = async_send_2(phone, DEVMAP_DEVICE_GET_HANDLE, 0, 0, |
aid_t req = async_send_2(phone, DEVMAP_DEVICE_GET_HANDLE, flags, 0, |
&answer); |
ipcarg_t retval = ipc_data_write_start(phone, name, strlen(name) + 1); |
ipcarg_t retval = ipc_data_write_start(phone, name, str_size(name) + 1); |
if (retval != EOK) { |
async_wait_for(req, NULL); |
ipc_hangup(phone); |
return retval; |
} |
async_wait_for(req, &retval); |
if (handle != NULL) |
*handle = -1; |
149,7 → 154,8 |
return retval; |
} |
int mount(const char *fs_name, const char *mp, const char *dev) |
int mount(const char *fs_name, const char *mp, const char *dev, |
const char *opts, const unsigned int flags) |
{ |
int res; |
ipcarg_t rc; |
156,28 → 162,30 |
aid_t req; |
dev_handle_t dev_handle; |
res = device_get_handle(dev, &dev_handle); |
res = device_get_handle(dev, &dev_handle, flags); |
if (res != EOK) |
return res; |
size_t mpa_len; |
char *mpa = absolutize(mp, &mpa_len); |
size_t mpa_size; |
char *mpa = absolutize(mp, &mpa_size); |
if (!mpa) |
return ENOMEM; |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
free(mpa); |
return res; |
} |
vfs_connect(); |
req = async_send_2(vfs_phone, VFS_MOUNT, dev_handle, flags, NULL); |
rc = ipc_data_write_start(vfs_phone, (void *) mpa, mpa_size); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
free(mpa); |
return (int) rc; |
} |
req = async_send_1(vfs_phone, VFS_MOUNT, dev_handle, NULL); |
rc = ipc_data_write_start(vfs_phone, (void *)fs_name, strlen(fs_name)); |
rc = ipc_data_write_start(vfs_phone, (void *) opts, str_size(opts)); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
185,8 → 193,8 |
free(mpa); |
return (int) rc; |
} |
/* Ask VFS whether it likes fs_name. */ |
rc = async_req_0_0(vfs_phone, IPC_M_PING); |
rc = ipc_data_write_start(vfs_phone, (void *) fs_name, str_size(fs_name)); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
194,7 → 202,9 |
free(mpa); |
return (int) rc; |
} |
rc = ipc_data_write_start(vfs_phone, (void *)mpa, mpa_len); |
/* Ask VFS whether it likes fs_name. */ |
rc = async_req_0_0(vfs_phone, IPC_M_PING); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
202,38 → 212,32 |
free(mpa); |
return (int) rc; |
} |
async_wait_for(req, &rc); |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
free(mpa); |
return (int) rc; |
} |
static int _open(const char *path, int lflag, int oflag, ...) |
{ |
int res; |
ipcarg_t rc; |
ipc_call_t answer; |
aid_t req; |
size_t pa_len; |
char *pa = absolutize(path, &pa_len); |
size_t pa_size; |
char *pa = absolutize(path, &pa_size); |
if (!pa) |
return ENOMEM; |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
free(pa); |
return res; |
} |
} |
vfs_connect(); |
req = async_send_3(vfs_phone, VFS_OPEN, lflag, oflag, 0, &answer); |
rc = ipc_data_write_start(vfs_phone, pa, pa_len); |
rc = ipc_data_write_start(vfs_phone, pa, pa_size); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
258,22 → 262,14 |
int close(int fildes) |
{ |
int res; |
ipcarg_t rc; |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
return res; |
} |
} |
vfs_connect(); |
rc = async_req_1_0(vfs_phone, VFS_CLOSE, fildes); |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
282,7 → 278,6 |
ssize_t read(int fildes, void *buf, size_t nbyte) |
{ |
int res; |
ipcarg_t rc; |
ipc_call_t answer; |
aid_t req; |
289,14 → 284,8 |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
return res; |
} |
} |
vfs_connect(); |
req = async_send_1(vfs_phone, VFS_READ, fildes, &answer); |
rc = ipc_data_read_start(vfs_phone, (void *)buf, nbyte); |
if (rc != EOK) { |
316,7 → 305,6 |
ssize_t write(int fildes, const void *buf, size_t nbyte) |
{ |
int res; |
ipcarg_t rc; |
ipc_call_t answer; |
aid_t req; |
323,14 → 311,8 |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
return res; |
} |
} |
vfs_connect(); |
req = async_send_1(vfs_phone, VFS_WRITE, fildes, &answer); |
rc = ipc_data_write_start(vfs_phone, (void *)buf, nbyte); |
if (rc != EOK) { |
350,20 → 332,12 |
off_t lseek(int fildes, off_t offset, int whence) |
{ |
int res; |
ipcarg_t rc; |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
return res; |
} |
} |
vfs_connect(); |
ipcarg_t newoffs; |
rc = async_req_3_1(vfs_phone, VFS_SEEK, fildes, offset, whence, |
&newoffs); |
379,19 → 353,12 |
int ftruncate(int fildes, off_t length) |
{ |
int res; |
ipcarg_t rc; |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
return res; |
} |
} |
vfs_connect(); |
rc = async_req_2_0(vfs_phone, VFS_TRUNCATE, fildes, length); |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
433,28 → 400,20 |
int mkdir(const char *path, mode_t mode) |
{ |
int res; |
ipcarg_t rc; |
aid_t req; |
size_t pa_len; |
char *pa = absolutize(path, &pa_len); |
size_t pa_size; |
char *pa = absolutize(path, &pa_size); |
if (!pa) |
return ENOMEM; |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
free(pa); |
return res; |
} |
} |
vfs_connect(); |
req = async_send_1(vfs_phone, VFS_MKDIR, mode, NULL); |
rc = ipc_data_write_start(vfs_phone, pa, pa_len); |
rc = ipc_data_write_start(vfs_phone, pa, pa_size); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
471,28 → 430,20 |
static int _unlink(const char *path, int lflag) |
{ |
int res; |
ipcarg_t rc; |
aid_t req; |
size_t pa_len; |
char *pa = absolutize(path, &pa_len); |
size_t pa_size; |
char *pa = absolutize(path, &pa_size); |
if (!pa) |
return ENOMEM; |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
free(pa); |
return res; |
} |
} |
vfs_connect(); |
req = async_send_0(vfs_phone, VFS_UNLINK, NULL); |
rc = ipc_data_write_start(vfs_phone, pa, pa_len); |
rc = ipc_data_write_start(vfs_phone, pa, pa_size); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
519,17 → 470,16 |
int rename(const char *old, const char *new) |
{ |
int res; |
ipcarg_t rc; |
aid_t req; |
size_t olda_len; |
char *olda = absolutize(old, &olda_len); |
size_t olda_size; |
char *olda = absolutize(old, &olda_size); |
if (!olda) |
return ENOMEM; |
size_t newa_len; |
char *newa = absolutize(new, &newa_len); |
size_t newa_size; |
char *newa = absolutize(new, &newa_size); |
if (!newa) { |
free(olda); |
return ENOMEM; |
537,18 → 487,10 |
futex_down(&vfs_phone_futex); |
async_serialize_start(); |
if (vfs_phone < 0) { |
res = vfs_connect(); |
if (res < 0) { |
async_serialize_end(); |
futex_up(&vfs_phone_futex); |
free(olda); |
free(newa); |
return res; |
} |
} |
vfs_connect(); |
req = async_send_0(vfs_phone, VFS_RENAME, NULL); |
rc = ipc_data_write_start(vfs_phone, olda, olda_len); |
rc = ipc_data_write_start(vfs_phone, olda, olda_size); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
557,7 → 499,7 |
free(newa); |
return (int) rc; |
} |
rc = ipc_data_write_start(vfs_phone, newa, newa_len); |
rc = ipc_data_write_start(vfs_phone, newa, newa_size); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
async_serialize_end(); |
576,8 → 518,8 |
int chdir(const char *path) |
{ |
size_t pa_len; |
char *pa = absolutize(path, &pa_len); |
size_t pa_size; |
char *pa = absolutize(path, &pa_size); |
if (!pa) |
return ENOMEM; |
593,11 → 535,11 |
cwd_dir = NULL; |
free(cwd_path); |
cwd_path = NULL; |
cwd_len = 0; |
cwd_size = 0; |
} |
cwd_dir = d; |
cwd_path = pa; |
cwd_len = pa_len; |
cwd_size = pa_size; |
futex_up(&cwd_futex); |
return EOK; |
} |
607,11 → 549,11 |
if (!size) |
return NULL; |
futex_down(&cwd_futex); |
if (size < cwd_len + 1) { |
if (size < cwd_size + 1) { |
futex_up(&cwd_futex); |
return NULL; |
} |
strcpy(buf, cwd_path); |
str_cpy(buf, size, cwd_path); |
futex_up(&cwd_futex); |
return buf; |
} |
//branches/tracing/uspace/lib/libc/generic/mem.c |
---|
0,0 → 1,239 |
/* |
* Copyright (c) 2005 Martin Decky |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#include <mem.h> |
#include <stdlib.h> |
#include <sys/types.h> |
/** Fill memory block with a constant value. */ |
void *memset(void *dest, int b, size_t n) |
{ |
char *pb; |
unsigned long *pw; |
size_t word_size; |
size_t n_words; |
unsigned long pattern; |
size_t i; |
size_t fill; |
/* Fill initial segment. */ |
word_size = sizeof(unsigned long); |
fill = word_size - ((uintptr_t) dest & (word_size - 1)); |
if (fill > n) fill = n; |
pb = dest; |
i = fill; |
while (i-- != 0) |
*pb++ = b; |
/* Compute remaining size. */ |
n -= fill; |
if (n == 0) return dest; |
n_words = n / word_size; |
n = n % word_size; |
pw = (unsigned long *) pb; |
/* Create word-sized pattern for aligned segment. */ |
pattern = 0; |
i = word_size; |
while (i-- != 0) |
pattern = (pattern << 8) | (uint8_t) b; |
/* Fill aligned segment. */ |
i = n_words; |
while (i-- != 0) |
*pw++ = pattern; |
pb = (char *) pw; |
/* Fill final segment. */ |
i = n; |
while (i-- != 0) |
*pb++ = b; |
return dest; |
} |
struct along { |
unsigned long n; |
} __attribute__ ((packed)); |
static void *unaligned_memcpy(void *dst, const void *src, size_t n) |
{ |
int i, j; |
struct along *adst = dst; |
const struct along *asrc = src; |
for (i = 0; i < n / sizeof(unsigned long); i++) |
adst[i].n = asrc[i].n; |
for (j = 0; j < n % sizeof(unsigned long); j++) |
((unsigned char *) (((unsigned long *) dst) + i))[j] = |
((unsigned char *) (((unsigned long *) src) + i))[j]; |
return (char *) dst; |
} |
/** Copy memory block. */ |
void *memcpy(void *dst, const void *src, size_t n) |
{ |
size_t i; |
size_t mod, fill; |
size_t word_size; |
size_t n_words; |
const unsigned long *srcw; |
unsigned long *dstw; |
const uint8_t *srcb; |
uint8_t *dstb; |
word_size = sizeof(unsigned long); |
/* |
* Are source and destination addresses congruent modulo word_size? |
* If not, use unaligned_memcpy(). |
*/ |
if (((uintptr_t) dst & (word_size - 1)) != |
((uintptr_t) src & (word_size - 1))) |
return unaligned_memcpy(dst, src, n); |
/* |
* mod is the address modulo word size. fill is the length of the |
* initial buffer segment before the first word boundary. |
* If the buffer is very short, use unaligned_memcpy(), too. |
*/ |
mod = (uintptr_t) dst & (word_size - 1); |
fill = word_size - mod; |
if (fill > n) fill = n; |
/* Copy the initial segment. */ |
srcb = src; |
dstb = dst; |
i = fill; |
while (i-- != 0) |
*dstb++ = *srcb++; |
/* Compute remaining length. */ |
n -= fill; |
if (n == 0) return dst; |
/* Pointers to aligned segment. */ |
dstw = (unsigned long *) dstb; |
srcw = (const unsigned long *) srcb; |
n_words = n / word_size; /* Number of whole words to copy. */ |
n -= n_words * word_size; /* Remaining bytes at the end. */ |
/* "Fast" copy. */ |
i = n_words; |
while (i-- != 0) |
*dstw++ = *srcw++; |
/* |
* Copy the rest. |
*/ |
srcb = (const uint8_t *) srcw; |
dstb = (uint8_t *) dstw; |
i = n; |
while (i-- != 0) |
*dstb++ = *srcb++; |
return dst; |
} |
/** Move memory block with possible overlapping. */ |
void *memmove(void *dst, const void *src, size_t n) |
{ |
const uint8_t *sp; |
uint8_t *dp; |
/* Nothing to do? */ |
if (src == dst) |
return dst; |
/* Non-overlapping? */ |
if (dst >= src + n || src >= dst + n) { |
return memcpy(dst, src, n); |
} |
/* Which direction? */ |
if (src > dst) { |
/* Forwards. */ |
sp = src; |
dp = dst; |
while (n-- != 0) |
*dp++ = *sp++; |
} else { |
/* Backwards. */ |
sp = src + (n - 1); |
dp = dst + (n - 1); |
while (n-- != 0) |
*dp-- = *sp--; |
} |
return dst; |
} |
/** Compare two memory areas. |
* |
* @param s1 Pointer to the first area to compare. |
* @param s2 Pointer to the second area to compare. |
* @param len Size of the first area in bytes. Both areas must have |
* the same length. |
* @return If len is 0, return zero. If the areas match, return |
* zero. Otherwise return non-zero. |
*/ |
int bcmp(const char *s1, const char *s2, size_t len) |
{ |
for (; len && *s1++ == *s2++; len--) |
; |
return len; |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/event.c |
---|
0,0 → 1,57 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
* @} |
*/ |
/** @addtogroup libc |
*/ |
/** @file |
*/ |
#include <libc.h> |
#include <event.h> |
#include <kernel/ipc/event_types.h> |
#include <ipc/ipc.h> |
/** Subscribe for event notifications. |
* |
* @param evno Event number. |
* @param method Use this method for notifying me. |
* |
* @return Value returned by the kernel. |
*/ |
int event_subscribe(event_type_t e, ipcarg_t method) |
{ |
return __SYSCALL2(SYS_EVENT_SUBSCRIBE, (sysarg_t) e, (sysarg_t) method); |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/io/stdio.c |
---|
0,0 → 1,278 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** |
* @file |
* @brief ANSI C Stream I/O. |
*/ |
#include <stdlib.h> |
#include <sys/types.h> |
#include <sys/stat.h> |
#include <fcntl.h> |
#include <unistd.h> |
#include <errno.h> |
#include <bool.h> |
#include <stdio.h> |
FILE *stdin, *stdout, *stderr; |
/** |
* Open a stream. |
* |
* @param file_name Name of the file to open. |
* @param mode Mode string, (r|w|a)[b|t][+]. |
*/ |
FILE *fopen(const char *file_name, const char *mode) |
{ |
FILE *f; |
int flags; |
bool plus; |
const char *mp; |
/* Parse mode except first character. */ |
mp = mode; |
if (*mp++ == '\0') { |
errno = EINVAL; |
return NULL; |
} |
if (*mp == 'b' || *mp == 't') ++mp; |
if (*mp == '+') { |
++mp; |
plus = true; |
} else { |
plus = false; |
} |
if (*mp != '\0') { |
errno = EINVAL; |
return NULL; |
} |
/* Parse first character of mode and determine flags for open(). */ |
switch (mode[0]) { |
case 'r': |
flags = plus ? O_RDWR : O_RDONLY; |
break; |
case 'w': |
flags = (O_TRUNC | O_CREAT) | (plus ? O_RDWR : O_WRONLY); |
break; |
case 'a': |
/* TODO: a+ must read from beginning, append to the end. */ |
if (plus) { |
errno = ENOTSUP; |
return NULL; |
} |
flags = (O_APPEND | O_CREAT) | (plus ? O_RDWR : O_WRONLY); |
default: |
errno = EINVAL; |
return NULL; |
} |
/* Open file. */ |
f = malloc(sizeof(FILE)); |
if (f == NULL) { |
errno = ENOMEM; |
return NULL; |
} |
f->fd = open(file_name, flags, 0666); |
if (f->fd < 0) { |
free(f); |
return NULL; /* errno was set by open() */ |
} |
f->error = 0; |
f->eof = 0; |
return f; |
} |
/** Close a stream. |
* |
* @param f Pointer to stream. |
* @return 0 on success, EOF on error. |
*/ |
int fclose(FILE *f) |
{ |
int rc; |
rc = close(f->fd); |
free(f); |
if (rc != 0) |
return EOF; /* errno was set by close() */ |
return 0; |
} |
/** Read from a stream. |
* |
* @param buf Destination buffer. |
* @param size Size of each record. |
* @param nmemb Number of records to read. |
* @param f Pointer to the stream. |
*/ |
size_t fread(void *buf, size_t size, size_t nmemb, FILE *f) |
{ |
size_t left, done, n; |
left = size * nmemb; |
done = 0; |
while (left > 0 && !f->error && !f->eof) { |
n = read(f->fd, buf + done, left); |
if (n < 0) { |
f->error = 1; |
} else if (n == 0) { |
f->eof = 1; |
} else { |
left -= n; |
done += n; |
} |
} |
return done / size; |
} |
/** Write to a stream. |
* |
* @param buf Source buffer. |
* @param size Size of each record. |
* @param nmemb Number of records to write. |
* @param f Pointer to the stream. |
*/ |
size_t fwrite(const void *buf, size_t size, size_t nmemb, FILE *f) |
{ |
size_t left, done, n; |
left = size * nmemb; |
done = 0; |
while (left > 0 && !f->error) { |
n = write(f->fd, buf + done, left); |
if (n <= 0) { |
f->error = 1; |
} else { |
left -= n; |
done += n; |
} |
} |
return done / size; |
} |
/** Return the end-of-file indicator of a stream. */ |
int feof(FILE *f) |
{ |
return f->eof; |
} |
/** Return the error indicator of a stream. */ |
int ferror(FILE *f) |
{ |
return f->error; |
} |
/** Clear the error and end-of-file indicators of a stream. */ |
void clearerr(FILE *f) |
{ |
f->eof = 0; |
f->error = 0; |
} |
/** Read character from a stream. */ |
int fgetc(FILE *f) |
{ |
unsigned char c; |
size_t n; |
n = fread(&c, sizeof(c), 1, f); |
if (n < 1) return EOF; |
return (int) c; |
} |
/** Write character to a stream. */ |
int fputc(int c, FILE *f) |
{ |
unsigned char cc; |
size_t n; |
cc = (unsigned char) c; |
n = fwrite(&cc, sizeof(cc), 1, f); |
if (n < 1) return EOF; |
return (int) cc; |
} |
/** Write string to a stream. */ |
int fputs(const char *s, FILE *f) |
{ |
int rc; |
rc = 0; |
while (*s && rc >= 0) { |
rc = fputc(*s++, f); |
} |
if (rc < 0) return EOF; |
return 0; |
} |
/** Seek to position in stream. */ |
int fseek(FILE *f, long offset, int origin) |
{ |
off_t rc; |
rc = lseek(f->fd, offset, origin); |
if (rc == (off_t) (-1)) { |
/* errno has been set by lseek. */ |
return -1; |
} |
f->eof = 0; |
return 0; |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/io/io.c |
---|
36,6 → 36,9 |
#include <unistd.h> |
#include <stdio.h> |
#include <io/io.h> |
#include <string.h> |
#include <errno.h> |
#include <console.h> |
const static char nl = '\n'; |
47,8 → 50,9 |
return putnchars("(NULL)", 6); |
for (count = 0; str[count] != 0; count++); |
if (write_stdout((void *) str, count) == count) { |
if (write_stdout(&nl, 1) == 1) |
if (console_write((void *) str, count) == count) { |
if (console_write(&nl, 1) == 1) |
return 0; |
} |
62,7 → 66,7 |
*/ |
int putnchars(const char *buf, size_t count) |
{ |
if (write_stdout((void *) buf, count) == count) |
if (console_write((void *) buf, count) == count) |
return 0; |
return EOF; |
79,7 → 83,7 |
return putnchars("(NULL)", 6); |
for (count = 0; str[count] != 0; count++); |
if (write_stdout((void *) str, count) == count) |
if (console_write((void *) str, count) == count) |
return 0; |
return EOF; |
87,10 → 91,16 |
int putchar(int c) |
{ |
unsigned char ch = c; |
if (write_stdout((void *) &ch, 1) == 1) |
char buf[STR_BOUNDS(1)]; |
size_t offs; |
offs = 0; |
if (chr_encode(c, buf, &offs, STR_BOUNDS(1)) != EOK) |
return EOF; |
if (console_write((void *) buf, offs) == offs) |
return c; |
return EOF; |
} |
97,6 → 107,8 |
int getchar(void) |
{ |
unsigned char c; |
console_flush(); |
if (read_stdin((void *) &c, 1) == 1) |
return c; |
103,5 → 115,13 |
return EOF; |
} |
int fflush(FILE *f) |
{ |
/* Dummy implementation */ |
(void) f; |
console_flush(); |
return 0; |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/io/vprintf.c |
---|
38,14 → 38,45 |
#include <io/printf_core.h> |
#include <futex.h> |
#include <async.h> |
#include <console.h> |
static atomic_t printf_futex = FUTEX_INITIALIZER; |
static int vprintf_write(const char *str, size_t count, void *unused) |
static int vprintf_str_write(const char *str, size_t size, void *data) |
{ |
return write_stdout(str, count); |
size_t offset = 0; |
size_t prev; |
count_t chars = 0; |
while (offset < size) { |
prev = offset; |
str_decode(str, &offset, size); |
console_write(str + prev, offset - prev); |
chars++; |
} |
return chars; |
} |
static int vprintf_wstr_write(const wchar_t *str, size_t size, void *data) |
{ |
size_t offset = 0; |
size_t boff; |
count_t chars = 0; |
char buf[4]; |
while (offset < size) { |
boff = 0; |
chr_encode(str[chars], buf, &boff, 4); |
console_write(buf, boff); |
chars++; |
offset += sizeof(wchar_t); |
} |
return chars; |
} |
/** Print formatted text. |
* @param fmt format string |
* @param ap format parameters |
54,7 → 85,8 |
int vprintf(const char *fmt, va_list ap) |
{ |
struct printf_spec ps = { |
(int (*)(void *, size_t, void *)) vprintf_write, |
vprintf_str_write, |
vprintf_wstr_write, |
NULL |
}; |
/* |
//branches/tracing/uspace/lib/libc/generic/io/fprintf.c |
---|
0,0 → 1,77 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** |
* @file |
* @brief fprintf, vfprintf |
*/ |
#include <stdio.h> |
#include <sys/types.h> |
#include <io/printf_core.h> |
static int vfprintf_str_write(const char *s, size_t size, void *f) |
{ |
/* FIXME: Should return number of characters? */ |
return fwrite(s, 1, size, (FILE *) f); |
} |
static int vfprintf_wstr_write(const char *s, size_t size, void *f) |
{ |
/* TODO */ |
return size; |
} |
int vfprintf(FILE *f, const char *fmt, va_list ap) |
{ |
struct printf_spec ps = { |
vfprintf_str_write, |
vfprintf_wstr_write, |
(void *) f |
}; |
return printf_core(fmt, &ps, ap); |
} |
int fprintf(FILE *f, const char *fmt, ...) |
{ |
int rv; |
va_list args; |
va_start(args, fmt); |
rv = vfprintf(f, fmt, args); |
va_end(args); |
return rv; |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/io/vsnprintf.c |
---|
36,87 → 36,145 |
#include <stdio.h> |
#include <string.h> |
#include <io/printf_core.h> |
#include <errno.h> |
struct vsnprintf_data { |
size_t size; /* total space for string */ |
size_t len; /* count of currently used characters */ |
char *string; /* destination string */ |
}; |
typedef struct { |
size_t size; /* Total size of the buffer (in bytes) */ |
size_t len; /* Number of already used bytes */ |
char *dst; /* Destination */ |
} vsnprintf_data_t; |
/** Write string to given buffer. |
* Write at most data->size characters including trailing zero. According to C99 |
* has snprintf to return number of characters that would have been written if |
* enough space had been available. Hence the return value is not number of |
* really printed characters but size of input string. Number of really used |
* characters is stored in data->len. |
* |
* @param str Source string to print. |
* @param count Size of the source string. |
* @param data Structure with destination string, counter of used space |
* and total string size. |
* @return Number of characters to print (not characters really |
* printed!) |
* Write at most data->size plain characters including trailing zero. |
* According to C99, snprintf() has to return number of characters that |
* would have been written if enough space had been available. Hence |
* the return value is not the number of actually printed characters |
* but size of the input string. |
* |
* @param str Source string to print. |
* @param size Number of plain characters in str. |
* @param data Structure describing destination string, counter |
* of used space and total string size. |
* |
* @return Number of characters to print (not characters actually |
* printed). |
* |
*/ |
static int |
vsnprintf_write(const char *str, size_t count, struct vsnprintf_data *data) |
static int vsnprintf_str_write(const char *str, size_t size, vsnprintf_data_t *data) |
{ |
size_t i; |
i = data->size - data->len; |
if (i == 0) { |
return count; |
} |
size_t left = data->size - data->len; |
if (i == 1) { |
/* |
* We have only one free byte left in buffer => write there |
* trailing zero. |
if (left == 0) |
return ((int) size); |
if (left == 1) { |
/* We have only one free byte left in buffer |
* -> store trailing zero |
*/ |
data->string[data->size - 1] = 0; |
data->dst[data->size - 1] = 0; |
data->len = data->size; |
return count; |
return ((int) size); |
} |
if (i <= count) { |
/* |
* We have not enought space for whole string with the trailing |
* zero => print only a part of string. |
if (left <= size) { |
/* We do not have enough space for the whole string |
* with the trailing zero => print only a part |
* of string |
*/ |
memcpy((void *)(data->string + data->len), (void *)str, i - 1); |
data->string[data->size - 1] = 0; |
data->len = data->size; |
return count; |
index_t index = 0; |
while (index < size) { |
wchar_t uc = str_decode(str, &index, size); |
if (chr_encode(uc, data->dst, &data->len, data->size - 1) != EOK) |
break; |
} |
/* Put trailing zero at end, but not count it |
* into data->len so it could be rewritten next time |
*/ |
data->dst[data->len] = 0; |
return ((int) size); |
} |
/* Buffer is big enought to print whole string */ |
memcpy((void *)(data->string + data->len), (void *)str, count); |
data->len += count; |
/* |
* Put trailing zero at end, but not count it into data->len so it could |
* be rewritten next time. |
/* Buffer is big enought to print the whole string */ |
memcpy((void *)(data->dst + data->len), (void *) str, size); |
data->len += size; |
/* Put trailing zero at end, but not count it |
* into data->len so it could be rewritten next time |
*/ |
data->string[data->len] = 0; |
data->dst[data->len] = 0; |
return ((int) size); |
} |
return count; |
/** Write wide string to given buffer. |
* |
* Write at most data->size plain characters including trailing zero. |
* According to C99, snprintf() has to return number of characters that |
* would have been written if enough space had been available. Hence |
* the return value is not the number of actually printed characters |
* but size of the input string. |
* |
* @param str Source wide string to print. |
* @param size Number of bytes in str. |
* @param data Structure describing destination string, counter |
* of used space and total string size. |
* |
* @return Number of wide characters to print (not characters actually |
* printed). |
* |
*/ |
static int vsnprintf_wstr_write(const wchar_t *str, size_t size, vsnprintf_data_t *data) |
{ |
index_t index = 0; |
while (index < (size / sizeof(wchar_t))) { |
size_t left = data->size - data->len; |
if (left == 0) |
return ((int) size); |
if (left == 1) { |
/* We have only one free byte left in buffer |
* -> store trailing zero |
*/ |
data->dst[data->size - 1] = 0; |
data->len = data->size; |
return ((int) size); |
} |
if (chr_encode(str[index], data->dst, &data->len, data->size - 1) != EOK) |
break; |
index++; |
} |
/* Put trailing zero at end, but not count it |
* into data->len so it could be rewritten next time |
*/ |
data->dst[data->len] = 0; |
return ((int) size); |
} |
/** Print formatted to the given buffer with limited size. |
* @param str Buffer. |
* @param size Bffer size. |
* @param fmt Format string. |
* \see For more details about format string see printf_core. |
*/ |
int vsnprintf(char *str, size_t size, const char *fmt, va_list ap) |
{ |
struct vsnprintf_data data = {size, 0, str}; |
struct printf_spec ps = { |
(int(*)(void *, size_t, void *)) vsnprintf_write, |
vsnprintf_data_t data = { |
size, |
0, |
str |
}; |
printf_spec_t ps = { |
(int(*) (const char *, size_t, void *)) vsnprintf_str_write, |
(int(*) (const wchar_t *, size_t, void *)) vsnprintf_wstr_write, |
&data |
}; |
/* |
* Print 0 at end of string - fix the case that nothing will be printed. |
*/ |
/* Print 0 at end of string - fix the case that nothing will be printed */ |
if (size > 0) |
str[0] = 0; |
//branches/tracing/uspace/lib/libc/generic/io/printf_core.c |
---|
1,6 → 1,7 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* Copyright (c) 2006 Josef Cejka |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
27,12 → 28,12 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
/** @addtogroup generic |
* @{ |
*/ |
/** |
* @file |
* @brief Printing functions. |
* @brief Printing functions. |
*/ |
#include <unistd.h> |
41,20 → 42,30 |
#include <ctype.h> |
#include <string.h> |
#define __PRINTF_FLAG_PREFIX 0x00000001 /**< show prefixes 0x or 0*/ |
#define __PRINTF_FLAG_SIGNED 0x00000002 /**< signed / unsigned number */ |
#define __PRINTF_FLAG_ZEROPADDED 0x00000004 /**< print leading zeroes */ |
#define __PRINTF_FLAG_LEFTALIGNED 0x00000010 /**< align to left */ |
#define __PRINTF_FLAG_SHOWPLUS 0x00000020 /**< always show + sign */ |
#define __PRINTF_FLAG_SPACESIGN 0x00000040 /**< print space instead of plus */ |
#define __PRINTF_FLAG_BIGCHARS 0x00000080 /**< show big characters */ |
#define __PRINTF_FLAG_NEGATIVE 0x00000100 /**< number has - sign */ |
/** show prefixes 0x or 0 */ |
#define __PRINTF_FLAG_PREFIX 0x00000001 |
/** signed / unsigned number */ |
#define __PRINTF_FLAG_SIGNED 0x00000002 |
/** print leading zeroes */ |
#define __PRINTF_FLAG_ZEROPADDED 0x00000004 |
/** align to left */ |
#define __PRINTF_FLAG_LEFTALIGNED 0x00000010 |
/** always show + sign */ |
#define __PRINTF_FLAG_SHOWPLUS 0x00000020 |
/** print space instead of plus */ |
#define __PRINTF_FLAG_SPACESIGN 0x00000040 |
/** show big characters */ |
#define __PRINTF_FLAG_BIGCHARS 0x00000080 |
/** number has - sign */ |
#define __PRINTF_FLAG_NEGATIVE 0x00000100 |
#define PRINT_NUMBER_BUFFER_SIZE (64+5) /**< Buffer big enought for 64 bit number |
* printed in base 2, sign, prefix and |
* 0 to terminate string.. (last one is only for better testing |
* end of buffer by zero-filling subroutine) |
*/ |
/** |
* Buffer big enough for 64-bit number printed in base 2, sign, prefix and 0 |
* to terminate string... (last one is only for better testing end of buffer by |
* zero-filling subroutine) |
*/ |
#define PRINT_NUMBER_BUFFER_SIZE (64 + 5) |
/** Enumeration of possible arguments types. |
*/ |
typedef enum { |
63,171 → 74,299 |
PrintfQualifierInt, |
PrintfQualifierLong, |
PrintfQualifierLongLong, |
PrintfQualifierSizeT, |
PrintfQualifierPointer |
} qualifier_t; |
static char digits_small[] = "0123456789abcdef"; /**< Small hexadecimal characters */ |
static char digits_big[] = "0123456789ABCDEF"; /**< Big hexadecimal characters */ |
static char nullstr[] = "(NULL)"; |
static char digits_small[] = "0123456789abcdef"; |
static char digits_big[] = "0123456789ABCDEF"; |
static char invalch = U_SPECIAL; |
/** Print count chars from buffer without adding newline |
* @param buf Buffer with size at least count bytes - NULL pointer NOT allowed! |
* @param count |
* @param ps output method and its data |
* @return number of printed characters |
/** Print one or more characters without adding newline. |
* |
* @param buf Buffer holding characters with size of |
* at least size bytes. NULL is not allowed! |
* @param size Size of the buffer in bytes. |
* @param ps Output method and its data. |
* |
* @return Number of characters printed. |
* |
*/ |
static int printf_putnchars(const char * buf, size_t count, |
struct printf_spec *ps) |
static int printf_putnchars(const char *buf, size_t size, |
printf_spec_t *ps) |
{ |
return ps->write((void *)buf, count, ps->data); |
return ps->str_write((void *) buf, size, ps->data); |
} |
/** Print string without added newline |
* @param str string to print |
* @param ps write function specification and support data |
* @return number of printed characters |
/** Print one or more wide characters without adding newline. |
* |
* @param buf Buffer holding wide characters with size of |
* at least size bytes. NULL is not allowed! |
* @param size Size of the buffer in bytes. |
* @param ps Output method and its data. |
* |
* @return Number of wide characters printed. |
* |
*/ |
static int printf_putstr(const char * str, struct printf_spec *ps) |
static int printf_wputnchars(const wchar_t *buf, size_t size, |
printf_spec_t *ps) |
{ |
size_t count; |
return ps->wstr_write((void *) buf, size, ps->data); |
} |
/** Print string without adding a newline. |
* |
* @param str String to print. |
* @param ps Write function specification and support data. |
* |
* @return Number of characters printed. |
* |
*/ |
static int printf_putstr(const char *str, printf_spec_t *ps) |
{ |
if (str == NULL) |
return printf_putnchars(nullstr, str_size(nullstr), ps); |
if (str == NULL) |
return printf_putnchars("(NULL)", 6, ps); |
return ps->str_write((void *) str, str_size(str), ps->data); |
} |
count = strlen(str); |
return ps->write((void *) str, count, ps->data); |
/** Print one ASCII character. |
* |
* @param c ASCII character to be printed. |
* @param ps Output method. |
* |
* @return Number of characters printed. |
* |
*/ |
static int printf_putchar(const char ch, printf_spec_t *ps) |
{ |
if (!ascii_check(ch)) |
return ps->str_write((void *) &invalch, 1, ps->data); |
return ps->str_write(&ch, 1, ps->data); |
} |
/** Print one character to output |
* @param c one character |
* @param ps output method |
* @return number of printed characters |
/** Print one wide character. |
* |
* @param c Wide character to be printed. |
* @param ps Output method. |
* |
* @return Number of characters printed. |
* |
*/ |
static int printf_putchar(int c, struct printf_spec *ps) |
static int printf_putwchar(const wchar_t ch, printf_spec_t *ps) |
{ |
unsigned char ch = c; |
if (!chr_check(ch)) |
return ps->str_write((void *) &invalch, 1, ps->data); |
return ps->write((void *) &ch, 1, ps->data); |
return ps->wstr_write(&ch, sizeof(wchar_t), ps->data); |
} |
/** Print one formatted character |
* @param c character to print |
* @param width |
* @param flags |
* @return number of printed characters |
/** Print one formatted ASCII character. |
* |
* @param ch Character to print. |
* @param width Width modifier. |
* @param flags Flags that change the way the character is printed. |
* |
* @return Number of characters printed, negative value on failure. |
* |
*/ |
static int print_char(char c, int width, uint64_t flags, struct printf_spec *ps) |
static int print_char(const char ch, int width, uint32_t flags, printf_spec_t *ps) |
{ |
int counter = 0; |
count_t counter = 0; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
/* |
* One space is consumed by the character itself, hence the |
* predecrement. |
*/ |
while (--width > 0) { |
if (printf_putchar(' ', ps) > 0) |
++counter; |
/* |
* One space is consumed by the character itself, hence |
* the predecrement. |
*/ |
if (printf_putchar(' ', ps) > 0) |
counter++; |
} |
} |
if (printf_putchar(c, ps) > 0) |
if (printf_putchar(ch, ps) > 0) |
counter++; |
/* |
* One space is consumed by the character itself, hence the |
* predecrement. |
*/ |
while (--width > 0) { |
/* |
* One space is consumed by the character itself, hence |
* the predecrement. |
*/ |
if (printf_putchar(' ', ps) > 0) |
++counter; |
counter++; |
} |
return ++counter; |
return (int) (counter + 1); |
} |
/** Print one string |
* @param s string |
* @param width |
* @param precision |
* @param flags |
* @return number of printed characters |
/** Print one formatted wide character. |
* |
* @param ch Character to print. |
* @param width Width modifier. |
* @param flags Flags that change the way the character is printed. |
* |
* @return Number of characters printed, negative value on failure. |
* |
*/ |
static int print_string(char *s, int width, int precision, uint64_t flags, |
struct printf_spec *ps) |
static int print_wchar(const wchar_t ch, int width, uint32_t flags, printf_spec_t *ps) |
{ |
int counter = 0; |
size_t size; |
int retval; |
if (s == NULL) { |
return printf_putstr("(NULL)", ps); |
count_t counter = 0; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (--width > 0) { |
/* |
* One space is consumed by the character itself, hence |
* the predecrement. |
*/ |
if (printf_putchar(' ', ps) > 0) |
counter++; |
} |
} |
size = strlen(s); |
if (printf_putwchar(ch, ps) > 0) |
counter++; |
while (--width > 0) { |
/* |
* One space is consumed by the character itself, hence |
* the predecrement. |
*/ |
if (printf_putchar(' ', ps) > 0) |
counter++; |
} |
return (int) (counter + 1); |
} |
/* print leading spaces */ |
/** Print string. |
* |
* @param str String to be printed. |
* @param width Width modifier. |
* @param precision Precision modifier. |
* @param flags Flags that modify the way the string is printed. |
* |
* @return Number of characters printed, negative value on failure. |
*/ |
static int print_str(char *str, int width, unsigned int precision, |
uint32_t flags, printf_spec_t *ps) |
{ |
if (str == NULL) |
return printf_putstr(nullstr, ps); |
if (precision == 0) |
precision = size; |
/* Print leading spaces. */ |
count_t strw = str_length(str); |
if (precision == 0) |
precision = strw; |
/* Left padding */ |
count_t counter = 0; |
width -= precision; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
} |
if ((retval = printf_putnchars(s, size < precision ? size : precision, |
ps)) < 0) { |
/* Part of @a str fitting into the alloted space. */ |
int retval; |
size_t size = str_lsize(str, precision); |
if ((retval = printf_putnchars(str, size, ps)) < 0) |
return -counter; |
counter += retval; |
/* Right padding */ |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
counter += retval; |
return ((int) counter); |
} |
/** Print wide string. |
* |
* @param str Wide string to be printed. |
* @param width Width modifier. |
* @param precision Precision modifier. |
* @param flags Flags that modify the way the string is printed. |
* |
* @return Number of wide characters printed, negative value on failure. |
*/ |
static int print_wstr(wchar_t *str, int width, unsigned int precision, |
uint32_t flags, printf_spec_t *ps) |
{ |
if (str == NULL) |
return printf_putstr(nullstr, ps); |
if (*str == U_BOM) |
str++; |
/* Print leading spaces. */ |
size_t strw = wstr_length(str); |
if (precision == 0) |
precision = strw; |
/* Left padding */ |
count_t counter = 0; |
width -= precision; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
} |
/* Part of @a wstr fitting into the alloted space. */ |
int retval; |
size_t size = wstr_lsize(str, precision); |
if ((retval = printf_wputnchars(str, size, ps)) < 0) |
return -counter; |
counter += retval; |
/* Right padding */ |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
++counter; |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
return counter; |
return ((int) counter); |
} |
/** Print number in given base |
/** Print a number in a given base. |
* |
* Print significant digits of a number in given |
* base. |
* Print significant digits of a number in given base. |
* |
* @param num Number to print. |
* @param width |
* @param precision |
* @param base Base to print the number in (should |
* be in range 2 .. 16). |
* @param flags output modifiers |
* @return number of printed characters |
* @param num Number to print. |
* @param width Width modifier. |
* @param precision Precision modifier. |
* @param base Base to print the number in (must be between 2 and 16). |
* @param flags Flags that modify the way the number is printed. |
* |
* @return Number of characters printed. |
* |
*/ |
static int print_number(uint64_t num, int width, int precision, int base, |
uint64_t flags, struct printf_spec *ps) |
uint32_t flags, printf_spec_t *ps) |
{ |
char *digits = digits_small; |
char d[PRINT_NUMBER_BUFFER_SIZE]; /* this is good enough even for |
* base == 2, prefix and sign */ |
char *ptr = &d[PRINT_NUMBER_BUFFER_SIZE - 1]; |
int size = 0; /* size of number with all prefixes and signs */ |
int number_size; /* size of plain number */ |
char sgn; |
int retval; |
int counter = 0; |
char *digits; |
if (flags & __PRINTF_FLAG_BIGCHARS) |
digits = digits_big; |
else |
digits = digits_small; |
if (flags & __PRINTF_FLAG_BIGCHARS) |
digits = digits_big; |
char data[PRINT_NUMBER_BUFFER_SIZE]; |
char *ptr = &data[PRINT_NUMBER_BUFFER_SIZE - 1]; |
*ptr-- = 0; /* Put zero at end of string */ |
/* Size of number with all prefixes and signs */ |
int size = 0; |
/* Put zero at end of string */ |
*ptr-- = 0; |
if (num == 0) { |
*ptr-- = '0'; |
size++; |
238,15 → 377,17 |
} while (num /= base); |
} |
number_size = size; |
/* Size of plain number */ |
int number_size = size; |
/* |
* Collect sum of all prefixes/signs/... to calculate padding and |
* leading zeroes |
* Collect the sum of all prefixes/signs/etc. to calculate padding and |
* leading zeroes. |
*/ |
if (flags & __PRINTF_FLAG_PREFIX) { |
switch(base) { |
case 2: /* Binary formating is not standard, but usefull */ |
case 2: |
/* Binary formating is not standard, but usefull */ |
size += 2; |
break; |
case 8: |
257,8 → 398,8 |
break; |
} |
} |
sgn = 0; |
char sgn = 0; |
if (flags & __PRINTF_FLAG_SIGNED) { |
if (flags & __PRINTF_FLAG_NEGATIVE) { |
sgn = '-'; |
271,47 → 412,46 |
size++; |
} |
} |
if (flags & __PRINTF_FLAG_LEFTALIGNED) { |
if (flags & __PRINTF_FLAG_LEFTALIGNED) |
flags &= ~__PRINTF_FLAG_ZEROPADDED; |
} |
/* |
* If number is leftaligned or precision is specified then zeropadding |
* is ignored. |
* If the number is left-aligned or precision is specified then |
* padding with zeros is ignored. |
*/ |
if (flags & __PRINTF_FLAG_ZEROPADDED) { |
if ((precision == 0) && (width > size)) { |
if ((precision == 0) && (width > size)) |
precision = width - size + number_size; |
} |
} |
/* print leading spaces */ |
/* We must print whole number not only a part. */ |
if (number_size > precision) |
/* Print leading spaces */ |
if (number_size > precision) { |
/* Print the whole number, not only a part */ |
precision = number_size; |
} |
width -= precision + size - number_size; |
count_t counter = 0; |
if (!(flags & __PRINTF_FLAG_LEFTALIGNED)) { |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
} |
/* print sign */ |
/* Print sign */ |
if (sgn) { |
if (printf_putchar(sgn, ps) == 1) |
counter++; |
} |
/* print prefix */ |
/* Print prefix */ |
if (flags & __PRINTF_FLAG_PREFIX) { |
switch(base) { |
case 2: /* Binary formating is not standard, but usefull */ |
case 2: |
/* Binary formating is not standard, but usefull */ |
if (printf_putchar('0', ps) == 1) |
counter++; |
if (flags & __PRINTF_FLAG_BIGCHARS) { |
339,152 → 479,154 |
break; |
} |
} |
/* print leading zeroes */ |
/* Print leading zeroes */ |
precision -= number_size; |
while (precision-- > 0) { |
while (precision-- > 0) { |
if (printf_putchar('0', ps) == 1) |
counter++; |
} |
/* print number itself */ |
if ((retval = printf_putstr(++ptr, ps)) > 0) { |
/* Print the number itself */ |
int retval; |
if ((retval = printf_putstr(++ptr, ps)) > 0) |
counter += retval; |
} |
/* print ending spaces */ |
/* Print tailing spaces */ |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
while (width-- > 0) { |
if (printf_putchar(' ', ps) == 1) |
counter++; |
} |
return counter; |
return ((int) counter); |
} |
/** Print formatted string. |
* |
* Print string formatted according to the fmt parameter and variadic arguments. |
* Each formatting directive must have the following form: |
* |
* \% [ FLAGS ] [ WIDTH ] [ .PRECISION ] [ TYPE ] CONVERSION |
* |
* \% [ FLAGS ] [ WIDTH ] [ .PRECISION ] [ TYPE ] CONVERSION |
* |
* FLAGS:@n |
* - "#" Force to print prefix. |
* For conversion \%o the prefix is 0, for %x and \%X prefixes are 0x and |
* 0X and for conversion \%b the prefix is 0b. |
* - "#" Force to print prefix. For \%o conversion, the prefix is 0, for |
* \%x and \%X prefixes are 0x and 0X and for conversion \%b the |
* prefix is 0b. |
* |
* - "-" Align to left. |
* - "-" Align to left. |
* |
* - "+" Print positive sign just as negative. |
* - "+" Print positive sign just as negative. |
* |
* - " " If the printed number is positive and "+" flag is not set, |
* print space in place of sign. |
* - " " If the printed number is positive and "+" flag is not set, |
* print space in place of sign. |
* |
* - "0" Print 0 as padding instead of spaces. Zeroes are placed between |
* sign and the rest of the number. This flag is ignored if "-" |
* flag is specified. |
* |
* - "0" Print 0 as padding instead of spaces. Zeroes are placed between |
* sign and the rest of the number. This flag is ignored if "-" |
* flag is specified. |
* |
* WIDTH:@n |
* - Specify minimal width of printed argument. If it is bigger, width is |
* ignored. If width is specified with a "*" character instead of number, |
* width is taken from parameter list. And integer parameter is expected |
* before parameter for processed conversion specification. If this value |
* is negative its absolute value is taken and the "-" flag is set. |
* - Specify the minimal width of a printed argument. If it is bigger, |
* width is ignored. If width is specified with a "*" character instead of |
* number, width is taken from parameter list. And integer parameter is |
* expected before parameter for processed conversion specification. If |
* this value is negative its absolute value is taken and the "-" flag is |
* set. |
* |
* PRECISION:@n |
* - Value precision. For numbers it specifies minimum valid numbers. |
* Smaller numbers are printed with leading zeroes. Bigger numbers are |
* not affected. Strings with more than precision characters are cut off. |
* Just as with width, an "*" can be used used instead of a number. An |
* integer value is then expected in parameters. When both width and |
* precision are specified using "*", the first parameter is used for |
* width and the second one for precision. |
* |
* - Value precision. For numbers it specifies minimum valid numbers. |
* Smaller numbers are printed with leading zeroes. Bigger numbers are not |
* affected. Strings with more than precision characters are cut off. Just |
* as with width, an "*" can be used used instead of a number. An integer |
* value is then expected in parameters. When both width and precision are |
* specified using "*", the first parameter is used for width and the |
* second one for precision. |
* |
* TYPE:@n |
* - "hh" Signed or unsigned char.@n |
* - "h" Signed or usigned short.@n |
* - "" Signed or usigned int (default value).@n |
* - "l" Signed or usigned long int.@n |
* - "ll" Signed or usigned long long int.@n |
* - "z" Type size_t.@n |
* |
* |
* - "hh" Signed or unsigned char.@n |
* - "h" Signed or unsigned short.@n |
* - "" Signed or unsigned int (default value).@n |
* - "l" Signed or unsigned long int.@n |
* If conversion is "c", the character is wchar_t (wide character).@n |
* If conversion is "s", the string is wchar_t * (wide string).@n |
* - "ll" Signed or unsigned long long int.@n |
* |
* CONVERSION:@n |
* - % Print percentile character itself. |
* - % Print percentile character itself. |
* |
* - c Print single character. |
* - c Print single character. The character is expected to be plain |
* ASCII (e.g. only values 0 .. 127 are valid).@n |
* If type is "l", then the character is expected to be wide character |
* (e.g. values 0 .. 0x10ffff are valid). |
* |
* - s Print zero terminated string. If a NULL value is passed as |
* value, "(NULL)" is printed instead. |
* |
* - P, p Print value of a pointer. Void * value is expected and it is |
* printed in hexadecimal notation with prefix (as with '\%#X' or |
* '\%#x' for 32bit or '\%#X' or '\%#x' for 64bit long pointers). |
* - s Print zero terminated string. If a NULL value is passed as |
* value, "(NULL)" is printed instead.@n |
* If type is "l", then the string is expected to be wide string. |
* |
* - b Print value as unsigned binary number. Prefix is not printed by |
* default. (Nonstandard extension.) |
* |
* - o Print value as unsigned octal number. Prefix is not printed by |
* default. |
* - P, p Print value of a pointer. Void * value is expected and it is |
* printed in hexadecimal notation with prefix (as with \%#X / \%#x |
* for 32-bit or \%#X / \%#x for 64-bit long pointers). |
* |
* - d, i Print signed decimal number. There is no difference between d |
* and i conversion. |
* - b Print value as unsigned binary number. Prefix is not printed by |
* default. (Nonstandard extension.) |
* |
* - u Print unsigned decimal number. |
* - o Print value as unsigned octal number. Prefix is not printed by |
* default. |
* |
* - X, x Print hexadecimal number with upper- or lower-case. Prefix is |
* not printed by default. |
* |
* All other characters from fmt except the formatting directives are printed in |
* - d, i Print signed decimal number. There is no difference between d |
* and i conversion. |
* |
* - u Print unsigned decimal number. |
* |
* - X, x Print hexadecimal number with upper- or lower-case. Prefix is |
* not printed by default. |
* |
* All other characters from fmt except the formatting directives are printed |
* verbatim. |
* |
* @param fmt Formatting NULL terminated string. |
* @return Number of printed characters or negative value on failure. |
* @param fmt Format NULL-terminated string. |
* |
* @return Number of characters printed, negative value on failure. |
* |
*/ |
int printf_core(const char *fmt, struct printf_spec *ps, va_list ap) |
int printf_core(const char *fmt, printf_spec_t *ps, va_list ap) |
{ |
/* i is the index of the currently processed char from fmt */ |
int i = 0; |
/* j is the index to the first not printed nonformating character */ |
int j = 0; |
int end; |
int counter; /* counter of printed characters */ |
int retval; /* used to store return values from called functions */ |
char c; |
qualifier_t qualifier; /* type of argument */ |
int base; /* base in which will be a numeric parameter printed */ |
uint64_t number; /* argument value */ |
size_t size; /* byte size of integer parameter */ |
int width, precision; |
uint64_t flags; |
size_t i; /* Index of the currently processed character from fmt */ |
size_t nxt = 0; /* Index of the next character from fmt */ |
size_t j = 0; /* Index to the first not printed nonformating character */ |
counter = 0; |
count_t counter = 0; /* Number of characters printed */ |
int retval; /* Return values from nested functions */ |
while ((c = fmt[i])) { |
/* control character */ |
if (c == '%' ) { |
/* print common characters if any processed */ |
while (true) { |
i = nxt; |
wchar_t uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 0) |
break; |
/* Control character */ |
if (uc == '%') { |
/* Print common characters if any processed */ |
if (i > j) { |
if ((retval = printf_putnchars(&fmt[j], |
(size_t)(i - j), ps)) < 0) { /* error */ |
goto minus_out; |
if ((retval = printf_putnchars(&fmt[j], i - j, ps)) < 0) { |
/* Error */ |
counter = -counter; |
goto out; |
} |
counter += retval; |
} |
j = i; |
/* parse modifiers */ |
flags = 0; |
end = 0; |
/* Parse modifiers */ |
uint32_t flags = 0; |
bool end = false; |
do { |
++i; |
switch (c = fmt[i]) { |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
switch (uc) { |
case '#': |
flags |= __PRINTF_FLAG_PREFIX; |
break; |
501,114 → 643,145 |
flags |= __PRINTF_FLAG_ZEROPADDED; |
break; |
default: |
end = 1; |
}; |
} while (end == 0); |
end = true; |
}; |
} while (!end); |
/* width & '*' operator */ |
width = 0; |
if (isdigit(fmt[i])) { |
while (isdigit(fmt[i])) { |
/* Width & '*' operator */ |
int width = 0; |
if (isdigit(uc)) { |
while (true) { |
width *= 10; |
width += fmt[i++] - '0'; |
width += uc - '0'; |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 0) |
break; |
if (!isdigit(uc)) |
break; |
} |
} else if (fmt[i] == '*') { |
/* get width value from argument list*/ |
i++; |
width = (int)va_arg(ap, int); |
} else if (uc == '*') { |
/* Get width value from argument list */ |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
width = (int) va_arg(ap, int); |
if (width < 0) { |
/* negative width sets '-' flag */ |
/* Negative width sets '-' flag */ |
width *= -1; |
flags |= __PRINTF_FLAG_LEFTALIGNED; |
} |
} |
/* precision and '*' operator */ |
precision = 0; |
if (fmt[i] == '.') { |
++i; |
if (isdigit(fmt[i])) { |
while (isdigit(fmt[i])) { |
/* Precision and '*' operator */ |
int precision = 0; |
if (uc == '.') { |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (isdigit(uc)) { |
while (true) { |
precision *= 10; |
precision += fmt[i++] - '0'; |
precision += uc - '0'; |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 0) |
break; |
if (!isdigit(uc)) |
break; |
} |
} else if (fmt[i] == '*') { |
/* get precision value from argument */ |
i++; |
precision = (int)va_arg(ap, int); |
} else if (uc == '*') { |
/* Get precision value from the argument list */ |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
precision = (int) va_arg(ap, int); |
if (precision < 0) { |
/* negative precision ignored */ |
/* Ignore negative precision */ |
precision = 0; |
} |
} |
} |
switch (fmt[i++]) { |
/** @todo unimplemented qualifiers: |
* t ptrdiff_t - ISO C 99 |
qualifier_t qualifier; |
switch (uc) { |
/** @todo Unimplemented qualifiers: |
* t ptrdiff_t - ISO C 99 |
*/ |
case 'h': /* char or short */ |
case 'h': |
/* Char or short */ |
qualifier = PrintfQualifierShort; |
if (fmt[i] == 'h') { |
i++; |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 'h') { |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
qualifier = PrintfQualifierByte; |
} |
break; |
case 'l': /* long or long long*/ |
case 'l': |
/* Long or long long */ |
qualifier = PrintfQualifierLong; |
if (fmt[i] == 'l') { |
i++; |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
if (uc == 'l') { |
i = nxt; |
uc = str_decode(fmt, &nxt, STR_NO_LIMIT); |
qualifier = PrintfQualifierLongLong; |
} |
break; |
case 'z': /* size_t */ |
qualifier = PrintfQualifierSizeT; |
break; |
default: |
/* set default type */ |
/* Default type */ |
qualifier = PrintfQualifierInt; |
--i; |
} |
} |
base = 10; |
switch (c = fmt[i]) { |
unsigned int base = 10; |
switch (uc) { |
/* |
* String and character conversions. |
*/ |
case 's': |
if ((retval = print_string(va_arg(ap, char*), |
width, precision, flags, ps)) < 0) { |
goto minus_out; |
if (qualifier == PrintfQualifierLong) |
retval = print_wstr(va_arg(ap, wchar_t *), width, precision, flags, ps); |
else |
retval = print_str(va_arg(ap, char *), width, precision, flags, ps); |
if (retval < 0) { |
counter = -counter; |
goto out; |
} |
counter += retval; |
j = i + 1; |
j = nxt; |
goto next_char; |
case 'c': |
c = va_arg(ap, unsigned int); |
retval = print_char(c, width, flags, ps); |
if (qualifier == PrintfQualifierLong) |
retval = print_wchar(va_arg(ap, wchar_t), width, flags, ps); |
else |
retval = print_char(va_arg(ap, unsigned int), width, flags, ps); |
if (retval < 0) { |
goto minus_out; |
} |
counter = -counter; |
goto out; |
}; |
counter += retval; |
j = i + 1; |
j = nxt; |
goto next_char; |
/* |
/* |
* Integer values |
*/ |
case 'P': /* pointer */ |
flags |= __PRINTF_FLAG_BIGCHARS; |
case 'P': |
/* Pointer */ |
flags |= __PRINTF_FLAG_BIGCHARS; |
case 'p': |
flags |= __PRINTF_FLAG_PREFIX; |
base = 16; |
qualifier = PrintfQualifierPointer; |
break; |
case 'b': |
break; |
case 'b': |
base = 2; |
break; |
case 'o': |
616,7 → 789,7 |
break; |
case 'd': |
case 'i': |
flags |= __PRINTF_FLAG_SIGNED; |
flags |= __PRINTF_FLAG_SIGNED; |
case 'u': |
break; |
case 'X': |
624,66 → 797,63 |
case 'x': |
base = 16; |
break; |
/* percentile itself */ |
case '%': |
/* Percentile itself */ |
case '%': |
j = i; |
goto next_char; |
/* |
* Bad formatting. |
*/ |
default: |
/* |
* Unknown format. Now, j is the index of '%', |
* so we will print the whole bad format |
* sequence. |
* Unknown format. Now, j is the index of '%' |
* so we will print whole bad format sequence. |
*/ |
goto next_char; |
goto next_char; |
} |
/* Print integers */ |
size_t size; |
uint64_t number; |
switch (qualifier) { |
case PrintfQualifierByte: |
size = sizeof(unsigned char); |
number = (uint64_t)va_arg(ap, unsigned int); |
number = (uint64_t) va_arg(ap, unsigned int); |
break; |
case PrintfQualifierShort: |
size = sizeof(unsigned short); |
number = (uint64_t)va_arg(ap, unsigned int); |
number = (uint64_t) va_arg(ap, unsigned int); |
break; |
case PrintfQualifierInt: |
size = sizeof(unsigned int); |
number = (uint64_t)va_arg(ap, unsigned int); |
number = (uint64_t) va_arg(ap, unsigned int); |
break; |
case PrintfQualifierLong: |
size = sizeof(unsigned long); |
number = (uint64_t)va_arg(ap, unsigned long); |
number = (uint64_t) va_arg(ap, unsigned long); |
break; |
case PrintfQualifierLongLong: |
size = sizeof(unsigned long long); |
number = (uint64_t)va_arg(ap, |
unsigned long long); |
number = (uint64_t) va_arg(ap, unsigned long long); |
break; |
case PrintfQualifierPointer: |
size = sizeof(void *); |
number = (uint64_t)(unsigned long)va_arg(ap, |
void *); |
number = (uint64_t) (unsigned long) va_arg(ap, void *); |
break; |
case PrintfQualifierSizeT: |
size = sizeof(size_t); |
number = (uint64_t)va_arg(ap, size_t); |
break; |
default: /* Unknown qualifier */ |
goto minus_out; |
default: |
/* Unknown qualifier */ |
counter = -counter; |
goto out; |
} |
if (flags & __PRINTF_FLAG_SIGNED) { |
if (number & (0x1 << (size * 8 - 1))) { |
flags |= __PRINTF_FLAG_NEGATIVE; |
if (size == sizeof(uint64_t)) { |
number = -((int64_t)number); |
number = -((int64_t) number); |
} else { |
number = ~number; |
number &= |
693,31 → 863,31 |
} |
} |
} |
if ((retval = print_number(number, width, precision, |
base, flags, ps)) < 0 ) { |
goto minus_out; |
base, flags, ps)) < 0) { |
counter = -counter; |
goto out; |
} |
counter += retval; |
j = i + 1; |
} |
j = nxt; |
} |
next_char: |
++i; |
; |
} |
if (i > j) { |
retval = printf_putnchars(&fmt[j], (size_t)(i - j), ps); |
if (retval < 0) { /* error */ |
goto minus_out; |
if ((retval = printf_putnchars(&fmt[j], i - j, ps)) < 0) { |
/* Error */ |
counter = -counter; |
goto out; |
} |
counter += retval; |
} |
return counter; |
minus_out: |
return -counter; |
out: |
return ((int) counter); |
} |
/** @} |
//branches/tracing/uspace/lib/libc/generic/io/stream.c |
---|
42,79 → 42,45 |
#include <ipc/ns.h> |
#include <ipc/fb.h> |
#include <ipc/services.h> |
#include <ipc/console.h> |
#include <console.h> |
#include <kbd/kbd.h> |
#include <unistd.h> |
#include <async.h> |
#include <sys/types.h> |
static int console_phone = -1; |
ssize_t write_stderr(const void *buf, size_t count) |
{ |
return count; |
} |
ssize_t read_stdin(void *buf, size_t count) |
{ |
open_console(); |
if (console_phone >= 0) { |
ipcarg_t r0, r1; |
int cons_phone = console_open(false); |
if (cons_phone >= 0) { |
kbd_event_t ev; |
int rc; |
size_t i = 0; |
while (i < count) { |
if (async_req_0_2(console_phone, CONSOLE_GETCHAR, &r0, &r1) < 0) |
return -1; |
((char *) buf)[i++] = r0; |
do { |
rc = kbd_get_event(&ev); |
if (rc < 0) return -1; |
} while (ev.c == 0 || ev.type == KE_RELEASE); |
((char *) buf)[i++] = ev.c; |
} |
return i; |
} else { |
} else |
return -1; |
} |
} |
ssize_t write_stdout(const void *buf, size_t count) |
/** Write a string to klog. */ |
int klog_puts(const char *str) |
{ |
open_console(); |
if (console_phone >= 0) { |
int i; |
for (i = 0; i < count; i++) |
async_msg_1(console_phone, CONSOLE_PUTCHAR, |
((const char *) buf)[i]); |
return count; |
} else |
return __SYSCALL3(SYS_KLOG, 1, (sysarg_t) buf, count); |
return __SYSCALL3(SYS_KLOG, 1, (sysarg_t) str, str_size(str)); |
} |
void open_console(void) |
{ |
if (console_phone < 0) { |
int phone = ipc_connect_me_to(PHONE_NS, SERVICE_CONSOLE, 0, 0); |
if (phone >= 0) |
console_phone = phone; |
} |
} |
void close_console(void) |
{ |
if (console_phone >= 0) { |
if (ipc_hangup(console_phone) == 0) { |
console_phone = -1; |
} |
} |
} |
void klog_update(void) |
{ |
(void) __SYSCALL3(SYS_KLOG, 1, NULL, 0); |
} |
int get_cons_phone(void) |
{ |
open_console(); |
return console_phone; |
} |
/** @} |
*/ |
//branches/tracing/uspace/lib/libc/generic/sysinfo.c |
---|
38,7 → 38,8 |
sysarg_t sysinfo_value(char *name) |
{ |
return __SYSCALL2(SYS_SYSINFO_VALUE, (sysarg_t ) name, (sysarg_t) strlen(name)); |
return __SYSCALL2(SYS_SYSINFO_VALUE, (sysarg_t ) name, |
(sysarg_t) str_size(name)); |
} |
/** @} |
//branches/tracing/uspace/lib/libc/Makefile |
---|
29,11 → 29,8 |
## Common compiler flags |
# |
include ../../Makefile.config |
LIBC_PREFIX = $(shell pwd) |
SOFTINT_PREFIX = ../softint |
CONSOLE_PREFIX = ../../srv/console |
## Setup toolchain |
# |
40,17 → 37,18 |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I$(CONSOLE_PREFIX) |
## Sources |
# |
GENERIC_SOURCES = \ |
generic/libc.c \ |
generic/ddi.c \ |
generic/as.c \ |
generic/cap.c \ |
generic/console.c \ |
generic/event.c \ |
generic/mem.c \ |
generic/string.c \ |
generic/fibril.c \ |
generic/pcb.c \ |
62,6 → 60,8 |
generic/io/asprintf.c \ |
generic/io/io.c \ |
generic/io/printf.c \ |
generic/io/fprintf.c \ |
generic/io/stdio.c \ |
generic/io/stream.c \ |
generic/io/sprintf.c \ |
generic/io/snprintf.c \ |
80,6 → 80,7 |
generic/time.c \ |
generic/err.c \ |
generic/stdlib.c \ |
generic/kbd.c \ |
generic/mman.c \ |
generic/udebug.c \ |
generic/vfs/vfs.c \ |
86,34 → 87,35 |
generic/vfs/canonify.c |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/entry.s \ |
arch/$(ARCH)/src/thread_entry.s |
arch/$(UARCH)/src/entry.s \ |
arch/$(UARCH)/src/thread_entry.s |
GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES))) |
ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES))) |
OBJECTS := $(GENERIC_OBJECTS) $(ARCH_OBJECTS) |
.PHONY: all clean depend kerninc |
all: kerninc libc.a arch/$(ARCH)/_link.ld |
all: kerninc libc.a arch/$(UARCH)/_link.ld |
kerninc: |
ln -sfn ../../../../kernel/generic/include include/kernel |
ln -sfn kernel/arch include/arch |
ln -sfn ../arch/$(ARCH)/include include/libarch |
ln -sfn ../arch/$(UARCH)/include include/libarch |
-include Makefile.depend |
clean: |
-rm -f include/kernel include/arch include/libarch libc.a arch/$(ARCH)/_link.ld Makefile.depend |
find generic/ arch/$(ARCH)/ -name '*.o' -follow -exec rm \{\} \; |
-rm -f include/kernel include/arch include/libarch libc.a arch/$(UARCH)/_link.ld Makefile.depend |
find generic/ arch/$(UARCH)/ malloc -name '*.o' -follow -exec rm \{\} \; |
depend: kerninc |
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(ARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null |
-makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(ARCH_SOURCES) $(GENERIC_SOURCES) > Makefile.depend 2> /dev/null |
libc.a: depend $(ARCH_OBJECTS) $(GENERIC_OBJECTS) |
$(AR) rc libc.a $(LIBS) $(ARCH_OBJECTS) $(GENERIC_OBJECTS) |
arch/$(ARCH)/_link.ld: arch/$(ARCH)/_link.ld.in |
arch/$(UARCH)/_link.ld: arch/$(UARCH)/_link.ld.in |
$(CC) $(DEFS) $(CFLAGS) -DLIBC_PREFIX=$(LIBC_PREFIX) -E -x c $< | grep -v "^\#" > $@ |
%.o: %.S |
//branches/tracing/uspace/lib/libc/arch/ppc64/_link.ld.in |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/types.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/config.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/thread.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/fibril.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/syscall.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/atomic.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/regname.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/byteorder.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/stackarg.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/faddr.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/limits.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/include/tls.h |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/Makefile.inc |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/src/fibril.S |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/src/thread_entry.s |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/src/syscall.c |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/src/entry.s |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/ppc64/src/tls.c |
---|
File deleted |
//branches/tracing/uspace/lib/libc/arch/sparc64/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
31,13 → 31,11 |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)); |
_tls_alignment = ALIGNOF(.tdata); |
.bss : { |
*(.sbss); |
*(COMMON); |
//branches/tracing/uspace/lib/libc/arch/sparc64/include/ddi.h |
---|
0,0 → 1,92 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @file |
* @ingroup libsparc64 |
*/ |
#ifndef LIBC_sparc64_DDI_H_ |
#define LIBC_sparc64_DDI_H_ |
#include <sys/types.h> |
#include <libarch/types.h> |
static inline memory_barrier(void) |
{ |
asm volatile ("membar #LoadLoad | #StoreStore\n" ::: "memory"); |
} |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*port = v; |
memory_barrier(); |
} |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*port = v; |
memory_barrier(); |
} |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*port = v; |
memory_barrier(); |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
uint8_t rv; |
rv = *port; |
memory_barrier(); |
return rv; |
} |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
uint16_t rv; |
rv = *port; |
memory_barrier(); |
return rv; |
} |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
uint32_t rv; |
rv = *port; |
memory_barrier(); |
return rv; |
} |
#endif |
//branches/tracing/uspace/lib/libc/arch/sparc64/include/types.h |
---|
47,6 → 47,11 |
typedef unsigned int uint32_t; |
typedef unsigned long int uint64_t; |
typedef int64_t ssize_t; |
typedef uint64_t size_t; |
typedef uint64_t count_t; |
typedef uint64_t index_t; |
typedef uint64_t uintptr_t; |
#endif |
//branches/tracing/uspace/lib/libc/arch/sparc64/Makefile.inc |
---|
29,15 → 29,11 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
TARGET = sparc64-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/sparc64/bin |
ARCH_SOURCES += arch/$(ARCH)/src/fibril.S \ |
arch/$(ARCH)/src/tls.c |
ARCH_SOURCES += arch/$(UARCH)/src/fibril.S \ |
arch/$(UARCH)/src/tls.c |
CFLAGS += -mcpu=ultrasparc -m64 |
LFLAGS += -no-check-sections -N |
//branches/tracing/uspace/lib/libc/arch/ia64/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
32,13 → 32,11 |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)); |
_tls_alignment = ALIGNOF(.tdata); |
.bss : { |
*(.sbss); |
*(.scommon); |
//branches/tracing/uspace/lib/libc/arch/ia64/include/ddi.h |
---|
1,5 → 1,5 |
/* |
* Copyright (c) 2005 Jakub Jermar, Jakub Vana |
* Copyright (c) 2005 Jakub Vana |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup ia64 |
/** @addtogroup libcia64 |
* @{ |
*/ |
/** @file |
35,63 → 35,80 |
#ifndef LIBC_ia64_DDI_H_ |
#define LIBC_ia64_DDI_H_ |
#include <sys/types.h> |
#include <libarch/types.h> |
typedef uint64_t ioport_t; |
#define IO_SPACE_BOUNDARY (64 * 1024) |
uint64_t get_ia64_iospace_address(void); |
extern uint64_t ia64_iospace_address; |
#define IA64_IOSPACE_ADDRESS (ia64_iospace_address?ia64_iospace_address:(ia64_iospace_address=get_ia64_iospace_address())) |
#define IA64_IOSPACE_ADDRESS \ |
(ia64_iospace_address ? \ |
ia64_iospace_address : \ |
(ia64_iospace_address = get_ia64_iospace_address())) |
static inline void outb(ioport_t port,uint8_t v) |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
uintptr_t prt = (uintptr_t) port; |
*((ioport8_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
asm volatile ("mf\n" ::: "memory"); |
} |
static inline void outw(ioport_t port,uint16_t v) |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
uintptr_t prt = (uintptr_t) port; |
*((ioport16_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
asm volatile ("mf\n" ::: "memory"); |
} |
static inline void outl(ioport_t port,uint32_t v) |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))) = v; |
uintptr_t prt = (uintptr_t) port; |
*((ioport32_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))) = v; |
asm volatile ("mf\n" ::: "memory"); |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
uintptr_t prt = (uintptr_t) port; |
static inline uint8_t inb(ioport_t port) |
{ |
asm volatile ("mf\n" ::: "memory"); |
return *((uint8_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))); |
return *((ioport8_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))); |
} |
static inline uint16_t inw(ioport_t port) |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
uintptr_t prt = (uintptr_t) port; |
asm volatile ("mf\n" ::: "memory"); |
return *((uint16_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xffE) | ( (port >> 2) << 12 )))); |
return *((ioport16_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))); |
} |
static inline uint32_t inl(ioport_t port) |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
uintptr_t prt = (uintptr_t) port; |
asm volatile ("mf\n" ::: "memory"); |
return *((uint32_t *)(IA64_IOSPACE_ADDRESS + ( (port & 0xfff) | ( (port >> 2) << 12 )))); |
return *((ioport32_t *)(IA64_IOSPACE_ADDRESS + |
((prt & 0xfff) | ((prt >> 2) << 12)))); |
} |
#endif |
/** @} |
//branches/tracing/uspace/lib/libc/arch/ia64/include/types.h |
---|
47,6 → 47,11 |
typedef unsigned int uint32_t; |
typedef unsigned long int uint64_t; |
typedef int64_t ssize_t; |
typedef uint64_t size_t; |
typedef uint64_t count_t; |
typedef uint64_t index_t; |
typedef uint64_t uintptr_t; |
typedef unsigned char __r8; /* Reserve byte */ |
//branches/tracing/uspace/lib/libc/arch/ia64/Makefile.inc |
---|
29,10 → 29,6 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
TARGET = ia64-pc-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/ia64/bin |
CFLAGS += -fno-unwind-tables -DMALLOC_ALIGNMENT_16 |
39,10 → 35,10 |
LFLAGS += -N $(SOFTINT_PREFIX)/libsoftint.a |
AFLAGS += |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \ |
arch/$(ARCH)/src/fibril.S \ |
arch/$(ARCH)/src/tls.c\ |
arch/$(ARCH)/src/ddi.c |
ARCH_SOURCES += arch/$(UARCH)/src/syscall.S \ |
arch/$(UARCH)/src/fibril.S \ |
arch/$(UARCH)/src/tls.c \ |
arch/$(UARCH)/src/ddi.c |
BFD_NAME = elf64-ia64-little |
BFD_ARCH = ia64-elf64 |
//branches/tracing/uspace/lib/libc/arch/ia64/src/entry.s |
---|
38,7 → 38,7 |
# |
__entry: |
alloc loc0 = ar.pfs, 0, 1, 2, 0 |
mov r1 = _gp |
movl r1 = _gp |
# Pass PCB pointer as the first argument to __main |
mov out0 = r2 |
//branches/tracing/uspace/lib/libc/arch/ia64/src/thread_entry.s |
---|
36,7 → 36,7 |
__thread_entry: |
alloc loc0 = ar.pfs, 0, 1, 1, 0 |
mov r1 = _gp |
movl r1 = _gp |
# |
# r8 contains address of uarg structure. |
//branches/tracing/uspace/lib/libc/arch/arm32/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
28,13 → 28,11 |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)); |
_tls_alignment = ALIGNOF(.tdata); |
.bss : { |
*(.sbss); |
*(.scommon); |
//branches/tracing/uspace/lib/libc/arch/arm32/include/ddi.h |
---|
0,0 → 1,69 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @file |
* @ingroup libcarm32 |
*/ |
#ifndef LIBC_arm32_DDI_H_ |
#define LIBC_arm32_DDI_H_ |
#include <sys/types.h> |
#include <libarch/types.h> |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*port = v; |
} |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*port = v; |
} |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*port = v; |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
return *port; |
} |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
return *port; |
} |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
return *port; |
} |
#endif |
//branches/tracing/uspace/lib/libc/arch/arm32/include/types.h |
---|
48,6 → 48,11 |
typedef unsigned long int uint32_t; |
typedef unsigned long long int uint64_t; |
typedef int32_t ssize_t; |
typedef uint32_t size_t; |
typedef uint32_t count_t; |
typedef uint32_t index_t; |
typedef uint32_t uintptr_t; |
#endif |
//branches/tracing/uspace/lib/libc/arch/arm32/Makefile.inc |
---|
30,20 → 30,16 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
TARGET = arm-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/arm/bin |
CFLAGS += -ffixed-r9 -mtp=soft |
LFLAGS += -N $(SOFTINT_PREFIX)/libsoftint.a |
AFLAGS += |
AFLAGS += |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \ |
arch/$(ARCH)/src/fibril.S \ |
arch/$(ARCH)/src/tls.c \ |
arch/$(ARCH)/src/eabi.S |
ARCH_SOURCES += arch/$(UARCH)/src/syscall.c \ |
arch/$(UARCH)/src/fibril.S \ |
arch/$(UARCH)/src/tls.c \ |
arch/$(UARCH)/src/eabi.S |
BFD_NAME = elf32-littlearm |
BFD_ARCH = arm |
//branches/tracing/uspace/lib/libc/arch/mips32eb/include/ddi.h |
---|
0,0 → 1,0 |
link ../../mips32/include/ddi.h |
//branches/tracing/uspace/lib/libc/arch/mips32eb/Makefile.inc |
---|
29,19 → 29,15 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
TARGET = mips-sgi-irix5 |
TARGET = mips-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips/bin |
CFLAGS += -mips3 |
CFLAGS += -mips3 |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \ |
arch/$(ARCH)/src/fibril.S \ |
arch/$(ARCH)/src/tls.c |
ARCH_SOURCES += arch/$(UARCH)/src/syscall.c \ |
arch/$(UARCH)/src/fibril.S \ |
arch/$(UARCH)/src/tls.c |
LFLAGS += -N |
BFD_ARCH = mips |
BFD_NAME = elf32-big |
BFD_NAME = elf32-tradbigmips |
//branches/tracing/uspace/lib/libc/arch/ppc32/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
27,13 → 27,11 |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)); |
_tls_alignment = ALIGNOF(.tdata); |
.bss : { |
*(.sbss); |
*(COMMON); |
//branches/tracing/uspace/lib/libc/arch/ppc32/include/ddi.h |
---|
0,0 → 1,69 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @file |
* @ingroup libcppc32 |
*/ |
#ifndef LIBC_ppc32_DDI_H_ |
#define LIBC_ppc32_DDI_H_ |
#include <sys/types.h> |
#include <libarch/types.h> |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*port = v; |
} |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*port = v; |
} |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*port = v; |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
return *port; |
} |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
return *port; |
} |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
return *port; |
} |
#endif |
//branches/tracing/uspace/lib/libc/arch/ppc32/include/types.h |
---|
47,6 → 47,11 |
typedef unsigned int uint32_t; |
typedef unsigned long long int uint64_t; |
typedef int32_t ssize_t; |
typedef uint32_t size_t; |
typedef uint32_t count_t; |
typedef uint32_t index_t; |
typedef uint32_t uintptr_t; |
#endif |
//branches/tracing/uspace/lib/libc/arch/ppc32/Makefile.inc |
---|
29,16 → 29,12 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
TARGET = ppc-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/ppc/bin |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \ |
arch/$(ARCH)/src/fibril.S \ |
arch/$(ARCH)/src/tls.c |
ARCH_SOURCES += arch/$(UARCH)/src/syscall.c \ |
arch/$(UARCH)/src/fibril.S \ |
arch/$(UARCH)/src/tls.c |
CFLAGS += -mcpu=powerpc -msoft-float -m32 |
AFLAGS += -a32 |
//branches/tracing/uspace/lib/libc/arch/amd64/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
26,13 → 26,11 |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)); |
_tls_alignment = ALIGNOF(.tdata); |
.bss : { |
*(COMMON); |
*(.bss); |
//branches/tracing/uspace/lib/libc/arch/amd64/include/types.h |
---|
47,6 → 47,11 |
typedef unsigned int uint32_t; |
typedef unsigned long long int uint64_t; |
typedef int64_t ssize_t; |
typedef uint64_t size_t; |
typedef uint64_t count_t; |
typedef uint64_t index_t; |
typedef uint64_t uintptr_t; |
#endif |
//branches/tracing/uspace/lib/libc/arch/amd64/Makefile.inc |
---|
29,16 → 29,12 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
TARGET = amd64-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/amd64/bin |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \ |
arch/$(ARCH)/src/fibril.S \ |
arch/$(ARCH)/src/tls.c |
ARCH_SOURCES += arch/$(UARCH)/src/syscall.S \ |
arch/$(UARCH)/src/fibril.S \ |
arch/$(UARCH)/src/tls.c |
LFLAGS += -N |
//branches/tracing/uspace/lib/libc/arch/mips32/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
33,13 → 33,11 |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)); |
_tls_alignment = ALIGNOF(.tdata); |
.sbss : { |
*(.scommon); |
//branches/tracing/uspace/lib/libc/arch/mips32/include/atomic.h |
---|
59,13 → 59,14 |
asm volatile ( |
"1:\n" |
" ll %0, %1\n" |
" addiu %0, %0, %3\n" /* same as addi, but never traps on overflow */ |
" addu %0, %0, %3\n" /* same as add, but never traps on overflow */ |
" move %2, %0\n" |
" sc %0, %1\n" |
" beq %0, %4, 1b\n" /* if the atomic operation failed, try again */ |
/* nop */ /* nop is inserted automatically by compiler */ |
" nop\n" |
: "=&r" (tmp), "+m" (val->count), "=&r" (v) |
: "i" (i), "i" (0) |
: "r" (i), "i" (0) |
); |
return v; |
//branches/tracing/uspace/lib/libc/arch/mips32/include/ddi.h |
---|
0,0 → 1,69 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @file |
* @ingroup libcmips32 |
*/ |
#ifndef LIBC_mips32_DDI_H_ |
#define LIBC_mips32_DDI_H_ |
#include <sys/types.h> |
#include <libarch/types.h> |
static inline void pio_write_8(ioport8_t *port, uint8_t v) |
{ |
*port = v; |
} |
static inline void pio_write_16(ioport16_t *port, uint16_t v) |
{ |
*port = v; |
} |
static inline void pio_write_32(ioport32_t *port, uint32_t v) |
{ |
*port = v; |
} |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
return *port; |
} |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
return *port; |
} |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
return *port; |
} |
#endif |
//branches/tracing/uspace/lib/libc/arch/mips32/include/types.h |
---|
48,6 → 48,11 |
typedef unsigned long int uint32_t; |
typedef unsigned long long int uint64_t; |
typedef int32_t ssize_t; |
typedef uint32_t size_t; |
typedef uint32_t count_t; |
typedef uint32_t index_t; |
typedef uint32_t uintptr_t; |
#endif |
//branches/tracing/uspace/lib/libc/arch/mips32/Makefile.inc |
---|
29,23 → 29,13 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
TARGET = mipsel-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/mipsel/bin |
CFLAGS += -mips3 |
-include ../../Makefile.config |
ifeq ($(CONFIG_MIPS_FPU),y) |
CFLAGS += -DCONFIG_MIPS_FPU |
endif |
ARCH_SOURCES += arch/$(UARCH)/src/syscall.c \ |
arch/$(UARCH)/src/fibril.S \ |
arch/$(UARCH)/src/tls.c |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.c \ |
arch/$(ARCH)/src/fibril.S \ |
arch/$(ARCH)/src/tls.c |
BFD_ARCH = mips |
BFD_NAME = elf32-tradlittlemips |
//branches/tracing/uspace/lib/libc/arch/ia32/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
26,13 → 26,11 |
_tdata_start = .; |
*(.tdata); |
_tdata_end = .; |
} :data |
.tbss : { |
_tbss_start = .; |
*(.tbss); |
_tbss_end = .; |
} :data |
_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)); |
_tls_alignment = ALIGNOF(.tdata); |
.bss : { |
*(COMMON); |
*(.bss); |
//branches/tracing/uspace/lib/libc/arch/ia32/include/ddi.h |
---|
33,43 → 33,72 |
#ifndef LIBC_ia32_DDI_H_ |
#define LIBC_ia32_DDI_H_ |
static inline void outb(int16_t port, uint8_t b) |
#include <sys/types.h> |
#include <libarch/types.h> |
#define IO_SPACE_BOUNDARY ((void *) (64 * 1024)) |
static inline uint8_t pio_read_8(ioport8_t *port) |
{ |
asm volatile ("outb %0, %1\n" :: "a" (b), "d" (port)); |
uint8_t val; |
asm volatile ( |
"inb %w[port], %b[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
static inline void outw(int16_t port, int16_t w) |
static inline uint16_t pio_read_16(ioport16_t *port) |
{ |
asm volatile ("outw %0, %1\n" :: "a" (w), "d" (port)); |
uint16_t val; |
asm volatile ( |
"inw %w[port], %w[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
static inline void outl(int16_t port, uint32_t l) |
static inline uint32_t pio_read_32(ioport32_t *port) |
{ |
asm volatile ("outl %0, %1\n" :: "a" (l), "d" (port)); |
uint32_t val; |
asm volatile ( |
"inl %w[port], %[val]\n" |
: [val] "=a" (val) |
: [port] "d" (port) |
); |
return val; |
} |
static inline uint8_t inb(int16_t port) |
static inline void pio_write_8(ioport8_t *port, uint8_t val) |
{ |
uint8_t val; |
asm volatile ("inb %1, %0 \n" : "=a" (val) : "d"(port)); |
return val; |
asm volatile ( |
"outb %b[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
static inline int16_t inw(int16_t port) |
static inline void pio_write_16(ioport16_t *port, uint16_t val) |
{ |
int16_t val; |
asm volatile ("inw %1, %0 \n" : "=a" (val) : "d"(port)); |
return val; |
asm volatile ( |
"outw %w[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
static inline uint32_t inl(int16_t port) |
static inline void pio_write_32(ioport32_t *port, uint32_t val) |
{ |
uint32_t val; |
asm volatile ("inl %1, %0 \n" : "=a" (val) : "d"(port)); |
return val; |
asm volatile ( |
"outl %[val], %w[port]\n" |
:: [val] "a" (val), [port] "d" (port) |
); |
} |
#endif |
//branches/tracing/uspace/lib/libc/arch/ia32/include/types.h |
---|
47,6 → 47,11 |
typedef unsigned int uint32_t; |
typedef unsigned long long int uint64_t; |
typedef int32_t ssize_t; |
typedef uint32_t size_t; |
typedef uint32_t count_t; |
typedef uint32_t index_t; |
typedef uint32_t uintptr_t; |
#endif |
//branches/tracing/uspace/lib/libc/arch/ia32/Makefile.inc |
---|
29,17 → 29,13 |
## Toolchain configuration |
# |
ifndef CROSS_PREFIX |
CROSS_PREFIX = /usr/local |
endif |
TARGET = i686-pc-linux-gnu |
TOOLCHAIN_DIR = $(CROSS_PREFIX)/i686/bin |
ARCH_SOURCES += arch/$(ARCH)/src/syscall.S \ |
arch/$(ARCH)/src/fibril.S \ |
arch/$(ARCH)/src/tls.c \ |
arch/$(ARCH)/src/setjmp.S |
ARCH_SOURCES += arch/$(UARCH)/src/syscall.S \ |
arch/$(UARCH)/src/fibril.S \ |
arch/$(UARCH)/src/tls.c \ |
arch/$(UARCH)/src/setjmp.S |
LFLAGS += -N |
//branches/tracing/uspace/srv/kbd/arch/ia32/src/kbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia32/src/scanc.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia32/src/mouse.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia32/include/scanc.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia32/include/kbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/sparc64/include/scanc.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/sparc64/include/sgcn.h |
---|
File deleted |
\ No newline at end of file |
//branches/tracing/uspace/srv/kbd/arch/sparc64/include/kbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/sparc64/src/scanc.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/sparc64/src/sgcn.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/sparc64/src/kbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia64/include/scanc.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia64/include/lkbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia64/include/kbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia64/src/scanc.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia64/src/mouse.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia64/src/lkbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ia64/src/kbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/arm32/include/kbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/arm32/src/kbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/arm32/src/kbd_gxemul.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/mips32eb |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/uspace/srv/kbd/arch/ppc32/include/kbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ppc32/src/kbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/amd64 |
---|
File deleted |
\ No newline at end of file |
Property changes: |
Deleted: svn:special |
-* |
\ No newline at end of property |
//branches/tracing/uspace/srv/kbd/arch/ppc64/src/kbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/ppc64/include/kbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/mips32/include/kbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/arch/mips32/src/kbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/ctl/pc.c |
---|
0,0 → 1,231 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_ctl |
* @ingroup kbd |
* @{ |
*/ |
/** |
* @file |
* @brief PC keyboard controller driver. |
*/ |
#include <kbd.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <kbd_ctl.h> |
#include <gsp.h> |
enum dec_state { |
ds_s, |
ds_e |
}; |
static enum dec_state ds; |
static int scanmap_simple[] = { |
[0x29] = KC_BACKTICK, |
[0x02] = KC_1, |
[0x03] = KC_2, |
[0x04] = KC_3, |
[0x05] = KC_4, |
[0x06] = KC_5, |
[0x07] = KC_6, |
[0x08] = KC_7, |
[0x09] = KC_8, |
[0x0a] = KC_9, |
[0x0b] = KC_0, |
[0x0c] = KC_MINUS, |
[0x0d] = KC_EQUALS, |
[0x0e] = KC_BACKSPACE, |
[0x0f] = KC_TAB, |
[0x10] = KC_Q, |
[0x11] = KC_W, |
[0x12] = KC_E, |
[0x13] = KC_R, |
[0x14] = KC_T, |
[0x15] = KC_Y, |
[0x16] = KC_U, |
[0x17] = KC_I, |
[0x18] = KC_O, |
[0x19] = KC_P, |
[0x1a] = KC_LBRACKET, |
[0x1b] = KC_RBRACKET, |
[0x3a] = KC_CAPS_LOCK, |
[0x1e] = KC_A, |
[0x1f] = KC_S, |
[0x20] = KC_D, |
[0x21] = KC_F, |
[0x22] = KC_G, |
[0x23] = KC_H, |
[0x24] = KC_J, |
[0x25] = KC_K, |
[0x26] = KC_L, |
[0x27] = KC_SEMICOLON, |
[0x28] = KC_QUOTE, |
[0x2b] = KC_BACKSLASH, |
[0x2a] = KC_LSHIFT, |
[0x2c] = KC_Z, |
[0x2d] = KC_X, |
[0x2e] = KC_C, |
[0x2f] = KC_V, |
[0x30] = KC_B, |
[0x31] = KC_N, |
[0x32] = KC_M, |
[0x33] = KC_COMMA, |
[0x34] = KC_PERIOD, |
[0x35] = KC_SLASH, |
[0x36] = KC_RSHIFT, |
[0x1d] = KC_LCTRL, |
[0x38] = KC_LALT, |
[0x39] = KC_SPACE, |
[0x01] = KC_ESCAPE, |
[0x3b] = KC_F1, |
[0x3c] = KC_F2, |
[0x3d] = KC_F3, |
[0x3e] = KC_F4, |
[0x3f] = KC_F5, |
[0x40] = KC_F6, |
[0x41] = KC_F7, |
[0x42] = KC_F8, |
[0x43] = KC_F9, |
[0x44] = KC_F10, |
[0x57] = KC_F11, |
[0x58] = KC_F12, |
[0x46] = KC_SCROLL_LOCK, |
[0x1c] = KC_ENTER, |
[0x45] = KC_NUM_LOCK, |
[0x37] = KC_NTIMES, |
[0x4a] = KC_NMINUS, |
[0x4e] = KC_NPLUS, |
[0x47] = KC_N7, |
[0x48] = KC_N8, |
[0x49] = KC_N9, |
[0x4b] = KC_N4, |
[0x4c] = KC_N5, |
[0x4d] = KC_N6, |
[0x4f] = KC_N1, |
[0x50] = KC_N2, |
[0x51] = KC_N3, |
[0x52] = KC_N0, |
[0x53] = KC_NPERIOD |
}; |
static int scanmap_e0[] = { |
[0x38] = KC_RALT, |
[0x1d] = KC_RSHIFT, |
[0x37] = KC_PRTSCR, |
[0x52] = KC_INSERT, |
[0x47] = KC_HOME, |
[0x49] = KC_PAGE_UP, |
[0x53] = KC_DELETE, |
[0x4f] = KC_END, |
[0x51] = KC_PAGE_DOWN, |
[0x48] = KC_UP, |
[0x4b] = KC_LEFT, |
[0x50] = KC_DOWN, |
[0x4d] = KC_RIGHT, |
[0x35] = KC_NSLASH, |
[0x1c] = KC_NENTER |
}; |
int kbd_ctl_init(void) |
{ |
ds = ds_s; |
return 0; |
} |
void kbd_ctl_parse_scancode(int scancode) |
{ |
kbd_ev_type_t type; |
unsigned int key; |
int *map; |
size_t map_length; |
if (scancode == 0xe0) { |
ds = ds_e; |
return; |
} |
switch (ds) { |
case ds_s: |
map = scanmap_simple; |
map_length = sizeof(scanmap_simple) / sizeof(int); |
break; |
case ds_e: |
map = scanmap_e0; |
map_length = sizeof(scanmap_e0) / sizeof(int); |
break; |
} |
ds = ds_s; |
if (scancode & 0x80) { |
scancode &= ~0x80; |
type = KE_RELEASE; |
} else { |
type = KE_PRESS; |
} |
if (scancode < 0 || scancode >= map_length) |
return; |
key = map[scancode]; |
if (key != 0) |
kbd_push_ev(type, key); |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/ctl/stty.c |
---|
0,0 → 1,229 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_ctl |
* @ingroup kbd |
* @{ |
*/ |
/** |
* @file |
* @brief Serial TTY-like keyboard controller driver. |
*/ |
#include <kbd.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <kbd_ctl.h> |
#include <gsp.h> |
#include <stroke.h> |
/** Scancode parser */ |
static gsp_t sp; |
/** Current parser state */ |
static int ds; |
#include <stdio.h> |
int seq_defs[] = { |
/* Not shifted */ |
0, KC_BACKTICK, 0x60, GSP_END, |
0, KC_1, 0x31, GSP_END, |
0, KC_2, 0x32, GSP_END, |
0, KC_3, 0x33, GSP_END, |
0, KC_4, 0x34, GSP_END, |
0, KC_5, 0x35, GSP_END, |
0, KC_6, 0x36, GSP_END, |
0, KC_7, 0x37, GSP_END, |
0, KC_8, 0x38, GSP_END, |
0, KC_9, 0x39, GSP_END, |
0, KC_0, 0x30, GSP_END, |
0, KC_MINUS, 0x2d, GSP_END, |
0, KC_EQUALS, 0x3d, GSP_END, |
0, KC_BACKSPACE, 0x08, GSP_END, |
0, KC_TAB, 0x09, GSP_END, |
0, KC_Q, 0x71, GSP_END, |
0, KC_W, 0x77, GSP_END, |
0, KC_E, 0x65, GSP_END, |
0, KC_R, 0x72, GSP_END, |
0, KC_T, 0x74, GSP_END, |
0, KC_Y, 0x79, GSP_END, |
0, KC_U, 0x75, GSP_END, |
0, KC_I, 0x69, GSP_END, |
0, KC_O, 0x6f, GSP_END, |
0, KC_P, 0x70, GSP_END, |
0, KC_LBRACKET, 0x5b, GSP_END, |
0, KC_RBRACKET, 0x5d, GSP_END, |
0, KC_A, 0x61, GSP_END, |
0, KC_S, 0x73, GSP_END, |
0, KC_D, 0x64, GSP_END, |
0, KC_F, 0x66, GSP_END, |
0, KC_G, 0x67, GSP_END, |
0, KC_H, 0x68, GSP_END, |
0, KC_J, 0x6a, GSP_END, |
0, KC_K, 0x6b, GSP_END, |
0, KC_L, 0x6c, GSP_END, |
0, KC_SEMICOLON, 0x3b, GSP_END, |
0, KC_QUOTE, 0x27, GSP_END, |
0, KC_BACKSLASH, 0x5c, GSP_END, |
0, KC_Z, 0x7a, GSP_END, |
0, KC_X, 0x78, GSP_END, |
0, KC_C, 0x63, GSP_END, |
0, KC_V, 0x76, GSP_END, |
0, KC_B, 0x62, GSP_END, |
0, KC_N, 0x6e, GSP_END, |
0, KC_M, 0x6d, GSP_END, |
0, KC_COMMA, 0x2c, GSP_END, |
0, KC_PERIOD, 0x2e, GSP_END, |
0, KC_SLASH, 0x2f, GSP_END, |
/* Shifted */ |
KM_SHIFT, KC_BACKTICK, 0x7e, GSP_END, |
KM_SHIFT, KC_1, 0x21, GSP_END, |
KM_SHIFT, KC_2, 0x40, GSP_END, |
KM_SHIFT, KC_3, 0x23, GSP_END, |
KM_SHIFT, KC_4, 0x24, GSP_END, |
KM_SHIFT, KC_5, 0x25, GSP_END, |
KM_SHIFT, KC_6, 0x5e, GSP_END, |
KM_SHIFT, KC_7, 0x26, GSP_END, |
KM_SHIFT, KC_8, 0x2a, GSP_END, |
KM_SHIFT, KC_9, 0x28, GSP_END, |
KM_SHIFT, KC_0, 0x29, GSP_END, |
KM_SHIFT, KC_MINUS, 0x5f, GSP_END, |
KM_SHIFT, KC_EQUALS, 0x2b, GSP_END, |
KM_SHIFT, KC_Q, 0x51, GSP_END, |
KM_SHIFT, KC_W, 0x57, GSP_END, |
KM_SHIFT, KC_E, 0x45, GSP_END, |
KM_SHIFT, KC_R, 0x52, GSP_END, |
KM_SHIFT, KC_T, 0x54, GSP_END, |
KM_SHIFT, KC_Y, 0x59, GSP_END, |
KM_SHIFT, KC_U, 0x55, GSP_END, |
KM_SHIFT, KC_I, 0x49, GSP_END, |
KM_SHIFT, KC_O, 0x4f, GSP_END, |
KM_SHIFT, KC_P, 0x50, GSP_END, |
KM_SHIFT, KC_LBRACKET, 0x7b, GSP_END, |
KM_SHIFT, KC_RBRACKET, 0x7d, GSP_END, |
KM_SHIFT, KC_A, 0x41, GSP_END, |
KM_SHIFT, KC_S, 0x53, GSP_END, |
KM_SHIFT, KC_D, 0x44, GSP_END, |
KM_SHIFT, KC_F, 0x46, GSP_END, |
KM_SHIFT, KC_G, 0x47, GSP_END, |
KM_SHIFT, KC_H, 0x48, GSP_END, |
KM_SHIFT, KC_J, 0x4a, GSP_END, |
KM_SHIFT, KC_K, 0x4b, GSP_END, |
KM_SHIFT, KC_L, 0x4c, GSP_END, |
KM_SHIFT, KC_SEMICOLON, 0x3a, GSP_END, |
KM_SHIFT, KC_QUOTE, 0x22, GSP_END, |
KM_SHIFT, KC_BACKSLASH, 0x7c, GSP_END, |
KM_SHIFT, KC_Z, 0x5a, GSP_END, |
KM_SHIFT, KC_X, 0x58, GSP_END, |
KM_SHIFT, KC_C, 0x43, GSP_END, |
KM_SHIFT, KC_V, 0x56, GSP_END, |
KM_SHIFT, KC_B, 0x42, GSP_END, |
KM_SHIFT, KC_N, 0x4e, GSP_END, |
KM_SHIFT, KC_M, 0x4d, GSP_END, |
KM_SHIFT, KC_COMMA, 0x3c, GSP_END, |
KM_SHIFT, KC_PERIOD, 0x3e, GSP_END, |
KM_SHIFT, KC_SLASH, 0x3f, GSP_END, |
/* ... */ |
0, KC_SPACE, 0x20, GSP_END, |
0, KC_ENTER, 0x0a, GSP_END, |
0, KC_ENTER, 0x0d, GSP_END, |
0, KC_ESCAPE, 0x1b, 0x1b, GSP_END, |
0, KC_F1, 0x1b, 0x4f, 0x50, GSP_END, |
0, KC_F2, 0x1b, 0x4f, 0x51, GSP_END, |
0, KC_F3, 0x1b, 0x4f, 0x52, GSP_END, |
0, KC_F4, 0x1b, 0x4f, 0x53, GSP_END, |
0, KC_F5, 0x1b, 0x5b, 0x31, 0x35, 0x7e, GSP_END, |
0, KC_F6, 0x1b, 0x5b, 0x31, 0x37, 0x7e, GSP_END, |
0, KC_F7, 0x1b, 0x5b, 0x31, 0x38, 0x7e, GSP_END, |
0, KC_F8, 0x1b, 0x5b, 0x31, 0x39, 0x7e, GSP_END, |
0, KC_F9, 0x1b, 0x5b, 0x32, 0x30, 0x7e, GSP_END, |
0, KC_F10, 0x1b, 0x5b, 0x32, 0x31, 0x7e, GSP_END, |
0, KC_F11, 0x1b, 0x5b, 0x32, 0x33, 0x7e, GSP_END, |
0, KC_F12, 0x1b, 0x5b, 0x32, 0x34, 0x7e, GSP_END, |
0, KC_INSERT, 0x1b, 0x5b, 0x32, 0x7e, GSP_END, |
0, KC_HOME, 0x1b, 0x5b, 0x48, GSP_END, |
0, KC_PAGE_UP, 0x1b, 0x5b, 0x35, 0x7e, GSP_END, |
0, KC_DELETE, 0x1b, 0x5b, 0x33, 0x7e, GSP_END, |
0, KC_END, 0x1b, 0x5b, 0x46, GSP_END, |
0, KC_PAGE_DOWN, 0x1b, 0x5b, 0x36, 0x7e, GSP_END, |
0, KC_UP, 0x1b, 0x5b, 0x41, GSP_END, |
0, KC_LEFT, 0x1b, 0x5b, 0x44, GSP_END, |
0, KC_DOWN, 0x1b, 0x5b, 0x42, GSP_END, |
0, KC_RIGHT, 0x1b, 0x5b, 0x43, GSP_END, |
0, 0 |
}; |
int kbd_ctl_init(void) |
{ |
ds = 0; |
gsp_init(&sp); |
return gsp_insert_defs(&sp, seq_defs); |
} |
void kbd_ctl_parse_scancode(int scancode) |
{ |
unsigned mods, key; |
ds = gsp_step(&sp, ds, scancode, &mods, &key); |
if (key != 0) { |
stroke_sim(mods, key); |
} |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/ctl/sun.c |
---|
0,0 → 1,209 |
/* |
* Copyright (c) 2006 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_ctl |
* @ingroup kbd |
* @{ |
*/ |
/** |
* @file |
* @brief Sun keyboard controller driver. |
*/ |
#include <kbd.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <kbd_ctl.h> |
#define KBD_KEY_RELEASE 0x80 |
#define KBD_ALL_KEYS_UP 0x7f |
static int scanmap_simple[]; |
int kbd_ctl_init(void) |
{ |
return 0; |
} |
void kbd_ctl_parse_scancode(int scancode) |
{ |
kbd_ev_type_t type; |
unsigned int key; |
if (scancode < 0 || scancode >= 0x100) |
return; |
if (scancode == KBD_ALL_KEYS_UP) |
return; |
if (scancode & KBD_KEY_RELEASE) { |
scancode &= ~KBD_KEY_RELEASE; |
type = KE_RELEASE; |
} else { |
type = KE_PRESS; |
} |
key = scanmap_simple[scancode]; |
if (key != 0) |
kbd_push_ev(type, key); |
} |
/** Primary meaning of scancodes. */ |
static int scanmap_simple[] = { |
[0x00] = 0, |
[0x01] = 0, |
[0x02] = 0, |
[0x03] = 0, |
[0x04] = 0, |
[0x05] = KC_F1, |
[0x06] = KC_F2, |
[0x07] = KC_F10, |
[0x08] = KC_F3, |
[0x09] = KC_F11, |
[0x0a] = KC_F4, |
[0x0b] = KC_F12, |
[0x0c] = KC_F5, |
[0x0d] = KC_RALT, |
[0x0e] = KC_F6, |
[0x0f] = 0, |
[0x10] = KC_F7, |
[0x11] = KC_F8, |
[0x12] = KC_F9, |
[0x13] = KC_LALT, |
[0x14] = KC_UP, |
[0x15] = KC_PAUSE, |
[0x16] = 0, |
[0x17] = KC_SCROLL_LOCK, |
[0x18] = KC_LEFT, |
[0x19] = 0, |
[0x1a] = 0, |
[0x1b] = KC_DOWN, |
[0x1c] = KC_RIGHT, |
[0x1d] = KC_ESCAPE, |
[0x1e] = KC_1, |
[0x1f] = KC_2, |
[0x20] = KC_3, |
[0x21] = KC_4, |
[0x22] = KC_5, |
[0x23] = KC_6, |
[0x24] = KC_7, |
[0x25] = KC_8, |
[0x26] = KC_9, |
[0x27] = KC_0, |
[0x28] = KC_MINUS, |
[0x29] = KC_EQUALS, |
[0x2a] = KC_BACKTICK, |
[0x2b] = KC_BACKSPACE, |
[0x2c] = KC_INSERT, |
[0x2d] = 0, |
[0x2e] = KC_NSLASH, |
[0x2f] = KC_NTIMES, |
[0x30] = 0, |
[0x31] = 0, |
[0x32] = KC_NPERIOD, |
[0x33] = 0, |
[0x34] = KC_HOME, |
[0x35] = KC_TAB, |
[0x36] = KC_Q, |
[0x37] = KC_W, |
[0x38] = KC_E, |
[0x39] = KC_R, |
[0x3a] = KC_T, |
[0x3b] = KC_Y, |
[0x3c] = KC_U, |
[0x3d] = KC_I, |
[0x3e] = KC_O, |
[0x3f] = KC_P, |
[0x40] = KC_LBRACKET, |
[0x41] = KC_RBRACKET, |
[0x42] = KC_DELETE, |
[0x43] = 0, |
[0x44] = KC_N7, |
[0x45] = KC_N8, |
[0x46] = KC_N9, |
[0x47] = KC_NMINUS, |
[0x48] = 0, |
[0x49] = 0, |
[0x4a] = KC_END, |
[0x4b] = 0, |
[0x4c] = KC_LCTRL, |
[0x4d] = KC_A, |
[0x4e] = KC_S, |
[0x4f] = KC_D, |
[0x50] = KC_F, |
[0x51] = KC_G, |
[0x52] = KC_H, |
[0x53] = KC_J, |
[0x54] = KC_K, |
[0x55] = KC_L, |
[0x56] = KC_SEMICOLON, |
[0x57] = KC_QUOTE, |
[0x58] = KC_BACKSLASH, |
[0x59] = KC_ENTER, |
[0x5a] = KC_NENTER, |
[0x5b] = KC_N4, |
[0x5c] = KC_N5, |
[0x5d] = KC_N6, |
[0x5e] = KC_N0, |
[0x5f] = 0, |
[0x60] = KC_PAGE_UP, |
[0x61] = 0, |
[0x62] = KC_NUM_LOCK, |
[0x63] = KC_LSHIFT, |
[0x64] = KC_Z, |
[0x65] = KC_X, |
[0x66] = KC_C, |
[0x67] = KC_V, |
[0x68] = KC_B, |
[0x69] = KC_N, |
[0x6a] = KC_M, |
[0x6b] = KC_COMMA, |
[0x6c] = KC_PERIOD, |
[0x6d] = KC_SLASH, |
[0x6e] = KC_RSHIFT, |
[0x6f] = 0, |
[0x70] = KC_N1, |
[0x71] = KC_N2, |
[0x72] = KC_N3, |
[0x73] = 0, |
[0x74] = 0, |
[0x75] = 0, |
[0x76] = 0, |
[0x77] = KC_CAPS_LOCK, |
[0x78] = 0, |
[0x79] = KC_SPACE, |
[0x7a] = 0, |
[0x7b] = KC_PAGE_DOWN, |
[0x7c] = 0, |
[0x7d] = KC_NPLUS, |
[0x7e] = 0, |
[0x7f] = 0 |
}; |
/** @} |
*/ |
//branches/tracing/uspace/srv/kbd/ctl/gxe_fb.c |
---|
0,0 → 1,229 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_ctl |
* @ingroup kbd |
* @{ |
*/ |
/** |
* @file |
* @brief GXEmul framebuffer-mode keyboard controller driver. |
*/ |
#include <kbd.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <kbd_ctl.h> |
#include <gsp.h> |
#include <stroke.h> |
/** Scancode parser */ |
static gsp_t sp; |
/** Current parser state */ |
static int ds; |
#include <stdio.h> |
int seq_defs[] = { |
/* Not shifted */ |
0, KC_BACKTICK, 0x60, GSP_END, |
0, KC_1, 0x31, GSP_END, |
0, KC_2, 0x32, GSP_END, |
0, KC_3, 0x33, GSP_END, |
0, KC_4, 0x34, GSP_END, |
0, KC_5, 0x35, GSP_END, |
0, KC_6, 0x36, GSP_END, |
0, KC_7, 0x37, GSP_END, |
0, KC_8, 0x38, GSP_END, |
0, KC_9, 0x39, GSP_END, |
0, KC_0, 0x30, GSP_END, |
0, KC_MINUS, 0x2d, GSP_END, |
0, KC_EQUALS, 0x3d, GSP_END, |
0, KC_BACKSPACE, 0x08, GSP_END, |
0, KC_TAB, 0x09, GSP_END, |
0, KC_Q, 0x71, GSP_END, |
0, KC_W, 0x77, GSP_END, |
0, KC_E, 0x65, GSP_END, |
0, KC_R, 0x72, GSP_END, |
0, KC_T, 0x74, GSP_END, |
0, KC_Y, 0x79, GSP_END, |
0, KC_U, 0x75, GSP_END, |
0, KC_I, 0x69, GSP_END, |
0, KC_O, 0x6f, GSP_END, |
0, KC_P, 0x70, GSP_END, |
0, KC_LBRACKET, 0x5b, GSP_END, |
0, KC_RBRACKET, 0x5d, GSP_END, |
0, KC_A, 0x61, GSP_END, |
0, KC_S, 0x73, GSP_END, |
0, KC_D, 0x64, GSP_END, |
0, KC_F, 0x66, GSP_END, |
0, KC_G, 0x67, GSP_END, |
0, KC_H, 0x68, GSP_END, |
0, KC_J, 0x6a, GSP_END, |
0, KC_K, 0x6b, GSP_END, |
0, KC_L, 0x6c, GSP_END, |
0, KC_SEMICOLON, 0x3b, GSP_END, |
0, KC_QUOTE, 0x27, GSP_END, |
0, KC_BACKSLASH, 0x5c, GSP_END, |
0, KC_Z, 0x7a, GSP_END, |
0, KC_X, 0x78, GSP_END, |
0, KC_C, 0x63, GSP_END, |
0, KC_V, 0x76, GSP_END, |
0, KC_B, 0x62, GSP_END, |
0, KC_N, 0x6e, GSP_END, |
0, KC_M, 0x6d, GSP_END, |
0, KC_COMMA, 0x2c, GSP_END, |
0, KC_PERIOD, 0x2e, GSP_END, |
0, KC_SLASH, 0x2f, GSP_END, |
/* Shifted */ |
KM_SHIFT, KC_BACKTICK, 0x7e, GSP_END, |
KM_SHIFT, KC_1, 0x21, GSP_END, |
KM_SHIFT, KC_2, 0x40, GSP_END, |
KM_SHIFT, KC_3, 0x23, GSP_END, |
KM_SHIFT, KC_4, 0x24, GSP_END, |
KM_SHIFT, KC_5, 0x25, GSP_END, |
KM_SHIFT, KC_6, 0x5e, GSP_END, |
KM_SHIFT, KC_7, 0x26, GSP_END, |
KM_SHIFT, KC_8, 0x2a, GSP_END, |
KM_SHIFT, KC_9, 0x28, GSP_END, |
KM_SHIFT, KC_0, 0x29, GSP_END, |
KM_SHIFT, KC_MINUS, 0x5f, GSP_END, |
KM_SHIFT, KC_EQUALS, 0x2b, GSP_END, |
KM_SHIFT, KC_Q, 0x51, GSP_END, |
KM_SHIFT, KC_W, 0x57, GSP_END, |
KM_SHIFT, KC_E, 0x45, GSP_END, |
KM_SHIFT, KC_R, 0x52, GSP_END, |
KM_SHIFT, KC_T, 0x54, GSP_END, |
KM_SHIFT, KC_Y, 0x59, GSP_END, |
KM_SHIFT, KC_U, 0x55, GSP_END, |
KM_SHIFT, KC_I, 0x49, GSP_END, |
KM_SHIFT, KC_O, 0x4f, GSP_END, |
KM_SHIFT, KC_P, 0x50, GSP_END, |
KM_SHIFT, KC_LBRACKET, 0x7b, GSP_END, |
KM_SHIFT, KC_RBRACKET, 0x7d, GSP_END, |
KM_SHIFT, KC_A, 0x41, GSP_END, |
KM_SHIFT, KC_S, 0x53, GSP_END, |
KM_SHIFT, KC_D, 0x44, GSP_END, |
KM_SHIFT, KC_F, 0x46, GSP_END, |
KM_SHIFT, KC_G, 0x47, GSP_END, |
KM_SHIFT, KC_H, 0x48, GSP_END, |
KM_SHIFT, KC_J, 0x4a, GSP_END, |
KM_SHIFT, KC_K, 0x4b, GSP_END, |
KM_SHIFT, KC_L, 0x4c, GSP_END, |
KM_SHIFT, KC_SEMICOLON, 0x3a, GSP_END, |
KM_SHIFT, KC_QUOTE, 0x22, GSP_END, |
KM_SHIFT, KC_BACKSLASH, 0x7c, GSP_END, |
KM_SHIFT, KC_Z, 0x5a, GSP_END, |
KM_SHIFT, KC_X, 0x58, GSP_END, |
KM_SHIFT, KC_C, 0x43, GSP_END, |
KM_SHIFT, KC_V, 0x56, GSP_END, |
KM_SHIFT, KC_B, 0x42, GSP_END, |
KM_SHIFT, KC_N, 0x4e, GSP_END, |
KM_SHIFT, KC_M, 0x4d, GSP_END, |
KM_SHIFT, KC_COMMA, 0x3c, GSP_END, |
KM_SHIFT, KC_PERIOD, 0x3e, GSP_END, |
KM_SHIFT, KC_SLASH, 0x3f, GSP_END, |
/* ... */ |
0, KC_SPACE, 0x20, GSP_END, |
0, KC_ENTER, 0x0a, GSP_END, |
0, KC_ENTER, 0x0d, GSP_END, |
0, KC_ESCAPE, 0x1b, 0x1b, GSP_END, |
0, KC_F1, 0x1b, 0x5b, 0x4f, 0x50, GSP_END, |
0, KC_F2, 0x1b, 0x5b, 0x4f, 0x51, GSP_END, |
0, KC_F3, 0x1b, 0x5b, 0x4f, 0x52, GSP_END, |
0, KC_F4, 0x1b, 0x5b, 0x4f, 0x53, GSP_END, |
0, KC_F5, 0x1b, 0x5b, 0x31, 0x35, GSP_END, |
0, KC_F6, 0x1b, 0x5b, 0x31, 0x37, GSP_END, |
0, KC_F7, 0x1b, 0x5b, 0x31, 0x38, GSP_END, |
0, KC_F8, 0x1b, 0x5b, 0x31, 0x39, GSP_END, |
0, KC_F9, 0x1b, 0x5b, 0x32, 0x38, GSP_END, |
0, KC_F10, 0x1b, 0x5b, 0x32, 0x39, GSP_END, |
0, KC_F11, 0x1b, 0x5b, 0x32, 0x33, GSP_END, |
0, KC_F12, 0x1b, 0x5b, 0x32, 0x34, GSP_END, |
0, KC_INSERT, 0x1b, 0x5b, 0x32, 0x7e, GSP_END, |
0, KC_HOME, 0x1b, 0x5b, 0x48, GSP_END, |
0, KC_PAGE_UP, 0x1b, 0x5b, 0x35, 0x7e, GSP_END, |
0, KC_DELETE, 0x1b, 0x5b, 0x33, 0x7e, GSP_END, |
0, KC_END, 0x1b, 0x5b, 0x46, GSP_END, |
0, KC_PAGE_DOWN, 0x1b, 0x5b, 0x36, 0x7e, GSP_END, |
0, KC_UP, 0x1b, 0x5b, 0x41, GSP_END, |
0, KC_LEFT, 0x1b, 0x5b, 0x44, GSP_END, |
0, KC_DOWN, 0x1b, 0x5b, 0x42, GSP_END, |
0, KC_RIGHT, 0x1b, 0x5b, 0x43, GSP_END, |
0, 0 |
}; |
int kbd_ctl_init(void) |
{ |
ds = 0; |
gsp_init(&sp); |
return gsp_insert_defs(&sp, seq_defs); |
} |
void kbd_ctl_parse_scancode(int scancode) |
{ |
unsigned mods, key; |
ds = gsp_step(&sp, ds, scancode, &mods, &key); |
if (key != 0) { |
stroke_sim(mods, key); |
} |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/include/keys.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/include/gsp.h |
---|
0,0 → 1,84 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbdgen generic |
* @brief Generic scancode parser. |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KBD_GSP_H_ |
#define KBD_GSP_H_ |
#include <libadt/hash_table.h> |
enum { |
GSP_END = -1, /**< Terminates a sequence. */ |
GSP_DEFAULT = -2 /**< Wildcard, catches unhandled cases. */ |
}; |
/** Scancode parser description */ |
typedef struct { |
/** Transition table, (state, input) -> (state, output) */ |
hash_table_t trans; |
/** Number of states */ |
int states; |
} gsp_t; |
/** Scancode parser transition. */ |
typedef struct { |
link_t link; /**< Link to hash table in @c gsp_t */ |
/* Preconditions */ |
int old_state; /**< State before transition */ |
int input; /**< Input symbol (scancode) */ |
/* Effects */ |
int new_state; /**< State after transition */ |
/* Output emitted during transition */ |
unsigned out_mods; /**< Modifier to emit */ |
unsigned out_key; /**< Keycode to emit */ |
} gsp_trans_t; |
extern void gsp_init(gsp_t *); |
extern int gsp_insert_defs(gsp_t *, const int *); |
extern int gsp_insert_seq(gsp_t *, const int *, unsigned, unsigned); |
extern int gsp_step(gsp_t *, int, int, unsigned *, unsigned *); |
#endif |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/include/layout.h |
---|
0,0 → 1,57 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbdgen generic |
* @brief HelenOS generic uspace keyboard handler. |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KBD_LAYOUT_H_ |
#define KBD_LAYOUT_H_ |
#include <kbd/kbd.h> |
#include <sys/types.h> |
typedef struct { |
void (*reset)(void); |
wchar_t (*parse_ev)(kbd_event_t *); |
} layout_op_t; |
extern layout_op_t us_qwerty_op; |
extern layout_op_t us_dvorak_op; |
extern layout_op_t cz_op; |
#endif |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/include/kbd.h |
---|
38,11 → 38,25 |
#define KBD_KBD_H_ |
#include <key_buffer.h> |
#include <ipc/ipc.h> |
extern int kbd_arch_init(void); |
extern int kbd_arch_process(keybuffer_t *keybuffer, ipc_call_t *call); |
extern int mouse_arch_process(int phoneid, ipc_call_t *call); |
#define KBD_EVENT 1024 |
#define KBD_MS_LEFT 1025 |
#define KBD_MS_RIGHT 1026 |
#define KBD_MS_MIDDLE 1027 |
#define KBD_MS_MOVE 1028 |
typedef enum { |
KBD_YIELD = IPC_FIRST_USER_METHOD, |
KBD_RECLAIM |
} kbd_request_t; |
extern int cir_service; |
extern int cir_phone; |
extern void kbd_push_scancode(int); |
extern void kbd_push_ev(int, unsigned int); |
#endif |
/** |
//branches/tracing/uspace/srv/kbd/include/key_buffer.h |
---|
38,23 → 38,24 |
#define __KEY_BUFFER_H__ |
#include <sys/types.h> |
#include <kbd/kbd.h> |
/** Size of buffer for pressed keys */ |
#define KEYBUFFER_SIZE 128 |
typedef struct { |
int fifo[KEYBUFFER_SIZE]; |
kbd_event_t fifo[KEYBUFFER_SIZE]; |
unsigned long head; |
unsigned long tail; |
unsigned long items; |
} keybuffer_t; |
void keybuffer_free(keybuffer_t *keybuffer); |
void keybuffer_init(keybuffer_t *keybuffer); |
int keybuffer_available(keybuffer_t *keybuffer); |
int keybuffer_empty(keybuffer_t *keybuffer); |
void keybuffer_push(keybuffer_t *keybuffer, int key); |
int keybuffer_pop(keybuffer_t *keybuffer, int *c); |
extern void keybuffer_free(keybuffer_t *); |
extern void keybuffer_init(keybuffer_t *); |
extern int keybuffer_available(keybuffer_t *); |
extern int keybuffer_empty(keybuffer_t *); |
extern void keybuffer_push(keybuffer_t *, const kbd_event_t *); |
extern int keybuffer_pop(keybuffer_t *, kbd_event_t *); |
#endif |
//branches/tracing/uspace/srv/kbd/include/kbd_ctl.h |
---|
0,0 → 1,49 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbdgen generic |
* @brief HelenOS generic uspace keyboard handler. |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KBD_CTL_H_ |
#define KBD_CTL_H_ |
extern void kbd_ctl_parse_scancode(int); |
extern int kbd_ctl_init(void); |
#endif |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/include/kbd_port.h |
---|
0,0 → 1,49 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbdgen generic |
* @brief HelenOS generic uspace keyboard handler. |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KBD_PORT_H_ |
#define KBD_PORT_H_ |
extern int kbd_port_init(void); |
extern void kbd_port_yield(void); |
extern void kbd_port_reclaim(void); |
#endif |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/include/sun.h |
---|
0,0 → 1,47 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbdgen generic |
* @brief Sun keyboard virtual port driver. |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KBD_SUN_H_ |
#define KBD_SUN_H_ |
extern int ns16550_port_init(void); |
extern int z8530_port_init(void); |
#endif |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/include/stroke.h |
---|
0,0 → 1,47 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbdgen generic |
* @brief Generic scancode parser. |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
*/ |
#ifndef KBD_STROKE_H_ |
#define KBD_STROKE_H_ |
extern void stroke_sim(unsigned, unsigned); |
#endif |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/gxemul.c |
---|
0,0 → 1,95 |
/* |
* Copyright (c) 2007 Michal Kebrt |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @{ |
* @ingroup kbd |
*/ |
/** @file |
* @brief GXEmul keyboard port driver. |
*/ |
#include <ipc/ipc.h> |
#include <async.h> |
#include <sysinfo.h> |
#include <kbd_port.h> |
#include <kbd.h> |
#include <ddi.h> |
static irq_cmd_t gxemul_cmds[] = { |
{ |
.cmd = CMD_PIO_READ_8, |
.addr = (void *) 0, /* will be patched in run-time */ |
.dstarg = 2, |
}, |
{ |
.cmd = CMD_ACCEPT |
} |
}; |
static irq_code_t gxemul_kbd = { |
sizeof(gxemul_cmds) / sizeof(irq_cmd_t), |
gxemul_cmds |
}; |
static void gxemul_irq_handler(ipc_callid_t iid, ipc_call_t *call); |
/** Initializes keyboard handler. */ |
int kbd_port_init(void) |
{ |
async_set_interrupt_received(gxemul_irq_handler); |
gxemul_cmds[0].addr = (void *) sysinfo_value("kbd.address.virtual"); |
ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(), |
0, &gxemul_kbd); |
return 0; |
} |
void kbd_port_yield(void) |
{ |
} |
void kbd_port_reclaim(void) |
{ |
} |
/** Process data sent when a key is pressed. |
* |
* @param keybuffer Buffer of pressed keys. |
* @param call IPC call. |
* |
* @return Always 1. |
*/ |
static void gxemul_irq_handler(ipc_callid_t iid, ipc_call_t *call) |
{ |
int scan_code = IPC_GET_ARG2(*call); |
kbd_push_scancode(scan_code); |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/ns16550.c |
---|
0,0 → 1,129 |
/* |
* Copyright (c) 2006 Josef Cejka |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief NS16550 port driver. |
*/ |
#include <ipc/ipc.h> |
#include <ipc/bus.h> |
#include <async.h> |
#include <sysinfo.h> |
#include <kbd.h> |
#include <kbd_port.h> |
#include <sun.h> |
#include <ddi.h> |
/* NS16550 registers */ |
#define RBR_REG 0 /** Receiver Buffer Register. */ |
#define IER_REG 1 /** Interrupt Enable Register. */ |
#define IIR_REG 2 /** Interrupt Ident Register (read). */ |
#define FCR_REG 2 /** FIFO control register (write). */ |
#define LCR_REG 3 /** Line Control register. */ |
#define MCR_REG 4 /** Modem Control Register. */ |
#define LSR_REG 5 /** Line Status Register. */ |
#define LSR_DATA_READY 0x01 |
static irq_cmd_t ns16550_cmds[] = { |
{ |
.cmd = CMD_PIO_READ_8, |
.addr = (void *) 0, /* will be patched in run-time */ |
.dstarg = 1 |
}, |
{ |
.cmd = CMD_BTEST, |
.value = LSR_DATA_READY, |
.srcarg = 1, |
.dstarg = 3 |
}, |
{ |
.cmd = CMD_PREDICATE, |
.value = 2, |
.srcarg = 3 |
}, |
{ |
.cmd = CMD_PIO_READ_8, |
.addr = (void *) 0, /* will be patched in run-time */ |
.dstarg = 2 |
}, |
{ |
.cmd = CMD_ACCEPT |
} |
}; |
irq_code_t ns16550_kbd = { |
sizeof(ns16550_cmds) / sizeof(irq_cmd_t), |
ns16550_cmds |
}; |
static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call); |
static uintptr_t ns16550_physical; |
static uintptr_t ns16550_kernel; |
int ns16550_port_init(void) |
{ |
void *vaddr; |
async_set_interrupt_received(ns16550_irq_handler); |
ns16550_physical = sysinfo_value("kbd.address.physical"); |
ns16550_kernel = sysinfo_value("kbd.address.kernel"); |
ns16550_kbd.cmds[0].addr = (void *) (ns16550_kernel + LSR_REG); |
ns16550_kbd.cmds[3].addr = (void *) (ns16550_kernel + RBR_REG); |
ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(), |
sysinfo_value("kbd.inr"), &ns16550_kbd); |
return pio_enable((void *) ns16550_physical, 8, &vaddr); |
} |
void ns16550_port_yield(void) |
{ |
} |
void ns16550_port_reclaim(void) |
{ |
} |
static void ns16550_irq_handler(ipc_callid_t iid, ipc_call_t *call) |
{ |
int scan_code = IPC_GET_ARG2(*call); |
kbd_push_scancode(scan_code); |
if (cir_service) |
async_msg_1(cir_phone, BUS_CLEAR_INTERRUPT, |
IPC_GET_METHOD(*call)); |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/msim.c |
---|
0,0 → 1,87 |
/* |
* Copyright (c) 2006 Josef Cejka |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief Msim keyboard port driver. |
*/ |
#include <ipc/ipc.h> |
#include <async.h> |
#include <sysinfo.h> |
#include <kbd_port.h> |
#include <kbd.h> |
#include <ddi.h> |
irq_cmd_t msim_cmds[] = { |
{ |
.cmd = CMD_PIO_READ_8, |
.addr = (void *) 0, /* will be patched in run-time */ |
.dstarg = 2 |
}, |
{ |
.cmd = CMD_ACCEPT |
} |
}; |
irq_code_t msim_kbd = { |
sizeof(msim_cmds) / sizeof(irq_cmd_t), |
msim_cmds |
}; |
static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call); |
int kbd_port_init(void) |
{ |
async_set_interrupt_received(msim_irq_handler); |
msim_cmds[0].addr = sysinfo_value("kbd.address.virtual"); |
ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(), |
0, &msim_kbd); |
return 0; |
} |
void kbd_port_yield(void) |
{ |
} |
void kbd_port_reclaim(void) |
{ |
} |
static void msim_irq_handler(ipc_callid_t iid, ipc_call_t *call) |
{ |
int scan_code = IPC_GET_ARG2(*call); |
kbd_push_scancode(scan_code); |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/sun.c |
---|
0,0 → 1,74 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief Sun keyboard virtual port driver. |
*/ |
#include <kbd.h> |
#include <kbd_port.h> |
#include <sun.h> |
#include <sysinfo.h> |
/** Sun keyboard virtual port driver. |
* |
* This is a virtual port driver which can use |
* both ns16550_port_init and z8530_port_init |
* according to the information passed from the |
* kernel. This is just a temporal hack. |
* |
*/ |
int kbd_port_init(void) |
{ |
if (sysinfo_value("kbd.type.z8530")) { |
if (z8530_port_init() == 0) |
return 0; |
} |
if (sysinfo_value("kbd.type.ns16550")) { |
if (ns16550_port_init() == 0) |
return 0; |
} |
return -1; |
} |
void kbd_port_yield(void) |
{ |
} |
void kbd_port_reclaim(void) |
{ |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/i8042.c |
---|
0,0 → 1,177 |
/* |
* Copyright (c) 2001-2004 Jakub Jermar |
* Copyright (c) 2006 Josef Cejka |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief i8042 port driver. |
*/ |
#include <ddi.h> |
#include <libarch/ddi.h> |
#include <ipc/ipc.h> |
#include <async.h> |
#include <unistd.h> |
#include <sysinfo.h> |
#include <kbd_port.h> |
#include <kbd.h> |
#include <ddi.h> |
#include "i8042.h" |
/* Interesting bits for status register */ |
#define i8042_OUTPUT_FULL 0x1 |
#define i8042_INPUT_FULL 0x2 |
#define i8042_MOUSE_DATA 0x20 |
/* Command constants */ |
#define i8042_CMD_KBD 0x60 |
#define i8042_CMD_MOUSE 0xd4 |
/* Keyboard cmd byte */ |
#define i8042_KBD_IE 0x1 |
#define i8042_MOUSE_IE 0x2 |
#define i8042_KBD_DISABLE 0x10 |
#define i8042_MOUSE_DISABLE 0x20 |
#define i8042_KBD_TRANSLATE 0x40 |
/* Mouse constants */ |
#define MOUSE_OUT_INIT 0xf4 |
#define MOUSE_ACK 0xfa |
static irq_cmd_t i8042_cmds[] = { |
{ |
.cmd = CMD_PIO_READ_8, |
.addr = NULL, /* will be patched in run-time */ |
.dstarg = 1 |
}, |
{ |
.cmd = CMD_BTEST, |
.value = i8042_OUTPUT_FULL, |
.srcarg = 1, |
.dstarg = 3 |
}, |
{ |
.cmd = CMD_PREDICATE, |
.value = 2, |
.srcarg = 3 |
}, |
{ |
.cmd = CMD_PIO_READ_8, |
.addr = NULL, /* will be patched in run-time */ |
.dstarg = 2 |
}, |
{ |
.cmd = CMD_ACCEPT |
} |
}; |
static irq_code_t i8042_kbd = { |
sizeof(i8042_cmds) / sizeof(irq_cmd_t), |
i8042_cmds |
}; |
static uintptr_t i8042_physical; |
static uintptr_t i8042_kernel; |
static i8042_t * i8042; |
static void wait_ready(void) { |
while (pio_read_8(&i8042->status) & i8042_INPUT_FULL) |
; |
} |
static void i8042_irq_handler(ipc_callid_t iid, ipc_call_t *call); |
int kbd_port_init(void) |
{ |
int mouseenabled = 0; |
void *vaddr; |
i8042_physical = sysinfo_value("kbd.address.physical"); |
i8042_kernel = sysinfo_value("kbd.address.kernel"); |
if (pio_enable((void *) i8042_physical, sizeof(i8042_t), &vaddr) != 0) |
return -1; |
i8042 = vaddr; |
async_set_interrupt_received(i8042_irq_handler); |
/* Disable kbd, enable mouse */ |
pio_write_8(&i8042->status, i8042_CMD_KBD); |
wait_ready(); |
pio_write_8(&i8042->status, i8042_CMD_KBD); |
wait_ready(); |
pio_write_8(&i8042->data, i8042_KBD_DISABLE); |
wait_ready(); |
/* Flush all current IO */ |
while (pio_read_8(&i8042->status) & i8042_OUTPUT_FULL) |
(void) pio_read_8(&i8042->data); |
/* Enable kbd */ |
i8042_kbd.cmds[0].addr = &((i8042_t *) i8042_kernel)->status; |
i8042_kbd.cmds[3].addr = &((i8042_t *) i8042_kernel)->data; |
ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(), 0, &i8042_kbd); |
int newcontrol = i8042_KBD_IE | i8042_KBD_TRANSLATE; |
if (mouseenabled) |
newcontrol |= i8042_MOUSE_IE; |
pio_write_8(&i8042->status, i8042_CMD_KBD); |
wait_ready(); |
pio_write_8(&i8042->data, newcontrol); |
wait_ready(); |
return 0; |
} |
void kbd_port_yield(void) |
{ |
} |
void kbd_port_reclaim(void) |
{ |
} |
static void i8042_irq_handler(ipc_callid_t iid, ipc_call_t *call) |
{ |
int status = IPC_GET_ARG1(*call); |
if ((status & i8042_MOUSE_DATA)) |
return; |
int scan_code = IPC_GET_ARG2(*call); |
kbd_push_scancode(scan_code); |
return; |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/ski.c |
---|
0,0 → 1,123 |
/* |
* Copyright (c) 2005 Jakub Jermar |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief Ski console keyboard port driver. |
*/ |
#include <stdlib.h> |
#include <unistd.h> |
#include <kbd.h> |
#include <kbd_port.h> |
#include <sys/types.h> |
#include <thread.h> |
#include <bool.h> |
#define SKI_GETCHAR 21 |
#define POLL_INTERVAL 10000 |
static void *ski_thread_impl(void *arg); |
static int32_t ski_getchar(void); |
static volatile bool polling_disabled = false; |
/** Initialize Ski port driver. */ |
int kbd_port_init(void) |
{ |
thread_id_t tid; |
int rc; |
rc = thread_create(ski_thread_impl, NULL, "kbd_poll", &tid); |
if (rc != 0) { |
return rc; |
} |
return 0; |
} |
void kbd_port_yield(void) |
{ |
polling_disabled = true; |
} |
void kbd_port_reclaim(void) |
{ |
polling_disabled = false; |
} |
/** Thread to poll Ski for keypresses. */ |
static void *ski_thread_impl(void *arg) |
{ |
int32_t c; |
(void) arg; |
while (1) { |
while (polling_disabled == false) { |
c = ski_getchar(); |
if (c == 0) |
break; |
kbd_push_scancode(c); |
} |
usleep(POLL_INTERVAL); |
} |
} |
/** Ask Ski if a key was pressed. |
* |
* Use SSC (Simulator System Call) to get character from the debug console. |
* This call is non-blocking. |
* |
* @return ASCII code of pressed key or 0 if no key pressed. |
*/ |
static int32_t ski_getchar(void) |
{ |
uint64_t ch; |
asm volatile ( |
"mov r15 = %1\n" |
"break 0x80000;;\n" /* modifies r8 */ |
"mov %0 = r8;;\n" |
: "=r" (ch) |
: "i" (SKI_GETCHAR) |
: "r15", "r8" |
); |
return (int32_t) ch; |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/z8530.c |
---|
0,0 → 1,117 |
/* |
* Copyright (c) 2006 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief Z8530 keyboard port driver. |
*/ |
#include <ipc/ipc.h> |
#include <ipc/bus.h> |
#include <async.h> |
#include <sysinfo.h> |
#include <kbd.h> |
#include <kbd_port.h> |
#include <sun.h> |
#include <sys/types.h> |
#include <ddi.h> |
#define CHAN_A_STATUS 4 |
#define CHAN_A_DATA 6 |
#define RR0_RCA 1 |
static irq_cmd_t z8530_cmds[] = { |
{ |
.cmd = CMD_PIO_READ_8, |
.addr = (void *) 0, /* will be patched in run-time */ |
.dstarg = 1 |
}, |
{ |
.cmd = CMD_BTEST, |
.value = RR0_RCA, |
.srcarg = 1, |
.dstarg = 3 |
}, |
{ |
.cmd = CMD_PREDICATE, |
.value = 2, |
.srcarg = 3 |
}, |
{ |
.cmd = CMD_PIO_READ_8, |
.addr = (void *) 0, /* will be patched in run-time */ |
.dstarg = 2 |
}, |
{ |
.cmd = CMD_ACCEPT |
} |
}; |
irq_code_t z8530_kbd = { |
sizeof(z8530_cmds) / sizeof(irq_cmd_t), |
z8530_cmds |
}; |
static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call); |
int z8530_port_init(void) |
{ |
async_set_interrupt_received(z8530_irq_handler); |
z8530_cmds[0].addr = (void *) sysinfo_value("kbd.address.kernel") + |
CHAN_A_STATUS; |
z8530_cmds[3].addr = (void *) sysinfo_value("kbd.address.kernel") + |
CHAN_A_DATA; |
ipc_register_irq(sysinfo_value("kbd.inr"), device_assign_devno(), |
sysinfo_value("kbd.inr"), &z8530_kbd); |
return 0; |
} |
void z8530_port_yield(void) |
{ |
} |
void z8530_port_reclaim(void) |
{ |
} |
static void z8530_irq_handler(ipc_callid_t iid, ipc_call_t *call) |
{ |
int scan_code = IPC_GET_ARG2(*call); |
kbd_push_scancode(scan_code); |
if (cir_service) |
async_msg_1(cir_phone, BUS_CLEAR_INTERRUPT, |
IPC_GET_METHOD(*call)); |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/sgcn.c |
---|
0,0 → 1,176 |
/* |
* Copyright (c) 2008 Pavel Rimsky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief SGCN (Serengeti Console) keyboard port driver. |
*/ |
#include <as.h> |
#include <ddi.h> |
#include <async.h> |
#include <kbd.h> |
#include <kbd_port.h> |
#include <sysinfo.h> |
#include <stdio.h> |
#include <thread.h> |
#include <bool.h> |
#define POLL_INTERVAL 10000 |
/** |
* SGCN buffer header. It is placed at the very beginning of the SGCN |
* buffer. |
*/ |
typedef struct { |
/** hard-wired to "CON" */ |
char magic[4]; |
/** we don't need this */ |
char unused[8]; |
/** offset within the SGCN buffer of the input buffer start */ |
uint32_t in_begin; |
/** offset within the SGCN buffer of the input buffer end */ |
uint32_t in_end; |
/** offset within the SGCN buffer of the input buffer read pointer */ |
uint32_t in_rdptr; |
/** offset within the SGCN buffer of the input buffer write pointer */ |
uint32_t in_wrptr; |
} __attribute__ ((packed)) sgcn_buffer_header_t; |
/* |
* Returns a pointer to the object of a given type which is placed at the given |
* offset from the console buffer beginning. |
*/ |
#define SGCN_BUFFER(type, offset) \ |
((type *) (sram_virt_addr + sram_buffer_offset + (offset))) |
/** Returns a pointer to the console buffer header. */ |
#define SGCN_BUFFER_HEADER (SGCN_BUFFER(sgcn_buffer_header_t, 0)) |
/** |
* Virtual address mapped to SRAM. |
*/ |
static uintptr_t sram_virt_addr; |
/** |
* SGCN buffer offset within SGCN. |
*/ |
static uintptr_t sram_buffer_offset; |
/* polling thread */ |
static void *sgcn_thread_impl(void *arg); |
static volatile bool polling_disabled = false; |
/** |
* Initializes the SGCN driver. |
* Maps the physical memory (SRAM) and creates the polling thread. |
*/ |
int kbd_port_init(void) |
{ |
sram_virt_addr = (uintptr_t) as_get_mappable_page(sysinfo_value("sram.area.size")); |
if (physmem_map((void *) sysinfo_value("sram.address.physical"), |
(void *) sram_virt_addr, sysinfo_value("sram.area.size") / PAGE_SIZE, |
AS_AREA_READ | AS_AREA_WRITE) != 0) { |
printf("SGCN: uspace driver could not map physical memory."); |
return -1; |
} |
sram_buffer_offset = sysinfo_value("sram.buffer.offset"); |
thread_id_t tid; |
int rc; |
rc = thread_create(sgcn_thread_impl, NULL, "kbd_poll", &tid); |
if (rc != 0) { |
return rc; |
} |
return 0; |
} |
void kbd_port_yield(void) |
{ |
polling_disabled = true; |
} |
void kbd_port_reclaim(void) |
{ |
polling_disabled = false; |
} |
/** |
* Handler of the "key pressed" event. Reads codes of all the pressed keys from |
* the buffer. |
*/ |
static void sgcn_key_pressed(void) |
{ |
char c; |
uint32_t begin = SGCN_BUFFER_HEADER->in_begin; |
uint32_t end = SGCN_BUFFER_HEADER->in_end; |
uint32_t size = end - begin; |
volatile char *buf_ptr = (volatile char *) |
SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr); |
volatile uint32_t *in_wrptr_ptr = &(SGCN_BUFFER_HEADER->in_wrptr); |
volatile uint32_t *in_rdptr_ptr = &(SGCN_BUFFER_HEADER->in_rdptr); |
while (*in_rdptr_ptr != *in_wrptr_ptr) { |
c = *buf_ptr; |
*in_rdptr_ptr = (((*in_rdptr_ptr) - begin + 1) % size) + begin; |
buf_ptr = (volatile char *) |
SGCN_BUFFER(char, SGCN_BUFFER_HEADER->in_rdptr); |
kbd_push_scancode(c); |
} |
} |
/** |
* Thread to poll SGCN for keypresses. |
*/ |
static void *sgcn_thread_impl(void *arg) |
{ |
(void) arg; |
while (1) { |
if (polling_disabled == false) |
sgcn_key_pressed(); |
usleep(POLL_INTERVAL); |
} |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/dummy.c |
---|
0,0 → 1,54 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @brief Dummy keyboard port driver. |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
*/ |
#include <kbd_port.h> |
#include <kbd.h> |
int kbd_port_init(void) |
{ |
return 0; |
} |
void kbd_port_yield(void) |
{ |
} |
void kbd_port_reclaim(void) |
{ |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/kbd/port/i8042.h |
---|
0,0 → 1,55 |
/* |
* Copyright (c) 2006 Josef Cejka |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd_port |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief i8042 port driver. |
*/ |
#ifndef KBD_PORT_i8042_H_ |
#define KBD_PORT_i8042_H_ |
#include <libarch/ddi.h> |
#include <libarch/types.h> |
struct i8042 { |
ioport8_t data; |
uint8_t pad[3]; |
ioport8_t status; |
} __attribute__ ((packed)); |
typedef struct i8042 i8042_t; |
#endif |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/genarch/include/nofb.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/genarch/include/scanc.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/genarch/include/kbd.h |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/genarch/src/nofb.c |
---|
File deleted |
\ No newline at end of file |
//branches/tracing/uspace/srv/kbd/genarch/src/kbd.c |
---|
File deleted |
//branches/tracing/uspace/srv/kbd/genarch/stroke.c |
---|
0,0 → 1,84 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd |
* @{ |
*/ |
/** |
* @file |
* @brief Stroke simulator. |
* |
* When simulating a keyboard using a serial TTY we need to convert the |
* recognized strokes (such as Shift-A) to sequences of key presses and |
* releases (such as 'press Shift, press A, release A, release Shift'). |
*/ |
#include <stroke.h> |
#include <kbd.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
/** Correspondence between modifers and the modifier keycodes. */ |
static unsigned int mods_keys[][2] = { |
{ KM_LSHIFT, KC_LSHIFT }, |
{ 0, 0 } |
}; |
/** Simulate keystroke using sequences of key presses and releases. */ |
void stroke_sim(unsigned mod, unsigned key) |
{ |
int i; |
/* Simulate modifier presses. */ |
i = 0; |
while (mods_keys[i][0] != 0) { |
if (mod & mods_keys[i][0]) { |
kbd_push_ev(KE_PRESS, mods_keys[i][1]); |
} |
++i; |
} |
/* Simulate key press and release. */ |
if (key != 0) { |
kbd_push_ev(KE_PRESS, key); |
kbd_push_ev(KE_RELEASE, key); |
} |
/* Simulate modifier releases. */ |
i = 0; |
while (mods_keys[i][0] != 0) { |
if (mod & mods_keys[i][0]) { |
kbd_push_ev(KE_RELEASE, mods_keys[i][1]); |
} |
++i; |
} |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/genarch/gsp.c |
---|
0,0 → 1,288 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** |
* @addtogroup kbdgen generic |
* @ingroup kbd |
* @{ |
*/ |
/** @file |
* @brief Generic scancode parser. |
* |
* The scancode parser is a simple finite state machine. It is described |
* using sequences of input symbols (scancodes) and the corresponding output |
* value (mods, key pair). When the parser recognizes a sequence, |
* it outputs the value and restarts. If a transition is undefined, |
* the parser restarts, too. |
* |
* Apart from precise values, GSP_DEFAULT allows to catch general cases. |
* I.e. if we knew that after 0x1b 0x4f there always follow two more |
* scancodes, we can define (0x1b, 0x4f, GSP_DEFAULT, GSP_DEFAULT, GSP_END) |
* with null output. This will force the parser to read the entire sequence, |
* not leaving garbage on the input if it does not recognize the specific |
* sequence. |
*/ |
#include <gsp.h> |
#include <libadt/hash_table.h> |
#include <stdlib.h> |
#include <stdio.h> |
#define TRANS_TABLE_CHAINS 256 |
/* |
* Hash table operations for the transition function. |
*/ |
static hash_index_t trans_op_hash(unsigned long key[]); |
static int trans_op_compare(unsigned long key[], hash_count_t keys, |
link_t *item); |
static void trans_op_remove_callback(link_t *item); |
static hash_table_operations_t trans_ops = { |
.hash = trans_op_hash, |
.compare = trans_op_compare, |
.remove_callback = trans_op_remove_callback |
}; |
static gsp_trans_t *trans_lookup(gsp_t *p, int state, int input); |
static void trans_insert(gsp_t *p, gsp_trans_t *t); |
static gsp_trans_t *trans_new(void); |
/** Initialise scancode parser. */ |
void gsp_init(gsp_t *p) |
{ |
p->states = 1; |
hash_table_create(&p->trans, TRANS_TABLE_CHAINS, 2, &trans_ops); |
} |
/** Insert a series of definitions into the parser. |
* |
* @param p The parser. |
* @param defs Definition list. Each definition starts with two output values |
* (mods, key) and continues with a sequence of input values |
* terminated with GSP_END. The definition list is terminated |
* with two zeroes (0, 0) for output values. |
*/ |
int gsp_insert_defs(gsp_t *p, const int *defs) |
{ |
unsigned mods, key; |
const int *dp; |
int rc; |
dp = defs; |
while (1) { |
/* Read the output values. */ |
mods = *dp++; |
key = *dp++; |
if (key == 0) break; |
/* Insert one sequence. */ |
rc = gsp_insert_seq(p, dp, mods, key); |
if (rc != 0) |
return rc; |
/* Skip to the next definition. */ |
while (*dp != GSP_END) |
++dp; |
++dp; |
} |
return 0; |
} |
/** Insert one sequence into the parser. |
* |
* @param p The parser. |
* @param seq Sequence of input values terminated with GSP_END. |
* @param mods Corresponsing output value. |
* @param key Corresponsing output value. |
*/ |
int gsp_insert_seq(gsp_t *p, const int *seq, unsigned mods, unsigned key) |
{ |
int state; |
gsp_trans_t *t; |
state = 0; |
t = NULL; |
/* Input sequence must be non-empty. */ |
if (*seq == GSP_END) |
return -1; |
while (*(seq + 1) != GSP_END) { |
t = trans_lookup(p, state, *seq); |
if (t == NULL) { |
/* Create new state. */ |
t = trans_new(); |
t->old_state = state; |
t->input = *seq; |
t->new_state = p->states++; |
t->out_mods = 0; |
t->out_key = 0; |
trans_insert(p, t); |
} |
state = t->new_state; |
++seq; |
} |
/* Process the last transition. */ |
t = trans_lookup(p, state, *seq); |
if (t != NULL) { |
exit(1); |
return -1; /* Conflicting definition. */ |
} |
t = trans_new(); |
t->old_state = state; |
t->input = *seq; |
t->new_state = 0; |
t->out_mods = mods; |
t->out_key = key; |
trans_insert(p, t); |
return 0; |
} |
/** Compute one parser step. |
* |
* Computes the next state and output values for a given state and input. |
* This handles everything including restarts and default branches. |
* |
* @param p The parser. |
* @param state Old state. |
* @param input Input symbol (scancode). |
* @param mods Output value (modifier). |
* @param key Output value (key). |
* @return New state. |
*/ |
int gsp_step(gsp_t *p, int state, int input, unsigned *mods, unsigned *key) |
{ |
gsp_trans_t *t; |
t = trans_lookup(p, state, input); |
if (t == NULL) { |
t = trans_lookup(p, state, GSP_DEFAULT); |
} |
if (t == NULL) { |
printf("gsp_step: not found\n"); |
*mods = NULL; |
*key = NULL; |
return 0; |
} |
*mods = t->out_mods; |
*key = t->out_key; |
return t->new_state; |
} |
/** Transition function lookup. |
* |
* Returns the value of the transition function for the given state |
* and input. Note that the transition must be specified precisely, |
* to obtain the default branch use input = GSP_DEFAULT. |
* |
* @param p Parser. |
* @param state Current state. |
* @param input Input value. |
* @return The transition or @c NULL if not defined. |
*/ |
static gsp_trans_t *trans_lookup(gsp_t *p, int state, int input) |
{ |
link_t *item; |
unsigned long key[2]; |
key[0] = state; |
key[1] = input; |
item = hash_table_find(&p->trans, key); |
if (item == NULL) return NULL; |
return hash_table_get_instance(item, gsp_trans_t, link); |
} |
/** Define a new transition. |
* |
* @param p The parser. |
* @param t Transition with all fields defined. |
*/ |
static void trans_insert(gsp_t *p, gsp_trans_t *t) |
{ |
unsigned long key[2]; |
key[0] = t->old_state; |
key[1] = t->input; |
hash_table_insert(&p->trans, &key, &t->link); |
} |
/** Allocate transition structure. */ |
static gsp_trans_t *trans_new(void) |
{ |
gsp_trans_t *t; |
t = malloc(sizeof(gsp_trans_t)); |
if (t == NULL) { |
printf("Memory allocation failed.\n"); |
exit(1); |
} |
return t; |
} |
/* |
* Transition function hash table operations. |
*/ |
static hash_index_t trans_op_hash(unsigned long key[]) |
{ |
return (key[0] * 17 + key[1]) % TRANS_TABLE_CHAINS; |
} |
static int trans_op_compare(unsigned long key[], hash_count_t keys, |
link_t *item) |
{ |
gsp_trans_t *t; |
t = hash_table_get_instance(item, gsp_trans_t, link); |
return (key[0] == t->old_state && key[1] == t->input); |
} |
static void trans_op_remove_callback(link_t *item) |
{ |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/generic/kbd.c |
---|
37,48 → 37,130 |
#include <ipc/ipc.h> |
#include <ipc/services.h> |
#include <sysinfo.h> |
#include <stdio.h> |
#include <unistd.h> |
#include <stdlib.h> |
#include <stdio.h> |
#include <ipc/ns.h> |
#include <async.h> |
#include <errno.h> |
#include <arch/kbd.h> |
#include <libadt/fifo.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <kbd.h> |
#include <libadt/fifo.h> |
#include <key_buffer.h> |
#include <async.h> |
#include <keys.h> |
#include <kbd_port.h> |
#include <kbd_ctl.h> |
#include <layout.h> |
#define NAME "kbd" |
int cons_connected = 0; |
int phone2cons = -1; |
keybuffer_t keybuffer; |
keybuffer_t keybuffer; |
static void irq_handler(ipc_callid_t iid, ipc_call_t *call) |
/** Currently active modifiers. */ |
static unsigned mods = KM_NUM_LOCK; |
/** Currently pressed lock keys. We track these to tackle autorepeat. */ |
static unsigned lock_keys; |
int cir_service = 0; |
int cir_phone = -1; |
#define NUM_LAYOUTS 3 |
static layout_op_t *layout[NUM_LAYOUTS] = { |
&us_qwerty_op, |
&us_dvorak_op, |
&cz_op |
}; |
static int active_layout = 0; |
void kbd_push_scancode(int scancode) |
{ |
int chr; |
/* printf("scancode: 0x%x\n", scancode);*/ |
kbd_ctl_parse_scancode(scancode); |
} |
#ifdef MOUSE_ENABLED |
if (mouse_arch_process(phone2cons, call)) |
return; |
#endif |
kbd_arch_process(&keybuffer, call); |
void kbd_push_ev(int type, unsigned int key) |
{ |
kbd_event_t ev; |
unsigned mod_mask; |
if (cons_connected && phone2cons != -1) { |
/* |
* recode to ASCII - one interrupt can produce more than one |
* code so result is stored in fifo |
*/ |
while (!keybuffer_empty(&keybuffer)) { |
if (!keybuffer_pop(&keybuffer, (int *)&chr)) |
break; |
switch (key) { |
case KC_LCTRL: mod_mask = KM_LCTRL; break; |
case KC_RCTRL: mod_mask = KM_RCTRL; break; |
case KC_LSHIFT: mod_mask = KM_LSHIFT; break; |
case KC_RSHIFT: mod_mask = KM_RSHIFT; break; |
case KC_LALT: mod_mask = KM_LALT; break; |
case KC_RALT: mod_mask = KM_RALT; break; |
default: mod_mask = 0; break; |
} |
async_msg_1(phone2cons, KBD_PUSHCHAR, chr); |
if (mod_mask != 0) { |
if (type == KE_PRESS) |
mods = mods | mod_mask; |
else |
mods = mods & ~mod_mask; |
} |
switch (key) { |
case KC_CAPS_LOCK: mod_mask = KM_CAPS_LOCK; break; |
case KC_NUM_LOCK: mod_mask = KM_NUM_LOCK; break; |
case KC_SCROLL_LOCK: mod_mask = KM_SCROLL_LOCK; break; |
default: mod_mask = 0; break; |
} |
if (mod_mask != 0) { |
if (type == KE_PRESS) { |
/* |
* Only change lock state on transition from released |
* to pressed. This prevents autorepeat from messing |
* up the lock state. |
*/ |
mods = mods ^ (mod_mask & ~lock_keys); |
lock_keys = lock_keys | mod_mask; |
} else { |
lock_keys = lock_keys & ~mod_mask; |
} |
} |
/* |
printf("type: %d\n", type); |
printf("mods: 0x%x\n", mods); |
printf("keycode: %u\n", key); |
*/ |
if (type == KE_PRESS && (mods & KM_LCTRL) && |
key == KC_F1) { |
active_layout = 0; |
layout[active_layout]->reset(); |
return; |
} |
if (type == KE_PRESS && (mods & KM_LCTRL) && |
key == KC_F2) { |
active_layout = 1; |
layout[active_layout]->reset(); |
return; |
} |
if (type == KE_PRESS && (mods & KM_LCTRL) && |
key == KC_F3) { |
active_layout = 2; |
layout[active_layout]->reset(); |
return; |
} |
ev.type = type; |
ev.key = key; |
ev.mods = mods; |
ev.c = layout[active_layout]->parse_ev(&ev); |
async_msg_4(phone2cons, KBD_EVENT, ev.type, ev.key, ev.mods, ev.c); |
} |
static void console_connection(ipc_callid_t iid, ipc_call_t *icall) |
111,6 → 193,14 |
phone2cons = IPC_GET_ARG5(call); |
retval = 0; |
break; |
case KBD_YIELD: |
kbd_port_yield(); |
retval = 0; |
break; |
case KBD_RECLAIM: |
kbd_port_reclaim(); |
retval = 0; |
break; |
default: |
retval = EINVAL; |
} |
125,16 → 215,35 |
ipcarg_t phonead; |
/* Initialize arch dependent parts */ |
if (kbd_arch_init()) |
if (sysinfo_value("kbd.cir.fhc") == 1) |
cir_service = SERVICE_FHC; |
else if (sysinfo_value("kbd.cir.obio") == 1) |
cir_service = SERVICE_OBIO; |
if (cir_service) { |
while (cir_phone < 0) { |
cir_phone = ipc_connect_me_to_blocking(PHONE_NS, cir_service, |
0, 0); |
} |
} |
/* Initialize port driver. */ |
if (kbd_port_init() != 0) |
return -1; |
/* Initialize controller driver. */ |
if (kbd_ctl_init() != 0) |
return -1; |
/* Initialize (reset) layout. */ |
layout[active_layout]->reset(); |
/* Initialize key buffer */ |
keybuffer_init(&keybuffer); |
async_set_client_connection(console_connection); |
async_set_interrupt_received(irq_handler); |
/* Register service at nameserver */ |
/* Register service at nameserver. */ |
if (ipc_connect_to_me(PHONE_NS, SERVICE_KEYBOARD, 0, 0, &phonead) != 0) |
return -1; |
141,7 → 250,7 |
printf(NAME ": Accepting connections\n"); |
async_manager(); |
/* Never reached */ |
/* Not reached. */ |
return 0; |
} |
//branches/tracing/uspace/srv/kbd/generic/key_buffer.c |
---|
40,7 → 40,7 |
/** Clear key buffer. |
*/ |
void keybuffer_free(keybuffer_t *keybuffer) |
void keybuffer_free(keybuffer_t *keybuffer) |
{ |
futex_down(&keybuffer_futex); |
keybuffer->head = 0; |
75,15 → 75,18 |
return (keybuffer->items == 0); |
} |
/** Push key to key buffer. |
* If buffer is full, character is ignored. |
* @param key code of stored key |
/** Push key event to key buffer. |
* |
* If the buffer is full, the event is ignored. |
* |
* @param keybuffer The keybuffer. |
* @param ev The event to push. |
*/ |
void keybuffer_push(keybuffer_t *keybuffer, int key) |
void keybuffer_push(keybuffer_t *keybuffer, const kbd_event_t *ev) |
{ |
futex_down(&keybuffer_futex); |
if (keybuffer->items < KEYBUFFER_SIZE) { |
keybuffer->fifo[keybuffer->tail] = key; |
keybuffer->fifo[keybuffer->tail] = *ev; |
keybuffer->tail = (keybuffer->tail + 1) % KEYBUFFER_SIZE; |
keybuffer->items++; |
} |
90,16 → 93,17 |
futex_up(&keybuffer_futex); |
} |
/** Pop character from buffer. |
* @param c pointer to space where to store character from buffer. |
* @return zero on empty buffer, nonzero else |
/** Pop event from buffer. |
* |
* @param edst Pointer to where the event should be saved. |
* @return Zero on empty buffer, nonzero otherwise. |
*/ |
int keybuffer_pop(keybuffer_t *keybuffer, int *c) |
int keybuffer_pop(keybuffer_t *keybuffer, kbd_event_t *edst) |
{ |
futex_down(&keybuffer_futex); |
if (keybuffer->items > 0) { |
keybuffer->items--; |
*c = (keybuffer->fifo[keybuffer->head]) ; |
*edst = (keybuffer->fifo[keybuffer->head]) ; |
keybuffer->head = (keybuffer->head + 1) % KEYBUFFER_SIZE; |
futex_up(&keybuffer_futex); |
return 1; |
//branches/tracing/uspace/srv/kbd/Makefile |
---|
29,13 → 29,11 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
include ../../../Makefile.config |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -Iinclude -I../libadt/include |
LIBS = $(LIBC_PREFIX)/libc.a |
46,75 → 44,125 |
OUTPUT = kbd |
GENERIC_SOURCES = \ |
generic/kbd.c \ |
genarch/gsp.c \ |
genarch/stroke.c \ |
generic/key_buffer.c |
ARCH_SOURCES = \ |
arch/$(ARCH)/src/kbd.c |
ARCH_SOURCES = |
GENARCH_SOURCES = \ |
layout/cz.c \ |
layout/us_qwerty.c \ |
layout/us_dvorak.c |
ifeq ($(ARCH), ia32) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/mouse.c \ |
arch/$(ARCH)/src/scanc.c |
GENARCH_SOURCES = \ |
genarch/src/kbd.c |
CFLAGS += -DMOUSE_ENABLED |
ifeq ($(UARCH), amd64) |
GENARCH_SOURCES += \ |
port/i8042.c \ |
ctl/pc.c |
endif |
ifeq ($(ARCH), ia64) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/mouse.c \ |
arch/$(ARCH)/src/scanc.c \ |
arch/$(ARCH)/src/lkbd.c |
GENARCH_SOURCES = \ |
genarch/src/kbd.c |
CFLAGS += -DMOUSE_ENABLED |
ifeq ($(UARCH), arm32) |
GENARCH_SOURCES += \ |
port/gxemul.c |
ifeq ($(CONFIG_FB), y) |
GENARCH_SOURCES += \ |
ctl/gxe_fb.c |
else |
GENARCH_SOURCES += \ |
ctl/stty.c |
endif |
endif |
ifeq ($(ARCH), amd64) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/mouse.c \ |
arch/$(ARCH)/src/scanc.c |
GENARCH_SOURCES = \ |
genarch/src/kbd.c |
CFLAGS += -DMOUSE_ENABLED |
ifeq ($(UARCH), ia32) |
GENARCH_SOURCES += \ |
port/i8042.c \ |
ctl/pc.c |
endif |
ifeq ($(ARCH), sparc64) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/scanc.c \ |
arch/$(ARCH)/src/sgcn.c |
GENARCH_SOURCES = \ |
genarch/src/kbd.c \ |
genarch/src/nofb.c |
ifeq ($(MACHINE), i460GX) |
GENARCH_SOURCES += \ |
port/i8042.c \ |
ctl/pc.c |
endif |
ifeq ($(ARCH), arm32) |
ARCH_SOURCES += \ |
arch/$(ARCH)/src/kbd_gxemul.c |
ifeq ($(MACHINE), ski) |
GENARCH_SOURCES += \ |
port/ski.c \ |
ctl/stty.c |
endif |
ifeq ($(ARCH), mips32) |
ifeq ($(MACHINE), msim) |
GENARCH_SOURCES += \ |
genarch/src/nofb.c |
port/msim.c \ |
ctl/stty.c |
endif |
ifeq ($(MACHINE), lgxemul) |
GENARCH_SOURCES += \ |
port/gxemul.c |
ifeq ($(CONFIG_FB), y) |
GENARCH_SOURCES += \ |
ctl/gxe_fb.c |
else |
GENARCH_SOURCES += \ |
ctl/stty.c |
endif |
endif |
ifeq ($(MACHINE), bgxemul) |
GENARCH_SOURCES += \ |
port/gxemul.c |
ifeq ($(CONFIG_FB), y) |
GENARCH_SOURCES += \ |
ctl/gxe_fb.c |
else |
GENARCH_SOURCES += \ |
ctl/stty.c |
endif |
endif |
ifeq ($(UARCH), ppc32) |
GENARCH_SOURCES += \ |
port/dummy.c \ |
ctl/stty.c |
endif |
ifeq ($(UARCH), sparc64) |
ifeq ($(MACHINE),serengeti) |
GENARCH_SOURCES += \ |
port/sgcn.c \ |
ctl/stty.c |
else |
GENARCH_SOURCES += \ |
port/sun.c \ |
port/z8530.c \ |
port/ns16550.c \ |
ctl/sun.c |
endif |
endif |
GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES))) |
ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES))) |
GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES))) |
OBJECTS := $(ARCH_OBJECTS) $(GENERIC_OBJECTS) $(GENARCH_OBJECTS) |
.PHONY: all clean depend disasm links |
all: links $(OUTPUT) $(OUTPUT).disasm |
all: $(OUTPUT) $(OUTPUT).disasm |
-include Makefile.depend |
links: |
ln -sfn ../arch/$(ARCH)/include include/arch |
ln -sfn ../genarch/include include/genarch |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend include/arch include/genarch |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(ARCH_OBJECTS) $(GENERIC_OBJECTS) $(GENARCH_OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(GENERIC_OBJECTS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/srv/kbd/layout/us_qwerty.c |
---|
0,0 → 1,244 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd |
* @brief US QWERTY leyout. |
* @{ |
*/ |
#include <kbd.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <layout.h> |
static void layout_reset(void); |
static wchar_t layout_parse_ev(kbd_event_t *ev); |
layout_op_t us_qwerty_op = { |
layout_reset, |
layout_parse_ev |
}; |
static wchar_t map_lcase[] = { |
[KC_Q] = 'q', |
[KC_W] = 'w', |
[KC_E] = 'e', |
[KC_R] = 'r', |
[KC_T] = 't', |
[KC_Y] = 'y', |
[KC_U] = 'u', |
[KC_I] = 'i', |
[KC_O] = 'o', |
[KC_P] = 'p', |
[KC_A] = 'a', |
[KC_S] = 's', |
[KC_D] = 'd', |
[KC_F] = 'f', |
[KC_G] = 'g', |
[KC_H] = 'h', |
[KC_J] = 'j', |
[KC_K] = 'k', |
[KC_L] = 'l', |
[KC_Z] = 'z', |
[KC_X] = 'x', |
[KC_C] = 'c', |
[KC_V] = 'v', |
[KC_B] = 'b', |
[KC_N] = 'n', |
[KC_M] = 'm', |
}; |
static wchar_t map_ucase[] = { |
[KC_Q] = 'Q', |
[KC_W] = 'W', |
[KC_E] = 'E', |
[KC_R] = 'R', |
[KC_T] = 'T', |
[KC_Y] = 'Y', |
[KC_U] = 'U', |
[KC_I] = 'I', |
[KC_O] = 'O', |
[KC_P] = 'P', |
[KC_A] = 'A', |
[KC_S] = 'S', |
[KC_D] = 'D', |
[KC_F] = 'F', |
[KC_G] = 'G', |
[KC_H] = 'H', |
[KC_J] = 'J', |
[KC_K] = 'K', |
[KC_L] = 'L', |
[KC_Z] = 'Z', |
[KC_X] = 'X', |
[KC_C] = 'C', |
[KC_V] = 'V', |
[KC_B] = 'B', |
[KC_N] = 'N', |
[KC_M] = 'M', |
}; |
static wchar_t map_not_shifted[] = { |
[KC_BACKTICK] = '`', |
[KC_1] = '1', |
[KC_2] = '2', |
[KC_3] = '3', |
[KC_4] = '4', |
[KC_5] = '5', |
[KC_6] = '6', |
[KC_7] = '7', |
[KC_8] = '8', |
[KC_9] = '9', |
[KC_0] = '0', |
[KC_MINUS] = '-', |
[KC_EQUALS] = '=', |
[KC_LBRACKET] = '[', |
[KC_RBRACKET] = ']', |
[KC_SEMICOLON] = ';', |
[KC_QUOTE] = '\'', |
[KC_BACKSLASH] = '\\', |
[KC_COMMA] = ',', |
[KC_PERIOD] = '.', |
[KC_SLASH] = '/', |
}; |
static wchar_t map_shifted[] = { |
[KC_BACKTICK] = '~', |
[KC_1] = '!', |
[KC_2] = '@', |
[KC_3] = '#', |
[KC_4] = '$', |
[KC_5] = '%', |
[KC_6] = '^', |
[KC_7] = '&', |
[KC_8] = '*', |
[KC_9] = '(', |
[KC_0] = ')', |
[KC_MINUS] = '_', |
[KC_EQUALS] = '+', |
[KC_LBRACKET] = '{', |
[KC_RBRACKET] = '}', |
[KC_SEMICOLON] = ':', |
[KC_QUOTE] = '"', |
[KC_BACKSLASH] = '|', |
[KC_COMMA] = '<', |
[KC_PERIOD] = '>', |
[KC_SLASH] = '?', |
}; |
static wchar_t map_neutral[] = { |
[KC_BACKSPACE] = '\b', |
[KC_TAB] = '\t', |
[KC_ENTER] = '\n', |
[KC_SPACE] = ' ', |
[KC_NSLASH] = '/', |
[KC_NTIMES] = '*', |
[KC_NMINUS] = '-', |
[KC_NPLUS] = '+', |
[KC_NENTER] = '\n' |
}; |
static wchar_t map_numeric[] = { |
[KC_N7] = '7', |
[KC_N8] = '8', |
[KC_N9] = '9', |
[KC_N4] = '4', |
[KC_N5] = '5', |
[KC_N6] = '6', |
[KC_N1] = '1', |
[KC_N2] = '2', |
[KC_N3] = '3', |
[KC_N0] = '0', |
[KC_NPERIOD] = '.' |
}; |
static wchar_t translate(unsigned int key, wchar_t *map, size_t map_length) |
{ |
if (key >= map_length) |
return 0; |
return map[key]; |
} |
static void layout_reset(void) |
{ |
} |
static wchar_t layout_parse_ev(kbd_event_t *ev) |
{ |
wchar_t c; |
/* Produce no characters when Ctrl or Alt is pressed. */ |
if ((ev->mods & (KM_CTRL | KM_ALT)) != 0) |
return 0; |
c = translate(ev->key, map_neutral, sizeof(map_neutral) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if (((ev->mods & KM_SHIFT) != 0) ^ ((ev->mods & KM_CAPS_LOCK) != 0)) |
c = translate(ev->key, map_ucase, sizeof(map_ucase) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_lcase, sizeof(map_lcase) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if ((ev->mods & KM_SHIFT) != 0) |
c = translate(ev->key, map_shifted, sizeof(map_shifted) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_not_shifted, sizeof(map_not_shifted) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if ((ev->mods & KM_NUM_LOCK) != 0) |
c = translate(ev->key, map_numeric, sizeof(map_numeric) / sizeof(wchar_t)); |
else |
c = 0; |
return c; |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/layout/cz.c |
---|
0,0 → 1,403 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd |
* @brief US QWERTY leyout. |
* @{ |
*/ |
#include <kbd.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <bool.h> |
#include <layout.h> |
static void layout_reset(void); |
static wchar_t layout_parse_ev(kbd_event_t *ev); |
enum m_state { |
ms_start, |
ms_hacek, |
ms_carka |
}; |
static enum m_state mstate; |
layout_op_t cz_op = { |
layout_reset, |
layout_parse_ev |
}; |
static wchar_t map_lcase[] = { |
[KC_Q] = 'q', |
[KC_W] = 'w', |
[KC_E] = 'e', |
[KC_R] = 'r', |
[KC_T] = 't', |
[KC_Y] = 'z', |
[KC_U] = 'u', |
[KC_I] = 'i', |
[KC_O] = 'o', |
[KC_P] = 'p', |
[KC_A] = 'a', |
[KC_S] = 's', |
[KC_D] = 'd', |
[KC_F] = 'f', |
[KC_G] = 'g', |
[KC_H] = 'h', |
[KC_J] = 'j', |
[KC_K] = 'k', |
[KC_L] = 'l', |
[KC_Z] = 'y', |
[KC_X] = 'x', |
[KC_C] = 'c', |
[KC_V] = 'v', |
[KC_B] = 'b', |
[KC_N] = 'n', |
[KC_M] = 'm', |
}; |
static wchar_t map_ucase[] = { |
[KC_Q] = 'Q', |
[KC_W] = 'W', |
[KC_E] = 'E', |
[KC_R] = 'R', |
[KC_T] = 'T', |
[KC_Y] = 'Z', |
[KC_U] = 'U', |
[KC_I] = 'I', |
[KC_O] = 'O', |
[KC_P] = 'P', |
[KC_A] = 'A', |
[KC_S] = 'S', |
[KC_D] = 'D', |
[KC_F] = 'F', |
[KC_G] = 'G', |
[KC_H] = 'H', |
[KC_J] = 'J', |
[KC_K] = 'K', |
[KC_L] = 'L', |
[KC_Z] = 'Y', |
[KC_X] = 'X', |
[KC_C] = 'C', |
[KC_V] = 'V', |
[KC_B] = 'B', |
[KC_N] = 'N', |
[KC_M] = 'M', |
}; |
static wchar_t map_not_shifted[] = { |
[KC_BACKTICK] = ';', |
[KC_1] = '+', |
[KC_MINUS] = '=', |
[KC_RBRACKET] = ')', |
[KC_QUOTE] = L'§', |
[KC_COMMA] = ',', |
[KC_PERIOD] = '.', |
[KC_SLASH] = '-', |
}; |
static wchar_t map_shifted[] = { |
[KC_1] = '1', |
[KC_2] = '2', |
[KC_3] = '3', |
[KC_4] = '4', |
[KC_5] = '5', |
[KC_6] = '6', |
[KC_7] = '7', |
[KC_8] = '8', |
[KC_9] = '9', |
[KC_0] = '0', |
[KC_MINUS] = '%', |
[KC_LBRACKET] = '/', |
[KC_RBRACKET] = '(', |
[KC_SEMICOLON] = '"', |
[KC_QUOTE] = '!', |
[KC_BACKSLASH] = '\'', |
[KC_COMMA] = '?', |
[KC_PERIOD] = ':', |
[KC_SLASH] = '_', |
}; |
static wchar_t map_ns_nocaps[] = { |
[KC_2] = L'ě', |
[KC_3] = L'š', |
[KC_4] = L'č', |
[KC_5] = L'ř', |
[KC_6] = L'ž', |
[KC_7] = L'ý', |
[KC_8] = L'á', |
[KC_9] = L'í', |
[KC_0] = L'é', |
[KC_LBRACKET] = L'ú', |
[KC_SEMICOLON] = L'ů' |
}; |
static wchar_t map_ns_caps[] = { |
[KC_2] = L'Ě', |
[KC_3] = L'Š', |
[KC_4] = L'Č', |
[KC_5] = L'Ř', |
[KC_6] = L'Ž', |
[KC_7] = L'Ý', |
[KC_8] = L'Á', |
[KC_9] = L'Í', |
[KC_0] = L'É', |
[KC_LBRACKET] = L'Ú', |
[KC_SEMICOLON] = L'Ů' |
}; |
static wchar_t map_neutral[] = { |
[KC_BACKSPACE] = '\b', |
[KC_TAB] = '\t', |
[KC_ENTER] = '\n', |
[KC_SPACE] = ' ', |
[KC_NSLASH] = '/', |
[KC_NTIMES] = '*', |
[KC_NMINUS] = '-', |
[KC_NPLUS] = '+', |
[KC_NENTER] = '\n' |
}; |
static wchar_t map_numeric[] = { |
[KC_N7] = '7', |
[KC_N8] = '8', |
[KC_N9] = '9', |
[KC_N4] = '4', |
[KC_N5] = '5', |
[KC_N6] = '6', |
[KC_N1] = '1', |
[KC_N2] = '2', |
[KC_N3] = '3', |
[KC_N0] = '0', |
[KC_NPERIOD] = '.' |
}; |
static wchar_t map_hacek_lcase[] = { |
[KC_E] = L'ě', |
[KC_R] = L'ř', |
[KC_T] = L'ť', |
[KC_Y] = L'ž', |
[KC_U] = L'ů', |
[KC_S] = L'š', |
[KC_D] = L'ď', |
[KC_C] = L'č', |
[KC_N] = L'ň' |
}; |
static wchar_t map_hacek_ucase[] = { |
[KC_E] = L'Ě', |
[KC_R] = L'Ř', |
[KC_T] = L'Ť', |
[KC_Y] = L'Ž', |
[KC_U] = L'Ů', |
[KC_S] = L'Š', |
[KC_D] = L'Ď', |
[KC_C] = L'Č', |
[KC_N] = L'Ň' |
}; |
static wchar_t map_carka_lcase[] = { |
[KC_E] = L'é', |
[KC_U] = L'ú', |
[KC_I] = L'í', |
[KC_O] = L'ó', |
[KC_A] = L'á', |
[KC_Z] = L'ý', |
}; |
static wchar_t map_carka_ucase[] = { |
[KC_E] = L'É', |
[KC_U] = L'Ú', |
[KC_I] = L'Í', |
[KC_O] = L'Ó', |
[KC_A] = L'Á', |
[KC_Z] = L'Ý', |
}; |
static wchar_t translate(unsigned int key, wchar_t *map, size_t map_length) |
{ |
if (key >= map_length) |
return 0; |
return map[key]; |
} |
static wchar_t parse_ms_hacek(kbd_event_t *ev) |
{ |
wchar_t c; |
mstate = ms_start; |
/* Produce no characters when Ctrl or Alt is pressed. */ |
if ((ev->mods & (KM_CTRL | KM_ALT)) != 0) |
return 0; |
if (((ev->mods & KM_SHIFT) != 0) ^ ((ev->mods & KM_CAPS_LOCK) != 0)) |
c = translate(ev->key, map_hacek_ucase, sizeof(map_hacek_ucase) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_hacek_lcase, sizeof(map_hacek_lcase) / sizeof(wchar_t)); |
return c; |
} |
static wchar_t parse_ms_carka(kbd_event_t *ev) |
{ |
wchar_t c; |
mstate = ms_start; |
/* Produce no characters when Ctrl or Alt is pressed. */ |
if ((ev->mods & (KM_CTRL | KM_ALT)) != 0) |
return 0; |
if (((ev->mods & KM_SHIFT) != 0) ^ ((ev->mods & KM_CAPS_LOCK) != 0)) |
c = translate(ev->key, map_carka_ucase, sizeof(map_carka_ucase) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_carka_lcase, sizeof(map_carka_lcase) / sizeof(wchar_t)); |
return c; |
} |
static wchar_t parse_ms_start(kbd_event_t *ev) |
{ |
wchar_t c; |
/* Produce no characters when Ctrl or Alt is pressed. */ |
if ((ev->mods & (KM_CTRL | KM_ALT)) != 0) |
return 0; |
if (ev->key == KC_EQUALS) { |
if ((ev->mods & KM_SHIFT) != 0) |
mstate = ms_hacek; |
else |
mstate = ms_carka; |
return 0; |
} |
c = translate(ev->key, map_neutral, sizeof(map_neutral) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if ((ev->mods & KM_SHIFT) == 0) { |
if ((ev->mods & KM_CAPS_LOCK) != 0) |
c = translate(ev->key, map_ns_caps, sizeof(map_ns_caps) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_ns_nocaps, sizeof(map_ns_nocaps) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
} |
if (((ev->mods & KM_SHIFT) != 0) ^ ((ev->mods & KM_CAPS_LOCK) != 0)) |
c = translate(ev->key, map_ucase, sizeof(map_ucase) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_lcase, sizeof(map_lcase) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if ((ev->mods & KM_SHIFT) != 0) |
c = translate(ev->key, map_shifted, sizeof(map_shifted) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_not_shifted, sizeof(map_not_shifted) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if ((ev->mods & KM_NUM_LOCK) != 0) |
c = translate(ev->key, map_numeric, sizeof(map_numeric) / sizeof(wchar_t)); |
else |
c = 0; |
return c; |
} |
static bool key_is_mod(unsigned key) |
{ |
switch (key) { |
case KC_LSHIFT: |
case KC_RSHIFT: |
case KC_LALT: |
case KC_RALT: |
case KC_LCTRL: |
case KC_RCTRL: |
return true; |
default: |
return false; |
} |
} |
static void layout_reset(void) |
{ |
mstate = ms_start; |
} |
static wchar_t layout_parse_ev(kbd_event_t *ev) |
{ |
if (ev->type != KE_PRESS) |
return '\0'; |
if (key_is_mod(ev->key)) |
return '\0'; |
switch (mstate) { |
case ms_start: return parse_ms_start(ev); |
case ms_hacek: return parse_ms_hacek(ev); |
case ms_carka: return parse_ms_carka(ev); |
} |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/kbd/layout/us_dvorak.c |
---|
0,0 → 1,250 |
/* |
* Copyright (c) 2009 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup kbd |
* @brief US Dvorak Simplified Keyboard layout. |
* @{ |
*/ |
#include <kbd.h> |
#include <kbd/kbd.h> |
#include <kbd/keycode.h> |
#include <layout.h> |
static void layout_reset(void); |
static wchar_t layout_parse_ev(kbd_event_t *ev); |
layout_op_t us_dvorak_op = { |
layout_reset, |
layout_parse_ev |
}; |
static wchar_t map_lcase[] = { |
[KC_R] = 'p', |
[KC_T] = 'y', |
[KC_Y] = 'f', |
[KC_U] = 'g', |
[KC_I] = 'c', |
[KC_O] = 'r', |
[KC_P] = 'l', |
[KC_A] = 'a', |
[KC_S] = 'o', |
[KC_D] = 'e', |
[KC_F] = 'u', |
[KC_G] = 'i', |
[KC_H] = 'd', |
[KC_J] = 'h', |
[KC_K] = 't', |
[KC_L] = 'n', |
[KC_SEMICOLON] = 's', |
[KC_X] = 'q', |
[KC_C] = 'j', |
[KC_V] = 'k', |
[KC_B] = 'x', |
[KC_N] = 'b', |
[KC_M] = 'm', |
[KC_COMMA] = 'w', |
[KC_PERIOD] = 'v', |
[KC_SLASH] = 'z', |
}; |
static wchar_t map_ucase[] = { |
[KC_R] = 'P', |
[KC_T] = 'Y', |
[KC_Y] = 'F', |
[KC_U] = 'G', |
[KC_I] = 'C', |
[KC_O] = 'R', |
[KC_P] = 'L', |
[KC_A] = 'A', |
[KC_S] = 'O', |
[KC_D] = 'E', |
[KC_F] = 'U', |
[KC_G] = 'I', |
[KC_H] = 'D', |
[KC_J] = 'H', |
[KC_K] = 'T', |
[KC_L] = 'N', |
[KC_SEMICOLON] = 'S', |
[KC_X] = 'Q', |
[KC_C] = 'J', |
[KC_V] = 'K', |
[KC_B] = 'X', |
[KC_N] = 'B', |
[KC_M] = 'M', |
[KC_COMMA] = 'W', |
[KC_PERIOD] = 'V', |
[KC_SLASH] = 'Z', |
}; |
static wchar_t map_not_shifted[] = { |
[KC_BACKTICK] = '`', |
[KC_1] = '1', |
[KC_2] = '2', |
[KC_3] = '3', |
[KC_4] = '4', |
[KC_5] = '5', |
[KC_6] = '6', |
[KC_7] = '7', |
[KC_8] = '8', |
[KC_9] = '9', |
[KC_0] = '0', |
[KC_MINUS] = '[', |
[KC_EQUALS] = ']', |
[KC_Q] = '\'', |
[KC_W] = ',', |
[KC_E] = '.', |
[KC_LBRACKET] = '/', |
[KC_RBRACKET] = '=', |
[KC_QUOTE] = '-', |
[KC_BACKSLASH] = '\\', |
[KC_Z] = ';', |
}; |
static wchar_t map_shifted[] = { |
[KC_BACKTICK] = '~', |
[KC_1] = '!', |
[KC_2] = '@', |
[KC_3] = '#', |
[KC_4] = '$', |
[KC_5] = '%', |
[KC_6] = '^', |
[KC_7] = '&', |
[KC_8] = '*', |
[KC_9] = '(', |
[KC_0] = ')', |
[KC_MINUS] = '{', |
[KC_EQUALS] = '}', |
[KC_Q] = '"', |
[KC_W] = '<', |
[KC_E] = '>', |
[KC_LBRACKET] = '?', |
[KC_RBRACKET] = '+', |
[KC_QUOTE] = '_', |
[KC_BACKSLASH] = '|', |
[KC_Z] = ':', |
}; |
static wchar_t map_neutral[] = { |
[KC_BACKSPACE] = '\b', |
[KC_TAB] = '\t', |
[KC_ENTER] = '\n', |
[KC_SPACE] = ' ', |
[KC_NSLASH] = '/', |
[KC_NTIMES] = '*', |
[KC_NMINUS] = '-', |
[KC_NPLUS] = '+', |
[KC_NENTER] = '\n' |
}; |
static wchar_t map_numeric[] = { |
[KC_N7] = '7', |
[KC_N8] = '8', |
[KC_N9] = '9', |
[KC_N4] = '4', |
[KC_N5] = '5', |
[KC_N6] = '6', |
[KC_N1] = '1', |
[KC_N2] = '2', |
[KC_N3] = '3', |
[KC_N0] = '0', |
[KC_NPERIOD] = '.' |
}; |
static wchar_t translate(unsigned int key, wchar_t *map, size_t map_length) |
{ |
if (key >= map_length) |
return 0; |
return map[key]; |
} |
static void layout_reset(void) |
{ |
} |
static wchar_t layout_parse_ev(kbd_event_t *ev) |
{ |
wchar_t c; |
/* Produce no characters when Ctrl or Alt is pressed. */ |
if ((ev->mods & (KM_CTRL | KM_ALT)) != 0) |
return 0; |
c = translate(ev->key, map_neutral, sizeof(map_neutral) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if (((ev->mods & KM_SHIFT) != 0) ^ ((ev->mods & KM_CAPS_LOCK) != 0)) |
c = translate(ev->key, map_ucase, sizeof(map_ucase) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_lcase, sizeof(map_lcase) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if ((ev->mods & KM_SHIFT) != 0) |
c = translate(ev->key, map_shifted, sizeof(map_shifted) / sizeof(wchar_t)); |
else |
c = translate(ev->key, map_not_shifted, sizeof(map_not_shifted) / sizeof(wchar_t)); |
if (c != 0) |
return c; |
if ((ev->mods & KM_NUM_LOCK) != 0) |
c = translate(ev->key, map_numeric, sizeof(map_numeric) / sizeof(wchar_t)); |
else |
c = 0; |
return c; |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/ns/ns.c |
---|
28,11 → 28,11 |
/** @addtogroup ns |
* @{ |
*/ |
*/ |
/** |
* @file ns.c |
* @brief Naming service for HelenOS IPC. |
* @file ns.c |
* @brief Naming service for HelenOS IPC. |
*/ |
40,6 → 40,7 |
#include <ipc/ns.h> |
#include <ipc/services.h> |
#include <stdio.h> |
#include <bool.h> |
#include <unistd.h> |
#include <stdlib.h> |
#include <errno.h> |
47,17 → 48,24 |
#include <libadt/list.h> |
#include <libadt/hash_table.h> |
#include <sysinfo.h> |
#include <loader/loader.h> |
#include <ddi.h> |
#include <as.h> |
#define NAME "ns" |
#define NAME "ns" |
#define NS_HASH_TABLE_CHAINS 20 |
#define NS_HASH_TABLE_CHAINS 20 |
static int register_service(ipcarg_t service, ipcarg_t phone, ipc_call_t *call); |
static int connect_to_service(ipcarg_t service, ipc_call_t *call, |
static void connect_to_service(ipcarg_t service, ipc_call_t *call, |
ipc_callid_t callid); |
void register_clonable(ipcarg_t service, ipcarg_t phone, ipc_call_t *call, |
ipc_callid_t callid); |
void connect_to_clonable(ipcarg_t service, ipc_call_t *call, |
ipc_callid_t callid); |
/* Static functions implementing NS hash table operations. */ |
static hash_index_t ns_hash(unsigned long *key); |
static int ns_compare(unsigned long *key, hash_count_t keys, link_t *item); |
76,60 → 84,128 |
/** NS hash table item. */ |
typedef struct { |
link_t link; |
ipcarg_t service; /**< Number of the service. */ |
ipcarg_t phone; /**< Phone registered with the service. */ |
ipcarg_t in_phone_hash; /**< Incoming phone hash. */ |
ipcarg_t service; /**< Number of the service. */ |
ipcarg_t phone; /**< Phone registered with the service. */ |
ipcarg_t in_phone_hash; /**< Incoming phone hash. */ |
} hashed_service_t; |
/** Pending connection structure. */ |
typedef struct { |
link_t link; |
ipcarg_t service; /**< Number of the service. */ |
ipc_callid_t callid; /**< Call ID waiting for the connection */ |
ipcarg_t arg2; /**< Second argument */ |
ipcarg_t arg3; /**< Third argument */ |
} pending_req_t; |
static link_t pending_req; |
/** Request for connection to a clonable service. */ |
typedef struct { |
link_t link; |
ipcarg_t service; |
ipc_call_t call; |
ipc_callid_t callid; |
} cs_req_t; |
/** List of clonable-service connection requests. */ |
static link_t cs_req; |
static void *clockaddr = NULL; |
static void *klogaddr = NULL; |
static void get_as_area(ipc_callid_t callid, ipc_call_t *call, char *name, |
void **addr) |
/** Return true if @a service is clonable. */ |
static bool service_clonable(int service) |
{ |
void *ph_addr; |
return (service == SERVICE_LOAD); |
} |
if (!*addr) { |
ph_addr = (void *) sysinfo_value(name); |
if (!ph_addr) { |
static void get_as_area(ipc_callid_t callid, ipc_call_t *call, void *ph_addr, count_t pages, void **addr) |
{ |
if (ph_addr == NULL) { |
ipc_answer_0(callid, ENOENT); |
return; |
} |
if (*addr == NULL) { |
*addr = as_get_mappable_page(pages * PAGE_SIZE); |
if (*addr == NULL) { |
ipc_answer_0(callid, ENOENT); |
return; |
} |
*addr = as_get_mappable_page(PAGE_SIZE); |
physmem_map(ph_addr, *addr, 1, |
AS_AREA_READ | AS_AREA_CACHEABLE); |
if (physmem_map(ph_addr, *addr, pages, |
AS_AREA_READ | AS_AREA_CACHEABLE) != 0) { |
ipc_answer_0(callid, ENOENT); |
return; |
} |
} |
ipc_answer_2(callid, EOK, (ipcarg_t) *addr, AS_AREA_READ); |
} |
/** Process pending connection requests */ |
static void process_pending_req() |
{ |
link_t *cur; |
loop: |
for (cur = pending_req.next; cur != &pending_req; cur = cur->next) { |
pending_req_t *pr = list_get_instance(cur, pending_req_t, link); |
unsigned long keys[3] = { |
pr->service, |
0, |
0 |
}; |
link_t *link = hash_table_find(&ns_hash_table, keys); |
if (!link) |
continue; |
hashed_service_t *hs = hash_table_get_instance(link, hashed_service_t, link); |
ipcarg_t retval = ipc_forward_fast(pr->callid, hs->phone, |
pr->arg2, pr->arg3, 0, IPC_FF_NONE); |
if (!(pr->callid & IPC_CALLID_NOTIFICATION)) |
ipc_answer_0(pr->callid, retval); |
list_remove(cur); |
free(pr); |
goto loop; |
} |
} |
int main(int argc, char **argv) |
{ |
printf(NAME ": HelenOS IPC Naming Service\n"); |
ipc_call_t call; |
ipc_callid_t callid; |
ipcarg_t retval; |
if (!hash_table_create(&ns_hash_table, NS_HASH_TABLE_CHAINS, 3, |
&ns_hash_table_ops)) { |
printf(NAME ": No memory available\n"); |
printf(NAME ": No memory available for services\n"); |
return ENOMEM; |
} |
list_initialize(&pending_req); |
list_initialize(&cs_req); |
printf(NAME ": Accepting connections\n"); |
while (1) { |
callid = ipc_wait_for_call(&call); |
while (true) { |
process_pending_req(); |
ipc_call_t call; |
ipc_callid_t callid = ipc_wait_for_call(&call); |
ipcarg_t retval; |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_SHARE_IN: |
switch (IPC_GET_ARG3(call)) { |
case SERVICE_MEM_REALTIME: |
get_as_area(callid, &call, "clock.faddr", |
&clockaddr); |
get_as_area(callid, &call, sysinfo_value("clock.faddr"), 1, &clockaddr); |
break; |
case SERVICE_MEM_KLOG: |
get_as_area(callid, &call, "klog.faddr", |
&klogaddr); |
get_as_area(callid, &call, sysinfo_value("klog.faddr"), sysinfo_value("klog.pages"), &klogaddr); |
break; |
default: |
ipc_answer_0(callid, ENOENT); |
142,23 → 218,36 |
/* |
* Server requests service registration. |
*/ |
retval = register_service(IPC_GET_ARG1(call), |
IPC_GET_ARG5(call), &call); |
if (service_clonable(IPC_GET_ARG1(call))) { |
register_clonable(IPC_GET_ARG1(call), |
IPC_GET_ARG5(call), &call, callid); |
continue; |
} else { |
retval = register_service(IPC_GET_ARG1(call), |
IPC_GET_ARG5(call), &call); |
} |
break; |
case IPC_M_CONNECT_ME_TO: |
/* |
* Client requests to be connected to a service. |
*/ |
retval = connect_to_service(IPC_GET_ARG1(call), &call, |
callid); |
if (service_clonable(IPC_GET_ARG1(call))) { |
connect_to_clonable(IPC_GET_ARG1(call), |
&call, callid); |
continue; |
} else { |
connect_to_service(IPC_GET_ARG1(call), &call, |
callid); |
continue; |
} |
break; |
default: |
retval = ENOENT; |
break; |
} |
if (!(callid & IPC_CALLID_NOTIFICATION)) { |
if (!(callid & IPC_CALLID_NOTIFICATION)) |
ipc_answer_0(callid, retval); |
} |
} |
/* Not reached */ |
168,10 → 257,11 |
/** Register service. |
* |
* @param service Service to be registered. |
* @param phone Phone to be used for connections to the service. |
* @param call Pointer to call structure. |
* @param phone Phone to be used for connections to the service. |
* @param call Pointer to call structure. |
* |
* @return Zero on success or a value from @ref errno.h. |
* |
*/ |
int register_service(ipcarg_t service, ipcarg_t phone, ipc_call_t *call) |
{ |
180,23 → 270,20 |
call->in_phone_hash, |
0 |
}; |
hashed_service_t *hs; |
if (hash_table_find(&ns_hash_table, keys)) { |
if (hash_table_find(&ns_hash_table, keys)) |
return EEXISTS; |
} |
hs = (hashed_service_t *) malloc(sizeof(hashed_service_t)); |
if (!hs) { |
hashed_service_t *hs = (hashed_service_t *) malloc(sizeof(hashed_service_t)); |
if (!hs) |
return ENOMEM; |
} |
link_initialize(&hs->link); |
hs->service = service; |
hs->phone = phone; |
hs->in_phone_hash = call->in_phone_hash; |
hash_table_insert(&ns_hash_table, keys, &hs->link); |
return 0; |
} |
203,36 → 290,135 |
/** Connect client to service. |
* |
* @param service Service to be connected to. |
* @param call Pointer to call structure. |
* @param callid Call ID of the request. |
* @param call Pointer to call structure. |
* @param callid Call ID of the request. |
* |
* @return Zero on success or a value from @ref errno.h. |
* |
*/ |
int connect_to_service(ipcarg_t service, ipc_call_t *call, ipc_callid_t callid) |
void connect_to_service(ipcarg_t service, ipc_call_t *call, ipc_callid_t callid) |
{ |
unsigned long keys[3] = { service, 0, 0 }; |
link_t *hlp; |
hashed_service_t *hs; |
ipcarg_t retval; |
unsigned long keys[3] = { |
service, |
0, |
0 |
}; |
link_t *link = hash_table_find(&ns_hash_table, keys); |
if (!link) { |
if (IPC_GET_ARG4(*call) & IPC_FLAG_BLOCKING) { |
/* Blocking connection, add to pending list */ |
pending_req_t *pr = (pending_req_t *) malloc(sizeof(pending_req_t)); |
if (!pr) { |
retval = ENOMEM; |
goto out; |
} |
hlp = hash_table_find(&ns_hash_table, keys); |
if (!hlp) { |
return ENOENT; |
pr->service = service; |
pr->callid = callid; |
pr->arg2 = IPC_GET_ARG2(*call); |
pr->arg3 = IPC_GET_ARG3(*call); |
list_append(&pr->link, &pending_req); |
return; |
} |
retval = ENOENT; |
goto out; |
} |
hs = hash_table_get_instance(hlp, hashed_service_t, link); |
return ipc_forward_fast(callid, hs->phone, IPC_GET_ARG2(*call), |
IPC_GET_ARG3(*call), 0, IPC_FF_NONE); |
hashed_service_t *hs = hash_table_get_instance(link, hashed_service_t, link); |
retval = ipc_forward_fast(callid, hs->phone, IPC_GET_ARG2(*call), |
IPC_GET_ARG3(*call), 0, IPC_FF_NONE); |
out: |
if (!(callid & IPC_CALLID_NOTIFICATION)) |
ipc_answer_0(callid, retval); |
} |
/** Register clonable service. |
* |
* @param service Service to be registered. |
* @param phone Phone to be used for connections to the service. |
* @param call Pointer to call structure. |
* |
*/ |
void register_clonable(ipcarg_t service, ipcarg_t phone, ipc_call_t *call, |
ipc_callid_t callid) |
{ |
if (list_empty(&cs_req)) { |
/* There was no pending connection request. */ |
printf(NAME ": Unexpected clonable server.\n"); |
ipc_answer_0(callid, EBUSY); |
return; |
} |
cs_req_t *csr = list_get_instance(cs_req.next, cs_req_t, link); |
list_remove(&csr->link); |
/* Currently we can only handle a single type of clonable service. */ |
assert(csr->service == SERVICE_LOAD); |
ipc_answer_0(callid, EOK); |
int rc = ipc_forward_fast(csr->callid, phone, IPC_GET_ARG2(csr->call), |
IPC_GET_ARG3(csr->call), 0, IPC_FF_NONE); |
free(csr); |
ipc_hangup(phone); |
} |
/** Connect client to clonable service. |
* |
* @param service Service to be connected to. |
* @param call Pointer to call structure. |
* @param callid Call ID of the request. |
* |
* @return Zero on success or a value from @ref errno.h. |
* |
*/ |
void connect_to_clonable(ipcarg_t service, ipc_call_t *call, |
ipc_callid_t callid) |
{ |
assert(service == SERVICE_LOAD); |
cs_req_t *csr = malloc(sizeof(cs_req_t)); |
if (csr == NULL) { |
ipc_answer_0(callid, ENOMEM); |
return; |
} |
/* Spawn a loader. */ |
int rc = loader_spawn("loader"); |
if (rc < 0) { |
free(csr); |
ipc_answer_0(callid, rc); |
return; |
} |
csr->service = service; |
csr->call = *call; |
csr->callid = callid; |
/* |
* We can forward the call only after the server we spawned connects |
* to us. Meanwhile we might need to service more connection requests. |
* Thus we store the call in a queue. |
*/ |
list_append(&csr->link, &cs_req); |
} |
/** Compute hash index into NS hash table. |
* |
* @param key Pointer keys. However, only the first key (i.e. service number) |
* is used to compute the hash index. |
* is used to compute the hash index. |
* |
* @return Hash index corresponding to key[0]. |
* |
*/ |
hash_index_t ns_hash(unsigned long *key) |
{ |
assert(key); |
return *key % NS_HASH_TABLE_CHAINS; |
return (*key % NS_HASH_TABLE_CHAINS); |
} |
/** Compare a key with hashed item. |
243,20 → 429,20 |
* value. Note that this is close to being classified |
* as a nasty hack. |
* |
* @param key Array of keys. |
* @param key Array of keys. |
* @param keys Must be lesser or equal to 3. |
* @param item Pointer to a hash table item. |
* |
* @return Non-zero if the key matches the item, zero otherwise. |
* |
*/ |
int ns_compare(unsigned long key[], hash_count_t keys, link_t *item) |
{ |
hashed_service_t *hs; |
assert(key); |
assert(keys <= 3); |
assert(item); |
hs = hash_table_get_instance(item, hashed_service_t, link); |
hashed_service_t *hs = hash_table_get_instance(item, hashed_service_t, link); |
if (keys == 2) |
return key[1] == hs->in_phone_hash; |
267,6 → 453,7 |
/** Perform actions after removal of item from the hash table. |
* |
* @param item Item that was removed from the hash table. |
* |
*/ |
void ns_remove(link_t *item) |
{ |
274,6 → 461,6 |
free(hash_table_get_instance(item, hashed_service_t, link)); |
} |
/** |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/ns/Makefile |
---|
29,10 → 29,9 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
LIBS = $(LIBC_PREFIX)/libc.a |
53,13 → 52,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/srv/fhc/fhc.c |
---|
0,0 → 1,157 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup fhc |
* @{ |
*/ |
/** |
* @file fhc.c |
* @brief FHC bus controller driver. |
*/ |
#include <ipc/ipc.h> |
#include <ipc/services.h> |
#include <ipc/bus.h> |
#include <ipc/ns.h> |
#include <sysinfo.h> |
#include <as.h> |
#include <ddi.h> |
#include <align.h> |
#include <bool.h> |
#include <errno.h> |
#include <async.h> |
#include <align.h> |
#include <async.h> |
#include <stdio.h> |
#include <ipc/devmap.h> |
#define NAME "fhc" |
#define FHC_UART_INR 0x39 |
#define FHC_UART_IMAP 0x0 |
#define FHC_UART_ICLR 0x4 |
static void *fhc_uart_phys; |
static volatile uint32_t *fhc_uart_virt; |
static size_t fhc_uart_size; |
/** Handle one connection to fhc. |
* |
* @param iid Hash of the request that opened the connection. |
* @param icall Call data of the request that opened the connection. |
*/ |
static void fhc_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
ipc_callid_t callid; |
ipc_call_t call; |
/* |
* Answer the first IPC_M_CONNECT_ME_TO call. |
*/ |
ipc_answer_0(iid, EOK); |
while (1) { |
int inr; |
callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
case BUS_CLEAR_INTERRUPT: |
inr = IPC_GET_ARG1(call); |
switch (inr) { |
case FHC_UART_INR: |
fhc_uart_virt[FHC_UART_ICLR] = 0; |
ipc_answer_0(callid, EOK); |
break; |
default: |
ipc_answer_0(callid, ENOTSUP); |
break; |
} |
break; |
default: |
ipc_answer_0(callid, EINVAL); |
break; |
} |
} |
} |
/** Initialize the FHC driver. |
* |
* So far, the driver heavily depends on information provided by the kernel via |
* sysinfo. In the future, there should be a standalone FHC driver. |
*/ |
static bool fhc_init(void) |
{ |
ipcarg_t phonead; |
fhc_uart_size = sysinfo_value("fhc.uart.size"); |
fhc_uart_phys = (void *) sysinfo_value("fhc.uart.physical"); |
if (!fhc_uart_size) { |
printf(NAME ": no FHC UART registers found\n"); |
return false; |
} |
fhc_uart_virt = as_get_mappable_page(fhc_uart_size); |
int flags = AS_AREA_READ | AS_AREA_WRITE; |
int retval = physmem_map(fhc_uart_phys, (void *) fhc_uart_virt, |
ALIGN_UP(fhc_uart_size, PAGE_SIZE) >> PAGE_WIDTH, flags); |
if (retval < 0) { |
printf(NAME ": Error mapping FHC UART registers\n"); |
return false; |
} |
printf(NAME ": FHC UART registers at %p, %d bytes\n", fhc_uart_phys, |
fhc_uart_size); |
async_set_client_connection(fhc_connection); |
ipc_connect_to_me(PHONE_NS, SERVICE_FHC, 0, 0, &phonead); |
return true; |
} |
int main(int argc, char **argv) |
{ |
printf(NAME ": HelenOS FHC bus controller driver\n"); |
if (!fhc_init()) |
return -1; |
printf(NAME ": Accepting connections\n"); |
async_manager(); |
/* Never reached */ |
return 0; |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/fhc/Makefile |
---|
0,0 → 1,76 |
# |
# Copyright (c) 2006 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions |
# are met: |
# |
# - Redistributions of source code must retain the above copyright |
# notice, this list of conditions and the following disclaimer. |
# - Redistributions in binary form must reproduce the above copyright |
# notice, this list of conditions and the following disclaimer in the |
# documentation and/or other materials provided with the distribution. |
# - The name of the author may not be used to endorse or promote products |
# derived from this software without specific prior written permission. |
# |
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
## Setup toolchain |
# |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
LIBS = $(LIBC_PREFIX)/libc.a |
## Sources |
# |
OUTPUT = fhc |
SOURCES = \ |
fhc.c |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
.PHONY: all clean depend disasm |
all: $(OUTPUT) $(OUTPUT).disasm |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
$(OUTPUT).disasm: $(OUTPUT) |
$(OBJDUMP) -d $< >$@ |
%.o: %.S |
$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@ |
%.o: %.s |
$(AS) $(AFLAGS) $< -o $@ |
%.o: %.c |
$(CC) $(DEFS) $(CFLAGS) -c $< -o $@ |
//branches/tracing/uspace/srv/console/console.c |
---|
35,12 → 35,13 |
#include <libc.h> |
#include <fb.h> |
#include <ipc/ipc.h> |
#include <keys.h> |
#include <kbd.h> |
#include <kbd/keycode.h> |
#include <ipc/fb.h> |
#include <ipc/services.h> |
#include <errno.h> |
#include <key_buffer.h> |
#include <console.h> |
#include <ipc/console.h> |
#include <unistd.h> |
#include <async.h> |
#include <libadt/fifo.h> |
47,7 → 48,11 |
#include <screenbuffer.h> |
#include <sys/mman.h> |
#include <stdio.h> |
#include <string.h> |
#include <sysinfo.h> |
#include <event.h> |
#include "console.h" |
#include "gcons.h" |
#define MAX_KEYREQUESTS_BUFFERED 32 |
57,9 → 62,12 |
/** Index of currently used virtual console. |
*/ |
int active_console = 0; |
int prev_console = 0; |
/** Information about framebuffer |
*/ |
/** Phone to the keyboard driver. */ |
static int kbd_phone; |
/** Information about framebuffer */ |
struct { |
int phone; /**< Framebuffer phone */ |
ipcarg_t rows; /**< Framebuffer rows */ |
86,10 → 94,22 |
* faster virtual console |
* switching */ |
static int kernel_pixmap = -1; /**< Number of fb pixmap, where kernel |
* console is stored */ |
/** Information on row-span yet unsent to FB driver. */ |
struct { |
int row; /**< Row where the span lies. */ |
int col; /**< Leftmost column of the span. */ |
int n; /**< Width of the span. */ |
} fb_pending; |
/** Size of cwrite_buf. */ |
#define CWRITE_BUF_SIZE 256 |
/** Buffer for receiving data via the CONSOLE_WRITE call from the client. */ |
static char cwrite_buf[CWRITE_BUF_SIZE]; |
static void fb_putchar(wchar_t c, int row, int col); |
/** Find unused virtual console. |
* |
*/ |
109,42 → 129,168 |
async_msg_0(fb_info.phone, FB_CLEAR); |
} |
static void curs_visibility(int v) |
static void curs_visibility(bool visible) |
{ |
async_msg_1(fb_info.phone, FB_CURSOR_VISIBILITY, v); |
async_msg_1(fb_info.phone, FB_CURSOR_VISIBILITY, visible); |
} |
static void curs_hide_sync(void) |
{ |
ipc_call_sync_1_0(fb_info.phone, FB_CURSOR_VISIBILITY, false); |
} |
static void curs_goto(int row, int col) |
{ |
async_msg_2(fb_info.phone, FB_CURSOR_GOTO, row, col); |
} |
static void set_style(style_t *style) |
static void screen_yield(void) |
{ |
async_msg_2(fb_info.phone, FB_SET_STYLE, style->fg_color, |
style->bg_color); |
ipc_call_sync_0_0(fb_info.phone, FB_SCREEN_YIELD); |
} |
static void set_style_col(int fgcolor, int bgcolor) |
static void screen_reclaim(void) |
{ |
async_msg_2(fb_info.phone, FB_SET_STYLE, fgcolor, bgcolor); |
ipc_call_sync_0_0(fb_info.phone, FB_SCREEN_RECLAIM); |
} |
static void prtchr(char c, int row, int col) |
static void kbd_yield(void) |
{ |
async_msg_3(fb_info.phone, FB_PUTCHAR, c, row, col); |
ipc_call_sync_0_0(kbd_phone, KBD_YIELD); |
} |
/** Check key and process special keys. |
static void kbd_reclaim(void) |
{ |
ipc_call_sync_0_0(kbd_phone, KBD_RECLAIM); |
} |
static void set_style(int style) |
{ |
async_msg_1(fb_info.phone, FB_SET_STYLE, style); |
} |
static void set_color(int fgcolor, int bgcolor, int flags) |
{ |
async_msg_3(fb_info.phone, FB_SET_COLOR, fgcolor, bgcolor, flags); |
} |
static void set_rgb_color(int fgcolor, int bgcolor) |
{ |
async_msg_2(fb_info.phone, FB_SET_RGB_COLOR, fgcolor, bgcolor); |
} |
static void set_attrs(attrs_t *attrs) |
{ |
switch (attrs->t) { |
case at_style: |
set_style(attrs->a.s.style); |
break; |
case at_idx: |
set_color(attrs->a.i.fg_color, attrs->a.i.bg_color, |
attrs->a.i.flags); |
break; |
case at_rgb: |
set_rgb_color(attrs->a.r.fg_color, attrs->a.r.bg_color); |
break; |
} |
} |
/** Send an area of screenbuffer to the FB driver. */ |
static void fb_update_area(connection_t *conn, int x, int y, int w, int h) |
{ |
int i, j; |
int rc; |
attrs_t *attrs; |
keyfield_t *field; |
if (interbuffer) { |
for (j = 0; j < h; j++) { |
for (i = 0; i < w; i++) { |
interbuffer[i + j * w] = |
*get_field_at(&conn->screenbuffer, |
x + i, y + j); |
} |
} |
rc = async_req_4_0(fb_info.phone, FB_DRAW_TEXT_DATA, |
x, y, w, h); |
} else { |
rc = ENOTSUP; |
} |
if (rc != 0) { |
/* |
attrs = &conn->screenbuffer.attrs; |
for (j = 0; j < h; j++) { |
for (i = 0; i < w; i++) { |
field = get_field_at(&conn->screenbuffer, |
x + i, y + j); |
if (!attrs_same(*attrs, field->attrs)) |
set_attrs(&field->attrs); |
attrs = &field->attrs; |
fb_putchar(field->character, y + j, x + i); |
} |
}*/ |
} |
} |
/** Flush pending cells to FB. */ |
static void fb_pending_flush(void) |
{ |
screenbuffer_t *scr; |
scr = &(connections[active_console].screenbuffer); |
if (fb_pending.n > 0) { |
fb_update_area(&connections[active_console], fb_pending.col, |
fb_pending.row, fb_pending.n, 1); |
fb_pending.n = 0; |
} |
} |
/** Mark a character cell as changed. |
* |
* |
* This adds the cell to the pending rowspan if possible. Otherwise |
* the old span is flushed first. |
*/ |
static void write_char(int console, char key) |
static void cell_mark_changed(int row, int col) |
{ |
if (fb_pending.n != 0) { |
if (row != fb_pending.row || |
col != fb_pending.col + fb_pending.n) { |
fb_pending_flush(); |
} |
} |
if (fb_pending.n == 0) { |
fb_pending.row = row; |
fb_pending.col = col; |
} |
++fb_pending.n; |
} |
/** Print a character to the active VC with buffering. */ |
static void fb_putchar(wchar_t c, int row, int col) |
{ |
async_msg_3(fb_info.phone, FB_PUTCHAR, c, row, col); |
} |
/** Process a character from the client (TTY emulation). */ |
static void write_char(int console, wchar_t ch) |
{ |
bool flush_cursor = false; |
screenbuffer_t *scr = &(connections[console].screenbuffer); |
switch (key) { |
switch (ch) { |
case '\n': |
fb_pending_flush(); |
flush_cursor = true; |
scr->position_y++; |
scr->position_x = 0; |
break; |
159,20 → 305,24 |
break; |
scr->position_x--; |
if (console == active_console) |
prtchr(' ', scr->position_y, scr->position_x); |
cell_mark_changed(scr->position_y, scr->position_x); |
screenbuffer_putchar(scr, ' '); |
break; |
default: |
if (console == active_console) |
prtchr(key, scr->position_y, scr->position_x); |
cell_mark_changed(scr->position_y, scr->position_x); |
screenbuffer_putchar(scr, key); |
screenbuffer_putchar(scr, ch); |
scr->position_x++; |
} |
if (scr->position_x >= scr->size_x) { |
flush_cursor = true; |
scr->position_y++; |
} |
scr->position_y += (scr->position_x >= scr->size_x); |
if (scr->position_y >= scr->size_y) { |
fb_pending_flush(); |
scr->position_y = scr->size_y - 1; |
screenbuffer_clear_line(scr, scr->top_line); |
scr->top_line = (scr->top_line + 1) % scr->size_y; |
179,122 → 329,99 |
if (console == active_console) |
async_msg_1(fb_info.phone, FB_SCROLL, 1); |
} |
scr->position_x = scr->position_x % scr->size_x; |
if (console == active_console) |
if (console == active_console && flush_cursor) |
curs_goto(scr->position_y, scr->position_x); |
} |
/** Save current screen to pixmap, draw old pixmap |
* |
* @param oldpixmap Old pixmap |
* @return ID of pixmap of current screen |
*/ |
static int switch_screens(int oldpixmap) |
{ |
int newpmap; |
/* Save screen */ |
newpmap = async_req_0_0(fb_info.phone, FB_VP2PIXMAP); |
if (newpmap < 0) |
return -1; |
if (oldpixmap != -1) { |
/* Show old screen */ |
async_msg_2(fb_info.phone, FB_VP_DRAW_PIXMAP, 0, oldpixmap); |
/* Drop old pixmap */ |
async_msg_1(fb_info.phone, FB_DROP_PIXMAP, oldpixmap); |
} |
return newpmap; |
} |
/** Switch to new console */ |
static void change_console(int newcons) |
{ |
connection_t *conn; |
static int console_pixmap = -1; |
int i, j, rc; |
keyfield_t *field; |
style_t *style; |
attrs_t *attrs; |
if (newcons == active_console) |
return; |
fb_pending_flush(); |
if (newcons == KERNEL_CONSOLE) { |
if (active_console == KERNEL_CONSOLE) |
return; |
active_console = KERNEL_CONSOLE; |
curs_visibility(0); |
async_serialize_start(); |
if (kernel_pixmap == -1) { |
/* store/restore unsupported */ |
set_style_col(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND); |
clrscr(); |
} else { |
gcons_in_kernel(); |
console_pixmap = switch_screens(kernel_pixmap); |
kernel_pixmap = -1; |
} |
curs_hide_sync(); |
gcons_in_kernel(); |
screen_yield(); |
kbd_yield(); |
async_serialize_end(); |
__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE); |
return; |
} |
if (__SYSCALL0(SYS_DEBUG_ENABLE_CONSOLE)) { |
prev_console = active_console; |
active_console = KERNEL_CONSOLE; |
} else |
newcons = active_console; |
} |
async_serialize_start(); |
if (console_pixmap != -1) { |
kernel_pixmap = switch_screens(console_pixmap); |
console_pixmap = -1; |
} |
active_console = newcons; |
gcons_change_console(newcons); |
conn = &connections[active_console]; |
set_style(&conn->screenbuffer.style); |
curs_visibility(0); |
if (interbuffer) { |
for (i = 0; i < conn->screenbuffer.size_x; i++) |
if (newcons != KERNEL_CONSOLE) { |
async_serialize_start(); |
if (active_console == KERNEL_CONSOLE) { |
screen_reclaim(); |
kbd_reclaim(); |
gcons_redraw_console(); |
} |
active_console = newcons; |
gcons_change_console(newcons); |
conn = &connections[active_console]; |
set_attrs(&conn->screenbuffer.attrs); |
curs_visibility(false); |
if (interbuffer) { |
for (j = 0; j < conn->screenbuffer.size_y; j++) { |
unsigned int size_x; |
size_x = conn->screenbuffer.size_x; |
interbuffer[i + j * size_x] = |
*get_field_at(&conn->screenbuffer, i, j); |
for (i = 0; i < conn->screenbuffer.size_x; i++) { |
unsigned int size_x; |
size_x = conn->screenbuffer.size_x; |
interbuffer[j * size_x + i] = |
*get_field_at(&conn->screenbuffer, i, j); |
} |
} |
/* This call can preempt, but we are already at the end */ |
rc = async_req_0_0(fb_info.phone, FB_DRAW_TEXT_DATA); |
} |
if ((!interbuffer) || (rc != 0)) { |
set_style(&conn->screenbuffer.style); |
clrscr(); |
style = &conn->screenbuffer.style; |
/* This call can preempt, but we are already at the end */ |
rc = async_req_4_0(fb_info.phone, FB_DRAW_TEXT_DATA, |
0, 0, conn->screenbuffer.size_x, |
conn->screenbuffer.size_y); |
} |
if ((!interbuffer) || (rc != 0)) { |
set_attrs(&conn->screenbuffer.attrs); |
clrscr(); |
attrs = &conn->screenbuffer.attrs; |
for (j = 0; j < conn->screenbuffer.size_y; j++) |
for (i = 0; i < conn->screenbuffer.size_x; i++) { |
field = get_field_at(&conn->screenbuffer, i, j); |
if (!attrs_same(*attrs, field->attrs)) |
set_attrs(&field->attrs); |
attrs = &field->attrs; |
if ((field->character == ' ') && |
(attrs_same(field->attrs, |
conn->screenbuffer.attrs))) |
continue; |
for (j = 0; j < conn->screenbuffer.size_y; j++) |
for (i = 0; i < conn->screenbuffer.size_x; i++) { |
field = get_field_at(&conn->screenbuffer, i, j); |
if (!style_same(*style, field->style)) |
set_style(&field->style); |
style = &field->style; |
if ((field->character == ' ') && |
(style_same(field->style, |
conn->screenbuffer.style))) |
continue; |
prtchr(field->character, j, i); |
} |
fb_putchar(field->character, j, i); |
} |
} |
curs_goto(conn->screenbuffer.position_y, |
conn->screenbuffer.position_x); |
curs_visibility(conn->screenbuffer.is_cursor_visible); |
async_serialize_end(); |
} |
curs_goto(conn->screenbuffer.position_y, |
conn->screenbuffer.position_x); |
curs_visibility(conn->screenbuffer.is_cursor_visible); |
async_serialize_end(); |
} |
/** Handler for keyboard */ |
303,7 → 430,7 |
ipc_callid_t callid; |
ipc_call_t call; |
int retval; |
int c; |
kbd_event_t ev; |
connection_t *conn; |
int newcon; |
325,22 → 452,24 |
IPC_GET_ARG2(call)); |
retval = 0; |
break; |
case KBD_PUSHCHAR: |
/* got key from keyboard driver */ |
case KBD_EVENT: |
/* Got event from keyboard driver. */ |
retval = 0; |
c = IPC_GET_ARG1(call); |
ev.type = IPC_GET_ARG1(call); |
ev.key = IPC_GET_ARG2(call); |
ev.mods = IPC_GET_ARG3(call); |
ev.c = IPC_GET_ARG4(call); |
/* switch to another virtual console */ |
conn = &connections[active_console]; |
/* |
* if ((c >= KBD_KEY_F1) && (c < KBD_KEY_F1 + |
* CONSOLE_COUNT)) { |
*/ |
if ((c >= 0x101) && (c < 0x101 + CONSOLE_COUNT)) { |
if (c == 0x112) |
if ((ev.key >= KC_F1) && (ev.key < KC_F1 + |
CONSOLE_COUNT) && ((ev.mods & KM_CTRL) == 0)) { |
if (ev.key == KC_F12) |
change_console(KERNEL_CONSOLE); |
else |
change_console(c - 0x101); |
change_console(ev.key - KC_F1); |
break; |
} |
347,14 → 476,14 |
/* if client is awaiting key, send it */ |
if (conn->keyrequest_counter > 0) { |
conn->keyrequest_counter--; |
ipc_answer_1(fifo_pop(conn->keyrequests), EOK, |
c); |
ipc_answer_4(fifo_pop(conn->keyrequests), EOK, |
ev.type, ev.key, ev.mods, ev.c); |
break; |
} |
keybuffer_push(&conn->keybuffer, c); |
keybuffer_push(&conn->keybuffer, &ev); |
retval = 0; |
break; |
default: |
retval = ENOENT; |
363,6 → 492,39 |
} |
} |
/** Handle CONSOLE_WRITE call. */ |
static void cons_write(int consnum, ipc_callid_t rid, ipc_call_t *request) |
{ |
ipc_callid_t callid; |
size_t size; |
wchar_t ch; |
size_t off; |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
if (size > CWRITE_BUF_SIZE) |
size = CWRITE_BUF_SIZE; |
(void) ipc_data_write_finalize(callid, cwrite_buf, size); |
async_serialize_start(); |
off = 0; |
while (off < size) { |
ch = str_decode(cwrite_buf, &off, size); |
write_char(consnum, ch); |
} |
async_serialize_end(); |
gcons_notify_char(consnum); |
ipc_answer_1(rid, EOK, size); |
} |
/** Default thread for new connections */ |
static void client_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
369,9 → 531,10 |
ipc_callid_t callid; |
ipc_call_t call; |
int consnum; |
ipcarg_t arg1, arg2; |
ipcarg_t arg1, arg2, arg3, arg4; |
connection_t *conn; |
screenbuffer_t *scr; |
if ((consnum = find_free_connection()) == -1) { |
ipc_answer_0(iid, ELIMIT); |
return; |
383,23 → 546,28 |
gcons_notify_connect(consnum); |
conn->client_phone = IPC_GET_ARG5(*icall); |
screenbuffer_clear(&conn->screenbuffer); |
if (consnum == active_console) |
clrscr(); |
/* Accept the connection */ |
ipc_answer_0(iid, EOK); |
while (1) { |
async_serialize_end(); |
callid = async_get_call(&call); |
async_serialize_start(); |
arg1 = 0; |
arg2 = 0; |
arg3 = 0; |
arg4 = 0; |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
gcons_notify_disconnect(consnum); |
/* Answer all pending requests */ |
while (conn->keyrequest_counter > 0) { |
while (conn->keyrequest_counter > 0) { |
conn->keyrequest_counter--; |
ipc_answer_0(fifo_pop(conn->keyrequests), |
ENOENT); |
411,6 → 579,11 |
write_char(consnum, IPC_GET_ARG1(call)); |
gcons_notify_char(consnum); |
break; |
case CONSOLE_WRITE: |
async_serialize_end(); |
cons_write(consnum, callid, &call); |
async_serialize_start(); |
continue; |
case CONSOLE_CLEAR: |
/* Send message to fb */ |
if (consnum == active_console) { |
432,24 → 605,48 |
arg2 = fb_info.cols; |
break; |
case CONSOLE_FLUSH: |
if (consnum == active_console) |
fb_pending_flush(); |
if (consnum == active_console) { |
async_req_0_0(fb_info.phone, FB_FLUSH); |
scr = &(connections[consnum].screenbuffer); |
curs_goto(scr->position_y, scr->position_x); |
} |
break; |
case CONSOLE_SET_STYLE: |
fb_pending_flush(); |
arg1 = IPC_GET_ARG1(call); |
screenbuffer_set_style(&conn->screenbuffer, arg1); |
if (consnum == active_console) |
set_style(arg1); |
break; |
case CONSOLE_SET_COLOR: |
fb_pending_flush(); |
arg1 = IPC_GET_ARG1(call); |
arg2 = IPC_GET_ARG2(call); |
screenbuffer_set_style(&conn->screenbuffer, arg1, |
arg3 = IPC_GET_ARG3(call); |
screenbuffer_set_color(&conn->screenbuffer, arg1, |
arg2, arg3); |
if (consnum == active_console) |
set_color(arg1, arg2, arg3); |
break; |
case CONSOLE_SET_RGB_COLOR: |
fb_pending_flush(); |
arg1 = IPC_GET_ARG1(call); |
arg2 = IPC_GET_ARG2(call); |
screenbuffer_set_rgb_color(&conn->screenbuffer, arg1, |
arg2); |
if (consnum == active_console) |
set_style_col(arg1, arg2); |
set_rgb_color(arg1, arg2); |
break; |
case CONSOLE_CURSOR_VISIBILITY: |
fb_pending_flush(); |
arg1 = IPC_GET_ARG1(call); |
conn->screenbuffer.is_cursor_visible = arg1; |
if (consnum == active_console) |
curs_visibility(arg1); |
break; |
case CONSOLE_GETCHAR: |
case CONSOLE_GETKEY: |
if (keybuffer_empty(&conn->keybuffer)) { |
/* buffer is empty -> store request */ |
if (conn->keyrequest_counter < |
465,58 → 662,68 |
} |
continue; |
} |
int ch; |
keybuffer_pop(&conn->keybuffer, &ch); |
arg1 = ch; |
kbd_event_t ev; |
keybuffer_pop(&conn->keybuffer, &ev); |
arg1 = ev.type; |
arg2 = ev.key; |
arg3 = ev.mods; |
arg4 = ev.c; |
break; |
case CONSOLE_KCON_ENABLE: |
change_console(KERNEL_CONSOLE); |
break; |
} |
ipc_answer_2(callid, EOK, arg1, arg2); |
ipc_answer_4(callid, EOK, arg1, arg2, arg3, arg4); |
} |
} |
static void interrupt_received(ipc_callid_t callid, ipc_call_t *call) |
{ |
change_console(prev_console); |
} |
int main(int argc, char *argv[]) |
{ |
printf(NAME ": HelenOS Console service\n"); |
ipcarg_t phonehash; |
int kbd_phone; |
size_t ib_size; |
int i; |
async_set_client_connection(client_connection); |
/* Connect to keyboard driver */ |
kbd_phone = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0, 0); |
while (kbd_phone < 0) { |
usleep(10000); |
kbd_phone = ipc_connect_me_to(PHONE_NS, SERVICE_KEYBOARD, 0, 0); |
kbd_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_KEYBOARD, 0, 0); |
if (kbd_phone < 0) { |
printf(NAME ": Failed to connect to keyboard service\n"); |
return -1; |
} |
if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) |
if (ipc_connect_to_me(kbd_phone, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) { |
printf(NAME ": Failed to create callback from keyboard service\n"); |
return -1; |
} |
async_new_connection(phonehash, 0, NULL, keyboard_events); |
/* Connect to framebuffer driver */ |
fb_info.phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0, 0); |
while (fb_info.phone < 0) { |
usleep(10000); |
fb_info.phone = ipc_connect_me_to(PHONE_NS, SERVICE_VIDEO, 0, 0); |
fb_info.phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_VIDEO, 0, 0); |
if (fb_info.phone < 0) { |
printf(NAME ": Failed to connect to video service\n"); |
return -1; |
} |
/* Save old kernel screen */ |
kernel_pixmap = switch_screens(-1); |
/* Disable kernel output to the console */ |
__SYSCALL0(SYS_DEBUG_DISABLE_CONSOLE); |
/* Initialize gcons */ |
gcons_init(fb_info.phone); |
/* Synchronize, the gcons can have something in queue */ |
async_req_0_0(fb_info.phone, FB_FLUSH); |
/* Enable double buffering */ |
async_msg_2(fb_info.phone, FB_VIEWPORT_DB, (sysarg_t) -1, 1); |
async_req_0_2(fb_info.phone, FB_GET_CSIZE, &fb_info.rows, |
&fb_info.cols); |
set_style_col(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND); |
set_rgb_color(DEFAULT_FOREGROUND, DEFAULT_BACKGROUND); |
clrscr(); |
/* Init virtual consoles */ |
536,33 → 743,46 |
} |
} |
connections[KERNEL_CONSOLE].used = 1; |
interbuffer = mmap(NULL, |
sizeof(keyfield_t) * fb_info.cols * fb_info.rows, |
PROTO_READ | PROTO_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, 0, 0); |
if (!interbuffer) { |
/* Set up shared memory buffer. */ |
ib_size = sizeof(keyfield_t) * fb_info.cols * fb_info.rows; |
interbuffer = as_get_mappable_page(ib_size); |
fb_pending.n = 0; |
if (as_area_create(interbuffer, ib_size, AS_AREA_READ | |
AS_AREA_WRITE | AS_AREA_CACHEABLE) != interbuffer) { |
interbuffer = NULL; |
} |
if (interbuffer) { |
if (ipc_share_out_start(fb_info.phone, interbuffer, |
AS_AREA_READ) != EOK) { |
munmap(interbuffer, |
sizeof(keyfield_t) * fb_info.cols * fb_info.rows); |
as_area_destroy(interbuffer); |
interbuffer = NULL; |
} |
} |
curs_goto(0, 0); |
curs_visibility( |
connections[active_console].screenbuffer.is_cursor_visible); |
/* Register at NS */ |
if (ipc_connect_to_me(PHONE_NS, SERVICE_CONSOLE, 0, 0, &phonehash) != 0) |
return -1; |
/* Receive kernel notifications */ |
if (event_subscribe(EVENT_KCONSOLE, 0) != EOK) |
printf(NAME ": Error registering kconsole notifications\n"); |
async_set_interrupt_received(interrupt_received); |
// FIXME: avoid connectiong to itself, keep using klog |
// printf(NAME ": Accepting connections\n"); |
async_manager(); |
return 0; |
} |
return 0; |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/console/console.h |
---|
39,15 → 39,6 |
#define CONSOLE_COUNT 12 |
#define CONSOLE_GETCHAR 1026 |
#define CONSOLE_PUTCHAR 1027 |
#define CONSOLE_CLEAR 1028 |
#define CONSOLE_GOTO 1029 |
#define CONSOLE_GETSIZE 1030 |
#define CONSOLE_FLUSH 1031 |
#define CONSOLE_SET_STYLE 1032 |
#define CONSOLE_CURSOR_VISIBILITY 1033 |
#endif |
/** @} |
//branches/tracing/uspace/srv/console/gcons.c |
---|
81,7 → 81,7 |
static void vp_switch(int vp) |
{ |
async_msg_1(fbphone,FB_VIEWPORT_SWITCH, vp); |
async_msg_1(fbphone, FB_VIEWPORT_SWITCH, vp); |
} |
/** Create view port */ |
97,15 → 97,15 |
async_msg_0(fbphone, FB_CLEAR); |
} |
static void set_style(int fgcolor, int bgcolor) |
static void set_rgb_color(int fgcolor, int bgcolor) |
{ |
async_msg_2(fbphone, FB_SET_STYLE, fgcolor, bgcolor); |
async_msg_2(fbphone, FB_SET_RGB_COLOR, fgcolor, bgcolor); |
} |
/** Transparent putchar */ |
static void tran_putch(char c, int row, int col) |
{ |
async_msg_3(fbphone, FB_TRANS_PUTCHAR, c, row, col); |
async_msg_3(fbphone, FB_PUTCHAR, c, row, col); |
} |
/** Redraw the button showing state of a given console */ |
189,10 → 189,10 |
console_state[consnum] = CONS_DISCONNECTED_SEL; |
else |
console_state[consnum] = CONS_DISCONNECTED; |
if (active_console == KERNEL_CONSOLE) |
return; |
redraw_state(consnum); |
vp_switch(console_vp); |
} |
217,16 → 217,10 |
/** Change to kernel console */ |
void gcons_in_kernel(void) |
{ |
if (console_state[active_console] == CONS_DISCONNECTED_SEL) |
console_state[active_console] = CONS_DISCONNECTED; |
else |
console_state[active_console] = CONS_IDLE; |
redraw_state(active_console); |
if (animation != -1) |
async_msg_1(fbphone, FB_ANIM_STOP, animation); |
active_console = KERNEL_CONSOLE; /* Set to kernel console */ |
active_console = KERNEL_CONSOLE; |
vp_switch(0); |
} |
342,22 → 336,23 |
extern int _binary_helenos_ppm_size; |
extern char _binary_nameic_ppm_start[0]; |
extern int _binary_nameic_ppm_size; |
/** Redraws console graphics */ |
static void gcons_redraw_console(void) |
/** Redraws console graphics */ |
void gcons_redraw_console(void) |
{ |
int i; |
if (!use_gcons) |
return; |
vp_switch(0); |
set_style(MAIN_COLOR, MAIN_COLOR); |
set_rgb_color(MAIN_COLOR, MAIN_COLOR); |
clear(); |
draw_pixmap(_binary_helenos_ppm_start, |
(size_t) &_binary_helenos_ppm_size, xres - 66, 2); |
draw_pixmap(_binary_nameic_ppm_start, |
(size_t) &_binary_nameic_ppm_size, 5, 17); |
for (i = 0; i < CONSOLE_COUNT; i++) |
redraw_state(i); |
vp_switch(console_vp); |
459,16 → 454,16 |
int rc; |
int i; |
int status_start = STATUS_START; |
fbphone = phone; |
rc = async_req_0_2(phone, FB_GET_RESOLUTION, &xres, &yres); |
if (rc) |
return; |
if (xres < 800 || yres < 600) |
if ((xres < 800) || (yres < 600)) |
return; |
/* create console viewport */ |
/* Align width & height to character size */ |
console_vp = vp_create(CONSOLE_MARGIN, CONSOLE_TOP, |
486,7 → 481,7 |
if (cstatus_vp[i] < 0) |
return; |
vp_switch(cstatus_vp[i]); |
set_style(0x202020, 0xffffff); |
set_rgb_color(0x202020, 0xffffff); |
} |
/* Initialize icons */ |
506,13 → 501,12 |
ic_pixmaps[CONS_DISCONNECTED_SEL] = ic_pixmaps[CONS_SELECTED]; |
make_anim(); |
use_gcons = 1; |
console_state[0] = CONS_DISCONNECTED_SEL; |
console_state[KERNEL_CONSOLE] = CONS_KERNEL; |
gcons_redraw_console(); |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/console/screenbuffer.c |
---|
33,6 → 33,7 |
*/ |
#include <screenbuffer.h> |
#include <console/style.h> |
#include <malloc.h> |
#include <unistd.h> |
42,14 → 43,14 |
* @param scr screenbuffer |
* @param c stored character |
*/ |
void screenbuffer_putchar(screenbuffer_t *scr, char c) |
void screenbuffer_putchar(screenbuffer_t *scr, wchar_t ch) |
{ |
keyfield_t *field; |
field = get_field_at(scr, scr->position_x, scr->position_y); |
field->character = c; |
field->style = scr->style; |
field->character = ch; |
field->attrs = scr->attrs; |
} |
/** Initilize screenbuffer. Allocate space for screen content in accordance to given size. |
67,8 → 68,8 |
scr->size_x = size_x; |
scr->size_y = size_y; |
scr->style.fg_color = DEFAULT_FOREGROUND; |
scr->style.bg_color = DEFAULT_BACKGROUND; |
scr->attrs.t = at_style; |
scr->attrs.a.s.style = STYLE_NORMAL; |
scr->is_cursor_visible = 1; |
screenbuffer_clear(scr); |
85,7 → 86,7 |
for (i = 0; i < (scr->size_x * scr->size_y); i++) { |
scr->buffer[i].character = ' '; |
scr->buffer[i].style = scr->style; |
scr->buffer[i].attrs = scr->attrs; |
} |
scr->top_line = 0; |
103,7 → 104,7 |
for (i = 0; i < scr->size_x; i++) { |
scr->buffer[i + line * scr->size_x].character = ' '; |
scr->buffer[i + line * scr->size_x].style = scr->style; |
scr->buffer[i + line * scr->size_x].attrs = scr->attrs; |
} |
} |
136,12 → 137,37 |
* @param fg_color |
* @param bg_color |
*/ |
void screenbuffer_set_style(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color) |
void screenbuffer_set_style(screenbuffer_t *scr, int style) |
{ |
scr->style.fg_color = fg_color; |
scr->style.bg_color = bg_color; |
scr->attrs.t = at_style; |
scr->attrs.a.s.style = style; |
} |
/** Set new color. |
* @param scr |
* @param fg_color |
* @param bg_color |
*/ |
void screenbuffer_set_color(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color, unsigned int flags) |
{ |
scr->attrs.t = at_idx; |
scr->attrs.a.i.fg_color = fg_color; |
scr->attrs.a.i.bg_color = bg_color; |
scr->attrs.a.i.flags = flags; |
} |
/** Set new RGB color. |
* @param scr |
* @param fg_color |
* @param bg_color |
*/ |
void screenbuffer_set_rgb_color(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color) |
{ |
scr->attrs.t = at_rgb; |
scr->attrs.a.r.fg_color = fg_color; |
scr->attrs.a.r.bg_color = bg_color; |
} |
/** @} |
*/ |
//branches/tracing/uspace/srv/console/screenbuffer.h |
---|
35,28 → 35,53 |
#ifndef __SCREENBUFFER_H__ |
#define __SCREENBUFFER_H__ |
#include <stdint.h> |
#include <sys/types.h> |
#define DEFAULT_FOREGROUND 0x0 /**< default console foreground color */ |
#define DEFAULT_BACKGROUND 0xf0f0f0 /**< default console background color */ |
typedef struct { |
unsigned int bg_color; /**< background color */ |
unsigned int fg_color; /**< foreground color */ |
} style_t; |
uint8_t style; |
} attr_style_t; |
typedef struct { |
uint8_t fg_color; |
uint8_t bg_color; |
uint8_t flags; |
} attr_idx_t; |
typedef struct { |
uint32_t bg_color; /**< background color */ |
uint32_t fg_color; /**< foreground color */ |
} attr_rgb_t; |
typedef struct { |
enum { |
at_style, |
at_idx, |
at_rgb |
} t; |
union { |
attr_style_t s; |
attr_idx_t i; |
attr_rgb_t r; |
} a; |
} attrs_t; |
/** One field on screen. It contain one character and its attributes. */ |
typedef struct { |
char character; /**< Character itself */ |
style_t style; /**< Character`s attributes */ |
wchar_t character; /**< Character itself */ |
attrs_t attrs; /**< Character`s attributes */ |
} keyfield_t; |
/** Structure for buffering state of one virtual console. |
*/ |
typedef struct { |
keyfield_t *buffer; /**< Screen content - characters and its style. Used as cyclyc buffer. */ |
keyfield_t *buffer; /**< Screen content - characters and their attributes. Used as a circular buffer. */ |
unsigned int size_x, size_y; /**< Number of columns and rows */ |
unsigned int position_x, position_y; /**< Coordinates of last printed character for determining cursor position */ |
style_t style; /**< Current style */ |
attrs_t attrs; /**< Current attributes. */ |
unsigned int top_line; /**< Points to buffer[][] line that will be printed at screen as the first line */ |
unsigned char is_cursor_visible; /**< Cursor state - default is visible */ |
} screenbuffer_t; |
67,23 → 92,32 |
* @param y position on screen |
* @return keyfield structure with character and its attributes on x,y |
*/ |
static inline keyfield_t *get_field_at(screenbuffer_t *scr, unsigned int x, unsigned int y) |
static inline keyfield_t *get_field_at(screenbuffer_t *scr, unsigned int x, unsigned int y) |
{ |
return scr->buffer + x + ((y + scr->top_line) % scr->size_y) * scr->size_x; |
} |
/** Compares two styles. |
/** Compares two sets of attributes. |
* @param s1 first style |
* @param s2 second style |
* @return nonzero on equality |
*/ |
static inline int style_same(style_t s1, style_t s2) |
static inline int attrs_same(attrs_t a1, attrs_t a2) |
{ |
return s1.fg_color == s2.fg_color && s1.bg_color == s2.bg_color; |
if (a1.t != a2.t) return 0; |
switch (a1.t) { |
case at_style: return a1.a.s.style == a2.a.s.style; |
case at_idx: return a1.a.i.fg_color == a2.a.i.fg_color && |
a1.a.i.bg_color == a2.a.i.bg_color && |
a1.a.i.flags == a2.a.i.flags; |
case at_rgb: return a1.a.r.fg_color == a2.a.r.fg_color && |
a1.a.r.bg_color == a2.a.r.bg_color; |
} |
} |
void screenbuffer_putchar(screenbuffer_t *scr, char c); |
void screenbuffer_putchar(screenbuffer_t *scr, wchar_t c); |
screenbuffer_t *screenbuffer_init(screenbuffer_t *scr, int size_x, int size_y); |
void screenbuffer_clear(screenbuffer_t *scr); |
90,7 → 124,11 |
void screenbuffer_clear_line(screenbuffer_t *scr, unsigned int line); |
void screenbuffer_copy_buffer(screenbuffer_t *scr, keyfield_t *dest); |
void screenbuffer_goto(screenbuffer_t *scr, unsigned int x, unsigned int y); |
void screenbuffer_set_style(screenbuffer_t *scr, unsigned int fg_color, unsigned int bg_color); |
void screenbuffer_set_style(screenbuffer_t *scr, int style); |
void screenbuffer_set_color(screenbuffer_t *scr, unsigned int fg_color, |
unsigned int bg_color, unsigned int attr); |
void screenbuffer_set_rgb_color(screenbuffer_t *scr, unsigned int fg_color, |
unsigned int bg_color); |
#endif |
//branches/tracing/uspace/srv/console/gcons.h |
---|
36,6 → 36,7 |
#define _GCONS_H_ |
void gcons_init(int phone); |
void gcons_redraw_console(void); |
void gcons_change_console(int consnum); |
void gcons_notify_char(int consnum); |
void gcons_in_kernel(void); |
//branches/tracing/uspace/srv/console/Makefile |
---|
29,12 → 29,11 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I. -I../kbd/include -I../fb |
LIBS = $(LIBC_PREFIX)/libc.a |
59,6 → 58,8 |
$(addsuffix .o,$(basename $(IMAGES))) |
ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES))) |
OBJECTS := $(GENERIC_OBJECTS) $(ARCH_OBJECTS) |
.PHONY: all clean depend disasm |
all: $(OUTPUT) $(OUTPUT).disasm |
66,13 → 67,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(ARCH_OBJECTS) $(GENERIC_OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(GENERIC_OBJECTS) $(ARCH_OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/srv/loader/main.c |
---|
27,12 → 27,12 |
*/ |
/** @addtogroup loader |
* @brief Loads and runs programs from VFS. |
* @brief Loads and runs programs from VFS. |
* @{ |
*/ |
*/ |
/** |
* @file |
* @brief Loads and runs programs from VFS. |
* @brief Loads and runs programs from VFS. |
* |
* The program loader is a special init binary. Its image is used |
* to create a new task upon a @c task_spawn syscall. The syscall |
50,8 → 50,10 |
#include <fcntl.h> |
#include <sys/types.h> |
#include <ipc/ipc.h> |
#include <ipc/services.h> |
#include <ipc/loader.h> |
#include <loader/pcb.h> |
#include <console.h> |
#include <errno.h> |
#include <async.h> |
#include <as.h> |
59,6 → 61,8 |
#include <elf.h> |
#include <elf_load.h> |
#define DPRINTF(...) |
/** Pathname of the file that will be loaded */ |
static char *pathname = NULL; |
77,6 → 81,8 |
static bool is_dyn_linked; |
/** Used to limit number of connections to one. */ |
static bool connected; |
static void loader_get_taskid(ipc_callid_t rid, ipc_call_t *request) |
{ |
83,17 → 89,18 |
ipc_callid_t callid; |
task_id_t task_id; |
size_t len; |
task_id = task_get_id(); |
if (!ipc_data_read_receive(&callid, &len)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
if (len > sizeof(task_id)) len = sizeof(task_id); |
if (len > sizeof(task_id)) |
len = sizeof(task_id); |
ipc_data_read_finalize(callid, &task_id, len); |
ipc_answer_0(rid, EOK); |
} |
109,13 → 116,13 |
ipc_callid_t callid; |
size_t len; |
char *name_buf; |
if (!ipc_data_write_receive(&callid, &len)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
name_buf = malloc(len + 1); |
if (!name_buf) { |
ipc_answer_0(callid, ENOMEM); |
122,15 → 129,15 |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
ipc_data_write_finalize(callid, name_buf, len); |
ipc_answer_0(rid, EOK); |
if (pathname != NULL) { |
free(pathname); |
pathname = NULL; |
} |
name_buf[len] = '\0'; |
pathname = name_buf; |
} |
143,55 → 150,53 |
static void loader_set_args(ipc_callid_t rid, ipc_call_t *request) |
{ |
ipc_callid_t callid; |
size_t buf_len, arg_len; |
size_t buf_size, arg_size; |
char *p; |
int n; |
if (!ipc_data_write_receive(&callid, &buf_len)) { |
if (!ipc_data_write_receive(&callid, &buf_size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
if (arg_buf != NULL) { |
free(arg_buf); |
arg_buf = NULL; |
} |
if (argv != NULL) { |
free(argv); |
argv = NULL; |
} |
arg_buf = malloc(buf_len + 1); |
arg_buf = malloc(buf_size + 1); |
if (!arg_buf) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
ipc_data_write_finalize(callid, arg_buf, buf_len); |
ipc_answer_0(rid, EOK); |
arg_buf[buf_len] = '\0'; |
ipc_data_write_finalize(callid, arg_buf, buf_size); |
arg_buf[buf_size] = '\0'; |
/* |
* Count number of arguments |
*/ |
p = arg_buf; |
n = 0; |
while (p < arg_buf + buf_len) { |
arg_len = strlen(p); |
p = p + arg_len + 1; |
while (p < arg_buf + buf_size) { |
arg_size = str_size(p); |
p = p + arg_size + 1; |
++n; |
} |
/* Allocate argv */ |
argv = malloc((n + 1) * sizeof(char *)); |
if (argv == NULL) { |
free(arg_buf); |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
201,16 → 206,18 |
*/ |
p = arg_buf; |
n = 0; |
while (p < arg_buf + buf_len) { |
while (p < arg_buf + buf_size) { |
argv[n] = p; |
arg_len = strlen(p); |
p = p + arg_len + 1; |
arg_size = str_size(p); |
p = p + arg_size + 1; |
++n; |
} |
argc = n; |
argv[n] = NULL; |
ipc_answer_0(rid, EOK); |
} |
/** Load the previously selected program. |
222,19 → 229,19 |
static int loader_load(ipc_callid_t rid, ipc_call_t *request) |
{ |
int rc; |
rc = elf_load_file(pathname, 0, &prog_info); |
if (rc < 0) { |
printf("Failed to load executable '%s'.\n", pathname); |
if (rc != EE_OK) { |
DPRINTF("Failed to load executable '%s'.\n", pathname); |
ipc_answer_0(rid, EINVAL); |
return 1; |
} |
elf_create_pcb(&prog_info, &pcb); |
pcb.argc = argc; |
pcb.argv = argv; |
if (prog_info.interp == NULL) { |
/* Statically linked program */ |
is_dyn_linked = false; |
241,17 → 248,18 |
ipc_answer_0(rid, EOK); |
return 0; |
} |
rc = elf_load_file(prog_info.interp, 0, &interp_info); |
if (rc < 0) { |
printf("Failed to load interpreter '%s.'\n", prog_info.interp); |
if (rc != EE_OK) { |
DPRINTF("Failed to load interpreter '%s.'\n", |
prog_info.interp); |
ipc_answer_0(rid, EINVAL); |
return 1; |
} |
is_dyn_linked = true; |
ipc_answer_0(rid, EOK); |
return 0; |
} |
264,18 → 272,24 |
*/ |
static void loader_run(ipc_callid_t rid, ipc_call_t *request) |
{ |
const char *cp; |
/* Set the task name. */ |
cp = str_rchr(pathname, '/'); |
cp = (cp == NULL) ? pathname : (cp + 1); |
task_set_name(cp); |
if (is_dyn_linked == true) { |
/* Dynamically linked program */ |
printf("run dynamic linker\n"); |
printf("entry point: 0x%lx\n", interp_info.entry); |
close_console(); |
DPRINTF("Run ELF interpreter.\n"); |
DPRINTF("Entry point: 0x%lx\n", interp_info.entry); |
console_close(); |
ipc_answer_0(rid, EOK); |
elf_run(&interp_info, &pcb); |
} else { |
/* Statically linked program */ |
close_console(); |
console_close(); |
ipc_answer_0(rid, EOK); |
elf_run(&prog_info, &pcb); |
} |
293,13 → 307,25 |
ipc_callid_t callid; |
ipc_call_t call; |
int retval; |
/* Already have a connection? */ |
if (connected) { |
ipc_answer_0(iid, ELIMIT); |
return; |
} |
connected = true; |
/* Accept the connection */ |
ipc_answer_0(iid, EOK); |
/* Ignore parameters, the connection is already open */ |
(void)iid; (void)icall; |
(void) iid; |
(void) icall; |
while (1) { |
callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
exit(0); |
324,7 → 350,7 |
} |
if ((callid & IPC_CALLID_NOTIFICATION) == 0 && |
IPC_GET_METHOD(call) != IPC_M_PHONE_HUNGUP) { |
printf("responding EINVAL to method %d\n", |
DPRINTF("Responding EINVAL to method %d.\n", |
IPC_GET_METHOD(call)); |
ipc_answer_0(callid, EINVAL); |
} |
335,31 → 361,20 |
*/ |
int main(int argc, char *argv[]) |
{ |
ipc_callid_t callid; |
ipc_call_t call; |
ipcarg_t phone_hash; |
/* The first call only communicates the incoming phone hash */ |
callid = ipc_wait_for_call(&call); |
if (IPC_GET_METHOD(call) != LOADER_HELLO) { |
if (IPC_GET_METHOD(call) != IPC_M_PHONE_HUNGUP) |
ipc_answer_0(callid, EINVAL); |
return 1; |
} |
ipc_answer_0(callid, EOK); |
phone_hash = call.in_phone_hash; |
/* |
* Up until now async must not be used as it couldn't |
* handle incoming requests. (Which means e.g. printf() |
* cannot be used) |
*/ |
async_new_connection(phone_hash, 0, NULL, loader_connection); |
ipcarg_t phonead; |
connected = false; |
/* Set a handler of incomming connections. */ |
async_set_client_connection(loader_connection); |
/* Register at naming service. */ |
if (ipc_connect_to_me(PHONE_NS, SERVICE_LOAD, 0, 0, &phonead) != 0) |
return -1; |
async_manager(); |
/* not reached */ |
/* Never reached */ |
return 0; |
} |
//branches/tracing/uspace/srv/loader/elf_load.c |
---|
57,6 → 57,8 |
#include "elf_load.h" |
#include "arch.h" |
#define DPRINTF(...) |
static char *error_codes[] = { |
"no error", |
"invalid image", |
106,11 → 108,9 |
int fd; |
int rc; |
// printf("open and read '%s'...\n", file_name); |
fd = open(file_name, O_RDONLY); |
if (fd < 0) { |
printf("failed opening file\n"); |
DPRINTF("failed opening file\n"); |
return -1; |
} |
171,19 → 171,18 |
rc = my_read(elf->fd, header, sizeof(elf_header_t)); |
if (rc < 0) { |
printf("read error\n"); |
DPRINTF("Read error.\n"); |
return EE_INVALID; |
} |
elf->header = header; |
// printf("ELF-load:"); |
/* Identify ELF */ |
if (header->e_ident[EI_MAG0] != ELFMAG0 || |
header->e_ident[EI_MAG1] != ELFMAG1 || |
header->e_ident[EI_MAG2] != ELFMAG2 || |
header->e_ident[EI_MAG3] != ELFMAG3) { |
printf("invalid header\n"); |
DPRINTF("Invalid header.\n"); |
return EE_INVALID; |
} |
193,18 → 192,18 |
header->e_ident[EI_VERSION] != EV_CURRENT || |
header->e_version != EV_CURRENT || |
header->e_ident[EI_CLASS] != ELF_CLASS) { |
printf("incompatible data/version/class\n"); |
DPRINTF("Incompatible data/version/class.\n"); |
return EE_INCOMPATIBLE; |
} |
if (header->e_phentsize != sizeof(elf_segment_header_t)) { |
printf("e_phentsize:%d != %d\n", header->e_phentsize, |
DPRINTF("e_phentsize:%d != %d\n", header->e_phentsize, |
sizeof(elf_segment_header_t)); |
return EE_INCOMPATIBLE; |
} |
if (header->e_shentsize != sizeof(elf_section_header_t)) { |
printf("e_shentsize:%d != %d\n", header->e_shentsize, |
DPRINTF("e_shentsize:%d != %d\n", header->e_shentsize, |
sizeof(elf_section_header_t)); |
return EE_INCOMPATIBLE; |
} |
211,23 → 210,19 |
/* Check if the object type is supported. */ |
if (header->e_type != ET_EXEC && header->e_type != ET_DYN) { |
printf("Object type %d is not supported\n", header->e_type); |
DPRINTF("Object type %d is not supported\n", header->e_type); |
return EE_UNSUPPORTED; |
} |
/* Shared objects can be loaded with a bias */ |
// printf("Object type: %d\n", header->e_type); |
if (header->e_type == ET_DYN) |
elf->bias = so_bias; |
else |
elf->bias = 0; |
// printf("Bias set to 0x%x\n", elf->bias); |
elf->info->interp = NULL; |
elf->info->dynamic = NULL; |
// printf("parse segments\n"); |
/* Walk through all segment headers and process them. */ |
for (i = 0; i < header->e_phnum; i++) { |
elf_segment_header_t segment_hdr; |
239,7 → 234,7 |
rc = my_read(elf->fd, &segment_hdr, |
sizeof(elf_segment_header_t)); |
if (rc < 0) { |
printf("read error\n"); |
DPRINTF("Read error.\n"); |
return EE_INVALID; |
} |
248,7 → 243,7 |
return rc; |
} |
// printf("parse sections\n"); |
DPRINTF("Parse sections.\n"); |
/* Inspect all section headers and proccess them. */ |
for (i = 0; i < header->e_shnum; i++) { |
261,7 → 256,7 |
rc = my_read(elf->fd, §ion_hdr, |
sizeof(elf_section_header_t)); |
if (rc < 0) { |
printf("read error\n"); |
DPRINTF("Read error.\n"); |
return EE_INVALID; |
} |
273,7 → 268,7 |
elf->info->entry = |
(entry_point_t)((uint8_t *)header->e_entry + elf->bias); |
// printf("done\n"); |
DPRINTF("Done.\n"); |
return EE_OK; |
} |
316,7 → 311,7 |
case PT_LOPROC: |
case PT_HIPROC: |
default: |
printf("segment p_type %d unknown\n", entry->p_type); |
DPRINTF("Segment p_type %d unknown.\n", entry->p_type); |
return EE_UNSUPPORTED; |
break; |
} |
339,8 → 334,8 |
size_t mem_sz; |
int rc; |
// printf("load segment at addr 0x%x, size 0x%x\n", entry->p_vaddr, |
// entry->p_memsz); |
DPRINTF("Load segment at addr 0x%x, size 0x%x\n", entry->p_vaddr, |
entry->p_memsz); |
bias = elf->bias; |
347,7 → 342,7 |
if (entry->p_align > 1) { |
if ((entry->p_offset % entry->p_align) != |
(entry->p_vaddr % entry->p_align)) { |
printf("align check 1 failed offset%%align=%d, " |
DPRINTF("Align check 1 failed offset%%align=%d, " |
"vaddr%%align=%d\n", |
entry->p_offset % entry->p_align, |
entry->p_vaddr % entry->p_align |
369,8 → 364,8 |
base = ALIGN_DOWN(entry->p_vaddr, PAGE_SIZE); |
mem_sz = entry->p_memsz + (entry->p_vaddr - base); |
// printf("map to p_vaddr=0x%x-0x%x...\n", entry->p_vaddr + bias, |
// entry->p_vaddr + bias + ALIGN_UP(entry->p_memsz, PAGE_SIZE)); |
DPRINTF("Map to p_vaddr=0x%x-0x%x.\n", entry->p_vaddr + bias, |
entry->p_vaddr + bias + ALIGN_UP(entry->p_memsz, PAGE_SIZE)); |
/* |
* For the course of loading, the area needs to be readable |
379,17 → 374,16 |
a = as_area_create((uint8_t *)base + bias, mem_sz, |
AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE); |
if (a == (void *)(-1)) { |
printf("memory mapping failed\n"); |
DPRINTF("Memory mapping failed.\n"); |
return EE_MEMORY; |
} |
// printf("as_area_create(0x%lx, 0x%x, %d) -> 0x%lx\n", |
// entry->p_vaddr+bias, entry->p_memsz, flags, (uintptr_t)a); |
DPRINTF("as_area_create(0x%lx, 0x%x, %d) -> 0x%lx\n", |
entry->p_vaddr+bias, entry->p_memsz, flags, (uintptr_t)a); |
/* |
* Load segment data |
*/ |
// printf("seek to %d\n", entry->p_offset); |
rc = lseek(elf->fd, entry->p_offset, SEEK_SET); |
if (rc < 0) { |
printf("seek error\n"); |
396,11 → 390,10 |
return EE_INVALID; |
} |
// printf("read 0x%x bytes to address 0x%x\n", entry->p_filesz, entry->p_vaddr+bias); |
/* rc = read(fd, (void *)(entry->p_vaddr + bias), entry->p_filesz); |
if (rc < 0) { printf("read error\n"); return EE_INVALID; }*/ |
/* Long reads are not possible yet. Load segment picewise */ |
/* Long reads are not possible yet. Load segment piecewise. */ |
unsigned left, now; |
uint8_t *dp; |
412,12 → 405,10 |
now = 16384; |
if (now > left) now = left; |
// printf("read %d...", now); |
rc = my_read(elf->fd, dp, now); |
// printf("->%d\n", rc); |
if (rc < 0) { |
printf("read error\n"); |
DPRINTF("Read error.\n"); |
return EE_INVALID; |
} |
425,10 → 416,9 |
dp += now; |
} |
// printf("set area flags to %d\n", flags); |
rc = as_area_change_flags((uint8_t *)entry->p_vaddr + bias, flags); |
if (rc != 0) { |
printf("failed to set memory area flags\n"); |
DPRINTF("Failed to set memory area flags.\n"); |
return EE_MEMORY; |
} |
465,7 → 455,7 |
/* Record pointer to dynamic section into info structure */ |
elf->info->dynamic = |
(void *)((uint8_t *)entry->sh_addr + elf->bias); |
printf("dynamic section found at 0x%x\n", |
DPRINTF("Dynamic section found at 0x%x.\n", |
(uintptr_t)elf->info->dynamic); |
break; |
default: |
//branches/tracing/uspace/srv/loader/Makefile |
---|
27,29 → 27,19 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
include ../../Makefile.config |
## Setup toolchain |
# |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
include arch/$(ARCH)/Makefile.inc |
include arch/$(UARCH)/Makefile.inc |
CFLAGS += -Iinclude |
LIBS = $(LIBC_PREFIX)/libc.a $(SOFTINT_PREFIX)/libsoftint.a |
DEFS += -DRELEASE=\"$(RELEASE)\" |
ifdef REVISION |
DEFS += "-DREVISION=\"$(REVISION)\"" |
endif |
ifdef TIMESTAMP |
DEFS += "-DTIMESTAMP=\"$(TIMESTAMP)\"" |
endif |
## Sources |
# |
69,18 → 59,18 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OBJECTS) $(OUTPUT).map $(OUTPUT).disasm arch/$(ARCH)/_link.ld Makefile.depend |
-rm -f $(OUTPUT) $(OBJECTS) $(OUTPUT).map $(OUTPUT).disasm arch/$(UARCH)/_link.ld Makefile.depend |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) arch/$(ARCH)/_link.ld |
$(LD) -T arch/$(ARCH)/_link.ld $(LFLAGS) $(OBJECTS) $(LIBS) -o $@ -Map $(OUTPUT).map |
$(OUTPUT): $(OBJECTS) $(LIBS) arch/$(UARCH)/_link.ld |
$(LD) -T arch/$(UARCH)/_link.ld $(LFLAGS) $(OBJECTS) $(LIBS) -o $@ -Map $(OUTPUT).map |
disasm: |
$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm |
arch/$(ARCH)/_link.ld: arch/$(ARCH)/_link.ld.in |
arch/$(UARCH)/_link.ld: arch/$(UARCH)/_link.ld.in |
$(CC) $(DEFS) $(CFLAGS) -DLIBC_PREFIX=$(LIBC_PREFIX) -E -x c $< | grep -v "^\#" > $@ |
%.o: %.S |
//branches/tracing/uspace/srv/loader/arch/sparc64/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
//branches/tracing/uspace/srv/loader/arch/sparc64/Makefile.inc |
---|
27,4 → 27,4 |
# |
CFLAGS += -D__64_BITS__ |
ARCH_SOURCES := arch/$(ARCH)/sparc64.s |
ARCH_SOURCES := arch/$(UARCH)/sparc64.s |
//branches/tracing/uspace/srv/loader/arch/ia64/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
12,15 → 12,10 |
*(.interp); |
} :interp |
. = 0x00084000 + SIZEOF_HEADERS; |
/* On Itanium code sections must be aligned to 16 bytes. */ |
. = ALIGN(0x800000000 + SIZEOF_HEADERS, 16); |
.init : { |
LONG(0); |
LONG(0); |
LONG(0); |
LONG(0); |
LONG(0); |
LONG(0); |
*(.init); |
} : text |
.text : { |
//branches/tracing/uspace/srv/loader/arch/ia64/Makefile.inc |
---|
27,5 → 27,5 |
# |
CFLAGS += -D__64_BITS__ |
ARCH_SOURCES := arch/$(ARCH)/ia64.s |
ARCH_SOURCES := arch/$(UARCH)/ia64.s |
AFLAGS += -xexplicit |
//branches/tracing/uspace/srv/loader/arch/arm32/_link.ld.in |
---|
1,8 → 1,8 |
/* |
/* |
* The only difference from _link.ld.in for regular statically-linked apps |
* is the base address. |
*/ |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
//branches/tracing/uspace/srv/loader/arch/arm32/Makefile.inc |
---|
27,4 → 27,4 |
# |
CFLAGS += -D__32_BITS__ |
ARCH_SOURCES := arch/$(ARCH)/arm32.s |
ARCH_SOURCES := arch/$(UARCH)/arm32.s |
//branches/tracing/uspace/srv/loader/arch/mips32eb |
---|
0,0 → 1,0 |
link mips32 |
//branches/tracing/uspace/srv/loader/arch/ppc32/_link.ld.in |
---|
1,8 → 1,8 |
/* |
/* |
* The only difference from _link.ld.in for regular statically-linked apps |
* is the base address. |
*/ |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
//branches/tracing/uspace/srv/loader/arch/ppc32/Makefile.inc |
---|
27,4 → 27,4 |
# |
CFLAGS += -D__32_BITS__ |
ARCH_SOURCES := arch/$(ARCH)/ppc32.s |
ARCH_SOURCES := arch/$(UARCH)/ppc32.s |
//branches/tracing/uspace/srv/loader/arch/amd64/_link.ld.in |
---|
1,4 → 1,4 |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
//branches/tracing/uspace/srv/loader/arch/amd64/Makefile.inc |
---|
27,4 → 27,4 |
# |
CFLAGS += -D__64_BITS__ |
ARCH_SOURCES := arch/$(ARCH)/amd64.s |
ARCH_SOURCES := arch/$(UARCH)/amd64.s |
//branches/tracing/uspace/srv/loader/arch/mips32/_link.ld.in |
---|
1,8 → 1,8 |
/* |
/* |
* The only difference from _link.ld.in for regular statically-linked apps |
* is the base address. |
*/ |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
//branches/tracing/uspace/srv/loader/arch/mips32/Makefile.inc |
---|
27,4 → 27,4 |
# |
CFLAGS += -D__32_BITS__ |
ARCH_SOURCES := arch/$(ARCH)/mips32.s |
ARCH_SOURCES := arch/$(UARCH)/mips32.s |
//branches/tracing/uspace/srv/loader/arch/ia32/_link.ld.in |
---|
1,8 → 1,8 |
/* |
/* |
* The difference from _link.ld.in for regular statically-linked apps |
* is the base address and the special interp section. |
*/ |
STARTUP(LIBC_PREFIX/arch/ARCH/src/entry.o) |
STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o) |
ENTRY(__entry) |
PHDRS { |
//branches/tracing/uspace/srv/loader/arch/ia32/Makefile.inc |
---|
27,4 → 27,4 |
# |
CFLAGS += -D__32_BITS__ |
ARCH_SOURCES := arch/$(ARCH)/ia32.s |
ARCH_SOURCES := arch/$(UARCH)/ia32.s |
//branches/tracing/uspace/srv/fb/serial_console.c |
---|
38,15 → 38,66 |
*/ |
#include <stdio.h> |
#include <ipc/ipc.h> |
#include <async.h> |
#include <ipc/fb.h> |
#include <bool.h> |
#include <errno.h> |
#include <console/color.h> |
#include <console/style.h> |
#include "../console/screenbuffer.h" |
#include "main.h" |
#include "serial_console.h" |
#define MAX_CONTROL 20 |
static uint32_t width; |
static uint32_t height; |
static void serial_sgr(const unsigned int mode); |
void serial_putchar(wchar_t ch); |
static int scr_width; |
static int scr_height; |
static bool color = true; /** True if producing color output. */ |
static bool utf8 = false; /** True if producing UTF8 output. */ |
static putc_function_t putc_function; |
/* Allow only 1 connection */ |
static int client_connected = 0; |
enum sgr_color_index { |
CI_BLACK = 0, |
CI_RED = 1, |
CI_GREEN = 2, |
CI_BROWN = 3, |
CI_BLUE = 4, |
CI_MAGENTA = 5, |
CI_CYAN = 6, |
CI_WHITE = 7, |
}; |
enum sgr_command { |
SGR_RESET = 0, |
SGR_BOLD = 1, |
SGR_BLINK = 5, |
SGR_REVERSE = 7, |
SGR_NORMAL_INT = 22, |
SGR_BLINK_OFF = 25, |
SGR_REVERSE_OFF = 27, |
SGR_FGCOLOR = 30, |
SGR_BGCOLOR = 40 |
}; |
static int color_map[] = { |
[COLOR_BLACK] = CI_BLACK, |
[COLOR_BLUE] = CI_RED, |
[COLOR_GREEN] = CI_GREEN, |
[COLOR_CYAN] = CI_CYAN, |
[COLOR_RED] = CI_RED, |
[COLOR_MAGENTA] = CI_MAGENTA, |
[COLOR_YELLOW] = CI_BROWN, |
[COLOR_WHITE] = CI_WHITE |
}; |
void serial_puts(char *str) |
{ |
while (*str) |
53,18 → 104,49 |
putc_function(*(str++)); |
} |
void serial_putchar(wchar_t ch) |
{ |
uint8_t buf[STR_BOUNDS(1)]; |
size_t offs; |
size_t i; |
if (utf8 != true) { |
if (ch >= 0 && ch < 128) |
(*putc_function)((uint8_t) ch); |
else |
(*putc_function)('?'); |
return; |
} |
offs = 0; |
if (chr_encode(ch, buf, &offs, STR_BOUNDS(1)) == EOK) { |
for (i = 0; i < offs; i++) |
(*putc_function)(buf[i]); |
} else { |
(*putc_function)('?'); |
} |
} |
void serial_goto(const unsigned int row, const unsigned int col) |
{ |
if ((row > height) || (col > width)) |
if ((row > scr_height) || (col > scr_width)) |
return; |
char control[20]; |
snprintf(control, 20, "\033[%u;%uf", row + 1, col + 1); |
char control[MAX_CONTROL]; |
snprintf(control, MAX_CONTROL, "\033[%u;%uf", row + 1, col + 1); |
serial_puts(control); |
} |
void serial_clrscr(void) |
{ |
/* Initialize graphic rendition attributes. */ |
serial_sgr(SGR_RESET); |
if (color) { |
serial_sgr(SGR_FGCOLOR + CI_BLACK); |
serial_sgr(SGR_BGCOLOR + CI_WHITE); |
} |
serial_puts("\033[2J"); |
} |
71,7 → 153,7 |
void serial_scroll(int i) |
{ |
if (i > 0) { |
serial_goto(height - 1, 0); |
serial_goto(scr_height - 1, 0); |
while (i--) |
serial_puts("\033D"); |
} else if (i < 0) { |
81,7 → 163,8 |
} |
} |
void serial_set_style(const unsigned int mode) |
/** ECMA-48 Set Graphics Rendition. */ |
static void serial_sgr(const unsigned int mode) |
{ |
char control[MAX_CONTROL]; |
snprintf(control, MAX_CONTROL, "\033[%um", mode); |
88,6 → 171,14 |
serial_puts(control); |
} |
/** Set scrolling region. */ |
void serial_set_scroll_region(unsigned last_row) |
{ |
char control[MAX_CONTROL]; |
snprintf(control, MAX_CONTROL, "\033[0;%ur", last_row); |
serial_puts(control); |
} |
void serial_cursor_disable(void) |
{ |
serial_puts("\033[?25l"); |
100,11 → 191,260 |
void serial_console_init(putc_function_t putc_fn, uint32_t w, uint32_t h) |
{ |
width = w; |
height = h; |
scr_width = w; |
scr_height = h; |
putc_function = putc_fn; |
} |
static void serial_set_style(int style) |
{ |
if (style == STYLE_EMPHASIS) { |
if (color) { |
serial_sgr(SGR_RESET); |
serial_sgr(SGR_FGCOLOR + CI_RED); |
serial_sgr(SGR_BGCOLOR + CI_WHITE); |
} |
serial_sgr(SGR_BOLD); |
} else { |
if (color) { |
serial_sgr(SGR_RESET); |
serial_sgr(SGR_FGCOLOR + CI_BLACK); |
serial_sgr(SGR_BGCOLOR + CI_WHITE); |
} |
serial_sgr(SGR_NORMAL_INT); |
} |
} |
static void serial_set_idx(unsigned fgcolor, unsigned bgcolor, |
unsigned flags) |
{ |
if (color) { |
serial_sgr(SGR_RESET); |
serial_sgr(SGR_FGCOLOR + color_map[fgcolor]); |
serial_sgr(SGR_BGCOLOR + color_map[bgcolor]); |
} else { |
if (fgcolor < bgcolor) |
serial_sgr(SGR_RESET); |
else |
serial_sgr(SGR_REVERSE); |
} |
} |
static void serial_set_rgb(uint32_t fgcolor, uint32_t bgcolor) |
{ |
if (fgcolor < bgcolor) |
serial_sgr(SGR_REVERSE_OFF); |
else |
serial_sgr(SGR_REVERSE); |
} |
static void serial_set_attrs(const attrs_t *a) |
{ |
switch (a->t) { |
case at_style: serial_set_style(a->a.s.style); break; |
case at_rgb: serial_set_rgb(a->a.r.fg_color, a->a.r.bg_color); break; |
case at_idx: serial_set_idx(a->a.i.fg_color, |
a->a.i.bg_color, a->a.i.flags); break; |
default: break; |
} |
} |
/** Draw text data to viewport. |
* |
* @param vport Viewport id |
* @param data Text data. |
* @param x Leftmost column of the area. |
* @param y Topmost row of the area. |
* @param w Number of rows. |
* @param h Number of columns. |
*/ |
static void draw_text_data(keyfield_t *data, unsigned int x, |
unsigned int y, unsigned int w, unsigned int h) |
{ |
unsigned int i, j; |
keyfield_t *field; |
attrs_t *a0, *a1; |
serial_goto(y, x); |
a0 = &data[0].attrs; |
serial_set_attrs(a0); |
for (j = 0; j < h; j++) { |
if (j > 0 && w != scr_width) |
serial_goto(y, x); |
for (i = 0; i < w; i++) { |
field = &data[j * w + i]; |
a1 = &field->attrs; |
if (!attrs_same(*a0, *a1)) |
serial_set_attrs(a1); |
serial_putchar(field->character); |
a0 = a1; |
} |
} |
} |
int lastcol = 0; |
int lastrow = 0; |
/** |
* Main function of the thread serving client connections. |
*/ |
void serial_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
int retval; |
ipc_callid_t callid; |
ipc_call_t call; |
keyfield_t *interbuf = NULL; |
size_t intersize = 0; |
wchar_t c; |
int col, row, w, h; |
int i; |
attrs_t cur_attr; |
if (client_connected) { |
ipc_answer_0(iid, ELIMIT); |
return; |
} |
client_connected = 1; |
ipc_answer_0(iid, EOK); |
cur_attr.t = at_style; |
cur_attr.a.s.style = STYLE_NORMAL; |
/* Clear the terminal, set scrolling region |
to 0 - height rows. */ |
serial_clrscr(); |
serial_goto(0, 0); |
serial_set_scroll_region(scr_height); |
while (true) { |
callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
client_connected = 0; |
ipc_answer_0(callid, EOK); |
return; |
case IPC_M_SHARE_OUT: |
/* We accept one area for data interchange */ |
intersize = IPC_GET_ARG2(call); |
if (intersize >= scr_width * scr_height * |
sizeof(*interbuf)) { |
receive_comm_area(callid, &call, |
(void *) &interbuf); |
continue; |
} |
retval = EINVAL; |
break; |
case FB_DRAW_TEXT_DATA: |
col = IPC_GET_ARG1(call); |
row = IPC_GET_ARG2(call); |
w = IPC_GET_ARG3(call); |
h = IPC_GET_ARG4(call); |
if (!interbuf) { |
retval = EINVAL; |
break; |
} |
if (col + w > scr_width || row + h > scr_height) { |
retval = EINVAL; |
break; |
} |
draw_text_data(interbuf, col, row, w, h); |
lastrow = row + h - 1; |
lastcol = col + w; |
retval = 0; |
break; |
case FB_PUTCHAR: |
c = IPC_GET_ARG1(call); |
row = IPC_GET_ARG2(call); |
col = IPC_GET_ARG3(call); |
if ((lastcol != col) || (lastrow != row)) |
serial_goto(row, col); |
lastcol = col + 1; |
lastrow = row; |
serial_putchar(c); |
retval = 0; |
break; |
case FB_CURSOR_GOTO: |
row = IPC_GET_ARG1(call); |
col = IPC_GET_ARG2(call); |
serial_goto(row, col); |
lastrow = row; |
lastcol = col; |
retval = 0; |
break; |
case FB_GET_CSIZE: |
ipc_answer_2(callid, EOK, scr_height, scr_width); |
continue; |
case FB_CLEAR: |
serial_clrscr(); |
retval = 0; |
break; |
case FB_SET_STYLE: |
cur_attr.t = at_style; |
cur_attr.a.s.style = IPC_GET_ARG1(call); |
cur_attr.a.i.bg_color = IPC_GET_ARG2(call); |
serial_set_attrs(&cur_attr); |
retval = 0; |
break; |
case FB_SET_COLOR: |
cur_attr.t = at_idx; |
cur_attr.a.i.fg_color = IPC_GET_ARG1(call); |
cur_attr.a.i.bg_color = IPC_GET_ARG2(call); |
cur_attr.a.i.flags = IPC_GET_ARG3(call); |
serial_set_attrs(&cur_attr); |
retval = 0; |
break; |
case FB_SET_RGB_COLOR: |
cur_attr.t = at_rgb; |
cur_attr.a.i.fg_color = IPC_GET_ARG1(call); |
cur_attr.a.i.bg_color = IPC_GET_ARG2(call); |
serial_set_attrs(&cur_attr); |
retval = 0; |
break; |
case FB_SCROLL: |
i = IPC_GET_ARG1(call); |
if ((i > scr_height) || (i < -scr_height)) { |
retval = EINVAL; |
break; |
} |
serial_scroll(i); |
serial_goto(lastrow, lastcol); |
retval = 0; |
break; |
case FB_CURSOR_VISIBILITY: |
if(IPC_GET_ARG1(call)) |
serial_cursor_enable(); |
else |
serial_cursor_disable(); |
retval = 0; |
break; |
case FB_SCREEN_YIELD: |
serial_sgr(SGR_RESET); |
serial_puts("\033[2J"); |
serial_goto(0, 0); |
serial_cursor_enable(); |
retval = 0; |
break; |
case FB_SCREEN_RECLAIM: |
serial_clrscr(); |
serial_set_attrs(&cur_attr); |
retval = 0; |
break; |
default: |
retval = ENOENT; |
} |
ipc_answer_0(callid, retval); |
} |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/fb/msim.c |
---|
36,17 → 36,9 |
*/ |
#include <async.h> |
#include <ipc/fb.h> |
#include <ipc/ipc.h> |
#include <libc.h> |
#include <errno.h> |
#include <string.h> |
#include <libc.h> |
#include <stdio.h> |
#include <ipc/fb.h> |
#include <sysinfo.h> |
#include <as.h> |
#include <align.h> |
#include <ddi.h> |
#include "serial_console.h" |
53,13 → 45,8 |
#include "msim.h" |
#define WIDTH 80 |
#define HEIGHT 25 |
#define HEIGHT 24 |
#define MAX_CONTROL 20 |
/* Allow only 1 connection */ |
static int client_connected = 0; |
static char *virt_addr; |
static void msim_putc(const char c) |
67,110 → 54,17 |
*virt_addr = c; |
} |
static void msim_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
int retval; |
ipc_callid_t callid; |
ipc_call_t call; |
char c; |
int lastcol = 0; |
int lastrow = 0; |
int newcol; |
int newrow; |
int fgcolor; |
int bgcolor; |
int i; |
if (client_connected) { |
ipc_answer_0(iid, ELIMIT); |
return; |
} |
client_connected = 1; |
ipc_answer_0(iid, EOK); |
/* Clear the terminal, set scrolling region |
to 0 - 25 lines */ |
serial_clrscr(); |
serial_goto(0, 0); |
serial_puts("\033[0;25r"); |
while (true) { |
callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
client_connected = 0; |
ipc_answer_0(callid, EOK); |
return; |
case FB_PUTCHAR: |
c = IPC_GET_ARG1(call); |
newrow = IPC_GET_ARG2(call); |
newcol = IPC_GET_ARG3(call); |
if ((lastcol != newcol) || (lastrow != newrow)) |
serial_goto(newrow, newcol); |
lastcol = newcol + 1; |
lastrow = newrow; |
msim_putc(c); |
retval = 0; |
break; |
case FB_CURSOR_GOTO: |
newrow = IPC_GET_ARG1(call); |
newcol = IPC_GET_ARG2(call); |
serial_goto(newrow, newcol); |
lastrow = newrow; |
lastcol = newcol; |
retval = 0; |
break; |
case FB_GET_CSIZE: |
ipc_answer_2(callid, EOK, HEIGHT, WIDTH); |
continue; |
case FB_CLEAR: |
serial_clrscr(); |
retval = 0; |
break; |
case FB_SET_STYLE: |
fgcolor = IPC_GET_ARG1(call); |
bgcolor = IPC_GET_ARG2(call); |
if (fgcolor < bgcolor) |
serial_set_style(0); |
else |
serial_set_style(7); |
retval = 0; |
break; |
case FB_SCROLL: |
i = IPC_GET_ARG1(call); |
if ((i > HEIGHT) || (i < -HEIGHT)) { |
retval = EINVAL; |
break; |
} |
serial_scroll(i); |
serial_goto(lastrow, lastcol); |
retval = 0; |
break; |
case FB_CURSOR_VISIBILITY: |
if(IPC_GET_ARG1(call)) |
serial_cursor_enable(); |
else |
serial_cursor_disable(); |
retval = 0; |
break; |
default: |
retval = ENOENT; |
} |
ipc_answer_0(callid, retval); |
} |
} |
int msim_init(void) |
{ |
void *phys_addr = (void *) sysinfo_value("fb.address.physical"); |
virt_addr = (char *) as_get_mappable_page(1); |
physmem_map(phys_addr, virt_addr, 1, AS_AREA_READ | AS_AREA_WRITE); |
if (physmem_map(phys_addr, virt_addr, 1, AS_AREA_READ | AS_AREA_WRITE) != 0) |
return -1; |
serial_console_init(msim_putc, WIDTH, HEIGHT); |
async_set_client_connection(msim_client_connection); |
async_set_client_connection(serial_client_connection); |
return 0; |
} |
//branches/tracing/uspace/srv/fb/serial_console.h |
---|
38,6 → 38,8 |
#ifndef FB_SERIAL_CONSOLE_H_ |
#define FB_SERIAL_CONSOLE_H_ |
#include <ipc/ipc.h> |
typedef void (*putc_function_t)(char); |
void serial_puts(char *str); |
44,9 → 46,11 |
void serial_goto(const unsigned int row, const unsigned int col); |
void serial_clrscr(void); |
void serial_scroll(int i); |
void serial_set_style(const unsigned int mode); |
void serial_cursor_disable(void); |
void serial_cursor_enable(void); |
void serial_set_scroll_region(unsigned height); |
void serial_console_init(putc_function_t putc_fn, uint32_t w, uint32_t h); |
void serial_client_connection(ipc_callid_t iid, ipc_call_t *icall); |
#endif |
//branches/tracing/uspace/srv/fb/font-8x16.c |
---|
1,5 → 1,6 |
/* |
* Copyright (c) 2005 Martin Decky |
* Copyright (c) 2000 Dmitry Bolkhovityanov |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
26,4616 → 27,3245 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#include <sys/types.h> |
#include "font-8x16.h" |
unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES] = { |
/** Convert character to font glyph index |
* |
* The font does not cover all Unicode characters. |
* This function converts the character to an appropriate |
* glyph in the font or returns an index to the question |
* mark glyph if no specific glyph exists. |
*/ |
uint16_t fb_font_glyph(const wchar_t ch) |
{ |
if (ch == 0x0000) |
return 0; |
if ((ch >= 0x0020) && (ch <= 0x007f)) |
return (ch - 32); |
if ((ch >= 0x00a0) && (ch <= 0x021f)) |
return (ch - 64); |
if ((ch >= 0x0222) && (ch <= 0x0233)) |
return (ch - 66); |
if ((ch >= 0x0250) && (ch <= 0x02ad)) |
return (ch - 94); |
if ((ch >= 0x02b0) && (ch <= 0x02cf)) |
return (ch - 96); |
if ((ch >= 0x02d8) && (ch <= 0x02dd)) |
return (ch - 104); |
if (ch == 0x02ee) |
return 630; |
if ((ch >= 0x0300) && (ch <= 0x0301)) |
return (ch - 137); |
if (ch == 0x0303) |
return 633; |
if (ch == 0x0309) |
return 634; |
if ((ch >= 0x0312) && (ch <= 0x0314)) |
return (ch - 151); |
if (ch == 0x0323) |
return 638; |
if ((ch >= 0x0340) && (ch <= 0x0341)) |
return (ch - 193); |
if ((ch >= 0x0374) && (ch <= 0x0375)) |
return (ch - 243); |
if (ch == 0x037a) |
return 643; |
if (ch == 0x037e) |
return 644; |
if ((ch >= 0x0384) && (ch <= 0x038a)) |
return (ch - 255); |
if (ch == 0x038c) |
return 652; |
if ((ch >= 0x038e) && (ch <= 0x03a1)) |
return (ch - 257); |
if ((ch >= 0x03a3) && (ch <= 0x03ce)) |
return (ch - 258); |
if ((ch >= 0x03d0) && (ch <= 0x03d7)) |
return (ch - 259); |
if ((ch >= 0x03da) && (ch <= 0x03f3)) |
return (ch - 261); |
if ((ch >= 0x0400) && (ch <= 0x0486)) |
return (ch - 273); |
if ((ch >= 0x0488) && (ch <= 0x04ce)) |
return (ch - 274); |
if ((ch >= 0x04d0) && (ch <= 0x04f5)) |
return (ch - 275); |
if ((ch >= 0x04f8) && (ch <= 0x04f9)) |
return (ch - 277); |
if ((ch >= 0x0500) && (ch <= 0x050f)) |
return (ch - 283); |
if ((ch >= 0x0530) && (ch <= 0x0556)) |
return (ch - 315); |
if ((ch >= 0x0559) && (ch <= 0x055f)) |
return (ch - 317); |
if ((ch >= 0x0561) && (ch <= 0x0587)) |
return (ch - 318); |
if ((ch >= 0x0589) && (ch <= 0x058a)) |
return (ch - 319); |
if ((ch >= 0x0591) && (ch <= 0x05a1)) |
return (ch - 325); |
if ((ch >= 0x05a3) && (ch <= 0x05b9)) |
return (ch - 326); |
if ((ch >= 0x05bb) && (ch <= 0x05c4)) |
return (ch - 327); |
if ((ch >= 0x05d0) && (ch <= 0x05ea)) |
return (ch - 338); |
if ((ch >= 0x05f0) && (ch <= 0x05f4)) |
return (ch - 343); |
if (ch == 0x060c) |
return 1182; |
if (ch == 0x061b) |
return 1183; |
if (ch == 0x061f) |
return 1184; |
if ((ch >= 0x0621) && (ch <= 0x063a)) |
return (ch - 384); |
if ((ch >= 0x0640) && (ch <= 0x0655)) |
return (ch - 389); |
if ((ch >= 0x0660) && (ch <= 0x066d)) |
return (ch - 399); |
if ((ch >= 0x0670) && (ch <= 0x06ed)) |
return (ch - 401); |
if ((ch >= 0x06f0) && (ch <= 0x06fe)) |
return (ch - 403); |
if (ch == 0x10d3) |
return 1388; |
if (ch == 0x10d7) |
return 1389; |
if (ch == 0x10da) |
return 1390; |
if (ch == 0x10dd) |
return 1391; |
if (ch == 0x10e6) |
return 1392; |
if ((ch >= 0x1e00) && (ch <= 0x1e9b)) |
return (ch - 6287); |
if ((ch >= 0x1ea0) && (ch <= 0x1ef9)) |
return (ch - 6291); |
if ((ch >= 0x1f00) && (ch <= 0x1f07)) |
return (ch - 6297); |
if ((ch >= 0x2000) && (ch <= 0x2027)) |
return (ch - 6545); |
if ((ch >= 0x2030) && (ch <= 0x2046)) |
return (ch - 6553); |
if ((ch >= 0x2048) && (ch <= 0x204d)) |
return (ch - 6554); |
if (ch == 0x2070) |
return 1716; |
if ((ch >= 0x2074) && (ch <= 0x208f)) |
return (ch - 6591); |
if ((ch >= 0x20a0) && (ch <= 0x20af)) |
return (ch - 6607); |
if ((ch >= 0x2100) && (ch <= 0x213a)) |
return (ch - 6687); |
if ((ch >= 0x2153) && (ch <= 0x2183)) |
return (ch - 6711); |
if ((ch >= 0x2190) && (ch <= 0x21f3)) |
return (ch - 6723); |
if ((ch >= 0x2200) && (ch <= 0x22f1)) |
return (ch - 6735); |
if (ch == 0x2300) |
return 2211; |
if (ch == 0x2302) |
return 2212; |
if ((ch >= 0x2308) && (ch <= 0x230b)) |
return (ch - 6755); |
if (ch == 0x2310) |
return 2217; |
if (ch == 0x2318) |
return 2218; |
if ((ch >= 0x231a) && (ch <= 0x231b)) |
return (ch - 6767); |
if ((ch >= 0x2320) && (ch <= 0x2321)) |
return (ch - 6771); |
if ((ch >= 0x2329) && (ch <= 0x232a)) |
return (ch - 6778); |
if ((ch >= 0x239b) && (ch <= 0x23bd)) |
return (ch - 6890); |
if (ch == 0x23ce) |
return 2260; |
if ((ch >= 0x2409) && (ch <= 0x240d)) |
return (ch - 6964); |
if ((ch >= 0x2423) && (ch <= 0x2424)) |
return (ch - 6985); |
if (ch == 0x2426) |
return 2268; |
if ((ch >= 0x2500) && (ch <= 0x2595)) |
return (ch - 7203); |
if ((ch >= 0x25a0) && (ch <= 0x25f7)) |
return (ch - 7213); |
if ((ch >= 0x2600) && (ch <= 0x2602)) |
return (ch - 7221); |
if ((ch >= 0x2605) && (ch <= 0x260d)) |
return (ch - 7223); |
if ((ch >= 0x2610) && (ch <= 0x2613)) |
return (ch - 7225); |
if (ch == 0x2620) |
return 2523; |
if (ch == 0x2622) |
return 2524; |
if (ch == 0x2626) |
return 2525; |
if ((ch >= 0x2628) && (ch <= 0x262b)) |
return (ch - 7242); |
if ((ch >= 0x262e) && (ch <= 0x2637)) |
return (ch - 7244); |
if ((ch >= 0x2639) && (ch <= 0x2653)) |
return (ch - 7245); |
if ((ch >= 0x2660) && (ch <= 0x2667)) |
return (ch - 7257); |
if ((ch >= 0x2669) && (ch <= 0x266f)) |
return (ch - 7258); |
if ((ch >= 0xfb00) && (ch <= 0xfb05)) |
return (ch - 61674); |
if ((ch >= 0xfb50) && (ch <= 0xfbb1)) |
return (ch - 61748); |
if ((ch >= 0xfbd3) && (ch <= 0xfbe9)) |
return (ch - 61781); |
if ((ch >= 0xfbfc) && (ch <= 0xfbff)) |
return (ch - 61799); |
if ((ch >= 0xfc5b) && (ch <= 0xfc63)) |
return (ch - 61890); |
if (ch == 0xfc90) |
return 2722; |
if ((ch >= 0xfcf2) && (ch <= 0xfcf4)) |
return (ch - 62031); |
if ((ch >= 0xfd3c) && (ch <= 0xfd3f)) |
return (ch - 62102); |
if (ch == 0xfdf2) |
return 2730; |
if ((ch >= 0xfe50) && (ch <= 0xfe52)) |
return (ch - 62373); |
if ((ch >= 0xfe54) && (ch <= 0xfe66)) |
return (ch - 62374); |
if ((ch >= 0xfe68) && (ch <= 0xfe6b)) |
return (ch - 62375); |
if ((ch >= 0xfe70) && (ch <= 0xfe72)) |
return (ch - 62379); |
if (ch == 0xfe74) |
return 2760; |
if ((ch >= 0xfe76) && (ch <= 0xfefc)) |
return (ch - 62381); |
if (ch == 0xfeff) |
return 2896; |
return 2898; |
} |
/* 0 0x00 '^@' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
uint8_t fb_font[FONT_GLYPHS][FONT_SCANLINES] = { |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00}, |
{0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x99, 0xa5, 0xa1, 0xa1, 0xa5, 0x99, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x44, 0xba, 0xb2, 0xaa, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0x30, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xf6, 0xc0, 0xc0, 0xc0, 0x00}, |
{0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x30, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0x36, 0xec, 0x18, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x0c, 0x38, 0x00}, |
{0x30, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x3c, 0x42, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0xf6, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7a, 0xc4, 0xce, 0xce, 0xd6, 0xd6, 0xe6, 0xe6, 0x46, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x6c, 0x66, 0x66, 0x66, 0x66, 0xec, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x30, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0x1c, 0x3c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xc4, 0xce, 0xd6, 0xe6, 0x46, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x30, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x7c, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x0c, 0x18, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x0c, 0x18, 0x0e, 0x00}, |
{0x0c, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0xf6, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x3e, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x18, 0x30, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x6c, 0x38, 0x10, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x6c, 0x38, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x18, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x18, 0x30, 0x30, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x10, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xff, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf8, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7e, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7e, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x3c, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x3c, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x30, 0x1c, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x30, 0x1c, 0x00}, |
{0x18, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf7, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x7b, 0x7b, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x00, 0xee, 0x66, 0x66, 0x66, 0x66, 0x66, 0xf6, 0x06, 0x66, 0x3c, 0x00}, |
{0x08, 0x1c, 0x22, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x0e, 0x1b, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x30, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x30}, |
{0x6c, 0x38, 0x10, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x66, 0x66, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x30, 0x30, 0x30, 0x36, 0x36, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x78, 0xe0, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x1e, 0x78, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x18, 0x18, 0x30}, |
{0x6c, 0x38, 0x10, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x60, 0x60, 0xc0, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0xcc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6e, 0xd8, 0xd8, 0xd8, 0xde, 0xd8, 0xd8, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xd6, 0xd6, 0xde, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x18, 0x18, 0x30}, |
{0x6c, 0x38, 0x10, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x6c, 0x38, 0x10, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x18, 0x0c, 0x38, 0x00}, |
{0x6c, 0x38, 0x10, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x10, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0xfc, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x78, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x78, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0xcc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x30, 0x60, 0x38, 0x00}, |
{0x10, 0x38, 0x44, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf8, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xb3, 0xb3, 0x33, 0x3e, 0x33, 0x33, 0x33, 0x33, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x64, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x62, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xe6, 0xe6, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xe0, 0xe0, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x86, 0x06, 0x06, 0x06, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x03, 0x3e, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x7e, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0xf6, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xb6, 0xb3, 0x33, 0x33, 0x33, 0x33, 0x33, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x4c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0x4c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x18, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0xfe, 0xcc, 0x8c, 0x2c, 0x3c, 0x2c, 0x0c, 0x8c, 0xcc, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc2, 0xc0, 0x78, 0xc0, 0xc0, 0xc2, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xc0, 0x00}, |
{0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xe0, 0x00}, |
{0x00, 0x03, 0x3e, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x38, 0x6c, 0x38, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xf3, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x6d, 0x6c, 0x78, 0x70, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc8, 0x38, 0x70, 0xd0, 0x38, 0x38, 0x6c, 0x64, 0xc6, 0xc2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0xec, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x76, 0x7e, 0x7e, 0x6e, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0xc0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x73, 0xdf, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x73, 0x03, 0x03, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xdf, 0xdb, 0xdb, 0xdb, 0xdb, 0x73, 0x03, 0x03, 0x03, 0x00}, |
{0x00, 0x00, 0x7e, 0xb3, 0xb3, 0x33, 0x3e, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x7c, 0x66, 0x66, 0x7c, 0x78, 0x6c, 0x6c, 0xe6, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x38, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x0c, 0x38, 0x60, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x62, 0x30, 0x18, 0x18, 0x30, 0x62, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x0e, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x0c, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0x7e, 0xfe, 0x9a, 0x58, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x36, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00}, |
{0x03, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0x6c, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x63, 0xb3, 0xb3, 0x33, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x0d, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0xf0, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x7e, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0xfc, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x30, 0x7c, 0x06, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc0, 0x60, 0x30, 0x18, 0x7c, 0xc0, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0x60, 0x30, 0x78, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x7c, 0xc0, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x7e, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x60, 0x60, 0x78, 0x0c, 0x06, 0x06, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x60, 0x78, 0x0c, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x18, 0x4c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x70, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x1b, 0x0e, 0x04, 0xf7, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0xdc, 0xf7, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf5, 0xda, 0xd8, 0xdf, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0xf7, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3d, 0x1a, 0x18, 0x7f, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0x6f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc7, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xcb, 0xf6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf3, 0x63, 0x60, 0x67, 0x63, 0x63, 0x63, 0x67, 0x6f, 0xff, 0x03, 0x1b, 0x0e, 0x00}, |
{0x00, 0x00, 0xe3, 0x63, 0x60, 0x67, 0x63, 0x63, 0x63, 0x63, 0x63, 0xf3, 0x03, 0x33, 0x1e, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xfb, 0xfb, 0xfb, 0xdb, 0xdb, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xf8, 0xff, 0xfb, 0xfb, 0xdb, 0xdb, 0xdb, 0xdb, 0x03, 0x33, 0x1e, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x00, 0xb7, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x03, 0x33, 0x1e, 0x00}, |
{0x6c, 0x38, 0x10, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x78, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x10, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x30, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x28, 0x10, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x78, 0x30, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x10, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x30, 0x30, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x30, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xdf, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x3e, 0xcc, 0x78, 0x00}, |
{0x6c, 0x38, 0x10, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x6c, 0x38, 0x10, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xe0, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x6c, 0x38, 0x10, 0xfe, 0x0c, 0x18, 0x30, 0x7c, 0x06, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00}, |
{0x00, 0x1b, 0x0e, 0x04, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0xf7, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xdc, 0xdc, 0xf7, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0xd8, 0xd8, 0xdf, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0xf7, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x7f, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0x6f, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x30, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xdb, 0xfb, 0xdb, 0xdb, 0xdb, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x78, 0x70, 0x60, 0x60, 0x60, 0x60, 0xe0, 0x00}, |
{0x60, 0x30, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x38, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x38, 0x6c, 0x38, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7a, 0xc4, 0xce, 0xce, 0xd6, 0xe6, 0xe6, 0x46, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7a, 0xc4, 0xce, 0xd6, 0xe6, 0x46, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x3c, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x18, 0x18, 0x30}, |
{0x00, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x1c, 0x74, 0x06, 0x06, 0x06, 0x06, 0x1c, 0xf0, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0e, 0x3c, 0x06, 0x06, 0x1c, 0xf0, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc0, 0xfc, 0x06, 0x0c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc0, 0xfc, 0x06, 0x0c, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x7c, 0x00, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x72, 0x9c, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x00, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x3c, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x5c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xdc, 0xe6, 0x7c, 0x80, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0d, 0x06, 0x00}, |
{0x00, 0x00, 0x06, 0x0d, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x6c, 0x8e, 0x16, 0x26, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0x78, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xcd, 0x0d, 0x38, 0x0c, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xdc, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x06, 0x06, 0x1f, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x0d, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xce, 0xc6, 0xc6, 0x7a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x46, 0x6c, 0x2c, 0x2c, 0x38, 0x18, 0x18, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x64, 0x28, 0x38, 0x38, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xdc, 0x6c, 0x0c, 0x0c, 0x0e, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x3c, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x7b, 0xde, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x78, 0x58, 0x3e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x0e, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x7f, 0x63, 0x66, 0x6c, 0x7e, 0x63, 0xf3, 0x03, 0x33, 0x1e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6e, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0xc0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0xd8, 0xd8, 0xde, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xdc, 0x6c, 0x0c, 0x0d, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xcc, 0xcc, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x66, 0x6c, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xfc, 0xc0, 0xd8, 0x70, 0x00}, |
{0x00, 0x00, 0x0e, 0x1b, 0x19, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x98, 0xd8, 0x70, 0x00}, |
{0x00, 0x00, 0x0e, 0x1b, 0x19, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x98, 0xd8, 0x70, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x18, 0x18, 0x18, 0x18, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0xd8, 0x70, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x3b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xd6, 0xd6, 0xd6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x60, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x06, 0x06, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x66, 0xcb, 0xfe, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x7e, 0xc7, 0x7c, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0x70, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc3, 0xc3, 0xdb, 0xdb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x76, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x7e, 0xc6, 0xc0, 0xce, 0xc6, 0xc6, 0x7a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0x00, 0x1c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7e, 0xcc, 0x78, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xcc, 0x6c, 0x3c, 0x3c, 0x6c, 0xcc, 0x0c, 0x0c, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x0d, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x1c, 0x18, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0x70, 0x30, 0xfc, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x7f, 0xd9, 0xda, 0xda, 0xda, 0xdc, 0x6f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x7f, 0xdb, 0xdb, 0xde, 0xde, 0xdb, 0x6b, 0x03, 0x1b, 0x0e, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x7f, 0xd9, 0xda, 0xda, 0xdb, 0xdd, 0x6f, 0x04, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x60, 0x60, 0xf6, 0x6d, 0x6c, 0x66, 0x63, 0x6b, 0x36, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x26, 0x6d, 0x6c, 0xfc, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x3c, 0x0c, 0x2c, 0x18, 0x00}, |
{0x00, 0x00, 0x20, 0x60, 0x60, 0xf6, 0x6d, 0x6c, 0x6c, 0x6e, 0x6d, 0x36, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0xc0, 0xfe, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x03, 0x03, 0x0e, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6d, 0x6c, 0x66, 0x63, 0x6b, 0xf6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6f, 0x6b, 0x63, 0x66, 0x6c, 0x6d, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xd6, 0x7c, 0x6c, 0x28, 0xc6, 0xd6, 0x7c, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xf0, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xc0, 0xf0, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x00, 0x38, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xb0, 0xd8, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x18, 0xd8, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x18, 0xd8, 0x68, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xd8, 0xd8, 0xf0, 0xd8, 0xd8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0xd6, 0x7c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd8, 0x78, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0xc0, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x70, 0xc0, 0x70, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0x70, 0x18, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x20, 0x20, 0x70, 0x70, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xd8, 0xd8, 0x70, 0x70, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x1c, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x6c, 0x6c, 0x6c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x34, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00}, |
{0xc0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x34, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x3e, 0x32, 0x30, 0x34, 0x3c, 0x34, 0x30, 0x30, 0x32, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x33, 0x33, 0x33, 0x33, 0x3f, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x3e, 0x63, 0x63, 0x63, 0x63, 0x63, 0x36, 0x36, 0x36, 0x77, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x6c, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x82, 0x44, 0x7c, 0x44, 0x00, 0x82, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x62, 0x30, 0x18, 0x18, 0x30, 0x62, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x92, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc0, 0x78, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x6c, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x6c, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x46, 0x6c, 0x2c, 0x2c, 0x38, 0x18, 0x18, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0x78, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x46, 0x7c, 0x18, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0x20, 0x30, 0x10, 0x38, 0x38, 0x6c, 0x64, 0xc6, 0xc2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xf6, 0xc0, 0xc0, 0xc0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x66, 0x6c, 0x3c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x3c, 0x30, 0x60, 0x3c, 0x60, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x46, 0x2c, 0x2c, 0x18, 0x30, 0x68, 0x68, 0xc4, 0xc2, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x6c, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x36, 0x1e, 0xc6, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc2, 0x65, 0x24, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0xc0, 0x21, 0x32, 0x12, 0x1c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc2, 0x65, 0x24, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xa6, 0x2c, 0x38, 0x68, 0xca, 0xc4, 0x0c, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x3c, 0x06, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x32, 0x30, 0x30, 0x3c, 0x34, 0x30, 0x30, 0x30, 0x30, 0x00}, |
{0x00, 0x60, 0x30, 0x30, 0x60, 0x63, 0xff, 0xc6, 0x06, 0x0c, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x60, 0x60, 0xfe, 0xfe, 0x0c, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xac, 0x26, 0x26, 0x0b, 0x0b, 0x1b, 0x1b, 0x1b, 0x1b, 0x03, 0x02, 0x04, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x18, 0x28, 0x4c, 0x14, 0x24, 0x06, 0x02, 0x02, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x6d, 0x03, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x6d, 0x03, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xd6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x36, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x76, 0x9c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x7c, 0xd6, 0x66, 0x06, 0x06, 0x66, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x3c, 0x60, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x26, 0x1c, 0x70, 0xc0, 0xc2, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0x68, 0x38, 0x30, 0x38, 0x38, 0x4c, 0x4c, 0x86, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0xba, 0x30, 0x38, 0x28, 0x4c, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xc0, 0xcc, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xdc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x7e, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x1c, 0x18, 0x7e, 0x58, 0x18, 0x18, 0x18, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xa6, 0x2c, 0x38, 0x68, 0xca, 0xc4, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0x60, 0x3c, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x30, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xb2, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x03, 0x06, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xf8, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x66, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xd8, 0xd8, 0xd8, 0xde, 0xdb, 0xdb, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xd8, 0xfe, 0xdb, 0xdb, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xb2, 0x30, 0x3e, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x18, 0x00, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x38, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xc6, 0x82, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x3c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfe, 0x06, 0x02, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xff, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xb0, 0xb0, 0x30, 0x3c, 0x36, 0x36, 0x36, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xf3, 0xdb, 0xdb, 0xdb, 0xdb, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x86, 0x06, 0x3e, 0x06, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x9c, 0xb6, 0xb6, 0xb6, 0xf6, 0xb6, 0xb6, 0xb6, 0xb6, 0x9c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xcc, 0xcc, 0xcc, 0x7c, 0x6c, 0x6c, 0x6c, 0x6c, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x7c, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0xc6, 0x82, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfe, 0x06, 0x02, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xff, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb0, 0x30, 0x3c, 0x36, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xf3, 0xdb, 0xdb, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3e, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0xb6, 0xb6, 0xf6, 0xb6, 0xb6, 0x9c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xcc, 0xcc, 0x7c, 0x6c, 0x6c, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf8, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x06, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xf8, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xd8, 0xd8, 0xde, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xfe, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf8, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x38, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0xfc, 0xb4, 0x30, 0x3c, 0x36, 0x36, 0x36, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x30, 0xfc, 0xb4, 0x30, 0x3c, 0x36, 0x36, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xce, 0xdb, 0xd9, 0xd8, 0xfe, 0xd8, 0xd8, 0xd9, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xdb, 0xd8, 0xfe, 0xd8, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0x6c, 0xfe, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x6c, 0x7c, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x88, 0x8c, 0x9c, 0x96, 0xf6, 0xb6, 0xbf, 0xab, 0xeb, 0xeb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x8c, 0x9c, 0xf6, 0xbe, 0xab, 0xeb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x6c, 0x6c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x6c, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xa3, 0xb2, 0x96, 0xfc, 0x9c, 0xbe, 0xaa, 0xab, 0xeb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xa3, 0x96, 0xfe, 0xab, 0xab, 0xeb, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x10, 0x7c, 0xc6, 0x06, 0x06, 0x7c, 0x06, 0x06, 0x06, 0x7c, 0xc0, 0x7c, 0x00, 0x00}, |
{0x00, 0x6c, 0x38, 0x10, 0x00, 0x7c, 0x86, 0x06, 0x7c, 0x06, 0x06, 0x7c, 0xc0, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x96, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x96, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc2, 0xc6, 0xc6, 0xc4, 0xcc, 0x6c, 0x68, 0x78, 0x38, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x64, 0x6c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0x66, 0x00, 0xc2, 0xc6, 0xc4, 0xc4, 0x6c, 0x68, 0x78, 0x38, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0x66, 0x00, 0xc2, 0xc6, 0x64, 0x6c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd8, 0xd8, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x6f, 0x03, 0x06, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x6f, 0x03, 0x06, 0x1c, 0x00}, |
{0x00, 0x10, 0x7c, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0xd6, 0xc6, 0xc6, 0xc6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0x00}, |
{0x04, 0x7c, 0x40, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x7c, 0x40, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x7c, 0x54, 0x00, 0x6c, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0x54, 0x00, 0x6c, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x60, 0x3c, 0x0c, 0x0c, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0x78, 0x18, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x3c, 0x0f, 0x18, 0x18, 0xf0, 0x3c, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x7c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x24, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x40, 0x7c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x7c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0xc3, 0x00, 0x66, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x50, 0x46, 0x00, 0x82, 0x41, 0x00, 0x62, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x60, 0xf0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x6e, 0x64, 0x7a, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x6e, 0x64, 0x7a, 0x60, 0x60, 0xf0, 0x00}, |
{0x02, 0x06, 0xfe, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x02, 0x06, 0xfe, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0xf8, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0xf8, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xf6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x78, 0x6c, 0x66, 0xf6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x3c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x30, 0x60, 0x38, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xd6, 0xd6, 0xdc, 0xf8, 0xdc, 0xd6, 0xd6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xdc, 0xf8, 0xdc, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0xf6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0xf0, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf3, 0xb3, 0xb3, 0x36, 0x3c, 0x3c, 0x36, 0x33, 0x33, 0x73, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0xb6, 0xbc, 0x3c, 0x36, 0x33, 0x73, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xdf, 0xdb, 0xd9, 0xd8, 0xf8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xdb, 0xd9, 0xf8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xd8, 0xd8, 0xd8, 0xde, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x03, 0x0b, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xfe, 0xdb, 0xdb, 0xdb, 0x03, 0x0b, 0x06, 0x00}, |
{0x00, 0x00, 0x7c, 0xc2, 0xcc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xcc, 0x7a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc2, 0xcc, 0xd6, 0xd6, 0xcc, 0x7a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x0c, 0x04, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x0c, 0x04, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x3c, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xf6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7f, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0x7e, 0x16, 0x16, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6, 0x7e, 0x16, 0x16, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x33, 0xb3, 0xb3, 0x7f, 0x30, 0x30, 0x30, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xb3, 0x7f, 0x30, 0x30, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x33, 0xb3, 0xb3, 0x7f, 0x30, 0x30, 0x30, 0x33, 0x1e, 0x0c, 0x18, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xb3, 0x7f, 0x30, 0x30, 0x33, 0x1e, 0x0c, 0x18, 0x0e, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x06, 0x16, 0x0c, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0e, 0x0c, 0x08, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x0e, 0x0c, 0x08, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc7, 0x03, 0x01, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x3c, 0x06, 0x86, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00}, |
{0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xce, 0xde, 0xfe, 0xf6, 0xe6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x78, 0xcc, 0x86, 0x06, 0x3e, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x3e, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x66, 0xcc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc3, 0xc3, 0xc3, 0xf3, 0xdb, 0xdb, 0xdb, 0xdb, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc3, 0xc3, 0xc3, 0xf3, 0xdb, 0xdb, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x7c, 0xcd, 0xcd, 0xcd, 0xcd, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcd, 0xcd, 0xcd, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x8c, 0x0c, 0x38, 0x0d, 0x0d, 0x0d, 0x0d, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xcc, 0x0c, 0x39, 0x0d, 0x0d, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0x86, 0x06, 0x3c, 0x06, 0x06, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6d, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0xcd, 0xcd, 0xcd, 0xcd, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xfd, 0xcd, 0xcd, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xce, 0xc6, 0xc6, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xce, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x1b, 0x1b, 0x1b, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x5a, 0x18, 0x1b, 0x1b, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x64, 0x94, 0xba, 0x52, 0x4c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0x7b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x7f, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x7e, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x0c, 0xd8, 0xfe, 0xc3, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7c, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x60, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xcf, 0xd6, 0xd6, 0xd6, 0xd6, 0xcc, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x7f, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7c, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xf6, 0xd6, 0xd6, 0xd6, 0xd6, 0xcc, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0x7f, 0x24, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0xf0, 0x3c, 0x0e, 0x04, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x6c, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x0c, 0x0c, 0x0c, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x30, 0x60, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcf, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x06, 0x06, 0x7c, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x60, 0x60, 0x60, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x06, 0x06, 0x06, 0x6c, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x16, 0x16, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x76, 0x1e, 0x0e, 0x0c, 0xd8, 0xfe, 0xc3, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x30, 0x18, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x06, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x63, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xfe, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd0, 0xd0, 0xd0, 0x7c, 0x16, 0x16, 0x16, 0xd6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x3c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x36, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x6a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7f, 0x0c, 0x0c, 0x0c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0x0c, 0x0c, 0x0c, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x0f, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x0c, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x7e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xcf, 0xd6, 0xd6, 0xcc, 0xc0, 0xc0, 0xc0, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x7f, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xf6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xca, 0xc0, 0xc0, 0xc0, 0x00}, |
{0x00, 0x00, 0x60, 0x38, 0x0c, 0x7f, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x1c, 0x0c, 0x18, 0x3c, 0x64, 0x66, 0x62, 0x63, 0x3d, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x0c, 0x0c, 0x0f, 0x00}, |
{0x00, 0x00, 0x0e, 0x18, 0x30, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0f, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x3e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x3e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7e, 0x06, 0x06, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x76, 0x1c, 0x18, 0x30, 0x60, 0x3e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcf, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x0f, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3e, 0x06, 0x66, 0x3c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0xdc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x76, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xfe, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xd0, 0xd0, 0x7c, 0x16, 0x16, 0x16, 0x16, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0xcc, 0xcc, 0xcc, 0x77, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x6c}, |
{0x18, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x38, 0x10, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x60, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x18, 0x0c, 0x00}, |
{0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x74, 0xd6, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x18, 0x30, 0x00}, |
{0x0c, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1b, 0x36, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x44, 0xaa, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x0a, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0x50, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x3c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x6c, 0xd8, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x08, 0x30}, |
{0x60, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0xa0, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x10, 0x10}, |
{0x18, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00}, |
{0x48, 0xa8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x33, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x06, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x60, 0x66, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x18}, |
{0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x18, 0x03, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x7e, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x66, 0x76, 0xdc, 0xcc, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf8, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x0c, 0x0c, 0x0c, 0x1c, 0x36, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xcc, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0xc6, 0xc6, 0xc6, 0xc6, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xee, 0x66, 0x66, 0x66, 0x66, 0x66, 0x2c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf8, 0x4c, 0xcc, 0xcc, 0xec, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0e, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x46, 0xc6, 0xc6, 0xe6, 0x06, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xee, 0x66, 0x66, 0x6c, 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xee, 0x66, 0x66, 0x34, 0x18, 0x0c, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x66, 0x64, 0x6c, 0x6e, 0x60, 0x60, 0x60, 0x60, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xf6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x66, 0x66, 0xe6, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xcc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xcc, 0x66, 0x66, 0x66, 0xc6, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xcc, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x22, 0x20, 0x10, 0x08, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x20, 0x1e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x3c, 0x40, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x20, 0x1c, 0x20, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x18, 0x20, 0x1c, 0x20, 0x00, 0x00}, |
{0x00, 0x30, 0x40, 0x38, 0x40, 0x07, 0x08, 0x88, 0x86, 0x81, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x28, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x14, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x88, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x20, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x40, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0a, 0x00, 0x06, 0x09, 0x09, 0x47, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x19, 0x21, 0x19, 0x21, 0x01, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x12, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x40, 0x30, 0x4e, 0x49, 0x39, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x24, 0x00}, |
{0x0c, 0x30, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x12, 0xca, 0x2c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x0c, 0x30, 0x00, 0x00}, |
{0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x14, 0x0c, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00}, |
{0x0a, 0x2a, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x7e, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x10, 0x0c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x0c, 0x10}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x70, 0x70, 0x38, 0x18, 0x18, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x44, 0xfc, 0xf8, 0x60, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4a, 0xfe, 0xf4, 0x60, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x20, 0x40, 0x30, 0x10, 0x20, 0x42, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x2c, 0x44, 0x42, 0x82, 0x82, 0xfe, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xf8, 0x78, 0x08, 0x08, 0x08, 0x0c, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x82, 0xc6, 0xc6, 0x6c, 0x28, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x38, 0x28, 0x6c, 0xc6, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xf8, 0x88, 0xf8, 0x78, 0x08, 0x0c, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x91, 0x92, 0x64, 0x08, 0x10, 0x26, 0x49, 0x89, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x18, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0xfe, 0x7c, 0x38, 0x6c, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x29, 0x5e, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x28, 0x5e, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x06, 0x28, 0x5e, 0x00, 0x00, 0x00}, |
{0x00, 0x07, 0x08, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x04, 0x03, 0x14, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x04, 0x03, 0x04, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x23, 0x54, 0x33, 0x24, 0x40, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x04, 0x03, 0x04, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x14, 0x40, 0x81, 0x81, 0x7e, 0x08, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x08, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00}, |
{0x06, 0x08, 0x06, 0x08, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x08, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x94, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x88, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x94, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x20, 0x38, 0x28, 0x70, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x08, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x38, 0x28, 0x70, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x08, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x14, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x1c, 0x6a, 0x04, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x14, 0x08, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x12, 0x04, 0x18, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x14, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x14, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x15, 0x88, 0x88, 0x8a, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x88, 0x88, 0x90, 0x65, 0x00, 0x02, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x00, 0x0a, 0x00, 0x01, 0x15, 0x88, 0x88, 0x90, 0x65, 0x00, 0x02, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x90, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x2a, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x00, 0x50, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00}, |
{0x0a, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x09, 0x47, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x09, 0x09, 0x47, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x01, 0x02, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x20, 0x40, 0x3e, 0x01, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x01, 0x02, 0x05, 0x0b, 0x48, 0x84, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x19, 0x21, 0x19, 0x21, 0x01, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x29, 0x01, 0x19, 0x21, 0x19, 0xa1, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x19, 0x21, 0x19, 0x21, 0x01, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x05, 0x0b, 0x48, 0x84, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xa4, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x44, 0x09, 0xa2, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x08, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x02, 0x2a, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x14, 0x00, 0x08, 0x00}, |
{0x00, 0x08, 0x00, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x04, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x08, 0x14, 0x08, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0x3c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x38, 0x40, 0x38, 0x40, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x40, 0x38, 0x40, 0x00, 0x0c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x12, 0x2c, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x3c, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x18, 0x10, 0x20, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x08, 0x08, 0x08, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x20, 0x47, 0x88, 0x08, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x50, 0x20, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x82, 0x7c, 0x00, 0x08, 0x00, 0x08}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x82, 0x7c, 0x00, 0x14, 0x00, 0x08}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x60, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x80, 0x60, 0x80, 0x08, 0x14, 0x60, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0x40, 0x43, 0x55, 0x7e, 0x80, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x2a, 0x20, 0x26, 0x2a, 0x7c, 0x80, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0e, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x14, 0x08, 0x14, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x2c, 0x10, 0x28, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x15, 0x8a, 0x90, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x5a, 0xa5, 0x66, 0x5b, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x5a, 0x66, 0xa5, 0x5a, 0x00}, |
{0x00, 0x00, 0x18, 0x66, 0x42, 0x42, 0x81, 0x99, 0x99, 0x81, 0x42, 0x42, 0x66, 0x18, 0x00, 0x00}, |
{0x08, 0x1c, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x26, 0x08, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x8a, 0x90, 0x60}, |
{0x32, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x0c, 0x04, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30, 0x40, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x30, 0x40, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x54, 0xaa, 0x92, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x82, 0xfe, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x14, 0x08}, |
{0x08, 0x14, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x10, 0x10, 0x10}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x70, 0x70, 0x38, 0x18, 0x18, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x44, 0xfc, 0xf8, 0x60, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4a, 0xfe, 0xf4, 0x60, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4e, 0xf0, 0xfe, 0x7c, 0x30, 0x30, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x38, 0x2c, 0x44, 0x42, 0x82, 0x92, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x60, 0x7e, 0x3c, 0x30, 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x82, 0xc6, 0xc6, 0x6c, 0x28, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x10, 0x38, 0x28, 0x6c, 0xc6, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xf8, 0x88, 0xf8, 0x78, 0x08, 0x0c, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x01, 0x15, 0x88, 0x88, 0x88, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x40, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x88, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x20, 0x1e, 0x20, 0x00, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x12, 0x3c, 0x40, 0x54, 0x54, 0x54, 0x54, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x4c, 0x30, 0x4c, 0x02, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x64, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0xaa, 0xaa, 0xaa, 0x82, 0x82, 0x40, 0x30, 0x4c, 0x02, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x82, 0x82, 0x44, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x92, 0x92, 0x82, 0x82, 0x40, 0x30, 0x4c, 0x02, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x38, 0x6c, 0x38}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x38, 0x6c, 0x38}, |
{0x18, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x0c, 0xec, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x7c, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x30, 0x30, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x60, 0x0c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x30, 0x18, 0x70, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x30, 0x18, 0x70, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x10, 0x38, 0x6c, 0x00}, |
{0x60, 0x30, 0x00, 0x7c, 0x00, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0x00, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x76, 0xdc, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x76, 0xdc, 0x00}, |
{0x6c, 0x38, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x18, 0x0c, 0x38, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x18, 0x0c, 0x38, 0x00}, |
{0x18, 0x18, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x38, 0x6c, 0x64, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0c, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x60, 0x30, 0xe0, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x30, 0x18, 0x70, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x6c, 0x38, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x76, 0xdc, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x76, 0xdc, 0x00}, |
{0x0c, 0x18, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x0c, 0xec, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x7c, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x7c, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x10, 0x38, 0x6c, 0x00}, |
{0x0c, 0x18, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x10, 0x38, 0x6c, 0x00}, |
{0x0c, 0x18, 0x72, 0x9c, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x00, 0x72, 0x9c, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x18, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00}, |
{0x18, 0x18, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x7c, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x7c, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x60, 0x6c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0x70, 0x1c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x60, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x44, 0x38, 0x10, 0x7c, 0xc6, 0xc6, 0x70, 0x1c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x44, 0x38, 0x10, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x18, 0x18, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x16, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x7e, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x08, 0x1c, 0x36, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x6c, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x6c, 0x6c, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x76, 0xdc, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x76, 0xdc, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x10, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x10, 0x38, 0x6c, 0x00}, |
{0x0c, 0x18, 0x72, 0x9c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x76, 0xdc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xcc, 0xcc, 0x00, 0xfc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x18, 0x18, 0x00}, |
{0x60, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0xee, 0x6c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x30, 0x30, 0x00}, |
{0x30, 0x30, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x10, 0x38, 0x44, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x7c, 0x00, 0x00}, |
{0x6c, 0x6c, 0x00, 0x10, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x6c, 0x38, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x18, 0x0c, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x30, 0x00, 0x38, 0x6c, 0x64, 0x60, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x16, 0x38, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x16, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x68, 0x1c, 0x36, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x68, 0x1c, 0x36, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x28, 0x54, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x38, 0x44, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x6c, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x0c, 0x18, 0x44, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x18, 0x44, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x44, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x30, 0x44, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x08, 0x54, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x08, 0x54, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x72, 0x9c, 0x44, 0x38, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x72, 0x9c, 0x44, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x6c, 0x38, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x23, 0x76, 0x88, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x26, 0x70, 0xd8, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xc4, 0x6e, 0x11, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x64, 0x0e, 0x1b, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x00, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x38, 0x44, 0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x38, 0x44, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x23, 0x76, 0x88, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x26, 0x70, 0xd8, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xc4, 0x6e, 0x11, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0xc0, 0x64, 0x0e, 0x1b, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0e, 0x13, 0x3a, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x28, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x76, 0xdc, 0x10, 0x38, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x38, 0x44, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x18, 0x33, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1b, 0x33, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x33, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x63, 0x33, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x70, 0x1b, 0x33, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x1b, 0x33, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x68, 0xb3, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x68, 0xb3, 0x03, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x03, 0x7a, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x38, 0x0c, 0x18, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x18, 0x30, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x33, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1b, 0x33, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x33, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x63, 0x33, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x70, 0x1b, 0x33, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0x1b, 0x33, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x68, 0xb3, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x68, 0xb3, 0x03, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x03, 0x03, 0xce, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x30, 0x30, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x30, 0x30, 0x00}, |
{0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x0c, 0x18, 0xf6, 0x06, 0x00}, |
{0x38, 0x0c, 0x18, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x38, 0x0c, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x3a, 0x5c, 0x00, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00}, |
{0x00, 0x18, 0x18, 0x30, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x18, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x60, 0x6c, 0xc6, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xcc, 0x66, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x60, 0x66, 0xcc, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc6, 0x6c, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x34, 0x58, 0x0c, 0x18, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x34, 0x58, 0x30, 0x18, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0xfe, 0x00, 0xa4, 0xaa, 0xea, 0xea, 0xa6, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xa4, 0xea, 0xaa, 0xaa, 0xa6, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x8a, 0xce, 0x8e, 0xea, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x8e, 0xca, 0x8a, 0xea, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xca, 0x2e, 0x4a, 0x2a, 0xca, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xaa, 0xae, 0xea, 0x2a, 0x2a, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x6a, 0x8e, 0xca, 0xaa, 0x4a, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x38, 0x20, 0x30, 0x20, 0x20, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x30, 0x28, 0x30, 0x20, 0x20, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x4a, 0x4e, 0x4a, 0x4a, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x28, 0x28, 0x38, 0x28, 0x28, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x2a, 0x4e, 0x8e, 0xee, 0x00, 0x6c, 0x8a, 0x4c, 0x28, 0xc8, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x2a, 0x4e, 0x8e, 0xee, 0x00, 0xa2, 0xa2, 0xe2, 0xea, 0xa4, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xea, 0x2a, 0x4e, 0x8e, 0xee, 0x00, 0x08, 0x08, 0x08, 0x28, 0x10, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0x80, 0x80, 0x80, 0xf0, 0x28, 0x30, 0x28, 0x0a, 0x0e, 0x0e, 0x0a, 0x00, 0xfe, 0x00}, |
{0xfe, 0x00, 0xc0, 0xa0, 0xc0, 0xa0, 0x20, 0x20, 0x38, 0x0a, 0x0e, 0x0e, 0x0a, 0x00, 0xfe, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x9c, 0xd2, 0xbc, 0x92, 0x9c, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfe, 0x00}, |
{0x00, 0x18, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x66, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00}, |
{0x00, 0xcc, 0xcc, 0xcc, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x20, 0x30, 0x38, 0x3c, 0x38, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x6b, 0x6b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x92, 0x44, 0x28, 0x92, 0x28, 0x44, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xc3, 0xdb, 0x1b, 0x1e, 0x1c, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x7c, 0x00, 0x00}, |
{0x7c, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x38, 0x6c, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x28, 0x00, 0x00, 0x44, 0xee, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7b, 0xcf, 0xcf, 0x1b, 0x33, 0x33, 0x33, 0x00, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xde, 0xf3, 0xf3, 0xc6, 0xcc, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x06, 0x06, 0x0c, 0x0c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xdb, 0xdb, 0xdb, 0xde, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x3e, 0x72, 0xf2, 0xf2, 0xf2, 0x72, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf8, 0x9c, 0x9e, 0x9e, 0x9e, 0x9c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x18, 0x38, 0x78, 0xd8, 0xfc, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xf8, 0xc0, 0xf0, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x78, 0xc0, 0xf0, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xf8, 0xd8, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0x70, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd8, 0xd8, 0x78, 0x18, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x60, 0x30, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xb0, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0xd8, 0xfc, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xc0, 0xf0, 0x18, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xc0, 0xf0, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xd8, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x70, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0xd8, 0x78, 0x18, 0xf0, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcf, 0xcc, 0xcc, 0x7f, 0x0c, 0x0c, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x04, 0x7c, 0xce, 0xc8, 0xc8, 0xd0, 0xd0, 0xd0, 0xe0, 0xe6, 0x7c, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xd6, 0xd8, 0xd8, 0xd8, 0xde, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xc0, 0xc0, 0xc0, 0xf0, 0xcd, 0xce, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x60, 0xf8, 0x60, 0xf8, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0xec, 0xd6, 0xde, 0xd6, 0xd6, 0xf6, 0xd6, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x66, 0x76, 0xff, 0x76, 0x6e, 0xff, 0x6e, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xf8, 0xe0, 0xf3, 0xd6, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x81, 0x81, 0x81, 0x5a, 0xff, 0x5a, 0xff, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf2, 0x8a, 0xaa, 0xaa, 0xaa, 0xaa, 0xa2, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x3e, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x7c, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x36, 0x60, 0xfc, 0x60, 0xf8, 0x60, 0x60, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x6c, 0x78, 0xfe, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x1e, 0x78, 0x1e, 0x78, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x7c, 0xb6, 0x36, 0x33, 0x33, 0x33, 0x63, 0x66, 0xf6, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd0, 0xd2, 0xd6, 0x7c, 0x18, 0x30, 0x6e, 0xd8, 0x98, 0x18, 0x0e, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xd0, 0xd2, 0xd6, 0x7c, 0x18, 0x30, 0x6e, 0xd8, 0x8c, 0x06, 0x1c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x62, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0x62, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4e, 0xb9, 0x58, 0x18, 0x18, 0x18, 0x18, 0x18, 0x19, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x7c, 0xda, 0xd8, 0xd8, 0xda, 0x7c, 0x19, 0x3f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xc0, 0xc2, 0xc6, 0x7c, 0x18, 0x30, 0x6e, 0xdb, 0x9b, 0x1b, 0x0e, 0x00, 0x00, 0x00}, |
{0x00, 0x70, 0xc0, 0xc2, 0xc6, 0x7c, 0x18, 0x30, 0x7b, 0xdb, 0x9b, 0x1b, 0x0d, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc2, 0xc0, 0x78, 0xc0, 0xc0, 0xc2, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x86, 0x26, 0x3e, 0x26, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7f, 0xb9, 0x58, 0x1a, 0x1e, 0x1a, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x66, 0x46, 0x87, 0x8c, 0x8c, 0x7c, 0x98, 0x98, 0x70, 0x00}, |
{0x00, 0x00, 0x52, 0xb5, 0x15, 0x16, 0x2c, 0x34, 0x68, 0xa9, 0xaa, 0x4c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x48, 0xb0, 0x80, 0x48, 0x7c, 0x66, 0x26, 0x26, 0xa6, 0x46, 0x06, 0x34, 0x48, 0x00}, |
{0x00, 0x00, 0xe2, 0xa2, 0xa2, 0xa2, 0xbe, 0xa2, 0xa2, 0xa2, 0xa2, 0xe2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x36, 0x3b, 0x3b, 0x33, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x1e, 0x18, 0x76, 0x3b, 0x3b, 0x33, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x33, 0x4e, 0x06, 0x06, 0x0c, 0x0c, 0x1f, 0x6c, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x71, 0x8e, 0x04, 0x0c, 0x06, 0x03, 0x63, 0xc3, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x46, 0x49, 0x39, 0x1e, 0x18, 0x30, 0x70, 0xb1, 0xba, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0e, 0x19, 0x31, 0x32, 0x64, 0x68, 0x70, 0xe1, 0x66, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd8, 0xff, 0xd8, 0xde, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe2, 0xa2, 0xb2, 0xb2, 0xaa, 0xaa, 0xa6, 0xa6, 0xa2, 0xe2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xcc, 0xcf, 0xed, 0xff, 0xfc, 0xdf, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0xb9, 0xa5, 0xa5, 0xb9, 0xa1, 0xa1, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x40, 0x8e, 0x93, 0xa3, 0x63, 0x4b, 0x6a, 0xa4, 0xb0, 0xb0, 0x60, 0x00}, |
{0x00, 0x00, 0xfc, 0xa2, 0xa2, 0xa2, 0xa2, 0xbc, 0xa0, 0xa0, 0xa0, 0xe0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xaa, 0xa6, 0x7e, 0x01, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x4d, 0x4d, 0x19, 0x1e, 0x1c, 0x34, 0x34, 0xb5, 0x62, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x58, 0xa6, 0xa3, 0x6c, 0xb8, 0x26, 0x26, 0x26, 0xa7, 0xc2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0xa2, 0xa2, 0xa2, 0xa2, 0xbc, 0xb0, 0xa8, 0xa4, 0xe2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x6d, 0x67, 0x66, 0xee, 0x08, 0x00, 0x00, 0x00}, |
{0x30, 0x0c, 0xfc, 0xc6, 0xc6, 0xc6, 0xfc, 0xd8, 0xdc, 0xdc, 0xe6, 0xe6, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x71, 0xdb, 0x35, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x52, 0x5a, 0x52, 0x5f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf1, 0x5b, 0x55, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x18, 0xce, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xe6, 0x6c, 0x38, 0x50, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x0a, 0x14, 0x14, 0x28, 0x28, 0x50, 0x50, 0xa0, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x9c, 0x30, 0xfe, 0x0c, 0x18, 0x38, 0x0c, 0x06, 0x06, 0xc6, 0xc6, 0x7c, 0x00}, |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0x6c, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x26, 0x03, 0x13, 0x0c, 0x13, 0x03, 0x03, 0x66, 0x98, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x6c, 0x38, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x2d, 0x2d, 0x1a, 0x1e, 0x1b, 0x31, 0x31, 0xb2, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x14, 0x6b, 0xc8, 0xcc, 0xc6, 0xc6, 0xcc, 0xc0, 0x63, 0x1c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0xe7, 0xff, 0xe0, 0x67, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x26, 0x44, 0xf8, 0xc0, 0xc8, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x4c, 0x52, 0x3c, 0x10, 0x3c, 0x60, 0xc0, 0xc3, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x73, 0xce, 0x18, 0x3a, 0x5c, 0x18, 0x30, 0x30, 0xb0, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x2c, 0x3c, 0x2c, 0x8c, 0xcc, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x12, 0x12, 0x12, 0x16, 0x36, 0x3e, 0x3a, 0x5a, 0x52, 0x91, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x26, 0x46, 0xc6, 0xc4, 0xc8, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x42, 0xc6, 0xe7, 0x7a, 0x38, 0x5c, 0xce, 0xe7, 0x63, 0xe2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xfc, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x7e, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x40, 0x78, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x1e, 0x7e, 0xf2, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xfe, 0x7e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x38, 0x00, 0x78, 0x38, 0x38, 0x38, 0x38, 0x38, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xff, 0x83, 0x86, 0x82, 0xfe, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0xc6, 0xfc, 0x18, 0x30, 0x60, 0xdc, 0x86, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xde, 0x98, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0xc6, 0xfc, 0x18, 0x30, 0x60, 0xde, 0x98, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0x36, 0xec, 0x18, 0x30, 0x60, 0xde, 0x98, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0x30, 0x70, 0xb2, 0xf6, 0x3c, 0x18, 0x30, 0x60, 0xde, 0x98, 0x1c, 0x06, 0x1c, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0xb0, 0x3c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xf0, 0xc0, 0xe2, 0x36, 0xec, 0x18, 0x30, 0x60, 0xdc, 0xb0, 0x3c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x1c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xe0, 0x30, 0x62, 0x36, 0xec, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x1c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xf0, 0x80, 0xe2, 0x36, 0xec, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x1c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xf0, 0x30, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x1c, 0x36, 0x1c, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xce, 0xce, 0xc4, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x73, 0x73, 0x23, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x95, 0x65, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0xb5, 0x55, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0xce, 0xce, 0xce, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x7c, 0x38, 0x38, 0x7c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0xdb, 0x73, 0x73, 0x73, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x95, 0x95, 0x95, 0x65, 0x65, 0x65, 0x95, 0x95, 0x95, 0x95, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xdb, 0xdb, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xce, 0xc4, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x00, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x73, 0x23, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x05, 0x05, 0x00, 0x95, 0x95, 0x95, 0x95, 0x95, 0x65, 0x65, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x15, 0x15, 0x00, 0xb5, 0xb5, 0xb5, 0xb5, 0x55, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0x00, 0xdb, 0xdb, 0xce, 0xce, 0xce, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x00, 0xdb, 0xdb, 0x73, 0x73, 0x73, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x05, 0x05, 0x00, 0x95, 0x95, 0x65, 0x65, 0x95, 0x95, 0x95, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x5a, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x5a, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xcc, 0xe6, 0xd6, 0xd6, 0xd6, 0xd6, 0xe6, 0xcc, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x5a, 0x99, 0xbd, 0xdb, 0xdb, 0xbd, 0x99, 0x5a, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0xcc, 0x86, 0x06, 0x06, 0x06, 0x06, 0x86, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xff, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0xff, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xf0, 0xe0, 0xb0, 0x18, 0x0c, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0f, 0x07, 0x0d, 0x18, 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x18, 0x0d, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x0c, 0x18, 0xb0, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x62, 0xff, 0x64, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x26, 0xff, 0x46, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xce, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x73, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xff, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x36, 0xff, 0x36, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x66, 0xfc, 0x66, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x66, 0x3f, 0x66, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x63, 0xff, 0x63, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xc6, 0xff, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x33, 0x63, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x60, 0xcc, 0xc6, 0x7f, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x3b, 0x6b, 0xfe, 0x68, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x60, 0xdc, 0xd6, 0x7f, 0x16, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x5a, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x6e, 0xff, 0x76, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x30, 0x60, 0x63, 0xff, 0xc6, 0x16, 0x1c, 0x1c, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x66, 0x36, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0xcc, 0xd8, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x36, 0x66, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xd8, 0xcc, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x36, 0x66, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x1e, 0x33, 0x33, 0x33, 0x30, 0xfc, 0x78, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x0c, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x00, 0xf0, 0xe0, 0xb0, 0x18, 0x0c, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x98, 0xb0, 0xff, 0xb0, 0x98, 0x19, 0x0d, 0xff, 0x0d, 0x19, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x1e, 0x1c, 0x16, 0x03, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x78, 0x38, 0x68, 0xc0, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x1c, 0x1e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1e, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x06, 0xff, 0x06, 0x0c, 0x30, 0x60, 0xff, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x2e, 0x3f, 0x24, 0x24, 0x24, 0x24, 0xfc, 0x74, 0x24, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x60, 0xff, 0x60, 0x30, 0x0c, 0x06, 0xff, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x7e, 0xff, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0xff, 0x7e, 0x24, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xff, 0x00, 0xff, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0xff, 0x00, 0xff, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x7f, 0xc4, 0x7f, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x7e, 0xcb, 0x7e, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xfe, 0x23, 0xfe, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7f, 0xc0, 0x7f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x7c, 0xee, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x03, 0xfe, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x7e, 0xc3, 0x7e, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x7c, 0xee, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xf0, 0xe0, 0xb0, 0xd8, 0xec, 0xb6, 0x1b, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0f, 0x07, 0x0d, 0x1b, 0x37, 0x6d, 0xd8, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x20, 0x30, 0xd8, 0x6d, 0x37, 0x1b, 0x0d, 0x07, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x0c, 0x1b, 0xb6, 0xec, 0xd8, 0xb0, 0xe0, 0xf0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x3f, 0x60, 0xff, 0x60, 0x3f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0xfc, 0x06, 0xff, 0x06, 0xfc, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x6a, 0xff, 0x65, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xa6, 0xff, 0x56, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x3c, 0x18, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x3c, 0x18, 0x3c, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xd5, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0x66, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x06, 0xab, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0xb0, 0xff, 0xb0, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x0d, 0xff, 0x0d, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x3f, 0x41, 0x81, 0x41, 0x3f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0xc6, 0x44, 0x44, 0x44, 0x44, 0x44, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0xfc, 0x82, 0x81, 0x82, 0xfc, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x44, 0xc6, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0xc6, 0x44, 0x44, 0x7c, 0x00, 0x7c, 0x44, 0x7c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0xc6, 0x44, 0x44, 0x44, 0xc6, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x7c, 0xc6, 0x44, 0x44, 0x44, 0xc6, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x54, 0xd6, 0x54, 0x54, 0x54, 0xd6, 0x92, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x28, 0x54, 0xee, 0x44, 0xc6, 0x44, 0x44, 0x44, 0x44, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x28, 0x54, 0xee, 0x44, 0xc6, 0x44, 0x44, 0xc6, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xe8, 0xbc, 0x82, 0x81, 0x82, 0xbc, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x80, 0xbc, 0xb8, 0xac, 0x86, 0x83, 0x81, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x01, 0x81, 0xc1, 0x61, 0x35, 0x1d, 0x3d, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0xc6, 0x44, 0x44, 0x44, 0xc6, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0xfe, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x60, 0x60, 0x60, 0x66, 0x3c, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x06, 0x06, 0x3e, 0x66, 0xc6, 0xc6, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x7e, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0xfe, 0x16, 0x16, 0x16, 0x7e, 0x16, 0x26, 0x26, 0x26, 0xfe, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x3e, 0x66, 0xcf, 0xdb, 0xdb, 0xf3, 0x66, 0x7c, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x3e, 0x60, 0xc0, 0xc0, 0xfe, 0xc0, 0xc0, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x3e, 0x64, 0xc8, 0xc8, 0xfe, 0xc8, 0xd0, 0x70, 0x3e, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x3e, 0x60, 0xc0, 0xfe, 0xc0, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xf8, 0x0c, 0x06, 0x06, 0xfe, 0x06, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0xf8, 0x1c, 0x16, 0x26, 0xfe, 0x26, 0x26, 0x4c, 0xf8, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xf8, 0x0c, 0x06, 0xfe, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xe7, 0x00, 0x00}, |
{0x00, 0x00, 0xe7, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xff, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0xc0, 0x00, 0x00, 0x00}, |
{0x00, 0xc0, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x7e, 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x06, 0x06, 0x06, 0x0c, 0xcc, 0x6c, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe3, 0x33, 0x66, 0x36, 0xe6, 0x0c, 0xcc, 0x6c, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x33, 0x73, 0xb6, 0xf6, 0x36, 0x0c, 0xcc, 0x6c, 0x38, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdb, 0xdb, 0x6e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x16, 0x0c, 0x1c, 0x34, 0x62, 0xff, 0x02, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x38, 0xe8, 0x38, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x1a, 0x1c, 0x38, 0x58, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6e, 0x7c, 0xec, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x1a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x58, 0x30, 0x00, 0x00}, |
{0x33, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00}, |
{0x2a, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0xa8, 0x00, 0x00}, |
{0x0c, 0x1a, 0x18, 0x18, 0x3c, 0x5a, 0x99, 0x99, 0x5a, 0x3c, 0x18, 0x18, 0x58, 0x30, 0x00, 0x00}, |
{0x33, 0x66, 0x66, 0x66, 0x7e, 0xe7, 0xe7, 0xe7, 0xe7, 0x7e, 0x66, 0x66, 0x66, 0xcc, 0x00, 0x00}, |
{0x2a, 0x54, 0x54, 0x54, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x54, 0x54, 0x54, 0xa8, 0x00, 0x00}, |
{0x18, 0x34, 0x30, 0x30, 0x38, 0x35, 0x33, 0x37, 0x30, 0x30, 0x30, 0x30, 0xb0, 0x60, 0x00, 0x00}, |
{0x0c, 0x1a, 0x18, 0x18, 0x3c, 0x5a, 0xfa, 0x5a, 0x5a, 0x3c, 0x18, 0x18, 0x58, 0x30, 0x00, 0x00}, |
{0x0c, 0x1a, 0x18, 0x18, 0x3c, 0x5a, 0x5f, 0x5a, 0x5a, 0x3c, 0x18, 0x18, 0x58, 0x30, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0xfc, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x7e, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x76, 0xdc, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xdb, 0xdb, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0xdb, 0xdb, 0x1b, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x1c, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x76, 0xdc, 0x10, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x76, 0xdc, 0x10, 0xfe, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x08, 0xfe, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x08, 0x76, 0xdc, 0x10, 0xfe, 0x20, 0xfe, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x76, 0xdc, 0x10, 0x76, 0xdc, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x7c, 0x00, 0x7c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x66, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0x60, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x06, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc0, 0xdf, 0x00, 0x00, 0xdf, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0xfb, 0x00, 0x00, 0xfb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x28, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x10, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x44, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x44, 0x28, 0x10, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x10, 0x7c, 0x28, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x10, 0x28, 0x44, 0x7c, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x26, 0x7c, 0xb4, 0x6c, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x68, 0x54, 0x54, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x08, 0x10, 0x00, 0x10, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x08, 0x7e, 0x08, 0x10, 0x7e, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x08, 0xfe, 0x08, 0x10, 0xfe, 0x10, 0x20, 0xfe, 0x20, 0x40, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x08, 0xfe, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x08, 0xfe, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x1b, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x1b, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x66, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x66, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0xce, 0x7c, 0x10, 0x7c, 0xe6, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x04, 0x0e, 0x38, 0xe8, 0x38, 0x0e, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0xe0, 0x38, 0x2e, 0x38, 0xe0, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x04, 0x0e, 0x38, 0xe8, 0x38, 0x0e, 0x10, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0xe0, 0x38, 0x2e, 0x38, 0xe0, 0x40, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x04, 0x0e, 0x38, 0xe8, 0x38, 0x0e, 0x10, 0x76, 0xdc, 0x20, 0x20, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0xe0, 0x38, 0x2e, 0x38, 0xe0, 0x40, 0x76, 0xdc, 0x80, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x0e, 0x38, 0xe8, 0x38, 0x1e, 0xf0, 0x38, 0x2e, 0x38, 0xe0, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0xe8, 0x38, 0x0e, 0x38, 0xf0, 0x1e, 0x38, 0xe0, 0x38, 0x2e, 0x20, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x02, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x80, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x02, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0xf2, 0x1c, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x9e, 0x70, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x02, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x02, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x80, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x06, 0x0c, 0x38, 0xe8, 0x38, 0x1c, 0x16, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0xd0, 0x70, 0x38, 0x2e, 0x38, 0x60, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x7e, 0xc8, 0xc8, 0xd0, 0xd0, 0x7e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0xfc, 0x16, 0x16, 0x26, 0x26, 0xfc, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0x7e, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x7e, 0xc8, 0xc8, 0xd0, 0xd0, 0x7e, 0x20, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0xfc, 0x16, 0x16, 0x26, 0x26, 0xfc, 0x40, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0x7e, 0x08, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0x92, 0xa2, 0xfa, 0xa2, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x92, 0xba, 0xba, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x92, 0xba, 0x92, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x54, 0x92, 0xfe, 0x92, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0xfe, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0xaa, 0x92, 0xaa, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x8a, 0x92, 0xa2, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x92, 0xba, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x92, 0xaa, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x54, 0xd6, 0xba, 0xd6, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0xba, 0x82, 0xba, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0xba, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x92, 0x92, 0xfe, 0x92, 0x92, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0xfe, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xaa, 0x92, 0xaa, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x92, 0xba, 0x92, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xff, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0xff, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x7e, 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x7e, 0x60, 0x7e, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xd8, 0xdf, 0xd8, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xa8, 0xa8, 0xa8, 0xa8, 0xaf, 0xa8, 0xa8, 0xa8, 0xa8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd8, 0xd8, 0xdf, 0xd8, 0xdf, 0xd8, 0xd8, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc2, 0xc4, 0xc4, 0xff, 0xc8, 0xc8, 0xd0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xc4, 0xc4, 0xff, 0xc8, 0xff, 0xd0, 0xd0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd9, 0xda, 0xda, 0xdf, 0xda, 0xda, 0xdc, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xd8, 0xd9, 0xda, 0xdf, 0xda, 0xdf, 0xda, 0xdc, 0xd8, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x0c, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x60, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x06, 0x1e, 0x76, 0xc6, 0x76, 0x1e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc0, 0xf0, 0xdc, 0xc6, 0xdc, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x1e, 0x76, 0xc6, 0x76, 0x1e, 0x06, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xf0, 0xdc, 0xc6, 0xdc, 0xf0, 0xc0, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xbf, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xfd, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x7d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0xc6, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xf0, 0xc8, 0xc4, 0xc4, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0b, 0x13, 0x23, 0x43, 0x83, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x38, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x92, 0x44, 0x28, 0x92, 0x28, 0x44, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0xc6, 0xaa, 0x92, 0xaa, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0xc4, 0xa8, 0x90, 0xa8, 0xc4, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x82, 0x46, 0x2a, 0x12, 0x2a, 0x46, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x08, 0x10, 0x28, 0x44, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x3e, 0x60, 0xce, 0xd8, 0xd8, 0xce, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xf8, 0x0c, 0xe6, 0x36, 0x36, 0xe6, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x44, 0x92, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x92, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x10, 0x38, 0x54, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x64, 0xce, 0x64, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x4c, 0xe6, 0x4c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x15, 0x2a, 0x54, 0xa8, 0x54, 0x2a, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xa8, 0x54, 0x2a, 0x15, 0x2a, 0x54, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0xfe, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0x00}, |
{0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0xfe, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x02, 0x06, 0x1c, 0xf2, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xc0, 0x70, 0x9e, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0a, 0x0e, 0x1c, 0xf0, 0x1c, 0x16, 0xf2, 0x1c, 0x26, 0x22, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x88, 0xc8, 0x70, 0x1e, 0x70, 0xd0, 0x9e, 0x70, 0xe0, 0xa0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0xfe, 0xc8, 0xc8, 0xd0, 0xd0, 0xfe, 0x20, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0xfe, 0x16, 0x16, 0x26, 0x26, 0xfe, 0x40, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x08, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x10, 0xfe, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0e, 0x38, 0xe0, 0x38, 0x0e, 0x10, 0x76, 0xdc, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x0e, 0x38, 0xe0, 0x10, 0x76, 0xdc, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x02, 0x06, 0x1c, 0xf0, 0x1c, 0x06, 0x02, 0x10, 0x76, 0xdc, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x80, 0xc0, 0x70, 0x1e, 0x70, 0xc0, 0x80, 0x10, 0x76, 0xdc, 0x10, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x0e, 0x1e, 0x76, 0xd6, 0x76, 0x1e, 0x26, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0xc8, 0xf0, 0xdc, 0xd6, 0xdc, 0xf0, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x0e, 0x1e, 0x76, 0xd6, 0x76, 0x1e, 0x26, 0x20, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0xc8, 0xf0, 0xdc, 0xd6, 0xdc, 0xf0, 0xe0, 0x20, 0xfe, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x3d, 0x66, 0xc7, 0xcb, 0xd3, 0xe3, 0x66, 0xbc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x42, 0xa5, 0x7e, 0x24, 0x24, 0x7e, 0xa5, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x38, 0x54, 0x8a, 0xf6, 0x82, 0x54, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0xfe, 0xfe, 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x00, 0x00}, |
{0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60, 0x00, 0x00}, |
{0x00, 0x03, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, |
{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, |
{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x03, 0x00, 0x00}, |
{0x00, 0xc0, 0x60, 0x30, 0x30, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, |
{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, |
{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x30, 0x30, 0x60, 0xc0, 0x00, 0x00}, |
{0x00, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, |
{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30}, |
{0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3f, 0x00, 0x00}, |
{0x00, 0xfc, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, |
{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c}, |
{0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xfc, 0x00, 0x00}, |
{0x00, 0x07, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x07, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x07, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x07, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0xe0}, |
{0xe0, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x07}, |
{0x00, 0x00, 0xff, 0xc1, 0xc0, 0x60, 0x60, 0x60, 0x60, 0x30, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0xc0, 0xc1, 0xff, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xff, 0x00, 0xff, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x78, 0x78, 0x38, 0x38, 0x18, 0x18, 0x00, 0x00}, |
{0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, |
{0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}, |
{0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x07, 0x05, 0x05, 0x05, 0x05, 0x25, 0x79, 0xc2, 0x7c, 0x20, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd8, 0xd8, 0xf8, 0xd8, 0xd8, 0x0f, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0, 0x0f, 0x0c, 0x0e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd8, 0xd8, 0xf8, 0x70, 0x20, 0x0f, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xf0, 0xc0, 0xe0, 0xc0, 0xc0, 0x0f, 0x0c, 0x0e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0xc0, 0xc0, 0xc0, 0x70, 0x1e, 0x1b, 0x1e, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x98, 0xd8, 0xf8, 0xd8, 0xd8, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7c, 0xfe, 0xc6, 0xc6, 0x60, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6d, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xfc, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xfc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xfc, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0x1f, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0xff, 0xff, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0e, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x70, 0x30, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x30, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x0c, 0x0e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80}, |
{0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01}, |
{0x81, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x18, 0x18, 0x24, 0x24, 0x42, 0x42, 0x81, 0x81}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, |
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe}, |
{0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc}, |
{0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8}, |
{0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0}, |
{0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0}, |
{0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0}, |
{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, |
{0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f}, |
{0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44}, |
{0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa}, |
{0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77}, |
{0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, |
{0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x7c, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0xba, 0xba, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0xfe, 0x82, 0xfe, 0x82, 0xfe, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xaa, 0xfe, 0xaa, 0xfe, 0xaa, 0xfe, 0xaa, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x8a, 0xc6, 0xa2, 0x92, 0x8a, 0xc6, 0xa2, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xa2, 0xc6, 0x8a, 0x92, 0xa2, 0xc6, 0x8a, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0xaa, 0xc6, 0xaa, 0x92, 0xaa, 0xc6, 0xaa, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x42, 0x84, 0x84, 0xfc, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x44, 0x44, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x80, 0xc0, 0xa0, 0x90, 0x88, 0x84, 0x88, 0x90, 0xa0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x70, 0x78, 0x70, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x70, 0x48, 0x70, 0x40, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x98, 0x86, 0x98, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0x7e, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x06, 0x0a, 0x12, 0x22, 0x42, 0x22, 0x12, 0x0a, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x38, 0x78, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x38, 0x48, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x32, 0xc2, 0x32, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0x44, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x44, 0x54, 0xba, 0xba, 0x54, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x99, 0xbd, 0xbd, 0xbd, 0xbd, 0x99, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x28, 0x28, 0x44, 0x82, 0x82, 0x44, 0x28, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x14, 0x40, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x02, 0x28, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x99, 0xa5, 0xa5, 0xa5, 0xa5, 0x99, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x72, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x72, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x4e, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x4e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x81, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x7e, 0xff, 0xff, 0xff, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x4e, 0x8f, 0x8f, 0x8f, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x4e, 0x8f, 0x8f, 0x8f, 0xff, 0xff, 0xff, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x70, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, |
{0xff, 0xff, 0xc3, 0xbd, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0xbd, 0xc3, 0xff, 0xff, 0xff, 0xff}, |
{0xff, 0xff, 0xc3, 0xbd, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0xbd, 0xc3, 0xff, 0xff, 0xff, 0xff}, |
{0x00, 0x00, 0x30, 0x40, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0c, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x30, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f, 0x7f, 0x7f, 0xff, 0xff}, |
{0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, 0xfe, 0xfe, 0xff, 0xff}, |
{0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80}, |
{0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0x8f, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0xff, 0xfd, 0xf9, 0xf1, 0xf1, 0xe1, 0xc1, 0x81, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x81, 0x83, 0x87, 0x8f, 0x8f, 0x9f, 0xbf, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xff, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x92, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x74, 0x74, 0xf2, 0xf2, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x5c, 0x5c, 0x9e, 0x9e, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x92, 0x92, 0x92, 0xf2, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0xf2, 0x92, 0x92, 0x92, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0x9e, 0x92, 0x92, 0x92, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xfe, 0x92, 0x92, 0x92, 0x9e, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x4a, 0x89, 0x89, 0x89, 0xf9, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0xf9, 0x89, 0x89, 0x89, 0x4a, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, 0x9f, 0x91, 0x91, 0x91, 0x52, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x52, 0x91, 0x91, 0x91, 0x9f, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x54, 0x38, 0xfe, 0x38, 0x54, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x30, 0x7c, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x7c, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0xfe, 0x7c, 0x38, 0x6c, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x28, 0xee, 0x44, 0x54, 0x6c, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x18, 0x30, 0x60, 0xc0, 0x60, 0x34, 0x1c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcd, 0xc7, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x82, 0x92, 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x42, 0x42, 0xa5, 0xa5, 0x42, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x42, 0xa5, 0xa5, 0x42, 0x42, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x36, 0x36, 0x1c, 0x18, 0x30, 0x70, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0x86, 0x8a, 0xba, 0x92, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0xfe, 0x82, 0xee, 0xba, 0xba, 0xee, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x82, 0xc6, 0x6c, 0x7c, 0x38, 0x7c, 0x6c, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x7c, 0x82, 0xaa, 0x82, 0x44, 0x7c, 0x44, 0x38, 0x00, 0x44, 0xc6, 0x38, 0xc6, 0x44, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x44, 0xee, 0xfe, 0x92, 0xba, 0x7c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x7e, 0x18, 0x18, 0xff, 0x18, 0x1e, 0x78, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x7e, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x38, 0x10, 0x10, 0x92, 0xfe, 0x92, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x72, 0xe0, 0xc4, 0xdf, 0xce, 0xca, 0xe0, 0x72, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x54, 0x28, 0x54, 0xaa, 0xaa, 0xaa, 0xaa, 0x54, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x5a, 0x99, 0x99, 0x99, 0xbd, 0xff, 0xdb, 0x5a, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x42, 0x81, 0x85, 0xb1, 0xf9, 0xff, 0xdf, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0xee, 0xee, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0x81, 0x99, 0xa5, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xa5, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xdb, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x54, 0x28, 0xc6, 0x28, 0x54, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x78, 0x14, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x14, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x28, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x28, 0x1e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x06, 0x0e, 0x1a, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x03, 0x03, 0x7b, 0xcf, 0xcf, 0xcf, 0x0f, 0x1b, 0x33, 0xff, 0x03, 0x03, 0x03, 0x00, 0x00}, |
{0x00, 0x00, 0x60, 0xf0, 0x60, 0x6e, 0x73, 0x63, 0x63, 0x66, 0x66, 0x63, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xd6, 0x54, 0x54, 0x7c, 0x54, 0x54, 0xd6, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x3c, 0xdb, 0xdb, 0xdb, 0xdb, 0x7e, 0x3c, 0x18, 0x3c, 0x18, 0x18, 0x00, 0x00}, |
{0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x42, 0xa5, 0xa5, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0xc3, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00}, |
{0x00, 0x00, 0xc3, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7e, 0xc3, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7e, 0xdb, 0xd8, 0x70, 0x00, 0x00, 0x0e, 0x1b, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1e, 0x33, 0x33, 0x33, 0x33, 0x1b, 0x7b, 0xdb, 0xdb, 0x73, 0x03, 0x01, 0x00, 0x00}, |
{0x00, 0x00, 0x94, 0x7c, 0x55, 0x57, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x06, 0x0b, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x24, 0xe7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x94, 0x7c, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x04, 0x03, 0x00, 0x00}, |
{0x00, 0x00, 0x1f, 0x07, 0x8f, 0xdb, 0x73, 0x70, 0xd8, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x90, 0x50, 0x70, 0x68, 0x48, 0x48, 0x4e, 0x49, 0x09, 0x0e, 0x10, 0x20, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x2a, 0x7e, 0xaa, 0x00, 0x00, 0x2a, 0x7e, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc3, 0x66, 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x66, 0x66, 0xc3, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x6c, 0x92, 0x82, 0x82, 0x82, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x44, 0x82, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x24, 0x42, 0x81, 0x81, 0x66, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x18, 0x24, 0x3c, 0xe7, 0xa5, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x78, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x30, 0x3c, 0x3e, 0x32, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x7f, 0x6f, 0x63, 0x63, 0x63, 0x63, 0xe3, 0xe7, 0xc7, 0x06, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x63, 0xe7, 0xe7, 0xc6, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0xde, 0xe6, 0xc4, 0xd8, 0xe0, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x40, 0x40, 0x44, 0x5c, 0x74, 0x44, 0x44, 0x5c, 0x74, 0x44, 0x04, 0x04, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x04, 0x46, 0x5c, 0x74, 0xc4, 0x46, 0x5c, 0x74, 0xc4, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x3b, 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3c, 0x6e, 0x66, 0x60, 0xfe, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x3e, 0x6e, 0x66, 0x66, 0xfe, 0x66, 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6e, 0xdb, 0xdb, 0xd8, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x6f, 0xdb, 0xdb, 0xdb, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xff, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x38, 0x6c, 0x6c, 0x6f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6d, 0xf6, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x29, 0x5e, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x29, 0x5e, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x89, 0x86, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x0a, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x12, 0x0c, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0a, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0a, 0x00, 0x0a, 0x00, 0x06, 0x49, 0x89, 0x86, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x0a, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x14, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x12, 0x0c, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x88, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x88, 0x80, 0x88, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x94, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x80, 0x94, 0x80, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x88, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x94, 0x80, 0x88, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x0a, 0x00, 0x04, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x94, 0x80, 0x94, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x94, 0x80, 0x94, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x28, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x28, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x28, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x28, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x38, 0x28, 0x70, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x38, 0x28, 0x70, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x00, 0x14, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x04, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x00, 0x00, 0x04, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x01, 0x02, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x01, 0x02, 0x04, 0x08, 0x48, 0x84, 0x82, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x18, 0x20, 0x10, 0x08, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x18, 0x20, 0x20, 0x10, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x48, 0x84, 0x82, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x46, 0x18, 0x20, 0x10, 0x08, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x46, 0x18, 0x20, 0x20, 0x10, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00}, |
{0x04, 0x09, 0x12, 0x04, 0x08, 0x48, 0x84, 0x82, 0x7d, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x46, 0x18, 0x20, 0x10, 0x08, 0x08, 0xf0, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x46, 0x18, 0x20, 0x20, 0x10, 0x08, 0xf7, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0xa4, 0x09, 0x12, 0x04, 0x08, 0x44, 0x82, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xa4, 0x09, 0x12, 0x04, 0x08, 0x48, 0x84, 0x82, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xa2, 0x0c, 0x13, 0x0c, 0x10, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xa2, 0x0c, 0x13, 0x0c, 0x10, 0x10, 0x08, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x41, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x00, 0x00, 0x01, 0x41, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x1c, 0x14, 0x38, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x38, 0x40, 0x38, 0x40, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x70, 0x80, 0x70, 0x80, 0x10, 0x68, 0x88, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf0, 0x10, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf7, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0x3d, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0x3d, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x38, 0x4c, 0x52, 0x32, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x60, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x20, 0x3f, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x70, 0x80, 0x70, 0x80, 0x08, 0x14, 0x60, 0x80, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x1c, 0x20, 0x1c, 0x20, 0x00, 0x00, 0x07, 0x18, 0x20, 0x3f, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x29, 0x01, 0x19, 0x21, 0x19, 0xa1, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x00, 0x2a, 0x02, 0x32, 0x42, 0x32, 0xc6, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0x00, 0xa3, 0x0c, 0x10, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x40, 0x00, 0xa3, 0x0c, 0x10, 0x10, 0x08, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x18, 0x10, 0x20, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x18, 0x10, 0x20, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x08, 0x08, 0x08, 0x08, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x23, 0x54, 0x33, 0x24, 0x40, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x14, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x3c, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x08, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x3c, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x14, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x10, 0x00, 0x10}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x10, 0x00, 0x10}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x20, 0x20, 0x20, 0x20, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x10, 0x10, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x10, 0x10, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x98, 0x60, 0xc2, 0x12, 0x92, 0x9c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x92, 0x9c, 0x60, 0x0e, 0x70, 0x0e, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x60, 0x04, 0x54, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x10, 0x60, 0x04, 0x54, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x04, 0x54, 0x58, 0x20, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x04, 0x54, 0x58, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x00, 0x00}, |
{0x0e, 0xf0, 0x02, 0x92, 0x9c, 0x60, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x18, 0x60, 0x02, 0x92, 0x9c, 0x60, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x12, 0x9c, 0x60, 0x0e, 0x70, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x10, 0x28, 0x50, 0x28, 0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x14, 0x28, 0x14, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x08, 0x10, 0x54, 0x38, 0x54, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x10, 0x08, 0x2a, 0x1c, 0x2a, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x2a, 0x14, 0x00, 0x21, 0x69, 0xa9, 0x69, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x08, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x10, 0x10, 0x20, 0x10, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x08, 0x04, 0x08, 0x08, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x7c, 0x28, 0x7c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x28, 0x10, 0x2a, 0x24, 0x1a, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x38, 0x38, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x10, 0x08, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x54, 0x30, 0x18, 0x54, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x08, 0x08, 0x10, 0x10, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x54, 0x58, 0x40, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x30, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x06, 0x18, 0x60, 0x06, 0x18, 0x60, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x12, 0xca, 0x2c, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x0c, 0x30, 0x00, 0x00}, |
{0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x08, 0x14, 0x0c, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x14, 0x18, 0x60, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x30, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x06, 0x18, 0x60, 0x00, 0x00}, |
{0x0a, 0x2a, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x12, 0x92, 0x9c, 0x60, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x20, 0x1e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x02, 0x3c, 0x40, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x01, 0x3e, 0x40, 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x18, 0x20, 0x1c, 0x20, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x0c, 0x10, 0x0e, 0x10, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x0c, 0x10, 0x0e, 0x10, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00, 0x0c, 0x10, 0x0e, 0x10, 0x00, 0x00}, |
{0x00, 0x30, 0x40, 0x38, 0x40, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x30, 0x40, 0x38, 0x40, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x1c, 0x20, 0x1c, 0x20, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x28, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x50, 0x00, 0x10, 0x10, 0x68, 0x88, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x14, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x14, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x14, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x40, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x40, 0x80, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x88, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x80, 0x88, 0x80, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x80, 0x80, 0x80, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x20, 0x00, 0x00, 0x70, 0x8f, 0x30, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x8f, 0x32, 0x41, 0x80, 0x80, 0x80, 0x40, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x00, 0x38, 0x47, 0x18, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x00, 0x70, 0x8f, 0x32, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x08, 0x04, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x08, 0x08, 0x04, 0x46, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x15, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x14, 0x00, 0x01, 0x15, 0x88, 0x84, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x04, 0x00, 0x0a, 0x00, 0x00, 0x01, 0x15, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2a, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x29, 0x31, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x29, 0x31, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x04, 0x00, 0x06, 0x09, 0x31, 0x9e, 0x88, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x29, 0x31, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x29, 0x31, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0x22, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x20, 0x20, 0x20, 0x2c, 0x32, 0x22, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0xa2, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0x22, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x24, 0x20, 0x20, 0x2c, 0x32, 0x22, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x1c, 0x22, 0x41, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x10, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x1c, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x40, 0x00, 0x00, 0x70, 0x80, 0x8c, 0x70, 0x40, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x08, 0x00, 0x00, 0x1e, 0x22, 0x1c, 0x22, 0x41, 0x80, 0x80, 0x80, 0x41, 0x3e, 0x00, 0x00}, |
{0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x10, 0x10, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x1e, 0x22, 0x1c, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x49, 0x85, 0x83, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x04, 0x00, 0x06, 0x49, 0x89, 0x86, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x0c, 0x12, 0x0a, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x0c, 0x12, 0x12, 0x0c, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0a, 0x00, 0x06, 0x09, 0x09, 0x47, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x0a, 0x00, 0x00, 0x06, 0x09, 0x49, 0x87, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x0a, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x14, 0x00, 0x00, 0x0c, 0x12, 0x12, 0x0c, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x19, 0x21, 0x19, 0x21, 0x01, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x32, 0x42, 0x32, 0x42, 0x02, 0x86, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x18, 0x20, 0x10, 0x08, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x06, 0x18, 0x20, 0x20, 0x10, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x42, 0x82, 0x82, 0x84, 0x78, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x12, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x3c, 0x4b, 0x4a, 0x44, 0x40, 0x40, 0x40, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x32, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x32, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x08, 0x00, 0x00, 0x41, 0x81, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x41, 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x22, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x10, 0x10, 0x68, 0x88, 0x74, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x40, 0x30, 0x4e, 0x49, 0x39, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x24, 0x28, 0xf3, 0x24, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0e, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x0f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x88, 0x86, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x24, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x87, 0x81, 0x7e, 0x00, 0x24, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0xf8, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xf7, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00}, |
{0x68, 0x90, 0x02, 0x22, 0x12, 0x0a, 0x04, 0x0c, 0x12, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x68, 0x90, 0x02, 0x32, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x60, 0x80, 0x72, 0xa2, 0x12, 0x0a, 0x04, 0x0c, 0x12, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x30, 0x40, 0x3a, 0x52, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x42, 0x22, 0x12, 0x0a, 0x04, 0x0c, 0x12, 0x3c, 0x00, 0x18, 0x20, 0x1c, 0x20, 0x00}, |
{0x00, 0x00, 0x22, 0x12, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x18, 0x20, 0x1c, 0x20, 0x00}, |
{0x00, 0x00, 0x42, 0x22, 0x12, 0x0a, 0x04, 0x0c, 0x12, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0x00, 0x00, 0x22, 0x12, 0x12, 0x0a, 0x0a, 0x0e, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, |
{0xf1, 0x35, 0x55, 0x8a, 0xe0, 0x06, 0x95, 0xd6, 0xb5, 0x97, 0x00, 0xee, 0x8a, 0xee, 0x28, 0xe8}, |
{0x00, 0x38, 0x7c, 0x7c, 0xc6, 0x92, 0xf2, 0xe6, 0xfe, 0xe6, 0x7c, 0x7c, 0x38, 0x00, 0x00, 0x00}, |
/* Special glyph for unknown character */ |
{0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00} |
}; |
/* 1 0x01 '^A' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x81, /* 10000001 */ |
0xa5, /* 10100101 */ |
0x81, /* 10000001 */ |
0x81, /* 10000001 */ |
0xbd, /* 10111101 */ |
0x99, /* 10011001 */ |
0x81, /* 10000001 */ |
0x81, /* 10000001 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 2 0x02 '^B' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0xff, /* 11111111 */ |
0xdb, /* 11011011 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xc3, /* 11000011 */ |
0xe7, /* 11100111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 3 0x03 '^C' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x6c, /* 01101100 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0x7c, /* 01111100 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 4 0x04 '^D' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x7c, /* 01111100 */ |
0xfe, /* 11111110 */ |
0x7c, /* 01111100 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 5 0x05 '^E' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0xe7, /* 11100111 */ |
0xe7, /* 11100111 */ |
0xe7, /* 11100111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 6 0x06 '^F' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x7e, /* 01111110 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 7 0x07 '^G' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 8 0x08 '^H' */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xe7, /* 11100111 */ |
0xc3, /* 11000011 */ |
0xc3, /* 11000011 */ |
0xe7, /* 11100111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
/* 9 0x09 '^I' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x42, /* 01000010 */ |
0x42, /* 01000010 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 10 0x0a '^J' */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xc3, /* 11000011 */ |
0x99, /* 10011001 */ |
0xbd, /* 10111101 */ |
0xbd, /* 10111101 */ |
0x99, /* 10011001 */ |
0xc3, /* 11000011 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
/* 11 0x0b '^K' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1e, /* 00011110 */ |
0x0e, /* 00001110 */ |
0x1a, /* 00011010 */ |
0x32, /* 00110010 */ |
0x78, /* 01111000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 12 0x0c '^L' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 13 0x0d '^M' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3f, /* 00111111 */ |
0x33, /* 00110011 */ |
0x3f, /* 00111111 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x70, /* 01110000 */ |
0xf0, /* 11110000 */ |
0xe0, /* 11100000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 14 0x0e '^N' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7f, /* 01111111 */ |
0x63, /* 01100011 */ |
0x7f, /* 01111111 */ |
0x63, /* 01100011 */ |
0x63, /* 01100011 */ |
0x63, /* 01100011 */ |
0x63, /* 01100011 */ |
0x67, /* 01100111 */ |
0xe7, /* 11100111 */ |
0xe6, /* 11100110 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 15 0x0f '^O' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xdb, /* 11011011 */ |
0x3c, /* 00111100 */ |
0xe7, /* 11100111 */ |
0x3c, /* 00111100 */ |
0xdb, /* 11011011 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 16 0x10 '^P' */ |
0x00, /* 00000000 */ |
0x80, /* 10000000 */ |
0xc0, /* 11000000 */ |
0xe0, /* 11100000 */ |
0xf0, /* 11110000 */ |
0xf8, /* 11111000 */ |
0xfe, /* 11111110 */ |
0xf8, /* 11111000 */ |
0xf0, /* 11110000 */ |
0xe0, /* 11100000 */ |
0xc0, /* 11000000 */ |
0x80, /* 10000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 17 0x11 '^Q' */ |
0x00, /* 00000000 */ |
0x02, /* 00000010 */ |
0x06, /* 00000110 */ |
0x0e, /* 00001110 */ |
0x1e, /* 00011110 */ |
0x3e, /* 00111110 */ |
0xfe, /* 11111110 */ |
0x3e, /* 00111110 */ |
0x1e, /* 00011110 */ |
0x0e, /* 00001110 */ |
0x06, /* 00000110 */ |
0x02, /* 00000010 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 18 0x12 '^R' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 19 0x13 '^S' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 20 0x14 '^T' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7f, /* 01111111 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0x7b, /* 01111011 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 21 0x15 '^U' */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0x60, /* 01100000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x0c, /* 00001100 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 22 0x16 '^V' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 23 0x17 '^W' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 24 0x18 '^X' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 25 0x19 '^Y' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 26 0x1a '^Z' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0xfe, /* 11111110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 27 0x1b '^[' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xfe, /* 11111110 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 28 0x1c '^\' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 29 0x1d '^]' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x28, /* 00101000 */ |
0x6c, /* 01101100 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x28, /* 00101000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 30 0x1e '^^' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x7c, /* 01111100 */ |
0x7c, /* 01111100 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 31 0x1f '^_' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0x7c, /* 01111100 */ |
0x7c, /* 01111100 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 32 0x20 ' ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 33 0x21 '!' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 34 0x22 '"' */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x24, /* 00100100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 35 0x23 '#' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 36 0x24 '$' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc2, /* 11000010 */ |
0xc0, /* 11000000 */ |
0x7c, /* 01111100 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x86, /* 10000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 37 0x25 '%' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc2, /* 11000010 */ |
0xc6, /* 11000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc6, /* 11000110 */ |
0x86, /* 10000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 38 0x26 '&' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 39 0x27 ''' */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 40 0x28 '(' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 41 0x29 ')' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 42 0x2a '*' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0xff, /* 11111111 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 43 0x2b '+' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 44 0x2c ',' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 45 0x2d '-' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 46 0x2e '.' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 47 0x2f '/' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x02, /* 00000010 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0x80, /* 10000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 48 0x30 '0' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 49 0x31 '1' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x38, /* 00111000 */ |
0x78, /* 01111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 50 0x32 '2' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 51 0x33 '3' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x3c, /* 00111100 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 52 0x34 '4' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x1c, /* 00011100 */ |
0x3c, /* 00111100 */ |
0x6c, /* 01101100 */ |
0xcc, /* 11001100 */ |
0xfe, /* 11111110 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x1e, /* 00011110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 53 0x35 '5' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xfc, /* 11111100 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 54 0x36 '6' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xfc, /* 11111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 55 0x37 '7' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 56 0x38 '8' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 57 0x39 '9' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7e, /* 01111110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 58 0x3a ':' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 59 0x3b ';' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 60 0x3c '<' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x06, /* 00000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 61 0x3d '=' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 62 0x3e '>' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 63 0x3f '?' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 64 0x40 '@' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xde, /* 11011110 */ |
0xde, /* 11011110 */ |
0xde, /* 11011110 */ |
0xdc, /* 11011100 */ |
0xc0, /* 11000000 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 65 0x41 'A' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 66 0x42 'B' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfc, /* 11111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0xfc, /* 11111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 67 0x43 'C' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0xc2, /* 11000010 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc2, /* 11000010 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 68 0x44 'D' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xf8, /* 11111000 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0xf8, /* 11111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 69 0x45 'E' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x66, /* 01100110 */ |
0x62, /* 01100010 */ |
0x68, /* 01101000 */ |
0x78, /* 01111000 */ |
0x68, /* 01101000 */ |
0x60, /* 01100000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 70 0x46 'F' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x66, /* 01100110 */ |
0x62, /* 01100010 */ |
0x68, /* 01101000 */ |
0x78, /* 01111000 */ |
0x68, /* 01101000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 71 0x47 'G' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0xc2, /* 11000010 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xde, /* 11011110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x66, /* 01100110 */ |
0x3a, /* 00111010 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 72 0x48 'H' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 73 0x49 'I' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 74 0x4a 'J' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1e, /* 00011110 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 75 0x4b 'K' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xe6, /* 11100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0x78, /* 01111000 */ |
0x78, /* 01111000 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0xe6, /* 11100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 76 0x4c 'L' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xf0, /* 11110000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 77 0x4d 'M' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xee, /* 11101110 */ |
0xfe, /* 11111110 */ |
0xfe, /* 11111110 */ |
0xd6, /* 11010110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 78 0x4e 'N' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xe6, /* 11100110 */ |
0xf6, /* 11110110 */ |
0xfe, /* 11111110 */ |
0xde, /* 11011110 */ |
0xce, /* 11001110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 79 0x4f 'O' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 80 0x50 'P' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfc, /* 11111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 81 0x51 'Q' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xd6, /* 11010110 */ |
0xde, /* 11011110 */ |
0x7c, /* 01111100 */ |
0x0c, /* 00001100 */ |
0x0e, /* 00001110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 82 0x52 'R' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfc, /* 11111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0xe6, /* 11100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 83 0x53 'S' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x60, /* 01100000 */ |
0x38, /* 00111000 */ |
0x0c, /* 00001100 */ |
0x06, /* 00000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 84 0x54 'T' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x5a, /* 01011010 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 85 0x55 'U' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 86 0x56 'V' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 87 0x57 'W' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xfe, /* 11111110 */ |
0xee, /* 11101110 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 88 0x58 'X' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x7c, /* 01111100 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x7c, /* 01111100 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 89 0x59 'Y' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 90 0x5a 'Z' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0x86, /* 10000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc2, /* 11000010 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 91 0x5b '[' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 92 0x5c '\' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x80, /* 10000000 */ |
0xc0, /* 11000000 */ |
0xe0, /* 11100000 */ |
0x70, /* 01110000 */ |
0x38, /* 00111000 */ |
0x1c, /* 00011100 */ |
0x0e, /* 00001110 */ |
0x06, /* 00000110 */ |
0x02, /* 00000010 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 93 0x5d ']' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 94 0x5e '^' */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 95 0x5f '_' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 96 0x60 '`' */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 97 0x61 'a' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 98 0x62 'b' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xe0, /* 11100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x78, /* 01111000 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 99 0x63 'c' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 100 0x64 'd' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1c, /* 00011100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x3c, /* 00111100 */ |
0x6c, /* 01101100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 101 0x65 'e' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 102 0x66 'f' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1c, /* 00011100 */ |
0x36, /* 00110110 */ |
0x32, /* 00110010 */ |
0x30, /* 00110000 */ |
0x78, /* 01111000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 103 0x67 'g' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x7c, /* 01111100 */ |
0x0c, /* 00001100 */ |
0xcc, /* 11001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
/* 104 0x68 'h' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xe0, /* 11100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x6c, /* 01101100 */ |
0x76, /* 01110110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0xe6, /* 11100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 105 0x69 'i' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 106 0x6a 'j' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x00, /* 00000000 */ |
0x0e, /* 00001110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
/* 107 0x6b 'k' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xe0, /* 11100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0x78, /* 01111000 */ |
0x78, /* 01111000 */ |
0x6c, /* 01101100 */ |
0x66, /* 01100110 */ |
0xe6, /* 11100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 108 0x6c 'l' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 109 0x6d 'm' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xec, /* 11101100 */ |
0xfe, /* 11111110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 110 0x6e 'n' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xdc, /* 11011100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 111 0x6f 'o' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 112 0x70 'p' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xdc, /* 11011100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x00, /* 00000000 */ |
/* 113 0x71 'q' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x7c, /* 01111100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x1e, /* 00011110 */ |
0x00, /* 00000000 */ |
/* 114 0x72 'r' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xdc, /* 11011100 */ |
0x76, /* 01110110 */ |
0x66, /* 01100110 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 115 0x73 's' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0x60, /* 01100000 */ |
0x38, /* 00111000 */ |
0x0c, /* 00001100 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 116 0x74 't' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0xfc, /* 11111100 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x36, /* 00110110 */ |
0x1c, /* 00011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 117 0x75 'u' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 118 0x76 'v' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 119 0x77 'w' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xd6, /* 11010110 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 120 0x78 'x' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 121 0x79 'y' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7e, /* 01111110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0xf8, /* 11111000 */ |
0x00, /* 00000000 */ |
/* 122 0x7a 'z' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xcc, /* 11001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 123 0x7b '{' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0e, /* 00001110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x70, /* 01110000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x0e, /* 00001110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 124 0x7c '|' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 125 0x7d '}' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x70, /* 01110000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x0e, /* 00001110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 126 0x7e '~' */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 127 0x7f '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 128 0x80 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0xc2, /* 11000010 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc2, /* 11000010 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 129 0x81 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 130 0x82 '' */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 131 0x83 '' */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 132 0x84 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 133 0x85 ' ' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 134 0x86 '' */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 135 0x87 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x18, /* 00011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 136 0x88 '' */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 137 0x89 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 138 0x8a '' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 139 0x8b '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 140 0x8c '' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 141 0x8d '' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 142 0x8e '' */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 143 0x8f '' */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 144 0x90 '' */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x66, /* 01100110 */ |
0x62, /* 01100010 */ |
0x68, /* 01101000 */ |
0x78, /* 01111000 */ |
0x68, /* 01101000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 145 0x91 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xec, /* 11101100 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x7e, /* 01111110 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0x6e, /* 01101110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 146 0x92 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3e, /* 00111110 */ |
0x6c, /* 01101100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xfe, /* 11111110 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xce, /* 11001110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 147 0x93 '' */ |
0x00, /* 00000000 */ |
0x10, /* 00010000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 148 0x94 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 149 0x95 '' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 150 0x96 '' */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x78, /* 01111000 */ |
0xcc, /* 11001100 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 151 0x97 '' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 152 0x98 '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7e, /* 01111110 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x78, /* 01111000 */ |
0x00, /* 00000000 */ |
/* 153 0x99 '' */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 154 0x9a '' */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 155 0x9b '' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 156 0x9c '' */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x64, /* 01100100 */ |
0x60, /* 01100000 */ |
0xf0, /* 11110000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xe6, /* 11100110 */ |
0xfc, /* 11111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 157 0x9d '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 158 0x9e '' */ |
0x00, /* 00000000 */ |
0xf8, /* 11111000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xf8, /* 11111000 */ |
0xc4, /* 11000100 */ |
0xcc, /* 11001100 */ |
0xde, /* 11011110 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 159 0x9f '' */ |
0x00, /* 00000000 */ |
0x0e, /* 00001110 */ |
0x1b, /* 00011011 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xd8, /* 11011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 160 0xa0 ' ' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0x0c, /* 00001100 */ |
0x7c, /* 01111100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 161 0xa1 '¡' */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 162 0xa2 '¢' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 163 0xa3 '£' */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x00, /* 00000000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 164 0xa4 '¤' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0xdc, /* 11011100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 165 0xa5 '¥' */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0xc6, /* 11000110 */ |
0xe6, /* 11100110 */ |
0xf6, /* 11110110 */ |
0xfe, /* 11111110 */ |
0xde, /* 11011110 */ |
0xce, /* 11001110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 166 0xa6 '¦' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x3e, /* 00111110 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 167 0xa7 '§' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 168 0xa8 '¨' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x7c, /* 01111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 169 0xa9 '©' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 170 0xaa 'ª' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 171 0xab '«' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0xe0, /* 11100000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xdc, /* 11011100 */ |
0x86, /* 10000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x3e, /* 00111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 172 0xac '¬' */ |
0x00, /* 00000000 */ |
0x60, /* 01100000 */ |
0xe0, /* 11100000 */ |
0x62, /* 01100010 */ |
0x66, /* 01100110 */ |
0x6c, /* 01101100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x66, /* 01100110 */ |
0xce, /* 11001110 */ |
0x9a, /* 10011010 */ |
0x3f, /* 00111111 */ |
0x06, /* 00000110 */ |
0x06, /* 00000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 173 0xad '' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 174 0xae '®' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x36, /* 00110110 */ |
0x6c, /* 01101100 */ |
0xd8, /* 11011000 */ |
0x6c, /* 01101100 */ |
0x36, /* 00110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 175 0xaf '¯' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xd8, /* 11011000 */ |
0x6c, /* 01101100 */ |
0x36, /* 00110110 */ |
0x6c, /* 01101100 */ |
0xd8, /* 11011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 176 0xb0 '°' */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
0x11, /* 00010001 */ |
0x44, /* 01000100 */ |
/* 177 0xb1 '±' */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
0x55, /* 01010101 */ |
0xaa, /* 10101010 */ |
/* 178 0xb2 '²' */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
0xdd, /* 11011101 */ |
0x77, /* 01110111 */ |
/* 179 0xb3 '³' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 180 0xb4 '´' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 181 0xb5 'µ' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 182 0xb6 '¶' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf6, /* 11110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 183 0xb7 '·' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 184 0xb8 '¸' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 185 0xb9 '¹' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf6, /* 11110110 */ |
0x06, /* 00000110 */ |
0xf6, /* 11110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 186 0xba 'º' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 187 0xbb '»' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x06, /* 00000110 */ |
0xf6, /* 11110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 188 0xbc '¼' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf6, /* 11110110 */ |
0x06, /* 00000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 189 0xbd '½' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 190 0xbe '¾' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 191 0xbf '¿' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xf8, /* 11111000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 192 0xc0 'À' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 193 0xc1 'Á' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 194 0xc2 'Â' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 195 0xc3 'Ã' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 196 0xc4 'Ä' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 197 0xc5 'Å' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 198 0xc6 'Æ' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 199 0xc7 'Ç' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x37, /* 00110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 200 0xc8 'È' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x37, /* 00110111 */ |
0x30, /* 00110000 */ |
0x3f, /* 00111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 201 0xc9 'É' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3f, /* 00111111 */ |
0x30, /* 00110000 */ |
0x37, /* 00110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 202 0xca 'Ê' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf7, /* 11110111 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 203 0xcb 'Ë' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0xf7, /* 11110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 204 0xcc 'Ì' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x37, /* 00110111 */ |
0x30, /* 00110000 */ |
0x37, /* 00110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 205 0xcd 'Í' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 206 0xce 'Î' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xf7, /* 11110111 */ |
0x00, /* 00000000 */ |
0xf7, /* 11110111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 207 0xcf 'Ï' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 208 0xd0 'Ð' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 209 0xd1 'Ñ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 210 0xd2 'Ò' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 211 0xd3 'Ó' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x3f, /* 00111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 212 0xd4 'Ô' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 213 0xd5 'Õ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 214 0xd6 'Ö' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x3f, /* 00111111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 215 0xd7 '×' */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0xff, /* 11111111 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
/* 216 0xd8 'Ø' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0xff, /* 11111111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 217 0xd9 'Ù' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xf8, /* 11111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 218 0xda 'Ú' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1f, /* 00011111 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 219 0xdb 'Û' */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
/* 220 0xdc 'Ü' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
/* 221 0xdd 'Ý' */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
0xf0, /* 11110000 */ |
/* 222 0xde 'Þ' */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
0x0f, /* 00001111 */ |
/* 223 0xdf 'ß' */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0xff, /* 11111111 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 224 0xe0 'à' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xdc, /* 11011100 */ |
0x76, /* 01110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 225 0xe1 'á' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x78, /* 01111000 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xcc, /* 11001100 */ |
0xd8, /* 11011000 */ |
0xcc, /* 11001100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xcc, /* 11001100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 226 0xe2 'â' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 227 0xe3 'ã' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 228 0xe4 'ä' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 229 0xe5 'å' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 230 0xe6 'æ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x7c, /* 01111100 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
/* 231 0xe7 'ç' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 232 0xe8 'è' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 233 0xe9 'é' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xfe, /* 11111110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 234 0xea 'ê' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0xee, /* 11101110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 235 0xeb 'ë' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1e, /* 00011110 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x3e, /* 00111110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x66, /* 01100110 */ |
0x3c, /* 00111100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 236 0xec 'ì' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 237 0xed 'í' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x03, /* 00000011 */ |
0x06, /* 00000110 */ |
0x7e, /* 01111110 */ |
0xdb, /* 11011011 */ |
0xdb, /* 11011011 */ |
0xf3, /* 11110011 */ |
0x7e, /* 01111110 */ |
0x60, /* 01100000 */ |
0xc0, /* 11000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 238 0xee 'î' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x1c, /* 00011100 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x7c, /* 01111100 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x1c, /* 00011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 239 0xef 'ï' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7c, /* 01111100 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0xc6, /* 11000110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 240 0xf0 'ð' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0xfe, /* 11111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 241 0xf1 'ñ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x7e, /* 01111110 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 242 0xf2 'ò' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x06, /* 00000110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 243 0xf3 'ó' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x30, /* 00110000 */ |
0x60, /* 01100000 */ |
0x30, /* 00110000 */ |
0x18, /* 00011000 */ |
0x0c, /* 00001100 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 244 0xf4 'ô' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x0e, /* 00001110 */ |
0x1b, /* 00011011 */ |
0x1b, /* 00011011 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
/* 245 0xf5 'õ' */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0xd8, /* 11011000 */ |
0x70, /* 01110000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 246 0xf6 'ö' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 247 0xf7 '÷' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0x76, /* 01110110 */ |
0xdc, /* 11011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 248 0xf8 'ø' */ |
0x00, /* 00000000 */ |
0x38, /* 00111000 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x38, /* 00111000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 249 0xf9 'ù' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 250 0xfa 'ú' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x18, /* 00011000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 251 0xfb 'û' */ |
0x00, /* 00000000 */ |
0x0f, /* 00001111 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0x0c, /* 00001100 */ |
0xec, /* 11101100 */ |
0x6c, /* 01101100 */ |
0x6c, /* 01101100 */ |
0x3c, /* 00111100 */ |
0x1c, /* 00011100 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 252 0xfc 'ü' */ |
0x00, /* 00000000 */ |
0x6c, /* 01101100 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x36, /* 00110110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 253 0xfd 'ý' */ |
0x00, /* 00000000 */ |
0x3c, /* 00111100 */ |
0x66, /* 01100110 */ |
0x0c, /* 00001100 */ |
0x18, /* 00011000 */ |
0x32, /* 00110010 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 254 0xfe 'þ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x7e, /* 01111110 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
/* 255 0xff 'ÿ' */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
0x00, /* 00000000 */ |
}; |
/** @} |
*/ |
//branches/tracing/uspace/srv/fb/font-8x16.h |
---|
26,12 → 26,25 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#ifndef FB_FONT_8X16_H_ |
#define FB_FONT_8X16_H_ |
/** @addtogroup genarch |
* @{ |
*/ |
/** @file |
*/ |
#define FONT_GLIPHS 256 |
#define FONT_SCANLINES 16 |
#ifndef FONT_8X16_H_ |
#define FONT_8X16_H_ |
extern unsigned char fb_font[FONT_GLIPHS * FONT_SCANLINES]; |
#define FONT_GLYPHS 2899 |
#define FONT_WIDTH 8 |
#define FONT_SCANLINES 16 |
#include <sys/types.h> |
extern uint16_t fb_font_glyph(const wchar_t ch); |
extern uint8_t fb_font[FONT_GLYPHS][FONT_SCANLINES]; |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/srv/fb/main.c |
---|
38,6 → 38,7 |
#include "fb.h" |
#include "ega.h" |
#include "msim.h" |
#include "ski.h" |
#include "sgcn.h" |
#include "main.h" |
46,7 → 47,7 |
void receive_comm_area(ipc_callid_t callid, ipc_call_t *call, void **area) |
{ |
void *dest; |
dest = as_get_mappable_page(IPC_GET_ARG2(*call)); |
if (ipc_answer_1(callid, EOK, (sysarg_t) dest) == 0) { |
if (*area) |
61,12 → 62,12 |
ipcarg_t phonead; |
bool initialized = false; |
#ifdef FB_ENABLED |
if (sysinfo_value("fb.kind") == 1) { |
if (fb_init() == 0) |
initialized = true; |
} |
} |
#endif |
#ifdef EGA_ENABLED |
if ((!initialized) && (sysinfo_value("fb.kind") == 2)) { |
86,15 → 87,22 |
initialized = true; |
} |
#endif |
#ifdef SKI_ENABLED |
if ((!initialized) && (sysinfo_value("fb") != true)) { |
if (ski_init() == 0) |
initialized = true; |
} |
#endif |
if (!initialized) |
return -1; |
if (ipc_connect_to_me(PHONE_NS, SERVICE_VIDEO, 0, 0, &phonead) != 0) |
return -1; |
printf(NAME ": Accepting connections\n"); |
async_manager(); |
/* Never reached */ |
return 0; |
} |
//branches/tracing/uspace/srv/fb/ski.c |
---|
0,0 → 1,84 |
/* |
* Copyright (c) 2005 Jakub Jermar |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @defgroup msimfb MSIM text console |
* @brief HelenOS MSIM text console. |
* @ingroup fbs |
* @{ |
*/ |
/** @file |
*/ |
#include <async.h> |
#include <libc.h> |
#include <sysinfo.h> |
#include <as.h> |
#include <ddi.h> |
#include "serial_console.h" |
#include "ski.h" |
#define SKI_PUTCHAR 31 |
#define WIDTH 80 |
#define HEIGHT 24 |
/** Display character on ski debug console |
* |
* Use SSC (Simulator System Call) to |
* display character on debug console. |
* |
* @param ch Character to be printed. |
*/ |
static void ski_putc(const char ch) |
{ |
asm volatile ( |
"mov r15 = %0\n" |
"mov r32 = %1\n" /* r32 is in0 */ |
"break 0x80000\n" /* modifies r8 */ |
: |
: "i" (SKI_PUTCHAR), "r" (ch) |
: "r15", "in0", "r8" |
); |
if (ch == '\n') |
ski_putc('\r'); |
} |
int ski_init(void) |
{ |
serial_console_init(ski_putc, WIDTH, HEIGHT); |
async_set_client_connection(serial_client_connection); |
return 0; |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/fb/fb.c |
---|
1,4 → 1,5 |
/* |
* Copyright (c) 2008 Martin Decky |
* Copyright (c) 2006 Jakub Vana |
* Copyright (c) 2006 Ondrej Palkovsky |
* All rights reserved. |
29,10 → 30,10 |
/** |
* @defgroup fb Graphical framebuffer |
* @brief HelenOS graphical framebuffer. |
* @brief HelenOS graphical framebuffer. |
* @ingroup fbs |
* @{ |
*/ |
*/ |
/** @file |
*/ |
50,6 → 51,8 |
#include <ipc/services.h> |
#include <kernel/errno.h> |
#include <kernel/genarch/fb/visuals.h> |
#include <console/color.h> |
#include <console/style.h> |
#include <async.h> |
#include <bool.h> |
62,575 → 65,848 |
#include "pointer.xbm" |
#include "pointer_mask.xbm" |
#define DEFAULT_BGCOLOR 0xf0f0f0 |
#define DEFAULT_FGCOLOR 0x0 |
#define DEFAULT_BGCOLOR 0xf0f0f0 |
#define DEFAULT_FGCOLOR 0x000000 |
/***************************************************************/ |
/* Pixel specific fuctions */ |
#define GLYPH_UNAVAIL '?' |
typedef void (*conv2scr_fn_t)(void *, int); |
typedef int (*conv2rgb_fn_t)(void *); |
#define MAX_ANIM_LEN 8 |
#define MAX_ANIMATIONS 4 |
#define MAX_PIXMAPS 256 /**< Maximum number of saved pixmaps */ |
#define MAX_VIEWPORTS 128 /**< Viewport is a rectangular area on the screen */ |
/** Function to render a pixel from a RGB value. */ |
typedef void (*rgb_conv_t)(void *, uint32_t); |
/** Function to render a bit mask. */ |
typedef void (*mask_conv_t)(void *, bool); |
/** Function to draw a glyph. */ |
typedef void (*dg_t)(unsigned int x, unsigned int y, bool cursor, |
uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color); |
struct { |
uint8_t *fbaddress; |
uint8_t *fb_addr; |
unsigned int xres; |
unsigned int yres; |
unsigned int scanline; |
unsigned int glyphscanline; |
unsigned int pixelbytes; |
unsigned int invert_colors; |
conv2scr_fn_t rgb2scr; |
conv2rgb_fn_t scr2rgb; |
unsigned int glyphbytes; |
/** Pre-rendered mask for rendering glyphs. Specific for the visual. */ |
uint8_t *glyphs; |
rgb_conv_t rgb_conv; |
mask_conv_t mask_conv; |
} screen; |
/** Backbuffer character cell. */ |
typedef struct { |
int initialized; |
unsigned int x, y; |
unsigned int width, height; |
uint32_t glyph; |
uint32_t fg_color; |
uint32_t bg_color; |
} bb_cell_t; |
typedef struct { |
bool initialized; |
unsigned int x; |
unsigned int y; |
unsigned int width; |
unsigned int height; |
/* Text support in window */ |
unsigned int rows, cols; |
/* Style for text printing */ |
style_t style; |
unsigned int cols; |
unsigned int rows; |
/* |
* Style and glyphs for text printing |
*/ |
/** Current attributes. */ |
attr_rgb_t attr; |
uint8_t *bgpixel; |
/** |
* Glyph drawing function for this viewport. Different viewports |
* might use different drawing functions depending on whether their |
* scanlines are aligned on a word boundary. |
*/ |
dg_t dglyph; |
/* Auto-cursor position */ |
int cursor_active, cur_col, cur_row; |
int cursor_shown; |
/* Double buffering */ |
uint8_t *dbdata; |
unsigned int dboffset; |
unsigned int paused; |
bool cursor_active; |
unsigned int cur_col; |
unsigned int cur_row; |
bool cursor_shown; |
/* Back buffer */ |
bb_cell_t *backbuf; |
unsigned int bbsize; |
} viewport_t; |
#define MAX_ANIM_LEN 8 |
#define MAX_ANIMATIONS 4 |
typedef struct { |
int initialized; |
int enabled; |
bool initialized; |
bool enabled; |
unsigned int vp; |
unsigned int pos; |
unsigned int animlen; |
unsigned int pixmaps[MAX_ANIM_LEN]; |
} animation_t; |
static animation_t animations[MAX_ANIMATIONS]; |
static int anims_enabled; |
static bool anims_enabled; |
/** Maximum number of saved pixmaps |
* Pixmap is a saved rectangle |
*/ |
#define MAX_PIXMAPS 256 |
typedef struct { |
unsigned int width; |
unsigned int height; |
uint8_t *data; |
} pixmap_t; |
static pixmap_t pixmaps[MAX_PIXMAPS]; |
/* Viewport is a rectangular area on the screen */ |
#define MAX_VIEWPORTS 128 |
static viewport_t viewports[128]; |
/* Allow only 1 connection */ |
static int client_connected = 0; |
static bool client_connected = false; /**< Allow only 1 connection */ |
#define RED(x, bits) ((x >> (16 + 8 - bits)) & ((1 << bits) - 1)) |
#define GREEN(x, bits) ((x >> (8 + 8 - bits)) & ((1 << bits) - 1)) |
#define BLUE(x, bits) ((x >> (8 - bits)) & ((1 << bits) - 1)) |
static uint32_t color_table[16] = { |
[COLOR_BLACK] = 0x000000, |
[COLOR_BLUE] = 0x0000f0, |
[COLOR_GREEN] = 0x00f000, |
[COLOR_CYAN] = 0x00f0f0, |
[COLOR_RED] = 0xf00000, |
[COLOR_MAGENTA] = 0xf000f0, |
[COLOR_YELLOW] = 0xf0f000, |
[COLOR_WHITE] = 0xf0f0f0, |
[8 + COLOR_BLACK] = 0x000000, |
[8 + COLOR_BLUE] = 0x0000ff, |
[8 + COLOR_GREEN] = 0x00ff00, |
[8 + COLOR_CYAN] = 0x00ffff, |
[8 + COLOR_RED] = 0xff0000, |
[8 + COLOR_MAGENTA] = 0xff00ff, |
[8 + COLOR_YELLOW] = 0xffff00, |
[8 + COLOR_WHITE] = 0xffffff, |
}; |
#define COL_WIDTH 8 |
#define ROW_BYTES (screen.scanline * FONT_SCANLINES) |
static int rgb_from_attr(attr_rgb_t *rgb, const attrs_t *a); |
static int rgb_from_style(attr_rgb_t *rgb, int style); |
static int rgb_from_idx(attr_rgb_t *rgb, ipcarg_t fg_color, |
ipcarg_t bg_color, ipcarg_t flags); |
#define POINTPOS(x, y) ((y) * screen.scanline + (x) * screen.pixelbytes) |
static int fb_set_color(viewport_t *vport, ipcarg_t fg_color, |
ipcarg_t bg_color, ipcarg_t attr); |
static inline int COLOR(int color) |
{ |
return screen.invert_colors ? ~color : color; |
} |
static void draw_glyph_aligned(unsigned int x, unsigned int y, bool cursor, |
uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color); |
static void draw_glyph_fallback(unsigned int x, unsigned int y, bool cursor, |
uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color); |
/* Conversion routines between different color representations */ |
static void |
rgb_byte0888(void *dst, int rgb) |
{ |
*(int *)dst = rgb; |
} |
static void draw_vp_glyph(viewport_t *vport, bool cursor, unsigned int col, |
unsigned int row); |
static int |
byte0888_rgb(void *src) |
{ |
return (*(int *)src) & 0xffffff; |
} |
static void |
bgr_byte0888(void *dst, int rgb) |
{ |
*((uint32_t *) dst) = BLUE(rgb, 8) << 16 | GREEN(rgb, 8) << 8 | |
RED(rgb, 8); |
} |
#define RED(x, bits) ((x >> (8 + 8 + 8 - bits)) & ((1 << bits) - 1)) |
#define GREEN(x, bits) ((x >> (8 + 8 - bits)) & ((1 << bits) - 1)) |
#define BLUE(x, bits) ((x >> (8 - bits)) & ((1 << bits) - 1)) |
static int |
byte0888_bgr(void *src) |
{ |
int color = *(uint32_t *)(src); |
return ((color & 0xff) << 16) | (((color >> 8) & 0xff) << 8) | |
((color >> 16) & 0xff); |
} |
#define COL2X(col) ((col) * FONT_WIDTH) |
#define ROW2Y(row) ((row) * FONT_SCANLINES) |
static void |
rgb_byte888(void *dst, int rgb) |
#define X2COL(x) ((x) / FONT_WIDTH) |
#define Y2ROW(y) ((y) / FONT_SCANLINES) |
#define FB_POS(x, y) ((y) * screen.scanline + (x) * screen.pixelbytes) |
#define BB_POS(vport, col, row) ((row) * vport->cols + (col)) |
#define GLYPH_POS(glyph, y, cursor) (((glyph) + (cursor) * FONT_GLYPHS) * screen.glyphbytes + (y) * screen.glyphscanline) |
/** ARGB 8:8:8:8 conversion |
* |
*/ |
static void rgb_0888(void *dst, uint32_t rgb) |
{ |
uint8_t *scr = dst; |
#if defined(FB_INVERT_ENDIAN) |
scr[0] = RED(rgb, 8); |
scr[1] = GREEN(rgb, 8); |
scr[2] = BLUE(rgb, 8); |
#else |
scr[2] = RED(rgb, 8); |
scr[1] = GREEN(rgb, 8); |
scr[0] = BLUE(rgb, 8); |
#endif |
*((uint32_t *) dst) = rgb & 0x00ffffff; |
} |
static int |
byte888_rgb(void *src) |
static void mask_0888(void *dst, bool mask) |
{ |
uint8_t *scr = src; |
#if defined(FB_INVERT_ENDIAN) |
return scr[0] << 16 | scr[1] << 8 | scr[2]; |
#else |
return scr[2] << 16 | scr[1] << 8 | scr[0]; |
#endif |
*((uint32_t *) dst) = (mask ? 0x00ffffff : 0); |
} |
/** 16-bit depth (5:5:5) */ |
static void |
rgb_byte555(void *dst, int rgb) |
/** ABGR 8:8:8:8 conversion |
* |
*/ |
static void bgr_0888(void *dst, uint32_t rgb) |
{ |
/* 5-bit, 5-bits, 5-bits */ |
*((uint16_t *)(dst)) = RED(rgb, 5) << 10 | GREEN(rgb, 5) << 5 | |
BLUE(rgb, 5); |
*((uint32_t *) dst) |
= (BLUE(rgb, 8) << 16) | (GREEN(rgb, 8) << 8) | RED(rgb, 8); |
} |
/** 16-bit depth (5:5:5) */ |
static int |
byte555_rgb(void *src) |
/** RGB 8:8:8 conversion |
* |
*/ |
static void rgb_888(void *dst, uint32_t rgb) |
{ |
int color = *(uint16_t *)(src); |
return (((color >> 10) & 0x1f) << (16 + 3)) | |
(((color >> 5) & 0x1f) << (8 + 3)) | ((color & 0x1f) << 3); |
((uint8_t *) dst)[0] = BLUE(rgb, 8); |
((uint8_t *) dst)[1] = GREEN(rgb, 8); |
((uint8_t *) dst)[2] = RED(rgb, 8); |
} |
/** 16-bit depth (5:6:5) */ |
static void |
rgb_byte565(void *dst, int rgb) |
static void mask_888(void *dst, bool mask) |
{ |
/* 5-bit, 6-bits, 5-bits */ |
*((uint16_t *)(dst)) = RED(rgb, 5) << 11 | GREEN(rgb, 6) << 5 | |
BLUE(rgb, 5); |
if (mask) { |
((uint8_t *) dst)[0] = 0xff; |
((uint8_t *) dst)[1] = 0xff; |
((uint8_t *) dst)[2] = 0xff; |
} else { |
((uint8_t *) dst)[0] = 0; |
((uint8_t *) dst)[1] = 0; |
((uint8_t *) dst)[2] = 0; |
} |
} |
/** 16-bit depth (5:6:5) */ |
static int |
byte565_rgb(void *src) |
/** BGR 8:8:8 conversion |
* |
*/ |
static void bgr_888(void *dst, uint32_t rgb) |
{ |
int color = *(uint16_t *)(src); |
return (((color >> 11) & 0x1f) << (16 + 3)) | |
(((color >> 5) & 0x3f) << (8 + 2)) | ((color & 0x1f) << 3); |
((uint8_t *) dst)[0] = RED(rgb, 8); |
((uint8_t *) dst)[1] = GREEN(rgb, 8); |
((uint8_t *) dst)[2] = BLUE(rgb, 8); |
} |
/** Put pixel - 8-bit depth (3:2:3) */ |
static void |
rgb_byte8(void *dst, int rgb) |
/** RGB 5:5:5 conversion |
* |
*/ |
static void rgb_555(void *dst, uint32_t rgb) |
{ |
*(uint8_t *)dst = RED(rgb, 3) << 5 | GREEN(rgb, 2) << 3 | BLUE(rgb, 3); |
*((uint16_t *) dst) |
= (RED(rgb, 5) << 10) | (GREEN(rgb, 5) << 5) | BLUE(rgb, 5); |
} |
/** Return pixel color - 8-bit depth (3:2:3) */ |
static int |
byte8_rgb(void *src) |
static void mask_555(void *dst, bool mask) |
{ |
int color = *(uint8_t *)src; |
return (((color >> 5) & 0x7) << (16 + 5)) | |
(((color >> 3) & 0x3) << (8 + 6)) | ((color & 0x7) << 5); |
*((uint16_t *) dst) = (mask ? 0x7fff : 0); |
} |
/** Put pixel into viewport |
/** RGB 5:6:5 conversion |
* |
* @param vport Viewport identification |
* @param x X coord relative to viewport |
* @param y Y coord relative to viewport |
* @param color RGB color |
*/ |
static void |
putpixel(viewport_t *vport, unsigned int x, unsigned int y, int color) |
static void rgb_565(void *dst, uint32_t rgb) |
{ |
int dx = vport->x + x; |
int dy = vport->y + y; |
if (! (vport->paused && vport->dbdata)) |
(*screen.rgb2scr)(&screen.fbaddress[POINTPOS(dx,dy)], |
COLOR(color)); |
if (vport->dbdata) { |
int dline = (y + vport->dboffset) % vport->height; |
int doffset = screen.pixelbytes * (dline * vport->width + x); |
(*screen.rgb2scr)(&vport->dbdata[doffset], COLOR(color)); |
} |
*((uint16_t *) dst) |
= (RED(rgb, 5) << 11) | (GREEN(rgb, 6) << 5) | BLUE(rgb, 5); |
} |
/** Get pixel from viewport */ |
static int |
getpixel(viewport_t *vport, unsigned int x, unsigned int y) |
static void mask_565(void *dst, bool mask) |
{ |
int dx = vport->x + x; |
int dy = vport->y + y; |
return COLOR((*screen.scr2rgb)(&screen.fbaddress[POINTPOS(dx, dy)])); |
*((uint16_t *) dst) = (mask ? 0xffff : 0); |
} |
static inline void |
putpixel_mem(char *mem, unsigned int x, unsigned int y, int color) |
{ |
(*screen.rgb2scr)(&mem[POINTPOS(x, y)], COLOR(color)); |
} |
static void |
draw_rectangle(viewport_t *vport, unsigned int sx, unsigned int sy, |
unsigned int width, unsigned int height, int color) |
/** RGB 3:2:3 |
* |
*/ |
static void rgb_323(void *dst, uint32_t rgb) |
{ |
unsigned int x, y; |
static void *tmpline; |
if (!tmpline) |
tmpline = malloc(screen.scanline * screen.pixelbytes); |
/* Clear first line */ |
for (x = 0; x < width; x++) |
putpixel_mem(tmpline, x, 0, color); |
if (!vport->paused) { |
/* Recompute to screen coords */ |
sx += vport->x; |
sy += vport->y; |
/* Copy the rest */ |
for (y = sy;y < sy+height; y++) |
memcpy(&screen.fbaddress[POINTPOS(sx,y)], tmpline, |
screen.pixelbytes * width); |
} |
if (vport->dbdata) { |
for (y = sy; y < sy + height; y++) { |
int rline = (y + vport->dboffset) % vport->height; |
int rpos = (rline * vport->width + sx) * |
screen.pixelbytes; |
memcpy(&vport->dbdata[rpos], tmpline, |
screen.pixelbytes * width); |
} |
} |
*((uint8_t *) dst) |
= ~((RED(rgb, 3) << 5) | (GREEN(rgb, 2) << 3) | BLUE(rgb, 3)); |
} |
/** Fill viewport with background color */ |
static void |
clear_port(viewport_t *vport) |
static void mask_323(void *dst, bool mask) |
{ |
draw_rectangle(vport, 0, 0, vport->width, vport->height, |
vport->style.bg_color); |
*((uint8_t *) dst) = (mask ? 0xff : 0); |
} |
/** Scroll unbuffered viewport up/down |
/** Draw a filled rectangle. |
* |
* @param vport Viewport to scroll |
* @param lines Positive number - scroll up, negative - scroll down |
* @note Need real implementation that does not access VRAM twice. |
* |
*/ |
static void |
scroll_port_nodb(viewport_t *vport, int lines) |
static void draw_filled_rect(unsigned int x0, unsigned int y0, unsigned int x1, |
unsigned int y1, uint32_t color) |
{ |
int y; |
if (lines > 0) { |
for (y = vport->y; y < vport->y+vport->height - lines; y++) |
memcpy(&screen.fbaddress[POINTPOS(vport->x,y)], |
&screen.fbaddress[POINTPOS(vport->x,y + lines)], |
screen.pixelbytes * vport->width); |
draw_rectangle(vport, 0, vport->height - lines, vport->width, |
lines, vport->style.bg_color); |
} else if (lines < 0) { |
lines = -lines; |
for (y = vport->y + vport->height-1; y >= vport->y + lines; y--) |
memcpy(&screen.fbaddress[POINTPOS(vport->x,y)], |
&screen.fbaddress[POINTPOS(vport->x,y - lines)], |
screen.pixelbytes * vport->width); |
draw_rectangle(vport, 0, 0, vport->width, lines, |
vport->style.bg_color); |
unsigned int x; |
unsigned int y; |
unsigned int copy_bytes; |
uint8_t *sp; |
uint8_t *dp; |
uint8_t cbuf[4]; |
if ((y0 >= y1) || (x0 >= x1)) |
return; |
screen.rgb_conv(cbuf, color); |
sp = &screen.fb_addr[FB_POS(x0, y0)]; |
dp = sp; |
/* Draw the first line. */ |
for (x = x0; x < x1; x++) { |
memcpy(dp, cbuf, screen.pixelbytes); |
dp += screen.pixelbytes; |
} |
} |
/** Refresh given viewport from double buffer */ |
static void |
refresh_viewport_db(viewport_t *vport) |
{ |
unsigned int y, srcy, srcoff, dsty, dstx; |
for (y = 0; y < vport->height; y++) { |
srcy = (y + vport->dboffset) % vport->height; |
srcoff = (vport->width * srcy) * screen.pixelbytes; |
dstx = vport->x; |
dsty = vport->y + y; |
memcpy(&screen.fbaddress[POINTPOS(dstx,dsty)], |
&vport->dbdata[srcoff], vport->width * screen.pixelbytes); |
dp = sp + screen.scanline; |
copy_bytes = (x1 - x0) * screen.pixelbytes; |
/* Draw the remaining lines by copying. */ |
for (y = y0 + 1; y < y1; y++) { |
memcpy(dp, sp, copy_bytes); |
dp += screen.scanline; |
} |
} |
/** Scroll viewport that has double buffering enabled */ |
static void |
scroll_port_db(viewport_t *vport, int lines) |
/** Redraw viewport. |
* |
* @param vport Viewport to redraw |
* |
*/ |
static void vport_redraw(viewport_t *vport) |
{ |
++vport->paused; |
if (lines > 0) { |
draw_rectangle(vport, 0, 0, vport->width, lines, |
vport->style.bg_color); |
vport->dboffset += lines; |
vport->dboffset %= vport->height; |
} else if (lines < 0) { |
lines = -lines; |
draw_rectangle(vport, 0, vport->height-lines, vport->width, |
lines, vport->style.bg_color); |
if (vport->dboffset < lines) |
vport->dboffset += vport->height; |
vport->dboffset -= lines; |
unsigned int row; |
unsigned int col; |
for (row = 0; row < vport->rows; row++) { |
for (col = 0; col < vport->cols; col++) { |
draw_vp_glyph(vport, false, col, row); |
} |
} |
--vport->paused; |
if (COL2X(vport->cols) < vport->width) { |
draw_filled_rect( |
vport->x + COL2X(vport->cols), vport->y, |
vport->x + vport->width, vport->y + vport->height, |
vport->attr.bg_color); |
} |
refresh_viewport_db(vport); |
if (ROW2Y(vport->rows) < vport->height) { |
draw_filled_rect( |
vport->x, vport->y + ROW2Y(vport->rows), |
vport->x + vport->width, vport->y + vport->height, |
vport->attr.bg_color); |
} |
} |
/** Scrolls viewport given number of lines */ |
static void |
scroll_port(viewport_t *vport, int lines) |
static void backbuf_clear(bb_cell_t *backbuf, size_t len, uint32_t fg_color, |
uint32_t bg_color) |
{ |
if (vport->dbdata) |
scroll_port_db(vport, lines); |
else |
scroll_port_nodb(vport, lines); |
size_t i; |
for (i = 0; i < len; i++) { |
backbuf[i].glyph = 0; |
backbuf[i].fg_color = fg_color; |
backbuf[i].bg_color = bg_color; |
} |
} |
static void |
invert_pixel(viewport_t *vport, unsigned int x, unsigned int y) |
/** Clear viewport. |
* |
* @param vport Viewport to clear |
* |
*/ |
static void vport_clear(viewport_t *vport) |
{ |
putpixel(vport, x, y, ~getpixel(vport, x, y)); |
backbuf_clear(vport->backbuf, vport->cols * vport->rows, |
vport->attr.fg_color, vport->attr.bg_color); |
vport_redraw(vport); |
} |
/***************************************************************/ |
/* Character-console functions */ |
/** Draw character at given position |
/** Scroll viewport by the specified number of lines. |
* |
* @param vport Viewport where the character is printed |
* @param sx Coordinates of top-left of the character |
* @param sy Coordinates of top-left of the character |
* @param style Color of the character |
* @param transparent If false, print background color |
* @param vport Viewport to scroll |
* @param lines Number of lines to scroll |
* |
*/ |
static void |
draw_glyph(viewport_t *vport,uint8_t glyph, unsigned int sx, unsigned int sy, |
style_t style, int transparent) |
static void vport_scroll(viewport_t *vport, int lines) |
{ |
int i; |
unsigned int row; |
unsigned int col; |
unsigned int x; |
unsigned int y; |
unsigned int glline; |
for (y = 0; y < FONT_SCANLINES; y++) { |
glline = fb_font[glyph * FONT_SCANLINES + y]; |
for (i = 0; i < 8; i++) { |
if (glline & (1 << (7 - i))) |
putpixel(vport, sx + i, sy + y, style.fg_color); |
else if (!transparent) |
putpixel(vport, sx + i, sy + y, style.bg_color); |
uint32_t glyph; |
uint32_t fg_color; |
uint32_t bg_color; |
bb_cell_t *bbp; |
bb_cell_t *xbp; |
/* |
* Redraw. |
*/ |
y = vport->y; |
for (row = 0; row < vport->rows; row++) { |
x = vport->x; |
for (col = 0; col < vport->cols; col++) { |
if ((row + lines >= 0) && (row + lines < vport->rows)) { |
xbp = &vport->backbuf[BB_POS(vport, col, row + lines)]; |
bbp = &vport->backbuf[BB_POS(vport, col, row)]; |
glyph = xbp->glyph; |
fg_color = xbp->fg_color; |
bg_color = xbp->bg_color; |
if ((bbp->glyph == glyph) |
&& (bbp->fg_color == xbp->fg_color) |
&& (bbp->bg_color == xbp->bg_color)) { |
x += FONT_WIDTH; |
continue; |
} |
} else { |
glyph = 0; |
fg_color = vport->attr.fg_color; |
bg_color = vport->attr.bg_color; |
} |
(*vport->dglyph)(x, y, false, screen.glyphs, glyph, |
fg_color, bg_color); |
x += FONT_WIDTH; |
} |
y += FONT_SCANLINES; |
} |
/* |
* Scroll backbuffer. |
*/ |
if (lines > 0) { |
memmove(vport->backbuf, vport->backbuf + vport->cols * lines, |
vport->cols * (vport->rows - lines) * sizeof(bb_cell_t)); |
backbuf_clear(&vport->backbuf[BB_POS(vport, 0, vport->rows - lines)], |
vport->cols * lines, vport->attr.fg_color, vport->attr.bg_color); |
} else { |
memmove(vport->backbuf - vport->cols * lines, vport->backbuf, |
vport->cols * (vport->rows + lines) * sizeof(bb_cell_t)); |
backbuf_clear(vport->backbuf, - vport->cols * lines, |
vport->attr.fg_color, vport->attr.bg_color); |
} |
} |
/** Invert character at given position */ |
static void |
invert_char(viewport_t *vport,unsigned int row, unsigned int col) |
/** Render glyphs |
* |
* Convert glyphs from device independent font |
* description to current visual representation. |
* |
*/ |
static void render_glyphs(void) |
{ |
unsigned int x; |
unsigned int y; |
for (x = 0; x < COL_WIDTH; x++) |
for (y = 0; y < FONT_SCANLINES; y++) |
invert_pixel(vport, col * COL_WIDTH + x, row * |
FONT_SCANLINES + y); |
unsigned int glyph; |
for (glyph = 0; glyph < FONT_GLYPHS; glyph++) { |
unsigned int y; |
for (y = 0; y < FONT_SCANLINES; y++) { |
unsigned int x; |
for (x = 0; x < FONT_WIDTH; x++) { |
screen.mask_conv(&screen.glyphs[GLYPH_POS(glyph, y, false) + x * screen.pixelbytes], |
(fb_font[glyph][y] & (1 << (7 - x))) ? true : false); |
screen.mask_conv(&screen.glyphs[GLYPH_POS(glyph, y, true) + x * screen.pixelbytes], |
(fb_font[glyph][y] & (1 << (7 - x))) ? false : true); |
} |
} |
} |
} |
/***************************************************************/ |
/* Stdout specific functions */ |
/** Create new viewport |
* |
* @return New viewport number |
* @param x Origin of the viewport (x). |
* @param y Origin of the viewport (y). |
* @param width Width of the viewport. |
* @param height Height of the viewport. |
* |
* @return New viewport number. |
* |
*/ |
static int |
viewport_create(unsigned int x, unsigned int y,unsigned int width, |
unsigned int height) |
static int vport_create(unsigned int x, unsigned int y, |
unsigned int width, unsigned int height) |
{ |
int i; |
unsigned int i; |
for (i = 0; i < MAX_VIEWPORTS; i++) { |
if (!viewports[i].initialized) |
break; |
} |
if (i == MAX_VIEWPORTS) |
return ELIMIT; |
unsigned int cols = width / FONT_WIDTH; |
unsigned int rows = height / FONT_SCANLINES; |
unsigned int bbsize = cols * rows * sizeof(bb_cell_t); |
unsigned int word_size = sizeof(unsigned long); |
bb_cell_t *backbuf = (bb_cell_t *) malloc(bbsize); |
if (!backbuf) |
return ENOMEM; |
uint8_t *bgpixel = (uint8_t *) malloc(screen.pixelbytes); |
if (!bgpixel) { |
free(backbuf); |
return ENOMEM; |
} |
backbuf_clear(backbuf, cols * rows, DEFAULT_FGCOLOR, DEFAULT_BGCOLOR); |
memset(bgpixel, 0, screen.pixelbytes); |
viewports[i].x = x; |
viewports[i].y = y; |
viewports[i].width = width; |
viewports[i].height = height; |
viewports[i].rows = height / FONT_SCANLINES; |
viewports[i].cols = width / COL_WIDTH; |
viewports[i].style.bg_color = DEFAULT_BGCOLOR; |
viewports[i].style.fg_color = DEFAULT_FGCOLOR; |
viewports[i].cols = cols; |
viewports[i].rows = rows; |
viewports[i].attr.bg_color = DEFAULT_BGCOLOR; |
viewports[i].attr.fg_color = DEFAULT_FGCOLOR; |
viewports[i].bgpixel = bgpixel; |
/* |
* Conditions necessary to select aligned version: |
* - word size is divisible by pixelbytes |
* - cell scanline size is divisible by word size |
* - cell scanlines are word-aligned |
* |
*/ |
if (((word_size % screen.pixelbytes) == 0) |
&& ((FONT_WIDTH * screen.pixelbytes) % word_size == 0) |
&& ((x * screen.pixelbytes) % word_size == 0) |
&& (screen.scanline % word_size == 0)) { |
viewports[i].dglyph = draw_glyph_aligned; |
} else { |
viewports[i].dglyph = draw_glyph_fallback; |
} |
viewports[i].cur_col = 0; |
viewports[i].cur_row = 0; |
viewports[i].cursor_active = 0; |
viewports[i].initialized = 1; |
viewports[i].cursor_active = false; |
viewports[i].cursor_shown = false; |
viewports[i].bbsize = bbsize; |
viewports[i].backbuf = backbuf; |
viewports[i].initialized = true; |
screen.rgb_conv(viewports[i].bgpixel, viewports[i].attr.bg_color); |
return i; |
} |
/** Initialize framebuffer as a chardev output device |
* |
* @param addr Address of theframebuffer |
* @param xres Screen width in pixels |
* @param yres Screen height in pixels |
* @param visual Bits per pixel (8, 16, 24, 32) |
* @param scan Bytes per one scanline |
* @param invert_colors Inverted colors. |
* @param addr Address of the framebuffer |
* @param xres Screen width in pixels |
* @param yres Screen height in pixels |
* @param visual Bits per pixel (8, 16, 24, 32) |
* @param scan Bytes per one scanline |
* |
*/ |
static bool |
screen_init(void *addr, unsigned int offset, unsigned int xres, |
unsigned int yres, unsigned int scan, unsigned int visual, |
bool invert_colors) |
static bool screen_init(void *addr, unsigned int xres, unsigned int yres, |
unsigned int scan, unsigned int visual) |
{ |
switch (visual) { |
case VISUAL_INDIRECT_8: |
screen.rgb2scr = rgb_byte8; |
screen.scr2rgb = byte8_rgb; |
screen.rgb_conv = rgb_323; |
screen.mask_conv = mask_323; |
screen.pixelbytes = 1; |
break; |
case VISUAL_RGB_5_5_5: |
screen.rgb2scr = rgb_byte555; |
screen.scr2rgb = byte555_rgb; |
screen.rgb_conv = rgb_555; |
screen.mask_conv = mask_555; |
screen.pixelbytes = 2; |
break; |
case VISUAL_RGB_5_6_5: |
screen.rgb2scr = rgb_byte565; |
screen.scr2rgb = byte565_rgb; |
screen.rgb_conv = rgb_565; |
screen.mask_conv = mask_565; |
screen.pixelbytes = 2; |
break; |
case VISUAL_RGB_8_8_8: |
screen.rgb2scr = rgb_byte888; |
screen.scr2rgb = byte888_rgb; |
screen.rgb_conv = rgb_888; |
screen.mask_conv = mask_888; |
screen.pixelbytes = 3; |
break; |
case VISUAL_BGR_8_8_8: |
screen.rgb_conv = bgr_888; |
screen.mask_conv = mask_888; |
screen.pixelbytes = 3; |
break; |
case VISUAL_RGB_8_8_8_0: |
screen.rgb2scr = rgb_byte888; |
screen.scr2rgb = byte888_rgb; |
screen.rgb_conv = rgb_888; |
screen.mask_conv = mask_888; |
screen.pixelbytes = 4; |
break; |
case VISUAL_RGB_0_8_8_8: |
screen.rgb2scr = rgb_byte0888; |
screen.scr2rgb = byte0888_rgb; |
screen.rgb_conv = rgb_0888; |
screen.mask_conv = mask_0888; |
screen.pixelbytes = 4; |
break; |
case VISUAL_BGR_0_8_8_8: |
screen.rgb2scr = bgr_byte0888; |
screen.scr2rgb = byte0888_bgr; |
screen.rgb_conv = bgr_0888; |
screen.mask_conv = mask_0888; |
screen.pixelbytes = 4; |
break; |
default: |
return false; |
} |
screen.fbaddress = (unsigned char *) (((uintptr_t) addr) + offset); |
screen.fb_addr = (unsigned char *) addr; |
screen.xres = xres; |
screen.yres = yres; |
screen.scanline = scan; |
screen.invert_colors = invert_colors; |
screen.glyphscanline = FONT_WIDTH * screen.pixelbytes; |
screen.glyphbytes = screen.glyphscanline * FONT_SCANLINES; |
size_t glyphsize = 2 * FONT_GLYPHS * screen.glyphbytes; |
uint8_t *glyphs = (uint8_t *) malloc(glyphsize); |
if (!glyphs) |
return false; |
memset(glyphs, 0, glyphsize); |
screen.glyphs = glyphs; |
render_glyphs(); |
/* Create first viewport */ |
viewport_create(0, 0, xres, yres); |
vport_create(0, 0, xres, yres); |
return true; |
} |
/** Hide cursor if it is shown */ |
static void |
cursor_hide(viewport_t *vport) |
/** Draw a glyph, takes advantage of alignment. |
* |
* This version can only be used if the following conditions are met: |
* |
* - word size is divisible by pixelbytes |
* - cell scanline size is divisible by word size |
* - cell scanlines are word-aligned |
* |
* It makes use of the pre-rendered mask to process (possibly) several |
* pixels at once (word size / pixelbytes pixels at a time are processed) |
* making it very fast. Most notably this version is not applicable at 24 bits |
* per pixel. |
* |
* @param x x coordinate of top-left corner on screen. |
* @param y y coordinate of top-left corner on screen. |
* @param cursor Draw glyph with cursor |
* @param glyphs Pointer to font bitmap. |
* @param glyph Code of the glyph to draw. |
* @param fg_color Foreground color. |
* @param bg_color Backgroudn color. |
* |
*/ |
static void draw_glyph_aligned(unsigned int x, unsigned int y, bool cursor, |
uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color) |
{ |
if (vport->cursor_active && vport->cursor_shown) { |
invert_char(vport, vport->cur_row, vport->cur_col); |
vport->cursor_shown = 0; |
unsigned int i; |
unsigned int yd; |
unsigned long fg_buf; |
unsigned long bg_buf; |
unsigned long mask; |
/* |
* Prepare a pair of words, one filled with foreground-color |
* pattern and the other filled with background-color pattern. |
*/ |
for (i = 0; i < sizeof(unsigned long) / screen.pixelbytes; i++) { |
screen.rgb_conv(&((uint8_t *) &fg_buf)[i * screen.pixelbytes], |
fg_color); |
screen.rgb_conv(&((uint8_t *) &bg_buf)[i * screen.pixelbytes], |
bg_color); |
} |
/* Pointer to the current position in the mask. */ |
unsigned long *maskp = (unsigned long *) &glyphs[GLYPH_POS(glyph, 0, cursor)]; |
/* Pointer to the current position on the screen. */ |
unsigned long *dp = (unsigned long *) &screen.fb_addr[FB_POS(x, y)]; |
/* Width of the character cell in words. */ |
unsigned int ww = FONT_WIDTH * screen.pixelbytes / sizeof(unsigned long); |
/* Offset to add when moving to another screen scanline. */ |
unsigned int d_add = screen.scanline - FONT_WIDTH * screen.pixelbytes; |
for (yd = 0; yd < FONT_SCANLINES; yd++) { |
/* |
* Now process the cell scanline, combining foreground |
* and background color patters using the pre-rendered mask. |
*/ |
for (i = 0; i < ww; i++) { |
mask = *maskp++; |
*dp++ = (fg_buf & mask) | (bg_buf & ~mask); |
} |
/* Move to the beginning of the next scanline of the cell. */ |
dp = (unsigned long *) ((uint8_t *) dp + d_add); |
} |
} |
/** Show cursor if cursor showing is enabled */ |
static void |
cursor_print(viewport_t *vport) |
/** Draw a glyph, fallback version. |
* |
* This version does not make use of the pre-rendered mask, it uses |
* the font bitmap directly. It works always, but it is slower. |
* |
* @param x x coordinate of top-left corner on screen. |
* @param y y coordinate of top-left corner on screen. |
* @param cursor Draw glyph with cursor |
* @param glyphs Pointer to font bitmap. |
* @param glyph Code of the glyph to draw. |
* @param fg_color Foreground color. |
* @param bg_color Backgroudn color. |
* |
*/ |
void draw_glyph_fallback(unsigned int x, unsigned int y, bool cursor, |
uint8_t *glyphs, uint32_t glyph, uint32_t fg_color, uint32_t bg_color) |
{ |
unsigned int i; |
unsigned int j; |
unsigned int yd; |
uint8_t fg_buf[4]; |
uint8_t bg_buf[4]; |
uint8_t *sp; |
uint8_t b; |
/* Pre-render 1x the foreground and background color pixels. */ |
if (cursor) { |
screen.rgb_conv(fg_buf, bg_color); |
screen.rgb_conv(bg_buf, fg_color); |
} else { |
screen.rgb_conv(fg_buf, fg_color); |
screen.rgb_conv(bg_buf, bg_color); |
} |
/* Pointer to the current position on the screen. */ |
uint8_t *dp = (uint8_t *) &screen.fb_addr[FB_POS(x, y)]; |
/* Offset to add when moving to another screen scanline. */ |
unsigned int d_add = screen.scanline - FONT_WIDTH * screen.pixelbytes; |
for (yd = 0; yd < FONT_SCANLINES; yd++) { |
/* Byte containing bits of the glyph scanline. */ |
b = fb_font[glyph][yd]; |
for (i = 0; i < FONT_WIDTH; i++) { |
/* Choose color based on the current bit. */ |
sp = (b & 0x80) ? fg_buf : bg_buf; |
/* Copy the pixel. */ |
for (j = 0; j < screen.pixelbytes; j++) { |
*dp++ = *sp++; |
} |
/* Move to the next bit. */ |
b = b << 1; |
} |
/* Move to the beginning of the next scanline of the cell. */ |
dp += d_add; |
} |
} |
/** Draw glyph at specified position in viewport. |
* |
* @param vport Viewport identification |
* @param cursor Draw glyph with cursor |
* @param col Screen position relative to viewport |
* @param row Screen position relative to viewport |
* |
*/ |
static void draw_vp_glyph(viewport_t *vport, bool cursor, unsigned int col, |
unsigned int row) |
{ |
unsigned int x = vport->x + COL2X(col); |
unsigned int y = vport->y + ROW2Y(row); |
uint32_t glyph = vport->backbuf[BB_POS(vport, col, row)].glyph; |
uint32_t fg_color = vport->backbuf[BB_POS(vport, col, row)].fg_color; |
uint32_t bg_color = vport->backbuf[BB_POS(vport, col, row)].bg_color; |
(*vport->dglyph)(x, y, cursor, screen.glyphs, glyph, |
fg_color, bg_color); |
} |
/** Hide cursor if it is shown |
* |
*/ |
static void cursor_hide(viewport_t *vport) |
{ |
if ((vport->cursor_active) && (vport->cursor_shown)) { |
draw_vp_glyph(vport, false, vport->cur_col, vport->cur_row); |
vport->cursor_shown = false; |
} |
} |
/** Show cursor if cursor showing is enabled |
* |
*/ |
static void cursor_show(viewport_t *vport) |
{ |
/* Do not check for cursor_shown */ |
if (vport->cursor_active) { |
invert_char(vport, vport->cur_row, vport->cur_col); |
vport->cursor_shown = 1; |
draw_vp_glyph(vport, true, vport->cur_col, vport->cur_row); |
vport->cursor_shown = true; |
} |
} |
/** Invert cursor, if it is enabled */ |
static void |
cursor_blink(viewport_t *vport) |
/** Invert cursor, if it is enabled |
* |
*/ |
static void cursor_blink(viewport_t *vport) |
{ |
if (vport->cursor_shown) |
cursor_hide(vport); |
else |
cursor_print(vport); |
cursor_show(vport); |
} |
/** Draw character at given position relative to viewport |
* |
* @param vport Viewport identification |
* @param c Character to print |
* @param row Screen position relative to viewport |
* @param col Screen position relative to viewport |
* @param transparent If false, print background color with character |
/** Draw character at given position relative to viewport |
* |
* @param vport Viewport identification |
* @param c Character to draw |
* @param col Screen position relative to viewport |
* @param row Screen position relative to viewport |
* |
*/ |
static void |
draw_char(viewport_t *vport, char c, unsigned int row, unsigned int col, |
style_t style, int transparent) |
static void draw_char(viewport_t *vport, wchar_t c, unsigned int col, unsigned int row) |
{ |
/* Optimize - do not hide cursor if we are going to overwrite it */ |
if (vport->cursor_active && vport->cursor_shown && |
(vport->cur_col != col || vport->cur_row != row)) |
invert_char(vport, vport->cur_row, vport->cur_col); |
bb_cell_t *bbp; |
draw_glyph(vport, c, col * COL_WIDTH, row * FONT_SCANLINES, style, |
transparent); |
/* Do not hide cursor if we are going to overwrite it */ |
if ((vport->cursor_active) && (vport->cursor_shown) && |
((vport->cur_col != col) || (vport->cur_row != row))) |
cursor_hide(vport); |
bbp = &vport->backbuf[BB_POS(vport, col, row)]; |
bbp->glyph = fb_font_glyph(c); |
bbp->fg_color = vport->attr.fg_color; |
bbp->bg_color = vport->attr.bg_color; |
draw_vp_glyph(vport, false, col, row); |
vport->cur_col = col; |
vport->cur_row = row; |
vport->cur_col++; |
if (vport->cur_col >= vport->cols) { |
vport->cur_col = 0; |
638,65 → 914,97 |
if (vport->cur_row >= vport->rows) |
vport->cur_row--; |
} |
cursor_print(vport); |
cursor_show(vport); |
} |
/** Draw text data to viewport |
/** Draw text data to viewport. |
* |
* @param vport Viewport id |
* @param data Text data fitting exactly into viewport |
* @param data Text data. |
* @param x Leftmost column of the area. |
* @param y Topmost row of the area. |
* @param w Number of rows. |
* @param h Number of columns. |
* |
*/ |
static void |
draw_text_data(viewport_t *vport, keyfield_t *data) |
static void draw_text_data(viewport_t *vport, keyfield_t *data, unsigned int x, |
unsigned int y, unsigned int w, unsigned int h) |
{ |
int i; |
int col,row; |
clear_port(vport); |
for (i = 0; i < vport->cols * vport->rows; i++) { |
if (data[i].character == ' ' && style_same(data[i].style, |
vport->style)) |
continue; |
col = i % vport->cols; |
row = i / vport->cols; |
draw_glyph(vport, data[i].character, col * COL_WIDTH, row * |
FONT_SCANLINES, data[i].style, style_same(data[i].style, |
vport->style)); |
unsigned int i; |
unsigned int j; |
bb_cell_t *bbp; |
attrs_t *a; |
attr_rgb_t rgb; |
for (j = 0; j < h; j++) { |
for (i = 0; i < w; i++) { |
unsigned int col = x + i; |
unsigned int row = y + j; |
bbp = &vport->backbuf[BB_POS(vport, col, row)]; |
a = &data[j * w + i].attrs; |
rgb_from_attr(&rgb, a); |
bbp->glyph = fb_font_glyph(data[j * w + i].character); |
bbp->fg_color = rgb.fg_color; |
bbp->bg_color = rgb.bg_color; |
draw_vp_glyph(vport, false, col, row); |
} |
} |
cursor_print(vport); |
cursor_show(vport); |
} |
/** Return first free pixmap */ |
static int |
find_free_pixmap(void) |
static void putpixel_pixmap(void *data, unsigned int x, unsigned int y, uint32_t color) |
{ |
int i; |
int pm = *((int *) data); |
pixmap_t *pmap = &pixmaps[pm]; |
unsigned int pos = (y * pmap->width + x) * screen.pixelbytes; |
for (i = 0;i < MAX_PIXMAPS;i++) |
screen.rgb_conv(&pmap->data[pos], color); |
} |
static void putpixel(void *data, unsigned int x, unsigned int y, uint32_t color) |
{ |
viewport_t *vport = (viewport_t *) data; |
unsigned int dx = vport->x + x; |
unsigned int dy = vport->y + y; |
screen.rgb_conv(&screen.fb_addr[FB_POS(dx, dy)], color); |
} |
/** Return first free pixmap |
* |
*/ |
static int find_free_pixmap(void) |
{ |
unsigned int i; |
for (i = 0; i < MAX_PIXMAPS; i++) |
if (!pixmaps[i].data) |
return i; |
return -1; |
} |
static void |
putpixel_pixmap(int pm, unsigned int x, unsigned int y, int color) |
{ |
pixmap_t *pmap = &pixmaps[pm]; |
int pos = (y * pmap->width + x) * screen.pixelbytes; |
(*screen.rgb2scr)(&pmap->data[pos],COLOR(color)); |
} |
/** Create a new pixmap and return appropriate ID */ |
static int |
shm2pixmap(unsigned char *shm, size_t size) |
/** Create a new pixmap and return appropriate ID |
* |
*/ |
static int shm2pixmap(unsigned char *shm, size_t size) |
{ |
int pm; |
pixmap_t *pmap; |
pm = find_free_pixmap(); |
if (pm == -1) |
return ELIMIT; |
pmap = &pixmaps[pm]; |
if (ppm_get_data(shm, size, &pmap->width, &pmap->height)) |
705,19 → 1013,19 |
pmap->data = malloc(pmap->width * pmap->height * screen.pixelbytes); |
if (!pmap->data) |
return ENOMEM; |
ppm_draw(shm, size, 0, 0, pmap->width, pmap->height, |
(putpixel_cb_t)putpixel_pixmap, (void *)pm); |
ppm_draw(shm, size, 0, 0, pmap->width, pmap->height, putpixel_pixmap, (void *) &pm); |
return pm; |
} |
/** Handle shared memory communication calls |
* |
* Protocol for drawing pixmaps: |
* - FB_PREPARE_SHM(client shm identification) |
* - IPC_M_AS_AREA_SEND |
* - FB_DRAW_PPM(startx,starty) |
* - FB_DRAW_PPM(startx, starty) |
* - FB_DROP_SHM |
* |
* Protocol for text drawing |
725,28 → 1033,32 |
* - FB_DRAW_TEXT_DATA |
* |
* @param callid Callid of the current call |
* @param call Current call data |
* @param vp Active viewport |
* @return 0 if the call was not handled byt this function, 1 otherwise |
* @param call Current call data |
* @param vp Active viewport |
* |
* note: this function is not threads safe, you would have |
* @return false if the call was not handled byt this function, true otherwise |
* |
* Note: this function is not threads safe, you would have |
* to redefine static variables with __thread |
* |
*/ |
static int |
shm_handle(ipc_callid_t callid, ipc_call_t *call, int vp) |
static bool shm_handle(ipc_callid_t callid, ipc_call_t *call, int vp) |
{ |
static keyfield_t *interbuffer = NULL; |
static size_t intersize = 0; |
static unsigned char *shm = NULL; |
static ipcarg_t shm_id = 0; |
static size_t shm_size; |
int handled = 1; |
int retval = 0; |
bool handled = true; |
int retval = EOK; |
viewport_t *vport = &viewports[vp]; |
unsigned int x, y; |
unsigned int x; |
unsigned int y; |
unsigned int w; |
unsigned int h; |
switch (IPC_GET_METHOD(*call)) { |
case IPC_M_SHARE_OUT: |
/* We accept one area for data interchange */ |
753,19 → 1065,20 |
if (IPC_GET_ARG1(*call) == shm_id) { |
void *dest = as_get_mappable_page(IPC_GET_ARG2(*call)); |
shm_size = IPC_GET_ARG2(*call); |
if (!ipc_answer_1(callid, EOK, (sysarg_t) dest)) |
if (!ipc_answer_1(callid, EOK, (sysarg_t) dest)) |
shm = dest; |
else |
shm_id = 0; |
if (shm[0] != 'P') |
while (1) |
; |
return 1; |
return false; |
return true; |
} else { |
intersize = IPC_GET_ARG2(*call); |
receive_comm_area(callid, call, (void *) &interbuffer); |
} |
return 1; |
return true; |
case FB_PREPARE_SHM: |
if (shm_id) |
retval = EBUSY; |
780,7 → 1093,7 |
} |
shm_id = 0; |
break; |
case FB_SHM2PIXMAP: |
if (!shm) { |
retval = EINVAL; |
795,29 → 1108,36 |
} |
x = IPC_GET_ARG1(*call); |
y = IPC_GET_ARG2(*call); |
if (x > vport->width || y > vport->height) { |
if ((x > vport->width) || (y > vport->height)) { |
retval = EINVAL; |
break; |
} |
ppm_draw(shm, shm_size, IPC_GET_ARG1(*call), |
IPC_GET_ARG2(*call), vport->width - x, vport->height - y, |
(putpixel_cb_t)putpixel, vport); |
IPC_GET_ARG2(*call), vport->width - x, vport->height - y, putpixel, (void *) vport); |
break; |
case FB_DRAW_TEXT_DATA: |
x = IPC_GET_ARG1(*call); |
y = IPC_GET_ARG2(*call); |
w = IPC_GET_ARG3(*call); |
h = IPC_GET_ARG4(*call); |
if (!interbuffer) { |
retval = EINVAL; |
break; |
} |
if (intersize < vport->cols * vport->rows * |
sizeof(*interbuffer)) { |
if (x + w > vport->cols || y + h > vport->rows) { |
retval = EINVAL; |
break; |
} |
draw_text_data(vport, interbuffer); |
if (intersize < w * h * sizeof(*interbuffer)) { |
retval = EINVAL; |
break; |
} |
draw_text_data(vport, interbuffer, x, y, w, h); |
break; |
default: |
handled = 0; |
handled = false; |
} |
if (handled) |
825,41 → 1145,39 |
return handled; |
} |
static void |
copy_vp_to_pixmap(viewport_t *vport, pixmap_t *pmap) |
static void copy_vp_to_pixmap(viewport_t *vport, pixmap_t *pmap) |
{ |
int y; |
int tmp, srcrowsize; |
int realwidth, realheight, realrowsize; |
int width = vport->width; |
int height = vport->height; |
unsigned int width = vport->width; |
unsigned int height = vport->height; |
if (width + vport->x > screen.xres) |
width = screen.xres - vport->x; |
if (height + vport->y > screen.yres) |
height = screen.yres - vport->y; |
realwidth = pmap->width <= width ? pmap->width : width; |
realheight = pmap->height <= height ? pmap->height : height; |
srcrowsize = vport->width * screen.pixelbytes; |
realrowsize = realwidth * screen.pixelbytes; |
unsigned int realwidth = pmap->width <= width ? pmap->width : width; |
unsigned int realheight = pmap->height <= height ? pmap->height : height; |
unsigned int srcrowsize = vport->width * screen.pixelbytes; |
unsigned int realrowsize = realwidth * screen.pixelbytes; |
unsigned int y; |
for (y = 0; y < realheight; y++) { |
tmp = (vport->y + y) * screen.scanline + |
vport->x * screen.pixelbytes; |
memcpy(pmap->data + srcrowsize * y, screen.fbaddress + tmp, |
realrowsize); |
unsigned int tmp = (vport->y + y) * screen.scanline + vport->x * screen.pixelbytes; |
memcpy(pmap->data + srcrowsize * y, screen.fb_addr + tmp, realrowsize); |
} |
} |
/** Save viewport to pixmap */ |
static int |
save_vp_to_pixmap(viewport_t *vport) |
/** Save viewport to pixmap |
* |
*/ |
static int save_vp_to_pixmap(viewport_t *vport) |
{ |
int pm; |
pixmap_t *pmap; |
pm = find_free_pixmap(); |
if (pm == -1) |
return ELIMIT; |
868,58 → 1186,60 |
pmap->data = malloc(screen.pixelbytes * vport->width * vport->height); |
if (!pmap->data) |
return ENOMEM; |
pmap->width = vport->width; |
pmap->height = vport->height; |
copy_vp_to_pixmap(vport, pmap); |
return pm; |
} |
/** Draw pixmap on screen |
* |
* @param vp Viewport to draw on |
* @param pm Pixmap identifier |
* |
*/ |
static int draw_pixmap(int vp, int pm) |
{ |
pixmap_t *pmap = &pixmaps[pm]; |
viewport_t *vport = &viewports[vp]; |
int y; |
int tmp, srcrowsize; |
int realwidth, realheight, realrowsize; |
int width = vport->width; |
int height = vport->height; |
unsigned int width = vport->width; |
unsigned int height = vport->height; |
if (width + vport->x > screen.xres) |
width = screen.xres - vport->x; |
if (height + vport->y > screen.yres) |
height = screen.yres - vport->y; |
if (!pmap->data) |
return EINVAL; |
realwidth = pmap->width <= width ? pmap->width : width; |
realheight = pmap->height <= height ? pmap->height : height; |
srcrowsize = vport->width * screen.pixelbytes; |
realrowsize = realwidth * screen.pixelbytes; |
unsigned int realwidth = pmap->width <= width ? pmap->width : width; |
unsigned int realheight = pmap->height <= height ? pmap->height : height; |
unsigned int srcrowsize = vport->width * screen.pixelbytes; |
unsigned int realrowsize = realwidth * screen.pixelbytes; |
unsigned int y; |
for (y = 0; y < realheight; y++) { |
tmp = (vport->y + y) * screen.scanline + |
vport->x * screen.pixelbytes; |
memcpy(screen.fbaddress + tmp, pmap->data + y * srcrowsize, |
realrowsize); |
unsigned int tmp = (vport->y + y) * screen.scanline + vport->x * screen.pixelbytes; |
memcpy(screen.fb_addr + tmp, pmap->data + y * srcrowsize, realrowsize); |
} |
return 0; |
return EOK; |
} |
/** Tick animation one step forward */ |
static void |
anims_tick(void) |
/** Tick animation one step forward |
* |
*/ |
static void anims_tick(void) |
{ |
int i; |
unsigned int i; |
static int counts = 0; |
/* Limit redrawing */ |
926,39 → 1246,38 |
counts = (counts + 1) % 8; |
if (counts) |
return; |
for (i = 0; i < MAX_ANIMATIONS; i++) { |
if (!animations[i].animlen || !animations[i].initialized || |
!animations[i].enabled) |
if ((!animations[i].animlen) || (!animations[i].initialized) || |
(!animations[i].enabled)) |
continue; |
draw_pixmap(animations[i].vp, |
animations[i].pixmaps[animations[i].pos]); |
animations[i].pos = (animations[i].pos + 1) % |
animations[i].animlen; |
draw_pixmap(animations[i].vp, animations[i].pixmaps[animations[i].pos]); |
animations[i].pos = (animations[i].pos + 1) % animations[i].animlen; |
} |
} |
static int pointer_x, pointer_y; |
static int pointer_shown, pointer_enabled; |
static unsigned int pointer_x; |
static unsigned int pointer_y; |
static bool pointer_shown, pointer_enabled; |
static int pointer_vport = -1; |
static int pointer_pixmap = -1; |
static void |
mouse_show(void) |
static void mouse_show(void) |
{ |
int i, j; |
int visibility; |
int color; |
int bytepos; |
if (pointer_shown || !pointer_enabled) |
if ((pointer_shown) || (!pointer_enabled)) |
return; |
/* Save image under the cursor */ |
/* Save image under the pointer. */ |
if (pointer_vport == -1) { |
pointer_vport = viewport_create(pointer_x, pointer_y, |
pointer_width, pointer_height); |
pointer_vport = vport_create(pointer_x, pointer_y, pointer_width, pointer_height); |
if (pointer_vport < 0) |
return; |
} else { |
965,14 → 1284,13 |
viewports[pointer_vport].x = pointer_x; |
viewports[pointer_vport].y = pointer_y; |
} |
if (pointer_pixmap == -1) |
pointer_pixmap = save_vp_to_pixmap(&viewports[pointer_vport]); |
else |
copy_vp_to_pixmap(&viewports[pointer_vport], |
&pixmaps[pointer_pixmap]); |
/* Draw cursor */ |
copy_vp_to_pixmap(&viewports[pointer_vport], &pixmaps[pointer_pixmap]); |
/* Draw mouse pointer. */ |
for (i = 0; i < pointer_height; i++) |
for (j = 0; j < pointer_width; j++) { |
bytepos = i * ((pointer_width - 1) / 8 + 1) + j / 8; |
990,10 → 1308,10 |
pointer_shown = 1; |
} |
static void |
mouse_hide(void) |
static void mouse_hide(void) |
{ |
/* Restore image under the cursor */ |
/* Restore image under the pointer. */ |
if (pointer_shown) { |
draw_pixmap(pointer_vport, pointer_pixmap); |
pointer_shown = 0; |
1000,8 → 1318,8 |
} |
} |
static void |
mouse_move(unsigned int x, unsigned int y) |
static void mouse_move(unsigned int x, unsigned int y) |
{ |
mouse_hide(); |
pointer_x = x; |
1009,14 → 1327,14 |
mouse_show(); |
} |
static int |
anim_handle(ipc_callid_t callid, ipc_call_t *call, int vp) |
static int anim_handle(ipc_callid_t callid, ipc_call_t *call, int vp) |
{ |
int handled = 1; |
int retval = 0; |
int i,nvp; |
bool handled = true; |
int retval = EOK; |
int i, nvp; |
int newval; |
switch (IPC_GET_METHOD(*call)) { |
case FB_ANIM_CREATE: |
nvp = IPC_GET_ARG1(*call); |
1106,14 → 1424,16 |
return handled; |
} |
/** Handler for messages concerning pixmap handling */ |
static int |
pixmap_handle(ipc_callid_t callid, ipc_call_t *call, int vp) |
/** Handler for messages concerning pixmap handling |
* |
*/ |
static int pixmap_handle(ipc_callid_t callid, ipc_call_t *call, int vp) |
{ |
int handled = 1; |
int retval = 0; |
int i,nvp; |
bool handled = true; |
int retval = EOK; |
int i, nvp; |
switch (IPC_GET_METHOD(*call)) { |
case FB_VP_DRAW_PIXMAP: |
nvp = IPC_GET_ARG1(*call); |
1151,7 → 1471,7 |
default: |
handled = 0; |
} |
if (handled) |
ipc_answer_0(callid, retval); |
return handled; |
1158,35 → 1478,99 |
} |
static int rgb_from_style(attr_rgb_t *rgb, int style) |
{ |
switch (style) { |
case STYLE_NORMAL: |
rgb->fg_color = color_table[COLOR_BLACK]; |
rgb->bg_color = color_table[COLOR_WHITE]; |
break; |
case STYLE_EMPHASIS: |
rgb->fg_color = color_table[COLOR_RED]; |
rgb->bg_color = color_table[COLOR_WHITE]; |
break; |
default: |
return EINVAL; |
} |
return EOK; |
} |
static int rgb_from_idx(attr_rgb_t *rgb, ipcarg_t fg_color, |
ipcarg_t bg_color, ipcarg_t flags) |
{ |
fg_color = (fg_color & 7) | ((flags & CATTR_BRIGHT) ? 8 : 0); |
bg_color = (bg_color & 7) | ((flags & CATTR_BRIGHT) ? 8 : 0); |
rgb->fg_color = color_table[fg_color]; |
rgb->bg_color = color_table[bg_color]; |
return EOK; |
} |
static int rgb_from_attr(attr_rgb_t *rgb, const attrs_t *a) |
{ |
int rc; |
switch (a->t) { |
case at_style: |
rc = rgb_from_style(rgb, a->a.s.style); |
break; |
case at_idx: |
rc = rgb_from_idx(rgb, a->a.i.fg_color, |
a->a.i.bg_color, a->a.i.flags); |
break; |
case at_rgb: |
*rgb = a->a.r; |
rc = EOK; |
break; |
} |
return rc; |
} |
static int fb_set_style(viewport_t *vport, ipcarg_t style) |
{ |
return rgb_from_style(&vport->attr, (int) style); |
} |
static int fb_set_color(viewport_t *vport, ipcarg_t fg_color, |
ipcarg_t bg_color, ipcarg_t flags) |
{ |
return rgb_from_idx(&vport->attr, fg_color, bg_color, flags); |
} |
/** Function for handling connections to FB |
* |
*/ |
static void |
fb_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
static void fb_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
ipc_callid_t callid; |
ipc_call_t call; |
int retval; |
int i; |
unsigned int row,col; |
char c; |
int vp = 0; |
viewport_t *vport = &viewports[0]; |
unsigned int vp = 0; |
viewport_t *vport = &viewports[vp]; |
if (client_connected) { |
ipc_answer_0(iid, ELIMIT); |
return; |
} |
client_connected = 1; |
ipc_answer_0(iid, EOK); /* Accept connection */ |
while (1) { |
if (vport->cursor_active || anims_enabled) |
/* Accept connection */ |
client_connected = true; |
ipc_answer_0(iid, EOK); |
while (true) { |
ipc_callid_t callid; |
ipc_call_t call; |
int retval; |
unsigned int i; |
int scroll; |
wchar_t ch; |
unsigned int row, col; |
if ((vport->cursor_active) || (anims_enabled)) |
callid = async_get_call_timeout(&call, 250000); |
else |
callid = async_get_call(&call); |
mouse_hide(); |
if (!callid) { |
cursor_blink(vport); |
1194,105 → 1578,89 |
mouse_show(); |
continue; |
} |
if (shm_handle(callid, &call, vp)) |
continue; |
if (pixmap_handle(callid, &call, vp)) |
continue; |
if (anim_handle(callid, &call, vp)) |
continue; |
switch (IPC_GET_METHOD(call)) { |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
client_connected = 0; |
/* cleanup other viewports */ |
client_connected = false; |
/* Cleanup other viewports */ |
for (i = 1; i < MAX_VIEWPORTS; i++) |
vport->initialized = 0; |
return; /* Exit thread */ |
vport->initialized = false; |
/* Exit thread */ |
return; |
case FB_PUTCHAR: |
case FB_TRANS_PUTCHAR: |
c = IPC_GET_ARG1(call); |
ch = IPC_GET_ARG1(call); |
row = IPC_GET_ARG2(call); |
col = IPC_GET_ARG3(call); |
if (row >= vport->rows || col >= vport->cols) { |
if ((col >= vport->cols) || (row >= vport->rows)) { |
retval = EINVAL; |
break; |
} |
ipc_answer_0(callid, EOK); |
draw_char(vport, c, row, col, vport->style, |
IPC_GET_METHOD(call) == FB_TRANS_PUTCHAR); |
continue; /* msg already answered */ |
draw_char(vport, ch, col, row); |
/* Message already answered */ |
continue; |
case FB_CLEAR: |
clear_port(vport); |
cursor_print(vport); |
retval = 0; |
vport_clear(vport); |
cursor_show(vport); |
retval = EOK; |
break; |
case FB_CURSOR_GOTO: |
case FB_CURSOR_GOTO: |
row = IPC_GET_ARG1(call); |
col = IPC_GET_ARG2(call); |
if (row >= vport->rows || col >= vport->cols) { |
if ((col >= vport->cols) || (row >= vport->rows)) { |
retval = EINVAL; |
break; |
} |
retval = 0; |
retval = EOK; |
cursor_hide(vport); |
vport->cur_col = col; |
vport->cur_row = row; |
cursor_print(vport); |
break; |
cursor_show(vport); |
break; |
case FB_CURSOR_VISIBILITY: |
cursor_hide(vport); |
vport->cursor_active = IPC_GET_ARG1(call); |
cursor_print(vport); |
retval = 0; |
cursor_show(vport); |
retval = EOK; |
break; |
case FB_GET_CSIZE: |
ipc_answer_2(callid, EOK, vport->rows, vport->cols); |
continue; |
case FB_SCROLL: |
i = IPC_GET_ARG1(call); |
if (i > vport->rows || i < (- (int)vport->rows)) { |
scroll = IPC_GET_ARG1(call); |
if ((scroll > (int) vport->rows) || (scroll < (-(int) vport->rows))) { |
retval = EINVAL; |
break; |
} |
cursor_hide(vport); |
scroll_port(vport, i*FONT_SCANLINES); |
cursor_print(vport); |
retval = 0; |
vport_scroll(vport, scroll); |
cursor_show(vport); |
retval = EOK; |
break; |
case FB_VIEWPORT_DB: |
/* Enable double buffering */ |
i = IPC_GET_ARG1(call); |
if (i == -1) |
i = vp; |
if (i < 0 || i >= MAX_VIEWPORTS) { |
retval = EINVAL; |
break; |
} |
if (!viewports[i].initialized ) { |
retval = EADDRNOTAVAIL; |
break; |
} |
viewports[i].dboffset = 0; |
if (IPC_GET_ARG2(call) == 1 && !viewports[i].dbdata) |
viewports[i].dbdata = |
malloc(screen.pixelbytes * |
viewports[i].width * viewports[i].height); |
else if (IPC_GET_ARG2(call) == 0 && |
viewports[i].dbdata) { |
free(viewports[i].dbdata); |
viewports[i].dbdata = NULL; |
} |
retval = 0; |
break; |
case FB_VIEWPORT_SWITCH: |
i = IPC_GET_ARG1(call); |
if (i < 0 || i >= MAX_VIEWPORTS) { |
if (i >= MAX_VIEWPORTS) { |
retval = EINVAL; |
break; |
} |
if (! viewports[i].initialized ) { |
if (!viewports[i].initialized) { |
retval = EADDRNOTAVAIL; |
break; |
} |
1299,11 → 1667,11 |
cursor_hide(vport); |
vp = i; |
vport = &viewports[vp]; |
cursor_print(vport); |
retval = 0; |
cursor_show(vport); |
retval = EOK; |
break; |
case FB_VIEWPORT_CREATE: |
retval = viewport_create(IPC_GET_ARG1(call) >> 16, |
retval = vport_create(IPC_GET_ARG1(call) >> 16, |
IPC_GET_ARG1(call) & 0xffff, |
IPC_GET_ARG2(call) >> 16, |
IPC_GET_ARG2(call) & 0xffff); |
1310,34 → 1678,45 |
break; |
case FB_VIEWPORT_DELETE: |
i = IPC_GET_ARG1(call); |
if (i < 0 || i >= MAX_VIEWPORTS) { |
if (i >= MAX_VIEWPORTS) { |
retval = EINVAL; |
break; |
} |
if (! viewports[i].initialized ) { |
if (!viewports[i].initialized) { |
retval = EADDRNOTAVAIL; |
break; |
} |
viewports[i].initialized = 0; |
if (viewports[i].dbdata) { |
free(viewports[i].dbdata); |
viewports[i].dbdata = NULL; |
} |
retval = 0; |
viewports[i].initialized = false; |
if (viewports[i].bgpixel) |
free(viewports[i].bgpixel); |
if (viewports[i].backbuf) |
free(viewports[i].backbuf); |
retval = EOK; |
break; |
case FB_SET_STYLE: |
vport->style.fg_color = IPC_GET_ARG1(call); |
vport->style.bg_color = IPC_GET_ARG2(call); |
retval = 0; |
retval = fb_set_style(vport, IPC_GET_ARG1(call)); |
break; |
case FB_SET_COLOR: |
retval = fb_set_color(vport, IPC_GET_ARG1(call), |
IPC_GET_ARG2(call), IPC_GET_ARG3(call)); |
break; |
case FB_SET_RGB_COLOR: |
vport->attr.fg_color = IPC_GET_ARG1(call); |
vport->attr.bg_color = IPC_GET_ARG2(call); |
retval = EOK; |
break; |
case FB_GET_RESOLUTION: |
ipc_answer_2(callid, EOK, screen.xres, screen.yres); |
continue; |
case FB_POINTER_MOVE: |
pointer_enabled = 1; |
pointer_enabled = true; |
mouse_move(IPC_GET_ARG1(call), IPC_GET_ARG2(call)); |
retval = 0; |
retval = EOK; |
break; |
case FB_SCREEN_YIELD: |
case FB_SCREEN_RECLAIM: |
retval = EOK; |
break; |
default: |
retval = ENOENT; |
} |
1345,43 → 1724,33 |
} |
} |
/** Initialization of framebuffer */ |
int |
fb_init(void) |
/** Initialization of framebuffer |
* |
*/ |
int fb_init(void) |
{ |
void *fb_ph_addr; |
unsigned int fb_width; |
unsigned int fb_height; |
unsigned int fb_scanline; |
unsigned int fb_visual; |
unsigned int fb_offset; |
bool fb_invert_colors; |
void *fb_addr; |
size_t asz; |
async_set_client_connection(fb_client_connection); |
fb_ph_addr = (void *) sysinfo_value("fb.address.physical"); |
fb_offset = sysinfo_value("fb.offset"); |
fb_width = sysinfo_value("fb.width"); |
fb_height = sysinfo_value("fb.height"); |
fb_scanline = sysinfo_value("fb.scanline"); |
fb_visual = sysinfo_value("fb.visual"); |
fb_invert_colors = sysinfo_value("fb.invert-colors"); |
asz = fb_scanline * fb_height; |
fb_addr = as_get_mappable_page(asz); |
physmem_map(fb_ph_addr + fb_offset, fb_addr, ALIGN_UP(asz, PAGE_SIZE) >> |
PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE); |
if (screen_init(fb_addr, fb_offset, fb_width, fb_height, fb_scanline, fb_visual, |
fb_invert_colors)) |
void *fb_ph_addr = (void *) sysinfo_value("fb.address.physical"); |
unsigned int fb_offset = sysinfo_value("fb.offset"); |
unsigned int fb_width = sysinfo_value("fb.width"); |
unsigned int fb_height = sysinfo_value("fb.height"); |
unsigned int fb_scanline = sysinfo_value("fb.scanline"); |
unsigned int fb_visual = sysinfo_value("fb.visual"); |
unsigned int fbsize = fb_scanline * fb_height; |
void *fb_addr = as_get_mappable_page(fbsize); |
if (physmem_map(fb_ph_addr + fb_offset, fb_addr, |
ALIGN_UP(fbsize, PAGE_SIZE) >> PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE) != 0) |
return -1; |
if (screen_init(fb_addr, fb_width, fb_height, fb_scanline, fb_visual)) |
return 0; |
return -1; |
} |
/** |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/fb/sgcn.c |
---|
36,8 → 36,6 |
*/ |
#include <async.h> |
#include <ipc/ipc.h> |
#include <ipc/fb.h> |
#include <sysinfo.h> |
#include <as.h> |
#include <errno.h> |
60,9 → 58,6 |
*/ |
static uintptr_t sram_buffer_offset; |
/* Allow only 1 connection */ |
static int client_connected = 0; |
/** |
* SGCN buffer header. It is placed at the very beginning of the SGCN |
* buffer. |
122,125 → 117,22 |
} |
/** |
* Main function of the thread serving client connections. |
*/ |
static void sgcn_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
int retval; |
ipc_callid_t callid; |
ipc_call_t call; |
char c; |
int lastcol = 0; |
int lastrow = 0; |
int newcol; |
int newrow; |
int fgcolor; |
int bgcolor; |
int i; |
if (client_connected) { |
ipc_answer_0(iid, ELIMIT); |
return; |
} |
client_connected = 1; |
ipc_answer_0(iid, EOK); |
/* Clear the terminal, set scrolling region |
to 0 - 24 lines */ |
serial_clrscr(); |
serial_goto(0, 0); |
serial_puts("\033[0;24r"); |
while (true) { |
callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
client_connected = 0; |
ipc_answer_0(callid, EOK); |
return; |
case FB_PUTCHAR: |
c = IPC_GET_ARG1(call); |
newrow = IPC_GET_ARG2(call); |
newcol = IPC_GET_ARG3(call); |
if ((lastcol != newcol) || (lastrow != newrow)) |
serial_goto(newrow, newcol); |
lastcol = newcol + 1; |
lastrow = newrow; |
sgcn_putc(c); |
retval = 0; |
break; |
case FB_CURSOR_GOTO: |
newrow = IPC_GET_ARG1(call); |
newcol = IPC_GET_ARG2(call); |
serial_goto(newrow, newcol); |
lastrow = newrow; |
lastcol = newcol; |
retval = 0; |
break; |
case FB_GET_CSIZE: |
ipc_answer_2(callid, EOK, HEIGHT, WIDTH); |
continue; |
case FB_CLEAR: |
serial_clrscr(); |
retval = 0; |
break; |
case FB_SET_STYLE: |
fgcolor = IPC_GET_ARG1(call); |
bgcolor = IPC_GET_ARG2(call); |
if (fgcolor < bgcolor) |
serial_set_style(0); |
else |
serial_set_style(7); |
retval = 0; |
break; |
case FB_SCROLL: |
i = IPC_GET_ARG1(call); |
if ((i > HEIGHT) || (i < -HEIGHT)) { |
retval = EINVAL; |
break; |
} |
serial_scroll(i); |
serial_goto(lastrow, lastcol); |
retval = 0; |
break; |
case FB_CURSOR_VISIBILITY: |
if(IPC_GET_ARG1(call)) |
serial_cursor_enable(); |
else |
serial_cursor_disable(); |
retval = 0; |
break; |
default: |
retval = ENOENT; |
} |
ipc_answer_0(callid, retval); |
} |
} |
/** |
* Initializes the SGCN serial driver. |
*/ |
int sgcn_init(void) |
{ |
sram_virt_addr = (uintptr_t) as_get_mappable_page( |
sysinfo_value("sram.area.size")); |
int result = physmem_map( |
(void *) sysinfo_value("sram.address.physical"), |
(void *) sram_virt_addr, |
sysinfo_value("sram.area.size") / PAGE_SIZE, |
AS_AREA_READ | AS_AREA_WRITE |
); |
if (result != 0) { |
printf("SGCN: uspace driver couldn't map physical memory: %d\n", |
result); |
} |
sram_virt_addr = (uintptr_t) as_get_mappable_page(sysinfo_value("sram.area.size")); |
if (physmem_map((void *) sysinfo_value("sram.address.physical"), |
(void *) sram_virt_addr, sysinfo_value("sram.area.size") / PAGE_SIZE, |
AS_AREA_READ | AS_AREA_WRITE) != 0) |
return -1; |
serial_console_init(sgcn_putc, WIDTH, HEIGHT); |
sram_buffer_offset = sysinfo_value("sram.buffer.offset"); |
async_set_client_connection(sgcn_client_connection); |
async_set_client_connection(serial_client_connection); |
return 0; |
} |
//branches/tracing/uspace/srv/fb/ski.h |
---|
0,0 → 1,46 |
/* |
* Copyright (c) 2008 Jiri Svoboda |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup skifb |
* @brief HelenOS ski text console. |
* @ingroup fbs |
* @{ |
*/ |
/** @file |
*/ |
#ifndef FB_SKI_H_ |
#define FB_SKI_H_ |
extern int ski_init(void); |
#endif |
/** @} |
*/ |
//branches/tracing/uspace/srv/fb/ppm.c |
---|
92,23 → 92,23 |
int i; |
unsigned int color; |
unsigned int coef; |
/* Read magic */ |
if (data[0] != 'P' || data[1] != '6') |
if ((data[0] != 'P') || (data[1] != '6')) |
return EINVAL; |
data+=2; |
data += 2; |
skip_whitespace(&data); |
read_num(&data, &width); |
skip_whitespace(&data); |
read_num(&data,&height); |
read_num(&data, &height); |
skip_whitespace(&data); |
read_num(&data,&maxcolor); |
read_num(&data, &maxcolor); |
data++; |
if (maxcolor == 0 || maxcolor > 255 || width * height > datasz) { |
if ((maxcolor == 0) || (maxcolor > 255) || (width * height > datasz)) |
return EINVAL; |
} |
coef = 255 / maxcolor; |
if (coef * maxcolor > 255) |
coef -= 1; |
125,6 → 125,6 |
(*putpixel)(vport, sx + (i % width), sy + (i / width), color); |
data += 3; |
} |
return 0; |
} |
//branches/tracing/uspace/srv/fb/fb.h |
---|
29,7 → 29,7 |
/** @addtogroup fb |
* @ingroup fbs |
* @{ |
*/ |
*/ |
/** @file |
*/ |
36,8 → 36,10 |
#ifndef FB_FB_H_ |
#define FB_FB_H_ |
typedef void (* putpixel_cb_t)(void *, unsigned int, unsigned int, int); |
#include <stdint.h> |
typedef void (* putpixel_cb_t)(void *, unsigned int, unsigned int, uint32_t); |
extern int fb_init(void); |
#endif |
//branches/tracing/uspace/srv/fb/ega.c |
---|
49,6 → 49,9 |
#include <ipc/ns.h> |
#include <ipc/services.h> |
#include <libarch/ddi.h> |
#include <console/style.h> |
#include <console/color.h> |
#include <sys/types.h> |
#include "ega.h" |
#include "../console/screenbuffer.h" |
61,26 → 64,27 |
saved_screen saved_screens[MAX_SAVED_SCREENS]; |
#define EGA_IO_ADDRESS 0x3d4 |
#define EGA_IO_BASE ((ioport8_t *) 0x3d4) |
#define EGA_IO_SIZE 2 |
int ega_normal_color=0x0f; |
int ega_inverted_color=0xf0; |
int ega_normal_color = 0x0f; |
int ega_inverted_color = 0xf0; |
#define NORMAL_COLOR ega_normal_color |
#define INVERTED_COLOR ega_inverted_color |
#define EGA_STYLE(fg,bg) ((fg) > (bg) ? NORMAL_COLOR : INVERTED_COLOR) |
/* Allow only 1 connection */ |
static int client_connected = 0; |
static unsigned int scr_width; |
static unsigned int scr_height; |
static char *scr_addr; |
static uint8_t *scr_addr; |
static unsigned int style; |
static unsigned attr_to_ega_style(const attrs_t *a); |
static uint8_t ega_glyph(wchar_t ch); |
static void clrscr(void) |
{ |
int i; |
97,10 → 101,10 |
ega_cursor = col + scr_width * row; |
outb(EGA_IO_ADDRESS, 0xe); |
outb(EGA_IO_ADDRESS + 1, (ega_cursor >> 8) & 0xff); |
outb(EGA_IO_ADDRESS, 0xf); |
outb(EGA_IO_ADDRESS + 1, ega_cursor & 0xff); |
pio_write_8(EGA_IO_BASE, 0xe); |
pio_write_8(EGA_IO_BASE + 1, (ega_cursor >> 8) & 0xff); |
pio_write_8(EGA_IO_BASE, 0xf); |
pio_write_8(EGA_IO_BASE + 1, ega_cursor & 0xff); |
} |
static void cursor_disable(void) |
107,10 → 111,10 |
{ |
uint8_t stat; |
outb(EGA_IO_ADDRESS, 0xa); |
stat=inb(EGA_IO_ADDRESS + 1); |
outb(EGA_IO_ADDRESS, 0xa); |
outb(EGA_IO_ADDRESS + 1, stat | (1 << 5)); |
pio_write_8(EGA_IO_BASE, 0xa); |
stat = pio_read_8(EGA_IO_BASE + 1); |
pio_write_8(EGA_IO_BASE, 0xa); |
pio_write_8(EGA_IO_BASE + 1, stat | (1 << 5)); |
} |
static void cursor_enable(void) |
117,10 → 121,10 |
{ |
uint8_t stat; |
outb(EGA_IO_ADDRESS, 0xa); |
stat=inb(EGA_IO_ADDRESS + 1); |
outb(EGA_IO_ADDRESS, 0xa); |
outb(EGA_IO_ADDRESS + 1, stat & (~(1 << 5))); |
pio_write_8(EGA_IO_BASE, 0xa); |
stat = pio_read_8(EGA_IO_BASE + 1); |
pio_write_8(EGA_IO_BASE, 0xa); |
pio_write_8(EGA_IO_BASE + 1, stat & (~(1 << 5))); |
} |
static void scroll(int rows) |
127,13 → 131,13 |
{ |
int i; |
if (rows > 0) { |
memcpy(scr_addr, ((char *) scr_addr) + rows * scr_width * 2, |
memmove(scr_addr, ((char *) scr_addr) + rows * scr_width * 2, |
scr_width * scr_height * 2 - rows * scr_width * 2); |
for (i = 0; i < rows * scr_width; i++) |
(((short *) scr_addr) + scr_width * scr_height - rows * |
scr_width)[i] = ((style << 8) + ' '); |
} else if (rows < 0) { |
memcpy(((char *)scr_addr) - rows * scr_width * 2, scr_addr, |
memmove(((char *)scr_addr) - rows * scr_width * 2, scr_addr, |
scr_width * scr_height * 2 + rows * scr_width * 2); |
for (i = 0; i < -rows * scr_width; i++) |
((short *)scr_addr)[i] = ((style << 8 ) + ' '); |
140,22 → 144,38 |
} |
} |
static void printchar(char c, unsigned int row, unsigned int col) |
static void printchar(wchar_t c, unsigned int row, unsigned int col) |
{ |
scr_addr[(row * scr_width + col) * 2] = c; |
scr_addr[(row * scr_width + col) * 2] = ega_glyph(c); |
scr_addr[(row * scr_width + col) * 2 + 1] = style; |
cursor_goto(row, col + 1); |
} |
static void draw_text_data(keyfield_t *data) |
/** Draw text data to viewport. |
* |
* @param vport Viewport id |
* @param data Text data. |
* @param x Leftmost column of the area. |
* @param y Topmost row of the area. |
* @param w Number of rows. |
* @param h Number of columns. |
*/ |
static void draw_text_data(keyfield_t *data, unsigned int x, |
unsigned int y, unsigned int w, unsigned int h) |
{ |
int i; |
unsigned int i, j; |
keyfield_t *field; |
uint8_t *dp; |
for (i = 0; i < scr_width * scr_height; i++) { |
scr_addr[i * 2] = data[i].character; |
scr_addr[i * 2 + 1] = EGA_STYLE(data[i].style.fg_color, |
data[i].style.bg_color); |
for (j = 0; j < h; j++) { |
for (i = 0; i < w; i++) { |
field = &data[j * w + i]; |
dp = &scr_addr[2 * ((y + j) * scr_width + (x + i))]; |
dp[0] = ega_glyph(field->character); |
dp[1] = attr_to_ega_style(&field->attrs); |
} |
} |
} |
184,15 → 204,68 |
return i; |
} |
static int style_to_ega_style(int style) |
{ |
unsigned int ega_style; |
switch (style) { |
case STYLE_NORMAL: |
ega_style = INVERTED_COLOR; |
break; |
case STYLE_EMPHASIS: |
ega_style = INVERTED_COLOR | 4; |
break; |
default: |
return INVERTED_COLOR; |
} |
return ega_style; |
} |
static unsigned int color_to_ega_style(int fg_color, int bg_color, int attr) |
{ |
unsigned int style; |
style = (fg_color & 7) | ((bg_color & 7) << 4); |
if (attr & CATTR_BRIGHT) |
style = style | 0x08; |
return style; |
} |
static unsigned int rgb_to_ega_style(uint32_t fg, uint32_t bg) |
{ |
return (fg > bg) ? NORMAL_COLOR : INVERTED_COLOR; |
} |
static unsigned attr_to_ega_style(const attrs_t *a) |
{ |
switch (a->t) { |
case at_style: return style_to_ega_style(a->a.s.style); |
case at_rgb: return rgb_to_ega_style(a->a.r.fg_color, a->a.r.bg_color); |
case at_idx: return color_to_ega_style(a->a.i.fg_color, |
a->a.i.bg_color, a->a.i.flags); |
default: return INVERTED_COLOR; |
} |
} |
static uint8_t ega_glyph(wchar_t ch) |
{ |
if (ch >= 0 && ch < 128) |
return ch; |
return '?'; |
} |
static void ega_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
int retval; |
ipc_callid_t callid; |
ipc_call_t call; |
char c; |
unsigned int row, col; |
int bgcolor,fgcolor; |
wchar_t c; |
unsigned int row, col, w, h; |
int bg_color, fg_color, attr; |
uint32_t bg_rgb, fg_rgb; |
keyfield_t *interbuf = NULL; |
size_t intersize = 0; |
int i; |
223,11 → 296,19 |
retval = EINVAL; |
break; |
case FB_DRAW_TEXT_DATA: |
col = IPC_GET_ARG1(call); |
row = IPC_GET_ARG2(call); |
w = IPC_GET_ARG3(call); |
h = IPC_GET_ARG4(call); |
if (!interbuf) { |
retval = EINVAL; |
break; |
} |
draw_text_data(interbuf); |
if (col + w > scr_width || row + h > scr_height) { |
retval = EINVAL; |
break; |
} |
draw_text_data(interbuf, col, row, w, h); |
retval = 0; |
break; |
case FB_GET_CSIZE: |
268,7 → 349,7 |
retval = 0; |
break; |
case FB_CURSOR_VISIBILITY: |
if(IPC_GET_ARG1(call)) |
if (IPC_GET_ARG1(call)) |
cursor_enable(); |
else |
cursor_disable(); |
275,11 → 356,22 |
retval = 0; |
break; |
case FB_SET_STYLE: |
fgcolor = IPC_GET_ARG1(call); |
bgcolor = IPC_GET_ARG2(call); |
style = EGA_STYLE(fgcolor, bgcolor); |
style = style_to_ega_style(IPC_GET_ARG1(call)); |
retval = 0; |
break; |
case FB_SET_COLOR: |
fg_color = IPC_GET_ARG1(call); |
bg_color = IPC_GET_ARG2(call); |
attr = IPC_GET_ARG3(call); |
style = color_to_ega_style(fg_color, bg_color, attr); |
retval = 0; |
break; |
case FB_SET_RGB_COLOR: |
fg_rgb = IPC_GET_ARG1(call); |
bg_rgb = IPC_GET_ARG2(call); |
style = rgb_to_ega_style(fg_rgb, bg_rgb); |
retval = 0; |
break; |
case FB_VP_DRAW_PIXMAP: |
i = IPC_GET_ARG2(call); |
retval = print_screen(i); |
299,9 → 391,12 |
} |
retval = 0; |
break; |
case FB_SCREEN_YIELD: |
case FB_SCREEN_RECLAIM: |
retval = EOK; |
break; |
default: |
retval = ENOENT; |
retval = EINVAL; |
} |
ipc_answer_0(callid, retval); |
} |
315,20 → 410,22 |
ega_ph_addr = (void *) sysinfo_value("fb.address.physical"); |
scr_width = sysinfo_value("fb.width"); |
scr_height = sysinfo_value("fb.height"); |
if(sysinfo_value("fb.blinking")) |
{ |
ega_normal_color&=0x77; |
ega_inverted_color&=0x77; |
if (sysinfo_value("fb.blinking")) { |
ega_normal_color &= 0x77; |
ega_inverted_color &= 0x77; |
} |
style = NORMAL_COLOR; |
iospace_enable(task_get_id(), (void *) EGA_IO_ADDRESS, 2); |
iospace_enable(task_get_id(), (void *) EGA_IO_BASE, 2); |
sz = scr_width * scr_height * 2; |
scr_addr = as_get_mappable_page(sz); |
physmem_map(ega_ph_addr, scr_addr, ALIGN_UP(sz, PAGE_SIZE) >> |
PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE); |
if (physmem_map(ega_ph_addr, scr_addr, ALIGN_UP(sz, PAGE_SIZE) >> |
PAGE_WIDTH, AS_AREA_READ | AS_AREA_WRITE) != 0) |
return -1; |
async_set_client_connection(ega_client_connection); |
336,6 → 433,6 |
} |
/** |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/fb/Makefile |
---|
29,10 → 29,9 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I../libipc/include |
47,35 → 46,43 |
main.c \ |
ppm.c |
ifneq ($(ARCH), ia64) |
ifneq ($(UARCH),ia64) |
SOURCES += fb.c \ |
font-8x16.c |
CFLAGS += -DFB_ENABLED |
endif |
ifeq ($(ARCH), ia32) |
ifeq ($(UARCH),ia32) |
SOURCES += ega.c |
CFLAGS += -DEGA_ENABLED |
endif |
ifeq ($(ARCH), ia64) |
SOURCES += ega.c |
ifeq ($(UARCH),ia64) |
SOURCES += ega.c \ |
ski.c \ |
serial_console.c |
CFLAGS += -DSKI_ENABLED |
CFLAGS += -DEGA_ENABLED |
endif |
ifeq ($(ARCH), amd64) |
ifeq ($(UARCH),amd64) |
SOURCES += ega.c |
CFLAGS += -DEGA_ENABLED |
endif |
ifeq ($(ARCH), mips32) |
ifeq ($(UARCH),mips32) |
SOURCES += msim.c \ |
serial_console.c |
CFLAGS += -DMSIM_ENABLED -DFB_INVERT_ENDIAN |
serial_console.c |
CFLAGS += -DMSIM_ENABLED |
endif |
ifeq ($(ARCH), sparc64) |
ifeq ($(UARCH),sparc64) |
SOURCES += sgcn.c \ |
serial_console.c |
serial_console.c |
CFLAGS += -DSGCN_ENABLED |
endif |
CFLAGS += -D$(ARCH) |
CFLAGS += -D$(UARCH) |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
87,13 → 94,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/srv/fs/tmpfs/tmpfs.h |
---|
44,6 → 44,9 |
#define dprintf(...) printf(__VA_ARGS__) |
#endif |
#define TMPFS_NODE(node) ((node) ? (tmpfs_node_t *)(node)->data : NULL) |
#define FS_NODE(node) ((node) ? (node)->bp : NULL) |
typedef enum { |
TMPFS_NONE, |
TMPFS_FILE, |
50,22 → 53,33 |
TMPFS_DIRECTORY |
} tmpfs_dentry_type_t; |
/* forward declaration */ |
struct tmpfs_node; |
typedef struct tmpfs_dentry { |
link_t link; /**< Linkage for the list of siblings. */ |
struct tmpfs_node *node;/**< Back pointer to TMPFS node. */ |
char *name; /**< Name of dentry. */ |
} tmpfs_dentry_t; |
typedef struct tmpfs_node { |
fs_node_t *bp; /**< Back pointer to the FS node. */ |
fs_index_t index; /**< TMPFS node index. */ |
link_t dh_link; /**< Dentries hash table link. */ |
struct tmpfs_dentry *sibling; |
struct tmpfs_dentry *child; |
hash_table_t names; /**< All names linking to this TMPFS node. */ |
dev_handle_t dev_handle;/**< Device handle. */ |
link_t nh_link; /**< Nodes hash table link. */ |
tmpfs_dentry_type_t type; |
unsigned lnkcnt; /**< Link count. */ |
size_t size; /**< File size if type is TMPFS_FILE. */ |
void *data; /**< File content's if type is TMPFS_FILE. */ |
} tmpfs_dentry_t; |
link_t cs_head; /**< Head of child's siblings list. */ |
} tmpfs_node_t; |
extern fs_reg_t tmpfs_reg; |
extern libfs_ops_t tmpfs_libfs_ops; |
extern bool tmpfs_init(void); |
extern void tmpfs_mounted(ipc_callid_t, ipc_call_t *); |
extern void tmpfs_mount(ipc_callid_t, ipc_call_t *); |
extern void tmpfs_lookup(ipc_callid_t, ipc_call_t *); |
//branches/tracing/uspace/srv/fs/tmpfs/tmpfs_dump.c |
---|
55,7 → 55,7 |
static bool |
tmpfs_restore_recursion(int dev, off_t *bufpos, size_t *buflen, off_t *pos, |
tmpfs_dentry_t *parent) |
fs_node_t *pfn) |
{ |
struct rdentry entry; |
libfs_ops_t *ops = &tmpfs_libfs_ops; |
63,7 → 63,8 |
do { |
char *fname; |
tmpfs_dentry_t *node; |
fs_node_t *fn; |
tmpfs_node_t *nodep; |
uint32_t size; |
if (block_read(dev, bufpos, buflen, pos, &entry, sizeof(entry), |
80,8 → 81,8 |
if (fname == NULL) |
return false; |
node = (tmpfs_dentry_t *) ops->create(dev, L_FILE); |
if (node == NULL) { |
fn = ops->create(dev, L_FILE); |
if (fn == NULL) { |
free(fname); |
return false; |
} |
88,15 → 89,15 |
if (block_read(dev, bufpos, buflen, pos, fname, |
entry.len, TMPFS_BLOCK_SIZE) != EOK) { |
ops->destroy((void *) node); |
ops->destroy(fn); |
free(fname); |
return false; |
} |
fname[entry.len] = 0; |
rc = ops->link((void *) parent, (void *) node, fname); |
rc = ops->link(pfn, fn, fname); |
if (rc != EOK) { |
ops->destroy((void *) node); |
ops->destroy(fn); |
free(fname); |
return false; |
} |
108,12 → 109,13 |
size = uint32_t_le2host(size); |
node->data = malloc(size); |
if (node->data == NULL) |
nodep = TMPFS_NODE(fn); |
nodep->data = malloc(size); |
if (nodep->data == NULL) |
return false; |
node->size = size; |
if (block_read(dev, bufpos, buflen, pos, node->data, |
nodep->size = size; |
if (block_read(dev, bufpos, buflen, pos, nodep->data, |
size, TMPFS_BLOCK_SIZE) != EOK) |
return false; |
123,8 → 125,8 |
if (fname == NULL) |
return false; |
node = (tmpfs_dentry_t *) ops->create(dev, L_DIRECTORY); |
if (node == NULL) { |
fn = ops->create(dev, L_DIRECTORY); |
if (fn == NULL) { |
free(fname); |
return false; |
} |
131,15 → 133,15 |
if (block_read(dev, bufpos, buflen, pos, fname, |
entry.len, TMPFS_BLOCK_SIZE) != EOK) { |
ops->destroy((void *) node); |
ops->destroy(fn); |
free(fname); |
return false; |
} |
fname[entry.len] = 0; |
rc = ops->link((void *) parent, (void *) node, fname); |
rc = ops->link(pfn, fn, fname); |
if (rc != EOK) { |
ops->destroy((void *) node); |
ops->destroy(fn); |
free(fname); |
return false; |
} |
146,7 → 148,7 |
free(fname); |
if (!tmpfs_restore_recursion(dev, bufpos, buflen, pos, |
node)) |
fn)) |
return false; |
break; |
177,7 → 179,7 |
goto error; |
tag[5] = 0; |
if (strcmp(tag, "TMPFS") != 0) |
if (str_cmp(tag, "TMPFS") != 0) |
goto error; |
if (!tmpfs_restore_recursion(dev, &bufpos, &buflen, &pos, |
//branches/tracing/uspace/srv/fs/tmpfs/tmpfs.c |
---|
55,16 → 55,6 |
vfs_info_t tmpfs_vfs_info = { |
.name = "tmpfs", |
.ops = { |
[IPC_METHOD_TO_VFS_OP(VFS_LOOKUP)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_READ)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_WRITE)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_TRUNCATE)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_MOUNT)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_MOUNTED)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_UNMOUNT)] = VFS_OP_NULL, |
[IPC_METHOD_TO_VFS_OP(VFS_DESTROY)] = VFS_OP_DEFINED, |
} |
}; |
fs_reg_t tmpfs_reg; |
136,24 → 126,26 |
int main(int argc, char **argv) |
{ |
int vfs_phone; |
printf(NAME ": HelenOS TMPFS file system server\n"); |
vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0, 0); |
while (vfs_phone < EOK) { |
usleep(10000); |
vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0, 0); |
if (!tmpfs_init()) { |
printf(NAME ": failed to initialize TMPFS\n"); |
return -1; |
} |
int vfs_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_VFS, 0, 0); |
if (vfs_phone < EOK) { |
printf(NAME ": Unable to connect to VFS\n"); |
return -1; |
} |
int rc; |
rc = fs_register(vfs_phone, &tmpfs_reg, &tmpfs_vfs_info, |
int rc = fs_register(vfs_phone, &tmpfs_reg, &tmpfs_vfs_info, |
tmpfs_connection); |
if (rc != EOK) { |
printf(NAME ": Failed to register file system (%d)\n", rc); |
return rc; |
} |
printf(NAME ": Accepting connections\n"); |
async_manager(); |
/* not reached */ |
//branches/tracing/uspace/srv/fs/tmpfs/tmpfs_ops.c |
---|
54,55 → 54,50 |
#define min(a, b) ((a) < (b) ? (a) : (b)) |
#define max(a, b) ((a) > (b) ? (a) : (b)) |
#define DENTRIES_BUCKETS 256 |
#define NODES_BUCKETS 256 |
#define NAMES_BUCKETS 4 |
/** All root nodes have index 0. */ |
#define TMPFS_SOME_ROOT 0 |
/** Global counter for assigning node indices. Shared by all instances. */ |
fs_index_t tmpfs_next_index = 1; |
/* |
* For now, we don't distinguish between different dev_handles/instances. All |
* requests resolve to the only instance, rooted in the following variable. |
*/ |
static tmpfs_dentry_t *root; |
#define TMPFS_DEV 0 /**< Dummy device handle for TMPFS */ |
/* |
* Implementation of the libfs interface. |
*/ |
/* Forward declarations of static functions. */ |
static void *tmpfs_match(void *, const char *); |
static void *tmpfs_node_get(dev_handle_t, fs_index_t); |
static void tmpfs_node_put(void *); |
static void *tmpfs_create_node(dev_handle_t, int); |
static int tmpfs_link_node(void *, void *, const char *); |
static int tmpfs_unlink_node(void *, void *); |
static int tmpfs_destroy_node(void *); |
static fs_node_t *tmpfs_match(fs_node_t *, const char *); |
static fs_node_t *tmpfs_node_get(dev_handle_t, fs_index_t); |
static void tmpfs_node_put(fs_node_t *); |
static fs_node_t *tmpfs_create_node(dev_handle_t, int); |
static int tmpfs_link_node(fs_node_t *, fs_node_t *, const char *); |
static int tmpfs_unlink_node(fs_node_t *, fs_node_t *, const char *); |
static int tmpfs_destroy_node(fs_node_t *); |
/* Implementation of helper functions. */ |
static fs_index_t tmpfs_index_get(void *nodep) |
static fs_index_t tmpfs_index_get(fs_node_t *fn) |
{ |
return ((tmpfs_dentry_t *) nodep)->index; |
return TMPFS_NODE(fn)->index; |
} |
static size_t tmpfs_size_get(void *nodep) |
static size_t tmpfs_size_get(fs_node_t *fn) |
{ |
return ((tmpfs_dentry_t *) nodep)->size; |
return TMPFS_NODE(fn)->size; |
} |
static unsigned tmpfs_lnkcnt_get(void *nodep) |
static unsigned tmpfs_lnkcnt_get(fs_node_t *fn) |
{ |
return ((tmpfs_dentry_t *) nodep)->lnkcnt; |
return TMPFS_NODE(fn)->lnkcnt; |
} |
static bool tmpfs_has_children(void *nodep) |
static bool tmpfs_has_children(fs_node_t *fn) |
{ |
return ((tmpfs_dentry_t *) nodep)->child != NULL; |
return !list_empty(&TMPFS_NODE(fn)->cs_head); |
} |
static void *tmpfs_root_get(dev_handle_t dev_handle) |
static fs_node_t *tmpfs_root_get(dev_handle_t dev_handle) |
{ |
return root; |
return tmpfs_node_get(dev_handle, TMPFS_SOME_ROOT); |
} |
static char tmpfs_plb_get_char(unsigned pos) |
110,14 → 105,14 |
return tmpfs_reg.plb_ro[pos % PLB_SIZE]; |
} |
static bool tmpfs_is_directory(void *nodep) |
static bool tmpfs_is_directory(fs_node_t *fn) |
{ |
return ((tmpfs_dentry_t *) nodep)->type == TMPFS_DIRECTORY; |
return TMPFS_NODE(fn)->type == TMPFS_DIRECTORY; |
} |
static bool tmpfs_is_file(void *nodep) |
static bool tmpfs_is_file(fs_node_t *fn) |
{ |
return ((tmpfs_dentry_t *) nodep)->type == TMPFS_FILE; |
return TMPFS_NODE(fn)->type == TMPFS_FILE; |
} |
/** libfs operations */ |
139,259 → 134,230 |
.is_file = tmpfs_is_file |
}; |
/** Hash table of all directory entries. */ |
hash_table_t dentries; |
/** Hash table of all TMPFS nodes. */ |
hash_table_t nodes; |
/* Implementation of hash table interface for the dentries hash table. */ |
static hash_index_t dentries_hash(unsigned long *key) |
{ |
return *key % DENTRIES_BUCKETS; |
} |
#define NODES_KEY_INDEX 0 |
#define NODES_KEY_DEV 1 |
static int dentries_compare(unsigned long *key, hash_count_t keys, |
link_t *item) |
/* Implementation of hash table interface for the nodes hash table. */ |
static hash_index_t nodes_hash(unsigned long key[]) |
{ |
tmpfs_dentry_t *dentry = hash_table_get_instance(item, tmpfs_dentry_t, |
dh_link); |
return dentry->index == *key; |
return key[NODES_KEY_INDEX] % NODES_BUCKETS; |
} |
static void dentries_remove_callback(link_t *item) |
static int nodes_compare(unsigned long key[], hash_count_t keys, link_t *item) |
{ |
tmpfs_node_t *nodep = hash_table_get_instance(item, tmpfs_node_t, |
nh_link); |
return (nodep->index == key[NODES_KEY_INDEX] && |
nodep->dev_handle == key[NODES_KEY_DEV]); |
} |
/** TMPFS dentries hash table operations. */ |
hash_table_operations_t dentries_ops = { |
.hash = dentries_hash, |
.compare = dentries_compare, |
.remove_callback = dentries_remove_callback |
}; |
fs_index_t tmpfs_next_index = 1; |
typedef struct { |
char *name; |
tmpfs_dentry_t *parent; |
link_t link; |
} tmpfs_name_t; |
/* Implementation of hash table interface for the names hash table. */ |
static hash_index_t names_hash(unsigned long *key) |
static void nodes_remove_callback(link_t *item) |
{ |
tmpfs_dentry_t *dentry = (tmpfs_dentry_t *) *key; |
return dentry->index % NAMES_BUCKETS; |
} |
static int names_compare(unsigned long *key, hash_count_t keys, link_t *item) |
{ |
tmpfs_dentry_t *dentry = (tmpfs_dentry_t *) *key; |
tmpfs_name_t *namep = hash_table_get_instance(item, tmpfs_name_t, |
link); |
return dentry == namep->parent; |
} |
static void names_remove_callback(link_t *item) |
{ |
tmpfs_name_t *namep = hash_table_get_instance(item, tmpfs_name_t, |
link); |
free(namep->name); |
free(namep); |
} |
/** TMPFS node names hash table operations. */ |
static hash_table_operations_t names_ops = { |
.hash = names_hash, |
.compare = names_compare, |
.remove_callback = names_remove_callback |
/** TMPFS nodes hash table operations. */ |
hash_table_operations_t nodes_ops = { |
.hash = nodes_hash, |
.compare = nodes_compare, |
.remove_callback = nodes_remove_callback |
}; |
static void tmpfs_name_initialize(tmpfs_name_t *namep) |
static void tmpfs_node_initialize(tmpfs_node_t *nodep) |
{ |
namep->name = NULL; |
namep->parent = NULL; |
link_initialize(&namep->link); |
nodep->bp = NULL; |
nodep->index = 0; |
nodep->dev_handle = 0; |
nodep->type = TMPFS_NONE; |
nodep->lnkcnt = 0; |
nodep->size = 0; |
nodep->data = NULL; |
link_initialize(&nodep->nh_link); |
list_initialize(&nodep->cs_head); |
} |
static bool tmpfs_dentry_initialize(tmpfs_dentry_t *dentry) |
static void tmpfs_dentry_initialize(tmpfs_dentry_t *dentryp) |
{ |
dentry->index = 0; |
dentry->sibling = NULL; |
dentry->child = NULL; |
dentry->type = TMPFS_NONE; |
dentry->lnkcnt = 0; |
dentry->size = 0; |
dentry->data = NULL; |
link_initialize(&dentry->dh_link); |
return (bool)hash_table_create(&dentry->names, NAMES_BUCKETS, 1, |
&names_ops); |
link_initialize(&dentryp->link); |
dentryp->name = NULL; |
dentryp->node = NULL; |
} |
static bool tmpfs_init(void) |
bool tmpfs_init(void) |
{ |
if (!hash_table_create(&dentries, DENTRIES_BUCKETS, 1, &dentries_ops)) |
if (!hash_table_create(&nodes, NODES_BUCKETS, 2, &nodes_ops)) |
return false; |
root = (tmpfs_dentry_t *) tmpfs_create_node(TMPFS_DEV, L_DIRECTORY); |
if (!root) { |
hash_table_destroy(&dentries); |
return false; |
} |
root->lnkcnt = 0; /* FS root is not linked */ |
return true; |
} |
/** Compare one component of path to a directory entry. |
* |
* @param parentp Pointer to node from which we descended. |
* @param childp Pointer to node to compare the path component with. |
* @param component Array of characters holding component name. |
* |
* @return True on match, false otherwise. |
*/ |
static bool |
tmpfs_match_one(tmpfs_dentry_t *parentp, tmpfs_dentry_t *childp, |
const char *component) |
static bool tmpfs_instance_init(dev_handle_t dev_handle) |
{ |
unsigned long key = (unsigned long) parentp; |
link_t *hlp = hash_table_find(&childp->names, &key); |
assert(hlp); |
tmpfs_name_t *namep = hash_table_get_instance(hlp, tmpfs_name_t, link); |
return !strcmp(namep->name, component); |
fs_node_t *rfn; |
rfn = tmpfs_create_node(dev_handle, L_DIRECTORY); |
if (!rfn) |
return false; |
TMPFS_NODE(rfn)->lnkcnt = 0; /* FS root is not linked */ |
return true; |
} |
void *tmpfs_match(void *prnt, const char *component) |
fs_node_t *tmpfs_match(fs_node_t *pfn, const char *component) |
{ |
tmpfs_dentry_t *parentp = (tmpfs_dentry_t *) prnt; |
tmpfs_dentry_t *childp = parentp->child; |
tmpfs_node_t *parentp = TMPFS_NODE(pfn); |
link_t *lnk; |
while (childp && !tmpfs_match_one(parentp, childp, component)) |
childp = childp->sibling; |
for (lnk = parentp->cs_head.next; lnk != &parentp->cs_head; |
lnk = lnk->next) { |
tmpfs_dentry_t *dentryp = list_get_instance(lnk, tmpfs_dentry_t, |
link); |
if (!str_cmp(dentryp->name, component)) |
return FS_NODE(dentryp->node); |
} |
return (void *) childp; |
return NULL; |
} |
void * |
tmpfs_node_get(dev_handle_t dev_handle, fs_index_t index) |
fs_node_t *tmpfs_node_get(dev_handle_t dev_handle, fs_index_t index) |
{ |
unsigned long key = index; |
link_t *lnk = hash_table_find(&dentries, &key); |
unsigned long key[] = { |
[NODES_KEY_INDEX] = index, |
[NODES_KEY_DEV] = dev_handle |
}; |
link_t *lnk = hash_table_find(&nodes, key); |
if (!lnk) |
return NULL; |
return hash_table_get_instance(lnk, tmpfs_dentry_t, dh_link); |
return FS_NODE(hash_table_get_instance(lnk, tmpfs_node_t, nh_link)); |
} |
void tmpfs_node_put(void *node) |
void tmpfs_node_put(fs_node_t *fn) |
{ |
/* nothing to do */ |
} |
void *tmpfs_create_node(dev_handle_t dev_handle, int lflag) |
fs_node_t *tmpfs_create_node(dev_handle_t dev_handle, int lflag) |
{ |
assert((lflag & L_FILE) ^ (lflag & L_DIRECTORY)); |
tmpfs_dentry_t *node = malloc(sizeof(tmpfs_dentry_t)); |
if (!node) |
tmpfs_node_t *nodep = malloc(sizeof(tmpfs_node_t)); |
if (!nodep) |
return NULL; |
if (!tmpfs_dentry_initialize(node)) { |
free(node); |
tmpfs_node_initialize(nodep); |
nodep->bp = malloc(sizeof(fs_node_t)); |
if (!nodep->bp) { |
free(nodep); |
return NULL; |
} |
node->index = tmpfs_next_index++; |
nodep->bp->data = nodep; /* link the FS and TMPFS nodes */ |
if (!tmpfs_root_get(dev_handle)) |
nodep->index = TMPFS_SOME_ROOT; |
else |
nodep->index = tmpfs_next_index++; |
nodep->dev_handle = dev_handle; |
if (lflag & L_DIRECTORY) |
node->type = TMPFS_DIRECTORY; |
nodep->type = TMPFS_DIRECTORY; |
else |
node->type = TMPFS_FILE; |
nodep->type = TMPFS_FILE; |
/* Insert the new node into the dentry hash table. */ |
unsigned long key = node->index; |
hash_table_insert(&dentries, &key, &node->dh_link); |
return (void *) node; |
/* Insert the new node into the nodes hash table. */ |
unsigned long key[] = { |
[NODES_KEY_INDEX] = nodep->index, |
[NODES_KEY_DEV] = nodep->dev_handle |
}; |
hash_table_insert(&nodes, key, &nodep->nh_link); |
return FS_NODE(nodep); |
} |
int tmpfs_link_node(void *prnt, void *chld, const char *nm) |
int tmpfs_link_node(fs_node_t *pfn, fs_node_t *cfn, const char *nm) |
{ |
tmpfs_dentry_t *parentp = (tmpfs_dentry_t *) prnt; |
tmpfs_dentry_t *childp = (tmpfs_dentry_t *) chld; |
tmpfs_node_t *parentp = TMPFS_NODE(pfn); |
tmpfs_node_t *childp = TMPFS_NODE(cfn); |
tmpfs_dentry_t *dentryp; |
link_t *lnk; |
assert(parentp->type == TMPFS_DIRECTORY); |
tmpfs_name_t *namep = malloc(sizeof(tmpfs_name_t)); |
if (!namep) |
/* Check for duplicit entries. */ |
for (lnk = parentp->cs_head.next; lnk != &parentp->cs_head; |
lnk = lnk->next) { |
dentryp = list_get_instance(lnk, tmpfs_dentry_t, link); |
if (!str_cmp(dentryp->name, nm)) |
return EEXIST; |
} |
/* Allocate and initialize the dentry. */ |
dentryp = malloc(sizeof(tmpfs_dentry_t)); |
if (!dentryp) |
return ENOMEM; |
tmpfs_name_initialize(namep); |
size_t len = strlen(nm); |
namep->name = malloc(len + 1); |
if (!namep->name) { |
free(namep); |
tmpfs_dentry_initialize(dentryp); |
/* Populate and link the new dentry. */ |
size_t size = str_size(nm); |
dentryp->name = malloc(size + 1); |
if (!dentryp->name) { |
free(dentryp); |
return ENOMEM; |
} |
strcpy(namep->name, nm); |
namep->parent = parentp; |
str_cpy(dentryp->name, size + 1, nm); |
dentryp->node = childp; |
childp->lnkcnt++; |
list_append(&dentryp->link, &parentp->cs_head); |
unsigned long key = (unsigned long) parentp; |
hash_table_insert(&childp->names, &key, &namep->link); |
/* Insert the new node into the namespace. */ |
if (parentp->child) { |
tmpfs_dentry_t *tmp = parentp->child; |
while (tmp->sibling) |
tmp = tmp->sibling; |
tmp->sibling = childp; |
} else { |
parentp->child = childp; |
} |
return EOK; |
} |
int tmpfs_unlink_node(void *prnt, void *chld) |
int tmpfs_unlink_node(fs_node_t *pfn, fs_node_t *cfn, const char *nm) |
{ |
tmpfs_dentry_t *parentp = (tmpfs_dentry_t *)prnt; |
tmpfs_dentry_t *childp = (tmpfs_dentry_t *)chld; |
tmpfs_node_t *parentp = TMPFS_NODE(pfn); |
tmpfs_node_t *childp = NULL; |
tmpfs_dentry_t *dentryp; |
link_t *lnk; |
if (!parentp) |
return EBUSY; |
for (lnk = parentp->cs_head.next; lnk != &parentp->cs_head; |
lnk = lnk->next) { |
dentryp = list_get_instance(lnk, tmpfs_dentry_t, link); |
if (!str_cmp(dentryp->name, nm)) { |
childp = dentryp->node; |
assert(FS_NODE(childp) == cfn); |
break; |
} |
} |
if (childp->child) |
if (!childp) |
return ENOENT; |
if ((childp->lnkcnt == 1) && !list_empty(&childp->cs_head)) |
return ENOTEMPTY; |
if (parentp->child == childp) { |
parentp->child = childp->sibling; |
} else { |
/* TODO: consider doubly linked list for organizing siblings. */ |
tmpfs_dentry_t *tmp = parentp->child; |
while (tmp->sibling != childp) |
tmp = tmp->sibling; |
tmp->sibling = childp->sibling; |
} |
childp->sibling = NULL; |
unsigned long key = (unsigned long) parentp; |
hash_table_remove(&childp->names, &key, 1); |
list_remove(&dentryp->link); |
free(dentryp); |
childp->lnkcnt--; |
return EOK; |
} |
int tmpfs_destroy_node(void *nodep) |
int tmpfs_destroy_node(fs_node_t *fn) |
{ |
tmpfs_dentry_t *dentry = (tmpfs_dentry_t *) nodep; |
tmpfs_node_t *nodep = TMPFS_NODE(fn); |
assert(!dentry->lnkcnt); |
assert(!dentry->child); |
assert(!dentry->sibling); |
assert(!nodep->lnkcnt); |
assert(list_empty(&nodep->cs_head)); |
unsigned long key = dentry->index; |
hash_table_remove(&dentries, &key, 1); |
unsigned long key[] = { |
[NODES_KEY_INDEX] = nodep->index, |
[NODES_KEY_DEV] = nodep->dev_handle |
}; |
hash_table_remove(&nodes, key, 2); |
hash_table_destroy(&dentry->names); |
if (dentry->type == TMPFS_FILE) |
free(dentry->data); |
free(dentry); |
if (nodep->type == TMPFS_FILE) |
free(nodep->data); |
free(nodep->bp); |
free(nodep); |
return EOK; |
} |
399,20 → 365,44 |
{ |
dev_handle_t dev_handle = (dev_handle_t) IPC_GET_ARG1(*request); |
/* Initialize TMPFS. */ |
if (!root && !tmpfs_init()) { |
/* accept the mount options */ |
ipc_callid_t callid; |
size_t size; |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
char *opts = malloc(size + 1); |
if (!opts) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
ipcarg_t retval = ipc_data_write_finalize(callid, opts, size); |
if (retval != EOK) { |
ipc_answer_0(rid, retval); |
free(opts); |
return; |
} |
opts[size] = '\0'; |
if (dev_handle >= 0) { |
/* Initialize TMPFS instance. */ |
if (!tmpfs_instance_init(dev_handle)) { |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
tmpfs_node_t *rootp = TMPFS_NODE(tmpfs_root_get(dev_handle)); |
if (str_cmp(opts, "restore") == 0) { |
if (tmpfs_restore(dev_handle)) |
ipc_answer_3(rid, EOK, root->index, root->size, |
root->lnkcnt); |
ipc_answer_3(rid, EOK, rootp->index, rootp->size, |
rootp->lnkcnt); |
else |
ipc_answer_0(rid, ELIMIT); |
} else { |
ipc_answer_3(rid, EOK, root->index, root->size, root->lnkcnt); |
ipc_answer_3(rid, EOK, rootp->index, rootp->size, |
rootp->lnkcnt); |
} |
} |
438,24 → 428,27 |
off_t pos = (off_t)IPC_GET_ARG3(*request); |
/* |
* Lookup the respective dentry. |
* Lookup the respective TMPFS node. |
*/ |
link_t *hlp; |
unsigned long key = index; |
hlp = hash_table_find(&dentries, &key); |
unsigned long key[] = { |
[NODES_KEY_INDEX] = index, |
[NODES_KEY_DEV] = dev_handle, |
}; |
hlp = hash_table_find(&nodes, key); |
if (!hlp) { |
ipc_answer_0(rid, ENOENT); |
return; |
} |
tmpfs_dentry_t *dentry = hash_table_get_instance(hlp, tmpfs_dentry_t, |
dh_link); |
tmpfs_node_t *nodep = hash_table_get_instance(hlp, tmpfs_node_t, |
nh_link); |
/* |
* Receive the read request. |
*/ |
ipc_callid_t callid; |
size_t len; |
if (!ipc_data_read_receive(&callid, &len)) { |
size_t size; |
if (!ipc_data_read_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
462,15 → 455,16 |
} |
size_t bytes; |
if (dentry->type == TMPFS_FILE) { |
bytes = max(0, min(dentry->size - pos, len)); |
(void) ipc_data_read_finalize(callid, dentry->data + pos, |
if (nodep->type == TMPFS_FILE) { |
bytes = max(0, min(nodep->size - pos, size)); |
(void) ipc_data_read_finalize(callid, nodep->data + pos, |
bytes); |
} else { |
tmpfs_dentry_t *dentryp; |
link_t *lnk; |
int i; |
tmpfs_dentry_t *cur; |
assert(dentry->type == TMPFS_DIRECTORY); |
assert(nodep->type == TMPFS_DIRECTORY); |
/* |
* Yes, we really use O(n) algorithm here. |
477,24 → 471,21 |
* If it bothers someone, it could be fixed by introducing a |
* hash table. |
*/ |
for (i = 0, cur = dentry->child; i < pos && cur; i++, |
cur = cur->sibling) |
for (i = 0, lnk = nodep->cs_head.next; |
i < pos && lnk != &nodep->cs_head; |
i++, lnk = lnk->next) |
; |
if (!cur) { |
if (lnk == &nodep->cs_head) { |
ipc_answer_0(callid, ENOENT); |
ipc_answer_1(rid, ENOENT, 0); |
return; |
} |
unsigned long key = (unsigned long) dentry; |
link_t *hlp = hash_table_find(&cur->names, &key); |
assert(hlp); |
tmpfs_name_t *namep = hash_table_get_instance(hlp, tmpfs_name_t, |
link); |
dentryp = list_get_instance(lnk, tmpfs_dentry_t, link); |
(void) ipc_data_read_finalize(callid, namep->name, |
strlen(namep->name) + 1); |
(void) ipc_data_read_finalize(callid, dentryp->name, |
str_size(dentryp->name) + 1); |
bytes = 1; |
} |
511,24 → 502,27 |
off_t pos = (off_t)IPC_GET_ARG3(*request); |
/* |
* Lookup the respective dentry. |
* Lookup the respective TMPFS node. |
*/ |
link_t *hlp; |
unsigned long key = index; |
hlp = hash_table_find(&dentries, &key); |
unsigned long key[] = { |
[NODES_KEY_INDEX] = index, |
[NODES_KEY_DEV] = dev_handle |
}; |
hlp = hash_table_find(&nodes, key); |
if (!hlp) { |
ipc_answer_0(rid, ENOENT); |
return; |
} |
tmpfs_dentry_t *dentry = hash_table_get_instance(hlp, tmpfs_dentry_t, |
dh_link); |
tmpfs_node_t *nodep = hash_table_get_instance(hlp, tmpfs_node_t, |
nh_link); |
/* |
* Receive the write request. |
*/ |
ipc_callid_t callid; |
size_t len; |
if (!ipc_data_write_receive(&callid, &len)) { |
size_t size; |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
537,13 → 531,13 |
/* |
* Check whether the file needs to grow. |
*/ |
if (pos + len <= dentry->size) { |
if (pos + size <= nodep->size) { |
/* The file size is not changing. */ |
(void) ipc_data_write_finalize(callid, dentry->data + pos, len); |
ipc_answer_2(rid, EOK, len, dentry->size); |
(void) ipc_data_write_finalize(callid, nodep->data + pos, size); |
ipc_answer_2(rid, EOK, size, nodep->size); |
return; |
} |
size_t delta = (pos + len) - dentry->size; |
size_t delta = (pos + size) - nodep->size; |
/* |
* At this point, we are deliberately extremely straightforward and |
* simply realloc the contents of the file on every write that grows the |
551,18 → 545,18 |
* our heap allocator can save us and just grow the block whenever |
* possible. |
*/ |
void *newdata = realloc(dentry->data, dentry->size + delta); |
void *newdata = realloc(nodep->data, nodep->size + delta); |
if (!newdata) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_2(rid, EOK, 0, dentry->size); |
ipc_answer_2(rid, EOK, 0, nodep->size); |
return; |
} |
/* Clear any newly allocated memory in order to emulate gaps. */ |
memset(newdata + dentry->size, 0, delta); |
dentry->size += delta; |
dentry->data = newdata; |
(void) ipc_data_write_finalize(callid, dentry->data + pos, len); |
ipc_answer_2(rid, EOK, len, dentry->size); |
memset(newdata + nodep->size, 0, delta); |
nodep->size += delta; |
nodep->data = newdata; |
(void) ipc_data_write_finalize(callid, nodep->data + pos, size); |
ipc_answer_2(rid, EOK, size, nodep->size); |
} |
void tmpfs_truncate(ipc_callid_t rid, ipc_call_t *request) |
572,34 → 566,37 |
size_t size = (off_t)IPC_GET_ARG3(*request); |
/* |
* Lookup the respective dentry. |
* Lookup the respective TMPFS node. |
*/ |
link_t *hlp; |
unsigned long key = index; |
hlp = hash_table_find(&dentries, &key); |
unsigned long key[] = { |
[NODES_KEY_INDEX] = index, |
[NODES_KEY_DEV] = dev_handle |
}; |
hlp = hash_table_find(&nodes, key); |
if (!hlp) { |
ipc_answer_0(rid, ENOENT); |
return; |
} |
tmpfs_dentry_t *dentry = hash_table_get_instance(hlp, tmpfs_dentry_t, |
dh_link); |
tmpfs_node_t *nodep = hash_table_get_instance(hlp, tmpfs_node_t, |
nh_link); |
if (size == dentry->size) { |
if (size == nodep->size) { |
ipc_answer_0(rid, EOK); |
return; |
} |
void *newdata = realloc(dentry->data, size); |
void *newdata = realloc(nodep->data, size); |
if (!newdata) { |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
if (size > dentry->size) { |
size_t delta = size - dentry->size; |
memset(newdata + dentry->size, 0, delta); |
if (size > nodep->size) { |
size_t delta = size - nodep->size; |
memset(newdata + nodep->size, 0, delta); |
} |
dentry->size = size; |
dentry->data = newdata; |
nodep->size = size; |
nodep->data = newdata; |
ipc_answer_0(rid, EOK); |
} |
610,15 → 607,18 |
int rc; |
link_t *hlp; |
unsigned long key = index; |
hlp = hash_table_find(&dentries, &key); |
unsigned long key[] = { |
[NODES_KEY_INDEX] = index, |
[NODES_KEY_DEV] = dev_handle |
}; |
hlp = hash_table_find(&nodes, key); |
if (!hlp) { |
ipc_answer_0(rid, ENOENT); |
return; |
} |
tmpfs_dentry_t *dentry = hash_table_get_instance(hlp, tmpfs_dentry_t, |
dh_link); |
rc = tmpfs_destroy_node(dentry); |
tmpfs_node_t *nodep = hash_table_get_instance(hlp, tmpfs_node_t, |
nh_link); |
rc = tmpfs_destroy_node(FS_NODE(nodep)); |
ipc_answer_0(rid, rc); |
} |
//branches/tracing/uspace/srv/fs/tmpfs/Makefile |
---|
29,12 → 29,11 |
## Setup toolchain |
# |
include ../../../Makefile.config |
LIBC_PREFIX = ../../../lib/libc |
LIBFS_PREFIX = ../../../lib/libfs |
LIBBLOCK_PREFIX = ../../../lib/libblock |
SOFTINT_PREFIX = ../../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I $(LIBFS_PREFIX) -I $(LIBBLOCK_PREFIX) |
62,13 → 61,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/srv/fs/fat/fat.h |
---|
178,6 → 178,9 |
/** FAT in-core node. */ |
typedef struct fat_node { |
/** Back pointer to the FS node. */ |
fs_node_t *bp; |
futex_t lock; |
fat_node_type_t type; |
fat_idx_t *idx; |
//branches/tracing/uspace/srv/fs/fat/fat_dentry.c |
---|
62,15 → 62,18 |
int fat_dentry_namecmp(char *name, const char *component) |
{ |
int rc; |
size_t size; |
if (!(rc = stricmp(name, component))) |
return rc; |
if (!strchr(name, '.')) { |
if (!str_chr(name, '.')) { |
/* |
* There is no '.' in the name, so we know that there is enough |
* space for appending an extra '.' to name. |
*/ |
name[strlen(name)] = '.'; |
name[strlen(name) + 1] = '\0'; |
size = str_size(name); |
name[size] = '.'; |
name[size + 1] = '\0'; |
rc = stricmp(name, component); |
} |
return rc; |
111,37 → 114,51 |
void fat_dentry_name_get(const fat_dentry_t *d, char *buf) |
{ |
int i; |
unsigned int i; |
for (i = 0; i < FAT_NAME_LEN; i++) { |
if (d->name[i] == FAT_PAD) |
break; |
if (d->name[i] == FAT_DENTRY_E5_ESC) |
*buf++ = 0xe5; |
else |
*buf++ = d->name[i]; |
else { |
if (d->lcase & FAT_LCASE_LOWER_NAME) |
*buf++ = tolower(d->name[i]); |
else |
*buf++ = d->name[i]; |
} |
} |
if (d->ext[0] != FAT_PAD) |
*buf++ = '.'; |
for (i = 0; i < FAT_EXT_LEN; i++) { |
if (d->ext[i] == FAT_PAD) { |
*buf = '\0'; |
return; |
} |
if (d->ext[i] == FAT_DENTRY_E5_ESC) |
*buf++ = 0xe5; |
else |
*buf++ = d->ext[i]; |
else { |
if (d->lcase & FAT_LCASE_LOWER_EXT) |
*buf++ = tolower(d->ext[i]); |
else |
*buf++ = d->ext[i]; |
} |
} |
*buf = '\0'; |
} |
void fat_dentry_name_set(fat_dentry_t *d, const char *name) |
{ |
int i; |
unsigned int i; |
const char fake_ext[] = " "; |
bool lower_name = true; |
bool lower_ext = true; |
for (i = 0; i < FAT_NAME_LEN; i++) { |
switch ((uint8_t) *name) { |
case 0xe5: |
153,12 → 170,19 |
d->name[i] = FAT_PAD; |
break; |
default: |
if (isalpha(*name)) { |
if (!islower(*name)) |
lower_name = false; |
} |
d->name[i] = toupper(*name++); |
break; |
} |
} |
if (*name++ != '.') |
name = fake_ext; |
for (i = 0; i < FAT_EXT_LEN; i++) { |
switch ((uint8_t) *name) { |
case 0xe5: |
169,10 → 193,25 |
d->ext[i] = FAT_PAD; |
break; |
default: |
if (isalpha(*name)) { |
if (!islower(*name)) |
lower_ext = false; |
} |
d->ext[i] = toupper(*name++); |
break; |
} |
} |
if (lower_name) |
d->lcase |= FAT_LCASE_LOWER_NAME; |
else |
d->lcase &= ~FAT_LCASE_LOWER_NAME; |
if (lower_ext) |
d->lcase |= FAT_LCASE_LOWER_EXT; |
else |
d->lcase &= ~FAT_LCASE_LOWER_EXT; |
} |
fat_dentry_clsf_t fat_classify_dentry(const fat_dentry_t *d) |
//branches/tracing/uspace/srv/fs/fat/fat_dentry.h |
---|
47,6 → 47,9 |
#define FAT_ATTR_VOLLABEL (1 << 3) |
#define FAT_ATTR_SUBDIR (1 << 4) |
#define FAT_LCASE_LOWER_NAME 0x08 |
#define FAT_LCASE_LOWER_EXT 0x10 |
#define FAT_PAD ' ' |
#define FAT_DENTRY_UNUSED 0x00 |
65,7 → 68,7 |
uint8_t name[8]; |
uint8_t ext[3]; |
uint8_t attr; |
uint8_t reserved; |
uint8_t lcase; |
uint8_t ctime_fine; |
uint16_t ctime; |
uint16_t cdate; |
73,13 → 76,13 |
union { |
uint16_t eaidx; /* FAT12/FAT16 */ |
uint16_t firstc_hi; /* FAT32 */ |
}; |
} __attribute__ ((packed)); |
uint16_t mtime; |
uint16_t mdate; |
union { |
uint16_t firstc; /* FAT12/FAT16 */ |
uint16_t firstc_lo; /* FAT32 */ |
}; |
} __attribute__ ((packed)); |
uint32_t size; |
} __attribute__ ((packed)) fat_dentry_t; |
//branches/tracing/uspace/srv/fs/fat/fat.c |
---|
49,15 → 49,6 |
vfs_info_t fat_vfs_info = { |
.name = "fat", |
.ops = { |
[IPC_METHOD_TO_VFS_OP(VFS_LOOKUP)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_READ)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_WRITE)] = VFS_OP_NULL, |
[IPC_METHOD_TO_VFS_OP(VFS_TRUNCATE)] = VFS_OP_NULL, |
[IPC_METHOD_TO_VFS_OP(VFS_MOUNT)] = VFS_OP_NULL, |
[IPC_METHOD_TO_VFS_OP(VFS_MOUNTED)] = VFS_OP_DEFINED, |
[IPC_METHOD_TO_VFS_OP(VFS_UNMOUNT)] = VFS_OP_NULL, |
} |
}; |
fs_reg_t fat_reg; |
131,16 → 122,16 |
int vfs_phone; |
int rc; |
printf("FAT: HelenOS FAT file system server.\n"); |
printf("fat: HelenOS FAT file system server.\n"); |
rc = fat_idx_init(); |
if (rc != EOK) |
goto err; |
vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0, 0); |
while (vfs_phone < EOK) { |
usleep(10000); |
vfs_phone = ipc_connect_me_to(PHONE_NS, SERVICE_VFS, 0, 0); |
vfs_phone = ipc_connect_me_to_blocking(PHONE_NS, SERVICE_VFS, 0, 0); |
if (vfs_phone < EOK) { |
printf("fat: failed to connect to VFS\n"); |
return -1; |
} |
rc = fs_register(vfs_phone, &fat_reg, &fat_vfs_info, fat_connection); |
//branches/tracing/uspace/srv/fs/fat/fat_ops.c |
---|
55,6 → 55,9 |
#include <sys/mman.h> |
#include <align.h> |
#define FAT_NODE(node) ((node) ? (fat_node_t *) (node)->data : NULL) |
#define FS_NODE(node) ((node) ? (node)->bp : NULL) |
/** Futex protecting the list of cached free FAT nodes. */ |
static futex_t ffn_futex = FUTEX_INITIALIZER; |
64,6 → 67,7 |
static void fat_node_initialize(fat_node_t *node) |
{ |
futex_initialize(&node->lock, 1); |
node->bp = NULL; |
node->idx = NULL; |
node->type = 0; |
link_initialize(&node->ffn_link); |
108,6 → 112,7 |
static fat_node_t *fat_node_get_new(void) |
{ |
fs_node_t *fn; |
fat_node_t *nodep; |
futex_down(&ffn_futex); |
129,15 → 134,23 |
idxp_tmp->nodep = NULL; |
futex_up(&nodep->lock); |
futex_up(&idxp_tmp->lock); |
fn = FS_NODE(nodep); |
} else { |
skip_cache: |
/* Try to allocate a new node structure. */ |
futex_up(&ffn_futex); |
fn = (fs_node_t *)malloc(sizeof(fs_node_t)); |
if (!fn) |
return NULL; |
nodep = (fat_node_t *)malloc(sizeof(fat_node_t)); |
if (!nodep) |
if (!nodep) { |
free(fn); |
return NULL; |
} |
} |
fat_node_initialize(nodep); |
fn->data = nodep; |
nodep->bp = fn; |
return nodep; |
} |
146,7 → 159,7 |
* |
* @param idxp Locked index structure. |
*/ |
static void *fat_node_get_core(fat_idx_t *idxp) |
static fat_node_t *fat_node_get_core(fat_idx_t *idxp) |
{ |
block_t *b; |
fat_bs_t *bs; |
223,21 → 236,21 |
/* |
* Forward declarations of FAT libfs operations. |
*/ |
static void *fat_node_get(dev_handle_t, fs_index_t); |
static void fat_node_put(void *); |
static void *fat_create_node(dev_handle_t, int); |
static int fat_destroy_node(void *); |
static int fat_link(void *, void *, const char *); |
static int fat_unlink(void *, void *); |
static void *fat_match(void *, const char *); |
static fs_index_t fat_index_get(void *); |
static size_t fat_size_get(void *); |
static unsigned fat_lnkcnt_get(void *); |
static bool fat_has_children(void *); |
static void *fat_root_get(dev_handle_t); |
static fs_node_t *fat_node_get(dev_handle_t, fs_index_t); |
static void fat_node_put(fs_node_t *); |
static fs_node_t *fat_create_node(dev_handle_t, int); |
static int fat_destroy_node(fs_node_t *); |
static int fat_link(fs_node_t *, fs_node_t *, const char *); |
static int fat_unlink(fs_node_t *, fs_node_t *, const char *); |
static fs_node_t *fat_match(fs_node_t *, const char *); |
static fs_index_t fat_index_get(fs_node_t *); |
static size_t fat_size_get(fs_node_t *); |
static unsigned fat_lnkcnt_get(fs_node_t *); |
static bool fat_has_children(fs_node_t *); |
static fs_node_t *fat_root_get(dev_handle_t); |
static char fat_plb_get_char(unsigned); |
static bool fat_is_directory(void *); |
static bool fat_is_file(void *node); |
static bool fat_is_directory(fs_node_t *); |
static bool fat_is_file(fs_node_t *node); |
/* |
* FAT libfs operations. |
244,9 → 257,9 |
*/ |
/** Instantiate a FAT in-core node. */ |
void *fat_node_get(dev_handle_t dev_handle, fs_index_t index) |
fs_node_t *fat_node_get(dev_handle_t dev_handle, fs_index_t index) |
{ |
void *node; |
fat_node_t *nodep; |
fat_idx_t *idxp; |
idxp = fat_idx_get_by_index(dev_handle, index); |
253,14 → 266,14 |
if (!idxp) |
return NULL; |
/* idxp->lock held */ |
node = fat_node_get_core(idxp); |
nodep = fat_node_get_core(idxp); |
futex_up(&idxp->lock); |
return node; |
return FS_NODE(nodep); |
} |
void fat_node_put(void *node) |
void fat_node_put(fs_node_t *fn) |
{ |
fat_node_t *nodep = (fat_node_t *)node; |
fat_node_t *nodep = FAT_NODE(fn); |
bool destroy = false; |
futex_down(&nodep->lock); |
280,11 → 293,13 |
} |
} |
futex_up(&nodep->lock); |
if (destroy) |
free(node); |
if (destroy) { |
free(nodep->bp); |
free(nodep); |
} |
} |
void *fat_create_node(dev_handle_t dev_handle, int flags) |
fs_node_t *fat_create_node(dev_handle_t dev_handle, int flags) |
{ |
fat_idx_t *idxp; |
fat_node_t *nodep; |
310,7 → 325,7 |
idxp = fat_idx_get_new(dev_handle); |
if (!idxp) { |
fat_free_clusters(bs, dev_handle, mcl); |
fat_node_put(nodep); |
fat_node_put(FS_NODE(nodep)); |
return NULL; |
} |
/* idxp->lock held */ |
345,12 → 360,12 |
idxp->nodep = nodep; |
futex_up(&idxp->lock); |
return nodep; |
return FS_NODE(nodep); |
} |
int fat_destroy_node(void *node) |
int fat_destroy_node(fs_node_t *fn) |
{ |
fat_node_t *nodep = (fat_node_t *)node; |
fat_node_t *nodep = FAT_NODE(fn); |
fat_bs_t *bs; |
/* |
364,7 → 379,7 |
/* |
* The node may not have any children. |
*/ |
assert(fat_has_children(node) == false); |
assert(fat_has_children(fn) == false); |
bs = block_bb_get(nodep->idx->dev_handle); |
if (nodep->firstc != FAT_CLST_RES0) { |
374,14 → 389,15 |
} |
fat_idx_destroy(nodep->idx); |
free(nodep->bp); |
free(nodep); |
return EOK; |
} |
int fat_link(void *prnt, void *chld, const char *name) |
int fat_link(fs_node_t *pfn, fs_node_t *cfn, const char *name) |
{ |
fat_node_t *parentp = (fat_node_t *)prnt; |
fat_node_t *childp = (fat_node_t *)chld; |
fat_node_t *parentp = FAT_NODE(pfn); |
fat_node_t *childp = FAT_NODE(cfn); |
fat_dentry_t *d; |
fat_bs_t *bs; |
block_t *b; |
389,6 → 405,8 |
uint16_t bps; |
unsigned dps; |
unsigned blocks; |
fat_cluster_t mcl, lcl; |
int rc; |
futex_down(&childp->lock); |
if (childp->lnkcnt == 1) { |
437,19 → 455,36 |
} |
block_put(b); |
} |
j = 0; |
/* |
* We need to grow the parent in order to create a new unused dentry. |
*/ |
futex_up(&parentp->idx->lock); |
return ENOTSUP; /* XXX */ |
if (parentp->idx->pfc == FAT_CLST_ROOT) { |
/* Can't grow the root directory. */ |
futex_up(&parentp->idx->lock); |
return ENOSPC; |
} |
rc = fat_alloc_clusters(bs, parentp->idx->dev_handle, 1, &mcl, &lcl); |
if (rc != EOK) { |
futex_up(&parentp->idx->lock); |
return rc; |
} |
fat_append_clusters(bs, parentp, mcl); |
b = fat_block_get(bs, parentp, i, BLOCK_FLAGS_NOREAD); |
d = (fat_dentry_t *)b->data; |
/* |
* Clear all dentries in the block except for the first one (the first |
* dentry will be cleared in the next step). |
*/ |
memset(d + 1, 0, bps - sizeof(fat_dentry_t)); |
hit: |
/* |
* At this point we only establish the link between the parent and the |
* child. The dentry, except of the name and the extension, will remain |
* uninitialized until the the corresponding node is synced. Thus the |
* valid dentry data is kept in the child node structure. |
* uninitialized until the corresponding node is synced. Thus the valid |
* dentry data is kept in the child node structure. |
*/ |
memset(d, 0, sizeof(fat_dentry_t)); |
fat_dentry_name_set(d, name); |
468,10 → 503,10 |
b = fat_block_get(bs, childp, 0, BLOCK_FLAGS_NONE); |
d = (fat_dentry_t *)b->data; |
if (fat_classify_dentry(d) == FAT_DENTRY_LAST || |
strcmp(d->name, FAT_NAME_DOT) == 0) { |
str_cmp(d->name, FAT_NAME_DOT) == 0) { |
memset(d, 0, sizeof(fat_dentry_t)); |
strcpy(d->name, FAT_NAME_DOT); |
strcpy(d->ext, FAT_EXT_PAD); |
str_cpy(d->name, 8, FAT_NAME_DOT); |
str_cpy(d->ext, 3, FAT_EXT_PAD); |
d->attr = FAT_ATTR_SUBDIR; |
d->firstc = host2uint16_t_le(childp->firstc); |
/* TODO: initialize also the date/time members. */ |
478,10 → 513,10 |
} |
d++; |
if (fat_classify_dentry(d) == FAT_DENTRY_LAST || |
strcmp(d->name, FAT_NAME_DOT_DOT) == 0) { |
str_cmp(d->name, FAT_NAME_DOT_DOT) == 0) { |
memset(d, 0, sizeof(fat_dentry_t)); |
strcpy(d->name, FAT_NAME_DOT_DOT); |
strcpy(d->ext, FAT_EXT_PAD); |
str_cpy(d->name, 8, FAT_NAME_DOT_DOT); |
str_cpy(d->ext, 3, FAT_EXT_PAD); |
d->attr = FAT_ATTR_SUBDIR; |
d->firstc = (parentp->firstc == FAT_CLST_ROOT) ? |
host2uint16_t_le(FAT_CLST_RES0) : |
508,15 → 543,21 |
return EOK; |
} |
int fat_unlink(void *prnt, void *chld) |
int fat_unlink(fs_node_t *pfn, fs_node_t *cfn, const char *nm) |
{ |
fat_node_t *parentp = (fat_node_t *)prnt; |
fat_node_t *childp = (fat_node_t *)chld; |
fat_node_t *parentp = FAT_NODE(pfn); |
fat_node_t *childp = FAT_NODE(cfn); |
fat_bs_t *bs; |
fat_dentry_t *d; |
uint16_t bps; |
block_t *b; |
if (!parentp) |
return EBUSY; |
if (fat_has_children(cfn)) |
return ENOTEMPTY; |
futex_down(&parentp->lock); |
futex_down(&childp->lock); |
assert(childp->lnkcnt == 1); |
548,10 → 589,10 |
return EOK; |
} |
void *fat_match(void *prnt, const char *component) |
fs_node_t *fat_match(fs_node_t *pfn, const char *component) |
{ |
fat_bs_t *bs; |
fat_node_t *parentp = (fat_node_t *)prnt; |
fat_node_t *parentp = FAT_NODE(pfn); |
char name[FAT_NAME_LEN + 1 + FAT_EXT_LEN + 1]; |
unsigned i, j; |
unsigned bps; /* bytes per sector */ |
584,7 → 625,7 |
} |
if (fat_dentry_namecmp(name, component) == 0) { |
/* hit */ |
void *node; |
fat_node_t *nodep; |
/* |
* Assume tree hierarchy for locking. We |
* already have the parent and now we are going |
603,10 → 644,10 |
block_put(b); |
return NULL; |
} |
node = fat_node_get_core(idx); |
nodep = fat_node_get_core(idx); |
futex_up(&idx->lock); |
block_put(b); |
return node; |
return FS_NODE(nodep); |
} |
} |
block_put(b); |
616,28 → 657,25 |
return NULL; |
} |
fs_index_t fat_index_get(void *node) |
fs_index_t fat_index_get(fs_node_t *fn) |
{ |
fat_node_t *fnodep = (fat_node_t *)node; |
if (!fnodep) |
return 0; |
return fnodep->idx->index; |
return FAT_NODE(fn)->idx->index; |
} |
size_t fat_size_get(void *node) |
size_t fat_size_get(fs_node_t *fn) |
{ |
return ((fat_node_t *)node)->size; |
return FAT_NODE(fn)->size; |
} |
unsigned fat_lnkcnt_get(void *node) |
unsigned fat_lnkcnt_get(fs_node_t *fn) |
{ |
return ((fat_node_t *)node)->lnkcnt; |
return FAT_NODE(fn)->lnkcnt; |
} |
bool fat_has_children(void *node) |
bool fat_has_children(fs_node_t *fn) |
{ |
fat_bs_t *bs; |
fat_node_t *nodep = (fat_node_t *)node; |
fat_node_t *nodep = FAT_NODE(fn); |
unsigned bps; |
unsigned dps; |
unsigned blocks; |
685,7 → 723,7 |
return false; |
} |
void *fat_root_get(dev_handle_t dev_handle) |
fs_node_t *fat_root_get(dev_handle_t dev_handle) |
{ |
return fat_node_get(dev_handle, 0); |
} |
695,14 → 733,14 |
return fat_reg.plb_ro[pos % PLB_SIZE]; |
} |
bool fat_is_directory(void *node) |
bool fat_is_directory(fs_node_t *fn) |
{ |
return ((fat_node_t *)node)->type == FAT_DIRECTORY; |
return FAT_NODE(fn)->type == FAT_DIRECTORY; |
} |
bool fat_is_file(void *node) |
bool fat_is_file(fs_node_t *fn) |
{ |
return ((fat_node_t *)node)->type == FAT_FILE; |
return FAT_NODE(fn)->type == FAT_FILE; |
} |
/** libfs operations */ |
736,6 → 774,28 |
uint16_t rde; |
int rc; |
/* accept the mount options */ |
ipc_callid_t callid; |
size_t size; |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
char *opts = malloc(size + 1); |
if (!opts) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
ipcarg_t retval = ipc_data_write_finalize(callid, opts, size); |
if (retval != EOK) { |
ipc_answer_0(rid, retval); |
free(opts); |
return; |
} |
opts[size] = '\0'; |
/* initialize libblock */ |
rc = block_init(dev_handle, BS_SIZE); |
if (rc != EOK) { |
780,8 → 840,16 |
} |
/* Initialize the root node. */ |
fs_node_t *rfn = (fs_node_t *)malloc(sizeof(fs_node_t)); |
if (!rfn) { |
block_fini(dev_handle); |
fat_idx_fini_by_dev_handle(dev_handle); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
fat_node_t *rootp = (fat_node_t *)malloc(sizeof(fat_node_t)); |
if (!rootp) { |
free(rfn); |
block_fini(dev_handle); |
fat_idx_fini_by_dev_handle(dev_handle); |
ipc_answer_0(rid, ENOMEM); |
791,8 → 859,9 |
fat_idx_t *ridxp = fat_idx_get_by_pos(dev_handle, FAT_CLST_ROOTPAR, 0); |
if (!ridxp) { |
free(rfn); |
free(rootp); |
block_fini(dev_handle); |
free(rootp); |
fat_idx_fini_by_dev_handle(dev_handle); |
ipc_answer_0(rid, ENOMEM); |
return; |
807,6 → 876,8 |
rootp->size = rde * sizeof(fat_dentry_t); |
rootp->idx = ridxp; |
ridxp->nodep = rootp; |
rootp->bp = rfn; |
rfn->data = rootp; |
futex_up(&ridxp->lock); |
828,21 → 899,23 |
dev_handle_t dev_handle = (dev_handle_t)IPC_GET_ARG1(*request); |
fs_index_t index = (fs_index_t)IPC_GET_ARG2(*request); |
off_t pos = (off_t)IPC_GET_ARG3(*request); |
fat_node_t *nodep = (fat_node_t *)fat_node_get(dev_handle, index); |
fs_node_t *fn = fat_node_get(dev_handle, index); |
fat_node_t *nodep; |
fat_bs_t *bs; |
uint16_t bps; |
size_t bytes; |
block_t *b; |
if (!nodep) { |
if (!fn) { |
ipc_answer_0(rid, ENOENT); |
return; |
} |
nodep = FAT_NODE(fn); |
ipc_callid_t callid; |
size_t len; |
if (!ipc_data_read_receive(&callid, &len)) { |
fat_node_put(nodep); |
fat_node_put(fn); |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
913,16 → 986,16 |
bnum++; |
} |
miss: |
fat_node_put(nodep); |
fat_node_put(fn); |
ipc_answer_0(callid, ENOENT); |
ipc_answer_1(rid, ENOENT, 0); |
return; |
hit: |
(void) ipc_data_read_finalize(callid, name, strlen(name) + 1); |
(void) ipc_data_read_finalize(callid, name, str_size(name) + 1); |
bytes = (pos - spos) + 1; |
} |
fat_node_put(nodep); |
fat_node_put(fn); |
ipc_answer_1(rid, EOK, (ipcarg_t)bytes); |
} |
931,7 → 1004,8 |
dev_handle_t dev_handle = (dev_handle_t)IPC_GET_ARG1(*request); |
fs_index_t index = (fs_index_t)IPC_GET_ARG2(*request); |
off_t pos = (off_t)IPC_GET_ARG3(*request); |
fat_node_t *nodep = (fat_node_t *)fat_node_get(dev_handle, index); |
fs_node_t *fn = fat_node_get(dev_handle, index); |
fat_node_t *nodep; |
fat_bs_t *bs; |
size_t bytes; |
block_t *b; |
941,15 → 1015,16 |
off_t boundary; |
int flags = BLOCK_FLAGS_NONE; |
if (!nodep) { |
if (!fn) { |
ipc_answer_0(rid, ENOENT); |
return; |
} |
nodep = FAT_NODE(fn); |
ipc_callid_t callid; |
size_t len; |
if (!ipc_data_write_receive(&callid, &len)) { |
fat_node_put(nodep); |
fat_node_put(fn); |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
990,7 → 1065,7 |
nodep->dirty = true; /* need to sync node */ |
} |
ipc_answer_2(rid, EOK, bytes, nodep->size); |
fat_node_put(nodep); |
fat_node_put(fn); |
return; |
} else { |
/* |
1006,7 → 1081,7 |
status = fat_alloc_clusters(bs, dev_handle, nclsts, &mcl, &lcl); |
if (status != EOK) { |
/* could not allocate a chain of nclsts clusters */ |
fat_node_put(nodep); |
fat_node_put(fn); |
ipc_answer_0(callid, status); |
ipc_answer_0(rid, status); |
return; |
1027,7 → 1102,7 |
nodep->size = pos + bytes; |
nodep->dirty = true; /* need to sync node */ |
ipc_answer_2(rid, EOK, bytes, nodep->size); |
fat_node_put(nodep); |
fat_node_put(fn); |
return; |
} |
} |
1037,7 → 1112,8 |
dev_handle_t dev_handle = (dev_handle_t)IPC_GET_ARG1(*request); |
fs_index_t index = (fs_index_t)IPC_GET_ARG2(*request); |
size_t size = (off_t)IPC_GET_ARG3(*request); |
fat_node_t *nodep = (fat_node_t *)fat_node_get(dev_handle, index); |
fs_node_t *fn = fat_node_get(dev_handle, index); |
fat_node_t *nodep; |
fat_bs_t *bs; |
uint16_t bps; |
uint8_t spc; |
1044,10 → 1120,11 |
unsigned bpc; /* bytes per cluster */ |
int rc; |
if (!nodep) { |
if (!fn) { |
ipc_answer_0(rid, ENOENT); |
return; |
} |
nodep = FAT_NODE(fn); |
bs = block_bb_get(dev_handle); |
bps = uint16_t_le2host(bs->bps); |
1085,7 → 1162,7 |
nodep->dirty = true; /* need to sync node */ |
rc = EOK; |
} |
fat_node_put(nodep); |
fat_node_put(fn); |
ipc_answer_0(rid, rc); |
return; |
} |
1096,13 → 1173,13 |
fs_index_t index = (fs_index_t)IPC_GET_ARG2(*request); |
int rc; |
fat_node_t *nodep = fat_node_get(dev_handle, index); |
if (!nodep) { |
fs_node_t *fn = fat_node_get(dev_handle, index); |
if (!fn) { |
ipc_answer_0(rid, ENOENT); |
return; |
} |
rc = fat_destroy_node(nodep); |
rc = fat_destroy_node(fn); |
ipc_answer_0(rid, rc); |
} |
//branches/tracing/uspace/srv/fs/fat/Makefile |
---|
29,12 → 29,11 |
## Setup toolchain |
# |
include ../../../Makefile.config |
LIBC_PREFIX = ../../../lib/libc |
LIBFS_PREFIX = ../../../lib/libfs |
LIBBLOCK_PREFIX = ../../../lib/libblock |
SOFTINT_PREFIX = ../../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I $(LIBFS_PREFIX) -I $(LIBBLOCK_PREFIX) |
64,13 → 63,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/srv/obio/obio.c |
---|
0,0 → 1,158 |
/* |
* Copyright (c) 2009 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup obio |
* @{ |
*/ |
/** |
* @file obio.c |
* @brief OBIO driver. |
* |
* OBIO is a short for on-board I/O. On UltraSPARC IIi and systems with U2P, |
* there is a piece of the root PCI bus controller address space, which |
* contains interrupt mapping and clear registers for all on-board devices. |
* Although UltraSPARC IIi and U2P are different in general, these registers can |
* be found at the same addresses. |
*/ |
#include <ipc/ipc.h> |
#include <ipc/services.h> |
#include <ipc/bus.h> |
#include <ipc/ns.h> |
#include <sysinfo.h> |
#include <as.h> |
#include <ddi.h> |
#include <align.h> |
#include <bool.h> |
#include <errno.h> |
#include <async.h> |
#include <align.h> |
#include <async.h> |
#include <stdio.h> |
#include <ipc/devmap.h> |
#define NAME "obio" |
#define OBIO_SIZE 0x1898 |
#define OBIO_IMR_BASE 0x200 |
#define OBIO_IMR(ino) (OBIO_IMR_BASE + ((ino) & INO_MASK)) |
#define OBIO_CIR_BASE 0x300 |
#define OBIO_CIR(ino) (OBIO_CIR_BASE + ((ino) & INO_MASK)) |
#define INO_MASK 0x1f |
static void *base_phys; |
static volatile uint64_t *base_virt; |
/** Handle one connection to obio. |
* |
* @param iid Hash of the request that opened the connection. |
* @param icall Call data of the request that opened the connection. |
*/ |
static void obio_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
ipc_callid_t callid; |
ipc_call_t call; |
/* |
* Answer the first IPC_M_CONNECT_ME_TO call. |
*/ |
ipc_answer_0(iid, EOK); |
while (1) { |
int inr; |
callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
case BUS_CLEAR_INTERRUPT: |
inr = IPC_GET_ARG1(call); |
base_virt[OBIO_CIR(inr & INO_MASK)] = 0; |
ipc_answer_0(callid, EOK); |
break; |
default: |
ipc_answer_0(callid, EINVAL); |
break; |
} |
} |
} |
/** Initialize the OBIO driver. |
* |
* So far, the driver heavily depends on information provided by the kernel via |
* sysinfo. In the future, there should be a standalone OBIO driver. |
*/ |
static bool obio_init(void) |
{ |
ipcarg_t phonead; |
base_phys = (void *) sysinfo_value("obio.base.physical"); |
if (!base_phys) { |
printf(NAME ": no OBIO registers found\n"); |
return false; |
} |
base_virt = as_get_mappable_page(OBIO_SIZE); |
int flags = AS_AREA_READ | AS_AREA_WRITE; |
int retval = physmem_map(base_phys, (void *) base_virt, |
ALIGN_UP(OBIO_SIZE, PAGE_SIZE) >> PAGE_WIDTH, flags); |
if (retval < 0) { |
printf(NAME ": Error mapping OBIO registers\n"); |
return false; |
} |
printf(NAME ": OBIO registers with base at %p\n", base_phys); |
async_set_client_connection(obio_connection); |
ipc_connect_to_me(PHONE_NS, SERVICE_OBIO, 0, 0, &phonead); |
return true; |
} |
int main(int argc, char **argv) |
{ |
printf(NAME ": HelenOS OBIO driver\n"); |
if (!obio_init()) |
return -1; |
printf(NAME ": Accepting connections\n"); |
async_manager(); |
/* Never reached */ |
return 0; |
} |
/** |
* @} |
*/ |
//branches/tracing/uspace/srv/obio/Makefile |
---|
0,0 → 1,76 |
# |
# Copyright (c) 2006 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
# modification, are permitted provided that the following conditions |
# are met: |
# |
# - Redistributions of source code must retain the above copyright |
# notice, this list of conditions and the following disclaimer. |
# - Redistributions in binary form must reproduce the above copyright |
# notice, this list of conditions and the following disclaimer in the |
# documentation and/or other materials provided with the distribution. |
# - The name of the author may not be used to endorse or promote products |
# derived from this software without specific prior written permission. |
# |
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
## Setup toolchain |
# |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
LIBS = $(LIBC_PREFIX)/libc.a |
## Sources |
# |
OUTPUT = obio |
SOURCES = \ |
obio.c |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
.PHONY: all clean depend disasm |
all: $(OUTPUT) $(OUTPUT).disasm |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
$(OUTPUT).disasm: $(OUTPUT) |
$(OBJDUMP) -d $< >$@ |
%.o: %.S |
$(CC) $(DEFS) $(AFLAGS) $(CFLAGS) -D__ASM__ -c $< -o $@ |
%.o: %.s |
$(AS) $(AFLAGS) $< -o $@ |
%.o: %.c |
$(CC) $(DEFS) $(CFLAGS) -c $< -o $@ |
//branches/tracing/uspace/srv/obio |
---|
Property changes: |
Added: svn:mergeinfo |
//branches/tracing/uspace/srv/pci/libpci/names.c |
---|
103,7 → 103,7 |
u32 id34 = id_pair(id3, id4); |
unsigned int h = id_hash(cat, id12, id34); |
struct id_entry *n = a->id_hash[h]; |
int len = strlen((char *) text); |
int len = str_size((char *) text); |
while (n && (n->id12 != id12 || n->id34 != id34 || n->cat != cat)) |
n = n->next; |
//branches/tracing/uspace/srv/pci/Makefile |
---|
29,10 → 29,9 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
54,7 → 53,7 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
$(MAKE) -C libpci clean |
depend: |
62,7 → 61,7 |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(MAKE) -C libpci |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: |
$(OBJDUMP) -d $(OUTPUT) >$(OUTPUT).disasm |
//branches/tracing/uspace/srv/devmap/Makefile |
---|
29,10 → 29,9 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
CFLAGS += -I../libipc/include |
46,7 → 45,7 |
SOURCES = \ |
devmap.c |
CFLAGS += -D$(ARCH) |
CFLAGS += -D$(UARCH) |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
57,13 → 56,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/srv/devmap/devmap.c |
---|
28,9 → 28,9 |
/** |
* @defgroup devmap Device mapper. |
* @brief HelenOS device mapper. |
* @brief HelenOS device mapper. |
* @{ |
*/ |
*/ |
/** @file |
*/ |
46,17 → 46,24 |
#include <string.h> |
#include <ipc/devmap.h> |
#define NAME "devmap" |
#define NAME "devmap" |
/** Pending lookup structure. */ |
typedef struct { |
link_t link; |
char *name; /**< Device name */ |
ipc_callid_t callid; /**< Call ID waiting for the lookup */ |
} pending_req_t; |
LIST_INITIALIZE(devices_list); |
LIST_INITIALIZE(drivers_list); |
LIST_INITIALIZE(pending_req); |
/* order of locking: |
* drivers_list_futex |
* devices_list_futex |
* (devmap_driver_t *)->devices_futex |
* create_handle_futex |
/* Locking order: |
* drivers_list_futex |
* devices_list_futex |
* (devmap_driver_t *)->devices_futex |
* create_handle_futex |
**/ |
static atomic_t devices_list_futex = FUTEX_INITIALIZER; |
63,27 → 70,28 |
static atomic_t drivers_list_futex = FUTEX_INITIALIZER; |
static atomic_t create_handle_futex = FUTEX_INITIALIZER; |
static int devmap_create_handle(void) |
{ |
static int last_handle = 0; |
int handle; |
/* TODO: allow reusing old handles after their unregistration |
and implement some version of LRU algorithm */ |
* and implement some version of LRU algorithm |
*/ |
/* FIXME: overflow */ |
futex_down(&create_handle_futex); |
futex_down(&create_handle_futex); |
last_handle += 1; |
handle = last_handle; |
futex_up(&create_handle_futex); |
futex_up(&create_handle_futex); |
return handle; |
} |
/** Initialize device mapper. |
/** Initialize device mapper. |
* |
* |
*/ |
90,7 → 98,7 |
static int devmap_init() |
{ |
/* TODO: */ |
return EOK; |
} |
99,108 → 107,101 |
*/ |
static devmap_device_t *devmap_device_find_name(const char *name) |
{ |
link_t *item; |
link_t *item = devices_list.next; |
devmap_device_t *device = NULL; |
item = devices_list.next; |
while (item != &devices_list) { |
device = list_get_instance(item, devmap_device_t, devices); |
if (0 == strcmp(device->name, name)) { |
if (0 == str_cmp(device->name, name)) |
break; |
} |
item = item->next; |
} |
if (item == &devices_list) |
return NULL; |
device = list_get_instance(item, devmap_device_t, devices); |
return device; |
} |
/** Find device with given handle. |
* |
* @todo: use hash table |
* |
*/ |
static devmap_device_t *devmap_device_find_handle(int handle) |
{ |
link_t *item; |
futex_down(&devices_list_futex); |
link_t *item = (&devices_list)->next; |
devmap_device_t *device = NULL; |
futex_down(&devices_list_futex); |
item = (&devices_list)->next; |
while (item != &devices_list) { |
device = list_get_instance(item, devmap_device_t, devices); |
if (device->handle == handle) { |
if (device->handle == handle) |
break; |
} |
item = item->next; |
} |
if (item == &devices_list) { |
futex_up(&devices_list_futex); |
return NULL; |
} |
device = list_get_instance(item, devmap_device_t, devices); |
futex_up(&devices_list_futex); |
return device; |
} |
/** |
* |
* Unregister device and free it. It's assumed that driver's device list is |
* already locked. |
* |
*/ |
static int devmap_device_unregister_core(devmap_device_t *device) |
{ |
list_remove(&(device->devices)); |
list_remove(&(device->driver_devices)); |
free(device->name); |
free(device->name); |
free(device); |
return EOK; |
} |
/** |
* |
* Read info about new driver and add it into linked list of registered |
* drivers. |
* |
*/ |
static void devmap_driver_register(devmap_driver_t **odriver) |
{ |
size_t name_size; |
ipc_callid_t callid; |
ipc_call_t call; |
devmap_driver_t *driver; |
ipc_callid_t iid; |
ipc_call_t icall; |
*odriver = NULL; |
iid = async_get_call(&icall); |
ipc_call_t icall; |
ipc_callid_t iid = async_get_call(&icall); |
if (IPC_GET_METHOD(icall) != DEVMAP_DRIVER_REGISTER) { |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
if (NULL == |
(driver = (devmap_driver_t *)malloc(sizeof(devmap_driver_t)))) { |
} |
devmap_driver_t *driver = (devmap_driver_t *) malloc(sizeof(devmap_driver_t)); |
if (driver == NULL) { |
ipc_answer_0(iid, ENOMEM); |
return; |
} |
/* |
/* |
* Get driver name |
*/ |
ipc_callid_t callid; |
size_t name_size; |
if (!ipc_data_write_receive(&callid, &name_size)) { |
free(driver); |
ipc_answer_0(callid, EREFUSED); |
207,7 → 208,7 |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
if (name_size > DEVMAP_NAME_MAXLEN) { |
free(driver); |
ipc_answer_0(callid, EINVAL); |
214,17 → 215,18 |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
/* |
* Allocate buffer for device name. |
*/ |
if (NULL == (driver->name = (char *)malloc(name_size + 1))) { |
driver->name = (char *) malloc(name_size + 1); |
if (driver->name == NULL) { |
free(driver); |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
} |
/* |
* Send confirmation to sender and get data into buffer. |
*/ |
234,22 → 236,23 |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
driver->name[name_size] = 0; |
/* Initialize futex for list of devices owned by this driver */ |
futex_initialize(&(driver->devices_futex), 1); |
/* |
/* |
* Initialize list of asociated devices |
*/ |
list_initialize(&(driver->devices)); |
/* |
/* |
* Create connection to the driver |
*/ |
ipc_call_t call; |
callid = async_get_call(&call); |
if (IPC_M_CONNECT_TO_ME != IPC_GET_METHOD(call)) { |
ipc_answer_0(callid, ENOTSUP); |
258,73 → 261,95 |
ipc_answer_0(iid, ENOTSUP); |
return; |
} |
driver->phone = IPC_GET_ARG5(call); |
ipc_answer_0(callid, EOK); |
list_initialize(&(driver->drivers)); |
futex_down(&drivers_list_futex); |
futex_down(&drivers_list_futex); |
/* TODO: |
* check that no driver with name equal to driver->name is registered |
*/ |
/* |
/* |
* Insert new driver into list of registered drivers |
*/ |
list_append(&(driver->drivers), &drivers_list); |
futex_up(&drivers_list_futex); |
futex_up(&drivers_list_futex); |
ipc_answer_0(iid, EOK); |
*odriver = driver; |
} |
/** Unregister device driver, unregister all its devices and free driver |
/** |
* Unregister device driver, unregister all its devices and free driver |
* structure. |
* |
*/ |
static int devmap_driver_unregister(devmap_driver_t *driver) |
{ |
devmap_device_t *device; |
if (NULL == driver) |
if (driver == NULL) |
return EEXISTS; |
futex_down(&drivers_list_futex); |
futex_down(&drivers_list_futex); |
ipc_hangup(driver->phone); |
/* remove it from list of drivers */ |
list_remove(&(driver->drivers)); |
/* unregister all its devices */ |
futex_down(&devices_list_futex); |
futex_down(&devices_list_futex); |
futex_down(&(driver->devices_futex)); |
while (!list_empty(&(driver->devices))) { |
device = list_get_instance(driver->devices.next, |
devmap_device_t *device = list_get_instance(driver->devices.next, |
devmap_device_t, driver_devices); |
devmap_device_unregister_core(device); |
} |
futex_up(&(driver->devices_futex)); |
futex_up(&devices_list_futex); |
futex_up(&drivers_list_futex); |
futex_up(&devices_list_futex); |
futex_up(&drivers_list_futex); |
/* free name and driver */ |
if (NULL != driver->name) { |
if (NULL != driver->name) |
free(driver->name); |
} |
free(driver); |
return EOK; |
} |
/** Process pending lookup requests */ |
static void process_pending_lookup() |
{ |
link_t *cur; |
loop: |
for (cur = pending_req.next; cur != &pending_req; cur = cur->next) { |
pending_req_t *pr = list_get_instance(cur, pending_req_t, link); |
const devmap_device_t *dev = devmap_device_find_name(pr->name); |
if (!dev) |
continue; |
ipc_answer_1(pr->callid, EOK, dev->handle); |
free(pr->name); |
list_remove(cur); |
free(pr); |
goto loop; |
} |
} |
/** Register instance of device |
* |
*/ |
331,29 → 356,27 |
static void devmap_device_register(ipc_callid_t iid, ipc_call_t *icall, |
devmap_driver_t *driver) |
{ |
ipc_callid_t callid; |
size_t size; |
devmap_device_t *device; |
if (NULL == driver) { |
if (driver == NULL) { |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
/* Create new device entry */ |
if (NULL == |
(device = (devmap_device_t *) malloc(sizeof(devmap_device_t)))) { |
devmap_device_t *device = (devmap_device_t *) malloc(sizeof(devmap_device_t)); |
if (device == NULL) { |
ipc_answer_0(iid, ENOMEM); |
return; |
} |
/* Get device name */ |
ipc_callid_t callid; |
size_t size; |
if (!ipc_data_write_receive(&callid, &size)) { |
free(device); |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
if (size > DEVMAP_NAME_MAXLEN) { |
free(device); |
ipc_answer_0(callid, EINVAL); |
363,8 → 386,8 |
/* +1 for terminating \0 */ |
device->name = (char *) malloc(size + 1); |
if (NULL == device->name) { |
if (device->name == NULL) { |
free(device); |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(iid, EREFUSED); |
373,12 → 396,12 |
ipc_data_write_finalize(callid, device->name, size); |
device->name[size] = 0; |
list_initialize(&(device->devices)); |
list_initialize(&(device->driver_devices)); |
futex_down(&devices_list_futex); |
futex_down(&devices_list_futex); |
/* Check that device with such name is not already registered */ |
if (NULL != devmap_device_find_name(device->name)) { |
printf(NAME ": Device '%s' already registered\n", device->name); |
388,24 → 411,26 |
ipc_answer_0(iid, EEXISTS); |
return; |
} |
/* Get unique device handle */ |
device->handle = devmap_create_handle(); |
device->handle = devmap_create_handle(); |
device->driver = driver; |
/* Insert device into list of all devices */ |
list_append(&device->devices, &devices_list); |
/* Insert device into list of devices that belog to one driver */ |
futex_down(&device->driver->devices_futex); |
list_append(&device->driver_devices, &device->driver->devices); |
futex_up(&device->driver->devices_futex); |
futex_up(&devices_list_futex); |
futex_up(&device->driver->devices_futex); |
futex_up(&devices_list_futex); |
ipc_answer_1(iid, EOK, device->handle); |
process_pending_lookup(); |
} |
/** |
415,129 → 440,142 |
devmap_driver_t *driver) |
{ |
/* TODO */ |
return EOK; |
} |
/** Connect client to the device. |
* |
* Find device driver owning requested device and forward |
* the message to it. |
* |
*/ |
static void devmap_forward(ipc_callid_t callid, ipc_call_t *call) |
{ |
devmap_device_t *dev; |
int handle; |
/* |
* Get handle from request |
*/ |
handle = IPC_GET_ARG2(*call); |
dev = devmap_device_find_handle(handle); |
int handle = IPC_GET_ARG2(*call); |
devmap_device_t *dev = devmap_device_find_handle(handle); |
if (NULL == dev) { |
ipc_answer_0(callid, ENOENT); |
return; |
} |
} |
ipc_forward_fast(callid, dev->driver->phone, (ipcarg_t)(dev->handle), |
IPC_GET_ARG3(*call), 0, IPC_FF_NONE); |
} |
/** Find handle for device instance identified by name. |
* |
* In answer will be send EOK and device handle in arg1 or a error |
* code from errno.h. |
* code from errno.h. |
* |
*/ |
static void devmap_get_handle(ipc_callid_t iid, ipc_call_t *icall) |
{ |
char *name = NULL; |
size_t name_size; |
const devmap_device_t *dev; |
ipc_callid_t callid; |
ipcarg_t retval; |
/* |
/* |
* Wait for incoming message with device name (but do not |
* read the name itself until the buffer is allocated). |
*/ |
if (!ipc_data_write_receive(&callid, &name_size)) { |
ipc_callid_t callid; |
size_t size; |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EREFUSED); |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
if (name_size > DEVMAP_NAME_MAXLEN) { |
if ((size < 1) || (size > DEVMAP_NAME_MAXLEN)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
/* |
* Allocate buffer for device name. |
*/ |
if (NULL == (name = (char *)malloc(name_size))) { |
char *name = (char *) malloc(size); |
if (name == NULL) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(iid, EREFUSED); |
return; |
} |
} |
/* |
* Send confirmation to sender and get data into buffer. |
*/ |
if (EOK != (retval = ipc_data_write_finalize(callid, name, |
name_size))) { |
ipcarg_t retval = ipc_data_write_finalize(callid, name, size); |
if (retval != EOK) { |
ipc_answer_0(iid, EREFUSED); |
free(name); |
return; |
} |
name[size] = '\0'; |
/* |
* Find device name in linked list of known devices. |
*/ |
dev = devmap_device_find_name(name); |
const devmap_device_t *dev = devmap_device_find_name(name); |
/* |
* Device was not found. |
*/ |
if (NULL == dev) { |
if (dev == NULL) { |
if (IPC_GET_ARG1(*icall) & IPC_FLAG_BLOCKING) { |
/* Blocking lookup, add to pending list */ |
pending_req_t *pr = (pending_req_t *) malloc(sizeof(pending_req_t)); |
if (!pr) { |
ipc_answer_0(iid, ENOMEM); |
free(name); |
return; |
} |
pr->name = name; |
pr->callid = iid; |
list_append(&pr->link, &pending_req); |
return; |
} |
ipc_answer_0(iid, ENOENT); |
free(name); |
return; |
} |
ipc_answer_1(iid, EOK, dev->handle); |
free(name); |
} |
/** Find name of device identified by id and send it to caller. |
/** Find name of device identified by id and send it to caller. |
* |
*/ |
static void devmap_get_name(ipc_callid_t iid, ipc_call_t *icall) |
{ |
const devmap_device_t *device; |
size_t name_size; |
device = devmap_device_find_handle(IPC_GET_ARG1(*icall)); |
const devmap_device_t *device = devmap_device_find_handle(IPC_GET_ARG1(*icall)); |
/* |
* Device not found. |
*/ |
if (NULL == device) { |
if (device == NULL) { |
ipc_answer_0(iid, ENOENT); |
return; |
} |
} |
ipc_answer_0(iid, EOK); |
name_size = strlen(device->name); |
/* FIXME: |
we have no channel from DEVMAP to client -> |
sending must be initiated by client |
int rc = ipc_data_write_send(phone, device->name, name_size); |
if (rc != EOK) { |
async_wait_for(req, NULL); |
return rc; |
} |
*/ |
size_t name_size = str_size(device->name); |
/* FIXME: |
* We have no channel from DEVMAP to client, therefore |
* sending must be initiated by client. |
* |
* int rc = ipc_data_write_send(phone, device->name, name_size); |
* if (rc != EOK) { |
* async_wait_for(req, NULL); |
* return rc; |
* } |
*/ |
/* TODO: send name in response */ |
} |
546,31 → 584,30 |
*/ |
static void devmap_connection_driver(ipc_callid_t iid, ipc_call_t *icall) |
{ |
ipc_callid_t callid; |
ipc_call_t call; |
bool cont = true; |
/* Accept connection */ |
ipc_answer_0(iid, EOK); |
devmap_driver_t *driver = NULL; |
ipc_answer_0(iid, EOK); |
devmap_driver_register(&driver); |
if (NULL == driver) |
return; |
bool cont = true; |
while (cont) { |
callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
ipc_call_t call; |
ipc_callid_t callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
cont = false; |
continue; /* Exit thread */ |
/* Exit thread */ |
continue; |
case DEVMAP_DRIVER_UNREGISTER: |
if (NULL == driver) { |
if (NULL == driver) |
ipc_answer_0(callid, ENOENT); |
} else { |
else |
ipc_answer_0(callid, EOK); |
} |
break; |
case DEVMAP_DEVICE_REGISTER: |
/* Register one instance of device */ |
587,20 → 624,18 |
devmap_get_handle(callid, &call); |
break; |
default: |
if (!(callid & IPC_CALLID_NOTIFICATION)) { |
if (!(callid & IPC_CALLID_NOTIFICATION)) |
ipc_answer_0(callid, ENOENT); |
} |
} |
} |
if (NULL != driver) { |
/* |
/* |
* Unregister the device driver and all its devices. |
*/ |
devmap_driver_unregister(driver); |
driver = NULL; |
} |
} |
/** Handle connection with device client. |
608,23 → 643,21 |
*/ |
static void devmap_connection_client(ipc_callid_t iid, ipc_call_t *icall) |
{ |
ipc_callid_t callid; |
ipc_call_t call; |
/* Accept connection */ |
ipc_answer_0(iid, EOK); |
bool cont = true; |
ipc_answer_0(iid, EOK); /* Accept connection */ |
while (cont) { |
callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
ipc_call_t call; |
ipc_callid_t callid = async_get_call(&call); |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
cont = false; |
continue; /* Exit thread */ |
/* Exit thread */ |
continue; |
case DEVMAP_DEVICE_GET_HANDLE: |
devmap_get_handle(callid, &call); |
devmap_get_handle(callid, &call); |
break; |
case DEVMAP_DEVICE_GET_NAME: |
/* TODO */ |
631,14 → 664,13 |
devmap_get_name(callid, &call); |
break; |
default: |
if (!(callid & IPC_CALLID_NOTIFICATION)) { |
if (!(callid & IPC_CALLID_NOTIFICATION)) |
ipc_answer_0(callid, ENOENT); |
} |
} |
} |
} |
/** Function for handling connections to devmap |
/** Function for handling connections to devmap |
* |
*/ |
static void devmap_connection(ipc_callid_t iid, ipc_call_t *icall) |
656,10 → 688,9 |
devmap_forward(iid, icall); |
break; |
default: |
ipc_answer_0(iid, ENOENT); /* No such interface */ |
/* No such interface */ |
ipc_answer_0(iid, ENOENT); |
} |
/* Cleanup */ |
} |
/** |
669,8 → 700,6 |
{ |
printf(NAME ": HelenOS Device Mapper\n"); |
ipcarg_t phonead; |
if (devmap_init() != 0) { |
printf(NAME ": Error while initializing service\n"); |
return -1; |
678,13 → 707,15 |
/* Set a handler of incomming connections */ |
async_set_client_connection(devmap_connection); |
/* Register device mapper at naming service */ |
ipcarg_t phonead; |
if (ipc_connect_to_me(PHONE_NS, SERVICE_DEVMAP, 0, 0, &phonead) != 0) |
return -1; |
printf(NAME ": Accepting connections\n"); |
async_manager(); |
/* Never reached */ |
return 0; |
} |
//branches/tracing/uspace/srv/vfs/vfs.c |
---|
28,11 → 28,11 |
/** @addtogroup fs |
* @{ |
*/ |
*/ |
/** |
* @file vfs.c |
* @brief VFS service for HelenOS. |
* @file vfs.c |
* @brief VFS service for HelenOS. |
*/ |
#include <ipc/ipc.h> |
51,14 → 51,14 |
static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall) |
{ |
bool keep_on_going = 1; |
bool keep_on_going = true; |
/* |
* The connection was opened via the IPC_CONNECT_ME_TO call. |
* This call needs to be answered. |
*/ |
ipc_answer_0(iid, EOK); |
/* |
* Here we enter the main connection fibril loop. |
* The logic behind this loop and the protocol is that we'd like to keep |
70,18 → 70,38 |
* connection later. |
*/ |
while (keep_on_going) { |
ipc_callid_t callid; |
ipc_call_t call; |
callid = async_get_call(&call); |
ipc_callid_t callid = async_get_call(&call); |
fs_handle_t fs_handle; |
int phone; |
switch (IPC_GET_METHOD(call)) { |
case IPC_M_PHONE_HUNGUP: |
keep_on_going = false; |
break; |
case IPC_M_CONNECT_ME_TO: |
/* |
* Connect the client file system to another one. |
*/ |
/* FIXME: |
* Prevent ordinary clients from connecting to file |
* system servers directly. This should be solved by |
* applying some security mechanisms. |
*/ |
fs_handle = IPC_GET_ARG1(call); |
phone = vfs_grab_phone(fs_handle); |
(void) ipc_forward_fast(callid, phone, 0, 0, 0, |
IPC_FF_NONE); |
vfs_release_phone(phone); |
break; |
case VFS_REGISTER: |
vfs_register(callid, &call); |
keep_on_going = false; |
/* |
* Keep the connection open so that a file system can |
* later ask us to connect it to another file system. |
* This is necessary to support non-root mounts. |
*/ |
break; |
case VFS_MOUNT: |
vfs_mount(callid, &call); |
118,22 → 138,19 |
break; |
} |
} |
/* TODO: cleanup after the client */ |
} |
int main(int argc, char **argv) |
{ |
ipcarg_t phonead; |
printf(NAME ": HelenOS VFS server\n"); |
/* |
* Initialize the list of registered file systems. |
*/ |
list_initialize(&fs_head); |
/* |
* Initialize VFS node hash table. |
*/ |
141,7 → 158,7 |
printf(NAME ": Failed to initialize VFS node hash table\n"); |
return ENOMEM; |
} |
/* |
* Allocate and initialize the Path Lookup Buffer. |
*/ |
151,6 → 168,7 |
printf(NAME ": Cannot allocate a mappable piece of address space\n"); |
return ENOMEM; |
} |
if (as_area_create(plb, PLB_SIZE, AS_AREA_READ | AS_AREA_WRITE | |
AS_AREA_CACHEABLE) != plb) { |
printf(NAME ": Cannot create address space area\n"); |
162,12 → 180,13 |
* Set a connectio handling function/fibril. |
*/ |
async_set_client_connection(vfs_connection); |
/* |
* Register at the naming service. |
*/ |
ipcarg_t phonead; |
ipc_connect_to_me(PHONE_NS, SERVICE_VFS, 0, 0, &phonead); |
/* |
* Start accepting connections. |
*/ |
178,4 → 197,4 |
/** |
* @} |
*/ |
*/ |
//branches/tracing/uspace/srv/vfs/vfs_ops.c |
---|
28,11 → 28,11 |
/** @addtogroup fs |
* @{ |
*/ |
*/ |
/** |
* @file vfs_ops.c |
* @brief Operations that VFS offers to its clients. |
* @file vfs_ops.c |
* @brief Operations that VFS offers to its clients. |
*/ |
#include "vfs.h" |
55,6 → 55,19 |
/* Forward declarations of static functions. */ |
static int vfs_truncate_internal(fs_handle_t, dev_handle_t, fs_index_t, size_t); |
/** Pending mount structure. */ |
typedef struct { |
link_t link; |
char *fs_name; /**< File system name */ |
char *mp; /**< Mount point */ |
char *opts; /**< Mount options. */ |
ipc_callid_t callid; /**< Call ID waiting for the mount */ |
ipc_callid_t rid; /**< Request ID */ |
dev_handle_t dev_handle; /**< Device handle */ |
} pending_req_t; |
LIST_INITIALIZE(pending_req); |
/** |
* This rwlock prevents the race between a triplet-to-VFS-node resolution and a |
* concurrent VFS operation which modifies the file system namespace. |
67,135 → 80,46 |
.dev_handle = 0 |
}; |
void vfs_mount(ipc_callid_t rid, ipc_call_t *request) |
static void vfs_mount_internal(ipc_callid_t rid, dev_handle_t dev_handle, |
fs_handle_t fs_handle, char *mp, char *opts) |
{ |
dev_handle_t dev_handle; |
vfs_lookup_res_t mp_res; |
vfs_node_t *mp_node = NULL; |
ipc_callid_t callid; |
ipc_call_t data; |
int rc; |
ipcarg_t rc; |
int phone; |
size_t size; |
aid_t msg; |
ipc_call_t answer; |
/* |
* We expect the library to do the device-name to device-handle |
* translation for us, thus the device handle will arrive as ARG1 |
* in the request. |
*/ |
dev_handle = (dev_handle_t)IPC_GET_ARG1(*request); |
/* |
* For now, don't make use of ARG2 and ARG3, but they can be used to |
* carry mount options in the future. |
*/ |
/* |
* Now, we expect the client to send us data with the name of the file |
* system. |
*/ |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
/* |
* Don't receive more than is necessary for storing a full file system |
* name. |
*/ |
if (size < 1 || size > FS_NAME_MAXLEN) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
/* Deliver the file system name. */ |
char fs_name[FS_NAME_MAXLEN + 1]; |
(void) ipc_data_write_finalize(callid, fs_name, size); |
fs_name[size] = '\0'; |
/* |
* Wait for IPC_M_PING so that we can return an error if we don't know |
* fs_name. |
*/ |
callid = async_get_call(&data); |
if (IPC_GET_METHOD(data) != IPC_M_PING) { |
ipc_answer_0(callid, ENOTSUP); |
ipc_answer_0(rid, ENOTSUP); |
return; |
} |
/* |
* Check if we know a file system with the same name as is in fs_name. |
* This will also give us its file system handle. |
*/ |
fs_handle_t fs_handle = fs_name_to_handle(fs_name, true); |
if (!fs_handle) { |
ipc_answer_0(callid, ENOENT); |
ipc_answer_0(rid, ENOENT); |
return; |
} |
/* Acknowledge that we know fs_name. */ |
ipc_answer_0(callid, EOK); |
/* Now, we want the client to send us the mount point. */ |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
/* Check whether size is reasonable wrt. the mount point. */ |
if (size < 1 || size > MAX_PATH_LEN) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
/* Allocate buffer for the mount point data being received. */ |
char *buf; |
buf = malloc(size + 1); |
if (!buf) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
/* Deliver the mount point. */ |
(void) ipc_data_write_finalize(callid, buf, size); |
buf[size] = '\0'; |
/* Resolve the path to the mountpoint. */ |
vfs_lookup_res_t mp_res; |
futex_down(&rootfs_futex); |
if (rootfs.fs_handle) { |
/* We already have the root FS. */ |
rwlock_write_lock(&namespace_rwlock); |
if ((size == 1) && (buf[0] == '/')) { |
if (str_cmp(mp, "/") == 0) { |
/* Trying to mount root FS over root FS */ |
rwlock_write_unlock(&namespace_rwlock); |
futex_up(&rootfs_futex); |
free(buf); |
ipc_answer_0(rid, EBUSY); |
return; |
} |
rc = vfs_lookup_internal(buf, L_DIRECTORY, &mp_res, NULL); |
rc = vfs_lookup_internal(mp, L_DIRECTORY, &mp_res, NULL); |
if (rc != EOK) { |
/* The lookup failed for some reason. */ |
rwlock_write_unlock(&namespace_rwlock); |
futex_up(&rootfs_futex); |
free(buf); |
ipc_answer_0(rid, rc); |
return; |
} |
mp_node = vfs_node_get(&mp_res); |
if (!mp_node) { |
rwlock_write_unlock(&namespace_rwlock); |
futex_up(&rootfs_futex); |
free(buf); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
/* |
* Now we hold a reference to mp_node. |
* It will be dropped upon the corresponding VFS_UNMOUNT. |
204,23 → 128,33 |
rwlock_write_unlock(&namespace_rwlock); |
} else { |
/* We still don't have the root file system mounted. */ |
if ((size == 1) && (buf[0] == '/')) { |
if (str_cmp(mp, "/") == 0) { |
vfs_lookup_res_t mr_res; |
vfs_node_t *mr_node; |
ipcarg_t rindex; |
ipcarg_t rsize; |
ipcarg_t rlnkcnt; |
fs_index_t rindex; |
size_t rsize; |
unsigned rlnkcnt; |
/* |
* For this simple, but important case, |
* we are almost done. |
*/ |
free(buf); |
/* Tell the mountee that it is being mounted. */ |
phone = vfs_grab_phone(fs_handle); |
rc = async_req_1_3(phone, VFS_MOUNTED, |
(ipcarg_t) dev_handle, &rindex, &rsize, &rlnkcnt); |
msg = async_send_1(phone, VFS_MOUNTED, |
(ipcarg_t) dev_handle, &answer); |
/* send the mount options */ |
rc = ipc_data_write_start(phone, (void *)opts, |
str_size(opts)); |
if (rc != EOK) { |
async_wait_for(msg, NULL); |
vfs_release_phone(phone); |
futex_up(&rootfs_futex); |
ipc_answer_0(rid, rc); |
return; |
} |
async_wait_for(msg, &rc); |
vfs_release_phone(phone); |
if (rc != EOK) { |
229,21 → 163,25 |
return; |
} |
rindex = (fs_index_t) IPC_GET_ARG1(answer); |
rsize = (size_t) IPC_GET_ARG2(answer); |
rlnkcnt = (unsigned) IPC_GET_ARG3(answer); |
mr_res.triplet.fs_handle = fs_handle; |
mr_res.triplet.dev_handle = dev_handle; |
mr_res.triplet.index = (fs_index_t) rindex; |
mr_res.size = (size_t) rsize; |
mr_res.lnkcnt = (unsigned) rlnkcnt; |
mr_res.triplet.index = rindex; |
mr_res.size = rsize; |
mr_res.lnkcnt = rlnkcnt; |
mr_res.type = VFS_NODE_DIRECTORY; |
rootfs.fs_handle = fs_handle; |
rootfs.dev_handle = dev_handle; |
futex_up(&rootfs_futex); |
/* Add reference to the mounted root. */ |
mr_node = vfs_node_get(&mr_res); |
assert(mr_node); |
ipc_answer_0(rid, rc); |
return; |
} else { |
252,7 → 190,6 |
* being mounted first. |
*/ |
futex_up(&rootfs_futex); |
free(buf); |
ipc_answer_0(rid, ENOENT); |
return; |
} |
259,21 → 196,31 |
} |
futex_up(&rootfs_futex); |
free(buf); /* The buffer is not needed anymore. */ |
/* |
* At this point, we have all necessary pieces: file system and device |
* handles, and we know the mount point VFS node. |
*/ |
phone = vfs_grab_phone(mp_res.triplet.fs_handle); |
rc = async_req_4_0(phone, VFS_MOUNT, |
msg = async_send_4(phone, VFS_MOUNT, |
(ipcarg_t) mp_res.triplet.dev_handle, |
(ipcarg_t) mp_res.triplet.index, |
(ipcarg_t) fs_handle, |
(ipcarg_t) dev_handle); |
(ipcarg_t) dev_handle, &answer); |
/* send the mount options */ |
rc = ipc_data_write_start(phone, (void *)opts, str_size(opts)); |
if (rc != EOK) { |
async_wait_for(msg, NULL); |
vfs_release_phone(phone); |
/* Mount failed, drop reference to mp_node. */ |
if (mp_node) |
vfs_node_put(mp_node); |
ipc_answer_0(rid, rc); |
return; |
} |
async_wait_for(msg, &rc); |
vfs_release_phone(phone); |
if (rc != EOK) { |
/* Mount failed, drop reference to mp_node. */ |
if (mp_node) |
283,6 → 230,233 |
ipc_answer_0(rid, rc); |
} |
/** Process pending mount requests */ |
void vfs_process_pending_mount() |
{ |
link_t *cur; |
loop: |
for (cur = pending_req.next; cur != &pending_req; cur = cur->next) { |
pending_req_t *pr = list_get_instance(cur, pending_req_t, link); |
fs_handle_t fs_handle = fs_name_to_handle(pr->fs_name, true); |
if (!fs_handle) |
continue; |
/* Acknowledge that we know fs_name. */ |
ipc_answer_0(pr->callid, EOK); |
/* Do the mount */ |
vfs_mount_internal(pr->rid, pr->dev_handle, fs_handle, pr->mp, |
pr->opts); |
free(pr->fs_name); |
free(pr->mp); |
free(pr->opts); |
list_remove(cur); |
free(pr); |
goto loop; |
} |
} |
void vfs_mount(ipc_callid_t rid, ipc_call_t *request) |
{ |
/* |
* We expect the library to do the device-name to device-handle |
* translation for us, thus the device handle will arrive as ARG1 |
* in the request. |
*/ |
dev_handle_t dev_handle = (dev_handle_t) IPC_GET_ARG1(*request); |
/* |
* Mount flags are passed as ARG2. |
*/ |
unsigned int flags = (unsigned int) IPC_GET_ARG2(*request); |
/* |
* For now, don't make use of ARG3, but it can be used to |
* carry mount options in the future. |
*/ |
/* We want the client to send us the mount point. */ |
ipc_callid_t callid; |
size_t size; |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
/* Check whether size is reasonable wrt. the mount point. */ |
if ((size < 1) || (size > MAX_PATH_LEN)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
/* Allocate buffer for the mount point data being received. */ |
char *mp = malloc(size + 1); |
if (!mp) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
/* Deliver the mount point. */ |
ipcarg_t retval = ipc_data_write_finalize(callid, mp, size); |
if (retval != EOK) { |
ipc_answer_0(rid, retval); |
free(mp); |
return; |
} |
mp[size] = '\0'; |
/* Now we expect to receive the mount options. */ |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
free(mp); |
return; |
} |
/* Check the offered options size. */ |
if (size < 0 || size > MAX_MNTOPTS_LEN) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
free(mp); |
return; |
} |
/* Allocate buffer for the mount options. */ |
char *opts = (char *) malloc(size + 1); |
if (!opts) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
free(mp); |
return; |
} |
/* Deliver the mount options. */ |
retval = ipc_data_write_finalize(callid, opts, size); |
if (retval != EOK) { |
ipc_answer_0(rid, retval); |
free(mp); |
free(opts); |
return; |
} |
opts[size] = '\0'; |
/* |
* Now, we expect the client to send us data with the name of the file |
* system. |
*/ |
if (!ipc_data_write_receive(&callid, &size)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
free(mp); |
free(opts); |
return; |
} |
/* |
* Don't receive more than is necessary for storing a full file system |
* name. |
*/ |
if ((size < 1) || (size > FS_NAME_MAXLEN)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
free(mp); |
free(opts); |
return; |
} |
/* |
* Allocate buffer for file system name. |
*/ |
char *fs_name = (char *) malloc(size + 1); |
if (fs_name == NULL) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
free(mp); |
free(opts); |
return; |
} |
/* Deliver the file system name. */ |
retval = ipc_data_write_finalize(callid, fs_name, size); |
if (retval != EOK) { |
ipc_answer_0(rid, retval); |
free(mp); |
free(opts); |
free(fs_name); |
return; |
} |
fs_name[size] = '\0'; |
/* |
* Wait for IPC_M_PING so that we can return an error if we don't know |
* fs_name. |
*/ |
ipc_call_t data; |
callid = async_get_call(&data); |
if (IPC_GET_METHOD(data) != IPC_M_PING) { |
ipc_answer_0(callid, ENOTSUP); |
ipc_answer_0(rid, ENOTSUP); |
free(mp); |
free(opts); |
free(fs_name); |
return; |
} |
/* |
* Check if we know a file system with the same name as is in fs_name. |
* This will also give us its file system handle. |
*/ |
fs_handle_t fs_handle = fs_name_to_handle(fs_name, true); |
if (!fs_handle) { |
if (flags & IPC_FLAG_BLOCKING) { |
pending_req_t *pr; |
/* Blocking mount, add to pending list */ |
pr = (pending_req_t *) malloc(sizeof(pending_req_t)); |
if (!pr) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
free(mp); |
free(fs_name); |
free(opts); |
return; |
} |
pr->fs_name = fs_name; |
pr->mp = mp; |
pr->opts = opts; |
pr->callid = callid; |
pr->rid = rid; |
pr->dev_handle = dev_handle; |
link_initialize(&pr->link); |
list_append(&pr->link, &pending_req); |
return; |
} |
ipc_answer_0(callid, ENOENT); |
ipc_answer_0(rid, ENOENT); |
free(mp); |
free(fs_name); |
free(opts); |
return; |
} |
/* Acknowledge that we know fs_name. */ |
ipc_answer_0(callid, EOK); |
/* Do the mount */ |
vfs_mount_internal(rid, dev_handle, fs_handle, mp, opts); |
free(mp); |
free(fs_name); |
free(opts); |
} |
void vfs_open(ipc_callid_t rid, ipc_call_t *request) |
{ |
if (!vfs_files_init()) { |
723,37 → 897,37 |
void vfs_rename(ipc_callid_t rid, ipc_call_t *request) |
{ |
size_t len; |
size_t olen, nlen; |
ipc_callid_t callid; |
int rc; |
/* Retrieve the old path. */ |
if (!ipc_data_write_receive(&callid, &len)) { |
if (!ipc_data_write_receive(&callid, &olen)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
return; |
} |
char *old = malloc(len + 1); |
char *old = malloc(olen + 1); |
if (!old) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
return; |
} |
if ((rc = ipc_data_write_finalize(callid, old, len))) { |
if ((rc = ipc_data_write_finalize(callid, old, olen))) { |
ipc_answer_0(rid, rc); |
free(old); |
return; |
} |
old[len] = '\0'; |
old[olen] = '\0'; |
/* Retrieve the new path. */ |
if (!ipc_data_write_receive(&callid, &len)) { |
if (!ipc_data_write_receive(&callid, &nlen)) { |
ipc_answer_0(callid, EINVAL); |
ipc_answer_0(rid, EINVAL); |
free(old); |
return; |
} |
char *new = malloc(len + 1); |
char *new = malloc(nlen + 1); |
if (!new) { |
ipc_answer_0(callid, ENOMEM); |
ipc_answer_0(rid, ENOMEM); |
760,16 → 934,16 |
free(old); |
return; |
} |
if ((rc = ipc_data_write_finalize(callid, new, len))) { |
if ((rc = ipc_data_write_finalize(callid, new, nlen))) { |
ipc_answer_0(rid, rc); |
free(old); |
free(new); |
return; |
} |
new[len] = '\0'; |
new[nlen] = '\0'; |
char *oldc = canonify(old, &len); |
char *newc = canonify(new, NULL); |
char *oldc = canonify(old, &olen); |
char *newc = canonify(new, &nlen); |
if (!oldc || !newc) { |
ipc_answer_0(rid, EINVAL); |
free(old); |
776,8 → 950,18 |
free(new); |
return; |
} |
if (!strncmp(newc, oldc, len)) { |
/* oldc is a prefix of newc */ |
oldc[olen] = '\0'; |
newc[nlen] = '\0'; |
if ((!str_lcmp(newc, oldc, str_length(oldc))) && |
((newc[str_length(oldc)] == '/') || |
(str_length(oldc) == 1) || |
(str_length(oldc) == str_length(newc)))) { |
/* |
* oldc is a prefix of newc and either |
* - newc continues with a / where oldc ends, or |
* - oldc was / itself, or |
* - oldc and newc are equal. |
*/ |
ipc_answer_0(rid, EINVAL); |
free(old); |
free(new); |
805,8 → 989,23 |
free(new); |
return; |
} |
/* Determine the path to the parent of the node with the new name. */ |
char *parentc = str_dup(newc); |
if (!parentc) { |
rwlock_write_unlock(&namespace_rwlock); |
ipc_answer_0(rid, rc); |
free(old); |
free(new); |
return; |
} |
char *lastsl = str_rchr(parentc + 1, L'/'); |
if (lastsl) |
*lastsl = '\0'; |
else |
parentc[1] = '\0'; |
/* Lookup parent of the new file name. */ |
rc = vfs_lookup_internal(newc, L_PARENT, &new_par_lr, NULL); |
rc = vfs_lookup_internal(parentc, L_NONE, &new_par_lr, NULL); |
free(parentc); /* not needed anymore */ |
if (rc != EOK) { |
rwlock_write_unlock(&namespace_rwlock); |
ipc_answer_0(rid, rc); |
//branches/tracing/uspace/srv/vfs/vfs_register.c |
---|
28,10 → 28,10 |
/** @addtogroup fs |
* @{ |
*/ |
*/ |
/** |
* @file vfs_register.c |
* @file vfs_register.c |
* @brief |
*/ |
98,30 → 98,6 |
return false; |
} |
/* |
* Check if the FS implements mandatory VFS operations. |
*/ |
if (info->ops[IPC_METHOD_TO_VFS_OP(VFS_LOOKUP)] != VFS_OP_DEFINED) { |
dprintf("Operation VFS_LOOKUP not defined by the client.\n"); |
return false; |
} |
if (info->ops[IPC_METHOD_TO_VFS_OP(VFS_READ)] != VFS_OP_DEFINED) { |
dprintf("Operation VFS_READ not defined by the client.\n"); |
return false; |
} |
/* |
* Check if each operation is either not defined, defined or default. |
*/ |
for (i = VFS_FIRST; i < VFS_LAST_CLNT; i++) { |
if ((info->ops[IPC_METHOD_TO_VFS_OP(i)] != VFS_OP_NULL) && |
(info->ops[IPC_METHOD_TO_VFS_OP(i)] != VFS_OP_DEFAULT) && |
(info->ops[IPC_METHOD_TO_VFS_OP(i)] != VFS_OP_DEFINED)) { |
dprintf("Operation info not understood.\n"); |
return false; |
} |
} |
return true; |
} |
302,6 → 278,11 |
dprintf("\"%.*s\" filesystem successfully registered, handle=%d.\n", |
FS_NAME_MAXLEN, fs_info->vfs_info.name, fs_info->fs_handle); |
/* Process pending mount requests possibly waiting |
* for this filesystem implementation. |
*/ |
vfs_process_pending_mount(); |
} |
/** For a given file system handle, implement policy for allocating a phone. |
395,8 → 376,7 |
link_t *cur; |
for (cur = fs_head.next; cur != &fs_head; cur = cur->next) { |
fs_info_t *fs = list_get_instance(cur, fs_info_t, fs_link); |
if (strncmp(fs->vfs_info.name, name, |
sizeof(fs->vfs_info.name)) == 0) { |
if (str_cmp(fs->vfs_info.name, name) == 0) { |
handle = fs->fs_handle; |
break; |
} |
//branches/tracing/uspace/srv/vfs/vfs.h |
---|
47,8 → 47,6 |
#define VFS_FIRST IPC_FIRST_USER_METHOD |
#define IPC_METHOD_TO_VFS_OP(m) ((m) - VFS_FIRST) |
/* Basic types. */ |
typedef int16_t fs_handle_t; |
typedef int16_t dev_handle_t; |
81,32 → 79,16 |
VFS_LAST_SRV, /* keep this the last member of this enum */ |
} vfs_request_srv_t; |
/** |
* An instance of this structure is associated with a particular FS operation. |
* It tells VFS if the FS supports the operation or maybe if a default one |
* should be used. |
*/ |
typedef enum { |
VFS_OP_NULL = 0, |
VFS_OP_DEFAULT, |
VFS_OP_DEFINED |
} vfs_op_t; |
#define FS_NAME_MAXLEN 20 |
/** |
* A structure like this is passed to VFS by each individual FS upon its |
* registration. It assosiates a human-readable identifier with each |
* registered FS. More importantly, through this structure, the FS announces |
* what operations it supports. |
* registered FS. |
*/ |
typedef struct { |
/** Unique identifier of the fs. */ |
char name[FS_NAME_MAXLEN + 1]; |
/** Operations. */ |
vfs_op_t ops[VFS_LAST_CLNT - VFS_FIRST]; |
} vfs_info_t; |
/** |
184,11 → 166,6 |
* VFS_UNLINK. |
*/ |
#define L_UNLINK 32 |
/** |
* L_PARENT performs a lookup but returns the triplet of the parent node. |
* This flag may not be combined with any other lookup flag. |
*/ |
#define L_PARENT 64 |
typedef enum vfs_node_type { |
VFS_NODE_UNKNOWN, |
272,6 → 249,8 |
extern uint8_t *plb; /**< Path Lookup Buffer */ |
extern link_t plb_head; /**< List of active PLB entries. */ |
#define MAX_MNTOPTS_LEN 256 |
/** Holding this rwlock prevents changes in file system namespace. */ |
extern rwlock_t namespace_rwlock; |
300,6 → 279,7 |
extern void vfs_node_addref(vfs_node_t *); |
extern void vfs_node_delref(vfs_node_t *); |
extern void vfs_process_pending_mount(void); |
extern void vfs_register(ipc_callid_t, ipc_call_t *); |
extern void vfs_mount(ipc_callid_t, ipc_call_t *); |
extern void vfs_open(ipc_callid_t, ipc_call_t *); |
//branches/tracing/uspace/srv/vfs/Makefile |
---|
30,10 → 30,9 |
## Setup toolchain |
# |
include ../../Makefile.config |
LIBC_PREFIX = ../../lib/libc |
SOFTINT_PREFIX = ../../lib/softint |
include $(LIBC_PREFIX)/Makefile.toolchain |
LIBS = $(LIBC_PREFIX)/libc.a |
59,13 → 58,13 |
-include Makefile.depend |
clean: |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend |
-rm -f $(OUTPUT) $(OUTPUT).map $(OUTPUT).disasm Makefile.depend $(OBJECTS) |
depend: |
$(CC) $(DEFS) $(CFLAGS) -M $(SOURCES) > Makefile.depend |
$(OUTPUT): $(OBJECTS) $(LIBS) |
$(LD) -T $(LIBC_PREFIX)/arch/$(ARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld $(OBJECTS) $(LIBS) $(LFLAGS) -o $@ -Map $(OUTPUT).map |
disasm: $(OUTPUT).disasm |
//branches/tracing/uspace/srv/vfs/vfs_file.c |
---|
103,7 → 103,7 |
*/ |
int vfs_fd_free(int fd) |
{ |
if ((fd >= MAX_OPEN_FILES) || (files[fd] == NULL)) |
if ((fd < 0) || (fd >= MAX_OPEN_FILES) || (files[fd] == NULL)) |
return EBADF; |
vfs_file_delref(files[fd]); |
files[fd] = NULL; |
150,7 → 150,7 |
*/ |
vfs_file_t *vfs_file_get(int fd) |
{ |
if (fd < MAX_OPEN_FILES) |
if ((fd >= 0) && (fd < MAX_OPEN_FILES)) |
return files[fd]; |
return NULL; |
} |
//branches/tracing/uspace/Makefile |
---|
29,7 → 29,7 |
## Include configuration |
# |
-include Makefile.config |
-include ../Makefile.config |
DIRS = \ |
lib/libc \ |
55,43 → 55,29 |
app/init \ |
app/bdsh |
ifeq ($(ARCH), amd64) |
ifeq ($(UARCH),amd64) |
DIRS += srv/pci |
endif |
ifeq ($(ARCH), ia32) |
ifeq ($(UARCH),ia32) |
DIRS += srv/pci |
endif |
ifeq ($(ARCH), mips32) |
CFLAGS += -DCONFIG_MIPS_FPU |
ifeq ($(UARCH),sparc64) |
DIRS += \ |
srv/fhc \ |
srv/obio |
endif |
ifeq ($(ARCH), mips32eb) |
CFLAGS += -DCONFIG_MIPS_FPU |
endif |
BUILDS := $(addsuffix .build,$(DIRS)) |
CLEANS := $(addsuffix .clean,$(DIRS)) |
.PHONY: all config build $(BUILDS) $(CLEANS) clean distclean |
.PHONY: all $(BUILDS) $(CLEANS) clean |
all: |
../tools/config.py uspace.config default $(ARCH) $(COMPILER) $(CONFIG_DEBUG) |
$(MAKE) -C . build |
all: ../Makefile.config ../config.h ../config.defs $(BUILDS) |
config: |
../tools/config.py uspace.config |
build: $(BUILDS) |
clean: $(CLEANS) |
find $(DIRS) -name '*.o' -follow -exec rm \{\} \; |
find lib/libc -name "_link.ld" -exec rm \{\} \; |
distclean: clean |
-rm Makefile.config |
$(CLEANS): |
-$(MAKE) -C $(basename $@) clean |
//branches/tracing/HelenOS.config |
---|
1,5 → 1,6 |
# |
# Copyright (c) 2006 Ondrej Palkovsky |
# Copyright (c) 2006 Ondrej Palkovsky |
# Copyright (c) 2009 Martin Decky |
# All rights reserved. |
# |
# Redistribution and use in source and binary forms, with or without |
26,55 → 27,438 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
## General configuration directives |
## General platform options |
# Platform |
% Platform |
@ "amd64" AMD64/Intel EM64T (PC) |
@ "arm32" ARM 32-bit |
@ "ia32" Intel IA-32 (PC) |
@ "ia32xen" Intel IA-32 on Xen hypervisor |
@ "ia64" Intel IA-64 |
@ "mips32" MIPS 32-bit |
@ "ppc32" PowerPC 32-bit (iMac G4) |
@ "ppc64" PowerPC 64-bit (iMac G5) |
@ "sparc64" Sun UltraSPARC 64-bit |
! PLATFORM (choice) |
# Machine |
% Machine type |
@ "msim" MSIM |
@ "simics" Simics |
@ "bgxemul" GXEmul big endian |
@ "lgxemul" GXEmul little endian |
! [PLATFORM=mips32] MACHINE (choice) |
# Machine type |
% Machine type |
@ "i460GX" i460GX chipset machine |
@ "ski" Ski ia64 simulator |
@ "i460GX" i460GX chipset machine |
! [PLATFORM=ia64] MACHINE (choice) |
# Compiler |
% Machine type |
@ "generic" Generic Sun workstation or server |
@ "serengeti" Serengeti system |
! [PLATFORM=sparc64] MACHINE (choice) |
% CPU type |
@ "pentium4" Pentium 4 |
@ "pentium3" Pentium 3 |
@ "core" Core Solo/Duo |
@ "athlon_xp" Athlon XP |
@ "athlon_mp" Athlon MP |
! [PLATFORM=ia32] PROCESSOR (choice) |
% CPU type |
@ "opteron" Opteron |
! [PLATFORM=amd64] PROCESSOR (choice) |
% CPU type |
@ "us" UltraSPARC I-II subarchitecture |
@ "us3" UltraSPARC III-IV subarchitecture |
! [PLATFORM=sparc64&MACHINE=generic] PROCESSOR (choice) |
% CPU type |
@ "us3" |
! [PLATFORM=sparc64&MACHINE=serengeti] PROCESSOR (choice) |
% Ramdisk format |
@ "tmpfs" TMPFS image |
@ "fat" FAT16 image |
! RDFMT (choice) |
## Mapping between platform and kernel architecture |
% Kernel architecture |
@ "amd64" |
! [PLATFORM=amd64] KARCH (choice) |
% Kernel architecture |
@ "arm32" |
! [PLATFORM=arm32] KARCH (choice) |
% Kernel architecture |
@ "ia32" |
! [PLATFORM=ia32] KARCH (choice) |
% Kernel architecture |
@ "ia32xen" |
! [PLATFORM=ia32xen] KARCH (choice) |
% Kernel architecture |
@ "ia64" |
! [PLATFORM=ia64] KARCH (choice) |
% Kernel architecture |
@ "mips32" |
! [PLATFORM=mips32] KARCH (choice) |
% Kernel architecture |
@ "ppc32" |
! [PLATFORM=ppc32] KARCH (choice) |
% Kernel architecture |
@ "ppc64" |
! [PLATFORM=ppc64] KARCH (choice) |
% Kernel architecture |
@ "sparc64" |
! [PLATFORM=sparc64] KARCH (choice) |
## Mapping between platform and user space architecture |
% User space architecture |
@ "amd64" |
! [PLATFORM=amd64] UARCH (choice) |
% User space architecture |
@ "arm32" |
! [PLATFORM=arm32] UARCH (choice) |
% User space architecture |
@ "ia32" |
! [PLATFORM=ia32|PLATFORM=ia32xen] UARCH (choice) |
% User space architecture |
@ "ia64" |
! [PLATFORM=ia64] UARCH (choice) |
% User space architecture |
@ "mips32" |
! [PLATFORM=mips32&(MACHINE=msim|MACHINE=lgxemul)] UARCH (choice) |
% User space architecture |
@ "mips32eb" |
! [PLATFORM=mips32&MACHINE=bgxemul] UARCH (choice) |
% User space architecture |
@ "ppc32" |
! [PLATFORM=ppc32] UARCH (choice) |
% User space architecture |
@ "ppc64" |
! [PLATFORM=ppc64] UARCH (choice) |
% User space architecture |
@ "sparc64" |
! [PLATFORM=sparc64] UARCH (choice) |
## Mapping between platform and boot architecture |
% Boot architecture |
@ "amd64" |
! [PLATFORM=amd64] BARCH (choice) |
% Boot architecture |
@ "arm32" |
! [PLATFORM=arm32] BARCH (choice) |
% Boot architecture |
@ "ia32" |
! [PLATFORM=ia32] BARCH (choice) |
% Boot architecture |
@ "ia32xen" |
! [PLATFORM=ia32xen] BARCH (choice) |
% Boot architecture |
@ "ia64" |
! [PLATFORM=ia64] BARCH (choice) |
% Boot architecture |
@ "mips32" |
! [PLATFORM=mips32] BARCH (choice) |
% Boot architecture |
@ "ppc32" |
! [PLATFORM=ppc32] BARCH (choice) |
% Boot architecture |
@ "ppc64" |
! [PLATFORM=ppc64] BARCH (choice) |
% Boot architecture |
@ "sparc64" |
! [PLATFORM=sparc64] BARCH (choice) |
## Mapping between platform and image format |
% Image format |
@ "binary" |
! [PLATFORM=mips32&MACHINE=msim] IMAGE (choice) |
% Image format |
@ "ecoff" |
! [PLATFORM=mips32&(MACHINE=bgxemul|MACHINE=lgxemul)] IMAGE (choice) |
## Compiler options |
% Compiler |
@ "gcc_cross" GCC Cross-compiler |
@ "gcc_native" GCC Native |
@ "icc_native" ICC Native |
@ "suncc_native" Sun Studio C Compiler |
! [PLATFORM=amd64|PLATFORM=ia32|PLATFORM=ia32xen] COMPILER (choice) |
! [PLATFORM=amd64|PLATFORM=ia32] COMPILER (choice) |
# Compiler |
% Compiler |
@ "gcc_cross" GCC Cross-compiler |
@ "gcc_native" GCC Native |
@ "icc_native" ICC Native |
! [PLATFORM=ia64] COMPILER (choice) |
# Compiler |
% Compiler |
@ "gcc_cross" GCC Cross-compiler |
@ "gcc_native" GCC Native |
@ "suncc_native" Sun Studio C Compiler |
! [PLATFORM=sparc64] COMPILER (choice) |
# Compiler |
% Compiler |
@ "gcc_cross" GCC Cross-compiler |
@ "gcc_native" GCC Native |
! [PLATFORM=arm32|PLATFORM=mips32|PLATFORM=ppc32|PLATFORM=ppc64] COMPILER (choice) |
! [PLATFORM=arm32|PLATFORM=mips32|PLATFORM=ppc32] COMPILER (choice) |
# Debug build |
## Kernel configuration |
% Fences |
! [PLATFORM=ia32&(PROCESSOR=athlon_xp|PROCESSOR=athlon_mp|PROCESSOR=pentium3)] CONFIG_FENCES_P3 (y) |
% Fences |
! [PLATFORM=ia32&(PROCESSOR=pentium4|PROCESSOR=core)] CONFIG_FENCES_P4 (y) |
% Fences |
! [PLATFORM=amd64] CONFIG_FENCES_P4 (y) |
% ACPI support |
! [PLATFORM=ia32|PLATFORM=amd64] CONFIG_ACPI (y) |
% Hierarchical page tables support |
! [PLATFORM=ia32|PLATFORM=amd64|PLATFORM=arm32|PLATFORM=mips32|PLATFORM=ppc32] CONFIG_PAGE_PT (y) |
% Page hash table support |
! [PLATFORM=ia64|PLATFORM=sparc64] CONFIG_PAGE_HT (y) |
% Software integer division support |
! [PLATFORM=ia32|PLATFORM=arm32|PLATFORM=ia64|PLATFORM=mips32|PLATFORM=ppc32] CONFIG_SOFTINT (y) |
% ASID support |
! [PLATFORM=ia64|PLATFORM=mips32|PLATFORM=ppc32|PLATFORM=sparc64] CONFIG_ASID (y) |
% ASID FIFO support |
! [PLATFORM=ia64|PLATFORM=mips32|PLATFORM=ppc32|PLATFORM=sparc64] CONFIG_ASID_FIFO (y) |
% OpenFirmware tree support |
! [PLATFORM=sparc64] CONFIG_OFW_TREE (y) |
% Multiboot standard support |
! [PLATFORM=ia32|PLATFORM=amd64] CONFIG_MULTIBOOT (y) |
% FPU support |
! [PLATFORM=ia32|PLATFORM=amd64|PLATFORM=ia64|PLATFORM=sparc64] CONFIG_FPU (y) |
% FPU support |
! [PLATFORM=mips32&(MACHINE=lgxemul|MACHINE=bgxemul)] CONFIG_FPU (y) |
## Kernel features options |
% Support for SMP |
! [PLATFORM=ia32|PLATFORM=amd64|PLATFORM=sparc64|PLATFORM=ia64|(PLATFORM=mips32&MACHINE=msim)] CONFIG_SMP (y/n) |
% Debug build |
! CONFIG_DEBUG (y/n) |
% Deadlock detection support for spinlocks |
! [CONFIG_DEBUG=y&CONFIG_SMP=y] CONFIG_DEBUG_SPINLOCK (y/n) |
% Improved support for hyperthreading |
! [PLATFORM=amd64&CONFIG_SMP=y] CONFIG_HT (y/n) |
% Improved support for hyperthreading |
! [PLATFORM=ia32&PROCESSOR!=athlon_xp&PROCESSOR!=athlon_mp&PROCESSOR!=pentium3&CONFIG_SMP=y] CONFIG_HT (y/n) |
% Lazy FPU context switching |
! [CONFIG_FPU=y] CONFIG_FPU_LAZY (y/n) |
% Use VHPT |
! [PLATFORM=ia64] CONFIG_VHPT (n/y) |
% Use TSB |
! [PLATFORM=sparc64] CONFIG_TSB (y/n) |
% IO SAPIC on default address support |
! [PLATFORM=ia64&MACHINE!=ski] CONFIG_IOSAPIC (y/n) |
% Virtually indexed D-cache support |
! [PLATFORM=sparc64] CONFIG_VIRT_IDX_DCACHE (y/n) |
% Support for userspace debuggers |
! CONFIG_UDEBUG (y/n) |
% Kernel console support |
! CONFIG_KCONSOLE (y/n) |
% Kernel symbol information |
! CONFIG_SYMTAB (y/n) |
% Detailed kernel logging |
! CONFIG_LOG (n/y) |
% Compile kernel tests |
! CONFIG_TEST (y/n) |
## Hardware support |
% Input device class |
@ "generic" Keyboard or serial line |
@ "none" No input device |
! [PLATFORM=ia32|PLATFORM=arm32|PLATFORM=amd64|PLATFORM=mips32|PLATFORM=ppc32|PLATFORM=sparc64] CONFIG_HID_IN (choice) |
% Input device class |
@ "generic" Keyboard or serial line |
@ "keyboard" Keyboard |
@ "serial" Serial line |
@ "none" No input device |
! [PLATFORM=ia64&MACHINE=i460GX] CONFIG_HID_IN (choice) |
% Output device class |
@ "generic" Monitor or serial line |
@ "none" No output device |
! [PLATFORM=ia32|PLATFORM=amd64|PLATFORM=sparc64|PLATFORM=ppc32|(PLATFORM=ia64&MACHINE=i460GX)|(PLATFORM=mips32&MACHINE=msim)] CONFIG_HID_OUT (choice) |
% Output device class |
@ "generic" Monitor or serial line |
@ "monitor" Monitor |
@ "serial" Serial line |
@ "none" No output device |
! [PLATFORM=mips32&(MACHINE=bgxemul|MACHINE=lgxemul)] CONFIG_HID_OUT (choice) |
% Output device class |
@ "generic" Monitor or serial line |
@ "monitor" Monitor |
@ "serial" Serial line |
@ "none" No output device |
! [PLATFORM=arm32] CONFIG_HID_OUT (choice) |
% PC keyboard support |
! [CONFIG_HID_IN=generic&(PLATFORM=ia32|PLATFORM=amd64)] CONFIG_PC_KBD (y/n) |
% PC keyboard support |
! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=keyboard)&PLATFORM=ia64&MACHINE=i460GX] CONFIG_PC_KBD (y/n) |
% Support for msim/GXemul keyboard |
! [CONFIG_HID_IN=generic&PLATFORM=mips32] CONFIG_MIPS_KBD (y/n) |
% Support for msim/GXemul printer |
! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=serial)&PLATFORM=mips32] CONFIG_MIPS_PRN (y/n) |
% Support for GXemul keyboard |
! [CONFIG_HID_IN=generic&PLATFORM=arm32] CONFIG_ARM_KBD (y/n) |
% Support for GXemul printer |
! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=serial)&PLATFORM=arm32] CONFIG_ARM_PRN (y/n) |
% Support for VIA CUDA controller |
! [CONFIG_HID_IN=generic&PLATFORM=ppc32] CONFIG_VIA_CUDA (y/n) |
% Support for NS16550 controller |
! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=keyboard)&PLATFORM=sparc64&MACHINE=generic] CONFIG_NS16550 (y/n) |
% Support for NS16550 controller |
! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=serial)&PLATFORM=ia64&MACHINE=i460GX] CONFIG_NS16550 (y/n) |
% Support for Z8530 controller |
! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=keyboard)&PLATFORM=sparc64&MACHINE=generic] CONFIG_Z8530 (y/n) |
% Support for Serengeti console |
! [CONFIG_HID_OUT=generic&PLATFORM=sparc64&MACHINE=serengeti] CONFIG_SGCN_PRN (y/n) |
% Support for Serengeti keyboard |
! [CONFIG_HID_IN=generic&PLATFORM=sparc64&MACHINE=serengeti] CONFIG_SGCN_KBD (y/n) |
% i8042 controller support |
! [CONFIG_PC_KBD=y] CONFIG_I8042 (y) |
% Sun keyboard support |
! [(CONFIG_HID_IN=generic|CONFIG_HID_IN=keyboard)&PLATFORM=sparc64&MACHINE=generic&(CONFIG_NS16550=y|CONFIG_Z8530=y)] CONFIG_SUN_KBD (y) |
% Dummy serial line input |
! [CONFIG_MIPS_KBD=y|CONFIG_ARM_KBD=y] CONFIG_DSRLNIN (y) |
% Dummy serial line output |
! [CONFIG_MIPS_PRN=y|CONFIG_ARM_PRN=y] CONFIG_DSRLNOUT (y) |
% Serial line input module |
! [CONFIG_DSRLNIN=y|(PLATFORM=ia64&MACHINE=i460GX&CONFIG_NS16550=y)|(PLATFORM=ia64&MACHINE=ski)|(PLATFORM=sparc64&MACHINE=serengeti&CONFIG_SGCN_KBD=y)] CONFIG_SRLN (y) |
% EGA support |
! [CONFIG_HID_OUT=generic&(PLATFORM=ia32|PLATFORM=amd64)] CONFIG_EGA (y/n) |
% EGA support |
! [CONFIG_HID_OUT=generic&PLATFORM=ia64&MACHINE=i460GX] CONFIG_EGA (y/n) |
% Framebuffer support |
! [CONFIG_HID_OUT=generic&(PLATFORM=ia32|PLATFORM=amd64|PLATFORM=ppc32)] CONFIG_FB (y/n) |
% Framebuffer support |
! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=monitor)&PLATFORM=mips32&(MACHINE=lgxemul|MACHINE=bgxemul)] CONFIG_FB (y/n) |
% Framebuffer support |
! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=monitor)&PLATFORM=arm32] CONFIG_FB (y/n) |
% Framebuffer support |
! [(CONFIG_HID_OUT=generic|CONFIG_HID_OUT=monitor)&PLATFORM=sparc64&MACHINE=generic] CONFIG_FB (y/n) |
% Default framebuffer mode |
@ "640x480" |
@ "800x600" |
@ "1024x768" |
@ "1152x720" |
@ "1152x864" |
@ "1280x960" |
@ "1280x1024" |
@ "1400x1050" |
@ "1440x900" |
@ "1440x1050" |
@ "1600x1200" |
@ "1920x1080" |
@ "1920x1200" |
! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_VESA_MODE (choice) |
% Default framebuffer depth |
@ "8" |
@ "16" |
@ "24" |
! [(PLATFORM=ia32|PLATFORM=amd64)&CONFIG_HID_OUT!=none&CONFIG_FB=y] CONFIG_VESA_BPP (choice) |
% Start AP processors by the loader |
! [PLATFORM=sparc64&CONFIG_SMP=y] CONFIG_AP (y/n) |
% Use Block Address Translation by the loader |
! [PLATFORM=ppc32] CONFIG_BAT (y/n) |
% Preserve A.OUT header in isofs.b |
! [PLATFORM=sparc64&MACHINE=generic] CONFIG_AOUT_ISOFS_B (y) |
% External ramdisk |
! [PLATFORM=sparc64] CONFIG_RD_EXTERNAL (y/n) |
//branches/tracing/boot/boot.config |
---|
File deleted |
//branches/tracing/boot/tools/ppc32/Makefile |
---|
File deleted |
//branches/tracing/boot/tools/ppc32/font-8x16.h |
---|
File deleted |
//branches/tracing/boot/tools/ppc32/debug.c |
---|
File deleted |
//branches/tracing/boot/tools/ppc32/font-8x16.c |
---|
File deleted |
//branches/tracing/boot/tools/ia32/gen_vga323.c |
---|
1,8 → 1,36 |
/* |
* Copyright (c) 2008 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <stdio.h> |
#define RED(i) ((i >> 5) & ((1 << 3) - 1)) |
#define GREEN(i) ((i >> 3) & ((1 << 2) - 1)) |
#define BLUE(i) (i & ((1 << 3) - 1)) |
#define RED(i) (((i) >> 5) & ((1 << 3) - 1)) |
#define GREEN(i) (((i) >> 3) & ((1 << 2) - 1)) |
#define BLUE(i) ((i) & ((1 << 3) - 1)) |
int main(int argc, char *argv[]) { |
unsigned int i; |
//branches/tracing/boot/genarch/ofw.h |
---|
74,7 → 74,7 |
typedef struct { |
void *addr; |
uint32_t size; |
} keyboard_t; |
} macio_t; |
typedef struct { |
uint32_t info; |
122,8 → 122,8 |
extern int ofw_map(const void *phys, const void *virt, const int size, const int mode); |
extern int ofw_memmap(memmap_t *map); |
extern int ofw_screen(screen_t *screen); |
extern int ofw_keyboard(keyboard_t *keyboard); |
extern int setup_palette(void); |
extern int ofw_macio(macio_t *macio); |
extern int ofw_setup_palette(void); |
extern void ofw_quiesce(void); |
#endif |
//branches/tracing/boot/genarch/ofw_tree.c |
---|
42,10 → 42,11 |
static ofw_tree_property_t *ofw_tree_properties_alloc(unsigned count) |
{ |
return balloc(count * sizeof(ofw_tree_property_t), sizeof(ofw_tree_property_t)); |
return balloc(count * sizeof(ofw_tree_property_t), |
sizeof(ofw_tree_property_t)); |
} |
static void * ofw_tree_space_alloc(size_t size) |
static void *ofw_tree_space_alloc(size_t size) |
{ |
char *addr; |
65,23 → 66,26 |
return addr; |
} |
/** Transfer information from one OpenFirmware node into its memory representation. |
/** Transfer information from one OpenFirmware node into its memory |
* representation. |
* |
* Transfer entire information from the OpenFirmware device tree 'current' node to |
* its memory representation in 'current_node'. This function recursively processes |
* all node's children. Node's peers are processed iteratively in order to prevent |
* stack from overflowing. |
* Transfer entire information from the OpenFirmware device tree 'current' node |
* to its memory representation in 'current_node'. This function recursively |
* processes all node's children. Node's peers are processed iteratively in |
* order to prevent stack from overflowing. |
* |
* @param current_node Pointer to uninitialized ofw_tree_node structure that will |
* become the memory represenation of 'current'. |
* @param parent_node Parent ofw_tree_node structure or NULL in case of root node. |
* @param current_node Pointer to uninitialized ofw_tree_node structure that |
* will become the memory represenation of 'current'. |
* @param parent_node Parent ofw_tree_node structure or NULL in case of root |
* node. |
* @param current OpenFirmware phandle to the current device tree node. |
*/ |
static void ofw_tree_node_process(ofw_tree_node_t *current_node, |
ofw_tree_node_t *parent_node, phandle current) |
ofw_tree_node_t *parent_node, phandle current) |
{ |
static char path[MAX_PATH_LEN+1]; |
static char path[MAX_PATH_LEN + 1]; |
static char name[OFW_TREE_PROPERTY_MAX_NAMELEN]; |
static char name2[OFW_TREE_PROPERTY_MAX_NAMELEN]; |
phandle peer; |
phandle child; |
size_t len; |
130,7 → 134,8 |
child_node = ofw_tree_node_alloc(); |
if (child_node) { |
ofw_tree_node_process(child_node, current_node, child); |
ofw_tree_node_process(child_node, current_node, |
child); |
current_node->child = child_node; |
} |
} |
139,9 → 144,11 |
* Count properties. |
*/ |
name[0] = '\0'; |
while (ofw_next_property(current, name, name) == 1) |
while (ofw_next_property(current, name, name2) == 1) { |
current_node->properties++; |
memcpy(name, name2, OFW_TREE_PROPERTY_MAX_NAMELEN); |
} |
if (!current_node->properties) |
return; |
148,20 → 155,23 |
/* |
* Copy properties. |
*/ |
current_node->property = ofw_tree_properties_alloc(current_node->properties); |
current_node->property = |
ofw_tree_properties_alloc(current_node->properties); |
if (!current_node->property) |
return; |
name[0] = '\0'; |
for (i = 0; ofw_next_property(current, name, name) == 1; i++) { |
for (i = 0; ofw_next_property(current, name, name2) == 1; i++) { |
size_t size; |
if (i == current_node->properties) |
break; |
memcpy(name, name2, OFW_TREE_PROPERTY_MAX_NAMELEN); |
memcpy(current_node->property[i].name, name, |
OFW_TREE_PROPERTY_MAX_NAMELEN); |
current_node->property[i].name[OFW_TREE_PROPERTY_MAX_NAMELEN] = '\0'; |
OFW_TREE_PROPERTY_MAX_NAMELEN); |
current_node->property[i].name[ |
OFW_TREE_PROPERTY_MAX_NAMELEN] = '\0'; |
size = ofw_get_proplen(current, name); |
current_node->property[i].size = size; |
173,7 → 183,8 |
/* |
* Copy property value to memory node. |
*/ |
(void) ofw_get_property(current, name, buf, size); |
(void) ofw_get_property(current, name, |
buf, size); |
} |
} else { |
current_node->property[i].value = NULL; |
180,7 → 191,8 |
} |
} |
current_node->properties = i; /* Just in case we ran out of memory. */ |
/* Just in case we ran out of memory. */ |
current_node->properties = i; |
/* |
* Iteratively process the next peer node. |
213,7 → 225,7 |
/** Construct memory representation of OpenFirmware device tree. |
* |
* @return NULL on failure or pointer to the root node. |
* @return NULL on failure or pointer to the root node. |
*/ |
ofw_tree_node_t *ofw_tree_build(void) |
{ |
234,8 → 246,8 |
if (ssm_node != -1) { |
ssm = ofw_tree_node_alloc(); |
if (ssm) { |
ofw_tree_node_process( |
ssm, root, ofw_find_device("/ssm@0,0")); |
ofw_tree_node_process(ssm, root, |
ofw_find_device("/ssm@0,0")); |
ssm->peer = root->child; |
root->child = ssm; |
} |
//branches/tracing/boot/genarch/ofw.c |
---|
25,7 → 25,7 |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
#include <ofw.h> |
#include <ofwarch.h> |
#include <printf.h> |
203,8 → 203,8 |
ofw_arg_t result[4]; |
int shift; |
if (ofw_call("call-method", 3, 5, result, "translate", ofw_mmu, |
virt) != 0) { |
if (ofw_call("call-method", 4, 5, result, "translate", ofw_mmu, |
virt, 0) != 0) { |
puts("Error: MMU method translate() failed, halting.\n"); |
halt(); |
} |
298,7 → 298,6 |
(sizeof(uintptr_t) / sizeof(uint32_t)); |
unsigned int sc = ofw_get_size_cells(ofw_memory) / |
(sizeof(uintptr_t) / sizeof(uint32_t)); |
printf("address cells: %d, size cells: %d. ", ac, sc); |
uintptr_t buf[((ac + sc) * MEMMAP_MAX_RECORDS)]; |
int ret = ofw_get_property(ofw_memory, "reg", buf, sizeof(buf)); |
373,23 → 372,30 |
return true; |
} |
#define RED(i) (((i) >> 5) & ((1 << 3) - 1)) |
#define GREEN(i) (((i) >> 3) & ((1 << 2) - 1)) |
#define BLUE(i) ((i) & ((1 << 3) - 1)) |
#define CLIP(i) ((i) <= 255 ? (i) : 255) |
/** |
* Sets up the palette for the 8-bit color depth configuration so that the |
* 3:2:3 color scheme can be used. Checks that setting the palette makes sense |
* (appropriate nodes exist in the OBP tree and the color depth is not greater |
* than 8). |
* than 8). |
* |
* @return true if the palette has been set, false otherwise |
* @return true if the palette has been set, false otherwise |
* |
*/ |
int setup_palette(void) |
int ofw_setup_palette(void) |
{ |
char device_name[BUF_SIZE]; |
/* resolve alias */ |
if (ofw_get_property(ofw_aliases, "screen", device_name, |
sizeof(device_name)) <= 0) |
sizeof(device_name)) <= 0) |
return false; |
/* for depth greater than 8 it makes no sense to set up the palette */ |
uint32_t depth; |
phandle device = ofw_find_device(device_name); |
404,15 → 410,12 |
ihandle screen = ofw_open(device_name); |
if (screen == -1) |
return false; |
/* setup the palette so that the 3:2:3 scheme is usable */ |
/* setup the palette so that the (inverted) 3:2:3 scheme is usable */ |
unsigned int i; |
for (i = 0; i < 256; i++) |
if (ofw_call("call-method", 6, 1, NULL, "color!", screen, |
i, |
i << 5, |
(i >> 3) << 6, |
(i >> 5) << 5) != 0); |
ofw_call("call-method", 6, 1, NULL, "color!", screen, |
255 - i, CLIP(BLUE(i) * 37), GREEN(i) * 85, CLIP(RED(i) * 37)); |
return true; |
} |
//branches/tracing/boot/generic/align.h |
---|
26,7 → 26,7 |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup generic |
/** @addtogroup generic |
* @{ |
*/ |
/** @file |
//branches/tracing/boot/generic/printf.c |
---|
83,14 → 83,16 |
*/ |
static void print_number(const unative_t num, const unsigned int base) |
{ |
int val = num; |
char d[sizeof(unative_t) * 8 + 1]; /* this is good enough even for base == 2 */ |
int val = num; |
/* This is enough even for base 2. */ |
char d[sizeof(unative_t) * 8 + 1]; |
int i = sizeof(unative_t) * 8 - 1; |
do { |
d[i--] = digits[val % base]; |
} while (val /= base); |
d[sizeof(unative_t) * 8] = 0; |
puts(&d[i + 1]); |
} |
156,89 → 158,89 |
int i = 0; |
va_list ap; |
char c; |
va_start(ap, fmt); |
while ((c = fmt[i++])) { |
switch (c) { |
/* control character */ |
/* control character */ |
case '%': |
switch (c = fmt[i++]) { |
/* percentile itself */ |
case '%': |
break; |
/* |
* String and character conversions. |
*/ |
case 's': |
puts(va_arg(ap, char_ptr)); |
goto loop; |
case 'c': |
c = (char) va_arg(ap, int); |
break; |
/* |
* Hexadecimal conversions with fixed width. |
*/ |
case 'P': |
puts("0x"); |
case 'p': |
print_fixed_hex(va_arg(ap, unative_t), |
sizeof(unative_t)); |
goto loop; |
case 'Q': |
puts("0x"); |
case 'q': |
print_fixed_hex(va_arg(ap, uint64_t), INT64); |
goto loop; |
case 'L': |
puts("0x"); |
case 'l': |
print_fixed_hex(va_arg(ap, unative_t), INT32); |
goto loop; |
case 'W': |
puts("0x"); |
case 'w': |
print_fixed_hex(va_arg(ap, unative_t), INT16); |
goto loop; |
case 'B': |
puts("0x"); |
case 'b': |
print_fixed_hex(va_arg(ap, unative_t), INT8); |
goto loop; |
/* |
* Decimal and hexadecimal conversions. |
*/ |
case 'd': |
print_number(va_arg(ap, unative_t), 10); |
goto loop; |
switch (c = fmt[i++]) { |
/* percentile itself */ |
case '%': |
break; |
/* |
* String and character conversions. |
*/ |
case 's': |
puts(va_arg(ap, char_ptr)); |
goto loop; |
case 'c': |
c = (char) va_arg(ap, int); |
break; |
/* |
* Hexadecimal conversions with fixed width. |
*/ |
case 'P': |
puts("0x"); |
case 'p': |
print_fixed_hex(va_arg(ap, unative_t), sizeof(unative_t)); |
goto loop; |
case 'Q': |
puts("0x"); |
case 'q': |
print_fixed_hex(va_arg(ap, uint64_t), INT64); |
goto loop; |
case 'L': |
puts("0x"); |
case 'l': |
print_fixed_hex(va_arg(ap, unative_t), INT32); |
goto loop; |
case 'W': |
puts("0x"); |
case 'w': |
print_fixed_hex(va_arg(ap, unative_t), INT16); |
goto loop; |
case 'B': |
puts("0x"); |
case 'b': |
print_fixed_hex(va_arg(ap, unative_t), INT8); |
goto loop; |
/* |
* Decimal and hexadecimal conversions. |
*/ |
case 'd': |
print_number(va_arg(ap, unative_t), 10); |
goto loop; |
case 'X': |
puts("0x"); |
case 'x': |
print_number(va_arg(ap, unative_t), 16); |
goto loop; |
/* |
* Bad formatting. |
*/ |
default: |
goto out; |
case 'X': |
puts("0x"); |
case 'x': |
print_number(va_arg(ap, unative_t), 16); |
goto loop; |
/* |
* Bad formatting. |
*/ |
default: |
goto out; |
} |
default: |
write(&c, 1); |
default: |
write(&c, 1); |
} |
loop: |
; |
} |
//branches/tracing/boot/generic/macros.h |
---|
0,0 → 1,53 |
/* |
* Copyright (c) 2009 Martin Decky |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* |
* - Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* - Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* - The name of the author may not be used to endorse or promote products |
* derived from this software without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
/** @addtogroup libc |
* @{ |
*/ |
/** @file |
*/ |
#ifndef BOOT_MACROS_H_ |
#define BOOT_MACROS_H_ |
#define min(a, b) ((a) < (b) ? (a) : (b)) |
#define max(a, b) ((a) > (b) ? (a) : (b)) |
#define SIZE2KB(size) ((size) >> 10) |
#define SIZE2MB(size) ((size) >> 20) |
#define KB2SIZE(kb) ((kb) << 10) |
#define MB2SIZE(mb) ((mb) << 20) |
#define STRING(arg) STRING_ARG(arg) |
#define STRING_ARG(arg) #arg |
#endif |
/** @} |
*/ |
//branches/tracing/boot/Makefile |
---|
29,7 → 29,8 |
## Include configuration |
# |
-include Makefile.config |
-include ../Makefile.config |
-include ../config.defs |
## Paths |
# |
38,31 → 39,11 |
KERNELDIR = $(BASE)/kernel |
USPACEDIR = $(BASE)/uspace |
ifeq ($(CONFIG_DEBUG),y) |
DEFS += -DCONFIG_DEBUG |
endif |
.PHONY: all build clean generic_clean |
ifeq ($(CONFIG_BAT),y) |
DEFS += -DCONFIG_BAT |
endif |
all: ../Makefile.config ../config.h ../config.defs build |
ifeq ($(CONFIG_SMP),y) |
DEFS += -DCONFIG_SMP |
endif |
-include arch/$(BARCH)/Makefile.inc |
.PHONY: all build config distclean clean generic_clean |
all: |
../tools/config.py boot.config default $(ARCH) $(COMPILER) $(CONFIG_DEBUG) $(IMAGE) |
$(MAKE) -C . build |
-include arch/$(ARCH)/Makefile.inc |
config: |
../tools/config.py boot.config |
distclean: clean |
-rm Makefile.config |
generic_clean: |
-rm generic/*.o genarch/*.o |
//branches/tracing/boot/arch/ppc64/Makefile.inc |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/asm.h |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/ofwarch.c |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/types.h |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/main.h |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/Makefile |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/debug.inc |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/ofwarch.h |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/_link.ld.in |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/asm.S |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/regname.h |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/boot.S |
---|
File deleted |
//branches/tracing/boot/arch/ppc64/loader/main.c |
---|
File deleted |
//branches/tracing/boot/arch/ia32xen/grub/menu.lst |
---|
File deleted |
//branches/tracing/boot/arch/ia32xen/grub/stage2_eltorito |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
//branches/tracing/boot/arch/ia32xen/grub/COPYING |
---|
File deleted |
//branches/tracing/boot/arch/ia32xen/grub/xen.gz |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
//branches/tracing/boot/arch/ia32xen/grub/menu.debug.lst |
---|
File deleted |
//branches/tracing/boot/arch/ia32xen/grub/README |
---|
File deleted |
//branches/tracing/boot/arch/ia32xen/grub/xen.debug.gz |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Deleted: svn:mime-type |
-application/octet-stream |
\ No newline at end of property |
//branches/tracing/boot/arch/ia32xen/Makefile.inc |
---|
File deleted |
//branches/tracing/boot/arch/sparc64/Makefile.inc |
---|
28,42 → 28,38 |
TMP = distroot |
ifeq ($(CONFIG_AOUT_ISOFS_B),n) |
SILO_PACKAGE=silo.patched.tar.gz |
endif |
ifeq ($(CONFIG_AOUT_ISOFS_B),y) |
SILO_PACKAGE=silo.tar.gz |
SILO_PACKAGE = silo.tar.gz |
else |
SILO_PACKAGE = silo.patched.tar.gz |
endif |
build: $(BASE)/image.iso |
$(BASE)/image.iso: depend arch/$(BARCH)/loader/image.boot |
mkdir -p $(TMP)/boot |
mkdir -p $(TMP)/HelenOS |
cat arch/$(BARCH)/silo/$(SILO_PACKAGE) | (cd $(TMP)/boot; tar xvfz -) |
cp arch/$(BARCH)/silo/README arch/$(BARCH)/silo/COPYING $(TMP)/boot |
ifeq ($(CONFIG_RD_EXTERNAL),y) |
SILO_CONF_FILTER = cat |
cp arch/$(BARCH)/silo/silo.conf $(TMP)/boot/silo.conf |
else |
SILO_CONF_FILTER = grep -v initrd |
cat arch/$(BARCH)/silo/silo.conf | grep -v initrd > $(TMP)/boot/silo.conf |
endif |
$(BASE)/image.iso: depend arch/$(ARCH)/loader/image.boot |
mkdir -p $(TMP)/boot |
mkdir -p $(TMP)/HelenOS |
cat arch/$(ARCH)/silo/$(SILO_PACKAGE) | (cd $(TMP)/boot; tar xvfz -) |
cp arch/$(ARCH)/silo/README arch/$(ARCH)/silo/COPYING $(TMP)/boot |
cat arch/$(ARCH)/silo/silo.conf | $(SILO_CONF_FILTER) >$(TMP)/boot/silo.conf |
cp arch/$(ARCH)/loader/image.boot $(TMP)/HelenOS/image.boot |
cp arch/$(BARCH)/loader/image.boot $(TMP)/HelenOS/image.boot |
gzip -f $(TMP)/HelenOS/image.boot |
ifeq ($(CONFIG_RD_EXTERNAL),y) |
cp arch/$(ARCH)/loader/initrd.img $(TMP)/HelenOS/initrd.img |
cp arch/$(BARCH)/loader/initrd.img $(TMP)/HelenOS/initrd.img |
endif |
mkisofs -f -G $(TMP)/boot/isofs.b -B ... -r -o $(BASE)/image.iso $(TMP)/ |
mkisofs -f -G $(TMP)/boot/isofs.b -B ... -r -o $@ $(TMP)/ |
depend: |
-rm arch/$(ARCH)/loader/image.boot |
-rm arch/$(BARCH)/loader/image.boot |
arch/$(ARCH)/loader/image.boot: |
$(MAKE) -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)" |
arch/$(BARCH)/loader/image.boot: |
$(MAKE) -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
clean: generic_clean |
$(MAKE) -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
$(MAKE) -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
-rm -fr $(TMP) |
-rm -f $(BASE)/image.iso |
//branches/tracing/boot/arch/sparc64/loader/asm.S |
---|
40,7 → 40,7 |
.global jump_to_kernel |
halt: |
b halt |
ba %xcc, halt |
nop |
memcpy: |
116,7 → 116,7 |
set subarchitecture, %g2 |
ldub [%g2], %g2 |
cmp %g2, 3 |
be 1f |
be %xcc, 1f |
nop |
0: |
call icache_flush |
//branches/tracing/boot/arch/sparc64/loader/boot.S |
---|
43,7 → 43,7 |
.global start |
start: |
b 1f |
ba %xcc, 1f |
nop |
/* |
83,7 → 83,7 |
call ofw_init ! initialize OpenFirmware |
stx %o4, [%l0] |
b bootstrap |
ba %xcc, bootstrap |
nop |
.align STACK_ALIGNMENT |
//branches/tracing/boot/arch/sparc64/loader/main.c |
---|
36,6 → 36,7 |
#include <ofw_tree.h> |
#include "ofwarch.h" |
#include <align.h> |
#include <macros.h> |
#include <string.h> |
bootinfo_t bootinfo; |
42,16 → 43,16 |
component_t components[COMPONENTS]; |
char *release = RELEASE; |
char *release = STRING(RELEASE); |
#ifdef REVISION |
char *revision = ", revision " REVISION; |
char *revision = ", revision " STRING(REVISION); |
#else |
char *revision = ""; |
#endif |
#ifdef TIMESTAMP |
char *timestamp = "\nBuilt on " TIMESTAMP; |
char *timestamp = "\nBuilt on " STRING(TIMESTAMP); |
#else |
char *timestamp = ""; |
#endif |
142,8 → 143,8 |
silo_ramdisk_image += bootinfo.physmem_start; |
silo_ramdisk_image -= 0x400000; |
/* Install 1:1 mapping for the ramdisk. */ |
if (ofw_map((void *)((uintptr_t)silo_ramdisk_image), |
(void *)((uintptr_t)silo_ramdisk_image), |
if (ofw_map((void *)((uintptr_t) silo_ramdisk_image), |
(void *)((uintptr_t) silo_ramdisk_image), |
silo_ramdisk_size, -1) != 0) { |
printf("Failed to map ramdisk.\n"); |
halt(); |
178,6 → 179,9 |
base + top; |
bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = |
components[i].size; |
strncpy(bootinfo.taskmap.tasks[ |
bootinfo.taskmap.count].name, components[i].name, |
BOOTINFO_TASK_NAME_BUFLEN); |
bootinfo.taskmap.count++; |
} |
top += components[i].size; |
203,7 → 207,8 |
* given to us by SILO. |
*/ |
(void) ofw_claim_phys(base + top, silo_ramdisk_size); |
(void) ofw_map(base + top, base + top, silo_ramdisk_size, -1); |
(void) ofw_map(bootinfo.physmem_start + base + top, base + top, |
silo_ramdisk_size, -1); |
memmove(base + top, (void *)((uintptr_t)silo_ramdisk_image), |
silo_ramdisk_size); |
printf("done.\n"); |
253,7 → 258,8 |
balloc_base = base + ALIGN_UP(top, PAGE_SIZE); |
(void) ofw_claim_phys(bootinfo.physmem_start + balloc_base, |
BALLOC_MAX_SIZE); |
(void) ofw_map(balloc_base, balloc_base, BALLOC_MAX_SIZE, -1); |
(void) ofw_map(bootinfo.physmem_start + balloc_base, balloc_base, |
BALLOC_MAX_SIZE, -1); |
balloc_init(&bootinfo.ballocs, (uintptr_t)balloc_base); |
printf("\nCanonizing OpenFirmware device tree..."); |
260,7 → 266,7 |
bootinfo.ofw_root = ofw_tree_build(); |
printf("done.\n"); |
#ifdef CONFIG_SMP |
#ifdef CONFIG_AP |
printf("\nChecking for secondary processors..."); |
if (!ofw_cpu()) |
printf("Error: unable to get CPU properties\n"); |
267,7 → 273,7 |
printf("done.\n"); |
#endif |
setup_palette(); |
ofw_setup_palette(); |
printf("\nBooting the kernel...\n"); |
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, |
274,4 → 280,3 |
bootinfo.physmem_start | BSP_PROCESSOR, &bootinfo, |
sizeof(bootinfo)); |
} |
//branches/tracing/boot/arch/sparc64/loader/main.h |
---|
38,6 → 38,9 |
#define TASKMAP_MAX_RECORDS 32 |
/** Size of buffer for storing task name in task_t. */ |
#define BOOTINFO_TASK_NAME_BUFLEN 32 |
#define BSP_PROCESSOR 1 |
#define AP_PROCESSOR 0 |
47,6 → 50,7 |
typedef struct { |
void *addr; |
uint32_t size; |
char name[BOOTINFO_TASK_NAME_BUFLEN]; |
} task_t; |
typedef struct { |
//branches/tracing/boot/arch/sparc64/loader/ofwarch.c |
---|
32,7 → 32,7 |
* @brief Architecture dependent parts of OpenFirmware interface. |
*/ |
#include <ofwarch.h> |
#include <ofwarch.h> |
#include <ofw.h> |
#include <printf.h> |
#include <string.h> |
//branches/tracing/boot/arch/sparc64/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
-include ../../../../Makefile.config |
## Toolchain configuration |
# |
57,16 → 57,8 |
OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump |
endif |
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -I../../../genarch -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=ultrasparc -m64 -mno-fpu -pipe |
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -I../../../genarch -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=ultrasparc -m64 -mno-fpu -pipe |
ifdef REVISION |
CFLAGS += "-DREVISION=\"$(REVISION)\"" |
endif |
ifdef TIMESTAMP |
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\"" |
endif |
SOURCES = \ |
main.c \ |
_components.c \ |
109,17 → 101,27 |
$(USPACEDIR)/srv/fb/fb \ |
$(USPACEDIR)/srv/kbd/kbd \ |
$(USPACEDIR)/srv/console/console \ |
$(USPACEDIR)/srv/fs/tmpfs/tmpfs \ |
$(USPACEDIR)/srv/fs/fat/fat |
$(USPACEDIR)/srv/fs/tmpfs/tmpfs |
ifeq ($(MACHINE),generic) |
RD_SRVS += \ |
$(USPACEDIR)/srv/fs/fat/fat \ |
$(USPACEDIR)/srv/fhc/fhc \ |
$(USPACEDIR)/srv/obio/obio |
endif |
RD_APPS = \ |
$(USPACEDIR)/app/trace/trace \ |
$(USPACEDIR)/app/tetris/tetris \ |
$(USPACEDIR)/app/tester/tester \ |
$(USPACEDIR)/app/trace/trace \ |
$(USPACEDIR)/app/bdsh/bdsh \ |
$(USPACEDIR)/app/klog/klog |
ifeq ($(MACHINE),generic) |
RD_APPS += \ |
$(USPACEDIR)/app/tester/tester |
endif |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
ALL_COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(ALL_COMPONENTS)))) |
//branches/tracing/boot/arch/ia64/Makefile.inc |
---|
26,22 → 26,17 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
#ifeq ($(MACHINE),ski) |
build: $(BASE)/image.boot |
$(BASE)/image.boot: depend arch/$(ARCH)/loader/image.boot |
cp arch/$(ARCH)/loader/image.boot $(BASE)/image.boot |
$(BASE)/image.boot: depend arch/$(BARCH)/loader/image.boot |
cp arch/$(BARCH)/loader/image.boot $(BASE)/image.boot |
depend: |
-rm arch/$(ARCH)/loader/image.boot |
-rm arch/$(BARCH)/loader/image.boot |
arch/$(ARCH)/loader/image.boot: |
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)" |
arch/$(BARCH)/loader/image.boot: |
make -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
clean: generic_clean |
make -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)" |
make -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
-rm -f $(BASE)/image.boot |
#endif |
//branches/tracing/boot/arch/ia64/loader/_link.ld.in |
---|
12,11 → 12,14 |
*(.data); /* initialized data */ |
_got = . ; |
*(.got .got.*); |
*(.bss); /* uninitialized static variables */ |
*(COMMON); |
} |
.sboot : { |
*(.sdata); |
*(.sdata2); |
*(.sbss); |
*(.bss); /* uninitialized static variables */ |
*(COMMON); |
} |
/DISCARD/ : { |
//branches/tracing/boot/arch/ia64/loader/main.c |
---|
1,6 → 1,6 |
/* |
* Copyright (c) 2005 Martin Decky |
* Copyright (c) 2006 Jakub Jermar |
* Copyright (c) 2006 Jakub Jermar |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
33,11 → 33,13 |
#include "_components.h" |
#include <align.h> |
#include <balloc.h> |
#include <macros.h> |
#include <string.h> |
extern bootinfo_t binfo; |
component_t components[COMPONENTS]; |
char *release = RELEASE; |
char *release = STRING(RELEASE); |
void write(const char *str, const int len) |
{ |
44,23 → 46,22 |
return; |
} |
#define DEFAULT_MEMORY_BASE 0x4000000 |
#define DEFAULT_MEMORY_SIZE 0x4000000 |
#define DEFAULT_LEGACY_IO_BASE 0x00000FFFFC000000 |
#define DEFAULT_LEGACY_IO_SIZE 0x4000000 |
#define DEFAULT_MEMORY_BASE 0x4000000 |
#define DEFAULT_MEMORY_SIZE 0x4000000 |
#define DEFAULT_LEGACY_IO_BASE 0x00000FFFFC000000 |
#define DEFAULT_LEGACY_IO_SIZE 0x4000000 |
#define DEFAULT_FREQ_SCALE 0x0000000100000001 // 1/1 |
#define DEFAULT_SYS_FREQ 100000000 //100MHz |
#define DEFAULT_FREQ_SCALE 0x0000000100000001 /* 1/1 */ |
#define DEFAULT_SYS_FREQ 100000000 /* 100MHz */ |
#ifdef REVISION |
char *revision = ", revision " REVISION; |
char *revision = ", revision " STRING(REVISION); |
#else |
char *revision = ""; |
#endif |
#ifdef TIMESTAMP |
char *timestamp = "\nBuilt on " TIMESTAMP; |
char *timestamp = "\nBuilt on " STRING(TIMESTAMP); |
#else |
char *timestamp = ""; |
#endif |
68,27 → 69,18 |
/** Print version information. */ |
static void version_print(void) |
{ |
printf("HelenOS IA64 Bootloader\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n", release, revision, timestamp); |
printf("HelenOS IA64 Bootloader\nRelease %s%s%s\n" |
"Copyright (c) 2006 HelenOS project\n", release, revision, |
timestamp); |
} |
void bootstrap(void) |
{ |
int ii; |
bootinfo_t *bootinfo=&binfo; |
//for(ii=0;ii<KERNEL_SIZE;ii++) ((char *)(0x100000))[ii] = ((char *)KERNEL_START)[ii+1]; |
//((int *)(0x100000))[0]++; |
bootinfo_t *bootinfo = &binfo; |
version_print(); |
init_components(components); |
printf("\nSystem info\n"); |
100,42 → 92,46 |
printf(" %P: %s image (size %d bytes)\n", components[i].start, |
components[i].name, components[i].size); |
if(!bootinfo->hello_configured) |
{ |
if (!bootinfo->hello_configured) { |
/* |
* Load configuration defaults for simulators |
* Load configuration defaults for simulators. |
*/ |
bootinfo->memmap_items=0; |
bootinfo->memmap_items = 0; |
bootinfo->memmap[bootinfo->memmap_items].base=DEFAULT_MEMORY_BASE; |
bootinfo->memmap[bootinfo->memmap_items].size=DEFAULT_MEMORY_SIZE; |
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_FREE_MEM; |
bootinfo->memmap[bootinfo->memmap_items].base = |
DEFAULT_MEMORY_BASE; |
bootinfo->memmap[bootinfo->memmap_items].size = |
DEFAULT_MEMORY_SIZE; |
bootinfo->memmap[bootinfo->memmap_items].type = |
EFI_MEMMAP_FREE_MEM; |
bootinfo->memmap_items++; |
bootinfo->memmap[bootinfo->memmap_items].base=DEFAULT_LEGACY_IO_BASE; |
bootinfo->memmap[bootinfo->memmap_items].size=DEFAULT_LEGACY_IO_SIZE; |
bootinfo->memmap[bootinfo->memmap_items].type=EFI_MEMMAP_IO_PORTS; |
bootinfo->memmap[bootinfo->memmap_items].base = |
DEFAULT_LEGACY_IO_BASE; |
bootinfo->memmap[bootinfo->memmap_items].size = |
DEFAULT_LEGACY_IO_SIZE; |
bootinfo->memmap[bootinfo->memmap_items].type = |
EFI_MEMMAP_IO_PORTS; |
bootinfo->memmap_items++; |
bootinfo->freq_scale = DEFAULT_FREQ_SCALE; |
bootinfo->sys_freq = DEFAULT_SYS_FREQ; |
} |
bootinfo->taskmap.count = 0; |
for (i = 0; i < COMPONENTS; i++) { |
if (i > 0) { |
bootinfo->taskmap.tasks[bootinfo->taskmap.count].addr = components[i].start; |
bootinfo->taskmap.tasks[bootinfo->taskmap.count].size = components[i].size; |
bootinfo->taskmap.tasks[bootinfo->taskmap.count].addr = |
components[i].start; |
bootinfo->taskmap.tasks[bootinfo->taskmap.count].size = |
components[i].size; |
strncpy(bootinfo->taskmap.tasks[ |
bootinfo->taskmap.count].name, |
components[i].name, BOOTINFO_TASK_NAME_BUFLEN); |
bootinfo->taskmap.count++; |
} |
} |
jump_to_kernel(bootinfo); |
} |
//branches/tracing/boot/arch/ia64/loader/gefi/Make.defaults |
---|
27,30 → 27,19 |
# |
INSTALLROOT=/usr/local |
TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi) |
TOPDIR := $(shell pwd) |
ARCH = $(shell uname -m | sed s,i[3456789]86,ia32,) |
INCDIR = -I. -I$(CDIR)/inc -I$(CDIR)/inc/$(ARCH) -I$(CDIR)/inc/protocol |
ARCH = ia64 |
INCDIR = -I. -I$(CDIR)/inc -I$(CDIR)/inc/$(ARCH) -I$(CDIR)/inc/protocol |
CPPFLAGS = -DCONFIG_$(ARCH) |
CFLAGS = -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants |
LDFLAGS = -nostdlib |
INSTALL = install |
CFLAGS = -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants -frename-registers -mfixed-range=f32-f127 |
LDFLAGS = -nostdlib |
INSTALL = install |
GCC_VERSION=$(shell $(CROSS_COMPILE)$(CC) -v 2>&1 | fgrep 'gcc version' | cut -f3 -d' ' | cut -f1 -d'.') |
# prefix = |
CC = $(prefix)gcc |
AS = $(prefix)as |
LD = $(prefix)ld |
AR = $(prefix)ar |
RANLIB = $(prefix)ranlib |
OBJCOPY = $(prefix)objcopy |
OBJDUMP = $(prefix)objdump |
ifneq ($(GCC_VERSION),2) |
CFLAGS += -frename-registers |
endif |
CFLAGS += -mfixed-range=f32-f127 |
CC = $(prefix)gcc |
AS = $(prefix)as |
LD = $(prefix)ld |
AR = $(prefix)ar |
RANLIB = $(prefix)ranlib |
OBJCOPY = $(prefix)objcopy |
OBJDUMP = $(prefix)objdump |
//branches/tracing/boot/arch/ia64/loader/gefi/HelenOS/hello.c |
---|
12,7 → 12,7 |
//Link image as a data array into hello - usefull with network boot |
#define IMAGE_LINKED |
//#define IMAGE_LINKED |
bootinfo_t *bootinfo=(bootinfo_t *)BOOTINFO_ADDRESS; |
86,6 → 86,7 |
StrCpy(FileName,DevicePathToStr(LoadedImage->FilePath)); |
for(i=StrLen(FileName);i>=0 && FileName[i]!='\\';i--); |
FileName[i] = 0; |
FileName[0] = 0; |
Print(L"%s\n",LoadedImage->LoadOptions); |
105,9 → 106,9 |
StrCat(FileName,L"\\image.bin"); |
defaultLoad=1; |
} |
else{ |
/* else{ |
CHAR16 buf[1024]; |
buf[0]='\\'; |
//buf[0]='\\'; |
i--; |
int j; |
for(j=0;LoadOptions[i+j]!=L' '&&LoadOptions[i+j]!=0;j++) |
115,6 → 116,17 |
buf[j+1]=0; |
StrCat(FileName,buf); |
defaultLoad=0; |
}*/ |
else{ |
CHAR16 buf[1024]; |
//buf[0]='\\'; |
i--; |
int j; |
for(j=0;LoadOptions[i+j]!=L' '&&LoadOptions[i+j]!=0;j++) |
buf[j]=LoadOptions[i+j]; |
buf[j+1]=0; |
StrCat(FileName,buf); |
defaultLoad=0; |
} |
imageLoad=1; |
//branches/tracing/boot/arch/ia64/loader/gefi/HelenOS/Makefile |
---|
20,6 → 20,7 |
# Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
# 02111-1307, USA. |
# |
prefix=$(PREFIX) |
include ../Make.defaults |
CDIR=$(TOPDIR)/.. |
28,14 → 29,11 |
CRTOBJS = ../gnuefi/crt0-efi-$(ARCH).o |
LDSCRIPT = ../gnuefi/elf_$(ARCH)_efi.lds |
LDFLAGS += -T $(LDSCRIPT) -shared -Bsymbolic -L../lib -L../gnuefi $(CRTOBJS) |
#LOADLIBES = -lefi -lgnuefi $(shell $(CC) -print-libgcc-file-name) |
LOADLIBES = -lefi -lgnuefi |
FORMAT = efi-app-$(ARCH) |
all: gefi hello.efi |
clean: |
rm -f *.efi *~ *.o *.so *.map *.disass *.bin |
44,11 → 42,10 |
hello.efi: hello.so |
$(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \ |
-j .rela -j .reloc --target=$(FORMAT) hello.so hello.efi |
$(OBJDUMP) -d hello.efi > hello.disass |
#When selected first lines or second lines, select if image is linked into hello or not - usefull for network boot |
#hello.so: hello.o image.o division.o |
hello.so: hello.o image.bin |
hello.so: hello.o image.bin division.o |
# $(LD) $(LDFLAGS) -Map hello.map hello.o division.o image.o -o hello.so $(LOADLIBES) #link image inside hello |
$(LD) $(LDFLAGS) -Map hello.map hello.o division.o -o hello.so $(LOADLIBES) #dont link image inside hello |
58,11 → 55,9 |
division.o: division.c |
$(CC) $(INCDIR) $(CFLAGS) $(CPPFLAGS) -c division.c -o division.o |
image.bin: ../../image.boot |
$(OBJCOPY) -O binary ../../image.boot image.bin |
image.o: ../../image.boot mkimage |
$(OBJCOPY) -O binary ../../image.boot image.bin |
./mkimage |
72,6 → 67,5 |
mkimage: mkimage.c |
gcc -o mkimage mkimage.c |
gefi: |
make -C .. prefix=$(PREFIX) |
//branches/tracing/boot/arch/ia64/loader/gefi/Makefile |
---|
23,9 → 23,9 |
include Make.defaults |
SUBDIRS = lib gnuefi inc apps |
SUBDIRS = lib gnuefi inc |
all: check_gcc $(SUBDIRS) |
all: $(SUBDIRS) |
$(SUBDIRS): |
$(MAKE) -C $@ |
39,13 → 39,4 |
.PHONY: $(SUBDIRS) clean depend |
# |
# on both platforms you must use gcc 3.0 or higher |
# |
check_gcc: |
ifeq ($(GCC_VERSION),2) |
@echo "you need to use a version of gcc >= 3.0, you are using `$(CC) --version`" |
@exit 1 |
endif |
include Make.rules |
//branches/tracing/boot/arch/ia64/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
-include ../../../../Makefile.config |
## Toolchain configuration |
# |
47,7 → 47,7 |
LD = ld |
OBJCOPY = objcopy |
OBJDUMP = objdump |
GEFI_PREXIX = |
GEFI_PREFIX = |
endif |
ifeq ($(COMPILER),icc_native) |
68,16 → 68,8 |
endif |
#-mno-pic means do not use gp + imm22 to address data |
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -I../../../genarch -I../../../../kernel/generic/include -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -fno-unwind-tables -mfixed-range=f32-f127 -mno-pic -pipe |
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -I../../../genarch -I../../../../kernel/generic/include -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -fno-unwind-tables -mfixed-range=f32-f127 -mno-pic -pipe |
ifdef REVISION |
CFLAGS += "-DREVISION=\"$(REVISION)\"" |
endif |
ifdef TIMESTAMP |
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\"" |
endif |
SOURCES = \ |
main.c \ |
../../../generic/printf.c \ |
87,24 → 79,36 |
asm.S \ |
boot.S |
NOCOMPONENTS = \ |
$(KERNELDIR)/kernel.bin |
COMPONENTS = \ |
$(KERNELDIR)/kernel.bin |
NOCOMPONENTS = \ |
$(KERNELDIR)/kernel.bin \ |
$(USPACEDIR)/srv/ns/ns \ |
$(USPACEDIR)/srv/loader/loader \ |
$(USPACEDIR)/app/init/init \ |
$(USPACEDIR)/srv/devmap/devmap \ |
$(USPACEDIR)/srv/rd/rd \ |
$(USPACEDIR)/srv/vfs/vfs |
ifeq ($(RDFMT),tmpfs) |
COMPONENTS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs |
endif |
ifeq ($(RDFMT),fat) |
COMPONENTS += $(USPACEDIR)/srv/fs/fat/fat |
endif |
RD_SRVS = \ |
$(USPACEDIR)/srv/fb/fb \ |
$(USPACEDIR)/srv/kbd/kbd \ |
$(USPACEDIR)/srv/console/console \ |
$(USPACEDIR)/srv/vfs/vfs \ |
$(USPACEDIR)/srv/fs/tmpfs/tmpfs \ |
$(USPACEDIR)/srv/fs/fat/fat \ |
$(USPACEDIR)/srv/devmap/devmap \ |
$(USPACEDIR)/app/init/init \ |
$(USPACEDIR)/srv/fs/fat/fat |
RD_APPS = \ |
$(USPACEDIR)/app/trace/trace \ |
$(USPACEDIR)/app/tetris/tetris \ |
$(USPACEDIR)/app/tester/tester \ |
$(USPACEDIR)/app/klog/klog |
$(USPACEDIR)/app/klog/klog \ |
$(USPACEDIR)/app/bdsh/bdsh |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |
COMPONENT_OBJECTS := $(addsuffix .o,$(basename $(notdir $(COMPONENTS)))) |
118,22 → 122,41 |
hello.efi: image.boot |
make -C gefi/HelenOS PREFIX=$(GEFI_PREFIX) |
cp gefi/HelenOS/hello.efi ../../../../ |
# cp gefi/HelenOS/hello.efi /boot/efi/ |
cp gefi/HelenOS/image.bin ../../../../ |
image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) |
$(LD) -Map image.map -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) -o $@ |
image.boot: depend _components.h _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) |
$(LD) -Map image.map -no-check-sections -N -T _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) -o $@ |
depend: |
-makedepend -f - -- $(DEFS) $(CFLAGS) -- $(SOURCES) > Makefile.depend 2> /dev/null |
clean: |
-rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) $(OBJECTS) image.boot image.map image.disasm Makefile.depend ../../../../image.bin ../../../../hello.efi |
-for file in $(RD_SRVS) ; do \ |
rm -f $(USPACEDIR)/dist/srv/`basename $$file` ; \ |
done |
-for file in $(RD_APPS) ; do \ |
rm -f $(USPACEDIR)/dist/app/`basename $$file` ; \ |
done |
-rm -f _components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o $(OBJECTS) image.boot image.map image.disasm initrd.img image.boot Makefile.depend ../../../../image.bin ../../../../hello.efi |
make -C gefi clean |
make -C gefi/HelenOS clean |
_components.h _components.c _link.ld $(COMPONENT_OBJECTS): $(COMPONENTS) _link.ld.in |
../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 16384 "unsigned long" $(COMPONENTS) |
_components.h _components.c _link.ld $(COMPONENT_OBJECTS) initrd.o: $(COMPONENTS) $(RD_SRVS) $(RD_APPS) _link.ld.in |
for file in $(RD_SRVS) ; do \ |
cp $$file $(USPACEDIR)/dist/srv/ ; \ |
done |
for file in $(RD_APPS) ; do \ |
cp $$file $(USPACEDIR)/dist/app/ ; \ |
done |
ifeq ($(RDFMT),tmpfs) |
../../../../tools/mktmpfs.py $(USPACEDIR)/dist/ initrd.fs |
endif |
ifeq ($(RDFMT),fat) |
../../../../tools/mkfat.py $(USPACEDIR)/dist/ initrd.fs |
endif |
../../../../tools/mkhord.py 16384 initrd.fs initrd.img |
rm initrd.fs |
../../../tools/pack.py $(OBJCOPY) $(BFD_NAME) $(BFD_ARCH) 16384 "unsigned long" $(COMPONENTS) ./initrd.img |
%.o: %.S |
$(CC) $(DEFS) $(CFLAGS) -D__ASM__ -c $< -o $@ |
//branches/tracing/boot/arch/arm32/Makefile.inc |
---|
28,15 → 28,15 |
build: $(BASE)/image.boot |
$(BASE)/image.boot: depend arch/$(ARCH)/loader/image.boot |
cp arch/$(ARCH)/loader/image.boot $(BASE)/image.boot |
$(BASE)/image.boot: depend arch/$(BARCH)/loader/image.boot |
cp arch/$(BARCH)/loader/image.boot $(BASE)/image.boot |
depend: |
-rm arch/$(ARCH)/loader/image.boot |
-rm arch/$(BARCH)/loader/image.boot |
arch/$(ARCH)/loader/image.boot: |
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) IMAGE=$(IMAGE) |
arch/$(BARCH)/loader/image.boot: |
make -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
clean: |
make -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) IMAGE=$(IMAGE) |
make -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
-rm -f $(BASE)/image.boot |
//branches/tracing/boot/arch/arm32/loader/boot.S |
---|
53,5 → 53,3 |
# make place for PTL0 page table |
page_table: |
.skip PTL0_ENTRIES * PTL0_ENTRY_SIZE |
//branches/tracing/boot/arch/arm32/loader/main.c |
---|
32,13 → 32,16 |
*/ |
/** @file |
* @brief Bootstrap. |
*/ |
*/ |
#include "main.h" |
#include "main.h" |
#include "asm.h" |
#include "_components.h" |
#include <printf.h> |
#include <align.h> |
#include <macros.h> |
#include <string.h> |
#include "mm.h" |
46,16 → 49,16 |
#define KERNEL_VIRTUAL_ADDRESS 0x80200000 |
char *release = RELEASE; |
char *release = STRING(RELEASE); |
#ifdef REVISION |
char *revision = ", revision " REVISION; |
char *revision = ", revision " STRING(REVISION); |
#else |
char *revision = ""; |
#endif |
#ifdef TIMESTAMP |
char *timestamp = "\nBuilt on " TIMESTAMP; |
char *timestamp = "\nBuilt on " STRING(TIMESTAMP); |
#else |
char *timestamp = ""; |
#endif |
101,6 → 104,8 |
if (i > 0) { |
bootinfo.tasks[bootinfo.cnt].addr = ((void *) KERNEL_VIRTUAL_ADDRESS) + top; |
bootinfo.tasks[bootinfo.cnt].size = components[i].size; |
strncpy(bootinfo.tasks[bootinfo.cnt].name, |
components[i].name, BOOTINFO_TASK_NAME_BUFLEN); |
bootinfo.cnt++; |
} |
top += components[i].size; |
108,7 → 113,7 |
} |
printf("\nBooting the kernel...\n"); |
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo, sizeof(bootinfo)); |
jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS, &bootinfo); |
} |
/** @} |
//branches/tracing/boot/arch/arm32/loader/asm.h |
---|
32,7 → 32,7 |
*/ |
/** @file |
* @brief Functions implemented in assembly. |
*/ |
*/ |
#ifndef BOOT_arm32_ASM_H |
40,10 → 40,10 |
/** Copies cnt bytes from dst to src. |
* |
* |
* @param dst Destination address. |
* @param src Source address. |
* @param cnt Count of bytes to be copied. |
* @param cnt Count of bytes to be copied. |
*/ |
#define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)) |
58,12 → 58,11 |
/** Jumps to the kernel entry point. |
* |
* @param entry Kernel entry point address. |
* @param bootinfo Structure holding information about loaded tasks. |
* @param bootinfo_size Size of the bootinfo structure. |
* @param entry Kernel entry point address. |
* @param bootinfo Structure holding information about loaded tasks. |
* |
*/ |
extern void jump_to_kernel(void *entry, void *bootinfo, |
unsigned int bootinfo_size) __attribute__((noreturn)); |
extern void jump_to_kernel(void *entry, void *bootinfo) __attribute__((noreturn)); |
#endif |
//branches/tracing/boot/arch/arm32/loader/main.h |
---|
32,7 → 32,7 |
*/ |
/** @file |
* @brief Boot related declarations. |
*/ |
*/ |
#ifndef BOOT_arm32_MAIN_H |
39,17 → 39,13 |
#define BOOT_arm32_MAIN_H |
/** Aligns to the nearest higher address. |
* |
* @param addr Address or number to be aligned. |
* @param align Size of alignment, must be power of 2. |
*/ |
#define ALIGN_UP(addr, align) (((addr) + ((align) - 1)) & ~((align) - 1)) |
/** Maximum number of tasks in the #bootinfo_t struct. */ |
#define TASKMAP_MAX_RECORDS 32 |
/** Size of buffer for storing task name in task_t. */ |
#define BOOTINFO_TASK_NAME_BUFLEN 32 |
/** Struct holding information about single loaded task. */ |
typedef struct { |
/** Address where the task was placed. */ |
56,6 → 52,8 |
void *addr; |
/** Size of the task's binary. */ |
unsigned int size; |
/** Task name. */ |
char name[BOOTINFO_TASK_NAME_BUFLEN]; |
} task_t; |
74,4 → 72,3 |
/** @} |
*/ |
//branches/tracing/boot/arch/arm32/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
-include ../../../../Makefile.config |
## Toolchain configuration |
# |
57,20 → 57,8 |
OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump |
endif |
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -I../../.. -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -pipe |
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -I../../.. -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -pipe |
ifdef REVISION |
CFLAGS += "-DREVISION=\"$(REVISION)\"" |
endif |
ifdef TIMESTAMP |
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\"" |
endif |
ifdef MACHINE |
CFLAGS += "-DMACHINE=$(MACHINE)" |
endif |
SOURCES = \ |
main.c \ |
boot.S \ |
79,6 → 67,7 |
print/gxemul.c \ |
_components.c \ |
../../../generic/printf.c \ |
../../../generic/string.c \ |
../../../genarch/division.c |
COMPONENTS = \ |
//branches/tracing/boot/arch/ppc32/Makefile.inc |
---|
26,17 → 26,27 |
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
# |
build: $(BASE)/image.boot |
TMP = distroot |
$(BASE)/image.boot: depend arch/$(ARCH)/loader/image.boot |
cp arch/$(ARCH)/loader/image.boot $(BASE)/image.boot |
build: $(BASE)/image.iso |
$(BASE)/image.iso: depend arch/$(BARCH)/loader/image.boot |
mkdir -p $(TMP)/boot |
mkdir -p $(TMP)/ppc |
cp arch/$(BARCH)/loader/image.boot $(TMP)/boot/image.boot |
cp arch/$(BARCH)/yaboot/ofboot.b $(TMP)/boot/ofboot.b |
cp arch/$(BARCH)/yaboot/bootinfo.txt $(TMP)/ppc/bootinfo.txt |
cp arch/$(BARCH)/yaboot/yaboot $(TMP)/boot/yaboot |
cp arch/$(BARCH)/yaboot/yaboot.conf $(TMP)/boot/yaboot.conf |
mkisofs -hfs -part -map arch/$(BARCH)/yaboot/maps -no-desktop -hfs-volid "HelenOS" -hfs-bless $(TMP)/boot -r -o $@ $(TMP)/ |
depend: |
-rm arch/$(ARCH)/loader/image.boot |
-rm arch/$(BARCH)/loader/image.boot |
arch/$(ARCH)/loader/image.boot: |
make -C arch/$(ARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)" |
arch/$(BARCH)/loader/image.boot: |
$(MAKE) -C arch/$(BARCH)/loader COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
clean: generic_clean |
make -C arch/$(ARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) "DEFS=$(DEFS)" |
-rm -f $(BASE)/image.boot |
$(MAKE) -C arch/$(BARCH)/loader clean COMPILER=$(COMPILER) KERNELDIR=../../../$(KERNELDIR) USPACEDIR=../../../$(USPACEDIR) |
-rm -fr $(TMP) |
-rm -f $(BASE)/image.iso |
//branches/tracing/boot/arch/ppc32/loader/debug.inc |
---|
File deleted |
//branches/tracing/boot/arch/ppc32/loader/_link.ld.in |
---|
1,9 → 1,9 |
OUTPUT_FORMAT("elf32-powerpc") |
OUTPUT_ARCH(powerpc:common) |
ENTRY(start) |
OUTPUT_FORMAT("elf32-powerpc") |
OUTPUT_ARCH(powerpc:common) |
ENTRY(start) |
SECTIONS { |
.boot 0x10000000: AT (0) { |
.boot 0x01000000: AT (0) { |
*(BOOTSTRAP); |
*(REALMODE); |
*(.text); |
10,12 → 10,12 |
*(.rodata); |
*(.rodata.*); |
*(.data); /* initialized data */ |
*(.data); /* initialized data */ |
*(.sdata); |
*(.sdata2); |
*(.sbss); |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
*(.bss); /* uninitialized static variables */ |
*(COMMON); /* global variables */ |
[[COMPONENTS]] |
} |
} |
//branches/tracing/boot/arch/ppc32/loader/asm.S |
---|
28,8 → 28,26 |
#include "asm.h" |
#include "regname.h" |
#include "debug.inc" |
.macro SMC_COHERENCY addr |
dcbst 0, \addr |
sync |
icbi 0, \addr |
sync |
isync |
.endm |
.macro FLUSH_DCACHE addr |
dcbst 0, \addr |
sync |
isync |
.endm |
.macro TLB_FLUSH reg |
tlbie \reg |
addi \reg, \reg, 0x1000 |
.endm |
.text |
.global halt |
140,9 → 158,6 |
real_mode: |
DEBUG_INIT |
DEBUG_real_mode |
# copy kernel to proper location |
# |
# r5 = trans (pa) |
163,14 → 178,13 |
mtctr r31 |
lwz r29, 0(r5) |
DEBUG_INIT |
DEBUG_copy_loop |
copy_loop: |
lwz r28, 0(r29) |
stw r28, 0(r30) |
SMC_COHERENCY r30 |
addi r29, r29, 4 |
addi r30, r30, 4 |
subi r6, r6, 4 |
180,15 → 194,11 |
bdnz copy_loop |
DEBUG_end_copy_loop |
addi r5, r5, 4 |
b page_copy |
copy_end: |
DEBUG_segments |
# initially fill segment registers |
li r31, 0 |
196,7 → 206,7 |
li r29, 8 |
mtctr r29 |
li r30, 0 # ASID 0 (VSIDs 0 .. 7) |
seg_fill_uspace: |
mtsrin r30, r31 |
220,8 → 230,6 |
# invalidate block address translation registers |
DEBUG_bat |
li r30, 0 |
mtspr ibat0u, r30 |
251,8 → 259,6 |
# create empty Page Hash Table |
# on top of memory, size 64 KB |
DEBUG_pht |
lwz r31, 0(r3) # r31 = memory size |
lis r30, 65536@h |
274,6 → 280,7 |
# write zeroes |
stw r29, 0(r31) |
FLUSH_DCACHE r31 |
addi r31, r31, 4 |
subi r30, r30, 4 |
282,8 → 289,6 |
beq clear_end |
bdnz pht_clear |
DEBUG_end_pht_clear |
clear_end: |
291,8 → 296,6 |
# create BAT identity mapping |
DEBUG_mapping |
lwz r31, 0(r3) # r31 = memory size |
lis r29, 0x0002 |
315,8 → 318,6 |
bdnz bat_mask |
DEBUG_bat_mask |
andi. r31, r31, 0x07ff # mask = mask & 0x07ff (BAT can map up to 256 MB) |
li r29, 2 |
336,16 → 337,90 |
mtspr dbat0l, r30 |
no_bat: |
#endif |
DEBUG_tlb |
# flush TLB |
tlbia |
li r31, 0 |
sync |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
TLB_FLUSH r31 |
eieio |
tlbsync |
sync |
DEBUG_prepare |
# start the kernel |
# |
# pc = KERNEL_START_ADDR |
373,8 → 448,6 |
sync |
isync |
DEBUG_rfi |
rfi |
.align PAGE_WIDTH |
//branches/tracing/boot/arch/ppc32/loader/regname.h |
---|
208,11 → 208,13 |
#define hid0 1008 |
/* MSR bits */ |
#define msr_ir (1 << 4) |
#define msr_dr (1 << 5) |
#define msr_dr (1 << 4) |
#define msr_ir (1 << 5) |
#define msr_pr (1 << 14) |
#define msr_ee (1 << 15) |
/* HID0 bits */ |
#define hid0_sten (1 << 24) |
#define hid0_ice (1 << 15) |
#define hid0_dce (1 << 14) |
#define hid0_icfi (1 << 11) |
//branches/tracing/boot/arch/ppc32/loader/main.c |
---|
32,6 → 32,8 |
#include "_components.h" |
#include <ofw.h> |
#include <align.h> |
#include <macros.h> |
#include <string.h> |
#define HEAP_GAP 1024000 |
72,16 → 74,16 |
} |
} |
char *release = RELEASE; |
char *release = STRING(RELEASE); |
#ifdef REVISION |
char *revision = ", revision " REVISION; |
char *revision = ", revision " STRING(REVISION); |
#else |
char *revision = ""; |
#endif |
#ifdef TIMESTAMP |
char *timestamp = "\nBuilt on " TIMESTAMP; |
char *timestamp = "\nBuilt on " STRING(TIMESTAMP); |
#else |
char *timestamp = ""; |
#endif |
89,7 → 91,7 |
/** Print version information. */ |
static void version_print(void) |
{ |
printf("HelenOS PPC32 Bootloader\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n", release, revision, timestamp); |
printf("HelenOS PPC32 Bootloader\nRelease %s%s%s\nCopyright (c) 2006 HelenOS project\n\n", release, revision, timestamp); |
} |
void bootstrap(void) |
107,25 → 109,29 |
check_align(&trans, "translation table"); |
if (!ofw_memmap(&bootinfo.memmap)) { |
printf("Error: unable to get memory map, halting.\n"); |
printf("Error: Unable to get memory map, halting.\n"); |
halt(); |
} |
if (bootinfo.memmap.total == 0) { |
printf("Error: no memory detected, halting.\n"); |
printf("Error: No memory detected, halting.\n"); |
halt(); |
} |
if (!ofw_screen(&bootinfo.screen)) |
printf("Warning: unable to get screen properties.\n"); |
printf("Warning: Unable to get screen properties.\n"); |
if (!ofw_keyboard(&bootinfo.keyboard)) |
printf("Warning: unable to get keyboard properties.\n"); |
if (!ofw_macio(&bootinfo.macio)) |
printf("Warning: Unable to get macio properties.\n"); |
printf("\nDevice statistics\n"); |
printf(" screen at %L, resolution %dx%d, %d bpp (scanline %d bytes)\n", bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline); |
printf(" keyboard at %L (size %d bytes)\n", bootinfo.keyboard.addr, bootinfo.keyboard.size); |
printf("Device statistics\n"); |
if (bootinfo.screen.addr) |
printf(" screen at %L, resolution %dx%d, %d bpp (scanline %d bytes)\n", bootinfo.screen.addr, bootinfo.screen.width, bootinfo.screen.height, bootinfo.screen.bpp, bootinfo.screen.scanline); |
if (bootinfo.macio.addr) |
printf(" macio at %L (size %d bytes)\n", bootinfo.macio.addr, bootinfo.macio.size); |
void *real_mode_pa = ofw_translate(&real_mode); |
void *trans_pa = ofw_translate(&trans); |
void *bootinfo_pa = ofw_translate(&bootinfo); |
161,6 → 167,9 |
if (j == 0) { |
bootinfo.taskmap.tasks[bootinfo.taskmap.count].addr = (void *) (pages << PAGE_WIDTH); |
bootinfo.taskmap.tasks[bootinfo.taskmap.count].size = components[i].size; |
strncpy(bootinfo.taskmap.tasks[bootinfo.taskmap.count].name, |
components[i].name, BOOTINFO_TASK_NAME_BUFLEN); |
bootinfo.taskmap.count++; |
} |
} |
172,6 → 181,8 |
fix_overlap(&trans, &trans_pa, "translation table", &top); |
fix_overlap(&bootinfo, &bootinfo_pa, "boot info", &top); |
ofw_setup_palette(); |
printf("\nBooting the kernel...\n"); |
jump_to_kernel(bootinfo_pa, sizeof(bootinfo), trans_pa, pages << PAGE_WIDTH, real_mode_pa, (void *) bootinfo.screen.addr, bootinfo.screen.scanline); |
} |
//branches/tracing/boot/arch/ppc32/loader/main.h |
---|
33,9 → 33,17 |
#define TASKMAP_MAX_RECORDS 32 |
/** Size of buffer for storing task name in task_t. */ |
#define BOOTINFO_TASK_NAME_BUFLEN 32 |
/** Struct holding information about single loaded task. */ |
typedef struct { |
/** Address where the task was placed. */ |
void *addr; |
/** Size of the task's binary. */ |
unsigned int size; |
/** Task name. */ |
char name[BOOTINFO_TASK_NAME_BUFLEN]; |
} task_t; |
typedef struct { |
47,7 → 55,7 |
memmap_t memmap; |
taskmap_t taskmap; |
screen_t screen; |
keyboard_t keyboard; |
macio_t macio; |
} bootinfo_t; |
extern void start(void); |
//branches/tracing/boot/arch/ppc32/loader/ofwarch.c |
---|
48,22 → 48,24 |
} |
} |
int ofw_keyboard(keyboard_t *keyboard) |
int ofw_macio(macio_t *macio) |
{ |
char device_name[BUF_SIZE]; |
if (ofw_get_property(ofw_aliases, "macio", device_name, sizeof(device_name)) <= 0) |
if ((ofw_get_property(ofw_aliases, "macio", device_name, sizeof(device_name)) <= 0) |
&& (ofw_get_property(ofw_aliases, "mac-io", device_name, sizeof(device_name)) <= 0)) |
return false; |
phandle device = ofw_find_device(device_name); |
if (device == -1) |
return false; |
pci_reg_t macio; |
if (ofw_get_property(device, "assigned-addresses", &macio, sizeof(macio)) <= 0) |
pci_reg_t pci_reg; |
if (ofw_get_property(device, "assigned-addresses", &pci_reg, sizeof(pci_reg)) <= 0) |
return false; |
keyboard->addr = (void *) macio.addr.addr_lo; |
keyboard->size = macio.size_lo; |
macio->addr = (void *) pci_reg.addr.addr_lo; |
macio->size = pci_reg.size_lo; |
return true; |
} |
//branches/tracing/boot/arch/ppc32/loader/Makefile |
---|
27,7 → 27,7 |
# |
include ../../../../version |
include ../../../Makefile.config |
-include ../../../../Makefile.config |
## Toolchain configuration |
# |
57,16 → 57,8 |
OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump |
endif |
CFLAGS = -DRELEASE=\"$(RELEASE)\" -I. -I../../../generic -I../../../genarch -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=powerpc -msoft-float -m32 -pipe |
CFLAGS = -DRELEASE=$(RELEASE) -I. -I../../../generic -I../../../genarch -imacros ../../../../config.h -nostdinc -nostdlib -fno-builtin -Werror-implicit-function-declaration -Wmissing-prototypes -Werror -O3 -mcpu=powerpc -msoft-float -m32 -pipe |
ifdef REVISION |
CFLAGS += "-DREVISION=\"$(REVISION)\"" |
endif |
ifdef TIMESTAMP |
CFLAGS += "-DTIMESTAMP=\"$(TIMESTAMP)\"" |
endif |
SOURCES = \ |
main.c \ |
ofwarch.c \ |
73,6 → 65,7 |
_components.c \ |
../../../genarch/ofw.c \ |
../../../generic/printf.c \ |
../../../generic/string.c \ |
asm.S \ |
boot.S |
83,7 → 76,7 |
$(USPACEDIR)/app/init/init \ |
$(USPACEDIR)/srv/devmap/devmap \ |
$(USPACEDIR)/srv/rd/rd \ |
$(USPACEDIR)/srv/vfs/vfs |
$(USPACEDIR)/srv/vfs/vfs |
ifeq ($(RDFMT),tmpfs) |
COMPONENTS += $(USPACEDIR)/srv/fs/tmpfs/tmpfs |
endif |
//branches/tracing/boot/arch/ppc32/yaboot/maps |
---|
0,0 → 1,6 |
# EXTN XLate CREATOR TYPE Comment |
.b Raw 'UNIX' 'tbxi' "bootstrap" |
yaboot Raw 'UNIX' 'boot' "bootstrap" |
image.boot Raw 'UNIX' 'boot' "kernel" |
.conf Raw 'UNIX' 'conf' "bootstrap" |
* Raw 'UNIX 'UNIX' "unix" |
//branches/tracing/boot/arch/ppc32/yaboot/yaboot.conf |
---|
0,0 → 1,5 |
device=cd: |
timeout=0 |
image=/boot/image.boot |
label=HelenOS |
//branches/tracing/boot/arch/ppc32/yaboot/COPYING |
---|
0,0 → 1,340 |
GNU GENERAL PUBLIC LICENSE |
Version 2, June 1991 |
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
License is intended to guarantee your freedom to share and change free |
software--to make sure the software is free for all its users. This |
General Public License applies to most of the Free Software |
Foundation's software and to any other program whose authors commit to |
using it. (Some other Free Software Foundation software is covered by |
the GNU Library General Public License instead.) You can apply it to |
your programs, too. |
When we speak of free software, we are referring to freedom, not |
price. Our General Public Licenses are designed to make sure that you |
have the freedom to distribute copies of free software (and charge for |
this service if you wish), that you receive source code or can get it |
if you want it, that you can change the software or use pieces of it |
in new free programs; and that you know you can do these things. |
To protect your rights, we need to make restrictions that forbid |
anyone to deny you these rights or to ask you to surrender the rights. |
These restrictions translate to certain responsibilities for you if you |
distribute copies of the software, or if you modify it. |
For example, if you distribute copies of such a program, whether |
gratis or for a fee, you must give the recipients all the rights that |
you have. You must make sure that they, too, receive or can get the |
source code. And you must show them these terms so they know their |
rights. |
We protect your rights with two steps: (1) copyright the software, and |
(2) offer you this license which gives you legal permission to copy, |
distribute and/or modify the software. |
Also, for each author's protection and ours, we want to make certain |
that everyone understands that there is no warranty for this free |
software. If the software is modified by someone else and passed on, we |
want its recipients to know that what they have is not the original, so |
that any problems introduced by others will not reflect on the original |
authors' reputations. |
Finally, any free program is threatened constantly by software |
patents. We wish to avoid the danger that redistributors of a free |
program will individually obtain patent licenses, in effect making the |
program proprietary. To prevent this, we have made it clear that any |
patent must be licensed for everyone's free use or not licensed at all. |
The precise terms and conditions for copying, distribution and |
modification follow. |
GNU GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License applies to any program or other work which contains |
a notice placed by the copyright holder saying it may be distributed |
under the terms of this General Public License. The "Program", below, |
refers to any such program or work, and a "work based on the Program" |
means either the Program or any derivative work under copyright law: |
that is to say, a work containing the Program or a portion of it, |
either verbatim or with modifications and/or translated into another |
language. (Hereinafter, translation is included without limitation in |
the term "modification".) Each licensee is addressed as "you". |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running the Program is not restricted, and the output from the Program |
is covered only if its contents constitute a work based on the |
Program (independent of having been made by running the Program). |
Whether that is true depends on what the Program does. |
1. You may copy and distribute verbatim copies of the Program's |
source code as you receive it, in any medium, provided that you |
conspicuously and appropriately publish on each copy an appropriate |
copyright notice and disclaimer of warranty; keep intact all the |
notices that refer to this License and to the absence of any warranty; |
and give any other recipients of the Program a copy of this License |
along with the Program. |
You may charge a fee for the physical act of transferring a copy, and |
you may at your option offer warranty protection in exchange for a fee. |
2. You may modify your copy or copies of the Program or any portion |
of it, thus forming a work based on the Program, and copy and |
distribute such modifications or work under the terms of Section 1 |
above, provided that you also meet all of these conditions: |
a) You must cause the modified files to carry prominent notices |
stating that you changed the files and the date of any change. |
b) You must cause any work that you distribute or publish, that in |
whole or in part contains or is derived from the Program or any |
part thereof, to be licensed as a whole at no charge to all third |
parties under the terms of this License. |
c) If the modified program normally reads commands interactively |
when run, you must cause it, when started running for such |
interactive use in the most ordinary way, to print or display an |
announcement including an appropriate copyright notice and a |
notice that there is no warranty (or else, saying that you provide |
a warranty) and that users may redistribute the program under |
these conditions, and telling the user how to view a copy of this |
License. (Exception: if the Program itself is interactive but |
does not normally print such an announcement, your work based on |
the Program is not required to print an announcement.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Program, |
and can be reasonably considered independent and separate works in |
themselves, then this License, and its terms, do not apply to those |
sections when you distribute them as separate works. But when you |
distribute the same sections as part of a whole which is a work based |
on the Program, the distribution of the whole must be on the terms of |
this License, whose permissions for other licensees extend to the |
entire whole, and thus to each and every part regardless of who wrote it. |
Thus, it is not the intent of this section to claim rights or contest |
your rights to work written entirely by you; rather, the intent is to |
exercise the right to control the distribution of derivative or |
collective works based on the Program. |
In addition, mere aggregation of another work not based on the Program |
with the Program (or with a work based on the Program) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may copy and distribute the Program (or a work based on it, |
under Section 2) in object code or executable form under the terms of |
Sections 1 and 2 above provided that you also do one of the following: |
a) Accompany it with the complete corresponding machine-readable |
source code, which must be distributed under the terms of Sections |
1 and 2 above on a medium customarily used for software interchange; or, |
b) Accompany it with a written offer, valid for at least three |
years, to give any third party, for a charge no more than your |
cost of physically performing source distribution, a complete |
machine-readable copy of the corresponding source code, to be |
distributed under the terms of Sections 1 and 2 above on a medium |
customarily used for software interchange; or, |
c) Accompany it with the information you received as to the offer |
to distribute corresponding source code. (This alternative is |
allowed only for noncommercial distribution and only if you |
received the program in object code or executable form with such |
an offer, in accord with Subsection b above.) |
The source code for a work means the preferred form of the work for |
making modifications to it. For an executable work, complete source |
code means all the source code for all modules it contains, plus any |
associated interface definition files, plus the scripts used to |
control compilation and installation of the executable. However, as a |
special exception, the source code distributed need not include |
anything that is normally distributed (in either source or binary |
form) with the major components (compiler, kernel, and so on) of the |
operating system on which the executable runs, unless that component |
itself accompanies the executable. |
If distribution of executable or object code is made by offering |
access to copy from a designated place, then offering equivalent |
access to copy the source code from the same place counts as |
distribution of the source code, even though third parties are not |
compelled to copy the source along with the object code. |
4. You may not copy, modify, sublicense, or distribute the Program |
except as expressly provided under this License. Any attempt |
otherwise to copy, modify, sublicense or distribute the Program is |
void, and will automatically terminate your rights under this License. |
However, parties who have received copies, or rights, from you under |
this License will not have their licenses terminated so long as such |
parties remain in full compliance. |
5. You are not required to accept this License, since you have not |
signed it. However, nothing else grants you permission to modify or |
distribute the Program or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Program (or any work based on the |
Program), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Program or works based on it. |
6. Each time you redistribute the Program (or any work based on the |
Program), the recipient automatically receives a license from the |
original licensor to copy, distribute or modify the Program subject to |
these terms and conditions. You may not impose any further |
restrictions on the recipients' exercise of the rights granted herein. |
You are not responsible for enforcing compliance by third parties to |
this License. |
7. If, as a consequence of a court judgment or allegation of patent |
infringement or for any other reason (not limited to patent issues), |
conditions are imposed on you (whether by court order, agreement or |
otherwise) that contradict the conditions of this License, they do not |
excuse you from the conditions of this License. If you cannot |
distribute so as to satisfy simultaneously your obligations under this |
License and any other pertinent obligations, then as a consequence you |
may not distribute the Program at all. For example, if a patent |
license would not permit royalty-free redistribution of the Program by |
all those who receive copies directly or indirectly through you, then |
the only way you could satisfy both it and this License would be to |
refrain entirely from distribution of the Program. |
If any portion of this section is held invalid or unenforceable under |
any particular circumstance, the balance of the section is intended to |
apply and the section as a whole is intended to apply in other |
circumstances. |
It is not the purpose of this section to induce you to infringe any |
patents or other property right claims or to contest validity of any |
such claims; this section has the sole purpose of protecting the |
integrity of the free software distribution system, which is |
implemented by public license practices. Many people have made |
generous contributions to the wide range of software distributed |
through that system in reliance on consistent application of that |
system; it is up to the author/donor to decide if he or she is willing |
to distribute software through any other system and a licensee cannot |
impose that choice. |
This section is intended to make thoroughly clear what is believed to |
be a consequence of the rest of this License. |
8. If the distribution and/or use of the Program is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Program under this License |
may add an explicit geographical distribution limitation excluding |
those countries, so that distribution is permitted only in or among |
countries not thus excluded. In such case, this License incorporates |
the limitation as if written in the body of this License. |
9. The Free Software Foundation may publish revised and/or new versions |
of the General Public License from time to time. Such new versions will |
be similar in spirit to the present version, but may differ in detail to |
address new problems or concerns. |
Each version is given a distinguishing version number. If the Program |
specifies a version number of this License which applies to it and "any |
later version", you have the option of following the terms and conditions |
either of that version or of any later version published by the Free |
Software Foundation. If the Program does not specify a version number of |
this License, you may choose any version ever published by the Free Software |
Foundation. |
10. If you wish to incorporate parts of the Program into other free |
programs whose distribution conditions are different, write to the author |
to ask for permission. For software which is copyrighted by the Free |
Software Foundation, write to the Free Software Foundation; we sometimes |
make exceptions for this. Our decision will be guided by the two goals |
of preserving the free status of all derivatives of our free software and |
of promoting the sharing and reuse of software generally. |
NO WARRANTY |
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
REPAIR OR CORRECTION. |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGES. |
END OF TERMS AND CONDITIONS |
How to Apply These Terms to Your New Programs |
If you develop a new program, and you want it to be of the greatest |
possible use to the public, the best way to achieve this is to make it |
free software which everyone can redistribute and change under these terms. |
To do so, attach the following notices to the program. It is safest |
to attach them to the start of each source file to most effectively |
convey the exclusion of warranty; and each file should have at least |
the "copyright" line and a pointer to where the full notice is found. |
<one line to give the program's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
Also add information on how to contact you by electronic and paper mail. |
If the program is interactive, make it output a short notice like this |
when it starts in an interactive mode: |
Gnomovision version 69, Copyright (C) year name of author |
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
This is free software, and you are welcome to redistribute it |
under certain conditions; type `show c' for details. |
The hypothetical commands `show w' and `show c' should show the appropriate |
parts of the General Public License. Of course, the commands you use may |
be called something other than `show w' and `show c'; they could even be |
mouse-clicks or menu items--whatever suits your program. |
You should also get your employer (if you work as a programmer) or your |
school, if any, to sign a "copyright disclaimer" for the program, if |
necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
<signature of Ty Coon>, 1 April 1989 |
Ty Coon, President of Vice |
This General Public License does not permit incorporating your program into |
proprietary programs. If your program is a subroutine library, you may |
consider it more useful to permit linking proprietary applications with the |
library. If this is what you want to do, use the GNU Library General |
Public License instead of this License. |
//branches/tracing/boot/arch/ppc32/yaboot/ofboot.b |
---|
0,0 → 1,13 |
<CHRP-BOOT> |
<COMPATIBLE> |
MacRISC |
</COMPATIBLE> |
<DESCRIPTION> |
HelenOS |
</DESCRIPTION> |
<BOOT-SCRIPT> |
" screen" output |
load-base release-load-area |
boot cd:,\boot\yaboot |
</BOOT-SCRIPT> |
</CHRP-BOOT> |
//branches/tracing/boot/arch/ppc32/yaboot/README |
---|
0,0 → 1,5 |
For licensing terms of Yaboot boot loader see the file COPYING contained |
in this directory. Full version of Yaboot, including its source code, |
can be downloaded from Yaboot's project page: |
http://yaboot.ozlabs.org/ |
//branches/tracing/boot/arch/ppc32/yaboot/bootinfo.txt |
---|
0,0 → 1,5 |
<chrp-boot> |
<description>HelenOS</description> |
<os-name>HelenOS</os-name> |
<boot-script>boot cd:,\boot\yaboot</boot-script> |
</chrp-boot> |
//branches/tracing/boot/arch/ppc32/yaboot/yaboot |
---|
0,0 → 1,394 |
ELF 4 4 ( |