Add tcs; it compiles in my world, but I haven't tried it in Russ's yet.

This commit is contained in:
wkj 2004-04-21 01:15:41 +00:00
parent ba03b8910d
commit a31db67d14
42 changed files with 10804 additions and 1 deletions

View file

@ -6,7 +6,7 @@ SHORTLIB=sec fs mux regexp9 draw thread bio 9
<$PLAN9/src/mkmany
BUGGERED='CVS|faces|factotum|mailfs|mk|upas|vac|venti'
BUGGERED='CVS|faces|factotum|mailfs|mk|upas|vac|venti|tcs'
DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "^($BUGGERED)$"`
<$PLAN9/src/mkdirs

19
src/cmd/pbd.c Normal file
View file

@ -0,0 +1,19 @@
#include <u.h>
#include <libc.h>
void
main(void)
{
char buf[512], *p;
p = "???";
if(getwd(buf, sizeof buf)){
p = strrchr(buf, '/');
if(p == nil)
p = buf;
else if(p>buf || p[1]!='\0')
p++;
}
write(1, p, strlen(p));
exits(0);
}

1751
src/cmd/tcs/big5.c Normal file

File diff suppressed because it is too large Load diff

4
src/cmd/tcs/big5.h Normal file
View file

@ -0,0 +1,4 @@
#define BIG5MAX 13973
#define BIG5FONT 157
extern long tabbig5[BIG5MAX]; /* runes indexed by big5 ordinal */

18
src/cmd/tcs/conv.h Normal file
View file

@ -0,0 +1,18 @@
void jis_in(int fd, long *notused, struct convert *out);
void jisjis_in(int fd, long *notused, struct convert *out);
void msjis_in(int fd, long *notused, struct convert *out);
void ujis_in(int fd, long *notused, struct convert *out);
void jisjis_out(Rune *base, int n, long *notused);
void ujis_out(Rune *base, int n, long *notused);
void msjis_out(Rune *base, int n, long *notused);
void big5_in(int fd, long *notused, struct convert *out);
void big5_out(Rune *base, int n, long *notused);
void gb_in(int fd, long *notused, struct convert *out);
void gb_out(Rune *base, int n, long *notused);
void uksc_in(int fd, long *notused, struct convert *out);
void uksc_out(Rune *base, int n, long *notused);
#define emit(x) *(*r)++ = (x)
#define NRUNE 65536
extern long tab[]; /* common table indexed by Runes for reverse mappings */

165
src/cmd/tcs/conv_big5.c Normal file
View file

@ -0,0 +1,165 @@
#ifdef PLAN9
#include <u.h>
#include <libc.h>
#include <bio.h>
#else
#include <stdio.h>
#include <unistd.h>
#include "plan9.h"
#endif
#include "hdr.h"
#include "conv.h"
#include "big5.h"
/*
a state machine for interpreting big5 (hk format).
*/
void
big5proc(int c, Rune **r, long input_loc)
{
static enum { state0, state1 } state = state0;
static int lastc;
long n, ch, f, cold = c;
switch(state)
{
case state0: /* idle state */
if(c < 0)
return;
if(c >= 0xA1){
lastc = c;
state = state1;
return;
}
if(c == 26)
c = '\n';
emit(c);
return;
case state1: /* seen a font spec */
if(c >= 64 && c <= 126)
c -= 64;
else if(c >= 161 && c <= 254)
c = c-161 + 63;
else {
nerrors++;
if(squawk)
EPR "%s: bad big5 glyph (from 0x%x,0x%lx) near byte %ld in %s\n",
argv0, lastc, cold, input_loc, file);
if(!clean)
emit(BADMAP);
state = state0;
return;
}
if(lastc >= 161 && lastc <= 254)
f = lastc - 161;
else {
nerrors++;
if(squawk)
EPR "%s: bad big5 font %d (from 0x%x,0x%lx) near byte %ld in %s\n",
argv0, lastc-161, lastc, cold, input_loc, file);
if(!clean)
emit(BADMAP);
state = state0;
return;
}
n = f*BIG5FONT + c;
if(n < BIG5MAX)
ch = tabbig5[n];
else
ch = -1;
if(ch < 0){
nerrors++;
if(squawk)
EPR "%s: unknown big5 %ld (from 0x%x,0x%lx) near byte %ld in %s\n",
argv0, n, lastc, cold, input_loc, file);
if(!clean)
emit(BADMAP);
} else
emit(ch);
state = state0;
}
}
void
big5_in(int fd, long *notused, struct convert *out)
{
Rune ob[N];
Rune *r, *re;
uchar ibuf[N];
int n, i;
long nin;
USED(notused);
r = ob;
re = ob+N-3;
nin = 0;
while((n = read(fd, ibuf, sizeof ibuf)) > 0){
for(i = 0; i < n; i++){
big5proc(ibuf[i], &r, nin++);
if(r >= re){
OUT(out, ob, r-ob);
r = ob;
}
}
if(r > ob){
OUT(out, ob, r-ob);
r = ob;
}
}
big5proc(-1, &r, nin);
if(r > ob)
OUT(out, ob, r-ob);
}
void
big5_out(Rune *base, int n, long *notused)
{
char *p;
int i;
Rune r;
static int first = 1;
USED(notused);
if(first){
first = 0;
for(i = 0; i < NRUNE; i++)
tab[i] = -1;
for(i = 0; i < BIG5MAX; i++)
if(tabbig5[i] != -1)
tab[tabbig5[i]] = i;
}
nrunes += n;
p = obuf;
for(i = 0; i < n; i++){
r = base[i];
if(r < 128)
*p++ = r;
else {
if(tab[r] != -1){
r = tab[r];
if(r >= BIG5MAX){
*p++ = 0xA1;
*p++ = r-BIG5MAX;
continue;
} else {
*p++ = 0xA1 + (r/BIG5FONT);
r = r%BIG5FONT;
if(r <= 62) r += 64;
else r += 0xA1-63;
*p++ = r;
continue;
}
}
if(squawk)
EPR "%s: rune 0x%x not in output cs\n", argv0, r);
nerrors++;
if(clean)
continue;
*p++ = BYTEBADMAP;
}
}
noutput += p-obuf;
if(p > obuf)
write(1, obuf, p-obuf);
}

134
src/cmd/tcs/conv_gb.c Normal file
View file

@ -0,0 +1,134 @@
#ifdef PLAN9
#include <u.h>
#include <libc.h>
#include <bio.h>
#else
#include <stdio.h>
#include <unistd.h>
#include "plan9.h"
#endif
#include "hdr.h"
#include "conv.h"
#include "gb.h"
/*
a state machine for interpreting gb.
*/
void
gbproc(int c, Rune **r, long input_loc)
{
static enum { state0, state1 } state = state0;
static int lastc;
long n, ch, cold = c;
switch(state)
{
case state0: /* idle state */
if(c < 0)
return;
if(c >= 0xA1){
lastc = c;
state = state1;
return;
}
emit(c);
return;
case state1: /* seen a font spec */
if(c >= 0xA1)
n = (lastc-0xA0)*100 + (c-0xA0);
else {
nerrors++;
if(squawk)
EPR "%s: bad gb glyph %d (from 0x%x,0x%lx) near byte %ld in %s\n", argv0, c-0xA0, lastc, cold, input_loc, file);
if(!clean)
emit(BADMAP);
state = state0;
return;
}
ch = tabgb[n];
if(ch < 0){
nerrors++;
if(squawk)
EPR "%s: unknown gb %ld (from 0x%x,0x%lx) near byte %ld in %s\n", argv0, n, lastc, cold, input_loc, file);
if(!clean)
emit(BADMAP);
} else
emit(ch);
state = state0;
}
}
void
gb_in(int fd, long *notused, struct convert *out)
{
Rune ob[N];
Rune *r, *re;
uchar ibuf[N];
int n, i;
long nin;
USED(notused);
r = ob;
re = ob+N-3;
nin = 0;
while((n = read(fd, ibuf, sizeof ibuf)) > 0){
for(i = 0; i < n; i++){
gbproc(ibuf[i], &r, nin++);
if(r >= re){
OUT(out, ob, r-ob);
r = ob;
}
}
if(r > ob){
OUT(out, ob, r-ob);
r = ob;
}
}
gbproc(-1, &r, nin);
if(r > ob)
OUT(out, ob, r-ob);
}
void
gb_out(Rune *base, int n, long *notused)
{
char *p;
int i;
Rune r;
static int first = 1;
USED(notused);
if(first){
first = 0;
for(i = 0; i < NRUNE; i++)
tab[i] = -1;
for(i = 0; i < GBMAX; i++)
if(tabgb[i] != -1)
tab[tabgb[i]] = i;
}
nrunes += n;
p = obuf;
for(i = 0; i < n; i++){
r = base[i];
if(r < 128)
*p++ = r;
else {
if(tab[r] != -1){
r = tab[r];
*p++ = 0xA0 + (r/100);
*p++ = 0xA0 + (r%100);
continue;
}
if(squawk)
EPR "%s: rune 0x%x not in output cs\n", argv0, r);
nerrors++;
if(clean)
continue;
*p++ = BYTEBADMAP;
}
}
noutput += p-obuf;
if(p > obuf)
write(1, obuf, p-obuf);
}

535
src/cmd/tcs/conv_jis.c Normal file
View file

@ -0,0 +1,535 @@
#ifdef PLAN9
#include <u.h>
#include <libc.h>
#include <bio.h>
#else
#include <stdio.h>
#include <unistd.h>
#include "plan9.h"
#endif
#include "hdr.h"
#include "conv.h"
#include "kuten208.h"
#include "jis.h"
/*
a state machine for interpreting all sorts of encodings
*/
static void
alljis(int c, Rune **r, long input_loc)
{
static enum { state0, state1, state2, state3, state4 } state = state0;
static int set8 = 0;
static int japan646 = 0;
static int lastc;
int n;
long l;
again:
switch(state)
{
case state0: /* idle state */
if(c == ESC){ state = state1; return; }
if(c < 0) return;
if(!set8 && (c < 128)){
if(japan646){
switch(c)
{
case '\\': emit(0xA5); return; /* yen */
case '~': emit(0xAF); return; /* spacing macron */
default: emit(c); return;
}
} else {
emit(c);
return;
}
}
if(c < 0x21){ /* guard against bogus characters in JIS mode */
if(squawk)
EPR "%s: non-JIS character %02x in %s near byte %ld\n", argv0, c, file, input_loc);
emit(c);
return;
}
lastc = c; state = state4; return;
case state1: /* seen an escape */
if(c == '$'){ state = state2; return; }
if(c == '('){ state = state3; return; }
emit(ESC); state = state0; goto again;
case state2: /* may be shifting into JIS */
if((c == '@') || (c == 'B')){
set8 = 1; state = state0; return;
}
emit(ESC); emit('$'); state = state0; goto again;
case state3: /* may be shifting out of JIS */
if((c == 'J') || (c == 'H') || (c == 'B')){
japan646 = (c == 'J');
set8 = 0; state = state0; return;
}
emit(ESC); emit('('); state = state0; goto again;
case state4: /* two part char */
if(c < 0){
if(squawk)
EPR "%s: unexpected EOF in %s\n", argv0, file);
c = 0x21 | (lastc&0x80);
}
if(CANS2J(lastc, c)){ /* ms dos sjis */
int hi = lastc, lo = c;
S2J(hi, lo); /* convert to 208 */
n = hi*100 + lo - 3232; /* convert to kuten208 */
} else
n = (lastc&0x7F)*100 + (c&0x7f) - 3232; /* kuten208 */
if((n >= KUTEN208MAX) || ((l = tabkuten208[n]) == -1)){
nerrors++;
if(squawk)
EPR "%s: unknown kuten208 %d (from 0x%x,0x%x) near byte %ld in %s\n", argv0, n, lastc, c, input_loc, file);
if(!clean)
emit(BADMAP);
} else {
if(l < 0){
l = -l;
if(squawk)
EPR "%s: ambiguous kuten208 %d (mapped to 0x%lx) near byte %ld in %s\n", argv0, n, l, input_loc, file);
}
emit(l);
}
state = state0;
}
}
/*
a state machine for interpreting ms-kanji == shift-jis.
*/
static void
ms(int c, Rune **r, long input_loc)
{
static enum { state0, state1, state2, state3, state4 } state = state0;
static int set8 = 0;
static int japan646 = 0;
static int lastc;
int n;
long l;
again:
switch(state)
{
case state0: /* idle state */
if(c == ESC){ state = state1; return; }
if(c < 0) return;
if(!set8 && (c < 128)){
if(japan646){
switch(c)
{
case '\\': emit(0xA5); return; /* yen */
case '~': emit(0xAF); return; /* spacing macron */
default: emit(c); return;
}
} else {
emit(c);
return;
}
}
lastc = c; state = state4; return;
case state1: /* seen an escape */
if(c == '$'){ state = state2; return; }
if(c == '('){ state = state3; return; }
emit(ESC); state = state0; goto again;
case state2: /* may be shifting into JIS */
if((c == '@') || (c == 'B')){
set8 = 1; state = state0; return;
}
emit(ESC); emit('$'); state = state0; goto again;
case state3: /* may be shifting out of JIS */
if((c == 'J') || (c == 'H') || (c == 'B')){
japan646 = (c == 'J');
set8 = 0; state = state0; return;
}
emit(ESC); emit('('); state = state0; goto again;
case state4: /* two part char */
if(c < 0){
if(squawk)
EPR "%s: unexpected EOF in %s\n", argv0, file);
c = 0x21 | (lastc&0x80);
}
if(CANS2J(lastc, c)){ /* ms dos sjis */
int hi = lastc, lo = c;
S2J(hi, lo); /* convert to 208 */
n = hi*100 + lo - 3232; /* convert to kuten208 */
} else {
nerrors++;
if(squawk)
EPR "%s: illegal byte pair (0x%x,0x%x) near byte %ld in %s\n", argv0, lastc, c, input_loc, file);
if(!clean)
emit(BADMAP);
state = state0;
goto again;
}
if((n >= KUTEN208MAX) || ((l = tabkuten208[n]) == -1)){
nerrors++;
if(squawk)
EPR "%s: unknown kuten208 %d (from 0x%x,0x%x) near byte %ld in %s\n", argv0, n, lastc, c, input_loc, file);
if(!clean)
emit(BADMAP);
} else {
if(l < 0){
l = -l;
if(squawk)
EPR "%s: ambiguous kuten208 %d (mapped to 0x%lx) near byte %ld in %s\n", argv0, n, l, input_loc, file);
}
emit(l);
}
state = state0;
}
}
/*
a state machine for interpreting ujis == EUC
*/
static void
ujis(int c, Rune **r, long input_loc)
{
static enum { state0, state1 } state = state0;
static int lastc;
int n;
long l;
switch(state)
{
case state0: /* idle state */
if(c < 0) return;
if(c < 128){
emit(c);
return;
}
if(c == 0x8e){ /* codeset 2 */
nerrors++;
if(squawk)
EPR "%s: unknown codeset 2 near byte %ld in %s\n", argv0, input_loc, file);
if(!clean)
emit(BADMAP);
return;
}
if(c == 0x8f){ /* codeset 3 */
nerrors++;
if(squawk)
EPR "%s: unknown codeset 3 near byte %ld in %s\n", argv0, input_loc, file);
if(!clean)
emit(BADMAP);
return;
}
lastc = c;
state = state1;
return;
case state1: /* two part char */
if(c < 0){
if(squawk)
EPR "%s: unexpected EOF in %s\n", argv0, file);
c = 0xA1;
}
n = (lastc&0x7F)*100 + (c&0x7F) - 3232; /* kuten208 */
if((n >= KUTEN208MAX) || ((l = tabkuten208[n]) == -1)){
nerrors++;
if(squawk)
EPR "%s: unknown kuten208 %d (from 0x%x,0x%x) near byte %ld in %s\n", argv0, n, lastc, c, input_loc, file);
if(!clean)
emit(BADMAP);
} else {
if(l < 0){
l = -l;
if(squawk)
EPR "%s: ambiguous kuten208 %d (mapped to 0x%lx) near byte %ld in %s\n", argv0, n, l, input_loc, file);
}
emit(l);
}
state = state0;
}
}
/*
a state machine for interpreting jis-kanji == 2022-JP
*/
static void
jis(int c, Rune **r, long input_loc)
{
static enum { state0, state1, state2, state3, state4 } state = state0;
static int set8 = 0;
static int japan646 = 0;
static int lastc;
int n;
long l;
again:
switch(state)
{
case state0: /* idle state */
if(c == ESC){ state = state1; return; }
if(c < 0) return;
if(!set8 && (c < 128)){
if(japan646){
switch(c)
{
case '\\': emit(0xA5); return; /* yen */
case '~': emit(0xAF); return; /* spacing macron */
default: emit(c); return;
}
} else {
emit(c);
return;
}
}
lastc = c; state = state4; return;
case state1: /* seen an escape */
if(c == '$'){ state = state2; return; }
if(c == '('){ state = state3; return; }
emit(ESC); state = state0; goto again;
case state2: /* may be shifting into JIS */
if((c == '@') || (c == 'B')){
set8 = 1; state = state0; return;
}
emit(ESC); emit('$'); state = state0; goto again;
case state3: /* may be shifting out of JIS */
if((c == 'J') || (c == 'H') || (c == 'B')){
japan646 = (c == 'J');
set8 = 0; state = state0; return;
}
emit(ESC); emit('('); state = state0; goto again;
case state4: /* two part char */
if(c < 0){
if(squawk)
EPR "%s: unexpected EOF in %s\n", argv0, file);
c = 0x21 | (lastc&0x80);
}
if((lastc&0x80) != (c&0x80)){ /* guard against latin1 in jis */
emit(lastc);
state = state0;
goto again;
}
n = (lastc&0x7F)*100 + (c&0x7f) - 3232; /* kuten208 */
if((n >= KUTEN208MAX) || ((l = tabkuten208[n]) == -1)){
nerrors++;
if(squawk)
EPR "%s: unknown kuten208 %d (from 0x%x,0x%x) near byte %ld in %s\n", argv0, n, lastc, c, input_loc, file);
if(!clean)
emit(BADMAP);
} else {
if(l < 0){
l = -l;
if(squawk)
EPR "%s: ambiguous kuten208 %d (mapped to 0x%lx) near byte %ld in %s\n", argv0, n, l, input_loc, file);
}
emit(l);
}
state = state0;
}
}
static void
do_in(int fd, void (*procfn)(int, Rune **, long), struct convert *out)
{
Rune ob[N];
Rune *r, *re;
uchar ibuf[N];
int n, i;
long nin;
r = ob;
re = ob+N-3;
nin = 0;
while((n = read(fd, ibuf, sizeof ibuf)) > 0){
for(i = 0; i < n; i++){
(*procfn)(ibuf[i], &r, nin++);
if(r >= re){
OUT(out, ob, r-ob);
r = ob;
}
}
if(r > ob){
OUT(out, ob, r-ob);
r = ob;
}
}
(*procfn)(-1, &r, nin);
if(r > ob)
OUT(out, ob, r-ob);
}
void
jis_in(int fd, long *notused, struct convert *out)
{
USED(notused);
do_in(fd, alljis, out);
}
void
ujis_in(int fd, long *notused, struct convert *out)
{
USED(notused);
do_in(fd, ujis, out);
}
void
msjis_in(int fd, long *notused, struct convert *out)
{
USED(notused);
do_in(fd, ms, out);
}
void
jisjis_in(int fd, long *notused, struct convert *out)
{
USED(notused);
do_in(fd, jis, out);
}
static int first = 1;
static void
tab_init(void)
{
int i;
long l;
first = 0;
for(i = 0; i < NRUNE; i++)
tab[i] = -1;
for(i = 0; i < KUTEN208MAX; i++)
if((l = tabkuten208[i]) != -1){
if(l < 0)
tab[-l] = i;
else
tab[l] = i;
}
}
/* jis-kanji, or ISO 2022-JP */
void
jisjis_out(Rune *base, int n, long *notused)
{
char *p;
int i;
Rune r;
static enum { ascii, japan646, jp2022 } state = ascii;
USED(notused);
if(first)
tab_init();
nrunes += n;
p = obuf;
for(i = 0; i < n; i++){
r = base[i];
if(r < 128){
if(state == jp2022){
*p++ = ESC; *p++ = '('; *p++ = 'B';
state = ascii;
}
*p++ = r;
} else {
if(tab[r] != -1){
if(state != jp2022){
*p++ = ESC; *p++ = '$'; *p++ = 'B';
state = jp2022;
}
*p++ = tab[r]/100 + ' ';
*p++ = tab[r]%100 + ' ';
continue;
}
if(squawk)
EPR "%s: rune 0x%x not in output cs\n", argv0, r);
nerrors++;
if(clean)
continue;
*p++ = BYTEBADMAP;
}
}
noutput += p-obuf;
if(p > obuf)
write(1, obuf, p-obuf);
}
/* ms-kanji, or Shift-JIS */
void
msjis_out(Rune *base, int n, long *notused)
{
char *p;
int i, hi, lo;
Rune r;
USED(notused);
if(first)
tab_init();
nrunes += n;
p = obuf;
for(i = 0; i < n; i++){
r = base[i];
if(r < 128)
*p++ = r;
else {
if(tab[r] != -1){
hi = tab[r]/100 + ' ';
lo = tab[r]%100 + ' ';
J2S(hi, lo);
*p++ = hi;
*p++ = lo;
continue;
}
if(squawk)
EPR "%s: rune 0x%x not in output cs\n", argv0, r);
nerrors++;
if(clean)
continue;
*p++ = BYTEBADMAP;
}
}
noutput += p-obuf;
if(p > obuf)
write(1, obuf, p-obuf);
}
/* ujis, or EUC */
void
ujis_out(Rune *base, int n, long *notused)
{
char *p;
int i;
Rune r;
USED(notused);
if(first)
tab_init();
nrunes += n;
p = obuf;
for(i = 0; i < n; i++){
r = base[i];
if(r < 128)
*p++ = r;
else {
if(tab[r] != -1){
*p++ = 0x80 | (tab[r]/100 + ' ');
*p++ = 0x80 | (tab[r]%100 + ' ');
continue;
}
if(squawk)
EPR "%s: rune 0x%x not in output cs\n", argv0, r);
nerrors++;
if(clean)
continue;
*p++ = BYTEBADMAP;
}
}
noutput += p-obuf;
if(p > obuf)
write(1, obuf, p-obuf);
}

160
src/cmd/tcs/conv_ksc.c Normal file
View file

@ -0,0 +1,160 @@
#ifdef PLAN9
#include <u.h>
#include <libc.h>
#include <bio.h>
#else
#include <stdio.h>
#include <unistd.h>
#include "plan9.h"
#endif
#include "hdr.h"
#include "conv.h"
#include "ksc.h"
/*
contributed by kuro@vodka.Eng.Sun.COM (Teruhiko Kurosaka)
*/
/*
a state machine for interpreting shift-ksc.
*/
#define SS2 0x8e
#define SS3 0x8f
/*
* Convert EUC in Koran locale to Unicode.
* Only codeset 0 and 1 are used.
*/
void
ukscproc(int c, Rune **r, long input_loc)
{
static enum { init, cs1last /*, cs2, cs3first, cs3last*/} state = init;
static int korean646 = 1; /* fixed to 1 for now. */
static int lastc;
int n;
long l;
switch(state)
{
case init:
if (c < 0){
return;
}else if (c < 128){
if(korean646 && (c=='\\')){
emit(0x20A9);
} else {
emit(c);
}
/* }else if (c==SS2){
state = cs2;
}else if (c==SS3){
state = cs3first;
*/ }else{
lastc = c;
state = cs1last;
}
return;
case cs1last: /* 2nd byte of codeset 1 (KSC 5601) */
if(c < 0){
if(squawk)
EPR "%s: unexpected EOF in %s\n", argv0, file);
c = 0x21 | (lastc&0x80);
}
n = ((lastc&0x7f)-33)*94 + (c&0x7f)-33;
if((n >= ksc5601max) || ((l = tabksc5601[n]) < 0)){
nerrors++;
if(squawk)
EPR "%s: unknown ksc5601 %d (from 0x%x,0x%x) near byte %ld in %s\n", argv0, n, lastc, c, input_loc, file);
if(!clean)
emit(BADMAP);
} else {
emit(l);
}
state = init;
return;
default:
if(squawk)
EPR "%s: ukscproc: unknown state %d\n",
argv0, init);
}
}
void
uksc_in(int fd, long *notused, struct convert *out)
{
Rune ob[N];
Rune *r, *re;
uchar ibuf[N];
int n, i;
long nin;
USED(notused);
r = ob;
re = ob+N-3;
nin = 0;
while((n = read(fd, ibuf, sizeof ibuf)) > 0){
for(i = 0; i < n; i++){
ukscproc(ibuf[i], &r, nin++);
if(r >= re){
OUT(out, ob, r-ob);
r = ob;
}
}
if(r > ob){
OUT(out, ob, r-ob);
r = ob;
}
}
ukscproc(-1, &r, nin);
if(r > ob)
OUT(out, ob, r-ob);
}
void
uksc_out(Rune *base, int n, long *notused)
{
char *p;
int i;
Rune r;
long l;
static int first = 1;
USED(notused);
if(first){
first = 0;
for(i = 0; i < NRUNE; i++)
tab[i] = -1;
for(i = 0; i < ksc5601max; i++)
if((l = tabksc5601[i]) != -1){
if(l < 0)
tab[-l] = i;
else
tab[l] = i;
}
}
nrunes += n;
p = obuf;
for(i = 0; i < n; i++){
r = base[i];
if(r < 128)
*p++ = r;
else {
if(tab[r] != -1){
*p++ = 0x80 | (tab[r]/94 + 0x21);
*p++ = 0x80 | (tab[r]%94 + 0x21);
continue;
}
if(squawk)
EPR "%s: rune 0x%x not in output cs\n", argv0, r);
nerrors++;
if(clean)
continue;
*p++ = BYTEBADMAP;
}
}
noutput += p-obuf;
if(p > obuf)
write(1, obuf, p-obuf);
}

162
src/cmd/tcs/cyrillic.h Normal file
View file

@ -0,0 +1,162 @@
long tabucode[256] =
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
0x00a0, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,0x041f,
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,0x042e,0x042f,
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,0x043f,
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,0x044e,0x044f,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
};
long tabkoi8[256] =
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
0x044e,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433,
0x0445,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,
0x043f,0x044f,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432,
0x044c,0x044b,0x0437,0x0448,0x044d,0x0449,0x0447,0x044a,
0x042e,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413,
0x0425,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,
0x041f,0x042f,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412,
0x042c,0x042b,0x0417,0x0428,0x042d,0x0429,0x0427,0x042a,
};
long tab866[256] =
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,0x041f,
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,0x042e,0x042f,
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,0x043f,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,0x044e,0x044f,
0x0401,0x0451, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
};
long tabav[256] =
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,0x041f,
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,0x042e,0x042f,
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,0x043f,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,0x044e,0x044f,
0x0401,0x0451,0x0301,0x0300,0x0301,0x0300,0x2192,0x2190,
0x2193,0x2191,0x00f7,0x00b1,0x2116,0x00a4, -1, -1,
};
long tabcp1251[256] =
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
0x0402,0x0403,0x201a,0x0453,0x201e,0x2026,0x2020,0x2021,
-1,0x2030,0x0409,0x2039,0x040a,0x040c,0x040b,0x040f,
0x0452,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014,
-1,0x2122,0x0459,0x203a,0x045a,0x045c,0x045b,0x045f,
0x00a0,0x040e,0x045e,0x0408,0x00a4,0x0490,0x00a6,0x00a7,
0x0401,0x00a9,0x0404,0x00ab,0x00ac,0x00ad,0x00ae,0x0407,
0x00b0,0x00b1,0x0406,0x0456,0x0491,0x00b5,0x00b6,0x00b7,
0x0451,0x2116,0x0454,0x00bb,0x0458,0x0405,0x0455,0x0457,
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,0x041f,
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,0x042e,0x042f,
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,0x043f,
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,0x044e,0x044f,
};
long tabov[256] =
{
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0416,0x0417,
0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e,0x041f,
0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426,0x0427,
0x0428,0x0429,0x042a,0x042b,0x042c,0x042d,0x042e,0x042f,
0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0436,0x0437,
0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e,0x043f,
0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446,0x0447,
0x0448,0x0449,0x044a,0x044b,0x044c,0x044d,0x044e,0x044f,
0x0401,0x0451,0x0301,0x0300,0x0301,0x0300,0x2192,0x2190,
0x2193,0x2191,0x00f7,0x00b1,0x2116,0x00a4, -1, -1,
};

488
src/cmd/tcs/desc.latin Normal file
View file

@ -0,0 +1,488 @@
From Eng.Sun.COM!Bill.Tuthill Sat Jan 25 13:46:31 PST 1992
Received: by pyxis; Sat Jan 25 21:57 EST 1992
Received: by inet.att.com; Sat Jan 25 21:57 EST 1992
Received: from Eng.Sun.COM (zigzag-bb.Corp.Sun.COM) by Sun.COM (4.1/SMI-4.1)
id AA00310; Sat, 25 Jan 92 18:57:42 PST
Received: from cairo.Eng.Sun.COM by Eng.Sun.COM (4.1/SMI-4.1)
id AA24397; Sat, 25 Jan 92 13:44:29 PST
Received: by cairo.Eng.Sun.COM (4.1/SMI-4.1)
id AA16411; Sat, 25 Jan 92 13:46:31 PST
Date: Sat, 25 Jan 92 13:46:31 PST
From: Bill.Tuthill@Eng.Sun.COM (Bill "Bill" Tuthill)
Message-Id: <9201252146.AA16411@cairo.Eng.Sun.COM>
To: andrew@research.att.com
Subject: Unicode => 8859
6.1a ISO Mapping Tables
This section includes the following mapping tables:
* Unicode value to ISO 8859, which contains several 8-bit character sets
covering the Latin, Greek, Cyrillic, Hebrew and Arabic scripts.
Unicode Encoding to ISO 8859 Mappings
(For Unicode U+0000 to U+007F all mappings are identities.)
UNIC 2 3 4 5 6 7 8 9 Unicode character name
00A0 A0 A0 A0 A0 A0 A0 A0 A0 NON-BREAKING SPACE
00A1 A1 INVERTED EXCLAMATION MARK
00A2 A2 A2 CENT SIGN
00A3 A3 A3 A3 A3 POUND SIGN
00A4 A4 A4 A4 A4 A4 A4 CURRENCY SIGN
00A5 A5 A5 YEN SIGN
00A6 A6 A6 A6 BROKEN VERTICAL BAR
00A7 A7 A7 A7 FD A7 A7 A7 SECTION SIGN
00A8 A8 A8 A8 A8 A8 A8 SPACING DIAERESIS
00A9 A9 A9 A9 COPYRIGHT SIGN
00AA AA FEMININE ORDINAL INDICATOR
00AB AB AB AB LEFT POINTING GUILLEMET
00AC AC AC AC NOT SIGN
00AD AD AD AD AD AD AD AD AD SOFT HYPHEN
00AE AE AE REGISTERED TRADE MARK SIGN
00AF AF AF SPACING MACRON
00B0 B0 B0 B0 B0 B0 B0 DEGREE SIGN
00B1 B1 B1 B1 PLUS-OR-MINUS SIGN
00B2 B2 B2 B2 B2 SUPERSCRIPT DIGIT TWO
00B3 B3 B3 B3 B3 SUPERSCRIPT DIGIT THREE
00B4 B4 B4 B4 B4 B4 SPACING ACUTE
00B5 B5 B5 B5 MICRO SIGN
00B6 B6 B6 PARAGRAPH SIGN
00B7 B7 B7 B7 B7 MIDDLE DOT
00B8 B8 B8 B8 B8 B8 SPACING CEDILLA
00B9 B9 B9 SUPERSCRIPT DIGIT ONE
00BA BA MASCULINE ORDINAL INDICATOR
00BB BB BB BB RIGHT POINTING GUILLEMET
00BC BC BC FRACTION ONE QUARTER
00BD BD BD BD BD FRACTION ONE HALF
00BE BE BE FRACTION THREE QUARTERS
00BF BF INVERTED QUESTION MARK
00C0 C0 C0 LATIN CAPITAL LETTER A GRAVE
00C1 C1 C1 C1 C1 LATIN CAPITAL LETTER A ACUTE
00C2 C2 C2 C2 C2 LATIN CAPITAL LETTER A CIRCUMFLEX
00C3 C3 C3 LATIN CAPITAL LETTER A TILDE
00C4 C4 C4 C4 C4 LATIN CAPITAL LETTER A DIAERESIS
00C5 C5 C5 LATIN CAPITAL LETTER A RING
00C6 C6 C6 LATIN CAPITAL LETTER A E
00C7 C7 C7 C7 LATIN CAPITAL LETTER C CEDILLA
00C8 C8 C8 LATIN CAPITAL LETTER E GRAVE
00C9 C9 C9 C9 C9 LATIN CAPITAL LETTER E ACUTE
00CA CA CA LATIN CAPITAL LETTER E CIRCUMFLEX
00CB CB CB CB CB LATIN CAPITAL LETTER E DIAERESIS
00CC CC CC LATIN CAPITAL LETTER I GRAVE
00CD CD CD CD CD LATIN CAPITAL LETTER I ACUTE
00CE CE CE CE CE LATIN CAPITAL LETTER I CIRCUMFLEX
00CF CF CF LATIN CAPITAL LETTER I DIAERESIS
00D1 D1 D1 LATIN CAPITAL LETTER N TILDE
00D2 D2 D2 LATIN CAPITAL LETTER O GRAVE
00D3 D3 D3 D3 LATIN CAPITAL LETTER O ACUTE
00D4 D4 D4 D4 D4 LATIN CAPITAL LETTER O CIRCUMFLEX
00D5 D5 D5 LATIN CAPITAL LETTER O TILDE
00D6 D6 D6 D6 D6 LATIN CAPITAL LETTER O DIAERESIS
00D7 D7 D7 D7 AA D7 MULTIPLICATION SIGN
00D8 D8 D8 LATIN CAPITAL LETTER O SLASH
00D9 D9 D9 LATIN CAPITAL LETTER U GRAVE
00DA DA DA DA DA LATIN CAPITAL LETTER U ACUTE
00DB DB DB DB LATIN CAPITAL LETTER U CIRCUMFLEX
00DC DC DC DC DC LATIN CAPITAL LETTER U DIAERESIS
00DD DD LATIN CAPITAL LETTER Y ACUTE
00DF DF DF DF DF LATIN SMALL LETTER SHARP S
00E0 E0 E0 LATIN SMALL LETTER A GRAVE
00E1 E1 E1 E1 E1 LATIN SMALL LETTER A ACUTE
00E2 E2 E2 E2 E2 LATIN SMALL LETTER A CIRCUMFLEX
00E3 E3 E3 LATIN SMALL LETTER A TILDE
00E4 E4 E4 E4 E4 LATIN SMALL LETTER A DIAERESIS
00E5 E5 E5 LATIN SMALL LETTER A RING
00E6 E6 E6 LATIN SMALL LETTER A E
00E7 E7 E7 E7 LATIN SMALL LETTER C CEDILLA
00E8 E8 E8 LATIN SMALL LETTER E GRAVE
00E9 E9 E9 E9 E9 LATIN SMALL LETTER E ACUTE
00EA EA EA LATIN SMALL LETTER E CIRCUMFLEX
00EB EB EB EB EB LATIN SMALL LETTER E DIAERESIS
00EC EC EC LATIN SMALL LETTER I GRAVE
00ED ED ED ED ED LATIN SMALL LETTER I ACUTE
00EE EE EE EE EE LATIN SMALL LETTER I CIRCUMFLEX
00EF EF EF LATIN SMALL LETTER I DIAERESIS
00F1 F1 F1 LATIN SMALL LETTER N TILDE
00F2 F2 F2 LATIN SMALL LETTER O GRAVE
00F3 F3 F3 F3 LATIN SMALL LETTER O ACUTE
00F4 F4 F4 F4 F4 LATIN SMALL LETTER O CIRCUMFLEX
00F5 F5 F5 LATIN SMALL LETTER O TILDE
00F6 F6 F6 F6 F6 LATIN SMALL LETTER O DIAERESIS
00F7 F7 F7 F7 BA F7 DIVISION SIGN
00F8 F8 F8 LATIN SMALL LETTER O SLASH
00F9 F9 F9 LATIN SMALL LETTER U GRAVE
00FA FA FA FA FA LATIN SMALL LETTER U ACUTE
00FB FB FB FB LATIN SMALL LETTER U CIRCUMFLEX
00FC FC FC FC FC LATIN SMALL LETTER U DIAERESIS
00FD FD LATIN SMALL LETTER Y ACUTE
00FF FF LATIN SMALL LETTER Y DIAERESIS
0100 C0 LATIN CAPITAL LETTER A MACRON
0101 E0 LATIN SMALL LETTER A MACRON
0102 C3 LATIN CAPITAL LETTER A BREVE
0103 E3 LATIN SMALL LETTER A BREVE
0104 A1 A1 LATIN CAPITAL LETTER A OGONEK
0105 B1 B1 LATIN SMALL LETTER A OGONEK
0106 C6 LATIN CAPITAL LETTER C ACUTE
0107 E6 LATIN SMALL LETTER C ACUTE
0108 C6 LATIN CAPITAL LETTER C CIRCUMFLEX
0109 E6 LATIN SMALL LETTER C CIRCUMFLEX
010A C5 LATIN CAPITAL LETTER C DOT
010B E5 LATIN SMALL LETTER C DOT
010C C8 C8 LATIN CAPITAL LETTER C HACEK
010D E8 E8 LATIN SMALL LETTER C HACEK
010E CF LATIN CAPITAL LETTER D HACEK
010F EF LATIN SMALL LETTER D HACEK
0110 D0 D0 LATIN CAPITAL LETTER D BAR
0111 F0 F0 LATIN SMALL LETTER D BAR
0112 AA LATIN CAPITAL LETTER E MACRON
0113 BA LATIN SMALL LETTER E MACRON
0116 CC LATIN CAPITAL LETTER E DOT
0117 EC LATIN SMALL LETTER E DOT
0118 CA CA LATIN CAPITAL LETTER E OGONEK
0119 EA EA LATIN SMALL LETTER E OGONEK
011A CC LATIN CAPITAL LETTER E HACEK
011B EC LATIN SMALL LETTER E HACEK
011C D8 LATIN CAPITAL LETTER G CIRCUMFLEX
011D F8 LATIN SMALL LETTER G CIRCUMFLEX
011E AB D0 LATIN CAPITAL LETTER G BREVE
011F BB F0 LATIN SMALL LETTER G BREVE
0120 D5 LATIN CAPITAL LETTER G DOT
0121 F5 LATIN SMALL LETTER G DOT
0122 AB LATIN CAPITAL LETTER G CEDILLA
0123 BB LATIN SMALL LETTER G CEDILLA
0124 A6 LATIN CAPITAL LETTER H CIRCUMFLEX
0125 B6 LATIN SMALL LETTER H CIRCUMFLEX
0126 A1 LATIN CAPITAL LETTER H BAR
0127 B1 LATIN SMALL LETTER H BAR
0128 A5 LATIN CAPITAL LETTER I TILDE
0129 B5 LATIN SMALL LETTER I TILDE
012A CF LATIN CAPITAL LETTER I MACRON
012B EF LATIN SMALL LETTER I MACRON
012E C7 LATIN CAPITAL LETTER I OGONEK
012F E7 LATIN SMALL LETTER I OGONEK
0130 A9 DD LATIN CAPITAL LETTER I DOT
0131 B9 FD LATIN SMALL LETTER DOTLESS I
0134 AC LATIN CAPITAL LETTER J CIRCUMFLEX
0135 BC LATIN SMALL LETTER J CIRCUMFLEX
0136 D3 LATIN CAPITAL LETTER K CEDILLA
0137 F3 LATIN SMALL LETTER K CEDILLA
0138 A2 LATIN SMALL LETTER KRA
0139 C5 LATIN CAPITAL LETTER L ACUTE
013A E5 LATIN SMALL LETTER L ACUTE
013B A6 LATIN CAPITAL LETTER L CEDILLA
013C B6 LATIN SMALL LETTER L CEDILLA
013D A5 LATIN CAPITAL LETTER L HACEK
013E B5 LATIN SMALL LETTER L HACEK
0141 A3 LATIN CAPITAL LETTER L SLASH
0142 B3 LATIN SMALL LETTER L SLASH
0143 D1 LATIN CAPITAL LETTER N ACUTE
0144 F1 LATIN SMALL LETTER N ACUTE
0145 D1 LATIN CAPITAL LETTER N CEDILLA
0146 F1 LATIN SMALL LETTER N CEDILLA
0147 D2 LATIN CAPITAL LETTER N HACEK
0148 F2 LATIN SMALL LETTER N HACEK
014A BD LATIN CAPITAL LETTER ENG
014B BF LATIN SMALL LETTER ENG
014C D2 LATIN CAPITAL LETTER O MACRON
014D F2 LATIN SMALL LETTER O MACRON
0150 D5 LATIN CAPITAL LETTER O DOUBLE ACUTE
0151 F5 LATIN SMALL LETTER O DOUBLE ACUTE
0154 C0 LATIN CAPITAL LETTER R ACUTE
0155 E0 LATIN SMALL LETTER R ACUTE
0156 A3 LATIN CAPITAL LETTER R CEDILLA
0157 B3 LATIN SMALL LETTER R CEDILLA
0158 D8 LATIN CAPITAL LETTER R HACEK
0159 F8 LATIN SMALL LETTER R HACEK
015A A6 LATIN CAPITAL LETTER S ACUTE
015B B6 LATIN SMALL LETTER S ACUTE
015C DE LATIN CAPITAL LETTER S CIRCUMFLEX
015D FE LATIN SMALL LETTER S CIRCUMFLEX
015E AA AA DE LATIN CAPITAL LETTER S CEDILLA
015F BA BA FE LATIN SMALL LETTER S CEDILLA
0160 A9 A9 LATIN CAPITAL LETTER S HACEK
0161 B9 B9 LATIN SMALL LETTER S HACEK
0162 DE LATIN CAPITAL LETTER T CEDILLA
0163 FE LATIN SMALL LETTER T CEDILLA
0164 AB LATIN CAPITAL LETTER T HACEK
0165 BB LATIN SMALL LETTER T HACEK
0166 AC LATIN CAPITAL LETTER T BAR
0167 BC LATIN SMALL LETTER T BAR
0168 DD LATIN CAPITAL LETTER U TILDE
0169 FD LATIN SMALL LETTER U TILDE
016A DE LATIN CAPITAL LETTER U MACRON
016B FE LATIN SMALL LETTER U MACRON
016C DD LATIN CAPITAL LETTER U BREVE
016D FD LATIN SMALL LETTER U BREVE
016E D9 LATIN CAPITAL LETTER U RING
016F F9 LATIN SMALL LETTER U RING
0170 DB LATIN CAPITAL LETTER U DOUBLE ACUTE
0171 FB LATIN SMALL LETTER U DOUBLE ACUTE
0172 D9 LATIN CAPITAL LETTER U OGONEK
0173 F9 LATIN SMALL LETTER U OGONEK
0179 AC LATIN CAPITAL LETTER Z ACUTE
017A BC LATIN SMALL LETTER Z ACUTE
017B AF AF LATIN CAPITAL LETTER Z DOT
017C BF BF LATIN SMALL LETTER Z DOT
017D AE AE LATIN CAPITAL LETTER Z HACEK
017E BE BE LATIN SMALL LETTER Z HACEK
02C7 B7 B7 MODIFIER LETTER HACEK
02D8 A2 A2 SPACING BREVE
02D9 FF FF FF SPACING DOT ABOVE
02DB B2 B2 SPACING OGONEK
02DD BD SPACING DOUBLE ACUTE
0371 A1 GREEK NON-SPACING DASIA PNEUMATA
0372 A2 GREEK NON-SPACING PSILI PNEUMATA
0386 B6 GREEK CAPITAL LETTER ALPHA TONOS
0388 B8 GREEK CAPITAL LETTER EPSILON TONOS
0389 B9 GREEK CAPITAL LETTER ETA TONOS
038A BA GREEK CAPITAL LETTER IOTA TONOS
038C BC GREEK CAPITAL LETTER OMICRON TONOS
038E BE GREEK CAPITAL LETTER UPSILON TONOS
038F BF GREEK CAPITAL LETTER OMEGA TONOS
0390 C0 GREEK SMALL LETTER IOTA DIAERESIS TONOS
0391 C1 GREEK CAPITAL LETTER ALPHA
0392 C2 GREEK CAPITAL LETTER BETA
0393 C3 GREEK CAPITAL LETTER GAMMA
0394 C4 GREEK CAPITAL LETTER DELTA
0395 C5 GREEK CAPITAL LETTER EPSILON
0396 C6 GREEK CAPITAL LETTER ZETA
0397 C7 GREEK CAPITAL LETTER ETA
0398 C8 GREEK CAPITAL LETTER THETA
0399 C9 GREEK CAPITAL LETTER IOTA
039A CA GREEK CAPITAL LETTER KAPPA
039B CB GREEK CAPITAL LETTER LAMBDA
039C CC GREEK CAPITAL LETTER MU
039D CD GREEK CAPITAL LETTER NU
039E CE GREEK CAPITAL LETTER XI
039F CF GREEK CAPITAL LETTER OMICRON
03A0 D0 GREEK CAPITAL LETTER PI
03A1 D1 GREEK CAPITAL LETTER RHO
03A3 D3 GREEK CAPITAL LETTER SIGMA
03A4 D4 GREEK CAPITAL LETTER TAU
03A5 D5 GREEK CAPITAL LETTER UPSILON
03A6 D6 GREEK CAPITAL LETTER PHI
03A7 D7 GREEK CAPITAL LETTER CHI
03A8 D8 GREEK CAPITAL LETTER PSI
03A9 D9 GREEK CAPITAL LETTER OMEGA
03AA DA GREEK CAPITAL LETTER IOTA DIAERESIS
03AB DB GREEK CAPITAL LETTER UPSILON DIAERESIS
03AC DC GREEK SMALL LETTER ALPHA TONOS
03AD DD GREEK SMALL LETTER EPSILON TONOS
03AE DE GREEK SMALL LETTER ETA TONOS
03AF DF GREEK SMALL LETTER IOTA TONOS
03B0 E0 GREEK SMALL LETTER UPSILON DIAERESIS TONOS
03B1 E1 GREEK SMALL LETTER ALPHA
03B2 E2 GREEK SMALL LETTER BETA
03B3 E3 GREEK SMALL LETTER GAMMA
03B4 E4 GREEK SMALL LETTER DELTA
03B5 E5 GREEK SMALL LETTER EPSILON
03B6 E6 GREEK SMALL LETTER ZETA
03B7 E7 GREEK SMALL LETTER ETA
03B8 E8 GREEK SMALL LETTER THETA
03B9 E9 GREEK SMALL LETTER IOTA
03BA EA GREEK SMALL LETTER KAPPA
03BB EB GREEK SMALL LETTER LAMBDA
03BC EC GREEK SMALL LETTER MU
03BD ED GREEK SMALL LETTER NU
03BE EE GREEK SMALL LETTER XI
03BF EF GREEK SMALL LETTER OMICRON
03C0 F0 GREEK SMALL LETTER PI
03C1 F1 GREEK SMALL LETTER RHO
03C2 F2 GREEK SMALL LETTER FINAL SIGMA
03C3 F3 GREEK SMALL LETTER SIGMA
03C4 F4 GREEK SMALL LETTER TAU
03C5 F5 GREEK SMALL LETTER UPSILON
03C6 F6 GREEK SMALL LETTER PHI
03C7 F7 GREEK SMALL LETTER CHI
03C8 F8 GREEK SMALL LETTER PSI
03C9 F9 GREEK SMALL LETTER OMEGA
03CA FA GREEK SMALL LETTER IOTA DIAERESIS
03CB FB GREEK SMALL LETTER UPSILON DIAERESIS
03CC FC GREEK SMALL LETTER OMICRON TONOS
03CD FD GREEK SMALL LETTER UPSILON TONOS
03CE FE GREEK SMALL LETTER OMEGA TONOS
03F3 B4 GREEK SPACING TONOS
03F4 B5 GREEK SPACING DIAERESIS TONOS
0401 A1 CYRILLIC CAPITAL LETTER IO
0402 A2 CYRILLIC CAPITAL LETTER DJE
0403 A3 CYRILLIC CAPITAL LETTER GJE
0404 A4 CYRILLIC CAPITAL LETTER E
0405 A5 CYRILLIC CAPITAL LETTER DZE
0406 A6 CYRILLIC CAPITAL LETTER I
0407 A7 CYRILLIC CAPITAL LETTER YI
0408 A8 CYRILLIC CAPITAL LETTER JE
0409 A9 CYRILLIC CAPITAL LETTER LJE
040A AA CYRILLIC CAPITAL LETTER NJE
040B AB CYRILLIC CAPITAL LETTER TSHE
040C AC CYRILLIC CAPITAL LETTER KJE
040E AE CYRILLIC CAPITAL LETTER SHORT U
040F AF CYRILLIC CAPITAL LETTER DZHE
0410 B0 CYRILLIC CAPITAL LETTER A
0411 B1 CYRILLIC CAPITAL LETTER BE
0412 B2 CYRILLIC CAPITAL LETTER VE
0413 B3 CYRILLIC CAPITAL LETTER GE
0414 B4 CYRILLIC CAPITAL LETTER DE
0415 B5 CYRILLIC CAPITAL LETTER IE
0416 B6 CYRILLIC CAPITAL LETTER ZHE
0417 B7 CYRILLIC CAPITAL LETTER ZE
0418 B8 CYRILLIC CAPITAL LETTER II
0419 B9 CYRILLIC CAPITAL LETTER SHORT II
041A BA CYRILLIC CAPITAL LETTER KA
041B BB CYRILLIC CAPITAL LETTER EL
041C BC CYRILLIC CAPITAL LETTER EM
041D BD CYRILLIC CAPITAL LETTER EN
041E BE CYRILLIC CAPITAL LETTER O
041F BF CYRILLIC CAPITAL LETTER PE
0420 C0 CYRILLIC CAPITAL LETTER ER
0421 C1 CYRILLIC CAPITAL LETTER ES
0422 C2 CYRILLIC CAPITAL LETTER TE
0423 C3 CYRILLIC CAPITAL LETTER U
0424 C4 CYRILLIC CAPITAL LETTER EF
0425 C5 CYRILLIC CAPITAL LETTER KHA
0426 C6 CYRILLIC CAPITAL LETTER TSE
0427 C7 CYRILLIC CAPITAL LETTER CHE
0428 C8 CYRILLIC CAPITAL LETTER SHA
0429 C9 CYRILLIC CAPITAL LETTER SHCHA
042A CA CYRILLIC CAPITAL LETTER HARD SIGN
042B CB CYRILLIC CAPITAL LETTER YERI
042C CC CYRILLIC CAPITAL LETTER SOFT SIGN
042D CD CYRILLIC CAPITAL LETTER REVERSED E
042E CE CYRILLIC CAPITAL LETTER IU
042F CF CYRILLIC CAPITAL LETTER IA
0430 D0 CYRILLIC SMALL LETTER A
0431 D1 CYRILLIC SMALL LETTER BE
0432 D2 CYRILLIC SMALL LETTER VE
0433 D3 CYRILLIC SMALL LETTER GE
0434 D4 CYRILLIC SMALL LETTER DE
0435 D5 CYRILLIC SMALL LETTER IE
0436 D6 CYRILLIC SMALL LETTER ZHE
0437 D7 CYRILLIC SMALL LETTER ZE
0438 D8 CYRILLIC SMALL LETTER II
0439 D9 CYRILLIC SMALL LETTER SHORT II
043A DA CYRILLIC SMALL LETTER KA
043B DB CYRILLIC SMALL LETTER EL
043C DC CYRILLIC SMALL LETTER EM
043D DD CYRILLIC SMALL LETTER EN
043E DE CYRILLIC SMALL LETTER O
043F DF CYRILLIC SMALL LETTER PE
0440 E0 CYRILLIC SMALL LETTER ER
0441 E1 CYRILLIC SMALL LETTER ES
0442 E2 CYRILLIC SMALL LETTER TE
0443 E3 CYRILLIC SMALL LETTER U
0444 E4 CYRILLIC SMALL LETTER EF
0445 E5 CYRILLIC SMALL LETTER KHA
0446 E6 CYRILLIC SMALL LETTER TSE
0447 E7 CYRILLIC SMALL LETTER CHE
0448 E8 CYRILLIC SMALL LETTER SHA
0449 E9 CYRILLIC SMALL LETTER SHCHA
044A EA CYRILLIC SMALL LETTER HARD SIGN
044B EB CYRILLIC SMALL LETTER YERI
044C EC CYRILLIC SMALL LETTER SOFT SIGN
044D ED CYRILLIC SMALL LETTER REVERSED E
044E EE CYRILLIC SMALL LETTER IU
044F EF CYRILLIC SMALL LETTER IA
0451 F1 CYRILLIC SMALL LETTER IO
0452 F2 CYRILLIC SMALL LETTER DJE
0453 F3 CYRILLIC SMALL LETTER GJE
0454 F4 CYRILLIC SMALL LETTER E
0455 F5 CYRILLIC SMALL LETTER DZE
0456 F6 CYRILLIC SMALL LETTER I
0457 F7 CYRILLIC SMALL LETTER YI
0458 F8 CYRILLIC SMALL LETTER JE
0459 F9 CYRILLIC SMALL LETTER LJE
045A FA CYRILLIC SMALL LETTER NJE
045B FB CYRILLIC SMALL LETTER TSHE
045C FC CYRILLIC SMALL LETTER KJE
045E FE CYRILLIC SMALL LETTER SHORT U
045F FF CYRILLIC SMALL LETTER DZHE
05D0 E0 HEBREW LETTER ALEF
05D1 E1 HEBREW LETTER BET
05D2 E2 HEBREW LETTER GIMEL
05D3 E3 HEBREW LETTER DALET
05D4 E4 HEBREW LETTER HE
05D5 E5 HEBREW LETTER VAV
05D6 E6 HEBREW LETTER ZAYIN
05D7 E7 HEBREW LETTER HET
05D8 E8 HEBREW LETTER TET
05D9 E9 HEBREW LETTER YOD
05DA EA HEBREW LETTER FINAL KAF
05DB EB HEBREW LETTER KAF
05DC EC HEBREW LETTER LAMED
05DD ED HEBREW LETTER FINAL MEM
05DE EE HEBREW LETTER MEM
05DF EF HEBREW LETTER FINAL NUN
05E0 F0 HEBREW LETTER NUN
05E1 F1 HEBREW LETTER SAMEKH
05E2 F2 HEBREW LETTER AYIN
05E3 F3 HEBREW LETTER FINAL PE
05E4 F4 HEBREW LETTER PE
05E5 F5 HEBREW LETTER FINAL TSADI
05E6 F6 HEBREW LETTER TSADI
05E7 F7 HEBREW LETTER QOF
05E8 F8 HEBREW LETTER RESH
05E9 F9 HEBREW LETTER SHIN
05EA FA HEBREW LETTER TAV
060C AC ARABIC COMMA
061B BB ARABIC SEMICOLON
061F BF ARABIC QUESTION MARK
0621 C1 ARABIC LETTER HAMZAH
0622 C2 ARABIC LETTER MADDAH ON ALEF
0623 C3 ARABIC LETTER HAMZAH ON ALEF
0624 C4 ARABIC LETTER HAMZAH ON WAW
0625 C5 ARABIC LETTER HAMZAH UNDER ALEF
0626 C6 ARABIC LETTER HAMZAH ON YA
0627 C7 ARABIC LETTER ALEF
0628 C8 ARABIC LETTER BAA
0629 C9 ARABIC LETTER TAA MARBUTAH
062A CA ARABIC LETTER TAA
062B CB ARABIC LETTER THAA
062C CC ARABIC LETTER JEEM
062D CD ARABIC LETTER HAA
062E CE ARABIC LETTER KHAA
062F CF ARABIC LETTER DAL
0630 D0 ARABIC LETTER THAL
0631 D1 ARABIC LETTER RA
0632 D2 ARABIC LETTER ZAIN
0633 D3 ARABIC LETTER SEEN
0634 D4 ARABIC LETTER SHEEN
0635 D5 ARABIC LETTER SAD
0636 D6 ARABIC LETTER DAD
0637 D7 ARABIC LETTER TAH
0638 D8 ARABIC LETTER DHAH
0639 D9 ARABIC LETTER AIN
063A DA ARABIC LETTER GHAIN
0640 E0 ARABIC TATWEEL
0641 E1 ARABIC LETTER FA
0642 E2 ARABIC LETTER QAF
0643 E3 ARABIC LETTER CAF
0644 E4 ARABIC LETTER LAM
0645 E5 ARABIC LETTER MEEM
0646 E6 ARABIC LETTER NOON
0647 E7 ARABIC LETTER HA
0648 E8 ARABIC LETTER WAW
0649 E9 ARABIC LETTER ALEF MAQSURAH
064A EA ARABIC LETTER YA
064B EB ARABIC FATHATAN
064C EC ARABIC DAMMATAN
064D ED ARABIC KASRATAN
064E EE ARABIC FATHAH
064F EF ARABIC DAMMAH
0650 F0 ARABIC KASRAH
0651 F1 ARABIC SHADDAH
0652 F2 ARABIC SUKUN
0660 30 ARABIC-INDIC DIGIT ZERO
0661 31 ARABIC-INDIC DIGIT ONE
0662 32 ARABIC-INDIC DIGIT TWO
0663 33 ARABIC-INDIC DIGIT THREE
0664 34 ARABIC-INDIC DIGIT FOUR
0665 35 ARABIC-INDIC DIGIT FIVE
0666 36 ARABIC-INDIC DIGIT SIX
0667 37 ARABIC-INDIC DIGIT SEVEN
0668 38 ARABIC-INDIC DIGIT EIGHT
0669 39 ARABIC-INDIC DIGIT NINE
2015 AF QUOTATION DASH
2017 DF SPACING DOUBLE UNDERSCORE
203E AF SPACING OVERSCORE
2116 F0 NUMERO

192
src/cmd/tcs/ex2.utf Normal file
View file

@ -0,0 +1,192 @@
From dmr Thu Jan 30 17:00:03 EST 1992
誠に申し訳ありませんが、MH front end はあと1週間だけ待って下さい。
新しい xterm のために vtwin の変更が必要となって、それにちょっと
手間取ってしまいました。まだもう1つ直したい bug があるのですが
もう今日は時間がありません。
拝啓 新緑の候、ますますご清祥のこととお喜び申し上げます。
さて、斎藤信男先生は4月1日をもちまして、慶応義塾大学理工学部教
授に御昇任なられました。そこで、日頃斎藤先生にお世話になっている
私達が斎藤先生に お祝いを申し上げるためのささやかな 祝宴を企画致
しました。当日は 斎藤研究室 OB/OG の方々、斎藤研究室現役の学生、
また、斎藤先生ゆかりの方々が集まり、斎藤先生を囲んで楽しいひとと
きを過ごしたいと考えております。ご家族、御友人おさそいあわせのう
え御列席下さるようお願い申し上げます。
おそれいりますが、ご出席の確認を下記連絡先に電話または電子メール
にてご連絡下さるようお願い申し上げます。
敬具
「斎藤信男教授を囲む会」
日時: 昭和62年4月24日(金) 18:00 より
場所: 新橋第一ホテル「レストランクラレット」
電話;  03-501-4411
会費: 1万5千円 (当日記念品代1口5千円を別に御用意下さい。)
ただし、学生料金は別途設定してありますので御安心!
連絡先:中村 修 osamu@keio.junet
電話 044-63-9137 (斎藤研究室直通)
電話 03-704-4715 (中村自宅)
幹事代表 村井 純、 中村 修
拝啓 新緑の候、ますますご清祥のこととお喜び申し上げます。
さて、斎藤信男先生は4月1日をもちまして、慶応義塾大学理工学部教
授に御昇任なられました。そこで、日頃斎藤先生にお世話になっている
私達が斎藤先生に お祝いを申し上げるためのささやかな 祝宴を企画致
しました。当日は 斎藤研究室 OB/OG の方々、斎藤研究室現役の学生、
また、斎藤先生ゆかりの方々が集まり、斎藤先生を囲んで楽しいひとと
きを過ごしたいと考えております。ご家族、御友人おさそいあわせのう
え御列席下さるようお願い申し上げます。
おそれいりますが、ご出席の確認を下記連絡先に電話または電子メール
にてご連絡下さるようお願い申し上げます。
敬具
「斎藤信男教授を囲む会」
日時: 昭和62年4月24日(金) 18:00 より
場所: 新橋第一ホテル「レストランクラレット」
電話;  03-501-4411
会費: 1万5千円 (当日記念品代1口5千円を別に御用意下さい。)
ただし、学生料金は別途設定してありますので御安心!
連絡先:中村 修 osamu@keio.junet
電話 044-63-9137 (斎藤研究室直通)
電話 03-704-4715 (中村自宅)
幹事代表 村井 純、 中村 修
JUS幹事の皆様:
4月10日の幹事会でお話した、次のような講演についての件ですが、
発内容:Macintosh IIへのUNIXの移植
発 者:米国UniSoftのエンジニア
発時間:1時間(幹事会において決まった時間です)
発当人からABSTRACTが届きました。このような内容での話でよけれ
ば、来日するがどうだろう?との問い合わせがあったのですが、皆様いかがでしょうか?
皆様の御意見を伺ったうえで、本当に来てもらうかどうか当人に連絡したいと思います。
(交通費、宿泊費などはJUSから出す必要はありません)
御返答、よろしくお願いいたします。
DCL 坂本 文
JUS幹事の皆様:
4月10日の幹事会でお話した、次のような講演についての件ですが、
発内容:Macintosh IIへのUNIXの移植
発 者:米国UniSoftのエンジニア
発時間:1時間(幹事会において決まった時間です)
発当人からABSTRACTが届きました。このような内容での話でよけれ
ば、来日するがどうだろう?との問い合わせがあったのですが、皆様いかがでしょうか?
皆様の御意見を伺ったうえで、本当に来てもらうかどうか当人に連絡したいと思います。
(交通費、宿泊費などはJUSから出す必要はありません)
御返答、よろしくお願いいたします。
DCL 坂本 文
次回のjus幹事会は下記の場所で行います。
日時 5/8(金)午後6時
場所 (株)アスキ―、FFFビル、7F役員会議室
地図
至赤坂
国道246号(青山通り)
| |*(地下鉄表参道B3出口)
| | (ラ―メン屋)
紀ノ国屋| |出光GS 天下一
| | 住 大 *
| | 友 仁
| | 南 堂
至渋谷 青 ビ ビ
山 ル ル
(1)地下鉄表参道駅下車、B3の出口を出る。
(2)青山通りを渋谷方面へ歩く
(3)初めての信号(角が出光GS)を右へ曲る
(4)約500M歩き(信号4つ目)、T字路の交差点の右側
(5)FFFビルの7F
PS.当日14:40着の便で成田に帰って来ますので、少し遅れるかもしれません
が先に始めて下さい。
この間の集りでマーク・シートの読み取りのsoftの話題があったと思うので
すが「インタフェース月号」の新製品紹介の欄でANK character の読み取りの
softの紹介があったように思います。
ただ,その雑誌がいま,手元にないので詳しくはわかりませんが,調べてみ
ます。
一部の人は知っていると思いますが,現在 rmap のPD化を進めています.
余分な機能をそぎ落し,一通り動くようになりました.あと,2,3
新たな機能を追加する予定ですが,問題はその前提となる rwhod にあります.
御存知のように rwhod はつながるマシンの数が増えると,急激に network 及び
CPU を食いはじめますまたrouting の機能がないため複数のネットワークが
接続されているような環境ではやはり問題です東工大ではいままでgateway
となるマシンの rwhod に手をいれて routing をするようにしていましたが,
その場しのぎのいい加減なやり方だったので,4月にネットワークの接続形態が
変って以来,2重に packet を流していたことが判明しました.昨日急いで
直しましたが,それまでネットワークは collision の嵐だった訳です.
たかだか30台のネットワークでこの有様ですから,何百,何千という
本格的ネットワークを考えると単純に routing を行う今の方法は非現実的です.
そこで,いくつかのアイディアを加藤君と考えました.
1. broadcast packet は止めて,NFSを利用し /usr/spool/rwho をできる限り
 共有する.どうしても必要なところは point-to-point で routing を行う.
2. routing する場合に独自のプロトコルにより複数のホストの情報を
1 packet で送る.
3. on demand で必要な時だけ他のマシンに対し情報を要求する.
トリガーは,例えば誰かが rmap でそのマシンを含むページを表示しようと
 した時とする.
4. どうせ,そういう情報が必要なのは phone をかけたい時ぐらいだから,
 むしろphone を改造して phoned が broadcasting や routing をしながら,
 特定のユーザがどこにいるか探し回るようにする.
さて,そこで皆さんの意見を聞きたいと思います.どうするのが一番良いでしょうか.
今考えているのは1, 2 の機能を持った public domain rwhod を作るといった
ところですが,果してそんなことをするのは意味があるのか.4を実現すれば事実上
rmap はいらなくなるんじゃないのか.有益な議論をお待ちしています.
私は前の mail で次ぎのようなことを書きました.
> 御存知のように rwhod はつながるマシンの数が増えると,急激に network 及び
> CPU を食いはじめますまたrouting の機能がないため複数のネットワークが
> 接続されているような環境ではやはり問題です東工大ではいままでgateway
> となるマシンの rwhod に手をいれて routing をするようにしていましたが,
> ....,何百,何千という
> 本格的ネットワークを考えると単純に routing を行う今の方法は非現実的です.
> そこで,いくつかのアイディアを加藤君と考えました.
> 1. broadcast packet は止めて,NFSを利用し /usr/spool/rwho をできる限り
>  共有する.どうしても必要なところは point-to-point で routing を行う.
> 2. routing する場合に独自のプロトコルにより複数のホストの情報を
> 1 packet で送る.
> 今考えているのは1, 2 の機能を持った public domain rwhod を作るといった
> ところですが,果してそんなことをするのは意味があるのか....
今考えていることを,もう少し具体的に説明すると,
既存の rwhod は自分のマシンの network configuration を見て
自分の属するサブネットワークにはすべて broadcasting で,
point-to-point のリンクにはその相手先に対し,自分のマシンの情報のみを
流しまています.
私が手を入れた rwhod はそれらに加えて,他のマシンから来た
情報を自分の spool に書き込むと同時に,リストとして貯め込んでおき,
自分の情報を流す時に同時に,個々のマシンの属するネットワーク以外の
すべてのリンクにその情報をリレーするというものです.
しかし,この方法だといくら broadcast packet を使ったところで,
論理的にはネットワーク全体が完全グラフをなすように packet を
流すことになりますし,しかも普段はそういう情報を必要としない
場合が多い訳ですから,明らかに供給過剰です.で,これを少しでも
軽減することができれば,と考えている訳です.
新しい rwhod は,様々なネットワーク上の制約を盛り込めるように,
例えば /etc/rwhod.rc のようなファイルからリレーのための configuration
を読み込むようにするといいでしょう.そのファイルの中に書かれるべき
項目としては,次ぎのようなものが考えられます.
1. 自分のマシンの情報をどのマシン,またはどのネットワークに対して
  送信するか.また,それをローカルファイルに格納するか否か.
2. 他のマシンの情報をどのマシン,またはどのネットワークに対して
  リレーするか.それは packet として受信されるべきものなのか,
  NFSによってそのマシンの rwhod が書き込んだファイルを
  読みにいくのか.前者の場合には,さらにその情報をローカル
  ファイルに格納するか否か.
3. 1, 2 は何秒間隔で行うのか.
これらに加え,さらに通常は packet を流さずに必要な時だけ,
rwhod が他のマシンに対し情報を要求するという機能を付け加えるのも
いいかもしれません.このためには,/etc/rwhod.rc の中に
4. あるマシンの情報に対する要求があった時にどのマシンに
  対して問い合わせを行うか.
という項目を付け加えるべきでしょう1,2,4 は実際には統一した
フォーマットで記述するのがいいかもしれません.
もし,こういう on demand 型のサービスを取り入れると当然 rwho, ruptime, rmap
といった client 側にも変更が必要になります.恐らくあるマシンの情報を得るには,
といったようなライブラリ関数を用意することになるでしょう.
この関数は自分のマシンの rwhod に対してそういう request を
行い response を受け取るという単純なものにするのがいいと
思います.一方その request を受け取った rwhod はスプールを
見てそれが充分新しいものであれば,そこから読み取り,そうでなければ
rwhod.rc に書かれたマシンに対し問い合わせることになるでしょう.
いや,もうそこまでするのだったら,いっそスプールは全廃して
rwhod が on core で情報を管理した方がいいかもしれません.
というようなところが今まで考えたところですが,そこでこの前にも書いた
疑問に戻ります.果してこんなことをする意味があるのだろうか?
phone を hack すれば,それで問題は解決するのではないか?
何か意見を言ってください.お願いします.
私はこれを今度の meeting で議論してもらいたいとは思っていません.
あくまで mail で意見を聞かせて下さい.そうすることで,
議論がたまたま meeting に出席した人の中だけでの閉じたもので
終るということがなくなると思いますから.
ところでこの mailing list はいつまで東工大で管理されているのですか.
u-tokyo に移した方がいいのではないのですか?

15
src/cmd/tcs/ex3.utf Normal file
View file

@ -0,0 +1,15 @@
Привет.
Так лучше? :-) Что касается Rob Pike, я просто не хочу его
беспокоить, но он может быть уверен, что еще услышит от меня
ругательства на Plan 9 - когда я прочту статьи :-) :-) :-)
Кстати, я мог бы прислать русскую версию nroff (руки не дошли
сделать troff с кириллицей). Что касается awk, то для меня до сих
пор остается загадкой почему никто не сделал нормальную трассировку
(tracing) в awk - это сделало бы отладку (debugging) в сто раз
проще.
Ну ладно, всем привет.
Вадим

109
src/cmd/tcs/ex4.utf Normal file
View file

@ -0,0 +1,109 @@
2-ая КОНФЕРЕНЦИЯ SUUG
С 23 по 28 сентября 1991 года в городе Владимире Совет-
ская ассоциация пользователей операционной системы UNIX
(SUUG) проводит 2-ую ежегодную конференцию. На конференции
предполагается рассмотреть текущее состояние ОС UNIX и перспективные
направления ее развития как в СССР, так и за рубежом, воп-
росы разработки прикладного программного обеспечения в среде
UNIX. На конференцию приглашены ряд ведущих специалистов из
Европейской ассоциации пользователей UNIX (EurOpen) и ассоци-
ации usenix (США).
В рамках конференции будет проведено общее собрание
Советской ассоциации пользователей UNIX.
УЧАСТИЕ В КОНФЕРЕНЦИИ
Участие в конференции возможно в качестве докладчиков и
слушателей. Кроме того, в ходе конференции будут проведены
панельные дискуссии по наиболее интересным темам. Предус-
мотрены условия для продуктивного общения специалистов.
Тезисы всех принятых на конференцию докладов к ее началу
будут опубликованы.
Участники конференции могут провести демонстрацию на
ЭВМ своих разработок, приниматся заявки на рекламу.
Конференция будет проводиться в гостинице "Клязьма" г.
Владимира. Предполагаемое количество участников 120 чело-
век. Регистрационный взнос - 400 руб., для членов SUUG -
350 руб. с человека. В регистрационный взнос входят все
орграсходы, плата за проживание в гостинице и трехразовое
питание в ресторане при гостинице.
Для участия в конференции необходимо до 15 мая 1991 г.
выслать по адресу организационного комитета заявку по прила-
гаемому образцу, для докладчиков - тезисы докладов объемом
до 2 страниц в виде, пригодном для копирования. Программный
комитет предполагает наиболее интересные доклады опублико-
вать целиком. Заявки и тезисы докладов можно также присылать
электронной почтой.
В случае нескольких авторов доклада, приглашен может
быть, как правило, только один. Подтверждение Вашего учас-
тия будет выслано до 1 сентября 1991 г.
ОРГАНИЗАЦИОННЫЙ КОМИТЕТ
Г.П.Остапенко
Э.Мухутдинова
ИНЭУМ, Москва, ГСП-1, Вавилова, 24,
Советская ассоциация пользователей ОС UNIX (SUUG)
тел: (095) 939-00-14, 939-00-49
ПРОГРАММНЫЙ КОМИТЕТ
П.Л.Брусиловский
МЦНТИ, 125252 Москва ул.Куусинена 21б.
тел: (095) 198-70-55
e-mail: <plb@plb.icsti.su>
А.Л.Фридман
ИПИАН, 177900 Москва ул. Вавилова 30/6.
тел: (095) 930-05-16
e-mail: <af@alf.public.su>
Дальнейшие мероприятия SUUG: семинар по прикладным сис-
темам в среде UNIX (декабрь, Москва, МЦНТИ); UNIX-шоу - выс-
тавка аппаратуры и программных средств, представления фирм
(октябрь-ноябрь, Москва). Дополнительная информация будет
выслана в ближайшее время.
З А Я В К А
на участие во 2-ой конференции
Я хотел бы принять участие во 2-ой ежегодной конферен-
ции SUUG в качестве: докладчика / слушателя / участника дис-
скусии.
Фамилия, имя, отчество, ученое звание:
..........................................................
..........................................................
Место работы:
..........................................................
..........................................................
Должность:
..........................................................
Название доклада:
..........................................................
..........................................................
Тема дискуссии:
..........................................................
..........................................................
Почтовый адрес:
..........................................................
Телефон:...................E-mail..........................
Членство в SUUG: организация-член SUUG
индивидуальный член
прошу выслать материалы о вступлении
нет
Основная сфера деятельности моей организации:
..........................................................
Мои основные интересы лежат в области:
..........................................................
Хотите ли Вы продемонстрировать свои разработки? да/нет
Необходимая техника.......................................
..........................................................

50
src/cmd/tcs/ex5.utf Normal file
View file

@ -0,0 +1,50 @@
.tr -\(hy
.TL
Hello World
.br
or
.br
Καλημέρα κόσμε
.br
or
.br
こんにちは 世界
.AU
Rob Pike
Ken Thompson
.AI
.MH
.AB
Plan 9 from Bell Labs has recently been converted from ASCII
to an ASCII-compatible variant of Unicode, a 16-bit character set.
In this paper we explain the reasons for the change,
describe the character set and representation we chose,
and present the programming models and software changes
that support the new text format.
Although we stopped short of full internationalization\(emfor
example, system error messages are in Unixese, not Japanese\(emwe
believe Plan 9 is the first system to treat the representation
of all major languages on a uniform, equal footing throughout all its
software.
.AE
.SH
Introduction
.PP
The world is multilingual but most computer systems
are based on English and ASCII or worse.
The pending release of Plan 9 [Pike90], a new distributed operating
system from Bell Laboratories, seemed a good occasion
to correct this chauvinism.
It is easier to make such deep changes when building new systems than
by retrofitting old ones.
.PP
The ANSI C standard [ANSIC] contains some guidance on the matter of
`wide' and `multi-byte' characters but falls far short of
solving the myriad associated problems.
We could find no literature on how to convert a
.I system
to larger character sets, although some individual
.I programs
have been converted.
This paper reports what we discovered as we
explored the problem of representing multilingual

145
src/cmd/tcs/ex6.utf Normal file
View file

@ -0,0 +1,145 @@
簫肓ο汗板正ω
﹁﹁牴喃亭樅苔待于廷把閏 ☐淚誓毗
半搽碌士外征w莽尹夔花,╔簫肓╝巨城Γㄤ外Εο閏籀征絆祖傳沼.Ρ<>
拖子稀征ㄓ世ΞΡ芋˙ㄓ丙閏,科志戊闕算褕蜥Ε希夔缺征腎坏ㄒ斐,先散咒工
猜碌Γw紫╔久迴證決Ε切新掖闕欣征冶肓╝.半Ε希叱副ˎ搽諭ˎ舨窪汗菅Υ
油刨戊水件亭揭Υ征醜夔,ㄒ縫郭堝Ε希夔缺征喃巳決唉才腎彪,脈戊丕w斥淑
孓Υ╔球擱╝ㄖ販凹 .
先齊釗ㄓ舨缶菅征Εν<CE95>命,Ε希夔缺科志征嘰保ㄤ芋閏籀征籀鮭,叼社弟
呶邃謙; 硿苔楮ˎ扒錘荐Η亭宗汗; 楹橘五決盔汎仙<E6B18E>吏槳丫製咄決于廷揖,產
ㄈ都Υ籀希<EFBFBD>揩,先半╔簫肓╝征ο河都Σ,刨戊共丫水件惕缺.
z芋ΕοΡ斥閏籀β保半牽皇荐槳Σ子稀.佐鬆征亭迆ㄆ共莊夷ㄈ專間禪取
╔惋半丙舨亭宗簫肓ˎ搽諭簫肓ˎ念閏簫肓╝,亮╔城臣舨亭宗搽諭決念閏簫肓
征痣w伯簫肓惱虹申衝神╝,枝巨Γㄆ共莊夷征乃鮭.
半搽諭亭揭ㄓ,ㄣ尋季及ΘΘ外Σ刃外嘰肓征宗您賬腰亭揭,尺征保莊夷ㄓ
例滿╔城Γ唔砠河訪外搽諭碌儀橢宵Σ志征ㄒ簫肓包挫╝.申亭宗偎侵<E5818E>炳,砠
Γ都丫ㄒ苟淚戊Ε丕漳球缺腕決弋皇茫門征亭宗Θ戾才,濟都丫絲弟窮決鴛含新
掖,唔砠慘參,偯交詖亭揖,牽皇半˙ㄓ丙閏花ㄈˊ刖征冶肓,誹唔郁莊睥保ㄓ
世甲認抓尺河凶炳嚀舨窪寺詫決舨ㄩ佗炬寺雜征闕濮借扯,仆絲烏叩由瓜皂人妨
丫寺詫.
旦才,城匠牽斥閏籀╔丫腕ρ╝,半閏籀子稀色士外切睬麥窗惱缺簣凹睬缺
歪伶子稀Εο躬牠嶇芣閏籀征既頹窄祉砠丫Εο,人<>色鋒石抓製莽做圾褒友征
敖諂瓷瓷昆澹取訛滌丫亭更,產保╔Σ祠祁╝,繭夷Εο刁拗決亭更牠缸ㄒ邕惕
缺.w冬陰坏征牴喃亭更牠缸迪弋切,工桌刷芾惱坏杉抓洎抆,斕尋牽序產保呸
郝協簫肓征ο科沼.
闕濮濟歪待ㄓ世算褕蜥
牽壽祖臥歪伶簫肓征拗惋,ㄒ終保˙弋花亭競郾郾婪蒞征滄區偎侵.先牴喃
ο褒庇咸怒吱ㄓ<EFBFBD>怒吱缸盔<EFBFBD>磴漬城,ㄓ世亭競戊胸鮭,岔枋工包˙弋,申士外
咄際粱夔裯麴何ο.几阿丫,ㄓ世都丫╔簫肓縛畋<E7958B>╝保半士外ΞΔ<CE9E>咄際粱
夔ㄖ窪,例人牽唧<E789BD>算褕蜥甲認念閏乃敬半ㄓ舨征惱虹胸鮭.盔<>磴滿: ╔几疫
戊腆冬漬城,念閏乃敬半咄際丐參Γ,惋半工戊窮ㄓ舨.╝申惋借舨紙砝征搽諭
怒吱含敖沼w涪迴槳ㄓ舨歪惱虹珞志,仆絲歪戊昆麥征亭宗念閏簫肓醒詫.
<>磴漬城佐鬆征ㄆ共莊夷保貊夕越洮βㄒ汎唳芣痣,扼灌拗惋半搽諭<E690BD>
,枝保城伶簫肓ο汗申鏃姘戟麥吊島.盔<>磴滿: ╔牽保w父板只ˎ越洮征莊夷
,仙借<E4BB99>俑Γ算褕蜥賂石ㄇ征簫肓決叱丙刨戊去ο<CEBF>.╝
半牽壽河都Σ,ㄓ舨算褕蜥半亭宗Υ岔刨戊水件鈕征興夔偎侵,工保季及久
迴詖亭ˎ專砠慘參決鴛織新掖揖由<EFBFBD>姍,豳人洮臾證半Ε<CE95>尺ㄓ征祁杳.例人
,˙ㄓ丙閏都丫Γ歪久迴證新鴛織,訶瓷歪常Η荐蜥,久迴姍抆摺證ㄩ嘟媼; 申
亭迆莊夷β迴槳久迴詖亭,專砠慘參,外拖ㄈ稀甸ˊ刖w含丘削樺涿永ο修,睫
祖w蜥征戊紜鯛睥瓷昆淑炬謙,人<>杭唉弈凰昌修科弈昆瘩交亭氫<E4BAAD>揖,產半Ε
ο閏籀子稀河漳球Γ鴨菅.
牽序偎侵產ㄒ保鈕瞭希帖.士外<E5A496>迅亭宗汗β猜碌Γ歪秘╔氏希╝,先
巨俸叼件力Ε檮嘔; 例人借希湃樅缸鞋ρ窈枝滿: ╔ㄓ世戊序希保ㄒ貴秘征,叼
切乃ˎ劻競; 戊征保貴秘申秘ㄒ抓征,迤亞枝階城戊洎,絆去保槳賬Σ忠覲<E5BFA0>
ρ征嚇昌.╝亮賂Υ津亭宗偎侵桌囝簫肓Ε<E88293>,几漬城共及戊洎.
<>磴漬城,ㄓ世半ㄒ陰劻競Σ,β貴ㄒ丫ㄟ緊鈕<E7B78A>姍,牽序偎侵賂煤冶亭
宗寺汗岔ㄒ妞茲,先╔戊餡<E6888A>刨戊叩╝.几滿: ╔Ξ外佗炬ㄓ,ㄓ舨世悵證征絆
ο歙漢,保巨Γw皇ㄒ炬沖征證,w皇位歷征證.╝例人牽序初訛ㄓ世簑址腎敖
征偎侵昆熒志滿濟保戊及征.
ㄒ碌,把伊樅怫漬城,Υ津偎侵甸斜工保熔各共及,桌囝簫肓亭競征闕濮濟
半協搽諭,工歪搽諭叩,戟麥ㄩ念閏枝ㄒ閏丫惋ㄟ緊胸鮭.保人佐鬆征亭迆ㄆ共
莊夷ㄓβ滿: ╔亭宗簫肓決念閏簫肓保河都,搽諭簫肓保荐薯,翳俾抓迅,仆絲
粥ㄓ寨Μ色舨切搽諭辜Υ士.╝申˙ㄓ丙閏征ˊ刖,β迴槳╔色舨切搽諭辜Υ士
,臣疫術桌心協ㄒ參ㄖ仟.╝
亭宗偎侵俸及戊洎
牽斥Εο閏籀ㄣ尋迴槳宗您賬腰亭揭.例擋宗您賬腰,保眨賂碌儀搽諭痣交
征嶇頭決槳賬散鉍偎侵.也隹停抆念閏餡端伶ˎ茫門嶇征杳猴ˎ縛頭w栘久ㄆㄆ
閑決閨草瓢例,色鈕蓄瑙昌決友悵Μ槳劻戟晉瓷昂決專您ˊ尢揖揖.牽紫亭揭半
ΘΘ外胎<EFBFBD>于蕨委閏籀ㄓ函呢(樅怫擋滲斯筆半照斥閏籀ㄓ淑話競),眨賂滲斯筆
逞亭麥窗征久聿稀劻亭揭褕星搽諭碌儀,杳猴ο蓄,帖綵銅髡ˎ鄉檄ˎ蕭都ㄖ炤
弋珞申段肓示ㄤ.
佐鬆亭迆ㄆ共莊夷決殆牠乃水硿苔楮征搽諭莊夷,產迴槳璨尋宗您賬腰戊w
肓巨俸,先念閏端伶ㄣ尋檻ο,悵閑散鉍槳賬德遊,搽諭俸島負揖胸鮭ㄣ兮煤冶
,亮宗您賬腰ㄣ城尺Σ例端.先仙借,天協井莽屑爽決石士外Β<E5A496>人志ㄆ閑友悵
╔傲沆╝,猖鏘˙皇<CB99>列蓄昆宦示氟蓄昆,亮塘汗<E5A198>Π冶肓劻嚕瘓俾,蓄久杳猴.
賂Υ津征搽諭亭揭,盔<>磴漬城餡征<E9A4A1>冬保賂征,<2C>找保縛頭猜椅<E78C9C>炳筵巨
么,帖綵簫肓Σ志,狐井ㄓ列布Η怫友哄睫城簫肓.睪伺<E79DAA>炳,搽諭亭揭ㄓ牯歪
ㄖ紙Α惱虹睪閑,都祖睪紜悵泠征布檄綵決簫肓睪閑友悵瑙倖征綵剜決忘興,牽
產彷睪切友哄睫城簫肓.
旦才,半宗您賬腰碌揩ㄓ崗別楊花征痠鍚爻閑(士外畋痊ΓΡ瓜愈苔),友悵
ο洪淑洽拎匆睪伺,盔<>磴漬城璨尋閏戊Εㄒ飽,先睪伺夕人來杉牽檻ο征友悵
Μ,璨尋ㄒ閏╔惱睢╝,先戊荐六板稱,篌ㄒ朮; 亮砠枋戊石尋吧苜,囝沼念閏
ㄒ閏戊ο缺錢,申寨戍怫拎匆睪閑友悵俸恿β閏都祖.
ㄒ碌,賂痠鍚爻閑ο皓畋痊球巨征念閏俸咒,員閏褒砝搽諭含紜擦赳瘦順控
枝ㄒ叼旦閥騾,几漬城色丐閑ο洪滌抓睪伺,保色念閏仗輝睪伺<E79DAA>,申ΒΞ外刁
衹丫惋術閑祖計麥,睪伺絀Μ難難婪缺,彼咳ㄣ保餌比征胸鮭.
示協劻嚕杳猴,樅怫血湃宦去.盔<>磴枝漬城,牽保歪伶戟麥ㄩ征亭宗簫肓
,ㄋ肄Γ昆麥征搽諭惱虹亭揭,包城蓄久猴啼力ㄒ掬出唔焜散鉍,興照杉抓崗別
征痠鍚爻閑枸巡喘翌,友悵駐縛征淬泠,ㄒ鋒尊各搽諭俸島都祖,β尊各槳賬悵
閑散競,何洮歪征,保閏球巨猜椅丕臥丫惋.
希資Υ,ㄆ閑傲沆決井莽屑爽岔枋包嶇頭亭揭申褕星 (ΘΒ外淬啼<E6B7AC>搽諭碌
儀征ΘΘ外濟歪蓄久瓜<EFBFBD>ㄖΞ),申保唧<E4BF9D>悵泠散鉍摺唔焜散鉍ㄒ掬,先ㄆ共莊
夷ㄓ油兮戊都丫佗晾散鉍征扼灌偎侵,保宗鉼ㄒ宗六征秘姍.佐鬆半Ρ<E58D8A>父舨紙
砝丙灌閏籀Υㄈ都丫半Υ刃外征戟麥窗仆絲艮醜列蓄昆征汗炳,牽斕尋保歪╔叩
叩棡棡╝征亭宗甲認包挫芒去.
搽諭亭揭夕彆門戟麥簫肓
牽壽亭宗裯麴搽諭惱虹征陛妳筵力Ε賦誤,鞋ρ窈枝漬城,色搽諭亭揭亭宗
<EFBFBD>保去外志兮戊煤冶征胸鮭.賂搽諭亭揭征ㄒ仙賁圾,ㄒ桌及切乃決恢褒征冶揭
碌揩煤冶,申保ㄛ彥到巡,宦示及Γ半亭宗Υ仍畋賂<E7958B>征秘姍,球巨碌士訪外溧
搽諭亭揭<EFBFBD><EFBFBD>蹈蹈,去斥歙丐址輝.
几漬城,偯缺佗炬決嫡您搽諭絲ㄛ彥眩出,先碌邦ㄒ仙痺彈征Εㄛ彥唔朕賂
<EFBFBD>征寨Μ,抓Γㄤ<CE93>,璨尋興照保都丫佗炬征借枇,先ㄈ刨戊Ε<CE95>痣交佗炬,
樂泣璣樂枝半亭宗Υ戊胸鮭.例人,歪佗夔牽皇陛妳,濟保歪亭宗灌抆Υ佗炬.
旦才,鞋ρ窈璨尋β蹙仙瓷父搽諭亭揭,先油檮嘔Ε切賂╔碌訪外嶇<E5A496>ρ
戊件<EFBFBD>興.几漬城租叼亭迆征祁杳祖,Ε切夕做杉w珞納嶇學軒,先塘Ε切簽邕
牽皇岔ㄒ保城几疫憾墅吊征亭迆借,枝ㄒ做杉碌嶇<E7A28C>ρΓ. 几漬城尺河ㄓ舨征
搽諭虎虎絆端歪w皇戊祁杳征亭競,先惋帕油虎虎彥<E8998E>,牽保殉轅ㄖ氫.租某半
Θ弋ˎΘㄜ外痣交嶇頭,Ε切枝夕人做杉.ㄒ碌,盔<>磴油漬城,半尺河吏橘豌
征陛妳Σ,ㄒ鞭偕β邕偕,包城ㄓ舨惱虹<E683B1>五決搽諭奢氏列,ㄒ桌窮界歷<E7958C>輓駢
鈴.
餡隹申坏,鞋ρ窈漬城半ΔˎΡ外窗歪彆門搽諭Υ征拗炳簫肓ㄒ雜,搽諭Υ
<EFBFBD>夔缺決列蓄昆保絆╔簫破╝征秘姍,Ε切β夕人做杉.几漬城牽賂佐鬆亭競征
桌Μ申坏β保璀塘征,汎唳半戊敔駐Σ辜丫友輝.先几油阿丫,ㄓ舨亭競綁wˎ
把外枝閏逼娑神岱w惠,例人,樂β雜倖抓ㄓ世Π閏囝╔丕w斥石婀╝.
申盔<E794B3>磴沼任殆尺河征槳賬亭揭閏彆門弋ˎㄜ外,先麥窗閏戊<E9968F>蹈,忌叼半
塘外鄉檄駁犀邕征耗泠彷及沌麥碌花,唔焜Μ閏丕丫惋,杳猴衹閏半Σ刃外丕斥
布頭.几甸斜漬城仆絲歪戊w皇簫肓汗炳,ㄏ夕色搽諭寺雜遊遊唔煤.搽諭醒詫
簫肓,Ε切枝夕人做杉.几β彥杳半碌w叛借窗花,塘亭宗ˎ念閏決搽諭睫城簫
肓借,亭宗Υ衹閏劻嚕,<2C>姍保決郝河銖,王半Εο閏籀劻蜜坏樅.丁待取外
征Εο閏籀戊囝佗痣地!

89
src/cmd/tcs/font/bbits.c Normal file
View file

@ -0,0 +1,89 @@
#include <u.h>
#include <libc.h>
#include <libg.h>
#include <bio.h>
#include "hdr.h"
enum {
Charsperfont = 157,
Void1b = (0xC6-0xA2)*Charsperfont+0x3f,
Void1e = (0xC9-0xA2)*Charsperfont - 1 ,
};
Bitmap *
breadbits(char *file, int n, long *chars, int size, uchar *bits, int **doneptr)
{
Bitmap *bm;
Biobuf *bf;
int i, j, byt;
int nch;
long c;
uchar *b, *nbits;
int *done;
static uchar missing[32] = {0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
uchar buf[32];
bf = Bopen(file, OREAD);
if(bf == 0){
fprint(2, "%s: %s: %r\n", argv0, file);
exits("bitfile open error");
}
done = (int *)malloc(n*sizeof(done[0]));
if(done == 0){
fprint(2, "%s: malloc error (%d bytes)\n", argv0, n);
exits("malloc error");
}
*doneptr = done;
byt = size/8;
nch = 0;
for(i = 0; i < n; i++){
done[i] = 1;
nch++;
c = chars[i];
if((c >= Void1b) && (c <= Void1e)){
done[i] = 0;
nch--;
continue;
}
/* magic via presotto for calculating the seek */
j = c;
if(c >= 2*Charsperfont)
j += 294; /* baffling hole between A3 and A4 */
if(c > Void1e)
j -= 3*Charsperfont - 0x3F;
j *= byt*size; /* bytes per char */
j += 256; /* 256 front matter */
Bseek(bf, j, 0);
Bread(bf, buf, sizeof(missing));
if(memcmp(buf, missing, sizeof(missing)) == 0){
done[i] = 0;
nch--;
continue;
}
Bseek(bf, j, 0);
b = bits + i*byt;
for(j = 0; j < size; j++){ /* rows */
Bread(bf, b, byt);
b += n*byt;
}
}
nbits = (uchar *)malloc(nch*byt*size);
if(nbits == 0){
fprint(2, "%s: malloc error (%d bytes)\n", argv0, nch*byt);
exits("malloc error");
}
c = 0;
for(i = 0; i < n; i++)
if(done[i]){
for(j = 0; j < size; j++)
memmove(nbits+c*byt+j*nch*byt, bits+i*byt+j*n*byt, byt);
c++;
}
bm = balloc((Rectangle){(Point){0, 0}, (Point){nch*size, size}}, 0);
if(bm == 0){
fprint(2, "%s: balloc failure\n", argv0);
exits("balloc failure");
}
wrbitmap(bm, 0, size, nbits);
return(bm);
}

34
src/cmd/tcs/font/bmap.c Normal file
View file

@ -0,0 +1,34 @@
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <libg.h>
#include "hdr.h"
#include "../big5.h"
/*
map: put big5 for runes from..to into chars
*/
void
bmap(int from, int to, long *chars)
{
long *l, *ll;
int k, k1, n;
for(n = from; n <= to; n++)
chars[n-from] = 0;
for(l = tabbig5, ll = tabbig5+BIG5MAX; l < ll; l++)
if((*l >= from) && (*l <= to))
chars[*l-from] = l-tabbig5;
k = 0;
k1 = 0; /* not necessary; just shuts ken up */
for(n = from; n <= to; n++)
if(chars[n-from] == 0){
k++;
k1 = n;
}
if(k){
fprint(2, "%s: %d/%d chars found (missing include 0x%x=%d)\n", argv0, (to-from+1-k), to-from+1, k1, k1);
/*exits("map problem");/**/
}
}

34
src/cmd/tcs/font/font.c Normal file
View file

@ -0,0 +1,34 @@
#include <u.h>
#include <libc.h>
#include <libg.h>
#include <bio.h>
#include "hdr.h"
Subfont *
bf(int n, int size, Bitmap *b, int *done)
{
Fontchar *fc;
int i, j;
Subfont *f;
fc = (Fontchar *)malloc(sizeof(Fontchar)*(n+1));
if(fc == 0){
fprint(2, "%s: fontchar malloc(%d) failure\n", argv0, sizeof(Fontchar)*(n+1));
exits("fontchar malloc failure");
}
j = 0;
for(i = 0; i <= n; i++){
fc[i] = (Fontchar){j, 0, size, 0, size};
if(done[i])
j += size;
else
fc[i].width = 0;
}
fc[n] = (Fontchar){j, 0, size, 0, size};
f = subfalloc(n, size, size*7/8, fc, b, ~0, ~0);
if(f == 0){
fprint(2, "%s: falloc failure\n", argv0);
exits("falloc failure");
}
return(f);
}

137
src/cmd/tcs/font/gbits.c Normal file
View file

@ -0,0 +1,137 @@
#include <u.h>
#include <libc.h>
#include <libg.h>
#include <bio.h>
#include "hdr.h"
/*
this file reads bdf fonts. it is mapping dependent in that the ENCODING
field is font dependent.
*/
static char *field(Biobuf *, char *);
Bitmap *
greadbits(char *file, int n, long *chars, int size, uchar *bits, int **doneptr)
{
Bitmap *bm;
Biobuf *bf;
char *p, *s;
long kmin, kmax;
int i, j, byt;
int nch;
long c;
uchar *b;
int *done;
uchar *nbits;
char buf[1024]; /* big enough for one char! */
static int dig[256] = {
['0'] 0, ['1'] 1, ['2'] 2, ['3'] 3, ['4'] 4, ['5'] 5, ['6'] 6, ['7'] 7,
['8'] 8, ['9'] 9, ['a'] 10, ['b'] 11, ['c'] 12, ['d'] 13, ['e'] 14, ['f'] 15,
};
bf = Bopen(file, OREAD);
if(bf == 0){
fprint(2, "%s: %s: %r\n", argv0, file);
exits("bitfile open error");
}
done = (int *)malloc(n*sizeof(done[0]));
if(done == 0){
fprint(2, "%s: malloc error (%d bytes)\n", argv0, n);
exits("malloc error");
}
*doneptr = done;
memset(done, 0, n*sizeof(done[0]));
kmin = 65536;
kmax = 0;
for(i = 0; i < n; i++){
c = chars[i];
if(kmin > c)
kmin = c;
if(kmax < c)
kmax = c;
}
nch = 0;
byt = size/8;
for(;;){
while(s = Brdline(bf, '\n')){
if(strncmp(s, "STARTCHAR", 9) == 0)
break;
}
if(s == 0)
break;
s = field(bf, "ENCODING");
c = strtol(s, (char **)0, 10);
c = (c/256 - 0xA0)*100 + (c%256 - 0xA0);
field(bf, "BITMAP");
p = buf;
for(i = 0; i < size; i++){ /* rows */
if((s = Brdline(bf, '\n')) == 0){
exits("bad bdf");
}
memcpy(p, s, 2*byt);
p += 2*byt;
}
field(bf, "ENDCHAR");
if((c < kmin) || (c > kmax))
continue;
for(i = 0; i < n; i++)
if(c == chars[i]){
nch++;
done[i] = 1;
p = buf;
b = bits + i*byt;
for(i = 0; i < size; i++){ /* rows */
for(j = 0; j < byt; j++){
*b++ = (dig[*p]<<4) | dig[p[1]];
p += 2;
}
b += (n-1)*byt;
}
break;
}
}
nbits = (uchar *)malloc(nch*byt*size);
if(nbits == 0){
fprint(2, "%s: malloc error (%d bytes)\n", argv0, nch*byt);
exits("malloc error");
}
c = 0;
for(i = 0; i < n; i++)
if(done[i]){
for(j = 0; j < size; j++)
memmove(nbits+c*byt+j*nch*byt, bits+i*byt+j*n*byt, byt);
c++;
}
bm = balloc((Rectangle){(Point){0, 0}, (Point){nch*size, size}}, 0);
if(bm == 0){
fprint(2, "%s: balloc failure\n", argv0);
exits("balloc failure");
}
wrbitmap(bm, 0, size, nbits);
for(i = 0; i < n; i++)
if(done[i] == 0){
/*fprint(2, "char 0x%x (%d) not found\n", chars[i], chars[i]);/**/
}
return(bm);
}
static char *
field(Biobuf *bf, char *name)
{
char *s;
int n;
n = strlen(name);
while(s = Brdline(bf, '\n')){
if(strncmp(s, name, n) == 0)
return(s+n);
if(strncmp(s, "ENDCHAR", 7) == 0){
fprint(2, "%s: char missing %s field\n", argv0, name);
exits("bad bdf");
}
}
fprint(2, "%s: char missing %s field; unexpected EOF\n", argv0, name);
exits("bad bdf");
return(0);
}

34
src/cmd/tcs/font/gmap.c Normal file
View file

@ -0,0 +1,34 @@
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <libg.h>
#include "hdr.h"
#include "../gb.h"
/*
map: put gb for runes from..to into chars
*/
void
gmap(int from, int to, long *chars)
{
long *l, *ll;
int k, k1, n;
for(n = from; n <= to; n++)
chars[n-from] = 0;
for(l = tabgb, ll = tabgb+GBMAX; l < ll; l++)
if((*l >= from) && (*l <= to))
chars[*l-from] = l-tabgb;
k = 0;
k1 = 0; /* not necessary; just shuts ken up */
for(n = from; n <= to; n++)
if(chars[n-from] == 0){
k++;
k1 = n;
}
if(k){
fprint(2, "%s: %d/%d chars found (missing include 0x%x=%d)\n", argv0, (to-from+1-k), to-from+1, k1, k1);
/*exits("map problem");/**/
}
}

11
src/cmd/tcs/font/hdr.h Normal file
View file

@ -0,0 +1,11 @@
typedef Bitmap *readbitsfn(char *, int, long *, int, uchar *, int **);
typedef void mapfn(int, int, long *);
extern Bitmap *kreadbits(char *file, int nc, long *chars, int size, uchar *bits, int **);
extern void kmap(int from, int to, long *chars);
extern Bitmap *breadbits(char *file, int nc, long *chars, int size, uchar *bits, int **);
extern void bmap(int from, int to, long *chars);
extern Bitmap *greadbits(char *file, int nc, long *chars, int size, uchar *bits, int **);
extern void gmap(int from, int to, long *chars);
extern Bitmap *qreadbits(char *file, int nc, long *chars, int size, uchar *bits, int **);
extern Subfont *bf(int n, int size, Bitmap *b, int *);

93
src/cmd/tcs/font/kbits.c Normal file
View file

@ -0,0 +1,93 @@
#include <u.h>
#include <libc.h>
#include <libg.h>
#include <bio.h>
#include "hdr.h"
Bitmap *
kreadbits(char *file, int n, long *chars, int size, uchar *bits, int **doneptr)
{
Bitmap *bm;
Biobuf *bf;
char *p;
long kmin, kmax;
int i, j, byt;
int nch;
long c;
uchar *b;
int *done;
uchar *nbits;
static int dig[256] = {
['0'] 0, ['1'] 1, ['2'] 2, ['3'] 3, ['4'] 4, ['5'] 5, ['6'] 6, ['7'] 7,
['8'] 8, ['9'] 9, ['a'] 10, ['b'] 11, ['c'] 12, ['d'] 13, ['e'] 14, ['f'] 15,
};
bf = Bopen(file, OREAD);
if(bf == 0){
fprint(2, "%s: %s: %r\n", argv0, file);
exits("bitfile open error");
}
done = (int *)malloc(n*sizeof(done[0]));
if(done == 0){
fprint(2, "%s: malloc error (%d bytes)\n", argv0, n);
exits("malloc error");
}
*doneptr = done;
memset(done, 0, n*sizeof(done[0]));
kmin = 65536;
kmax = 0;
for(i = 0; i < n; i++){
c = chars[i];
if(kmin > c)
kmin = c;
if(kmax < c)
kmax = c;
}
nch = 0;
byt = size/8;
Brdline(bf, '\n'); /* header line 1 */
Brdline(bf, '\n'); /* header line 2 */
while(p = (char *)Brdline(bf, '\n')){
c = strtol(p+17, (char **)0, 10);
if((c < kmin) || (c > kmax))
continue;
for(i = 0; i < n; i++)
if(c == chars[i]){
nch++;
done[i] = 1;
p += 25;
b = bits + i*byt;
for(i = 0; i < size; i++){ /* rows */
for(j = 0; j < byt; j++){
*b++ = (dig[*p]<<4) | dig[p[1]];
p += 2;
}
b += (n-1)*byt;
}
break;
}
}
nbits = (uchar *)malloc(nch*byt*size);
if(nbits == 0){
fprint(2, "%s: malloc error (%d bytes)\n", argv0, nch*byt);
exits("malloc error");
}
c = 0;
for(i = 0; i < n; i++)
if(done[i]){
for(j = 0; j < size; j++)
memmove(nbits+c*byt+j*nch*byt, bits+i*byt+j*n*byt, byt);
c++;
}
bm = balloc((Rectangle){(Point){0, 0}, (Point){nch*size, size}}, 0);
if(bm == 0){
fprint(2, "%s: balloc failure\n", argv0);
exits("balloc failure");
}
wrbitmap(bm, 0, size, nbits);
for(i = 0; i < n; i++)
if(done[i] == 0){
/*fprint(2, "char 0x%x (%d) not found\n", chars[i], chars[i]);/**/
}
return(bm);
}

34
src/cmd/tcs/font/kmap.c Normal file
View file

@ -0,0 +1,34 @@
#include <u.h>
#include <libc.h>
#include <bio.h>
#include <libg.h>
#include "hdr.h"
#include "../kuten208.h"
/*
map: put kuten for runes from..to into chars
*/
void
kmap(int from, int to, long *chars)
{
long *l, *ll;
int k, k1, n;
for(n = from; n <= to; n++)
chars[n-from] = 0;
for(l = tabkuten208, ll = tabkuten208+KUTEN208MAX; l < ll; l++)
if((*l >= from) && (*l <= to))
chars[*l-from] = l-tabkuten208;
k = 0;
k1 = 0; /* not necessary; just shuts ken up */
for(n = from; n <= to; n++)
if(chars[n-from] == 0){
k++;
k1 = n;
}
if(k){
fprint(2, "%s: %d/%d chars found (missing include 0x%x=%d)\n", argv0, (to-from+1-k), to-from+1, k1, k1);
/*exits("map problem");/**/
}
}

87
src/cmd/tcs/font/main.c Normal file
View file

@ -0,0 +1,87 @@
#include <u.h>
#include <libc.h>
#include <libg.h>
#include <bio.h>
#include "hdr.h"
/*
produces the bitmap for the designated han characters
*/
static void usage(void);
enum { Jis = 0, Big5, Gb_bdf, Gb_qw };
enum { Size24 = 0, Size16 };
struct {
char *names[2];
mapfn *mfn;
readbitsfn *bfn;
} source[] = {
[Jis] { "../han/jis.bits", "../han/jis16.bits", kmap, kreadbits },
[Big5] { "no 24 bit file", "../han/big5.16.bits", bmap, breadbits },
[Gb_bdf] { "no 24 bit file", "../han/cclib16fs.bdf", gmap, greadbits },
[Gb_qw] { "no 24 bit file", "no 16bit file", gmap, qreadbits },
};
void
main(int argc, char **argv)
{
int from, to;
int size = 24;
int src = Jis;
char *file = 0;
long nc, nb;
int x;
uchar *bits;
long *chars;
int raw = 0;
Bitmap *b, *b1;
Subfont *f;
int *found;
ARGBEGIN{
case 'f': file = ARGF(); break;
case 'r': raw = 1; break;
case '5': src = Big5; break;
case 's': size = 16; break;
case 'g': src = Gb_bdf; break;
case 'q': src = Gb_qw; break;
default: usage();
}ARGEND
if(file == 0)
file = source[src].names[(size==24)? Size24:Size16];
if(argc != 2)
usage();
from = strtol(argv[0], (char **)0, 0);
to = strtol(argv[1], (char **)0, 0);
binit(0, 0, "fontgen");
nc = to-from+1;
nb = size*size/8; /* bytes per char */
nb *= nc;
bits = (uchar *)malloc(nb);
chars = (long *)malloc(sizeof(long)*nc);
found = (int *)malloc(sizeof(found[0])*nc);
if(bits == 0 || chars == 0){
fprint(2, "%s: couldn't malloc %d bytes for %d chars\n", argv0, nb, nc);
exits("out of memory");
}
if(raw){
for(x = from; x <= to; x++)
chars[x-from] = x;
} else
source[src].mfn(from, to, chars);
memset(bits, 0, nb);
b = source[src].bfn(file, nc, chars, size, bits, &found);
b1 = balloc(b->r, b->ldepth);
bitblt(b1, b1->r.min, b, b->r, S);
f = bf(nc, size, b1, found);
wrbitmapfile(1, b);
wrsubfontfile(1, f);/**/
exits(0);
}
static void
usage(void)
{
fprint(2, "Usage: %s [-s] from to\n", argv0);
exits("usage");
}

127
src/cmd/tcs/font/merge.c Normal file
View file

@ -0,0 +1,127 @@
#include <u.h>
#include <libc.h>
#include <libg.h>
#include <bio.h>
static void usage(void);
static void snarf(char *, int);
static void choose(Fontchar *, Bitmap *, int, int, int);
struct {
char *name;
Bitmap *bm;
Subfont *sf;
} ft[1024];
int nf;
void
main(int argc, char **argv)
{
int i, errs;
Fontchar *fc;
Bitmap *b;
int nc, ht, as;
Subfont *f;
binit(0, 0, "font merge");
if(argc < 1)
usage();
nf = argc-1;
for(i = 0; i < nf; i++)
snarf(argv[i+1], i);
nc = ft[0].sf->n;
ht = ft[0].sf->height;
as = ft[0].sf->ascent;
errs = 0;
for(i = 0; i < nf; i++){
if(nc < ft[i].sf->n) nc = ft[i].sf->n;
if(ht != ft[1].sf->height){
fprint(2, "%s: %s.height=%d (!= %s.height=%d)\n", argv[0],
ft[i].name, ft[i].sf->height, ft[0].name, ht);
errs = 1;
}
if(as != ft[1].sf->ascent){
fprint(2, "%s: %s.ascent=%d (!= %s.ascent=%d)\n", argv[0],
ft[i].name, ft[i].sf->ascent, ft[0].name, ht);
errs = 1;
}
}
if(errs)
exits("param mismatch");
fc = (Fontchar *)malloc(nc*sizeof(Fontchar));
b = balloc(Rect(0, 0, nc*64, ht), ft[0].bm->ldepth);
if(b == 0 || fc == 0){
fprint(2, "%s: couldn't malloc %d chars\n", argv0, nc);
exits("out of memory");
}
bitblt(b, b->r.min, b, b->r, Zero);
choose(fc, b, nc, ht, as);
wrbitmapfile(1, b);
bitblt(&screen, screen.r.min, b, b->r, S); bflush();sleep(5000);
f = subfalloc(nc, ht, as, fc, b, ~0, ~0);
wrsubfontfile(1, f);
exits(0);
}
static void
usage(void)
{
fprint(2, "Usage: %s file ...\n", argv0);
exits("usage");
}
static void
snarf(char *name, int i)
{
int fd;
Bitmap *b;
ft[i].name = name;
if((fd = open(name, OREAD)) < 0){
perror(name);
exits("font read");
}
if((b = rdbitmapfile(fd)) == 0){
fprint(2, "rdbitmapfile failed\n");
exits("font read");
}
if((ft[i].bm = balloc(b->r, b->ldepth)) == 0){
fprint(2, "ballocsnarf failed\n");
exits("font read");
}
bitblt(ft[i].bm, b->r.min, b, b->r, S);
if((ft[i].sf = rdsubfontfile(fd, b)) == 0){
fprint(2, "rdsubfontfile failed\n");
exits("font read");
}
close(fd);
}
static void
choose(Fontchar *f, Bitmap *b, int nc, int ht, int as)
{
int j;
Fontchar *info;
int lastx = 0;
int w, n;
for(n = 0; n < nc; n++, f++){
f->x = lastx;
for(j = 0; j < nf; j++){
if(n >= ft[j].sf->n)
continue;
info = ft[j].sf->info;
if(info[n+1].x != info[n].x)
goto found;
}
continue;
found:
f->left = info[n].left;
f->top = info[n].top;
f->bottom = info[n].bottom;
f->width = info[n].width;
w = info[n+1].x - info[n].x;
bitblt(b, Pt(0, lastx), ft[j].bm, Rect(0, info[n].x, ht, info[n+1].x), S);
lastx += w;
}
f->x = lastx;
}

103
src/cmd/tcs/font/mkfile Normal file
View file

@ -0,0 +1,103 @@
<$PLAN9/src/mkhdr
NPROC=3
OBJ=main.$O font.$O \
kmap.$O kbits.$O kuten208.$O \
bmap.$O bbits.$O big5.$O \
gmap.$O gbits.$O qbits.$O gb.$O
$O.out: $OBJ
$LD $prereq -lbio -lg
%.$O: %.c
$CC -w $stem.c
$O: hdr.h
kuten208.$O: ../kuten208.c
$CC -I.. -w ../kuten208.c
big5.$O: ../big5.c
$CC -I.. -w ../big5.c
gb.$O: ../gb.c
$CC -I.. -w ../gb.c
kuten208.$O kmap.$O: ../kuten208.h
big5.$O bmap.$O: ../big5.h
gb.$O gmap.$O: ../gb.h
clean:V:
rm -f [$OS].out *.[$OS] y.tab.? rc.*
poot:V: merge
merge /lib/font/bit/gb/*.7000.24 > /dev/null
merge: merge.c
$CC -w merge.c && vl -o merge merge.$O && rm merge.$O
fonts:V: v.out rc.jis rc.big5
jis.rc
big5.rc
rc.jis:VQD:
awk 'BEGIN {
fontsize = 512 # set this to chars/subfont
dest = "/lib/font/bit/jis"
print "#!/bin/rc"
printf "v.out -s 0x3000 0x303f > %s/jis3000.16\n", dest
printf "v.out -s 0x30a1 0x30fe > %s/katakana.16\n", dest
printf "v.out -s 0x3041 0x309e > %s/hiragana.16\n", dest
printf "v.out 0x3000 0x303f > %s/jis3000.24\n", dest
printf "v.out 0x30a1 0x30fe > %s/katakana.24\n", dest
printf "v.out 0x3041 0x309e > %s/hiragana.24\n", dest
for(i = 19968; i < 40865; i += fontsize)
printf "v.out -s 0x%x 0x%x > %s/jis%x.16\n", i, i+fontsize-1, dest, i
for(i = 19968; i < 40865; i += fontsize)
printf "v.out 0x%x 0x%x > %s/jis%x.24\n", i, i+fontsize-1, dest, i
exit
}' > $target
chmod 775 $target
rc.big5:VQD:
awk 'BEGIN {
fontsize = 512 # set this to chars/subfont
dest = "/lib/font/bit/big5"
print "#!/bin/rc"
for(i = 19968; i < 40869; i += fontsize)
printf "v.out -5 -s 0x%x 0x%x > %s/%x.16\n", i, i+fontsize-1, dest, i
exit
}' > $target
chmod 775 $target
rc.gb:VQD:
fn g{
x=$1
y=$2
z=$3
awk 'BEGIN {
fontsize = 512 # set this to chars/subfont
dest = "/lib/font/bit/gb/'$"x'."
opt = "'$"y'"
sz = "'$"z'"
print "#!/bin/rc"
printf "v.out %s 0x3000 0x303f > %s3000.%s\n", opt, dest, sz
printf "v.out %s 0x30a1 0x30fe > %skatakana.%s\n", opt, dest, sz
printf "v.out %s 0x3041 0x309e > %shiragana.%s\n", opt, dest, sz
printf "v.out %s 0x3100 0x312f > %sbopomofo.%s\n", opt, dest, sz
printf "v.out %s 0x3200 0x32ff > %s3200.%s\n", opt, dest, sz
for(i = 19968; i < 40869; i += fontsize)
printf "v.out %s 0x%x 0x%x > %s%x.%s\n", opt, i, i+fontsize-1, dest, i, sz
exit
}'
}
{
g TradSong '-q -f ../han/cfan24.ccf' 24
g FangSong '-q -f ../han/cfang24.ccf' 24
g Hei '-q -f ../han/chei24.ccf' 24
g Kai '-q -f ../han/ckai24.ccf' 24
g Song '-q -f ../han/csong24.ccf' 24
g Song '-g -s -f ../han/cclib16st.bdf' 16
g FangSong '-g -s -f ../han/cclib16fs.bdf' 16
} > $target
chmod 775 $target
<$PLAN9/src/mkmany

93
src/cmd/tcs/font/qbits.c Normal file
View file

@ -0,0 +1,93 @@
#include <u.h>
#include <libc.h>
#include <libg.h>
#include <bio.h>
#include "hdr.h"
/* quwei encoding for gb */
Bitmap *
qreadbits(char *file, int n, long *chars, int size, uchar *bits, int **doneptr)
{
Bitmap *bm;
Biobuf *bf;
char *p;
long kmin, kmax;
int i, j, byt;
int nch;
long c;
uchar *b;
int *done;
uchar *nbits;
static int dig[256] = {
['0'] 0, ['1'] 1, ['2'] 2, ['3'] 3, ['4'] 4, ['5'] 5, ['6'] 6, ['7'] 7,
['8'] 8, ['9'] 9, ['a'] 10, ['b'] 11, ['c'] 12, ['d'] 13, ['e'] 14, ['f'] 15,
};
bf = Bopen(file, OREAD);
if(bf == 0){
fprint(2, "%s: %s: %r\n", argv0, file);
exits("bitfile open error");
}
done = (int *)malloc(n*sizeof(done[0]));
if(done == 0){
fprint(2, "%s: malloc error (%d bytes)\n", argv0, n);
exits("malloc error");
}
*doneptr = done;
memset(done, 0, n*sizeof(done[0]));
kmin = 65536;
kmax = 0;
for(i = 0; i < n; i++){
c = chars[i];
if(kmin > c)
kmin = c;
if(kmax < c)
kmax = c;
}
nch = 0;
byt = size/8;
while(p = (char *)Brdline(bf, '\n')){
c = (p[0]-'0')*1000 + (p[1]-'0')*100 + (p[2]-'0')*10 + (p[3]-'0');
if((c < kmin) || (c > kmax))
continue;
for(i = 0; i < n; i++)
if(c == chars[i]){
nch++;
done[i] = 1;
p += 5;
b = bits + i*byt;
for(i = 0; i < size; i++){ /* rows */
for(j = 0; j < byt; j++){
*b++ = (dig[*p]<<4) | dig[p[1]];
p += 2;
}
b += (n-1)*byt;
}
break;
}
}
nbits = (uchar *)malloc(nch*byt*size);
if(nbits == 0){
fprint(2, "%s: malloc error (%d bytes)\n", argv0, nch*byt);
exits("malloc error");
}
c = 0;
for(i = 0; i < n; i++)
if(done[i]){
for(j = 0; j < size; j++)
memmove(nbits+c*byt+j*nch*byt, bits+i*byt+j*n*byt, byt);
c++;
}
bm = balloc((Rectangle){(Point){0, 0}, (Point){nch*size, size}}, 0);
if(bm == 0){
fprint(2, "%s: balloc failure\n", argv0);
exits("balloc failure");
}
wrbitmap(bm, 0, size, nbits);
for(i = 0; i < n; i++)
if(done[i] == 0){
/*fprint(2, "char 0x%x (%d) not found\n", chars[i], chars[i]);/**/
}
return(bm);
}

1104
src/cmd/tcs/gb.c Normal file

File diff suppressed because it is too large Load diff

7
src/cmd/tcs/gb.h Normal file
View file

@ -0,0 +1,7 @@
/*
gb ranges from a1a1 to f7fe inclusive
we use a kuten-like mapping the above range to 101-8794
*/
#define GBMAX 8795
extern long tabgb[GBMAX]; /* runes indexed by gb ordinal */

46
src/cmd/tcs/hdr.h Normal file
View file

@ -0,0 +1,46 @@
extern int squawk;
extern int clean;
extern char *file;
extern int verbose;
extern long ninput, noutput, nrunes, nerrors;
enum { From = 1, Table = 2, Func = 4 };
typedef void (*Fnptr)(void);
struct convert{
char *name;
char *chatter;
int flags;
void *data;
Fnptr fn;
};
extern struct convert convert[];
struct convert *conv(char *, int);
typedef void (*Infn)(int, long *, struct convert *);
typedef void (*Outfn)(Rune *, int, long *);
void outtable(Rune *, int, long *);
void utf_in(int, long *, struct convert *);
void utf_out(Rune *, int, long *);
void isoutf_in(int, long *, struct convert *);
void isoutf_out(Rune *, int, long *);
#define N 10000 /* just blocking */
#define OUT(out, r, n) if(out->flags&Table) outtable(r, n, (long *)out->data);\
else ((Outfn)(out->fn))(r, n, (long *)0)
extern Rune runes[N];
extern char obuf[UTFmax*N]; /* maximum bloat from N runes */
#define BADMAP (0xFFFD)
#define BYTEBADMAP ('?') /* badmap but has to fit in a byte */
#define ESC 033
#ifdef PLAN9
#define EPR fprint(2,
#define EXIT(n,s) exits(s)
#else
#define EPR fprintf(stderr,
#define USED(x) /* in plan 9, USED(x) tells the compiler to treat x as used */
#define EXIT(n,s) exit(n)
#endif

107
src/cmd/tcs/jis.h Normal file
View file

@ -0,0 +1,107 @@
/*
following astonishing goo courtesy of kogure.
*/
/*
* MicroSoft Kanji Encoding (SJIS) Transformation
*/
/*
* void
* J2S(unsigned char *_h, unsigned char *_l)
* JIS X 208 to MS kanji transformation.
*
* Calling/Exit State:
* _h and _l should be in their valid range.
* No return value.
*/
#define J2S(_h, _l) { \
/* lower: 21-7e >> 40-9d,9e-fb >> 40-7e,(skip 7f),80-fc */ \
if (((_l) += (((_h)-- % 2) ? 0x1f : 0x7d)) > 0x7e) (_l)++; \
/* upper: 21-7e >> 81-af >> 81-9f,(skip a0-df),e0-ef */ \
if (((_h) = ((_h) / 2 + 0x71)) > 0x9f) (_h) += 0x40; \
}
/*
* void
* S2J(unsigned char *_h, unsigned char *_l)
* MS kanji to JIS X 208 transformation.
*
* Calling/Exit State:
* _h and _l should be in valid range.
* No return value.
*/
#define S2J(_h, _l) { \
/* lower: 40-7e,80-fc >> 21-5f,61-dd >> 21-7e,7f-dc */ \
if (((_l) -= 0x1f) > 0x60) (_l)--; \
/* upper: 81-9f,e0-ef >> 00-1e,5f-6e >> 00-2e >> 21-7d */ \
if (((_h) -= 0x81) > 0x5e) (_h) -= 0x40; (_h) *= 2, (_h) += 0x21; \
/* upper: ,21-7d >> ,22-7e ; lower: ,7f-dc >> ,21-7e */ \
if ((_l) > 0x7e) (_h)++, (_l) -= 0x5e; \
}
/*
* int
* ISJKANA(const unsigned char *_b)
* Tests given byte is in the range of JIS X 0201 katakana.
*
* Calling/Exit State:
* Returns 1 if it is, or 0 otherwise.
*/
#define ISJKANA(_b) (0xa0 <= (_b) && (_b) < 0xe0)
/*
* int
* CANS2JH(const unsigned char *_h)
* Tests given byte is in the range of valid first byte of MS
* kanji code; either acts as a subroutine of CANS2J() macro
* or can be used to parse MS kanji encoded strings.
*
* Calling/Exit State:
* Returns 1 if it is, or 0 otherwise.
*/
#define CANS2JH(_h) ((0x81 <= (_h) && (_h) < 0xf0) && !ISJKANA(_h))
/*
* int
* CANS2JL(const unsigned char *_l)
* Tests given byte is in the range of valid second byte of MS
* kanji code; acts as a subroutine of CANS2J() macro.
*
* Calling/Exit State:
* Returns 1 if it is, or 0 otherwise.
*/
#define CANS2JL(_l) (0x40 <= (_l) && (_l) < 0xfd && (_l) != 0x7f)
/*
* int
* CANS2J(const unsigned char *_h, const unsinged char *_l)
* Tests given bytes form a MS kanji code point which can be
* transformed to a valid JIS X 208 code point.
*
* Calling/Exit State:
* Returns 1 if they are, or 0 otherwise.
*/
#define CANS2J(_h, _l) (CANS2JH(_h) && CANS2JL(_l))
/*
* int
* CANJ2SB(const unsigned char *_b)
* Tests given bytes is in the range of valid 94 graphic
* character set; acts as a subroutine of CANJ2S() macro.
*
* Calling/Exit State:
* Returns 1 if it is, or 0 otherwise.
*/
#define CANJ2SB(_b) (0x21 <= (_b) && (_b) < 0x7f)
/*
* int
* CANJ2S(const unsigned char *_h, const unsigned char *_l)
* Tests given bytes form valid JIS X 208 code points
* (which can be transformed to MS kanji).
*
* Calling/Exit State:
* Returns 1 if they are, or 0 otherwise.
*/
#define CANJ2S(_h, _l) (CANJ2SB(_h) && CANJ2SB(_l))

988
src/cmd/tcs/ksc.c Normal file
View file

@ -0,0 +1,988 @@
#include "ksc.h"
/* KSC5601 -> Unicode mapping table, compressed for the 94*94 codeset. */
/*
* Unlike kuten-table, needed offset is 33 (0x21) instead of
* 32 for 7-bit portion of each byte. i.e., a Unicode
* codepoint for KSC's codepoint (n, m) would be found at
* index (n-33)*94+m-33.
*/
long tabksc5601[] = {
/* KSC 5601 -> Unicode mapping table; max codepoint = 0x7d7e */
0x3000, 0x3001, 0x3002, 0x00b7, 0x2025, 0x2026, 0x00a8, 0x3003, 0x00ad,
0x2015, 0x2225, 0xff3c, 0x223c, 0x2018, 0x2019, 0x201c, 0x201d, 0x3014,
0x3015, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c, 0x300d, 0x300e, 0x300f,
0x3010, 0x3011, 0x00b1, 0x00d7, 0x00f7, 0x2260, 0x2264, 0x2265, 0x221e,
0x2234, 0x00b0, 0x2032, 0x2033, 0x2103, 0x212b, 0xffe0, 0xffe1, 0xffe5,
0x2642, 0x2640, 0x2220, 0x22a5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252,
0x00a7, 0x203b, 0x2606, 0x2605, 0x25cb, 0x25cf, 0x25ce, 0x25c7, 0x25c6,
0x25a1, 0x25a0, 0x25b3, 0x25b2, 0x25bd, 0x25bc, 0x2192, 0x2190, 0x2191,
0x2193, 0x2194, 0x3013, 0x226a, 0x226b, 0x221a, 0x223d, 0x221d, 0x2235,
0x222b, 0x222c, 0x2208, 0x220b, 0x2286, 0x2287, 0x2282, 0x2283, 0x222a,
0x2229, 0x2227, 0x2228, 0xffe2, 0x21d2, 0x21d4, 0x2200, 0x2203, 0x00b4,
0xff5e, 0x02c7, 0x02d8, 0x02dd, 0x02da, 0x02d9, 0x00b8, 0x02db, 0x00a1,
0x00bf, 0x02d0, 0x222e, 0x2211, 0x220f, 0x00a4, 0x2109, 0x2030, 0x25c1,
0x25c0, 0x25b7, 0x25b6, 0x2664, 0x2660, 0x2661, 0x2665, 0x2667, 0x2663,
0x25c9, 0x25c8, 0x25a3, 0x25d0, 0x25d1, 0x2592, 0x25a4, 0x25a5, 0x25a8,
0x25a7, 0x25a6, 0x25a9, 0x2668, 0x260f, 0x260e, 0x261c, 0x261e, 0x00b6,
0x2020, 0x2021, 0x2195, 0x2197, 0x2199, 0x2196, 0x2198, 0x266d, 0x2669,
0x266a, 0x266c, 0x327f, 0x321c, 0x2116, 0x33c7, 0x2122, 0x33c2, 0x33d8,
0x2121, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 0xff01,
0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a,
0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13,
0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c,
0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff21, 0xff22, 0xff23, 0xff24, 0xff25,
0xff26, 0xff27, 0xff28, 0xff29, 0xff2a, 0xff2b, 0xff2c, 0xff2d, 0xff2e,
0xff2f, 0xff30, 0xff31, 0xff32, 0xff33, 0xff34, 0xff35, 0xff36, 0xff37,
0xff38, 0xff39, 0xff3a, 0xff3b, 0xffe6, 0xff3d, 0xff3e, 0xff3f, 0xff40,
0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49,
0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52,
0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b,
0xff5c, 0xff5d, 0xffe3, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136,
0x3137, 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f,
0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150, 0x3151,
0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158, 0x3159, 0x315a,
0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160, 0x3161, 0x3162, 0x3163,
0x3164, 0x3165, 0x3166, 0x3167, 0x3168, 0x3169, 0x316a, 0x316b, 0x316c,
0x316d, 0x316e, 0x316f, 0x3170, 0x3171, 0x3172, 0x3173, 0x3174, 0x3175,
0x3176, 0x3177, 0x3178, 0x3179, 0x317a, 0x317b, 0x317c, 0x317d, 0x317e,
0x317f, 0x3180, 0x3181, 0x3182, 0x3183, 0x3184, 0x3185, 0x3186, 0x3187,
0x3188, 0x3189, 0x318a, 0x318b, 0x318c, 0x318d, 0x318e, 0x2170, 0x2171,
0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, -1,
-1, -1, -1, -1, 0x2160, 0x2161, 0x2162, 0x2163, 0x2164,
0x2165, 0x2166, 0x2167, 0x2168, 0x2169, -1, -1, -1, -1,
-1, -1, -1, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396,
0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9,
-1, -1, -1, -1, -1, -1, -1, -1, 0x03b1,
0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba,
0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c4,
0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, -1, -1, -1, -1,
-1, -1, 0x2500, 0x2502, 0x250c, 0x2510, 0x2518, 0x2514, 0x251c,
0x252c, 0x2524, 0x2534, 0x253c, 0x2501, 0x2503, 0x250f, 0x2513, 0x251b,
0x2517, 0x2523, 0x2533, 0x252b, 0x253b, 0x254b, 0x2520, 0x252f, 0x2528,
0x2537, 0x253f, 0x251d, 0x2530, 0x2525, 0x2538, 0x2542, 0x2512, 0x2511,
0x251a, 0x2519, 0x2516, 0x2515, 0x250e, 0x250d, 0x251e, 0x251f, 0x2521,
0x2522, 0x2526, 0x2527, 0x2529, 0x252a, 0x252d, 0x252e, 0x2531, 0x2532,
0x2535, 0x2536, 0x2539, 0x253a, 0x253d, 0x253e, 0x2540, 0x2541, 0x2543,
0x2544, 0x2545, 0x2546, 0x2547, 0x2548, 0x2549, 0x254a, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 0x3395, 0x3396, 0x3397,
0x2113, 0x3398, 0x33c4, 0x33a3, 0x33a4, 0x33a5, 0x33a6, 0x3399, 0x339a,
0x339b, 0x339c, 0x339d, 0x339e, 0x339f, 0x33a0, 0x33a1, 0x33a2, 0x33ca,
0x338d, 0x338e, 0x338f, 0x33cf, 0x3388, 0x3389, 0x33c8, 0x33a7, 0x33a8,
0x33b0, 0x33b1, 0x33b2, 0x33b3, 0x33b4, 0x33b5, 0x33b6, 0x33b7, 0x33b8,
0x33b9, 0x3380, 0x3381, 0x3382, 0x3383, 0x3384, 0x33ba, 0x33bb, 0x33bc,
0x33bd, 0x33be, 0x33bf, 0x3390, 0x3391, 0x3392, 0x3393, 0x3394, 0x2126,
0x33c0, 0x33c1, 0x338a, 0x338b, 0x338c, 0x33d6, 0x33c5, 0x33ad, 0x33ae,
0x33af, 0x33db, 0x33a9, 0x33aa, 0x33ab, 0x33ac, 0x33dd, 0x33d0, 0x33d3,
0x33c3, 0x33c9, 0x33dc, 0x33c6, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 0x00c6, 0x00d0, 0x00aa, 0x0126, -1, 0x0132, -1, 0x013f,
0x0141, 0x00d8, 0x0152, 0x00ba, 0x00de, 0x0166, 0x014a, -1, 0x3260,
0x3261, 0x3262, 0x3263, 0x3264, 0x3265, 0x3266, 0x3267, 0x3268, 0x3269,
0x326a, 0x326b, 0x326c, 0x326d, 0x326e, 0x326f, 0x3270, 0x3271, 0x3272,
0x3273, 0x3274, 0x3275, 0x3276, 0x3277, 0x3278, 0x3279, 0x327a, 0x327b,
0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8,
0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1,
0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x2460,
0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469,
0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x00bd, 0x2153, 0x2154, 0x00bc,
0x00be, 0x215b, 0x215c, 0x215d, 0x215e, 0x00e6, 0x0111, 0x00f0, 0x0127,
0x0131, 0x0133, 0x0138, 0x0140, 0x0142, 0x00f8, 0x0153, 0x00df, 0x00fe,
0x0167, 0x014b, 0x0149, 0x3200, 0x3201, 0x3202, 0x3203, 0x3204, 0x3205,
0x3206, 0x3207, 0x3208, 0x3209, 0x320a, 0x320b, 0x320c, 0x320d, 0x320e,
0x320f, 0x3210, 0x3211, 0x3212, 0x3213, 0x3214, 0x3215, 0x3216, 0x3217,
0x3218, 0x3219, 0x321a, 0x321b, 0x249c, 0x249d, 0x249e, 0x249f, 0x24a0,
0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7, 0x24a8, 0x24a9,
0x24aa, 0x24ab, 0x24ac, 0x24ad, 0x24ae, 0x24af, 0x24b0, 0x24b1, 0x24b2,
0x24b3, 0x24b4, 0x24b5, 0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479,
0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482,
0x00b9, 0x00b2, 0x00b3, 0x2074, 0x207f, 0x2081, 0x2082, 0x2083, 0x2084,
0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049,
0x304a, 0x304b, 0x304c, 0x304d, 0x304e, 0x304f, 0x3050, 0x3051, 0x3052,
0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305a, 0x305b,
0x305c, 0x305d, 0x305e, 0x305f, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064,
0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306a, 0x306b, 0x306c, 0x306d,
0x306e, 0x306f, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076,
0x3077, 0x3078, 0x3079, 0x307a, 0x307b, 0x307c, 0x307d, 0x307e, 0x307f,
0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
0x3089, 0x308a, 0x308b, 0x308c, 0x308d, 0x308e, 0x308f, 0x3090, 0x3091,
0x3092, 0x3093, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5,
0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ac, 0x30ad, 0x30ae,
0x30af, 0x30b0, 0x30b1, 0x30b2, 0x30b3, 0x30b4, 0x30b5, 0x30b6, 0x30b7,
0x30b8, 0x30b9, 0x30ba, 0x30bb, 0x30bc, 0x30bd, 0x30be, 0x30bf, 0x30c0,
0x30c1, 0x30c2, 0x30c3, 0x30c4, 0x30c5, 0x30c6, 0x30c7, 0x30c8, 0x30c9,
0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d0, 0x30d1, 0x30d2,
0x30d3, 0x30d4, 0x30d5, 0x30d6, 0x30d7, 0x30d8, 0x30d9, 0x30da, 0x30db,
0x30dc, 0x30dd, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4,
0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed,
0x30ee, 0x30ef, 0x30f0, 0x30f1, 0x30f2, 0x30f3, 0x30f4, 0x30f5, 0x30f6,
-1, -1, -1, -1, -1, -1, -1, -1, 0x0410,
0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418,
0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421,
0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a,
0x042b, 0x042c, 0x042d, 0x042e, 0x042f, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451,
0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 0x3400, 0x3401, 0x3402,
0x3403, 0x3404, 0x3405, 0x3406, 0x3407, 0x3408, 0x3409, 0x340a, 0x340b,
0x340c, 0x340d, 0x340e, 0x340f, 0x3410, 0x3411, 0x3412, 0x3413, 0x3414,
0x3415, 0x3416, 0x3417, 0x3418, 0x3419, 0x341a, 0x341b, 0x341c, 0x341d,
0x341e, 0x341f, 0x3420, 0x3421, 0x3422, 0x3423, 0x3424, 0x3425, 0x3426,
0x3427, 0x3428, 0x3429, 0x342a, 0x342b, 0x342c, 0x342d, 0x342e, 0x342f,
0x3430, 0x3431, 0x3432, 0x3433, 0x3434, 0x3435, 0x3436, 0x3437, 0x3438,
0x3439, 0x343a, 0x343b, 0x343c, 0x343d, 0x343e, 0x343f, 0x3440, 0x3441,
0x3442, 0x3443, 0x3444, 0x3445, 0x3446, 0x3447, 0x3448, 0x3449, 0x344a,
0x344b, 0x344c, 0x344d, 0x344e, 0x344f, 0x3450, 0x3451, 0x3452, 0x3453,
0x3454, 0x3455, 0x3456, 0x3457, 0x3458, 0x3459, 0x345a, 0x345b, 0x345c,
0x345d, 0x345e, 0x345f, 0x3460, 0x3461, 0x3462, 0x3463, 0x3464, 0x3465,
0x3466, 0x3467, 0x3468, 0x3469, 0x346a, 0x346b, 0x346c, 0x346d, 0x346e,
0x346f, 0x3470, 0x3471, 0x3472, 0x3473, 0x3474, 0x3475, 0x3476, 0x3477,
0x3478, 0x3479, 0x347a, 0x347b, 0x347c, 0x347d, 0x347e, 0x347f, 0x3480,
0x3481, 0x3482, 0x3483, 0x3484, 0x3485, 0x3486, 0x3487, 0x3488, 0x3489,
0x348a, 0x348b, 0x348c, 0x348d, 0x348e, 0x348f, 0x3490, 0x3491, 0x3492,
0x3493, 0x3494, 0x3495, 0x3496, 0x3497, 0x3498, 0x3499, 0x349a, 0x349b,
0x349c, 0x349d, 0x349e, 0x349f, 0x34a0, 0x34a1, 0x34a2, 0x34a3, 0x34a4,
0x34a5, 0x34a6, 0x34a7, 0x34a8, 0x34a9, 0x34aa, 0x34ab, 0x34ac, 0x34ad,
0x34ae, 0x34af, 0x34b0, 0x34b1, 0x34b2, 0x34b3, 0x34b4, 0x34b5, 0x34b6,
0x34b7, 0x34b8, 0x34b9, 0x34ba, 0x34bb, 0x34bc, 0x34bd, 0x34be, 0x34bf,
0x34c0, 0x34c1, 0x34c2, 0x34c3, 0x34c4, 0x34c5, 0x34c6, 0x34c7, 0x34c8,
0x34c9, 0x34ca, 0x34cb, 0x34cc, 0x34cd, 0x34ce, 0x34cf, 0x34d0, 0x34d1,
0x34d2, 0x34d3, 0x34d4, 0x34d5, 0x34d6, 0x34d7, 0x34d8, 0x34d9, 0x34da,
0x34db, 0x34dc, 0x34dd, 0x34de, 0x34df, 0x34e0, 0x34e1, 0x34e2, 0x34e3,
0x34e4, 0x34e5, 0x34e6, 0x34e7, 0x34e8, 0x34e9, 0x34ea, 0x34eb, 0x34ec,
0x34ed, 0x34ee, 0x34ef, 0x34f0, 0x34f1, 0x34f2, 0x34f3, 0x34f4, 0x34f5,
0x34f6, 0x34f7, 0x34f8, 0x34f9, 0x34fa, 0x34fb, 0x34fc, 0x34fd, 0x34fe,
0x34ff, 0x3500, 0x3501, 0x3502, 0x3503, 0x3504, 0x3505, 0x3506, 0x3507,
0x3508, 0x3509, 0x350a, 0x350b, 0x350c, 0x350d, 0x350e, 0x350f, 0x3510,
0x3511, 0x3512, 0x3513, 0x3514, 0x3515, 0x3516, 0x3517, 0x3518, 0x3519,
0x351a, 0x351b, 0x351c, 0x351d, 0x351e, 0x351f, 0x3520, 0x3521, 0x3522,
0x3523, 0x3524, 0x3525, 0x3526, 0x3527, 0x3528, 0x3529, 0x352a, 0x352b,
0x352c, 0x352d, 0x352e, 0x352f, 0x3530, 0x3531, 0x3532, 0x3533, 0x3534,
0x3535, 0x3536, 0x3537, 0x3538, 0x3539, 0x353a, 0x353b, 0x353c, 0x353d,
0x353e, 0x353f, 0x3540, 0x3541, 0x3542, 0x3543, 0x3544, 0x3545, 0x3546,
0x3547, 0x3548, 0x3549, 0x354a, 0x354b, 0x354c, 0x354d, 0x354e, 0x354f,
0x3550, 0x3551, 0x3552, 0x3553, 0x3554, 0x3555, 0x3556, 0x3557, 0x3558,
0x3559, 0x355a, 0x355b, 0x355c, 0x355d, 0x355e, 0x355f, 0x3560, 0x3561,
0x3562, 0x3563, 0x3564, 0x3565, 0x3566, 0x3567, 0x3568, 0x3569, 0x356a,
0x356b, 0x356c, 0x356d, 0x356e, 0x356f, 0x3570, 0x3571, 0x3572, 0x3573,
0x3574, 0x3575, 0x3576, 0x3577, 0x3578, 0x3579, 0x357a, 0x357b, 0x357c,
0x357d, 0x357e, 0x357f, 0x3580, 0x3581, 0x3582, 0x3583, 0x3584, 0x3585,
0x3586, 0x3587, 0x3588, 0x3589, 0x358a, 0x358b, 0x358c, 0x358d, 0x358e,
0x358f, 0x3590, 0x3591, 0x3592, 0x3593, 0x3594, 0x3595, 0x3596, 0x3597,
0x3598, 0x3599, 0x359a, 0x359b, 0x359c, 0x359d, 0x359e, 0x359f, 0x35a0,
0x35a1, 0x35a2, 0x35a3, 0x35a4, 0x35a5, 0x35a6, 0x35a7, 0x35a8, 0x35a9,
0x35aa, 0x35ab, 0x35ac, 0x35ad, 0x35ae, 0x35af, 0x35b0, 0x35b1, 0x35b2,
0x35b3, 0x35b4, 0x35b5, 0x35b6, 0x35b7, 0x35b8, 0x35b9, 0x35ba, 0x35bb,
0x35bc, 0x35bd, 0x35be, 0x35bf, 0x35c0, 0x35c1, 0x35c2, 0x35c3, 0x35c4,
0x35c5, 0x35c6, 0x35c7, 0x35c8, 0x35c9, 0x35ca, 0x35cb, 0x35cc, 0x35cd,
0x35ce, 0x35cf, 0x35d0, 0x35d1, 0x35d2, 0x35d3, 0x35d4, 0x35d5, 0x35d6,
0x35d7, 0x35d8, 0x35d9, 0x35da, 0x35db, 0x35dc, 0x35dd, 0x35de, 0x35df,
0x35e0, 0x35e1, 0x35e2, 0x35e3, 0x35e4, 0x35e5, 0x35e6, 0x35e7, 0x35e8,
0x35e9, 0x35ea, 0x35eb, 0x35ec, 0x35ed, 0x35ee, 0x35ef, 0x35f0, 0x35f1,
0x35f2, 0x35f3, 0x35f4, 0x35f5, 0x35f6, 0x35f7, 0x35f8, 0x35f9, 0x35fa,
0x35fb, 0x35fc, 0x35fd, 0x35fe, 0x35ff, 0x3600, 0x3601, 0x3602, 0x3603,
0x3604, 0x3605, 0x3606, 0x3607, 0x3608, 0x3609, 0x360a, 0x360b, 0x360c,
0x360d, 0x360e, 0x360f, 0x3610, 0x3611, 0x3612, 0x3613, 0x3614, 0x3615,
0x3616, 0x3617, 0x3618, 0x3619, 0x361a, 0x361b, 0x361c, 0x361d, 0x361e,
0x361f, 0x3620, 0x3621, 0x3622, 0x3623, 0x3624, 0x3625, 0x3626, 0x3627,
0x3628, 0x3629, 0x362a, 0x362b, 0x362c, 0x362d, 0x362e, 0x362f, 0x3630,
0x3631, 0x3632, 0x3633, 0x3634, 0x3635, 0x3636, 0x3637, 0x3638, 0x3639,
0x363a, 0x363b, 0x363c, 0x363d, 0x363e, 0x363f, 0x3640, 0x3641, 0x3642,
0x3643, 0x3644, 0x3645, 0x3646, 0x3647, 0x3648, 0x3649, 0x364a, 0x364b,
0x364c, 0x364d, 0x364e, 0x364f, 0x3650, 0x3651, 0x3652, 0x3653, 0x3654,
0x3655, 0x3656, 0x3657, 0x3658, 0x3659, 0x365a, 0x365b, 0x365c, 0x365d,
0x365e, 0x365f, 0x3660, 0x3661, 0x3662, 0x3663, 0x3664, 0x3665, 0x3666,
0x3667, 0x3668, 0x3669, 0x366a, 0x366b, 0x366c, 0x366d, 0x366e, 0x366f,
0x3670, 0x3671, 0x3672, 0x3673, 0x3674, 0x3675, 0x3676, 0x3677, 0x3678,
0x3679, 0x367a, 0x367b, 0x367c, 0x367d, 0x367e, 0x367f, 0x3680, 0x3681,
0x3682, 0x3683, 0x3684, 0x3685, 0x3686, 0x3687, 0x3688, 0x3689, 0x368a,
0x368b, 0x368c, 0x368d, 0x368e, 0x368f, 0x3690, 0x3691, 0x3692, 0x3693,
0x3694, 0x3695, 0x3696, 0x3697, 0x3698, 0x3699, 0x369a, 0x369b, 0x369c,
0x369d, 0x369e, 0x369f, 0x36a0, 0x36a1, 0x36a2, 0x36a3, 0x36a4, 0x36a5,
0x36a6, 0x36a7, 0x36a8, 0x36a9, 0x36aa, 0x36ab, 0x36ac, 0x36ad, 0x36ae,
0x36af, 0x36b0, 0x36b1, 0x36b2, 0x36b3, 0x36b4, 0x36b5, 0x36b6, 0x36b7,
0x36b8, 0x36b9, 0x36ba, 0x36bb, 0x36bc, 0x36bd, 0x36be, 0x36bf, 0x36c0,
0x36c1, 0x36c2, 0x36c3, 0x36c4, 0x36c5, 0x36c6, 0x36c7, 0x36c8, 0x36c9,
0x36ca, 0x36cb, 0x36cc, 0x36cd, 0x36ce, 0x36cf, 0x36d0, 0x36d1, 0x36d2,
0x36d3, 0x36d4, 0x36d5, 0x36d6, 0x36d7, 0x36d8, 0x36d9, 0x36da, 0x36db,
0x36dc, 0x36dd, 0x36de, 0x36df, 0x36e0, 0x36e1, 0x36e2, 0x36e3, 0x36e4,
0x36e5, 0x36e6, 0x36e7, 0x36e8, 0x36e9, 0x36ea, 0x36eb, 0x36ec, 0x36ed,
0x36ee, 0x36ef, 0x36f0, 0x36f1, 0x36f2, 0x36f3, 0x36f4, 0x36f5, 0x36f6,
0x36f7, 0x36f8, 0x36f9, 0x36fa, 0x36fb, 0x36fc, 0x36fd, 0x36fe, 0x36ff,
0x3700, 0x3701, 0x3702, 0x3703, 0x3704, 0x3705, 0x3706, 0x3707, 0x3708,
0x3709, 0x370a, 0x370b, 0x370c, 0x370d, 0x370e, 0x370f, 0x3710, 0x3711,
0x3712, 0x3713, 0x3714, 0x3715, 0x3716, 0x3717, 0x3718, 0x3719, 0x371a,
0x371b, 0x371c, 0x371d, 0x371e, 0x371f, 0x3720, 0x3721, 0x3722, 0x3723,
0x3724, 0x3725, 0x3726, 0x3727, 0x3728, 0x3729, 0x372a, 0x372b, 0x372c,
0x372d, 0x372e, 0x372f, 0x3730, 0x3731, 0x3732, 0x3733, 0x3734, 0x3735,
0x3736, 0x3737, 0x3738, 0x3739, 0x373a, 0x373b, 0x373c, 0x373d, 0x373e,
0x373f, 0x3740, 0x3741, 0x3742, 0x3743, 0x3744, 0x3745, 0x3746, 0x3747,
0x3748, 0x3749, 0x374a, 0x374b, 0x374c, 0x374d, 0x374e, 0x374f, 0x3750,
0x3751, 0x3752, 0x3753, 0x3754, 0x3755, 0x3756, 0x3757, 0x3758, 0x3759,
0x375a, 0x375b, 0x375c, 0x375d, 0x375e, 0x375f, 0x3760, 0x3761, 0x3762,
0x3763, 0x3764, 0x3765, 0x3766, 0x3767, 0x3768, 0x3769, 0x376a, 0x376b,
0x376c, 0x376d, 0x376e, 0x376f, 0x3770, 0x3771, 0x3772, 0x3773, 0x3774,
0x3775, 0x3776, 0x3777, 0x3778, 0x3779, 0x377a, 0x377b, 0x377c, 0x377d,
0x377e, 0x377f, 0x3780, 0x3781, 0x3782, 0x3783, 0x3784, 0x3785, 0x3786,
0x3787, 0x3788, 0x3789, 0x378a, 0x378b, 0x378c, 0x378d, 0x378e, 0x378f,
0x3790, 0x3791, 0x3792, 0x3793, 0x3794, 0x3795, 0x3796, 0x3797, 0x3798,
0x3799, 0x379a, 0x379b, 0x379c, 0x379d, 0x379e, 0x379f, 0x37a0, 0x37a1,
0x37a2, 0x37a3, 0x37a4, 0x37a5, 0x37a6, 0x37a7, 0x37a8, 0x37a9, 0x37aa,
0x37ab, 0x37ac, 0x37ad, 0x37ae, 0x37af, 0x37b0, 0x37b1, 0x37b2, 0x37b3,
0x37b4, 0x37b5, 0x37b6, 0x37b7, 0x37b8, 0x37b9, 0x37ba, 0x37bb, 0x37bc,
0x37bd, 0x37be, 0x37bf, 0x37c0, 0x37c1, 0x37c2, 0x37c3, 0x37c4, 0x37c5,
0x37c6, 0x37c7, 0x37c8, 0x37c9, 0x37ca, 0x37cb, 0x37cc, 0x37cd, 0x37ce,
0x37cf, 0x37d0, 0x37d1, 0x37d2, 0x37d3, 0x37d4, 0x37d5, 0x37d6, 0x37d7,
0x37d8, 0x37d9, 0x37da, 0x37db, 0x37dc, 0x37dd, 0x37de, 0x37df, 0x37e0,
0x37e1, 0x37e2, 0x37e3, 0x37e4, 0x37e5, 0x37e6, 0x37e7, 0x37e8, 0x37e9,
0x37ea, 0x37eb, 0x37ec, 0x37ed, 0x37ee, 0x37ef, 0x37f0, 0x37f1, 0x37f2,
0x37f3, 0x37f4, 0x37f5, 0x37f6, 0x37f7, 0x37f8, 0x37f9, 0x37fa, 0x37fb,
0x37fc, 0x37fd, 0x37fe, 0x37ff, 0x3800, 0x3801, 0x3802, 0x3803, 0x3804,
0x3805, 0x3806, 0x3807, 0x3808, 0x3809, 0x380a, 0x380b, 0x380c, 0x380d,
0x380e, 0x380f, 0x3810, 0x3811, 0x3812, 0x3813, 0x3814, 0x3815, 0x3816,
0x3817, 0x3818, 0x3819, 0x381a, 0x381b, 0x381c, 0x381d, 0x381e, 0x381f,
0x3820, 0x3821, 0x3822, 0x3823, 0x3824, 0x3825, 0x3826, 0x3827, 0x3828,
0x3829, 0x382a, 0x382b, 0x382c, 0x382d, 0x382e, 0x382f, 0x3830, 0x3831,
0x3832, 0x3833, 0x3834, 0x3835, 0x3836, 0x3837, 0x3838, 0x3839, 0x383a,
0x383b, 0x383c, 0x383d, 0x383e, 0x383f, 0x3840, 0x3841, 0x3842, 0x3843,
0x3844, 0x3845, 0x3846, 0x3847, 0x3848, 0x3849, 0x384a, 0x384b, 0x384c,
0x384d, 0x384e, 0x384f, 0x3850, 0x3851, 0x3852, 0x3853, 0x3854, 0x3855,
0x3856, 0x3857, 0x3858, 0x3859, 0x385a, 0x385b, 0x385c, 0x385d, 0x385e,
0x385f, 0x3860, 0x3861, 0x3862, 0x3863, 0x3864, 0x3865, 0x3866, 0x3867,
0x3868, 0x3869, 0x386a, 0x386b, 0x386c, 0x386d, 0x386e, 0x386f, 0x3870,
0x3871, 0x3872, 0x3873, 0x3874, 0x3875, 0x3876, 0x3877, 0x3878, 0x3879,
0x387a, 0x387b, 0x387c, 0x387d, 0x387e, 0x387f, 0x3880, 0x3881, 0x3882,
0x3883, 0x3884, 0x3885, 0x3886, 0x3887, 0x3888, 0x3889, 0x388a, 0x388b,
0x388c, 0x388d, 0x388e, 0x388f, 0x3890, 0x3891, 0x3892, 0x3893, 0x3894,
0x3895, 0x3896, 0x3897, 0x3898, 0x3899, 0x389a, 0x389b, 0x389c, 0x389d,
0x389e, 0x389f, 0x38a0, 0x38a1, 0x38a2, 0x38a3, 0x38a4, 0x38a5, 0x38a6,
0x38a7, 0x38a8, 0x38a9, 0x38aa, 0x38ab, 0x38ac, 0x38ad, 0x38ae, 0x38af,
0x38b0, 0x38b1, 0x38b2, 0x38b3, 0x38b4, 0x38b5, 0x38b6, 0x38b7, 0x38b8,
0x38b9, 0x38ba, 0x38bb, 0x38bc, 0x38bd, 0x38be, 0x38bf, 0x38c0, 0x38c1,
0x38c2, 0x38c3, 0x38c4, 0x38c5, 0x38c6, 0x38c7, 0x38c8, 0x38c9, 0x38ca,
0x38cb, 0x38cc, 0x38cd, 0x38ce, 0x38cf, 0x38d0, 0x38d1, 0x38d2, 0x38d3,
0x38d4, 0x38d5, 0x38d6, 0x38d7, 0x38d8, 0x38d9, 0x38da, 0x38db, 0x38dc,
0x38dd, 0x38de, 0x38df, 0x38e0, 0x38e1, 0x38e2, 0x38e3, 0x38e4, 0x38e5,
0x38e6, 0x38e7, 0x38e8, 0x38e9, 0x38ea, 0x38eb, 0x38ec, 0x38ed, 0x38ee,
0x38ef, 0x38f0, 0x38f1, 0x38f2, 0x38f3, 0x38f4, 0x38f5, 0x38f6, 0x38f7,
0x38f8, 0x38f9, 0x38fa, 0x38fb, 0x38fc, 0x38fd, 0x38fe, 0x38ff, 0x3900,
0x3901, 0x3902, 0x3903, 0x3904, 0x3905, 0x3906, 0x3907, 0x3908, 0x3909,
0x390a, 0x390b, 0x390c, 0x390d, 0x390e, 0x390f, 0x3910, 0x3911, 0x3912,
0x3913, 0x3914, 0x3915, 0x3916, 0x3917, 0x3918, 0x3919, 0x391a, 0x391b,
0x391c, 0x391d, 0x391e, 0x391f, 0x3920, 0x3921, 0x3922, 0x3923, 0x3924,
0x3925, 0x3926, 0x3927, 0x3928, 0x3929, 0x392a, 0x392b, 0x392c, 0x392d,
0x392e, 0x392f, 0x3930, 0x3931, 0x3932, 0x3933, 0x3934, 0x3935, 0x3936,
0x3937, 0x3938, 0x3939, 0x393a, 0x393b, 0x393c, 0x393d, 0x393e, 0x393f,
0x3940, 0x3941, 0x3942, 0x3943, 0x3944, 0x3945, 0x3946, 0x3947, 0x3948,
0x3949, 0x394a, 0x394b, 0x394c, 0x394d, 0x394e, 0x394f, 0x3950, 0x3951,
0x3952, 0x3953, 0x3954, 0x3955, 0x3956, 0x3957, 0x3958, 0x3959, 0x395a,
0x395b, 0x395c, 0x395d, 0x395e, 0x395f, 0x3960, 0x3961, 0x3962, 0x3963,
0x3964, 0x3965, 0x3966, 0x3967, 0x3968, 0x3969, 0x396a, 0x396b, 0x396c,
0x396d, 0x396e, 0x396f, 0x3970, 0x3971, 0x3972, 0x3973, 0x3974, 0x3975,
0x3976, 0x3977, 0x3978, 0x3979, 0x397a, 0x397b, 0x397c, 0x397d, 0x397e,
0x397f, 0x3980, 0x3981, 0x3982, 0x3983, 0x3984, 0x3985, 0x3986, 0x3987,
0x3988, 0x3989, 0x398a, 0x398b, 0x398c, 0x398d, 0x398e, 0x398f, 0x3990,
0x3991, 0x3992, 0x3993, 0x3994, 0x3995, 0x3996, 0x3997, 0x3998, 0x3999,
0x399a, 0x399b, 0x399c, 0x399d, 0x399e, 0x399f, 0x39a0, 0x39a1, 0x39a2,
0x39a3, 0x39a4, 0x39a5, 0x39a6, 0x39a7, 0x39a8, 0x39a9, 0x39aa, 0x39ab,
0x39ac, 0x39ad, 0x39ae, 0x39af, 0x39b0, 0x39b1, 0x39b2, 0x39b3, 0x39b4,
0x39b5, 0x39b6, 0x39b7, 0x39b8, 0x39b9, 0x39ba, 0x39bb, 0x39bc, 0x39bd,
0x39be, 0x39bf, 0x39c0, 0x39c1, 0x39c2, 0x39c3, 0x39c4, 0x39c5, 0x39c6,
0x39c7, 0x39c8, 0x39c9, 0x39ca, 0x39cb, 0x39cc, 0x39cd, 0x39ce, 0x39cf,
0x39d0, 0x39d1, 0x39d2, 0x39d3, 0x39d4, 0x39d5, 0x39d6, 0x39d7, 0x39d8,
0x39d9, 0x39da, 0x39db, 0x39dc, 0x39dd, 0x39de, 0x39df, 0x39e0, 0x39e1,
0x39e2, 0x39e3, 0x39e4, 0x39e5, 0x39e6, 0x39e7, 0x39e8, 0x39e9, 0x39ea,
0x39eb, 0x39ec, 0x39ed, 0x39ee, 0x39ef, 0x39f0, 0x39f1, 0x39f2, 0x39f3,
0x39f4, 0x39f5, 0x39f6, 0x39f7, 0x39f8, 0x39f9, 0x39fa, 0x39fb, 0x39fc,
0x39fd, 0x39fe, 0x39ff, 0x3a00, 0x3a01, 0x3a02, 0x3a03, 0x3a04, 0x3a05,
0x3a06, 0x3a07, 0x3a08, 0x3a09, 0x3a0a, 0x3a0b, 0x3a0c, 0x3a0d, 0x3a0e,
0x3a0f, 0x3a10, 0x3a11, 0x3a12, 0x3a13, 0x3a14, 0x3a15, 0x3a16, 0x3a17,
0x3a18, 0x3a19, 0x3a1a, 0x3a1b, 0x3a1c, 0x3a1d, 0x3a1e, 0x3a1f, 0x3a20,
0x3a21, 0x3a22, 0x3a23, 0x3a24, 0x3a25, 0x3a26, 0x3a27, 0x3a28, 0x3a29,
0x3a2a, 0x3a2b, 0x3a2c, 0x3a2d, 0x3a2e, 0x3a2f, 0x3a30, 0x3a31, 0x3a32,
0x3a33, 0x3a34, 0x3a35, 0x3a36, 0x3a37, 0x3a38, 0x3a39, 0x3a3a, 0x3a3b,
0x3a3c, 0x3a3d, 0x3a3e, 0x3a3f, 0x3a40, 0x3a41, 0x3a42, 0x3a43, 0x3a44,
0x3a45, 0x3a46, 0x3a47, 0x3a48, 0x3a49, 0x3a4a, 0x3a4b, 0x3a4c, 0x3a4d,
0x3a4e, 0x3a4f, 0x3a50, 0x3a51, 0x3a52, 0x3a53, 0x3a54, 0x3a55, 0x3a56,
0x3a57, 0x3a58, 0x3a59, 0x3a5a, 0x3a5b, 0x3a5c, 0x3a5d, 0x3a5e, 0x3a5f,
0x3a60, 0x3a61, 0x3a62, 0x3a63, 0x3a64, 0x3a65, 0x3a66, 0x3a67, 0x3a68,
0x3a69, 0x3a6a, 0x3a6b, 0x3a6c, 0x3a6d, 0x3a6e, 0x3a6f, 0x3a70, 0x3a71,
0x3a72, 0x3a73, 0x3a74, 0x3a75, 0x3a76, 0x3a77, 0x3a78, 0x3a79, 0x3a7a,
0x3a7b, 0x3a7c, 0x3a7d, 0x3a7e, 0x3a7f, 0x3a80, 0x3a81, 0x3a82, 0x3a83,
0x3a84, 0x3a85, 0x3a86, 0x3a87, 0x3a88, 0x3a89, 0x3a8a, 0x3a8b, 0x3a8c,
0x3a8d, 0x3a8e, 0x3a8f, 0x3a90, 0x3a91, 0x3a92, 0x3a93, 0x3a94, 0x3a95,
0x3a96, 0x3a97, 0x3a98, 0x3a99, 0x3a9a, 0x3a9b, 0x3a9c, 0x3a9d, 0x3a9e,
0x3a9f, 0x3aa0, 0x3aa1, 0x3aa2, 0x3aa3, 0x3aa4, 0x3aa5, 0x3aa6, 0x3aa7,
0x3aa8, 0x3aa9, 0x3aaa, 0x3aab, 0x3aac, 0x3aad, 0x3aae, 0x3aaf, 0x3ab0,
0x3ab1, 0x3ab2, 0x3ab3, 0x3ab4, 0x3ab5, 0x3ab6, 0x3ab7, 0x3ab8, 0x3ab9,
0x3aba, 0x3abb, 0x3abc, 0x3abd, 0x3abe, 0x3abf, 0x3ac0, 0x3ac1, 0x3ac2,
0x3ac3, 0x3ac4, 0x3ac5, 0x3ac6, 0x3ac7, 0x3ac8, 0x3ac9, 0x3aca, 0x3acb,
0x3acc, 0x3acd, 0x3ace, 0x3acf, 0x3ad0, 0x3ad1, 0x3ad2, 0x3ad3, 0x3ad4,
0x3ad5, 0x3ad6, 0x3ad7, 0x3ad8, 0x3ad9, 0x3ada, 0x3adb, 0x3adc, 0x3add,
0x3ade, 0x3adf, 0x3ae0, 0x3ae1, 0x3ae2, 0x3ae3, 0x3ae4, 0x3ae5, 0x3ae6,
0x3ae7, 0x3ae8, 0x3ae9, 0x3aea, 0x3aeb, 0x3aec, 0x3aed, 0x3aee, 0x3aef,
0x3af0, 0x3af1, 0x3af2, 0x3af3, 0x3af4, 0x3af5, 0x3af6, 0x3af7, 0x3af8,
0x3af9, 0x3afa, 0x3afb, 0x3afc, 0x3afd, 0x3afe, 0x3aff, 0x3b00, 0x3b01,
0x3b02, 0x3b03, 0x3b04, 0x3b05, 0x3b06, 0x3b07, 0x3b08, 0x3b09, 0x3b0a,
0x3b0b, 0x3b0c, 0x3b0d, 0x3b0e, 0x3b0f, 0x3b10, 0x3b11, 0x3b12, 0x3b13,
0x3b14, 0x3b15, 0x3b16, 0x3b17, 0x3b18, 0x3b19, 0x3b1a, 0x3b1b, 0x3b1c,
0x3b1d, 0x3b1e, 0x3b1f, 0x3b20, 0x3b21, 0x3b22, 0x3b23, 0x3b24, 0x3b25,
0x3b26, 0x3b27, 0x3b28, 0x3b29, 0x3b2a, 0x3b2b, 0x3b2c, 0x3b2d, 0x3b2e,
0x3b2f, 0x3b30, 0x3b31, 0x3b32, 0x3b33, 0x3b34, 0x3b35, 0x3b36, 0x3b37,
0x3b38, 0x3b39, 0x3b3a, 0x3b3b, 0x3b3c, 0x3b3d, 0x3b3e, 0x3b3f, 0x3b40,
0x3b41, 0x3b42, 0x3b43, 0x3b44, 0x3b45, 0x3b46, 0x3b47, 0x3b48, 0x3b49,
0x3b4a, 0x3b4b, 0x3b4c, 0x3b4d, 0x3b4e, 0x3b4f, 0x3b50, 0x3b51, 0x3b52,
0x3b53, 0x3b54, 0x3b55, 0x3b56, 0x3b57, 0x3b58, 0x3b59, 0x3b5a, 0x3b5b,
0x3b5c, 0x3b5d, 0x3b5e, 0x3b5f, 0x3b60, 0x3b61, 0x3b62, 0x3b63, 0x3b64,
0x3b65, 0x3b66, 0x3b67, 0x3b68, 0x3b69, 0x3b6a, 0x3b6b, 0x3b6c, 0x3b6d,
0x3b6e, 0x3b6f, 0x3b70, 0x3b71, 0x3b72, 0x3b73, 0x3b74, 0x3b75, 0x3b76,
0x3b77, 0x3b78, 0x3b79, 0x3b7a, 0x3b7b, 0x3b7c, 0x3b7d, 0x3b7e, 0x3b7f,
0x3b80, 0x3b81, 0x3b82, 0x3b83, 0x3b84, 0x3b85, 0x3b86, 0x3b87, 0x3b88,
0x3b89, 0x3b8a, 0x3b8b, 0x3b8c, 0x3b8d, 0x3b8e, 0x3b8f, 0x3b90, 0x3b91,
0x3b92, 0x3b93, 0x3b94, 0x3b95, 0x3b96, 0x3b97, 0x3b98, 0x3b99, 0x3b9a,
0x3b9b, 0x3b9c, 0x3b9d, 0x3b9e, 0x3b9f, 0x3ba0, 0x3ba1, 0x3ba2, 0x3ba3,
0x3ba4, 0x3ba5, 0x3ba6, 0x3ba7, 0x3ba8, 0x3ba9, 0x3baa, 0x3bab, 0x3bac,
0x3bad, 0x3bae, 0x3baf, 0x3bb0, 0x3bb1, 0x3bb2, 0x3bb3, 0x3bb4, 0x3bb5,
0x3bb6, 0x3bb7, 0x3bb8, 0x3bb9, 0x3bba, 0x3bbb, 0x3bbc, 0x3bbd, 0x3bbe,
0x3bbf, 0x3bc0, 0x3bc1, 0x3bc2, 0x3bc3, 0x3bc4, 0x3bc5, 0x3bc6, 0x3bc7,
0x3bc8, 0x3bc9, 0x3bca, 0x3bcb, 0x3bcc, 0x3bcd, 0x3bce, 0x3bcf, 0x3bd0,
0x3bd1, 0x3bd2, 0x3bd3, 0x3bd4, 0x3bd5, 0x3bd6, 0x3bd7, 0x3bd8, 0x3bd9,
0x3bda, 0x3bdb, 0x3bdc, 0x3bdd, 0x3bde, 0x3bdf, 0x3be0, 0x3be1, 0x3be2,
0x3be3, 0x3be4, 0x3be5, 0x3be6, 0x3be7, 0x3be8, 0x3be9, 0x3bea, 0x3beb,
0x3bec, 0x3bed, 0x3bee, 0x3bef, 0x3bf0, 0x3bf1, 0x3bf2, 0x3bf3, 0x3bf4,
0x3bf5, 0x3bf6, 0x3bf7, 0x3bf8, 0x3bf9, 0x3bfa, 0x3bfb, 0x3bfc, 0x3bfd,
0x3bfe, 0x3bff, 0x3c00, 0x3c01, 0x3c02, 0x3c03, 0x3c04, 0x3c05, 0x3c06,
0x3c07, 0x3c08, 0x3c09, 0x3c0a, 0x3c0b, 0x3c0c, 0x3c0d, 0x3c0e, 0x3c0f,
0x3c10, 0x3c11, 0x3c12, 0x3c13, 0x3c14, 0x3c15, 0x3c16, 0x3c17, 0x3c18,
0x3c19, 0x3c1a, 0x3c1b, 0x3c1c, 0x3c1d, 0x3c1e, 0x3c1f, 0x3c20, 0x3c21,
0x3c22, 0x3c23, 0x3c24, 0x3c25, 0x3c26, 0x3c27, 0x3c28, 0x3c29, 0x3c2a,
0x3c2b, 0x3c2c, 0x3c2d, 0x3c2e, 0x3c2f, 0x3c30, 0x3c31, 0x3c32, 0x3c33,
0x3c34, 0x3c35, 0x3c36, 0x3c37, 0x3c38, 0x3c39, 0x3c3a, 0x3c3b, 0x3c3c,
0x3c3d, 0x3c3e, 0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0x3c43, 0x3c44, 0x3c45,
0x3c46, 0x3c47, 0x3c48, 0x3c49, 0x3c4a, 0x3c4b, 0x3c4c, 0x3c4d, 0x3c4e,
0x3c4f, 0x3c50, 0x3c51, 0x3c52, 0x3c53, 0x3c54, 0x3c55, 0x3c56, 0x3c57,
0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0x3c5c, 0x3c5d, 0x3c5e, 0x3c5f, 0x3c60,
0x3c61, 0x3c62, 0x3c63, 0x3c64, 0x3c65, 0x3c66, 0x3c67, 0x3c68, 0x3c69,
0x3c6a, 0x3c6b, 0x3c6c, 0x3c6d, 0x3c6e, 0x3c6f, 0x3c70, 0x3c71, 0x3c72,
0x3c73, 0x3c74, 0x3c75, 0x3c76, 0x3c77, 0x3c78, 0x3c79, 0x3c7a, 0x3c7b,
0x3c7c, 0x3c7d, 0x3c7e, 0x3c7f, 0x3c80, 0x3c81, 0x3c82, 0x3c83, 0x3c84,
0x3c85, 0x3c86, 0x3c87, 0x3c88, 0x3c89, 0x3c8a, 0x3c8b, 0x3c8c, 0x3c8d,
0x3c8e, 0x3c8f, 0x3c90, 0x3c91, 0x3c92, 0x3c93, 0x3c94, 0x3c95, 0x3c96,
0x3c97, 0x3c98, 0x3c99, 0x3c9a, 0x3c9b, 0x3c9c, 0x3c9d, 0x3c9e, 0x3c9f,
0x3ca0, 0x3ca1, 0x3ca2, 0x3ca3, 0x3ca4, 0x3ca5, 0x3ca6, 0x3ca7, 0x3ca8,
0x3ca9, 0x3caa, 0x3cab, 0x3cac, 0x3cad, 0x3cae, 0x3caf, 0x3cb0, 0x3cb1,
0x3cb2, 0x3cb3, 0x3cb4, 0x3cb5, 0x3cb6, 0x3cb7, 0x3cb8, 0x3cb9, 0x3cba,
0x3cbb, 0x3cbc, 0x3cbd, 0x3cbe, 0x3cbf, 0x3cc0, 0x3cc1, 0x3cc2, 0x3cc3,
0x3cc4, 0x3cc5, 0x3cc6, 0x3cc7, 0x3cc8, 0x3cc9, 0x3cca, 0x3ccb, 0x3ccc,
0x3ccd, 0x3cce, 0x3ccf, 0x3cd0, 0x3cd1, 0x3cd2, 0x3cd3, 0x3cd4, 0x3cd5,
0x3cd6, 0x3cd7, 0x3cd8, 0x3cd9, 0x3cda, 0x3cdb, 0x3cdc, 0x3cdd, 0x3cde,
0x3cdf, 0x3ce0, 0x3ce1, 0x3ce2, 0x3ce3, 0x3ce4, 0x3ce5, 0x3ce6, 0x3ce7,
0x3ce8, 0x3ce9, 0x3cea, 0x3ceb, 0x3cec, 0x3ced, 0x3cee, 0x3cef, 0x3cf0,
0x3cf1, 0x3cf2, 0x3cf3, 0x3cf4, 0x3cf5, 0x3cf6, 0x3cf7, 0x3cf8, 0x3cf9,
0x3cfa, 0x3cfb, 0x3cfc, 0x3cfd, 0x3cfe, 0x3cff, 0x3d00, 0x3d01, 0x3d02,
0x3d03, 0x3d04, 0x3d05, 0x3d06, 0x3d07, 0x3d08, 0x3d09, 0x3d0a, 0x3d0b,
0x3d0c, 0x3d0d, 0x3d0e, 0x3d0f, 0x3d10, 0x3d11, 0x3d12, 0x3d13, 0x3d14,
0x3d15, 0x3d16, 0x3d17, 0x3d18, 0x3d19, 0x3d1a, 0x3d1b, 0x3d1c, 0x3d1d,
0x3d1e, 0x3d1f, 0x3d20, 0x3d21, 0x3d22, 0x3d23, 0x3d24, 0x3d25, 0x3d26,
0x3d27, 0x3d28, 0x3d29, 0x3d2a, 0x3d2b, 0x3d2c, 0x3d2d, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 0x4f3d, 0x4f73, 0x5047, 0x50f9, 0x52a0, 0x53ef, 0x5475,
0x54e5, 0x5609, 0x5ac1, 0x5bb6, 0x6687, 0x67b6, 0x67b7, 0x67ef, 0x6b4c,
0x73c2, 0x75c2, 0x7a3c, 0x82db, 0x8304, 0x8857, 0x8888, 0x8a36, 0x8cc8,
0x8dcf, 0x8efb, 0x8fe6, 0x99d5, 0x523b, 0x5374, 0x5404, 0x606a, 0x6164,
0x6bbc, 0x73cf, 0x811a, 0x89ba, 0x89d2, 0x95a3, 0x4f83, 0x520a, 0x58be,
0x5978, 0x59e6, 0x5e72, 0x5e79, 0x61c7, 0x63c0, 0x6746, 0x67ec, 0x687f,
0x6f97, 0x764e, 0x770b, 0x78f5, 0x7a08, 0x7aff, 0x7c21, 0x809d, 0x826e,
0x8271, 0x8aeb, 0x9593, 0x4e6b, 0x559d, 0x66f7, 0x6e34, 0x78a3, 0x7aed,
0x845b, 0x8910, 0x874e, 0x97a8, 0x52d8, 0x574e, 0x582a, 0x5d4c, 0x611f,
0x61be, 0x6221, 0x6562, 0x67d1, 0x6a44, 0x6e1b, 0x7518, 0x75b3, 0x76e3,
0x77b0, 0x7d3a, 0x90af, 0x9451, 0x9452, 0x9f95, 0x5323, 0x5cac, 0x7532,
0x80db, 0x9240, 0x9598, 0x525b, 0x5808, 0x59dc, 0x5ca1, 0x5d17, 0x5eb7,
0x5f3a, 0x5f4a, 0x6177, 0x6c5f, 0x757a, 0x7586, 0x7ce0, 0x7d73, 0x7db1,
0x7f8c, 0x8154, 0x8221, 0x8591, 0x8941, 0x8b1b, 0x92fc, 0x964d, 0x9c47,
0x4ecb, 0x4ef7, 0x500b, 0x51f1, 0x584f, 0x6137, 0x613e, 0x6168, 0x6539,
0x69ea, 0x6f11, 0x75a5, 0x7686, 0x76d6, 0x7b87, 0x82a5, 0x84cb, 0xf900,
0x93a7, 0x958b, 0x5580, 0x5ba2, 0x5751, 0xf901, 0x7cb3, 0x7fb9, 0x91b5,
0x5028, 0x53bb, 0x5c45, 0x5de8, 0x62d2, 0x636e, 0x64da, 0x64e7, 0x6e20,
0x70ac, 0x795b, 0x8ddd, 0x8e1e, 0xf902, 0x907d, 0x9245, 0x92f8, 0x4e7e,
0x4ef6, 0x5065, 0x5dfe, 0x5efa, 0x6106, 0x6957, 0x8171, 0x8654, 0x8e47,
0x9375, 0x9a2b, 0x4e5e, 0x5091, 0x6770, 0x6840, 0x5109, 0x528d, 0x5292,
0x6aa2, 0x77bc, 0x9210, 0x9ed4, 0x52ab, 0x602f, 0x8ff2, 0x5048, 0x61a9,
0x63ed, 0x64ca, 0x683c, 0x6a84, 0x6fc0, 0x8188, 0x89a1, 0x9694, 0x5805,
0x727d, 0x72ac, 0x7504, 0x7d79, 0x7e6d, 0x80a9, 0x898b, 0x8b74, 0x9063,
0x9d51, 0x6289, 0x6c7a, 0x6f54, 0x7d50, 0x7f3a, 0x8a23, 0x517c, 0x614a,
0x7b9d, 0x8b19, 0x9257, 0x938c, 0x4eac, 0x4fd3, 0x501e, 0x50be, 0x5106,
0x52c1, 0x52cd, 0x537f, 0x5770, 0x5883, 0x5e9a, 0x5f91, 0x6176, 0x61ac,
0x64ce, 0x656c, 0x666f, 0x66bb, 0x66f4, 0x6897, 0x6d87, 0x7085, 0x70f1,
0x749f, 0x74a5, 0x74ca, 0x75d9, 0x786c, 0x78ec, 0x7adf, 0x7af6, 0x7d45,
0x7d93, 0x8015, 0x803f, 0x811b, 0x8396, 0x8b66, 0x8f15, 0x9015, 0x93e1,
0x9803, 0x9838, 0x9a5a, 0x9be8, 0x4fc2, 0x5553, 0x583a, 0x5951, 0x5b63,
0x5c46, 0x60b8, 0x6212, 0x6842, 0x68b0, 0x68e8, 0x6eaa, 0x754c, 0x7678,
0x78ce, 0x7a3d, 0x7cfb, 0x7e6b, 0x7e7c, 0x8a08, 0x8aa1, 0x8c3f, 0x968e,
0x9dc4, 0x53e4, 0x53e9, 0x544a, 0x5471, 0x56fa, 0x59d1, 0x5b64, 0x5c3b,
0x5eab, 0x62f7, 0x6537, 0x6545, 0x6572, 0x66a0, 0x67af, 0x69c1, 0x6cbd,
0x75fc, 0x7690, 0x777e, 0x7a3f, 0x7f94, 0x8003, 0x80a1, 0x818f, 0x82e6,
0x82fd, 0x83f0, 0x85c1, 0x8831, 0x88b4, 0x8aa5, 0xf903, 0x8f9c, 0x932e,
0x96c7, 0x9867, 0x9ad8, 0x9f13, 0x54ed, 0x659b, 0x66f2, 0x688f, 0x7a40,
0x8c37, 0x9d60, 0x56f0, 0x5764, 0x5d11, 0x6606, 0x68b1, 0x68cd, 0x6efe,
0x7428, 0x889e, 0x9be4, 0x6c68, 0xf904, 0x9aa8, 0x4f9b, 0x516c, 0x5171,
0x529f, 0x5b54, 0x5de5, 0x6050, 0x606d, 0x62f1, 0x63a7, 0x653b, 0x73d9,
0x7a7a, 0x86a3, 0x8ca2, 0x978f, 0x4e32, 0x5be1, 0x6208, 0x679c, 0x74dc,
0x79d1, 0x83d3, 0x8a87, 0x8ab2, 0x8de8, 0x904e, 0x934b, 0x9846, 0x5ed3,
0x69e8, 0x85ff, 0x90ed, 0xf905, 0x51a0, 0x5b98, 0x5bec, 0x6163, 0x68fa,
0x6b3e, 0x704c, 0x742f, 0x74d8, 0x7ba1, 0x7f50, 0x83c5, 0x89c0, 0x8cab,
0x95dc, 0x9928, 0x522e, 0x605d, 0x62ec, 0x9002, 0x4f8a, 0x5149, 0x5321,
0x58d9, 0x5ee3, 0x66e0, 0x6d38, 0x709a, 0x72c2, 0x73d6, 0x7b50, 0x80f1,
0x945b, 0x5366, 0x639b, 0x7f6b, 0x4e56, 0x5080, 0x584a, 0x58de, 0x602a,
0x6127, 0x62d0, 0x69d0, 0x9b41, 0x5b8f, 0x7d18, 0x80b1, 0x8f5f, 0x4ea4,
0x50d1, 0x54ac, 0x55ac, 0x5b0c, 0x5da0, 0x5de7, 0x652a, 0x654e, 0x6821,
0x6a4b, 0x72e1, 0x768e, 0x77ef, 0x7d5e, 0x7ff9, 0x81a0, 0x854e, 0x86df,
0x8f03, 0x8f4e, 0x90ca, 0x9903, 0x9a55, 0x9bab, 0x4e18, 0x4e45, 0x4e5d,
0x4ec7, 0x4ff1, 0x5177, 0x52fe, 0x5340, 0x53e3, 0x53e5, 0x548e, 0x5614,
0x5775, 0x57a2, 0x5bc7, 0x5d87, 0x5ed0, 0x61fc, 0x62d8, 0x6551, 0x67b8,
0x67e9, 0x69cb, 0x6b50, 0x6bc6, 0x6bec, 0x6c42, 0x6e9d, 0x7078, 0x72d7,
0x7396, 0x7403, 0x77bf, 0x77e9, 0x7a76, 0x7d7f, 0x8009, 0x81fc, 0x8205,
0x820a, 0x82df, 0x8862, 0x8b33, 0x8cfc, 0x8ec0, 0x9011, 0x90b1, 0x9264,
0x92b6, 0x99d2, 0x9a45, 0x9ce9, 0x9dd7, 0x9f9c, 0x570b, 0x5c40, 0x83ca,
0x97a0, 0x97ab, 0x9eb4, 0x541b, 0x7a98, 0x7fa4, 0x88d9, 0x8ecd, 0x90e1,
0x5800, 0x5c48, 0x6398, 0x7a9f, 0x5bae, 0x5f13, 0x7a79, 0x7aae, 0x828e,
0x8eac, 0x5026, 0x5238, 0x52f8, 0x5377, 0x5708, 0x62f3, 0x6372, 0x6b0a,
0x6dc3, 0x7737, 0x53a5, 0x7357, 0x8568, 0x8e76, 0x95d5, 0x673a, 0x6ac3,
0x6f70, 0x8a6d, 0x8ecc, 0x994b, 0xf906, 0x6677, 0x6b78, 0x8cb4, 0x9b3c,
0xf907, 0x53eb, 0x572d, 0x594e, 0x63c6, 0x69fb, 0x73ea, 0x7845, 0x7aba,
0x7ac5, 0x7cfe, 0x8475, 0x898f, 0x8d73, 0x9035, 0x95a8, 0x52fb, 0x5747,
0x7547, 0x7b60, 0x83cc, 0x921e, 0xf908, 0x6a58, 0x514b, 0x524b, 0x5287,
0x621f, 0x68d8, 0x6975, 0x9699, 0x50c5, 0x52a4, 0x52e4, 0x61c3, 0x65a4,
0x6839, 0x69ff, 0x747e, 0x7b4b, 0x82b9, 0x83eb, 0x89b2, 0x8b39, 0x8fd1,
0x9949, 0xf909, 0x4eca, 0x5997, 0x64d2, 0x6611, 0x6a8e, 0x7434, 0x7981,
0x79bd, 0x82a9, 0x887e, 0x887f, 0x895f, 0xf90a, 0x9326, 0x4f0b, 0x53ca,
0x6025, 0x6271, 0x6c72, 0x7d1a, 0x7d66, 0x4e98, 0x5162, 0x77dc, 0x80af,
0x4f01, 0x4f0e, 0x5176, 0x5180, 0x55dc, 0x5668, 0x573b, 0x57fa, 0x57fc,
0x5914, 0x5947, 0x5993, 0x5bc4, 0x5c90, 0x5d0e, 0x5df1, 0x5e7e, 0x5fcc,
0x6280, 0x65d7, 0x65e3, 0x671e, 0x671f, 0x675e, 0x68cb, 0x68c4, 0x6a5f,
0x6b3a, 0x6c23, 0x6c7d, 0x6c82, 0x6dc7, 0x7398, 0x7426, 0x742a, 0x7482,
0x74a3, 0x7578, 0x757f, 0x7881, 0x78ef, 0x7941, 0x7947, 0x7948, 0x797a,
0x7b95, 0x7d00, 0x7dba, 0x7f88, 0x8006, 0x802d, 0x808c, 0x8a18, 0x8b4f,
0x8c48, 0x8d77, 0x9321, 0x9324, 0x98e2, 0x9951, 0x9a0e, 0x9a0f, 0x9a65,
0x9e92, 0x7dca, 0x4f76, 0x5409, 0x62ee, 0x6854, 0x91d1, 0x55ab, 0x513a,
0xf90b, 0xf90c, 0x5a1c, 0x61e6, 0xf90d, 0x62cf, 0x62ff, 0xf90e, 0xf90f,
0xf910, 0xf911, 0xf912, 0xf913, 0x90a3, 0xf914, 0xf915, 0xf916, 0xf917,
0xf918, 0x8afe, 0xf919, 0xf91a, 0xf91b, 0xf91c, 0x6696, 0xf91d, 0x7156,
0xf91e, 0xf91f, 0x96e3, 0xf920, 0x634f, 0x637a, 0x5357, 0xf921, 0x678f,
0x6960, 0x6e73, 0xf922, 0x7537, 0xf923, 0xf924, 0xf925, 0x7d0d, 0xf926,
0xf927, 0x8872, 0x56ca, 0x5a18, 0xf928, 0xf929, 0xf92a, 0xf92b, 0xf92c,
0x4e43, 0xf92d, 0x5167, 0x5948, 0x67f0, 0x8010, 0xf92e, 0x5973, 0x5e74,
0x649a, 0x79ca, 0x5ff5, 0x606c, 0x62c8, 0x637b, 0x5be7, 0x5bd7, 0x52aa,
0xf92f, 0x5974, 0x5f29, 0x6012, 0xf930, 0xf931, 0xf932, 0x7459, 0xf933,
0xf934, 0xf935, 0xf936, 0xf937, 0xf938, 0x99d1, 0xf939, 0xf93a, 0xf93b,
0xf93c, 0xf93d, 0xf93e, 0xf93f, 0xf940, 0xf941, 0xf942, 0xf943, 0x6fc3,
0xf944, 0xf945, 0x81bf, 0x8fb2, 0x60f1, 0xf946, 0xf947, 0x8166, 0xf948,
0xf949, 0x5c3f, 0xf94a, 0xf94b, 0xf94c, 0xf94d, 0xf94e, 0xf94f, 0xf950,
0xf951, 0x5ae9, 0x8a25, 0x677b, 0x7d10, 0xf952, 0xf953, 0xf954, 0xf955,
0xf956, 0xf957, 0x80fd, 0xf958, 0xf959, 0x5c3c, 0x6ce5, 0x533f, 0x6eba,
0x591a, 0x8336, 0x4e39, 0x4eb6, 0x4f46, 0x55ae, 0x5718, 0x58c7, 0x5f56,
0x65b7, 0x65e6, 0x6a80, 0x6bb5, 0x6e4d, 0x77ed, 0x7aef, 0x7c1e, 0x7dde,
0x86cb, 0x8892, 0x9132, 0x935b, 0x64bb, 0x6fbe, 0x737a, 0x75b8, 0x9054,
0x5556, 0x574d, 0x61ba, 0x64d4, 0x66c7, 0x6de1, 0x6e5b, 0x6f6d, 0x6fb9,
0x75f0, 0x8043, 0x81bd, 0x8541, 0x8983, 0x8ac7, 0x8b5a, 0x931f, 0x6c93,
0x7553, 0x7b54, 0x8e0f, 0x905d, 0x5510, 0x5802, 0x5858, 0x5e62, 0x6207,
0x649e, 0x68e0, 0x7576, 0x7cd6, 0x87b3, 0x9ee8, 0x4ee3, 0x5788, 0x576e,
0x5927, 0x5c0d, 0x5cb1, 0x5e36, 0x5f85, 0x6234, 0x64e1, 0x73b3, 0x81fa,
0x888b, 0x8cb8, 0x968a, 0x9edb, 0x5b85, 0x5fb7, 0x60b3, 0x5012, 0x5200,
0x5230, 0x5716, 0x5835, 0x5857, 0x5c0e, 0x5c60, 0x5cf6, 0x5d8b, 0x5ea6,
0x5f92, 0x60bc, 0x6311, 0x6389, 0x6417, 0x6843, 0x68f9, 0x6ac2, 0x6dd8,
0x6e21, 0x6ed4, 0x6fe4, 0x71fe, 0x76dc, 0x7779, 0x79b1, 0x7a3b, 0x8404,
0x89a9, 0x8ced, 0x8df3, 0x8e48, 0x9003, 0x9014, 0x9053, 0x90fd, 0x934d,
0x9676, 0x97dc, 0x6bd2, 0x7006, 0x7258, 0x72a2, 0x7368, 0x7763, 0x79bf,
0x7be4, 0x7e9b, 0x8b80, 0x58a9, 0x60c7, 0x6566, 0x65fd, 0x66be, 0x6c8c,
0x711e, 0x71c9, 0x8c5a, 0x9813, 0x4e6d, 0x7a81, 0x4edd, 0x51ac, 0x51cd,
0x52d5, 0x540c, 0x61a7, 0x6771, 0x6850, 0x68df, 0x6d1e, 0x6f7c, 0x75bc,
0x77b3, 0x7ae5, 0x80f4, 0x8463, 0x9285, 0x515c, 0x6597, 0x675c, 0x6793,
0x75d8, 0x7ac7, 0x8373, 0xf95a, 0x8c46, 0x9017, 0x982d, 0x5c6f, 0x81c0,
0x829a, 0x9041, 0x906f, 0x920d, 0x5f97, 0x5d9d, 0x6a59, 0x71c8, 0x767b,
0x7b49, 0x85e4, 0x8b04, 0x9127, 0x9a30, 0x5587, 0x61f6, 0xf95b, 0x7669,
0x7f85, 0x863f, 0x87ba, 0x88f8, 0x908f, 0xf95c, 0x6d1b, 0x70d9, 0x73de,
0x7d61, 0x843d, 0xf95d, 0x916a, 0x99f1, 0xf95e, 0x4e82, 0x5375, 0x6b04,
0x6b12, 0x703e, 0x721b, 0x862d, 0x9e1e, 0x524c, 0x8fa3, 0x5d50, 0x64e5,
0x652c, 0x6b16, 0x6feb, 0x7c43, 0x7e9c, 0x85cd, 0x8964, 0x89bd, 0x62c9,
0x81d8, 0x881f, 0x5eca, 0x6717, 0x6d6a, 0x72fc, 0x7405, 0x746f, 0x8782,
0x90de, 0x4f86, 0x5d0d, 0x5fa0, 0x840a, 0x51b7, 0x63a0, 0x7565, 0x4eae,
0x5006, 0x5169, 0x51c9, 0x6881, 0x6a11, 0x7cae, 0x7cb1, 0x7ce7, 0x826f,
0x8ad2, 0x8f1b, 0x91cf, 0x4fb6, 0x5137, 0x52f5, 0x5442, 0x5eec, 0x616e,
0x623e, 0x65c5, 0x6ada, 0x6ffe, 0x792a, 0x85dc, 0x8823, 0x95ad, 0x9a62,
0x9a6a, 0x9e97, 0x9ece, 0x529b, 0x66c6, 0x6b77, 0x701d, 0x792b, 0x8f62,
0x9742, 0x6190, 0x6200, 0x6523, 0x6f23, 0x7149, 0x7489, 0x7df4, 0x806f,
0x84ee, 0x8f26, 0x9023, 0x934a, 0x51bd, 0x5217, 0x52a3, 0x6d0c, 0x70c8,
0x88c2, 0x5ec9, 0x6582, 0x6bae, 0x6fc2, 0x7c3e, 0x7375, 0x4ee4, 0x4f36,
0x56f9, 0xf95f, 0x5cba, 0x5dba, 0x601c, 0x73b2, 0x7b2d, 0x7f9a, 0x7fce,
0x8046, 0x901e, 0x9234, 0x96f6, 0x9748, 0x9818, 0x9f61, 0x4f8b, 0x6fa7,
0x79ae, 0x91b4, 0x96b7, 0x52de, 0xf960, 0x6488, 0x64c4, 0x6ad3, 0x6f5e,
0x7018, 0x7210, 0x76e7, 0x8001, 0x8606, 0x865c, 0x8def, 0x8f05, 0x9732,
0x9b6f, 0x9dfa, 0x9e75, 0x788c, 0x797f, 0x7da0, 0x83c9, 0x9304, 0x9e7f,
0x9e93, 0x8ad6, 0x58df, 0x5f04, 0x6727, 0x7027, 0x74cf, 0x7c60, 0x807e,
0x5121, 0x7028, 0x7262, 0x78ca, 0x8cc2, 0x8cda, 0x8cf4, 0x96f7, 0x4e86,
0x50da, 0x5bee, 0x5ed6, 0x6599, 0x71ce, 0x7642, 0x77ad, 0x804a, 0x84fc,
0x907c, 0x9b27, 0x9f8d, 0x58d8, 0x5a41, 0x5c62, 0x6a13, 0x6dda, 0x6f0f,
0x763b, 0x7d2f, 0x7e37, 0x851e, 0x8938, 0x93e4, 0x964b, 0x5289, 0x65d2,
0x67f3, 0x69b4, 0x6d41, 0x6e9c, 0x700f, 0x7409, 0x7460, 0x7559, 0x7624,
0x786b, 0x8b2c, 0x985e, 0x516d, 0x622e, 0x9678, 0x4f96, 0x502b, 0x5d19,
0x6dea, 0x7db8, 0x8f2a, 0x5f8b, 0x6144, 0x6817, 0xf961, 0x9686, 0x52d2,
0x808b, 0x51dc, 0x51cc, 0x695e, 0x7a1c, 0x7dbe, 0x83f1, 0x9675, 0x4fda,
0x5229, 0x5398, 0x540f, 0x550e, 0x5c65, 0x60a7, 0x674e, 0x68a8, 0x6d6c,
0x7281, 0x72f8, 0x7406, 0x7483, 0xf962, 0x75e2, 0x7c6c, 0x7f79, 0x7fb8,
0x8389, 0x88cf, 0x88e1, 0x91cc, 0x91d0, 0x96e2, 0x9bc9, 0x541d, 0x6f7e,
0x71d0, 0x7498, 0x85fa, 0x8eaa, 0x96a3, 0x9c57, 0x9e9f, 0x6797, 0x6dcb,
0x7433, 0x81e8, 0x9716, 0x782c, 0x7acb, 0x7b20, 0x7c92, 0x6469, 0x746a,
0x75f2, 0x78bc, 0x78e8, 0x99ac, 0x9b54, 0x9ebb, 0x5bde, 0x5e55, 0x6f20,
0x819c, 0x83ab, 0x9088, 0x4e07, 0x534d, 0x5a29, 0x5dd2, 0x5f4e, 0x6162,
0x633d, 0x6669, 0x66fc, 0x6eff, 0x6f2b, 0x7063, 0x779e, 0x842c, 0x8513,
0x883b, 0x8f13, 0x9945, 0x9c3b, 0x551c, 0x62b9, 0x672b, 0x6cab, 0x8309,
0x896a, 0x977a, 0x4ea1, 0x5984, 0x5fd8, 0x5fd9, 0x671b, 0x7db2, 0x7f54,
0x8292, 0x832b, 0x83bd, 0x8f1e, 0x9099, 0x57cb, 0x59b9, 0x5a92, 0x5bd0,
0x6627, 0x679a, 0x6885, 0x6bcf, 0x7164, 0x7f75, 0x8cb7, 0x8ce3, 0x9081,
0x9b45, 0x8108, 0x8c8a, 0x964c, 0x9a40, 0x9ea5, 0x5b5f, 0x6c13, 0x731b,
0x76f2, 0x76df, 0x840c, 0x51aa, 0x8993, 0x514d, 0x5195, 0x52c9, 0x68c9,
0x6c94, 0x7704, 0x7720, 0x7dbf, 0x7dec, 0x9762, 0x9eb5, 0x6ec5, 0x8511,
0x51a5, 0x540d, 0x547d, 0x660e, 0x669d, 0x6927, 0x6e9f, 0x76bf, 0x7791,
0x8317, 0x84c2, 0x879f, 0x9169, 0x9298, 0x9cf4, 0x8882, 0x4fae, 0x5192,
0x52df, 0x59c6, 0x5e3d, 0x6155, 0x6478, 0x6479, 0x66ae, 0x67d0, 0x6a21,
0x6bcd, 0x6bdb, 0x725f, 0x7261, 0x7441, 0x7738, 0x77db, 0x8017, 0x82bc,
0x8305, 0x8b00, 0x8b28, 0x8c8c, 0x6728, 0x6c90, 0x7267, 0x76ee, 0x7766,
0x7a46, 0x9da9, 0x6b7f, 0x6c92, 0x5922, 0x6726, 0x8499, 0x536f, 0x5893,
0x5999, 0x5edf, 0x63cf, 0x6634, 0x6773, 0x6e3a, 0x732b, 0x7ad7, 0x82d7,
0x9328, 0x52d9, 0x5deb, 0x61ae, 0x61cb, 0x620a, 0x62c7, 0x64ab, 0x65e0,
0x6959, 0x6b66, 0x6bcb, 0x7121, 0x73f7, 0x755d, 0x7e46, 0x821e, 0x8302,
0x856a, 0x8aa3, 0x8cbf, 0x9727, 0x9d61, 0x58a8, 0x9ed8, 0x5011, 0x520e,
0x543b, 0x554f, 0x6587, 0x6c76, 0x7d0a, 0x7d0b, 0x805e, 0x868a, 0x9580,
0x96ef, 0x52ff, 0x6c95, 0x7269, 0x5473, 0x5a9a, 0x5c3e, 0x5d4b, 0x5f4c,
0x5fae, 0x672a, 0x68b6, 0x6963, 0x6e3c, 0x6e44, 0x7709, 0x7c73, 0x7f8e,
0x8587, 0x8b0e, 0x8ff7, 0x9761, 0x9ef4, 0x5cb7, 0x60b6, 0x610d, 0x61ab,
0x654f, 0x65fb, 0x65fc, 0x6c11, 0x6cef, 0x739f, 0x73c9, 0x7de1, 0x9594,
0x5bc6, 0x871c, 0x8b10, 0x525d, 0x535a, 0x62cd, 0x640f, 0x64b2, 0x6734,
0x6a38, 0x6cca, 0x73c0, 0x749e, 0x7b94, 0x7c95, 0x7e1b, 0x818a, 0x8236,
0x8584, 0x8feb, 0x96f9, 0x99c1, 0x4f34, 0x534a, 0x53cd, 0x53db, 0x62cc,
0x642c, 0x6500, 0x6591, 0x69c3, 0x6cee, 0x6f58, 0x73ed, 0x7554, 0x7622,
0x76e4, 0x76fc, 0x78d0, 0x78fb, 0x792c, 0x7d46, 0x822c, 0x87e0, 0x8fd4,
0x9812, 0x98ef, 0x52c3, 0x62d4, 0x64a5, 0x6e24, 0x6f51, 0x767c, 0x8dcb,
0x91b1, 0x9262, 0x9aee, 0x9b43, 0x5023, 0x508d, 0x574a, 0x59a8, 0x5c28,
0x5e47, 0x5f77, 0x623f, 0x653e, 0x65b9, 0x65c1, 0x6609, 0x678b, 0x699c,
0x6ec2, 0x78c5, 0x7d21, 0x80aa, 0x8180, 0x822b, 0x82b3, 0x84a1, 0x868c,
0x8a2a, 0x8b17, 0x90a6, 0x9632, 0x9f90, 0x500d, 0x4ff3, 0xf963, 0x57f9,
0x5f98, 0x62dc, 0x6392, 0x676f, 0x6e43, 0x7119, 0x76c3, 0x80cc, 0x80da,
0x88f4, 0x88f5, 0x8919, 0x8ce0, 0x8f29, 0x914d, 0x966a, 0x4f2f, 0x4f70,
0x5e1b, 0x67cf, 0x6822, 0x767d, 0x767e, 0x9b44, 0x5e61, 0x6a0a, 0x7169,
0x71d4, 0x756a, 0xf964, 0x7e41, 0x8543, 0x85e9, 0x98dc, 0x4f10, 0x7b4f,
0x7f70, 0x95a5, 0x51e1, 0x5e06, 0x68b5, 0x6c3e, 0x6c4e, 0x6cdb, 0x72af,
0x7bc4, 0x8303, 0x6cd5, 0x743a, 0x50fb, 0x5288, 0x58c1, 0x64d8, 0x6a97,
0x74a7, 0x7656, 0x78a7, 0x8617, 0x95e2, 0x9739, 0xf965, 0x535e, 0x5f01,
0x8b8a, 0x8fa8, 0x8faf, 0x908a, 0x5225, 0x77a5, 0x9c49, 0x9f08, 0x4e19,
0x5002, 0x5175, 0x5c5b, 0x5e77, 0x661e, 0x663a, 0x67c4, 0x68c5, 0x70b3,
0x7501, 0x75c5, 0x79c9, 0x7add, 0x8f27, 0x9920, 0x9a08, 0x4fdd, 0x5821,
0x5831, 0x5bf6, 0x666e, 0x6b65, 0x6d11, 0x6e7a, 0x6f7d, 0x73e4, 0x752b,
0x83e9, 0x88dc, 0x8913, 0x8b5c, 0x8f14, 0x4f0f, 0x50d5, 0x5310, 0x535c,
0x5b93, 0x5fa9, 0x670d, 0x798f, 0x8179, 0x832f, 0x8514, 0x8907, 0x8986,
0x8f39, 0x8f3b, 0x99a5, 0x9c12, 0x672c, 0x4e76, 0x4ff8, 0x5949, 0x5c01,
0x5cef, 0x5cf0, 0x6367, 0x68d2, 0x70fd, 0x71a2, 0x742b, 0x7e2b, 0x84ec,
0x8702, 0x9022, 0x92d2, 0x9cf3, 0x4e0d, 0x4ed8, 0x4fef, 0x5085, 0x5256,
0x526f, 0x5426, 0x5490, 0x57e0, 0x592b, 0x5a66, 0x5b5a, 0x5b75, 0x5bcc,
0x5e9c, 0xf966, 0x6276, 0x6577, 0x65a7, 0x6d6e, 0x6ea5, 0x7236, 0x7b26,
0x7c3f, 0x7f36, 0x8150, 0x8151, 0x819a, 0x8240, 0x8299, 0x83a9, 0x8a03,
0x8ca0, 0x8ce6, 0x8cfb, 0x8d74, 0x8dba, 0x90e8, 0x91dc, 0x961c, 0x9644,
0x99d9, 0x9ce7, 0x5317, 0x5206, 0x5429, 0x5674, 0x58b3, 0x5954, 0x596e,
0x5fff, 0x61a4, 0x626e, 0x6610, 0x6c7e, 0x711a, 0x76c6, 0x7c89, 0x7cde,
0x7d1b, 0x82ac, 0x8cc1, 0x96f0, 0xf967, 0x4f5b, 0x5f17, 0x5f7f, 0x62c2,
0x5d29, 0x670b, 0x68da, 0x787c, 0x7e43, 0x9d6c, 0x4e15, 0x5099, 0x5315,
0x532a, 0x5351, 0x5983, 0x5a62, 0x5e87, 0x60b2, 0x618a, 0x6249, 0x6279,
0x6590, 0x6787, 0x69a7, 0x6bd4, 0x6bd6, 0x6bd7, 0x6bd8, 0x6cb8, 0xf968,
0x7435, 0x75fa, 0x7812, 0x7891, 0x79d5, 0x79d8, 0x7c83, 0x7dcb, 0x7fe1,
0x80a5, 0x813e, 0x81c2, 0x83f2, 0x871a, 0x88e8, 0x8ab9, 0x8b6c, 0x8cbb,
0x9119, 0x975e, 0x98db, 0x9f3b, 0x56ac, 0x5b2a, 0x5f6c, 0x658c, 0x6ab3,
0x6baf, 0x6d5c, 0x6ff1, 0x7015, 0x725d, 0x73ad, 0x8ca7, 0x8cd3, 0x983b,
0x6191, 0x6c37, 0x8058, 0x9a01, 0x4e4d, 0x4e8b, 0x4e9b, 0x4ed5, 0x4f3a,
0x4f3c, 0x4f7f, 0x4fdf, 0x50ff, 0x53f2, 0x53f8, 0x5506, 0x55e3, 0x56db,
0x58eb, 0x5962, 0x5a11, 0x5beb, 0x5bfa, 0x5c04, 0x5df3, 0x5e2b, 0x5f99,
0x601d, 0x6368, 0x659c, 0x65af, 0x67f6, 0x67fb, 0x68ad, 0x6b7b, 0x6c99,
0x6cd7, 0x6e23, 0x7009, 0x7345, 0x7802, 0x793e, 0x7940, 0x7960, 0x79c1,
0x7be9, 0x7d17, 0x7d72, 0x8086, 0x820d, 0x838e, 0x84d1, 0x86c7, 0x88df,
0x8a50, 0x8a5e, 0x8b1d, 0x8cdc, 0x8d66, 0x8fad, 0x90aa, 0x98fc, 0x99df,
0x9e9d, 0x524a, 0xf969, 0x6714, 0xf96a, 0x5098, 0x522a, 0x5c71, 0x6563,
0x6c55, 0x73ca, 0x7523, 0x759d, 0x7b97, 0x849c, 0x9178, 0x9730, 0x4e77,
0x6492, 0x6bba, 0x715e, 0x85a9, 0x4e09, 0xf96b, 0x6749, 0x68ee, 0x6e17,
0x829f, 0x8518, 0x886b, 0x63f7, 0x6f81, 0x9212, 0x98af, 0x4e0a, 0x50b7,
0x50cf, 0x511f, 0x5546, 0x55aa, 0x5617, 0x5b40, 0x5c19, 0x5ce0, 0x5e38,
0x5e8a, 0x5ea0, 0x5ec2, 0x60f3, 0x6851, 0x6a61, 0x6e58, 0x723d, 0x7240,
0x72c0, 0x76f8, 0x7965, 0x7bb1, 0x7fd4, 0x88f3, 0x89f4, 0x8a73, 0x8c61,
0x8cde, 0x971c, 0x585e, 0x74bd, 0x8cfd, 0x55c7, 0xf96c, 0x7a61, 0x7d22,
0x8272, 0x7272, 0x751f, 0x7525, 0xf96d, 0x7b19, 0x5885, 0x58fb, 0x5dbc,
0x5e8f, 0x5eb6, 0x5f90, 0x6055, 0x6292, 0x637f, 0x654d, 0x6691, 0x66d9,
0x66f8, 0x6816, 0x68f2, 0x7280, 0x745e, 0x7b6e, 0x7d6e, 0x7dd6, 0x7f72,
0x80e5, 0x8212, 0x85af, 0x897f, 0x8a93, 0x901d, 0x92e4, 0x9ecd, 0x9f20,
0x5915, 0x596d, 0x5e2d, 0x60dc, 0x6614, 0x6673, 0x6790, 0x6c50, 0x6dc5,
0x6f5f, 0x77f3, 0x78a9, 0x84c6, 0x91cb, 0x932b, 0x4ed9, 0x50ca, 0x5148,
0x5584, 0x5b0b, 0x5ba3, 0x6247, 0x657e, 0x65cb, 0x6e32, 0x717d, 0x7401,
0x7444, 0x7487, 0x74bf, 0x766c, 0x79aa, 0x7dda, 0x7e55, 0x7fa8, 0x817a,
0x81b3, 0x8239, 0x861a, 0x87ec, 0x8a75, 0x8de3, 0x9078, 0x9291, 0x9425,
0x994d, 0x9bae, 0x5368, 0x5c51, 0x6954, 0x6cc4, 0x6d29, 0x6e2b, 0x820c,
0x859b, 0x893b, 0x8a2d, 0x8aaa, 0x96ea, 0x9f67, 0x5261, 0x66b9, 0x6bb2,
0x7e96, 0x87fe, 0x8d0d, 0x9583, 0x965d, 0x651d, 0x6d89, 0x71ee, 0xf96e,
0x57ce, 0x59d3, 0x5bac, 0x6027, 0x60fa, 0x6210, 0x661f, 0x665f, 0x7329,
0x73f9, 0x76db, 0x7701, 0x7b6c, 0x8056, 0x8072, 0x8165, 0x8aa0, 0x9192,
0x4e16, 0x52e2, 0x6b72, 0x6d17, 0x7a05, 0x7b39, 0x7d30, 0xf96f, 0x8cb0,
0x53ec, 0x562f, 0x5851, 0x5bb5, 0x5c0f, 0x5c11, 0x5de2, 0x6240, 0x6383,
0x6414, 0x662d, 0x68b3, 0x6cbc, 0x6d88, 0x6eaf, 0x701f, 0x70a4, 0x71d2,
0x7526, 0x758f, 0x758e, 0x7619, 0x7b11, 0x7be0, 0x7c2b, 0x7d20, 0x7d39,
0x852c, 0x856d, 0x8607, 0x8a34, 0x900d, 0x9061, 0x90b5, 0x92b7, 0x97f6,
0x9a37, 0x4fd7, 0x5c6c, 0x675f, 0x6d91, 0x7c9f, 0x7e8c, 0x8b16, 0x8d16,
0x901f, 0x5b6b, 0x5dfd, 0x640d, 0x84c0, 0x905c, 0x98e1, 0x7387, 0x5b8b,
0x609a, 0x677e, 0x6dde, 0x8a1f, 0x8aa6, 0x9001, 0x980c, 0x5237, 0xf970,
0x7051, 0x788e, 0x9396, 0x8870, 0x91d7, 0x4fee, 0x53d7, 0x55fd, 0x56da,
0x5782, 0x58fd, 0x5ac2, 0x5b88, 0x5cab, 0x5cc0, 0x5e25, 0x6101, 0x620d,
0x624b, 0x6388, 0x641c, 0x6536, 0x6578, 0x6a39, 0x6b8a, 0x6c34, 0x6d19,
0x6f31, 0x71e7, 0x72e9, 0x7378, 0x7407, 0x74b2, 0x7626, 0x7761, 0x79c0,
0x7a57, 0x7aea, 0x7cb9, 0x7d8f, 0x7dac, 0x7e61, 0x7f9e, 0x8129, 0x8331,
0x8490, 0x84da, 0x85ea, 0x8896, 0x8ab0, 0x8b90, 0x8f38, 0x9042, 0x9083,
0x916c, 0x9296, 0x92b9, 0x968b, 0x96a7, 0x96a8, 0x96d6, 0x9700, 0x9808,
0x9996, 0x9ad3, 0x9b1a, 0x53d4, 0x587e, 0x5919, 0x5b70, 0x5bbf, 0x6dd1,
0x6f5a, 0x719f, 0x7421, 0x74b9, 0x8085, 0x83fd, 0x5de1, 0x5f87, 0x5faa,
0x6042, 0x65ec, 0x6812, 0x696f, 0x6a53, 0x6b89, 0x6d35, 0x6df3, 0x73e3,
0x76fe, 0x77ac, 0x7b4d, 0x7d14, 0x8123, 0x821c, 0x8340, 0x84f4, 0x8563,
0x8a62, 0x8ac4, 0x9187, 0x931e, 0x9806, 0x99b4, 0x620c, 0x8853, 0x8ff0,
0x9265, 0x5d07, 0x5d27, 0x5d69, 0x745f, 0x819d, 0x8768, 0x6fd5, 0x62fe,
0x7fd2, 0x8936, 0x8972, 0x4e1e, 0x4e58, 0x50e7, 0x52dd, 0x5347, 0x627f,
0x6607, 0x7e69, 0x8805, 0x965e, 0x4f8d, 0x5319, 0x5636, 0x59cb, 0x5aa4,
0x5c38, 0x5c4e, 0x5c4d, 0x5e02, 0x5f11, 0x6043, 0x65bd, 0x662f, 0x6642,
0x67be, 0x67f4, 0x731c, 0x77e2, 0x793a, 0x7fc5, 0x8494, 0x84cd, 0x8996,
0x8a66, 0x8a69, 0x8ae1, 0x8c55, 0x8c7a, 0x57f4, 0x5bd4, 0x5f0f, 0x606f,
0x62ed, 0x690d, 0x6b96, 0x6e5c, 0x7184, 0x7bd2, 0x8755, 0x8b58, 0x8efe,
0x98df, 0x98fe, 0x4f38, 0x4f81, 0x4fe1, 0x547b, 0x5a20, 0x5bb8, 0x613c,
0x65b0, 0x6668, 0x71fc, 0x7533, 0x795e, 0x7d33, 0x814e, 0x81e3, 0x8398,
0x85aa, 0x85ce, 0x8703, 0x8a0a, 0x8eab, 0x8f9b, 0xf971, 0x8fc5, 0x5931,
0x5ba4, 0x5be6, 0x6089, 0x5be9, 0x5c0b, 0x5fc3, 0x6c81, 0xf972, 0x6df1,
0x700b, 0x751a, 0x82af, 0x8af6, 0x4ec0, 0x5341, 0xf973, 0x96d9, 0x6c0f,
0x4e9e, 0x4fc4, 0x5152, 0x555e, 0x5a25, 0x5ce8, 0x6211, 0x7259, 0x82bd,
0x83aa, 0x86fe, 0x8859, 0x8a1d, 0x963f, 0x96c5, 0x9913, 0x9d09, 0x9d5d,
0x580a, 0x5cb3, 0x5dbd, 0x5e44, 0x60e1, 0x6115, 0x63e1, 0x6a02, 0x6e25,
0x9102, 0x9354, 0x984e, 0x9c10, 0x9f77, 0x5b89, 0x5cb8, 0x6309, 0x664f,
0x6848, 0x773c, 0x96c1, 0x978d, 0x9854, 0x9b9f, 0x65a1, 0x8b01, 0x8ecb,
0x95bc, 0x5535, 0x5ca9, 0x5dd6, 0x5eb5, 0x6697, 0x764c, 0x83f4, 0x95c7,
0x58d3, 0x62bc, 0x72ce, 0x9d28, 0x4ef0, 0x592e, 0x600f, 0x663b, 0x6b83,
0x79e7, 0x9d26, 0x5393, 0x54c0, 0x57c3, 0x5d16, 0x611b, 0x66d6, 0x6daf,
0x788d, 0x827e, 0x9698, 0x9744, 0x5384, 0x627c, 0x6396, 0x6db2, 0x7e0a,
0x814b, 0x984d, 0x6afb, 0x7f4c, 0x9daf, 0x9e1a, 0x4e5f, 0x503b, 0x51b6,
0x591c, 0x60f9, 0x63f6, 0x6930, 0x723a, 0x8036, 0xf974, 0x91ce, 0x5f31,
0xf975, 0xf976, 0x7d04, 0x82e5, 0x846f, 0x84bb, 0x85e5, 0x8e8d, 0xf977,
0x4f6f, 0xf978, 0xf979, 0x58e4, 0x5b43, 0x6059, 0x63da, 0x6518, 0x656d,
0x6698, 0xf97a, 0x694a, 0x6a23, 0x6d0b, 0x7001, 0x716c, 0x75d2, 0x760d,
0x79b3, 0x7a70, 0xf97b, 0x7f8a, 0xf97c, 0x8944, 0xf97d, 0x8b93, 0x91c0,
0x967d, 0xf97e, 0x990a, 0x5704, 0x5fa1, 0x65bc, 0x6f01, 0x7600, 0x79a6,
0x8a9e, 0x99ad, 0x9b5a, 0x9f6c, 0x5104, 0x61b6, 0x6291, 0x6a8d, 0x81c6,
0x5043, 0x5830, 0x5f66, 0x7109, 0x8a00, 0x8afa, 0x5b7c, 0x8616, 0x4ffa,
0x513c, 0x56b4, 0x5944, 0x63a9, 0x6df9, 0x5daa, 0x696d, 0x5186, 0x4e88,
0x4f59, 0xf97f, 0xf980, 0xf981, 0x5982, 0xf982, 0xf983, 0x6b5f, 0x6c5d,
0xf984, 0x74b5, 0x7916, 0xf985, 0x8207, 0x8245, 0x8339, 0x8f3f, 0x8f5d,
0xf986, 0x9918, 0xf987, 0xf988, 0xf989, 0x4ea6, 0xf98a, 0x57df, 0x5f79,
0x6613, 0xf98b, 0xf98c, 0x75ab, 0x7e79, 0x8b6f, 0xf98d, 0x9006, 0x9a5b,
0x56a5, 0x5827, 0x59f8, 0x5a1f, 0x5bb4, 0xf98e, 0x5ef6, 0xf98f, 0xf990,
0x6350, 0x633b, 0xf991, 0x693d, 0x6c87, 0x6cbf, 0x6d8e, 0x6d93, 0x6df5,
0x6f14, 0xf992, 0x70df, 0x7136, 0x7159, 0xf993, 0x71c3, 0x71d5, 0xf994,
0x784f, 0x786f, 0xf995, 0x7b75, 0x7de3, 0xf996, 0x7e2f, 0xf997, 0x884d,
0x8edf, 0xf998, 0xf999, 0xf99a, 0x925b, 0xf99b, 0x9cf6, 0xf99c, 0xf99d,
0xf99e, 0x6085, 0x6d85, 0xf99f, 0x71b1, 0xf9a0, 0xf9a1, 0x95b1, 0x53ad,
0xf9a2, 0xf9a3, 0xf9a4, 0x67d3, 0xf9a5, 0x708e, 0x7130, 0x7430, 0x8276,
0x82d2, 0xf9a6, 0x95bb, 0x9ae5, 0x9e7d, 0x66c4, 0xf9a7, 0x71c1, 0x8449,
0xf9a8, 0xf9a9, 0x584b, 0xf9aa, 0xf9ab, 0x5db8, 0x5f71, 0xf9ac, 0x6620,
0x668e, 0x6979, 0x69ae, 0x6c38, 0x6cf3, 0x6e36, 0x6f41, 0x6fda, 0x701b,
0x702f, 0x7150, 0x71df, 0x7370, 0xf9ad, 0x745b, 0xf9ae, 0x74d4, 0x76c8,
0x7a4e, 0x7e93, 0xf9af, 0xf9b0, 0x82f1, 0x8a60, 0x8fce, 0xf9b1, 0x9348,
0xf9b2, 0x9719, 0xf9b3, 0xf9b4, 0x4e42, 0x502a, 0xf9b5, 0x5208, 0x53e1,
0x66f3, 0x6c6d, 0x6fca, 0x730a, 0x777f, 0x7a62, 0x82ae, 0x85dd, 0x8602,
0xf9b6, 0x88d4, 0x8a63, 0x8b7d, 0x8c6b, 0xf9b7, 0x92b3, 0xf9b8, 0x9713,
0x9810, 0x4e94, 0x4f0d, 0x4fc9, 0x50b2, 0x5348, 0x543e, 0x5433, 0x55da,
0x5862, 0x58ba, 0x5967, 0x5a1b, 0x5be4, 0x609f, 0xf9b9, 0x61ca, 0x6556,
0x65ff, 0x6664, 0x68a7, 0x6c5a, 0x6fb3, 0x70cf, 0x71ac, 0x7352, 0x7b7d,
0x8708, 0x8aa4, 0x9c32, 0x9f07, 0x5c4b, 0x6c83, 0x7344, 0x7389, 0x923a,
0x6eab, 0x7465, 0x761f, 0x7a69, 0x7e15, 0x860a, 0x5140, 0x58c5, 0x64c1,
0x74ee, 0x7515, 0x7670, 0x7fc1, 0x9095, 0x96cd, 0x9954, 0x6e26, 0x74e6,
0x7aa9, 0x7aaa, 0x81e5, 0x86d9, 0x8778, 0x8a1b, 0x5a49, 0x5b8c, 0x5b9b,
0x68a1, 0x6900, 0x6d63, 0x73a9, 0x7413, 0x742c, 0x7897, 0x7de9, 0x7feb,
0x8118, 0x8155, 0x839e, 0x8c4c, 0x962e, 0x9811, 0x66f0, 0x5f80, 0x65fa,
0x6789, 0x6c6a, 0x738b, 0x502d, 0x5a03, 0x6b6a, 0x77ee, 0x5916, 0x5d6c,
0x5dcd, 0x7325, 0x754f, 0xf9ba, 0xf9bb, 0x50e5, 0x51f9, 0x582f, 0x592d,
0x5996, 0x59da, 0x5be5, 0xf9bc, 0xf9bd, 0x5da2, 0x62d7, 0x6416, 0x6493,
0x64fe, 0xf9be, 0x66dc, 0xf9bf, 0x6a48, 0xf9c0, 0x71ff, 0x7464, 0xf9c1,
0x7a88, 0x7aaf, 0x7e47, 0x7e5e, 0x8000, 0x8170, 0xf9c2, 0x87ef, 0x8981,
0x8b20, 0x9059, 0xf9c3, 0x9080, 0x9952, 0x617e, 0x6b32, 0x6d74, 0x7e1f,
0x8925, 0x8fb1, 0x4fd1, 0x50ad, 0x5197, 0x52c7, 0x57c7, 0x5889, 0x5bb9,
0x5eb8, 0x6142, 0x6995, 0x6d8c, 0x6e67, 0x6eb6, 0x7194, 0x7462, 0x7528,
0x752c, 0x8073, 0x8338, 0x84c9, 0x8e0a, 0x9394, 0x93de, 0xf9c4, 0x4e8e,
0x4f51, 0x5076, 0x512a, 0x53c8, 0x53cb, 0x53f3, 0x5b87, 0x5bd3, 0x5c24,
0x611a, 0x6182, 0x65f4, 0x725b, 0x7397, 0x7440, 0x76c2, 0x7950, 0x7991,
0x79b9, 0x7d06, 0x7fbd, 0x828b, 0x85d5, 0x865e, 0x8fc2, 0x9047, 0x90f5,
0x91ea, 0x9685, 0x96e8, 0x96e9, 0x52d6, 0x5f67, 0x65ed, 0x6631, 0x682f,
0x715c, 0x7a36, 0x90c1, 0x980a, 0x4e91, 0xf9c5, 0x6a52, 0x6b9e, 0x6f90,
0x7189, 0x8018, 0x82b8, 0x8553, 0x904b, 0x9695, 0x96f2, 0x97fb, 0x851a,
0x9b31, 0x4e90, 0x718a, 0x96c4, 0x5143, 0x539f, 0x54e1, 0x5713, 0x5712,
0x57a3, 0x5a9b, 0x5ac4, 0x5bc3, 0x6028, 0x613f, 0x63f4, 0x6c85, 0x6d39,
0x6e72, 0x6e90, 0x7230, 0x733f, 0x7457, 0x82d1, 0x8881, 0x8f45, 0x9060,
0xf9c6, 0x9662, 0x9858, 0x9d1b, 0x6708, 0x8d8a, 0x925e, 0x4f4d, 0x5049,
0x50de, 0x5371, 0x570d, 0x59d4, 0x5a01, 0x5c09, 0x6170, 0x6690, 0x6e2d,
0x7232, 0x744b, 0x7def, 0x80c3, 0x840e, 0x8466, 0x853f, 0x875f, 0x885b,
0x8918, 0x8b02, 0x9055, 0x97cb, 0x9b4f, 0x4e73, 0x4f91, 0x5112, 0x516a,
0xf9c7, 0x552f, 0x55a9, 0x5b7a, 0x5ba5, 0x5e7c, 0x5e7d, 0x5ebe, 0x60a0,
0x60df, 0x6108, 0x6109, 0x63c4, 0x6538, 0x6709, 0xf9c8, 0x67d4, 0x67da,
0xf9c9, 0x6961, 0x6962, 0x6cb9, 0x6d27, 0xf9ca, 0x6e38, 0xf9cb, 0x6fe1,
0x7336, 0x7337, 0xf9cc, 0x745c, 0x7531, 0xf9cd, 0x7652, 0xf9ce, 0xf9cf,
0x7dad, 0x81fe, 0x8438, 0x88d5, 0x8a98, 0x8adb, 0x8aed, 0x8e30, 0x8e42,
0x904a, 0x903e, 0x907a, 0x9149, 0x91c9, 0x936e, 0xf9d0, 0xf9d1, 0x5809,
0xf9d2, 0x6bd3, 0x8089, 0x80b2, 0xf9d3, 0xf9d4, 0x5141, 0x596b, 0x5c39,
0xf9d5, 0xf9d6, 0x6f64, 0x73a7, 0x80e4, 0x8d07, 0xf9d7, 0x9217, 0x958f,
0xf9d8, 0xf9d9, 0xf9da, 0xf9db, 0x807f, 0x620e, 0x701c, 0x7d68, 0x878d,
0xf9dc, 0x57a0, 0x6069, 0x6147, 0x6bb7, 0x8abe, 0x9280, 0x96b1, 0x4e59,
0x541f, 0x6deb, 0x852d, 0x9670, 0x97f3, 0x98ee, 0x63d6, 0x6ce3, 0x9091,
0x51dd, 0x61c9, 0x81ba, 0x9df9, 0x4f9d, 0x501a, 0x5100, 0x5b9c, 0x610f,
0x61ff, 0x64ec, 0x6905, 0x6bc5, 0x7591, 0x77e3, 0x7fa9, 0x8264, 0x858f,
0x87fb, 0x8863, 0x8abc, 0x8b70, 0x91ab, 0x4e8c, 0x4ee5, 0x4f0a, 0xf9dd,
0xf9de, 0x5937, 0x59e8, 0xf9df, 0x5df2, 0x5f1b, 0x5f5b, 0x6021, 0xf9e0,
0xf9e1, 0xf9e2, 0xf9e3, 0x723e, 0x73e5, 0xf9e4, 0x7570, 0x75cd, 0xf9e5,
0x79fb, 0xf9e6, 0x800c, 0x8033, 0x8084, 0x82e1, 0x8351, 0xf9e7, 0xf9e8,
0x8cbd, 0x8cb3, 0x9087, 0xf9e9, 0xf9ea, 0x98f4, 0x990c, 0xf9eb, 0xf9ec,
0x7037, 0x76ca, 0x7fca, 0x7fcc, 0x7ffc, 0x8b1a, 0x4eba, 0x4ec1, 0x5203,
0x5370, 0xf9ed, 0x54bd, 0x56e0, 0x59fb, 0x5bc5, 0x5f15, 0x5fcd, 0x6e6e,
0xf9ee, 0xf9ef, 0x7d6a, 0x8335, 0xf9f0, 0x8693, 0x8a8d, 0xf9f1, 0x976d,
0x9777, 0xf9f2, 0xf9f3, 0x4e00, 0x4f5a, 0x4f7e, 0x58f9, 0x65e5, 0x6ea2,
0x9038, 0x93b0, 0x99b9, 0x4efb, 0x58ec, 0x598a, 0x59d9, 0x6041, 0xf9f4,
0xf9f5, 0x7a14, 0xf9f6, 0x834f, 0x8cc3, 0x5165, 0x5344, 0xf9f7, 0xf9f8,
0xf9f9, 0x4ecd, 0x5269, 0x5b55, 0x82bf, 0x4ed4, 0x523a, 0x54a8, 0x59c9,
0x59ff, 0x5b50, 0x5b57, 0x5b5c, 0x6063, 0x6148, 0x6ecb, 0x7099, 0x716e,
0x7386, 0x74f7, 0x75b5, 0x78c1, 0x7d2b, 0x8005, 0x81ea, 0x8328, 0x8517,
0x85c9, 0x8aee, 0x8cc7, 0x96cc, 0x4f5c, 0x52fa, 0x56bc, 0x65ab, 0x6628,
0x707c, 0x70b8, 0x7235, 0x7dbd, 0x828d, 0x914c, 0x96c0, 0x9d72, 0x5b71,
0x68e7, 0x6b98, 0x6f7a, 0x76de, 0x5c91, 0x66ab, 0x6f5b, 0x7bb4, 0x7c2a,
0x8836, 0x96dc, 0x4e08, 0x4ed7, 0x5320, 0x5834, 0x58bb, 0x58ef, 0x596c,
0x5c07, 0x5e33, 0x5e84, 0x5f35, 0x638c, 0x66b2, 0x6756, 0x6a1f, 0x6aa3,
0x6b0c, 0x6f3f, 0x7246, 0xf9fa, 0x7350, 0x748b, 0x7ae0, 0x7ca7, 0x8178,
0x81df, 0x81e7, 0x838a, 0x846c, 0x8523, 0x8594, 0x85cf, 0x88dd, 0x8d13,
0x91ac, 0x9577, 0x969c, 0x518d, 0x54c9, 0x5728, 0x5bb0, 0x624d, 0x6750,
0x683d, 0x6893, 0x6e3d, 0x6ed3, 0x707d, 0x7e21, 0x88c1, 0x8ca1, 0x8f09,
0x9f4b, 0x9f4e, 0x722d, 0x7b8f, 0x8acd, 0x931a, 0x4f47, 0x4f4e, 0x5132,
0x5480, 0x59d0, 0x5e95, 0x62b5, 0x6775, 0x696e, 0x6a17, 0x6cae, 0x6e1a,
0x72d9, 0x732a, 0x75bd, 0x7bb8, 0x7d35, 0x82e7, 0x83f9, 0x8457, 0x85f7,
0x8a5b, 0x8caf, 0x8e87, 0x9019, 0x90b8, 0x96ce, 0x9f5f, 0x52e3, 0x540a,
0x5ae1, 0x5bc2, 0x6458, 0x6575, 0x6ef4, 0x72c4, 0xf9fb, 0x7684, 0x7a4d,
0x7b1b, 0x7c4d, 0x7e3e, 0x7fdf, 0x837b, 0x8b2b, 0x8cca, 0x8d64, 0x8de1,
0x8e5f, 0x8fea, 0x8ff9, 0x9069, 0x93d1, 0x4f43, 0x4f7a, 0x50b3, 0x5168,
0x5178, 0x524d, 0x526a, 0x5861, 0x587c, 0x5960, 0x5c08, 0x5c55, 0x5edb,
0x609b, 0x6230, 0x6813, 0x6bbf, 0x6c08, 0x6fb1, 0x714e, 0x7420, 0x7530,
0x7538, 0x7551, 0x7672, 0x7b4c, 0x7b8b, 0x7bad, 0x7bc6, 0x7e8f, 0x8a6e,
0x8f3e, 0x8f49, 0x923f, 0x9293, 0x9322, 0x942b, 0x96fb, 0x985a, 0x986b,
0x991e, 0x5207, 0x622a, 0x6298, 0x6d59, 0x7664, 0x7aca, 0x7bc0, 0x7d76,
0x5360, 0x5cbe, 0x5e97, 0x6f38, 0x70b9, 0x7c98, 0x9711, 0x9b8e, 0x9ede,
0x63a5, 0x647a, 0x8776, 0x4e01, 0x4e95, 0x4ead, 0x505c, 0x5075, 0x5448,
0x59c3, 0x5b9a, 0x5e40, 0x5ead, 0x5ef7, 0x5f81, 0x60c5, 0x633a, 0x653f,
0x6574, 0x65cc, 0x6676, 0x6678, 0x67fe, 0x6968, 0x6a89, 0x6b63, 0x6c40,
0x6dc0, 0x6de8, 0x6e1f, 0x6e5e, 0x701e, 0x70a1, 0x738e, 0x73fd, 0x753a,
0x775b, 0x7887, 0x798e, 0x7a0b, 0x7a7d, 0x7cbe, 0x7d8e, 0x8247, 0x8a02,
0x8aea, 0x8c9e, 0x912d, 0x914a, 0x91d8, 0x9266, 0x92cc, 0x9320, 0x9706,
0x9756, 0x975c, 0x9802, 0x9f0e, 0x5236, 0x5291, 0x557c, 0x5824, 0x5e1d,
0x5f1f, 0x608c, 0x63d0, 0x68af, 0x6fdf, 0x796d, 0x7b2c, 0x81cd, 0x85ba,
0x88fd, 0x8af8, 0x8e44, 0x918d, 0x9664, 0x969b, 0x973d, 0x984c, 0x9f4a,
0x4fce, 0x5146, 0x51cb, 0x52a9, 0x5632, 0x5f14, 0x5f6b, 0x63aa, 0x64cd,
0x65e9, 0x6641, 0x66fa, 0x66f9, 0x671d, 0x689d, 0x68d7, 0x69fd, 0x6f15,
0x6f6e, 0x7167, 0x71e5, 0x722a, 0x74aa, 0x773a, 0x7956, 0x795a, 0x79df,
0x7a20, 0x7a95, 0x7c97, 0x7cdf, 0x7d44, 0x7e70, 0x8087, 0x85fb, 0x86a4,
0x8a54, 0x8abf, 0x8d99, 0x8e81, 0x9020, 0x906d, 0x91e3, 0x963b, 0x96d5,
0x9ce5, 0x65cf, 0x7c07, 0x8db3, 0x93c3, 0x5b58, 0x5c0a, 0x5352, 0x62d9,
0x731d, 0x5027, 0x5b97, 0x5f9e, 0x60b0, 0x616b, 0x68d5, 0x6dd9, 0x742e,
0x7a2e, 0x7d42, 0x7d9c, 0x7e31, 0x816b, 0x8e2a, 0x8e35, 0x937e, 0x9418,
0x4f50, 0x5750, 0x5de6, 0x5ea7, 0x632b, 0x7f6a, 0x4e3b, 0x4f4f, 0x4f8f,
0x505a, 0x59dd, 0x80c4, 0x546a, 0x5468, 0x55fe, 0x594f, 0x5b99, 0x5dde,
0x5eda, 0x665d, 0x6731, 0x67f1, 0x682a, 0x6ce8, 0x6d32, 0x6e4a, 0x6f8d,
0x70b7, 0x73e0, 0x7587, 0x7c4c, 0x7d02, 0x7d2c, 0x7da2, 0x821f, 0x86db,
0x8a3b, 0x8a85, 0x8d70, 0x8e8a, 0x8f33, 0x9031, 0x914e, 0x9152, 0x9444,
0x99d0, 0x7af9, 0x7ca5, 0x4fca, 0x5101, 0x51c6, 0x57c8, 0x5bef, 0x5cfb,
0x6659, 0x6a3d, 0x6d5a, 0x6e96, 0x6fec, 0x710c, 0x756f, 0x7ae3, 0x8822,
0x9021, 0x9075, 0x96cb, 0x99ff, 0x8301, 0x4e2d, 0x4ef2, 0x8846, 0x91cd,
0x537d, 0x6adb, 0x696b, 0x6c41, 0x847a, 0x589e, 0x618e, 0x66fe, 0x62ef,
0x70dd, 0x7511, 0x75c7, 0x7e52, 0x84b8, 0x8b49, 0x8d08, 0x4e4b, 0x53ea,
0x54ab, 0x5730, 0x5740, 0x5fd7, 0x6301, 0x6307, 0x646f, 0x652f, 0x65e8,
0x667a, 0x679d, 0x67b3, 0x6b62, 0x6c60, 0x6c9a, 0x6f2c, 0x77e5, 0x7825,
0x7949, 0x7957, 0x7d19, 0x80a2, 0x8102, 0x81f3, 0x829d, 0x82b7, 0x8718,
0x8a8c, 0xf9fc, 0x8d04, 0x8dbe, 0x9072, 0x76f4, 0x7a19, 0x7a37, 0x7e54,
0x8077, 0x5507, 0x55d4, 0x5875, 0x632f, 0x6422, 0x6649, 0x664b, 0x686d,
0x699b, 0x6b84, 0x6d25, 0x6eb1, 0x73cd, 0x7468, 0x74a1, 0x755b, 0x75b9,
0x76e1, 0x771e, 0x778b, 0x79e6, 0x7e09, 0x7e1d, 0x81fb, 0x852f, 0x8897,
0x8a3a, 0x8cd1, 0x8eeb, 0x8fb0, 0x9032, 0x93ad, 0x9663, 0x9673, 0x9707,
0x4f84, 0x53f1, 0x59ea, 0x5ac9, 0x5e19, 0x684e, 0x74c6, 0x75be, 0x79e9,
0x7a92, 0x81a3, 0x86ed, 0x8cea, 0x8dcc, 0x8fed, 0x659f, 0x6715, 0xf9fd,
0x57f7, 0x6f57, 0x7ddd, 0x8f2f, 0x93f6, 0x96c6, 0x5fb5, 0x61f2, 0x6f84,
0x4e14, 0x4f98, 0x501f, 0x53c9, 0x55df, 0x5d6f, 0x5dee, 0x6b21, 0x6b64,
0x78cb, 0x7b9a, 0xf9fe, 0x8e49, 0x8eca, 0x906e, 0x6349, 0x643e, 0x7740,
0x7a84, 0x932f, 0x947f, 0x9f6a, 0x64b0, 0x6faf, 0x71e6, 0x74a8, 0x74da,
0x7ac4, 0x7c12, 0x7e82, 0x7cb2, 0x7e98, 0x8b9a, 0x8d0a, 0x947d, 0x9910,
0x994c, 0x5239, 0x5bdf, 0x64e6, 0x672d, 0x7d2e, 0x50ed, 0x53c3, 0x5879,
0x6158, 0x6159, 0x61fa, 0x65ac, 0x7ad9, 0x8b92, 0x8b96, 0x5009, 0x5021,
0x5275, 0x5531, 0x5a3c, 0x5ee0, 0x5f70, 0x6134, 0x655e, 0x660c, 0x6636,
0x66a2, 0x69cd, 0x6ec4, 0x6f32, 0x7316, 0x7621, 0x7a93, 0x8139, 0x8259,
0x83d6, 0x84bc, 0x50b5, 0x57f0, 0x5bc0, 0x5be8, 0x5f69, 0x63a1, 0x7826,
0x7db5, 0x83dc, 0x8521, 0x91c7, 0x91f5, 0x518a, 0x67f5, 0x7b56, 0x8cac,
0x51c4, 0x59bb, 0x60bd, 0x8655, 0x501c, 0xf9ff, 0x5254, 0x5c3a, 0x617d,
0x621a, 0x62d3, 0x64f2, 0x65a5, 0x6ecc, 0x7620, 0x810a, 0x8e60, 0x965f,
0x96bb, 0x4edf, 0x5343, 0x5598, 0x5929, 0x5ddd, 0x64c5, 0x6cc9, 0x6dfa,
0x7394, 0x7a7f, 0x821b, 0x85a6, 0x8ce4, 0x8e10, 0x9077, 0x91e7, 0x95e1,
0x9621, 0x97c6, 0x51f8, 0x54f2, 0x5586, 0x5fb9, 0x64a4, 0x6f88, 0x7db4,
0x8f1f, 0x8f4d, 0x9435, 0x50c9, 0x5c16, 0x6cbe, 0x6dfb, 0x751b, 0x77bb,
0x7c3d, 0x7c64, 0x8a79, 0x8ac2, 0x581e, 0x59be, 0x5e16, 0x6377, 0x7252,
0x758a, 0x776b, 0x8adc, 0x8cbc, 0x8f12, 0x5ef3, 0x6674, 0x6df8, 0x807d,
0x83c1, 0x8acb, 0x9751, 0x9bd6, 0xfa00, 0x5243, 0x66ff, 0x6d95, 0x6eef,
0x7de0, 0x8ae6, 0x902e, 0x905e, 0x9ad4, 0x521d, 0x527f, 0x54e8, 0x6194,
0x6284, 0x62db, 0x68a2, 0x6912, 0x695a, 0x6a35, 0x7092, 0x7126, 0x785d,
0x7901, 0x790e, 0x79d2, 0x7a0d, 0x8096, 0x8278, 0x82d5, 0x8349, 0x8549,
0x8c82, 0x8d85, 0x9162, 0x918b, 0x91ae, 0x4fc3, 0x56d1, 0x71ed, 0x77d7,
0x8700, 0x89f8, 0x5bf8, 0x5fd6, 0x6751, 0x90a8, 0x53e2, 0x585a, 0x5bf5,
0x60a4, 0x6181, 0x6460, 0x7e3d, 0x8070, 0x8525, 0x9283, 0x64ae, 0x50ac,
0x5d14, 0x6700, 0x589c, 0x62bd, 0x63a8, 0x690e, 0x6978, 0x6a1e, 0x6e6b,
0x76ba, 0x79cb, 0x82bb, 0x8429, 0x8acf, 0x8da8, 0x8ffd, 0x9112, 0x914b,
0x919c, 0x9310, 0x9318, 0x939a, 0x96db, 0x9a36, 0x9c0d, 0x4e11, 0x755c,
0x795d, 0x7afa, 0x7b51, 0x7bc9, 0x7e2e, 0x84c4, 0x8e59, 0x8e74, 0x8ef8,
0x9010, 0x6625, 0x693f, 0x7443, 0x51fa, 0x672e, 0x9edc, 0x5145, 0x5fe0,
0x6c96, 0x87f2, 0x885d, 0x8877, 0x60b4, 0x81b5, 0x8403, 0x8d05, 0x53d6,
0x5439, 0x5634, 0x5a36, 0x5c31, 0x708a, 0x7fe0, 0x805a, 0x8106, 0x81ed,
0x8da3, 0x9189, 0x9a5f, 0x9df2, 0x5074, 0x4ec4, 0x53a0, 0x60fb, 0x6e2c,
0x5c64, 0x4f88, 0x5024, 0x55e4, 0x5cd9, 0x5e5f, 0x6065, 0x6894, 0x6cbb,
0x6dc4, 0x71be, 0x75d4, 0x75f4, 0x7661, 0x7a1a, 0x7a49, 0x7dc7, 0x7dfb,
0x7f6e, 0x81f4, 0x86a9, 0x8f1c, 0x96c9, 0x99b3, 0x9f52, 0x5247, 0x52c5,
0x98ed, 0x89aa, 0x4e03, 0x67d2, 0x6f06, 0x4fb5, 0x5be2, 0x6795, 0x6c88,
0x6d78, 0x741b, 0x7827, 0x91dd, 0x937c, 0x87c4, 0x79e4, 0x7a31, 0x5feb,
0x4ed6, 0x54a4, 0x553e, 0x58ae, 0x59a5, 0x60f0, 0x6253, 0x62d6, 0x6736,
0x6955, 0x8235, 0x9640, 0x99b1, 0x99dd, 0x502c, 0x5353, 0x5544, 0x577c,
0xfa01, 0x6258, 0xfa02, 0x64e2, 0x666b, 0x67dd, 0x6fc1, 0x6fef, 0x7422,
0x7438, 0x8a17, 0x9438, 0x5451, 0x5606, 0x5766, 0x5f48, 0x619a, 0x6b4e,
0x7058, 0x70ad, 0x7dbb, 0x8a95, 0x596a, 0x812b, 0x63a2, 0x7708, 0x803d,
0x8caa, 0x5854, 0x642d, 0x69bb, 0x5b95, 0x5e11, 0x6e6f, 0xfa03, 0x8569,
0x514c, 0x53f0, 0x592a, 0x6020, 0x614b, 0x6b86, 0x6c70, 0x6cf0, 0x7b1e,
0x80ce, 0x82d4, 0x8dc6, 0x90b0, 0x98b1, 0xfa04, 0x64c7, 0x6fa4, 0x6491,
0x6504, 0x514e, 0x5410, 0x571f, 0x8a0e, 0x615f, 0x6876, 0xfa05, 0x75db,
0x7b52, 0x7d71, 0x901a, 0x5806, 0x69cc, 0x817f, 0x892a, 0x9000, 0x9839,
0x5078, 0x5957, 0x59ac, 0x6295, 0x900f, 0x9b2a, 0x615d, 0x7279, 0x95d6,
0x5761, 0x5a46, 0x5df4, 0x628a, 0x64ad, 0x64fa, 0x6777, 0x6ce2, 0x6d3e,
0x722c, 0x7436, 0x7834, 0x7f77, 0x82ad, 0x8ddb, 0x9817, 0x5224, 0x5742,
0x677f, 0x7248, 0x74e3, 0x8ca9, 0x8fa6, 0x9211, 0x962a, 0x516b, 0x53ed,
0x634c, 0x4f69, 0x5504, 0x6096, 0x6557, 0x6c9b, 0x6d7f, 0x724c, 0x72fd,
0x7a17, 0x8987, 0x8c9d, 0x5f6d, 0x6f8e, 0x70f9, 0x81a8, 0x610e, 0x4fbf,
0x504f, 0x6241, 0x7247, 0x7bc7, 0x7de8, 0x7fe9, 0x904d, 0x97ad, 0x9a19,
0x8cb6, 0x576a, 0x5e73, 0x67b0, 0x840d, 0x8a55, 0x5420, 0x5b16, 0x5e63,
0x5ee2, 0x5f0a, 0x6583, 0x80ba, 0x853d, 0x9589, 0x965b, 0x4f48, 0x5305,
0x530d, 0x530f, 0x5486, 0x54fa, 0x5703, 0x5e03, 0x6016, 0x629b, 0x62b1,
0x6355, 0xfa06, 0x6ce1, 0x6d66, 0x75b1, 0x7832, 0x80de, 0x812f, 0x82de,
0x8461, 0x84b2, 0x888d, 0x8912, 0x900b, 0x92ea, 0x98fd, 0x9b91, 0x5e45,
0x66b4, 0x66dd, 0x7011, 0x7206, 0xfa07, 0x4ff5, 0x527d, 0x5f6a, 0x6153,
0x6753, 0x6a19, 0x6f02, 0x74e2, 0x7968, 0x8868, 0x8c79, 0x98c7, 0x98c4,
0x9a43, 0x54c1, 0x7a1f, 0x6953, 0x8af7, 0x8c4a, 0x98a8, 0x99ae, 0x5f7c,
0x62ab, 0x75b2, 0x76ae, 0x88ab, 0x907f, 0x9642, 0x5339, 0x5f3c, 0x5fc5,
0x6ccc, 0x73cc, 0x7562, 0x758b, 0x7b46, 0x82fe, 0x999d, 0x4e4f, 0x903c,
0x4e0b, 0x4f55, 0x53a6, 0x590f, 0x5ec8, 0x6630, 0x6cb3, 0x7455, 0x8377,
0x8766, 0x8cc0, 0x9050, 0x971e, 0x9c15, 0x58d1, 0x5b78, 0x8650, 0x8b14,
0x9db4, 0x5bd2, 0x6068, 0x608d, 0x65f1, 0x6c57, 0x6f22, 0x6fa3, 0x701a,
0x7f55, 0x7ff0, 0x9591, 0x9592, 0x9650, 0x97d3, 0x5272, 0x8f44, 0x51fd,
0x542b, 0x54b8, 0x5563, 0x558a, 0x6abb, 0x6db5, 0x7dd8, 0x8266, 0x929c,
0x9677, 0x9e79, 0x5408, 0x54c8, 0x76d2, 0x86e4, 0x95a4, 0x95d4, 0x965c,
0x4ea2, 0x4f09, 0x59ee, 0x5ae6, 0x5df7, 0x6052, 0x6297, 0x676d, 0x6841,
0x6c86, 0x6e2f, 0x7f38, 0x809b, 0x822a, 0xfa08, 0xfa09, 0x9805, 0x4ea5,
0x5055, 0x54b3, 0x5793, 0x595a, 0x5b69, 0x5bb3, 0x61c8, 0x6977, 0x6d77,
0x7023, 0x87f9, 0x89e3, 0x8a72, 0x8ae7, 0x9082, 0x99ed, 0x9ab8, 0x52be,
0x6838, 0x5016, 0x5e78, 0x674f, 0x8347, 0x884c, 0x4eab, 0x5411, 0x56ae,
0x73e6, 0x9115, 0x97ff, 0x9909, 0x9957, 0x9999, 0x5653, 0x589f, 0x865b,
0x8a31, 0x61b2, 0x6af6, 0x737b, 0x8ed2, 0x6b47, 0x96aa, 0x9a57, 0x5955,
0x7200, 0x8d6b, 0x9769, 0x4fd4, 0x5cf4, 0x5f26, 0x61f8, 0x665b, 0x6ceb,
0x70ab, 0x7384, 0x73b9, 0x73fe, 0x7729, 0x774d, 0x7d43, 0x7d62, 0x7e23,
0x8237, 0x8852, 0xfa0a, 0x8ce2, 0x9249, 0x986f, 0x5b51, 0x7a74, 0x8840,
0x9801, 0x5acc, 0x4fe0, 0x5354, 0x593e, 0x5cfd, 0x633e, 0x6d79, 0x72f9,
0x8105, 0x8107, 0x83a2, 0x92cf, 0x9830, 0x4ea8, 0x5144, 0x5211, 0x578b,
0x5f62, 0x6cc2, 0x6ece, 0x7005, 0x7050, 0x70af, 0x7192, 0x73e9, 0x7469,
0x834a, 0x87a2, 0x8861, 0x9008, 0x90a2, 0x93a3, 0x99a8, 0x516e, 0x5f57,
0x60e0, 0x6167, 0x66b3, 0x8559, 0x8e4a, 0x91af, 0x978b, 0x4e4e, 0x4e92,
0x547c, 0x58d5, 0x58fa, 0x597d, 0x5cb5, 0x5f27, 0x6236, 0x6248, 0x660a,
0x6667, 0x6beb, 0x6d69, 0x6dcf, 0x6e56, 0x6ef8, 0x6f94, 0x6fe0, 0x6fe9,
0x705d, 0x72d0, 0x7425, 0x745a, 0x74e0, 0x7693, 0x795c, 0x7cca, 0x7e1e,
0x80e1, 0x82a6, 0x846b, 0x84bf, 0x864e, 0x865f, 0x8774, 0x8b77, 0x8c6a,
0x93ac, 0x9800, 0x9865, 0x60d1, 0x6216, 0x9177, 0x5a5a, 0x660f, 0x6df7,
0x6e3e, 0x743f, 0x9b42, 0x5ffd, 0x60da, 0x7b0f, 0x54c4, 0x5f18, 0x6c5e,
0x6cd3, 0x6d2a, 0x70d8, 0x7d05, 0x8679, 0x8a0c, 0x9d3b, 0x5316, 0x548c,
0x5b05, 0x6a3a, 0x706b, 0x7575, 0x798d, 0x79be, 0x82b1, 0x83ef, 0x8a71,
0x8b41, 0x8ca8, 0x9774, 0xfa0b, 0x64f4, 0x652b, 0x78ba, 0x78bb, 0x7a6b,
0x4e38, 0x559a, 0x5950, 0x5ba6, 0x5e7b, 0x60a3, 0x63db, 0x6b61, 0x6665,
0x6853, 0x6e19, 0x7165, 0x74b0, 0x7d08, 0x9084, 0x9a69, 0x9c25, 0x6d3b,
0x6ed1, 0x733e, 0x8c41, 0x95ca, 0x51f0, 0x5e4c, 0x5fa8, 0x604d, 0x60f6,
0x6130, 0x614c, 0x6643, 0x6644, 0x69a5, 0x6cc1, 0x6e5f, 0x6ec9, 0x6f62,
0x714c, 0x749c, 0x7687, 0x7bc1, 0x7c27, 0x8352, 0x8757, 0x9051, 0x968d,
0x9ec3, 0x532f, 0x56de, 0x5efb, 0x5f8a, 0x6062, 0x6094, 0x61f7, 0x6666,
0x6703, 0x6a9c, 0x6dee, 0x6fae, 0x7070, 0x736a, 0x7e6a, 0x81be, 0x8334,
0x86d4, 0x8aa8, 0x8cc4, 0x5283, 0x7372, 0x5b96, 0x6a6b, 0x9404, 0x54ee,
0x5686, 0x5b5d, 0x6548, 0x6585, 0x66c9, 0x689f, 0x6d8d, 0x6dc6, 0x723b,
0x80b4, 0x9175, 0x9a4d, 0x4faf, 0x5019, 0x539a, 0x540e, 0x543c, 0x5589,
0x55c5, 0x5e3f, 0x5f8c, 0x673d, 0x7166, 0x73dd, 0x9005, 0x52db, 0x52f3,
0x5864, 0x58ce, 0x7104, 0x718f, 0x71fb, 0x85b0, 0x8a13, 0x6688, 0x85a8,
0x55a7, 0x6684, 0x714a, 0x8431, 0x5349, 0x5599, 0x6bc1, 0x5f59, 0x5fbd,
0x63ee, 0x6689, 0x7147, 0x8af1, 0x8f1d, 0x9ebe, 0x4f11, 0x643a, 0x70cb,
0x7566, 0x8667, 0x6064, 0x8b4e, 0x9df8, 0x5147, 0x51f6, 0x5308, 0x6d36,
0x80f8, 0x9ed1, 0x6615, 0x6b23, 0x7098, 0x75d5, 0x5403, 0x5c79, 0x7d07,
0x8a16, 0x6b20, 0x6b3d, 0x6b46, 0x5438, 0x6070, 0x6d3d, 0x7fd5, 0x8208,
0x50d6, 0x51de, 0x559c, 0x566b, 0x56cd, 0x59ec, 0x5b09, 0x5e0c, 0x6199,
0x6198, 0x6231, 0x665e, 0x66e6, 0x7199, 0x71b9, 0x71ba, 0x72a7, 0x79a7,
0x7a00, 0x7fb2, 0x8a70,
0/* End of table; # of entries=8741(0x2225)+1 */
};
int ksc5601max=sizeof(tabksc5601)/sizeof(tabksc5601[0])-1;
/* # of entries in the table. */

2
src/cmd/tcs/ksc.h Normal file
View file

@ -0,0 +1,2 @@
extern long tabksc5601[]; /* runes indexed by kuten */
extern int ksc5601max; /* # of entries in the table. */

1055
src/cmd/tcs/kuten208.c Normal file

File diff suppressed because it is too large Load diff

3
src/cmd/tcs/kuten208.h Normal file
View file

@ -0,0 +1,3 @@
#define KUTEN208MAX 8407
extern long tabkuten208[KUTEN208MAX]; /* runes indexed by kuten */

975
src/cmd/tcs/kuten212.c Normal file
View file

@ -0,0 +1,975 @@
#include "kuten212.h"
long tabkuten212[KUTEN212MAX] = {
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1,0x02d8,
0x02c7,0x00b8,0x02d9,0x02dd,0x00af,0x02db,0x02da,0x007e,
0x0384,0x0385, -1, -1, -1, -1, -1, -1,
-1, -1,0x00a1,0x00a6,0x00bf, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1,0x00ba,0x00aa,0x00a9,0x00ae,0x2122,
0x00a4,0x2116, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1,0x0386,0x0388,0x0389,0x038a,0x03aa, -1,0x038c,
-1,0x038e,0x03ab, -1,0x038f, -1, -1, -1,
-1,0x03ac,0x03ad,0x03ae,0x03af,0x03ca,0x0390,0x03cc,
0x03c2,0x03cd,0x03cb,0x03b0,0x03ce, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1,0x0402,0x0403,
0x0404,0x0405,0x0406,0x0407,0x0408,0x0409,0x040a,0x040b,
0x040c,0x040e,0x040f, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1,0x0452,0x0453,
0x0454,0x0455,0x0456,0x0457,0x0458,0x0459,0x045a,0x045b,
0x045c,0x045e,0x045f, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1,0x00c6,0x0110, -1,
0x0126, -1,0x0132, -1,0x0141,0x013f, -1,0x014a,
0x00d8,0x0152, -1,0x0166,0x00de, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1,0x00e6,0x0111,0x00f0,
0x0127,0x0131,0x0133,0x0138,0x0142,0x0140,0x0149,0x014b,
0x00f8,0x0153,0x00df,0x0167,0x00fe, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1,0x00c1,0x00c0,0x00c4,0x00c2,0x0102,0x01cd,0x0100,
0x0104,0x00c5,0x00c3,0x0106,0x0108,0x010c,0x00c7,0x010a,
0x010e,0x00c9,0x00c8,0x00cb,0x00ca,0x011a,0x0116,0x0112,
0x0118, -1,0x011c,0x011e,0x0122,0x0120,0x0124,0x00cd,
0x00cc,0x00cf,0x00ce,0x01cf,0x0130,0x012a,0x012e,0x0128,
0x0134,0x0136,0x0139,0x013d,0x013b,0x0143,0x0147,0x0145,
0x00d1,0x00d3,0x00d2,0x00d6,0x00d4,0x01d1,0x0150,0x014c,
0x00d5,0x0154,0x0158,0x0156,0x015a,0x015c,0x0160,0x015e,
0x0164,0x0162,0x00da,0x00d9,0x00dc,0x00db,0x016c,0x01d3,
0x0170,0x016a,0x0172,0x016e,0x0168,0x01d7,0x01db,0x01d9,
0x01d5,0x0174,0x00dd,0x0178,0x0176,0x0179,0x017d,0x017b,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1,0x00e1,0x00e0,0x00e4,
0x00e2,0x0103,0x01ce,0x0101,0x0105,0x00e5,0x00e3,0x0107,
0x0109,0x010d,0x00e7,0x010b,0x010f,0x00e9,0x00e8,0x00eb,
0x00ea,0x011b,0x0117,0x0113,0x0119,0x01f5,0x011d,0x011f,
-1,0x0121,0x0125,0x00ed,0x00ec,0x00ef,0x00ee,0x01d0,
-1,0x012b,0x012f,0x0129,0x0135,0x0137,0x013a,0x013e,
0x013c,0x0144,0x0148,0x0146,0x00f1,0x00f3,0x00f2,0x00f6,
0x00f4,0x01d2,0x0151,0x014d,0x00f5,0x0155,0x0159,0x0157,
0x015b,0x015d,0x0161,0x015f,0x0165,0x0163,0x00fa,0x00f9,
0x00fc,0x00fb,0x016d,0x01d4,0x0171,0x016b,0x0173,0x016f,
0x0169,0x01d8,0x01dc,0x01da,0x01d6,0x0175,0x00fd,0x00ff,
0x0177,0x017a,0x017e,0x017c, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1,
-1,0x4e02,0x4e04,0x4e05,0x4e0c,0x4e12,0x4e1f,0x4e23,
0x4e24,0x4e28,0x4e2b,0x4e2e,0x4e2f,0x4e30,0x4e35,0x4e40,
0x4e41,0x4e44,0x4e47,0x4e51,0x4e5a,0x4e5c,0x4e63,0x4e68,
0x4e69,0x4e74,0x4e75,0x4e79,0x4e7f,0x4e8d,0x4e96,0x4e97,
0x4e9d,0x4eaf,0x4eb9,0x4ec3,0x4ed0,0x4eda,0x4edb,0x4ee0,
0x4ee1,0x4ee2,0x4ee8,0x4eef,0x4ef1,0x4ef3,0x4ef5,0x4efd,
0x4efe,0x4eff,0x4f00,0x4f02,0x4f03,0x4f08,0x4f0b,0x4f0c,
0x4f12,0x4f15,0x4f16,0x4f17,0x4f19,0x4f2e,0x4f31,0x4f60,
0x4f33,0x4f35,0x4f37,0x4f39,0x4f3b,0x4f3e,0x4f40,0x4f42,
0x4f48,0x4f49,0x4f4b,0x4f4c,0x4f52,0x4f54,0x4f56,0x4f58,
0x4f5f,0x4f63,0x4f6a,0x4f6c,0x4f6e,0x4f71,0x4f77,0x4f78,
0x4f79,0x4f7a,0x4f7d,0x4f7e,0x4f81,0x4f82,0x4f84, -1,
-1, -1, -1, -1, -1,0x4f85,0x4f89,0x4f8a,
0x4f8c,0x4f8e,0x4f90,0x4f92,0x4f93,0x4f94,0x4f97,0x4f99,
0x4f9a,0x4f9e,0x4f9f,0x4fb2,0x4fb7,0x4fb9,0x4fbb,0x4fbc,
0x4fbd,0x4fbe,0x4fc0,0x4fc1,0x4fc5,0x4fc6,0x4fc8,0x4fc9,
0x4fcb,0x4fcc,0x4fcd,0x4fcf,0x4fd2,0x4fdc,0x4fe0,0x4fe2,
0x4ff0,0x4ff2,0x4ffc,0x4ffd,0x4fff,0x5000,0x5001,0x5004,
0x5007,0x500a,0x500c,0x500e,0x5010,0x5013,0x5017,0x5018,
0x501b,0x501c,0x501d,0x501e,0x5022,0x5027,0x502e,0x5030,
0x5032,0x5033,0x5035,0x5040,0x5041,0x5042,0x5045,0x5046,
0x504a,0x504c,0x504e,0x5051,0x5052,0x5053,0x5057,0x5059,
0x505f,0x5060,0x5062,0x5063,0x5066,0x5067,0x506a,0x506d,
0x5070,0x5071,0x503b,0x5081,0x5083,0x5084,0x5086,0x508a,
0x508e,0x508f,0x5090, -1, -1, -1, -1, -1,
-1,0x5092,0x5093,0x5094,0x5096,0x509b,0x509c,0x509e,
0x509f,0x50a0,0x50a1,0x50a2,0x50aa,0x50af,0x50b0,0x50b9,
0x50ba,0x50bd,0x50c0,0x50c3,0x50c4,0x50c7,0x50cc,0x50ce,
0x50d0,0x50d3,0x50d4,0x50d8,0x50dc,0x50dd,0x50df,0x50e2,
0x50e4,0x50e6,0x50e8,0x50e9,0x50ef,0x50f1,0x50f6,0x50fa,
0x50fe,0x5103,0x5106,0x5107,0x5108,0x510b,0x510c,0x510d,
0x510e,0x50f2,0x5110,0x5117,0x5119,0x511b,0x511c,0x511d,
0x511e,0x5123,0x5127,0x5128,0x512c,0x512d,0x512f,0x5131,
0x5133,0x5134,0x5135,0x5138,0x5139,0x5142,0x514a,0x514f,
0x5153,0x5155,0x5157,0x5158,0x515f,0x5164,0x5166,0x517e,
0x5183,0x5184,0x518b,0x518e,0x5198,0x519d,0x51a1,0x51a3,
0x51ad,0x51b8,0x51ba,0x51bc,0x51be,0x51bf,0x51c2, -1,
-1, -1, -1, -1, -1,0x51c8,0x51cf,0x51d1,
0x51d2,0x51d3,0x51d5,0x51d8,0x51de,0x51e2,0x51e5,0x51ee,
0x51f2,0x51f3,0x51f4,0x51f7,0x5201,0x5202,0x5205,0x5212,
0x5213,0x5215,0x5216,0x5218,0x5222,0x5228,0x5231,0x5232,
0x5235,0x523c,0x5245,0x5249,0x5255,0x5257,0x5258,0x525a,
0x525c,0x525f,0x5260,0x5261,0x5266,0x526e,0x5277,0x5278,
0x5279,0x5280,0x5282,0x5285,0x528a,0x528c,0x5293,0x5295,
0x5296,0x5297,0x5298,0x529a,0x529c,0x52a4,0x52a5,0x52a6,
0x52a7,0x52af,0x52b0,0x52b6,0x52b7,0x52b8,0x52ba,0x52bb,
0x52bd,0x52c0,0x52c4,0x52c6,0x52c8,0x52cc,0x52cf,0x52d1,
0x52d4,0x52d6,0x52db,0x52dc,0x52e1,0x52e5,0x52e8,0x52e9,
0x52ea,0x52ec,0x52f0,0x52f1,0x52f4,0x52f6,0x52f7,0x5300,
0x5303,0x530a,0x530b, -1, -1, -1, -1, -1,
-1,0x530c,0x5311,0x5313,0x5318,0x531b,0x531c,0x531e,
0x531f,0x5325,0x5327,0x5328,0x5329,0x532b,0x532c,0x532d,
0x5330,0x5332,0x5335,0x533c,0x533d,0x533e,0x5342,0x534c,
0x534b,0x5359,0x535b,0x5361,0x5363,0x5365,0x536c,0x536d,
0x5372,0x5379,0x537e,0x5383,0x5387,0x5388,0x538e,0x5393,
0x5394,0x5399,0x539d,0x53a1,0x53a4,0x53aa,0x53ab,0x53af,
0x53b2,0x53b4,0x53b5,0x53b7,0x53b8,0x53ba,0x53bd,0x53c0,
0x53c5,0x53cf,0x53d2,0x53d3,0x53d5,0x53da,0x53dd,0x53de,
0x53e0,0x53e6,0x53e7,0x53f5,0x5402,0x5413,0x541a,0x5421,
0x5427,0x5428,0x542a,0x542f,0x5431,0x5434,0x5435,0x5443,
0x5444,0x5447,0x544d,0x544f,0x545e,0x5462,0x5464,0x5466,
0x5467,0x5469,0x546b,0x546d,0x546e,0x5474,0x547f, -1,
-1, -1, -1, -1, -1,0x5481,0x5483,0x5485,
0x5488,0x5489,0x548d,0x5491,0x5495,0x5496,0x549c,0x549f,
0x54a1,0x54a6,0x54a7,0x54a9,0x54aa,0x54ad,0x54ae,0x54b1,
0x54b7,0x54b9,0x54ba,0x54bb,0x54bf,0x54c6,0x54ca,0x54cd,
0x54ce,0x54e0,0x54ea,0x54ec,0x54ef,0x54f6,0x54fc,0x54fe,
0x54ff,0x5500,0x5501,0x5505,0x5508,0x5509,0x550c,0x550d,
0x550e,0x5515,0x552a,0x552b,0x5532,0x5535,0x5536,0x553b,
0x553c,0x553d,0x5541,0x5547,0x5549,0x554a,0x554d,0x5550,
0x5551,0x5558,0x555a,0x555b,0x555e,0x5560,0x5561,0x5564,
0x5566,0x557f,0x5581,0x5582,0x5586,0x5588,0x558e,0x558f,
0x5591,0x5592,0x5593,0x5594,0x5597,0x55a3,0x55a4,0x55ad,
0x55b2,0x55bf,0x55c1,0x55c3,0x55c6,0x55c9,0x55cb,0x55cc,
0x55ce,0x55d1,0x55d2, -1, -1, -1, -1, -1,
-1,0x55d3,0x55d7,0x55d8,0x55db,0x55de,0x55e2,0x55e9,
0x55f6,0x55ff,0x5605,0x5608,0x560a,0x560d,0x560e,0x560f,
0x5610,0x5611,0x5612,0x5619,0x562c,0x5630,0x5633,0x5635,
0x5637,0x5639,0x563b,0x563c,0x563d,0x563f,0x5640,0x5641,
0x5643,0x5644,0x5646,0x5649,0x564b,0x564d,0x564f,0x5654,
0x565e,0x5660,0x5661,0x5662,0x5663,0x5666,0x5669,0x566d,
0x566f,0x5671,0x5672,0x5675,0x5684,0x5685,0x5688,0x568b,
0x568c,0x5695,0x5699,0x569a,0x569d,0x569e,0x569f,0x56a6,
0x56a7,0x56a8,0x56a9,0x56ab,0x56ac,0x56ad,0x56b1,0x56b3,
0x56b7,0x56be,0x56c5,0x56c9,0x56ca,0x56cb,0x56cf,0x56d0,
0x56cc,0x56cd,0x56d9,0x56dc,0x56dd,0x56df,0x56e1,0x56e4,
0x56e5,0x56e6,0x56e7,0x56e8,0x56f1,0x56eb,0x56ed, -1,
-1, -1, -1, -1, -1,0x56f6,0x56f7,0x5701,
0x5702,0x5707,0x570a,0x570c,0x5711,0x5715,0x571a,0x571b,
0x571d,0x5720,0x5722,0x5723,0x5724,0x5725,0x5729,0x572a,
0x572c,0x572e,0x572f,0x5733,0x5734,0x573d,0x573e,0x573f,
0x5745,0x5746,0x574c,0x574d,0x5752,0x5762,0x5765,0x5767,
0x5768,0x576b,0x576d,0x576e,0x576f,0x5770,0x5771,0x5773,
0x5774,0x5775,0x5777,0x5779,0x577a,0x577b,0x577c,0x577e,
0x5781,0x5783,0x578c,0x5794,0x5797,0x5799,0x579a,0x579c,
0x579d,0x579e,0x579f,0x57a1,0x5795,0x57a7,0x57a8,0x57a9,
0x57ac,0x57b8,0x57bd,0x57c7,0x57c8,0x57cc,0x57cf,0x57d5,
0x57dd,0x57de,0x57e4,0x57e6,0x57e7,0x57e9,0x57ed,0x57f0,
0x57f5,0x57f6,0x57f8,0x57fd,0x57fe,0x57ff,0x5803,0x5804,
0x5808,0x5809,0x57e1, -1, -1, -1, -1, -1,
-1,0x580c,0x580d,0x581b,0x581e,0x581f,0x5820,0x5826,
0x5827,0x582d,0x5832,0x5839,0x583f,0x5849,0x584c,0x584d,
0x584f,0x5850,0x5855,0x585f,0x5861,0x5864,0x5867,0x5868,
0x5878,0x587c,0x587f,0x5880,0x5881,0x5887,0x5888,0x5889,
0x588a,0x588c,0x588d,0x588f,0x5890,0x5894,0x5896,0x589d,
0x58a0,0x58a1,0x58a2,0x58a6,0x58a9,0x58b1,0x58b2,0x58c4,
0x58bc,0x58c2,0x58c8,0x58cd,0x58ce,0x58d0,0x58d2,0x58d4,
0x58d6,0x58da,0x58dd,0x58e1,0x58e2,0x58e9,0x58f3,0x5905,
0x5906,0x590b,0x590c,0x5912,0x5913,0x5914,0x8641,0x591d,
0x5921,0x5923,0x5924,0x5928,0x592f,0x5930,0x5933,0x5935,
0x5936,0x593f,0x5943,0x5946,0x5952,0x5953,0x5959,0x595b,
0x595d,0x595e,0x595f,0x5961,0x5963,0x596b,0x596d, -1,
-1, -1, -1, -1, -1,0x596f,0x5972,0x5975,
0x5976,0x5979,0x597b,0x597c,0x598b,0x598c,0x598e,0x5992,
0x5995,0x5997,0x599f,0x59a4,0x59a7,0x59ad,0x59ae,0x59af,
0x59b0,0x59b3,0x59b7,0x59ba,0x59bc,0x59c1,0x59c3,0x59c4,
0x59c8,0x59ca,0x59cd,0x59d2,0x59dd,0x59de,0x59df,0x59e3,
0x59e4,0x59e7,0x59ee,0x59ef,0x59f1,0x59f2,0x59f4,0x59f7,
0x5a00,0x5a04,0x5a0c,0x5a0d,0x5a0e,0x5a12,0x5a13,0x5a1e,
0x5a23,0x5a24,0x5a27,0x5a28,0x5a2a,0x5a2d,0x5a30,0x5a44,
0x5a45,0x5a47,0x5a48,0x5a4c,0x5a50,0x5a55,0x5a5e,0x5a63,
0x5a65,0x5a67,0x5a6d,0x5a77,0x5a7a,0x5a7b,0x5a7e,0x5a8b,
0x5a90,0x5a93,0x5a96,0x5a99,0x5a9c,0x5a9e,0x5a9f,0x5aa0,
0x5aa2,0x5aa7,0x5aac,0x5ab1,0x5ab2,0x5ab3,0x5ab5,0x5ab8,
0x5aba,0x5abb,0x5abf, -1, -1, -1, -1, -1,
-1,0x5ac4,0x5ac6,0x5ac8,0x5acf,0x5ada,0x5adc,0x5ae0,
0x5ae5,0x5aea,0x5aee,0x5af5,0x5af6,0x5afd,0x5b00,0x5b01,
0x5b08,0x5b17,0x5b34,0x5b19,0x5b1b,0x5b1d,0x5b21,0x5b25,
0x5b2d,0x5b38,0x5b41,0x5b4b,0x5b4c,0x5b52,0x5b56,0x5b5e,
0x5b68,0x5b6e,0x5b6f,0x5b7c,0x5b7d,0x5b7e,0x5b7f,0x5b81,
0x5b84,0x5b86,0x5b8a,0x5b8e,0x5b90,0x5b91,0x5b93,0x5b94,
0x5b96,0x5ba8,0x5ba9,0x5bac,0x5bad,0x5baf,0x5bb1,0x5bb2,
0x5bb7,0x5bba,0x5bbc,0x5bc0,0x5bc1,0x5bcd,0x5bcf,0x5bd6,
0x5bd7,0x5bd8,0x5bd9,0x5bda,0x5be0,0x5bef,0x5bf1,0x5bf4,
0x5bfd,0x5c0c,0x5c17,0x5c1e,0x5c1f,0x5c23,0x5c26,0x5c29,
0x5c2b,0x5c2c,0x5c2e,0x5c30,0x5c32,0x5c35,0x5c36,0x5c59,
0x5c5a,0x5c5c,0x5c62,0x5c63,0x5c67,0x5c68,0x5c69, -1,
-1, -1, -1, -1, -1,0x5c6d,0x5c70,0x5c74,
0x5c75,0x5c7a,0x5c7b,0x5c7c,0x5c7d,0x5c87,0x5c88,0x5c8a,
0x5c8f,0x5c92,0x5c9d,0x5c9f,0x5ca0,0x5ca2,0x5ca3,0x5ca6,
0x5caa,0x5cb2,0x5cb4,0x5cb5,0x5cba,0x5cc9,0x5ccb,0x5cd2,
0x5cdd,0x5cd7,0x5cee,0x5cf1,0x5cf2,0x5cf4,0x5d01,0x5d06,
0x5d0d,0x5d12,0x5d2b,0x5d23,0x5d24,0x5d26,0x5d27,0x5d31,
0x5d34,0x5d39,0x5d3d,0x5d3f,0x5d42,0x5d43,0x5d46,0x5d48,
0x5d55,0x5d51,0x5d59,0x5d4a,0x5d5f,0x5d60,0x5d61,0x5d62,
0x5d64,0x5d6a,0x5d6d,0x5d70,0x5d79,0x5d7a,0x5d7e,0x5d7f,
0x5d81,0x5d83,0x5d88,0x5d8a,0x5d92,0x5d93,0x5d94,0x5d95,
0x5d99,0x5d9b,0x5d9f,0x5da0,0x5da7,0x5dab,0x5db0,0x5db4,
0x5db8,0x5db9,0x5dc3,0x5dc7,0x5dcb,0x5dd0,0x5dce,0x5dd8,
0x5dd9,0x5de0,0x5de4, -1, -1, -1, -1, -1,
-1,0x5de9,0x5df8,0x5df9,0x5e00,0x5e07,0x5e0d,0x5e12,
0x5e14,0x5e15,0x5e18,0x5e1f,0x5e20,0x5e2e,0x5e28,0x5e32,
0x5e35,0x5e3e,0x5e4b,0x5e50,0x5e49,0x5e51,0x5e56,0x5e58,
0x5e5b,0x5e5c,0x5e5e,0x5e68,0x5e6a,0x5e6b,0x5e6c,0x5e6d,
0x5e6e,0x5e70,0x5e80,0x5e8b,0x5e8e,0x5ea2,0x5ea4,0x5ea5,
0x5ea8,0x5eaa,0x5eac,0x5eb1,0x5eb3,0x5ebd,0x5ebe,0x5ebf,
0x5ec6,0x5ecc,0x5ecb,0x5ece,0x5ed1,0x5ed2,0x5ed4,0x5ed5,
0x5edc,0x5ede,0x5ee5,0x5eeb,0x5f02,0x5f06,0x5f07,0x5f08,
0x5f0e,0x5f19,0x5f1c,0x5f1d,0x5f21,0x5f22,0x5f23,0x5f24,
0x5f28,0x5f2b,0x5f2c,0x5f2e,0x5f30,0x5f34,0x5f36,0x5f3b,
0x5f3d,0x5f3f,0x5f40,0x5f44,0x5f45,0x5f47,0x5f4d,0x5f50,
0x5f54,0x5f58,0x5f5b,0x5f60,0x5f63,0x5f64,0x5f67, -1,
-1, -1, -1, -1, -1,0x5f6f,0x5f72,0x5f74,
0x5f75,0x5f78,0x5f7a,0x5f7d,0x5f7e,0x5f89,0x5f8d,0x5f8f,
0x5f96,0x5f9c,0x5f9d,0x5fa2,0x5fa7,0x5fab,0x5fa4,0x5fac,
0x5faf,0x5fb0,0x5fb1,0x5fb8,0x5fc4,0x5fc7,0x5fc8,0x5fc9,
0x5fcb,0x5fd0,0x5fd1,0x5fd2,0x5fd3,0x5fd4,0x5fde,0x5fe1,
0x5fe2,0x5fe8,0x5fe9,0x5fea,0x5fec,0x5fed,0x5fee,0x5fef,
0x5ff2,0x5ff3,0x5ff6,0x5ffa,0x5ffc,0x6007,0x600a,0x600d,
0x6013,0x6014,0x6017,0x6018,0x601a,0x601f,0x6024,0x602d,
0x6033,0x6035,0x6040,0x6047,0x6048,0x6049,0x604c,0x6051,
0x6054,0x6056,0x6057,0x605d,0x6061,0x6067,0x6071,0x607e,
0x607f,0x6082,0x6086,0x6088,0x608a,0x608e,0x6091,0x6093,
0x6095,0x6098,0x609d,0x609e,0x60a2,0x60a4,0x60a5,0x60a8,
0x60b0,0x60b1,0x60b7, -1, -1, -1, -1, -1,
-1,0x60bb,0x60be,0x60c2,0x60c4,0x60c8,0x60c9,0x60ca,
0x60cb,0x60ce,0x60cf,0x60d4,0x60d5,0x60d9,0x60db,0x60dd,
0x60de,0x60e2,0x60e5,0x60f2,0x60f5,0x60f8,0x60fc,0x60fd,
0x6102,0x6107,0x610a,0x610c,0x6110,0x6111,0x6112,0x6113,
0x6114,0x6116,0x6117,0x6119,0x611c,0x611e,0x6122,0x612a,
0x612b,0x6130,0x6131,0x6135,0x6136,0x6137,0x6139,0x6141,
0x6145,0x6146,0x6149,0x615e,0x6160,0x616c,0x6172,0x6178,
0x617b,0x617c,0x617f,0x6180,0x6181,0x6183,0x6184,0x618b,
0x618d,0x6192,0x6193,0x6197,0x6198,0x619c,0x619d,0x619f,
0x61a0,0x61a5,0x61a8,0x61aa,0x61ad,0x61b8,0x61b9,0x61bc,
0x61c0,0x61c1,0x61c2,0x61ce,0x61cf,0x61d5,0x61dc,0x61dd,
0x61de,0x61df,0x61e1,0x61e2,0x61e7,0x61e9,0x61e5, -1,
-1, -1, -1, -1, -1,0x61ec,0x61ed,0x61ef,
0x6201,0x6203,0x6204,0x6207,0x6213,0x6215,0x621c,0x6220,
0x6222,0x6223,0x6227,0x6229,0x622b,0x6239,0x623d,0x6242,
0x6243,0x6244,0x6246,0x624c,0x6250,0x6251,0x6252,0x6254,
0x6256,0x625a,0x625c,0x6264,0x626d,0x626f,0x6273,0x627a,
0x627d,0x628d,0x628e,0x628f,0x6290,0x62a6,0x62a8,0x62b3,
0x62b6,0x62b7,0x62ba,0x62be,0x62bf,0x62c4,0x62ce,0x62d5,
0x62d6,0x62da,0x62ea,0x62f2,0x62f4,0x62fc,0x62fd,0x6303,
0x6304,0x630a,0x630b,0x630d,0x6310,0x6313,0x6316,0x6318,
0x6329,0x632a,0x632d,0x6335,0x6336,0x6339,0x633c,0x6341,
0x6342,0x6343,0x6344,0x6346,0x634a,0x634b,0x634e,0x6352,
0x6353,0x6354,0x6358,0x635b,0x6365,0x6366,0x636c,0x636d,
0x6371,0x6374,0x6375, -1, -1, -1, -1, -1,
-1,0x6378,0x637c,0x637d,0x637f,0x6382,0x6384,0x6387,
0x638a,0x6390,0x6394,0x6395,0x6399,0x639a,0x639e,0x63a4,
0x63a6,0x63ad,0x63ae,0x63af,0x63bd,0x63c1,0x63c5,0x63c8,
0x63ce,0x63d1,0x63d3,0x63d4,0x63d5,0x63dc,0x63e0,0x63e5,
0x63ea,0x63ec,0x63f2,0x63f3,0x63f5,0x63f8,0x63f9,0x6409,
0x640a,0x6410,0x6412,0x6414,0x6418,0x641e,0x6420,0x6422,
0x6424,0x6425,0x6429,0x642a,0x642f,0x6430,0x6435,0x643d,
0x643f,0x644b,0x644f,0x6451,0x6452,0x6453,0x6454,0x645a,
0x645b,0x645c,0x645d,0x645f,0x6460,0x6461,0x6463,0x646d,
0x6473,0x6474,0x647b,0x647d,0x6485,0x6487,0x648f,0x6490,
0x6491,0x6498,0x6499,0x649b,0x649d,0x649f,0x64a1,0x64a3,
0x64a6,0x64a8,0x64ac,0x64b3,0x64bd,0x64be,0x64bf, -1,
-1, -1, -1, -1, -1,0x64c4,0x64c9,0x64ca,
0x64cb,0x64cc,0x64ce,0x64d0,0x64d1,0x64d5,0x64d7,0x64e4,
0x64e5,0x64e9,0x64ea,0x64ed,0x64f0,0x64f5,0x64f7,0x64fb,
0x64ff,0x6501,0x6504,0x6508,0x6509,0x650a,0x650f,0x6513,
0x6514,0x6516,0x6519,0x651b,0x651e,0x651f,0x6522,0x6526,
0x6529,0x652e,0x6531,0x653a,0x653c,0x653d,0x6543,0x6547,
0x6549,0x6550,0x6552,0x6554,0x655f,0x6560,0x6567,0x656b,
0x657a,0x657d,0x6581,0x6585,0x658a,0x6592,0x6595,0x6598,
0x659d,0x65a0,0x65a3,0x65a6,0x65ae,0x65b2,0x65b3,0x65b4,
0x65bf,0x65c2,0x65c8,0x65c9,0x65ce,0x65d0,0x65d4,0x65d6,
0x65d8,0x65df,0x65f0,0x65f2,0x65f4,0x65f5,0x65f9,0x65fe,
0x65ff,0x6600,0x6604,0x6608,0x6609,0x660d,0x6611,0x6612,
0x6615,0x6616,0x661d, -1, -1, -1, -1, -1,
-1,0x661e,0x6621,0x6622,0x6623,0x6624,0x6626,0x6629,
0x662a,0x662b,0x662c,0x662e,0x6630,0x6631,0x6633,0x6639,
0x6637,0x6640,0x6645,0x6646,0x664a,0x664c,0x6651,0x664e,
0x6657,0x6658,0x6659,0x665b,0x665c,0x6660,0x6661,0x66fb,
0x666a,0x666b,0x666c,0x667e,0x6673,0x6675,0x667f,0x6677,
0x6678,0x6679,0x667b,0x6680,0x667c,0x668b,0x668c,0x668d,
0x6690,0x6692,0x6699,0x669a,0x669b,0x669c,0x669f,0x66a0,
0x66a4,0x66ad,0x66b1,0x66b2,0x66b5,0x66bb,0x66bf,0x66c0,
0x66c2,0x66c3,0x66c8,0x66cc,0x66ce,0x66cf,0x66d4,0x66db,
0x66df,0x66e8,0x66eb,0x66ec,0x66ee,0x66fa,0x6705,0x6707,
0x670e,0x6713,0x6719,0x671c,0x6720,0x6722,0x6733,0x673e,
0x6745,0x6747,0x6748,0x674c,0x6754,0x6755,0x675d, -1,
-1, -1, -1, -1, -1,0x6766,0x676c,0x676e,
0x6774,0x6776,0x677b,0x6781,0x6784,0x678e,0x678f,0x6791,
0x6793,0x6796,0x6798,0x6799,0x679b,0x67b0,0x67b1,0x67b2,
0x67b5,0x67bb,0x67bc,0x67bd,0x67f9,0x67c0,0x67c2,0x67c3,
0x67c5,0x67c8,0x67c9,0x67d2,0x67d7,0x67d9,0x67dc,0x67e1,
0x67e6,0x67f0,0x67f2,0x67f6,0x67f7,0x6852,0x6814,0x6819,
0x681d,0x681f,0x6828,0x6827,0x682c,0x682d,0x682f,0x6830,
0x6831,0x6833,0x683b,0x683f,0x6844,0x6845,0x684a,0x684c,
0x6855,0x6857,0x6858,0x685b,0x686b,0x686e,0x686f,0x6870,
0x6871,0x6872,0x6875,0x6879,0x687a,0x687b,0x687c,0x6882,
0x6884,0x6886,0x6888,0x6896,0x6898,0x689a,0x689c,0x68a1,
0x68a3,0x68a5,0x68a9,0x68aa,0x68ae,0x68b2,0x68bb,0x68c5,
0x68c8,0x68cc,0x68cf, -1, -1, -1, -1, -1,
-1,0x68d0,0x68d1,0x68d3,0x68d6,0x68d9,0x68dc,0x68dd,
0x68e5,0x68e8,0x68ea,0x68eb,0x68ec,0x68ed,0x68f0,0x68f1,
0x68f5,0x68f6,0x68fb,0x68fc,0x68fd,0x6906,0x6909,0x690a,
0x6910,0x6911,0x6913,0x6916,0x6917,0x6931,0x6933,0x6935,
0x6938,0x693b,0x6942,0x6945,0x6949,0x694e,0x6957,0x695b,
0x6963,0x6964,0x6965,0x6966,0x6968,0x6969,0x696c,0x6970,
0x6971,0x6972,0x697a,0x697b,0x697f,0x6980,0x698d,0x6992,
0x6996,0x6998,0x69a1,0x69a5,0x69a6,0x69a8,0x69ab,0x69ad,
0x69af,0x69b7,0x69b8,0x69ba,0x69bc,0x69c5,0x69c8,0x69d1,
0x69d6,0x69d7,0x69e2,0x69e5,0x69ee,0x69ef,0x69f1,0x69f3,
0x69f5,0x69fe,0x6a00,0x6a01,0x6a03,0x6a0f,0x6a11,0x6a15,
0x6a1a,0x6a1d,0x6a20,0x6a24,0x6a28,0x6a30,0x6a32, -1,
-1, -1, -1, -1, -1,0x6a34,0x6a37,0x6a3b,
0x6a3e,0x6a3f,0x6a45,0x6a46,0x6a49,0x6a4a,0x6a4e,0x6a50,
0x6a51,0x6a52,0x6a55,0x6a56,0x6a5b,0x6a64,0x6a67,0x6a6a,
0x6a71,0x6a73,0x6a7e,0x6a81,0x6a83,0x6a86,0x6a87,0x6a89,
0x6a8b,0x6a91,0x6a9b,0x6a9d,0x6a9e,0x6a9f,0x6aa5,0x6aab,
0x6aaf,0x6ab0,0x6ab1,0x6ab4,0x6abd,0x6abe,0x6abf,0x6ac6,
0x6ac9,0x6ac8,0x6acc,0x6ad0,0x6ad4,0x6ad5,0x6ad6,0x6adc,
0x6add,0x6ae4,0x6ae7,0x6aec,0x6af0,0x6af1,0x6af2,0x6afc,
0x6afd,0x6b02,0x6b03,0x6b06,0x6b07,0x6b09,0x6b0f,0x6b10,
0x6b11,0x6b17,0x6b1b,0x6b1e,0x6b24,0x6b28,0x6b2b,0x6b2c,
0x6b2f,0x6b35,0x6b36,0x6b3b,0x6b3f,0x6b46,0x6b4a,0x6b4d,
0x6b52,0x6b56,0x6b58,0x6b5d,0x6b60,0x6b67,0x6b6b,0x6b6e,
0x6b70,0x6b75,0x6b7d, -1, -1, -1, -1, -1,
-1,0x6b7e,0x6b82,0x6b85,0x6b97,0x6b9b,0x6b9f,0x6ba0,
0x6ba2,0x6ba3,0x6ba8,0x6ba9,0x6bac,0x6bad,0x6bae,0x6bb0,
0x6bb8,0x6bb9,0x6bbd,0x6bbe,0x6bc3,0x6bc4,0x6bc9,0x6bcc,
0x6bd6,0x6bda,0x6be1,0x6be3,0x6be6,0x6be7,0x6bee,0x6bf1,
0x6bf7,0x6bf9,0x6bff,0x6c02,0x6c04,0x6c05,0x6c09,0x6c0d,
0x6c0e,0x6c10,0x6c12,0x6c19,0x6c1f,0x6c26,0x6c27,0x6c28,
0x6c2c,0x6c2e,0x6c33,0x6c35,0x6c36,0x6c3a,0x6c3b,0x6c3f,
0x6c4a,0x6c4b,0x6c4d,0x6c4f,0x6c52,0x6c54,0x6c59,0x6c5b,
0x6c5c,0x6c6b,0x6c6d,0x6c6f,0x6c74,0x6c76,0x6c78,0x6c79,
0x6c7b,0x6c85,0x6c86,0x6c87,0x6c89,0x6c94,0x6c95,0x6c97,
0x6c98,0x6c9c,0x6c9f,0x6cb0,0x6cb2,0x6cb4,0x6cc2,0x6cc6,
0x6ccd,0x6ccf,0x6cd0,0x6cd1,0x6cd2,0x6cd4,0x6cd6, -1,
-1, -1, -1, -1, -1,0x6cda,0x6cdc,0x6ce0,
0x6ce7,0x6ce9,0x6ceb,0x6cec,0x6cee,0x6cf2,0x6cf4,0x6d04,
0x6d07,0x6d0a,0x6d0e,0x6d0f,0x6d11,0x6d13,0x6d1a,0x6d26,
0x6d27,0x6d28,0x6c67,0x6d2e,0x6d2f,0x6d31,0x6d39,0x6d3c,
0x6d3f,0x6d57,0x6d5e,0x6d5f,0x6d61,0x6d65,0x6d67,0x6d6f,
0x6d70,0x6d7c,0x6d82,0x6d87,0x6d91,0x6d92,0x6d94,0x6d96,
0x6d97,0x6d98,0x6daa,0x6dac,0x6db4,0x6db7,0x6db9,0x6dbd,
0x6dbf,0x6dc4,0x6dc8,0x6dca,0x6dce,0x6dcf,0x6dd6,0x6ddb,
0x6ddd,0x6ddf,0x6de0,0x6de2,0x6de5,0x6de9,0x6def,0x6df0,
0x6df4,0x6df6,0x6dfc,0x6e00,0x6e04,0x6e1e,0x6e22,0x6e27,
0x6e32,0x6e36,0x6e39,0x6e3b,0x6e3c,0x6e44,0x6e45,0x6e48,
0x6e49,0x6e4b,0x6e4f,0x6e51,0x6e52,0x6e53,0x6e54,0x6e57,
0x6e5c,0x6e5d,0x6e5e, -1, -1, -1, -1, -1,
-1,0x6e62,0x6e63,0x6e68,0x6e73,0x6e7b,0x6e7d,0x6e8d,
0x6e93,0x6e99,0x6ea0,0x6ea7,0x6ead,0x6eae,0x6eb1,0x6eb3,
0x6ebb,0x6ebf,0x6ec0,0x6ec1,0x6ec3,0x6ec7,0x6ec8,0x6eca,
0x6ecd,0x6ece,0x6ecf,0x6eeb,0x6eed,0x6eee,0x6ef9,0x6efb,
0x6efd,0x6f04,0x6f08,0x6f0a,0x6f0c,0x6f0d,0x6f16,0x6f18,
0x6f1a,0x6f1b,0x6f26,0x6f29,0x6f2a,0x6f2f,0x6f30,0x6f33,
0x6f36,0x6f3b,0x6f3c,0x6f2d,0x6f4f,0x6f51,0x6f52,0x6f53,
0x6f57,0x6f59,0x6f5a,0x6f5d,0x6f5e,0x6f61,0x6f62,0x6f68,
0x6f6c,0x6f7d,0x6f7e,0x6f83,0x6f87,0x6f88,0x6f8b,0x6f8c,
0x6f8d,0x6f90,0x6f92,0x6f93,0x6f94,0x6f96,0x6f9a,0x6f9f,
0x6fa0,0x6fa5,0x6fa6,0x6fa7,0x6fa8,0x6fae,0x6faf,0x6fb0,
0x6fb5,0x6fb6,0x6fbc,0x6fc5,0x6fc7,0x6fc8,0x6fca, -1,
-1, -1, -1, -1, -1,0x6fda,0x6fde,0x6fe8,
0x6fe9,0x6ff0,0x6ff5,0x6ff9,0x6ffc,0x6ffd,0x7000,0x7005,
0x7006,0x7007,0x700d,0x7017,0x7020,0x7023,0x702f,0x7034,
0x7037,0x7039,0x703c,0x7043,0x7044,0x7048,0x7049,0x704a,
0x704b,0x7054,0x7055,0x705d,0x705e,0x704e,0x7064,0x7065,
0x706c,0x706e,0x7075,0x7076,0x707e,0x7081,0x7085,0x7086,
0x7094,0x7095,0x7096,0x7097,0x7098,0x709b,0x70a4,0x70ab,
0x70b0,0x70b1,0x70b4,0x70b7,0x70ca,0x70d1,0x70d3,0x70d4,
0x70d5,0x70d6,0x70d8,0x70dc,0x70e4,0x70fa,0x7103,0x7104,
0x7105,0x7106,0x7107,0x710b,0x710c,0x710f,0x711e,0x7120,
0x712b,0x712d,0x712f,0x7130,0x7131,0x7138,0x7141,0x7145,
0x7146,0x7147,0x714a,0x714b,0x7150,0x7152,0x7157,0x715a,
0x715c,0x715e,0x7160, -1, -1, -1, -1, -1,
-1,0x7168,0x7179,0x7180,0x7185,0x7187,0x718c,0x7192,
0x719a,0x719b,0x71a0,0x71a2,0x71af,0x71b0,0x71b2,0x71b3,
0x71ba,0x71bf,0x71c0,0x71c1,0x71c4,0x71cb,0x71cc,0x71d3,
0x71d6,0x71d9,0x71da,0x71dc,0x71f8,0x71fe,0x7200,0x7207,
0x7208,0x7209,0x7213,0x7217,0x721a,0x721d,0x721f,0x7224,
0x722b,0x722f,0x7234,0x7238,0x7239,0x7241,0x7242,0x7243,
0x7245,0x724e,0x724f,0x7250,0x7253,0x7255,0x7256,0x725a,
0x725c,0x725e,0x7260,0x7263,0x7268,0x726b,0x726e,0x726f,
0x7271,0x7277,0x7278,0x727b,0x727c,0x727f,0x7284,0x7289,
0x728d,0x728e,0x7293,0x729b,0x72a8,0x72ad,0x72ae,0x72b1,
0x72b4,0x72be,0x72c1,0x72c7,0x72c9,0x72cc,0x72d5,0x72d6,
0x72d8,0x72df,0x72e5,0x72f3,0x72f4,0x72fa,0x72fb, -1,
-1, -1, -1, -1, -1,0x72fe,0x7302,0x7304,
0x7305,0x7307,0x730b,0x730d,0x7312,0x7313,0x7318,0x7319,
0x731e,0x7322,0x7324,0x7327,0x7328,0x732c,0x7331,0x7332,
0x7335,0x733a,0x733b,0x733d,0x7343,0x734d,0x7350,0x7352,
0x7356,0x7358,0x735d,0x735e,0x735f,0x7360,0x7366,0x7367,
0x7369,0x736b,0x736c,0x736e,0x736f,0x7371,0x7377,0x7379,
0x737c,0x7380,0x7381,0x7383,0x7385,0x7386,0x738e,0x7390,
0x7393,0x7395,0x7397,0x7398,0x739c,0x739e,0x739f,0x73a0,
0x73a2,0x73a5,0x73a6,0x73aa,0x73ab,0x73ad,0x73b5,0x73b7,
0x73b9,0x73bc,0x73bd,0x73bf,0x73c5,0x73c6,0x73c9,0x73cb,
0x73cc,0x73cf,0x73d2,0x73d3,0x73d6,0x73d9,0x73dd,0x73e1,
0x73e3,0x73e6,0x73e7,0x73e9,0x73f4,0x73f5,0x73f7,0x73f9,
0x73fa,0x73fb,0x73fd, -1, -1, -1, -1, -1,
-1,0x73ff,0x7400,0x7401,0x7404,0x7407,0x740a,0x7411,
0x741a,0x741b,0x7424,0x7426,0x7428,0x7429,0x742a,0x742b,
0x742c,0x742d,0x742e,0x742f,0x7430,0x7431,0x7439,0x7440,
0x7443,0x7444,0x7446,0x7447,0x744b,0x744d,0x7451,0x7452,
0x7457,0x745d,0x7462,0x7466,0x7467,0x7468,0x746b,0x746d,
0x746e,0x7471,0x7472,0x7480,0x7481,0x7485,0x7486,0x7487,
0x7489,0x748f,0x7490,0x7491,0x7492,0x7498,0x7499,0x749a,
0x749c,0x749f,0x74a0,0x74a1,0x74a3,0x74a6,0x74a8,0x74a9,
0x74aa,0x74ab,0x74ae,0x74af,0x74b1,0x74b2,0x74b5,0x74b9,
0x74bb,0x74bf,0x74c8,0x74c9,0x74cc,0x74d0,0x74d3,0x74d8,
0x74da,0x74db,0x74de,0x74df,0x74e4,0x74e8,0x74ea,0x74eb,
0x74ef,0x74f4,0x74fa,0x74fb,0x74fc,0x74ff,0x7506, -1,
-1, -1, -1, -1, -1,0x7512,0x7516,0x7517,
0x7520,0x7521,0x7524,0x7527,0x7529,0x752a,0x752f,0x7536,
0x7539,0x753d,0x753e,0x753f,0x7540,0x7543,0x7547,0x7548,
0x754e,0x7550,0x7552,0x7557,0x755e,0x755f,0x7561,0x756f,
0x7571,0x7579,0x757a,0x757b,0x757c,0x757d,0x757e,0x7581,
0x7585,0x7590,0x7592,0x7593,0x7595,0x7599,0x759c,0x75a2,
0x75a4,0x75b4,0x75ba,0x75bf,0x75c0,0x75c1,0x75c4,0x75c6,
0x75cc,0x75ce,0x75cf,0x75d7,0x75dc,0x75df,0x75e0,0x75e1,
0x75e4,0x75e7,0x75ec,0x75ee,0x75ef,0x75f1,0x75f9,0x7600,
0x7602,0x7603,0x7604,0x7607,0x7608,0x760a,0x760c,0x760f,
0x7612,0x7613,0x7615,0x7616,0x7619,0x761b,0x761c,0x761d,
0x761e,0x7623,0x7625,0x7626,0x7629,0x762d,0x7632,0x7633,
0x7635,0x7638,0x7639, -1, -1, -1, -1, -1,
-1,0x763a,0x763c,0x764a,0x7640,0x7641,0x7643,0x7644,
0x7645,0x7649,0x764b,0x7655,0x7659,0x765f,0x7664,0x7665,
0x766d,0x766e,0x766f,0x7671,0x7674,0x7681,0x7685,0x768c,
0x768d,0x7695,0x769b,0x769c,0x769d,0x769f,0x76a0,0x76a2,
0x76a3,0x76a4,0x76a5,0x76a6,0x76a7,0x76a8,0x76aa,0x76ad,
0x76bd,0x76c1,0x76c5,0x76c9,0x76cb,0x76cc,0x76ce,0x76d4,
0x76d9,0x76e0,0x76e6,0x76e8,0x76ec,0x76f0,0x76f1,0x76f6,
0x76f9,0x76fc,0x7700,0x7706,0x770a,0x770e,0x7712,0x7714,
0x7715,0x7717,0x7719,0x771a,0x771c,0x7722,0x7728,0x772d,
0x772e,0x772f,0x7734,0x7735,0x7736,0x7739,0x773d,0x773e,
0x7742,0x7745,0x7746,0x774a,0x774d,0x774e,0x774f,0x7752,
0x7756,0x7757,0x775c,0x775e,0x775f,0x7760,0x7762, -1,
-1, -1, -1, -1, -1,0x7764,0x7767,0x776a,
0x776c,0x7770,0x7772,0x7773,0x7774,0x777a,0x777d,0x7780,
0x7784,0x778c,0x778d,0x7794,0x7795,0x7796,0x779a,0x779f,
0x77a2,0x77a7,0x77aa,0x77ae,0x77af,0x77b1,0x77b5,0x77be,
0x77c3,0x77c9,0x77d1,0x77d2,0x77d5,0x77d9,0x77de,0x77df,
0x77e0,0x77e4,0x77e6,0x77ea,0x77ec,0x77f0,0x77f1,0x77f4,
0x77f8,0x77fb,0x7805,0x7806,0x7809,0x780d,0x780e,0x7811,
0x781d,0x7821,0x7822,0x7823,0x782d,0x782e,0x7830,0x7835,
0x7837,0x7843,0x7844,0x7847,0x7848,0x784c,0x784e,0x7852,
0x785c,0x785e,0x7860,0x7861,0x7863,0x7864,0x7868,0x786a,
0x786e,0x787a,0x787e,0x788a,0x788f,0x7894,0x7898,0x78a1,
0x789d,0x789e,0x789f,0x78a4,0x78a8,0x78ac,0x78ad,0x78b0,
0x78b1,0x78b2,0x78b3, -1, -1, -1, -1, -1,
-1,0x78bb,0x78bd,0x78bf,0x78c7,0x78c8,0x78c9,0x78cc,
0x78ce,0x78d2,0x78d3,0x78d5,0x78d6,0x78e4,0x78db,0x78df,
0x78e0,0x78e1,0x78e6,0x78ea,0x78f2,0x78f3,0x7900,0x78f6,
0x78f7,0x78fa,0x78fb,0x78ff,0x7906,0x790c,0x7910,0x791a,
0x791c,0x791e,0x791f,0x7920,0x7925,0x7927,0x7929,0x792d,
0x7931,0x7934,0x7935,0x793b,0x793d,0x793f,0x7944,0x7945,
0x7946,0x794a,0x794b,0x794f,0x7951,0x7954,0x7958,0x795b,
0x795c,0x7967,0x7969,0x796b,0x7972,0x7979,0x797b,0x797c,
0x797e,0x798b,0x798c,0x7991,0x7993,0x7994,0x7995,0x7996,
0x7998,0x799b,0x799c,0x79a1,0x79a8,0x79a9,0x79ab,0x79af,
0x79b1,0x79b4,0x79b8,0x79bb,0x79c2,0x79c4,0x79c7,0x79c8,
0x79ca,0x79cf,0x79d4,0x79d6,0x79da,0x79dd,0x79de, -1,
-1, -1, -1, -1, -1,0x79e0,0x79e2,0x79e5,
0x79ea,0x79eb,0x79ed,0x79f1,0x79f8,0x79fc,0x7a02,0x7a03,
0x7a07,0x7a09,0x7a0a,0x7a0c,0x7a11,0x7a15,0x7a1b,0x7a1e,
0x7a21,0x7a27,0x7a2b,0x7a2d,0x7a2f,0x7a30,0x7a34,0x7a35,
0x7a38,0x7a39,0x7a3a,0x7a44,0x7a45,0x7a47,0x7a48,0x7a4c,
0x7a55,0x7a56,0x7a59,0x7a5c,0x7a5d,0x7a5f,0x7a60,0x7a65,
0x7a67,0x7a6a,0x7a6d,0x7a75,0x7a78,0x7a7e,0x7a80,0x7a82,
0x7a85,0x7a86,0x7a8a,0x7a8b,0x7a90,0x7a91,0x7a94,0x7a9e,
0x7aa0,0x7aa3,0x7aac,0x7ab3,0x7ab5,0x7ab9,0x7abb,0x7abc,
0x7ac6,0x7ac9,0x7acc,0x7ace,0x7ad1,0x7adb,0x7ae8,0x7ae9,
0x7aeb,0x7aec,0x7af1,0x7af4,0x7afb,0x7afd,0x7afe,0x7b07,
0x7b14,0x7b1f,0x7b23,0x7b27,0x7b29,0x7b2a,0x7b2b,0x7b2d,
0x7b2e,0x7b2f,0x7b30, -1, -1, -1, -1, -1,
-1,0x7b31,0x7b34,0x7b3d,0x7b3f,0x7b40,0x7b41,0x7b47,
0x7b4e,0x7b55,0x7b60,0x7b64,0x7b66,0x7b69,0x7b6a,0x7b6d,
0x7b6f,0x7b72,0x7b73,0x7b77,0x7b84,0x7b89,0x7b8e,0x7b90,
0x7b91,0x7b96,0x7b9b,0x7b9e,0x7ba0,0x7ba5,0x7bac,0x7baf,
0x7bb0,0x7bb2,0x7bb5,0x7bb6,0x7bba,0x7bbb,0x7bbc,0x7bbd,
0x7bc2,0x7bc5,0x7bc8,0x7bca,0x7bd4,0x7bd6,0x7bd7,0x7bd9,
0x7bda,0x7bdb,0x7be8,0x7bea,0x7bf2,0x7bf4,0x7bf5,0x7bf8,
0x7bf9,0x7bfa,0x7bfc,0x7bfe,0x7c01,0x7c02,0x7c03,0x7c04,
0x7c06,0x7c09,0x7c0b,0x7c0c,0x7c0e,0x7c0f,0x7c19,0x7c1b,
0x7c20,0x7c25,0x7c26,0x7c28,0x7c2c,0x7c31,0x7c33,0x7c34,
0x7c36,0x7c39,0x7c3a,0x7c46,0x7c4a,0x7c55,0x7c51,0x7c52,
0x7c53,0x7c59,0x7c5a,0x7c5b,0x7c5c,0x7c5d,0x7c5e, -1,
-1, -1, -1, -1, -1,0x7c61,0x7c63,0x7c67,
0x7c69,0x7c6d,0x7c6e,0x7c70,0x7c72,0x7c79,0x7c7c,0x7c7d,
0x7c86,0x7c87,0x7c8f,0x7c94,0x7c9e,0x7ca0,0x7ca6,0x7cb0,
0x7cb6,0x7cb7,0x7cba,0x7cbb,0x7cbc,0x7cbf,0x7cc4,0x7cc7,
0x7cc8,0x7cc9,0x7ccd,0x7ccf,0x7cd3,0x7cd4,0x7cd5,0x7cd7,
0x7cd9,0x7cda,0x7cdd,0x7ce6,0x7ce9,0x7ceb,0x7cf5,0x7d03,
0x7d07,0x7d08,0x7d09,0x7d0f,0x7d11,0x7d12,0x7d13,0x7d16,
0x7d1d,0x7d1e,0x7d23,0x7d26,0x7d2a,0x7d2d,0x7d31,0x7d3c,
0x7d3d,0x7d3e,0x7d40,0x7d41,0x7d47,0x7d48,0x7d4d,0x7d51,
0x7d53,0x7d57,0x7d59,0x7d5a,0x7d5c,0x7d5d,0x7d65,0x7d67,
0x7d6a,0x7d70,0x7d78,0x7d7a,0x7d7b,0x7d7f,0x7d81,0x7d82,
0x7d83,0x7d85,0x7d86,0x7d88,0x7d8b,0x7d8c,0x7d8d,0x7d91,
0x7d96,0x7d97,0x7d9d, -1, -1, -1, -1, -1,
-1,0x7d9e,0x7da6,0x7da7,0x7daa,0x7db3,0x7db6,0x7db7,
0x7db9,0x7dc2,0x7dc3,0x7dc4,0x7dc5,0x7dc6,0x7dcc,0x7dcd,
0x7dce,0x7dd7,0x7dd9,0x7e00,0x7de2,0x7de5,0x7de6,0x7dea,
0x7deb,0x7ded,0x7df1,0x7df5,0x7df6,0x7df9,0x7dfa,0x7e08,
0x7e10,0x7e11,0x7e15,0x7e17,0x7e1c,0x7e1d,0x7e20,0x7e27,
0x7e28,0x7e2c,0x7e2d,0x7e2f,0x7e33,0x7e36,0x7e3f,0x7e44,
0x7e45,0x7e47,0x7e4e,0x7e50,0x7e52,0x7e58,0x7e5f,0x7e61,
0x7e62,0x7e65,0x7e6b,0x7e6e,0x7e6f,0x7e73,0x7e78,0x7e7e,
0x7e81,0x7e86,0x7e87,0x7e8a,0x7e8d,0x7e91,0x7e95,0x7e98,
0x7e9a,0x7e9d,0x7e9e,0x7f3c,0x7f3b,0x7f3d,0x7f3e,0x7f3f,
0x7f43,0x7f44,0x7f47,0x7f4f,0x7f52,0x7f53,0x7f5b,0x7f5c,
0x7f5d,0x7f61,0x7f63,0x7f64,0x7f65,0x7f66,0x7f6d, -1,
-1, -1, -1, -1, -1,0x7f71,0x7f7d,0x7f7e,
0x7f7f,0x7f80,0x7f8b,0x7f8d,0x7f8f,0x7f90,0x7f91,0x7f96,
0x7f97,0x7f9c,0x7fa1,0x7fa2,0x7fa6,0x7faa,0x7fad,0x7fb4,
0x7fbc,0x7fbf,0x7fc0,0x7fc3,0x7fc8,0x7fce,0x7fcf,0x7fdb,
0x7fdf,0x7fe3,0x7fe5,0x7fe8,0x7fec,0x7fee,0x7fef,0x7ff2,
0x7ffa,0x7ffd,0x7ffe,0x7fff,0x8007,0x8008,0x800a,0x800d,
0x800e,0x800f,0x8011,0x8013,0x8014,0x8016,0x801d,0x801e,
0x801f,0x8020,0x8024,0x8026,0x802c,0x802e,0x8030,0x8034,
0x8035,0x8037,0x8039,0x803a,0x803c,0x803e,0x8040,0x8044,
0x8060,0x8064,0x8066,0x806d,0x8071,0x8075,0x8081,0x8088,
0x808e,0x809c,0x809e,0x80a6,0x80a7,0x80ab,0x80b8,0x80b9,
0x80c8,0x80cd,0x80cf,0x80d2,0x80d4,0x80d5,0x80d7,0x80d8,
0x80e0,0x80ed,0x80ee, -1, -1, -1, -1, -1,
-1,0x80f0,0x80f2,0x80f3,0x80f6,0x80f9,0x80fa,0x80fe,
0x8103,0x810b,0x8116,0x8117,0x8118,0x811c,0x811e,0x8120,
0x8124,0x8127,0x812c,0x8130,0x8135,0x813a,0x813c,0x8145,
0x8147,0x814a,0x814c,0x8152,0x8157,0x8160,0x8161,0x8167,
0x8168,0x8169,0x816d,0x816f,0x8177,0x8181,0x8190,0x8184,
0x8185,0x8186,0x818b,0x818e,0x8196,0x8198,0x819b,0x819e,
0x81a2,0x81ae,0x81b2,0x81b4,0x81bb,0x81cb,0x81c3,0x81c5,
0x81ca,0x81ce,0x81cf,0x81d5,0x81d7,0x81db,0x81dd,0x81de,
0x81e1,0x81e4,0x81eb,0x81ec,0x81f0,0x81f1,0x81f2,0x81f5,
0x81f6,0x81f8,0x81f9,0x81fd,0x81ff,0x8200,0x8203,0x820f,
0x8213,0x8214,0x8219,0x821a,0x821d,0x8221,0x8222,0x8228,
0x8232,0x8234,0x823a,0x8243,0x8244,0x8245,0x8246, -1,
-1, -1, -1, -1, -1,0x824b,0x824e,0x824f,
0x8251,0x8256,0x825c,0x8260,0x8263,0x8267,0x826d,0x8274,
0x827b,0x827d,0x827f,0x8280,0x8281,0x8283,0x8284,0x8287,
0x8289,0x828a,0x828e,0x8291,0x8294,0x8296,0x8298,0x829a,
0x829b,0x82a0,0x82a1,0x82a3,0x82a4,0x82a7,0x82a8,0x82a9,
0x82aa,0x82ae,0x82b0,0x82b2,0x82b4,0x82b7,0x82ba,0x82bc,
0x82be,0x82bf,0x82c6,0x82d0,0x82d5,0x82da,0x82e0,0x82e2,
0x82e4,0x82e8,0x82ea,0x82ed,0x82ef,0x82f6,0x82f7,0x82fd,
0x82fe,0x8300,0x8301,0x8307,0x8308,0x830a,0x830b,0x8354,
0x831b,0x831d,0x831e,0x831f,0x8321,0x8322,0x832c,0x832d,
0x832e,0x8330,0x8333,0x8337,0x833a,0x833c,0x833d,0x8342,
0x8343,0x8344,0x8347,0x834d,0x834e,0x8351,0x8355,0x8356,
0x8357,0x8370,0x8378, -1, -1, -1, -1, -1,
-1,0x837d,0x837f,0x8380,0x8382,0x8384,0x8386,0x838d,
0x8392,0x8394,0x8395,0x8398,0x8399,0x839b,0x839c,0x839d,
0x83a6,0x83a7,0x83a9,0x83ac,0x83be,0x83bf,0x83c0,0x83c7,
0x83c9,0x83cf,0x83d0,0x83d1,0x83d4,0x83dd,0x8353,0x83e8,
0x83ea,0x83f6,0x83f8,0x83f9,0x83fc,0x8401,0x8406,0x840a,
0x840f,0x8411,0x8415,0x8419,0x83ad,0x842f,0x8439,0x8445,
0x8447,0x8448,0x844a,0x844d,0x844f,0x8451,0x8452,0x8456,
0x8458,0x8459,0x845a,0x845c,0x8460,0x8464,0x8465,0x8467,
0x846a,0x8470,0x8473,0x8474,0x8476,0x8478,0x847c,0x847d,
0x8481,0x8485,0x8492,0x8493,0x8495,0x849e,0x84a6,0x84a8,
0x84a9,0x84aa,0x84af,0x84b1,0x84b4,0x84ba,0x84bd,0x84be,
0x84c0,0x84c2,0x84c7,0x84c8,0x84cc,0x84cf,0x84d3, -1,
-1, -1, -1, -1, -1,0x84dc,0x84e7,0x84ea,
0x84ef,0x84f0,0x84f1,0x84f2,0x84f7,0x8532,0x84fa,0x84fb,
0x84fd,0x8502,0x8503,0x8507,0x850c,0x850e,0x8510,0x851c,
0x851e,0x8522,0x8523,0x8524,0x8525,0x8527,0x852a,0x852b,
0x852f,0x8533,0x8534,0x8536,0x853f,0x8546,0x854f,0x8550,
0x8551,0x8552,0x8553,0x8556,0x8559,0x855c,0x855d,0x855e,
0x855f,0x8560,0x8561,0x8562,0x8564,0x856b,0x856f,0x8579,
0x857a,0x857b,0x857d,0x857f,0x8581,0x8585,0x8586,0x8589,
0x858b,0x858c,0x858f,0x8593,0x8598,0x859d,0x859f,0x85a0,
0x85a2,0x85a5,0x85a7,0x85b4,0x85b6,0x85b7,0x85b8,0x85bc,
0x85bd,0x85be,0x85bf,0x85c2,0x85c7,0x85ca,0x85cb,0x85ce,
0x85ad,0x85d8,0x85da,0x85df,0x85e0,0x85e6,0x85e8,0x85ed,
0x85f3,0x85f6,0x85fc, -1, -1, -1, -1, -1,
-1,0x85ff,0x8600,0x8604,0x8605,0x860d,0x860e,0x8610,
0x8611,0x8612,0x8618,0x8619,0x861b,0x861e,0x8621,0x8627,
0x8629,0x8636,0x8638,0x863a,0x863c,0x863d,0x8640,0x8642,
0x8646,0x8652,0x8653,0x8656,0x8657,0x8658,0x8659,0x865d,
0x8660,0x8661,0x8662,0x8663,0x8664,0x8669,0x866c,0x866f,
0x8675,0x8676,0x8677,0x867a,0x868d,0x8691,0x8696,0x8698,
0x869a,0x869c,0x86a1,0x86a6,0x86a7,0x86a8,0x86ad,0x86b1,
0x86b3,0x86b4,0x86b5,0x86b7,0x86b8,0x86b9,0x86bf,0x86c0,
0x86c1,0x86c3,0x86c5,0x86d1,0x86d2,0x86d5,0x86d7,0x86da,
0x86dc,0x86e0,0x86e3,0x86e5,0x86e7,0x8688,0x86fa,0x86fc,
0x86fd,0x8704,0x8705,0x8707,0x870b,0x870e,0x870f,0x8710,
0x8713,0x8714,0x8719,0x871e,0x871f,0x8721,0x8723, -1,
-1, -1, -1, -1, -1,0x8728,0x872e,0x872f,
0x8731,0x8732,0x8739,0x873a,0x873c,0x873d,0x873e,0x8740,
0x8743,0x8745,0x874d,0x8758,0x875d,0x8761,0x8764,0x8765,
0x876f,0x8771,0x8772,0x877b,0x8783,0x8784,0x8785,0x8786,
0x8787,0x8788,0x8789,0x878b,0x878c,0x8790,0x8793,0x8795,
0x8797,0x8798,0x8799,0x879e,0x87a0,0x87a3,0x87a7,0x87ac,
0x87ad,0x87ae,0x87b1,0x87b5,0x87be,0x87bf,0x87c1,0x87c8,
0x87c9,0x87ca,0x87ce,0x87d5,0x87d6,0x87d9,0x87da,0x87dc,
0x87df,0x87e2,0x87e3,0x87e4,0x87ea,0x87eb,0x87ed,0x87f1,
0x87f3,0x87f8,0x87fa,0x87ff,0x8801,0x8803,0x8806,0x8809,
0x880a,0x880b,0x8810,0x8819,0x8812,0x8813,0x8814,0x8818,
0x881a,0x881b,0x881c,0x881e,0x881f,0x8828,0x882d,0x882e,
0x8830,0x8832,0x8835, -1, -1, -1, -1, -1,
-1,0x883a,0x883c,0x8841,0x8843,0x8845,0x8848,0x8849,
0x884a,0x884b,0x884e,0x8851,0x8855,0x8856,0x8858,0x885a,
0x885c,0x885f,0x8860,0x8864,0x8869,0x8871,0x8879,0x887b,
0x8880,0x8898,0x889a,0x889b,0x889c,0x889f,0x88a0,0x88a8,
0x88aa,0x88ba,0x88bd,0x88be,0x88c0,0x88ca,0x88cb,0x88cc,
0x88cd,0x88ce,0x88d1,0x88d2,0x88d3,0x88db,0x88de,0x88e7,
0x88ef,0x88f0,0x88f1,0x88f5,0x88f7,0x8901,0x8906,0x890d,
0x890e,0x890f,0x8915,0x8916,0x8918,0x8919,0x891a,0x891c,
0x8920,0x8926,0x8927,0x8928,0x8930,0x8931,0x8932,0x8935,
0x8939,0x893a,0x893e,0x8940,0x8942,0x8945,0x8946,0x8949,
0x894f,0x8952,0x8957,0x895a,0x895b,0x895c,0x8961,0x8962,
0x8963,0x896b,0x896e,0x8970,0x8973,0x8975,0x897a, -1,
-1, -1, -1, -1, -1,0x897b,0x897c,0x897d,
0x8989,0x898d,0x8990,0x8994,0x8995,0x899b,0x899c,0x899f,
0x89a0,0x89a5,0x89b0,0x89b4,0x89b5,0x89b6,0x89b7,0x89bc,
0x89d4,0x89d5,0x89d6,0x89d7,0x89d8,0x89e5,0x89e9,0x89eb,
0x89ed,0x89f1,0x89f3,0x89f6,0x89f9,0x89fd,0x89ff,0x8a04,
0x8a05,0x8a07,0x8a0f,0x8a11,0x8a12,0x8a14,0x8a15,0x8a1e,
0x8a20,0x8a22,0x8a24,0x8a26,0x8a2b,0x8a2c,0x8a2f,0x8a35,
0x8a37,0x8a3d,0x8a3e,0x8a40,0x8a43,0x8a45,0x8a47,0x8a49,
0x8a4d,0x8a4e,0x8a53,0x8a56,0x8a57,0x8a58,0x8a5c,0x8a5d,
0x8a61,0x8a65,0x8a67,0x8a75,0x8a76,0x8a77,0x8a79,0x8a7a,
0x8a7b,0x8a7e,0x8a7f,0x8a80,0x8a83,0x8a86,0x8a8b,0x8a8f,
0x8a90,0x8a92,0x8a96,0x8a97,0x8a99,0x8a9f,0x8aa7,0x8aa9,
0x8aae,0x8aaf,0x8ab3, -1, -1, -1, -1, -1,
-1,0x8ab6,0x8ab7,0x8abb,0x8abe,0x8ac3,0x8ac6,0x8ac8,
0x8ac9,0x8aca,0x8ad1,0x8ad3,0x8ad4,0x8ad5,0x8ad7,0x8add,
0x8adf,0x8aec,0x8af0,0x8af4,0x8af5,0x8af6,0x8afc,0x8aff,
0x8b05,0x8b06,0x8b0b,0x8b11,0x8b1c,0x8b1e,0x8b1f,0x8b0a,
0x8b2d,0x8b30,0x8b37,0x8b3c,0x8b42,0x8b43,0x8b44,0x8b45,
0x8b46,0x8b48,0x8b52,0x8b53,0x8b54,0x8b59,0x8b4d,0x8b5e,
0x8b63,0x8b6d,0x8b76,0x8b78,0x8b79,0x8b7c,0x8b7e,0x8b81,
0x8b84,0x8b85,0x8b8b,0x8b8d,0x8b8f,0x8b94,0x8b95,0x8b9c,
0x8b9e,0x8b9f,0x8c38,0x8c39,0x8c3d,0x8c3e,0x8c45,0x8c47,
0x8c49,0x8c4b,0x8c4f,0x8c51,0x8c53,0x8c54,0x8c57,0x8c58,
0x8c5b,0x8c5d,0x8c59,0x8c63,0x8c64,0x8c66,0x8c68,0x8c69,
0x8c6d,0x8c73,0x8c75,0x8c76,0x8c7b,0x8c7e,0x8c86, -1,
-1, -1, -1, -1, -1,0x8c87,0x8c8b,0x8c90,
0x8c92,0x8c93,0x8c99,0x8c9b,0x8c9c,0x8ca4,0x8cb9,0x8cba,
0x8cc5,0x8cc6,0x8cc9,0x8ccb,0x8ccf,0x8cd6,0x8cd5,0x8cd9,
0x8cdd,0x8ce1,0x8ce8,0x8cec,0x8cef,0x8cf0,0x8cf2,0x8cf5,
0x8cf7,0x8cf8,0x8cfe,0x8cff,0x8d01,0x8d03,0x8d09,0x8d12,
0x8d17,0x8d1b,0x8d65,0x8d69,0x8d6c,0x8d6e,0x8d7f,0x8d82,
0x8d84,0x8d88,0x8d8d,0x8d90,0x8d91,0x8d95,0x8d9e,0x8d9f,
0x8da0,0x8da6,0x8dab,0x8dac,0x8daf,0x8db2,0x8db5,0x8db7,
0x8db9,0x8dbb,0x8dc0,0x8dc5,0x8dc6,0x8dc7,0x8dc8,0x8dca,
0x8dce,0x8dd1,0x8dd4,0x8dd5,0x8dd7,0x8dd9,0x8de4,0x8de5,
0x8de7,0x8dec,0x8df0,0x8dbc,0x8df1,0x8df2,0x8df4,0x8dfd,
0x8e01,0x8e04,0x8e05,0x8e06,0x8e0b,0x8e11,0x8e14,0x8e16,
0x8e20,0x8e21,0x8e22, -1, -1, -1, -1, -1,
-1,0x8e23,0x8e26,0x8e27,0x8e31,0x8e33,0x8e36,0x8e37,
0x8e38,0x8e39,0x8e3d,0x8e40,0x8e41,0x8e4b,0x8e4d,0x8e4e,
0x8e4f,0x8e54,0x8e5b,0x8e5c,0x8e5d,0x8e5e,0x8e61,0x8e62,
0x8e69,0x8e6c,0x8e6d,0x8e6f,0x8e70,0x8e71,0x8e79,0x8e7a,
0x8e7b,0x8e82,0x8e83,0x8e89,0x8e90,0x8e92,0x8e95,0x8e9a,
0x8e9b,0x8e9d,0x8e9e,0x8ea2,0x8ea7,0x8ea9,0x8ead,0x8eae,
0x8eb3,0x8eb5,0x8eba,0x8ebb,0x8ec0,0x8ec1,0x8ec3,0x8ec4,
0x8ec7,0x8ecf,0x8ed1,0x8ed4,0x8edc,0x8ee8,0x8eee,0x8ef0,
0x8ef1,0x8ef7,0x8ef9,0x8efa,0x8eed,0x8f00,0x8f02,0x8f07,
0x8f08,0x8f0f,0x8f10,0x8f16,0x8f17,0x8f18,0x8f1e,0x8f20,
0x8f21,0x8f23,0x8f25,0x8f27,0x8f28,0x8f2c,0x8f2d,0x8f2e,
0x8f34,0x8f35,0x8f36,0x8f37,0x8f3a,0x8f40,0x8f41, -1,
-1, -1, -1, -1, -1,0x8f43,0x8f47,0x8f4f,
0x8f51,0x8f52,0x8f53,0x8f54,0x8f55,0x8f58,0x8f5d,0x8f5e,
0x8f65,0x8f9d,0x8fa0,0x8fa1,0x8fa4,0x8fa5,0x8fa6,0x8fb5,
0x8fb6,0x8fb8,0x8fbe,0x8fc0,0x8fc1,0x8fc6,0x8fca,0x8fcb,
0x8fcd,0x8fd0,0x8fd2,0x8fd3,0x8fd5,0x8fe0,0x8fe3,0x8fe4,
0x8fe8,0x8fee,0x8ff1,0x8ff5,0x8ff6,0x8ffb,0x8ffe,0x9002,
0x9004,0x9008,0x900c,0x9018,0x901b,0x9028,0x9029,0x902f,
0x902a,0x902c,0x902d,0x9033,0x9034,0x9037,0x903f,0x9043,
0x9044,0x904c,0x905b,0x905d,0x9062,0x9066,0x9067,0x906c,
0x9070,0x9074,0x9079,0x9085,0x9088,0x908b,0x908c,0x908e,
0x9090,0x9095,0x9097,0x9098,0x9099,0x909b,0x90a0,0x90a1,
0x90a2,0x90a5,0x90b0,0x90b2,0x90b3,0x90b4,0x90b6,0x90bd,
0x90cc,0x90be,0x90c3, -1, -1, -1, -1, -1,
-1,0x90c4,0x90c5,0x90c7,0x90c8,0x90d5,0x90d7,0x90d8,
0x90d9,0x90dc,0x90dd,0x90df,0x90e5,0x90d2,0x90f6,0x90eb,
0x90ef,0x90f0,0x90f4,0x90fe,0x90ff,0x9100,0x9104,0x9105,
0x9106,0x9108,0x910d,0x9110,0x9114,0x9116,0x9117,0x9118,
0x911a,0x911c,0x911e,0x9120,0x9125,0x9122,0x9123,0x9127,
0x9129,0x912e,0x912f,0x9131,0x9134,0x9136,0x9137,0x9139,
0x913a,0x913c,0x913d,0x9143,0x9147,0x9148,0x914f,0x9153,
0x9157,0x9159,0x915a,0x915b,0x9161,0x9164,0x9167,0x916d,
0x9174,0x9179,0x917a,0x917b,0x9181,0x9183,0x9185,0x9186,
0x918a,0x918e,0x9191,0x9193,0x9194,0x9195,0x9198,0x919e,
0x91a1,0x91a6,0x91a8,0x91ac,0x91ad,0x91ae,0x91b0,0x91b1,
0x91b2,0x91b3,0x91b6,0x91bb,0x91bc,0x91bd,0x91bf, -1,
-1, -1, -1, -1, -1,0x91c2,0x91c3,0x91c5,
0x91d3,0x91d4,0x91d7,0x91d9,0x91da,0x91de,0x91e4,0x91e5,
0x91e9,0x91ea,0x91ec,0x91ed,0x91ee,0x91ef,0x91f0,0x91f1,
0x91f7,0x91f9,0x91fb,0x91fd,0x9200,0x9201,0x9204,0x9205,
0x9206,0x9207,0x9209,0x920a,0x920c,0x9210,0x9212,0x9213,
0x9216,0x9218,0x921c,0x921d,0x9223,0x9224,0x9225,0x9226,
0x9228,0x922e,0x922f,0x9230,0x9233,0x9235,0x9236,0x9238,
0x9239,0x923a,0x923c,0x923e,0x9240,0x9242,0x9243,0x9246,
0x9247,0x924a,0x924d,0x924e,0x924f,0x9251,0x9258,0x9259,
0x925c,0x925d,0x9260,0x9261,0x9265,0x9267,0x9268,0x9269,
0x926e,0x926f,0x9270,0x9275,0x9276,0x9277,0x9278,0x9279,
0x927b,0x927c,0x927d,0x927f,0x9288,0x9289,0x928a,0x928d,
0x928e,0x9292,0x9297, -1, -1, -1, -1, -1,
-1,0x9299,0x929f,0x92a0,0x92a4,0x92a5,0x92a7,0x92a8,
0x92ab,0x92af,0x92b2,0x92b6,0x92b8,0x92ba,0x92bb,0x92bc,
0x92bd,0x92bf,0x92c0,0x92c1,0x92c2,0x92c3,0x92c5,0x92c6,
0x92c7,0x92c8,0x92cb,0x92cc,0x92cd,0x92ce,0x92d0,0x92d3,
0x92d5,0x92d7,0x92d8,0x92d9,0x92dc,0x92dd,0x92df,0x92e0,
0x92e1,0x92e3,0x92e5,0x92e7,0x92e8,0x92ec,0x92ee,0x92f0,
0x92f9,0x92fb,0x92ff,0x9300,0x9302,0x9308,0x930d,0x9311,
0x9314,0x9315,0x931c,0x931d,0x931e,0x931f,0x9321,0x9324,
0x9325,0x9327,0x9329,0x932a,0x9333,0x9334,0x9336,0x9337,
0x9347,0x9348,0x9349,0x9350,0x9351,0x9352,0x9355,0x9357,
0x9358,0x935a,0x935e,0x9364,0x9365,0x9367,0x9369,0x936a,
0x936d,0x936f,0x9370,0x9371,0x9373,0x9374,0x9376, -1,
-1, -1, -1, -1, -1,0x937a,0x937d,0x937f,
0x9380,0x9381,0x9382,0x9388,0x938a,0x938b,0x938d,0x938f,
0x9392,0x9395,0x9398,0x939b,0x939e,0x93a1,0x93a3,0x93a4,
0x93a6,0x93a8,0x93ab,0x93b4,0x93b5,0x93b6,0x93ba,0x93a9,
0x93c1,0x93c4,0x93c5,0x93c6,0x93c7,0x93c9,0x93ca,0x93cb,
0x93cc,0x93cd,0x93d3,0x93d9,0x93dc,0x93de,0x93df,0x93e2,
0x93e6,0x93e7,0x93f9,0x93f7,0x93f8,0x93fa,0x93fb,0x93fd,
0x9401,0x9402,0x9404,0x9408,0x9409,0x940d,0x940e,0x940f,
0x9415,0x9416,0x9417,0x941f,0x942e,0x942f,0x9431,0x9432,
0x9433,0x9434,0x943b,0x943f,0x943d,0x9443,0x9445,0x9448,
0x944a,0x944c,0x9455,0x9459,0x945c,0x945f,0x9461,0x9463,
0x9468,0x946b,0x946d,0x946e,0x946f,0x9471,0x9472,0x9484,
0x9483,0x9578,0x9579, -1, -1, -1, -1, -1,
-1,0x957e,0x9584,0x9588,0x958c,0x958d,0x958e,0x959d,
0x959e,0x959f,0x95a1,0x95a6,0x95a9,0x95ab,0x95ac,0x95b4,
0x95b6,0x95ba,0x95bd,0x95bf,0x95c6,0x95c8,0x95c9,0x95cb,
0x95d0,0x95d1,0x95d2,0x95d3,0x95d9,0x95da,0x95dd,0x95de,
0x95df,0x95e0,0x95e4,0x95e6,0x961d,0x961e,0x9622,0x9624,
0x9625,0x9626,0x962c,0x9631,0x9633,0x9637,0x9638,0x9639,
0x963a,0x963c,0x963d,0x9641,0x9652,0x9654,0x9656,0x9657,
0x9658,0x9661,0x966e,0x9674,0x967b,0x967c,0x967e,0x967f,
0x9681,0x9682,0x9683,0x9684,0x9689,0x9691,0x9696,0x969a,
0x969d,0x969f,0x96a4,0x96a5,0x96a6,0x96a9,0x96ae,0x96af,
0x96b3,0x96ba,0x96ca,0x96d2,0x5db2,0x96d8,0x96da,0x96dd,
0x96de,0x96df,0x96e9,0x96ef,0x96f1,0x96fa,0x9702, -1,
-1, -1, -1, -1, -1,0x9703,0x9705,0x9709,
0x971a,0x971b,0x971d,0x9721,0x9722,0x9723,0x9728,0x9731,
0x9733,0x9741,0x9743,0x974a,0x974e,0x974f,0x9755,0x9757,
0x9758,0x975a,0x975b,0x9763,0x9767,0x976a,0x976e,0x9773,
0x9776,0x9777,0x9778,0x977b,0x977d,0x977f,0x9780,0x9789,
0x9795,0x9796,0x9797,0x9799,0x979a,0x979e,0x979f,0x97a2,
0x97ac,0x97ae,0x97b1,0x97b2,0x97b5,0x97b6,0x97b8,0x97b9,
0x97ba,0x97bc,0x97be,0x97bf,0x97c1,0x97c4,0x97c5,0x97c7,
0x97c9,0x97ca,0x97cc,0x97cd,0x97ce,0x97d0,0x97d1,0x97d4,
0x97d7,0x97d8,0x97d9,0x97dd,0x97de,0x97e0,0x97db,0x97e1,
0x97e4,0x97ef,0x97f1,0x97f4,0x97f7,0x97f8,0x97fa,0x9807,
0x980a,0x9819,0x980d,0x980e,0x9814,0x9816,0x981c,0x981e,
0x9820,0x9823,0x9826, -1, -1, -1, -1, -1,
-1,0x982b,0x982e,0x982f,0x9830,0x9832,0x9833,0x9835,
0x9825,0x983e,0x9844,0x9847,0x984a,0x9851,0x9852,0x9853,
0x9856,0x9857,0x9859,0x985a,0x9862,0x9863,0x9865,0x9866,
0x986a,0x986c,0x98ab,0x98ad,0x98ae,0x98b0,0x98b4,0x98b7,
0x98b8,0x98ba,0x98bb,0x98bf,0x98c2,0x98c5,0x98c8,0x98cc,
0x98e1,0x98e3,0x98e5,0x98e6,0x98e7,0x98ea,0x98f3,0x98f6,
0x9902,0x9907,0x9908,0x9911,0x9915,0x9916,0x9917,0x991a,
0x991b,0x991c,0x991f,0x9922,0x9926,0x9927,0x992b,0x9931,
0x9932,0x9933,0x9934,0x9935,0x9939,0x993a,0x993b,0x993c,
0x9940,0x9941,0x9946,0x9947,0x9948,0x994d,0x994e,0x9954,
0x9958,0x9959,0x995b,0x995c,0x995e,0x995f,0x9960,0x999b,
0x999d,0x999f,0x99a6,0x99b0,0x99b1,0x99b2,0x99b5, -1,
-1, -1, -1, -1, -1,0x99b9,0x99ba,0x99bd,
0x99bf,0x99c3,0x99c9,0x99d3,0x99d4,0x99d9,0x99da,0x99dc,
0x99de,0x99e7,0x99ea,0x99eb,0x99ec,0x99f0,0x99f4,0x99f5,
0x99f9,0x99fd,0x99fe,0x9a02,0x9a03,0x9a04,0x9a0b,0x9a0c,
0x9a10,0x9a11,0x9a16,0x9a1e,0x9a20,0x9a22,0x9a23,0x9a24,
0x9a27,0x9a2d,0x9a2e,0x9a33,0x9a35,0x9a36,0x9a38,0x9a47,
0x9a41,0x9a44,0x9a4a,0x9a4b,0x9a4c,0x9a4e,0x9a51,0x9a54,
0x9a56,0x9a5d,0x9aaa,0x9aac,0x9aae,0x9aaf,0x9ab2,0x9ab4,
0x9ab5,0x9ab6,0x9ab9,0x9abb,0x9abe,0x9abf,0x9ac1,0x9ac3,
0x9ac6,0x9ac8,0x9ace,0x9ad0,0x9ad2,0x9ad5,0x9ad6,0x9ad7,
0x9adb,0x9adc,0x9ae0,0x9ae4,0x9ae5,0x9ae7,0x9ae9,0x9aec,
0x9af2,0x9af3,0x9af5,0x9af9,0x9afa,0x9afd,0x9aff,0x9b00,
0x9b01,0x9b02,0x9b03, -1, -1, -1, -1, -1,
-1,0x9b04,0x9b05,0x9b08,0x9b09,0x9b0b,0x9b0c,0x9b0d,
0x9b0e,0x9b10,0x9b12,0x9b16,0x9b19,0x9b1b,0x9b1c,0x9b20,
0x9b26,0x9b2b,0x9b2d,0x9b33,0x9b34,0x9b35,0x9b37,0x9b39,
0x9b3a,0x9b3d,0x9b48,0x9b4b,0x9b4c,0x9b55,0x9b56,0x9b57,
0x9b5b,0x9b5e,0x9b61,0x9b63,0x9b65,0x9b66,0x9b68,0x9b6a,
0x9b6b,0x9b6c,0x9b6d,0x9b6e,0x9b73,0x9b75,0x9b77,0x9b78,
0x9b79,0x9b7f,0x9b80,0x9b84,0x9b85,0x9b86,0x9b87,0x9b89,
0x9b8a,0x9b8b,0x9b8d,0x9b8f,0x9b90,0x9b94,0x9b9a,0x9b9d,
0x9b9e,0x9ba6,0x9ba7,0x9ba9,0x9bac,0x9bb0,0x9bb1,0x9bb2,
0x9bb7,0x9bb8,0x9bbb,0x9bbc,0x9bbe,0x9bbf,0x9bc1,0x9bc7,
0x9bc8,0x9bce,0x9bd0,0x9bd7,0x9bd8,0x9bdd,0x9bdf,0x9be5,
0x9be7,0x9bea,0x9beb,0x9bef,0x9bf3,0x9bf7,0x9bf8, -1,
-1, -1, -1, -1, -1,0x9bf9,0x9bfa,0x9bfd,
0x9bff,0x9c00,0x9c02,0x9c0b,0x9c0f,0x9c11,0x9c16,0x9c18,
0x9c19,0x9c1a,0x9c1c,0x9c1e,0x9c22,0x9c23,0x9c26,0x9c27,
0x9c28,0x9c29,0x9c2a,0x9c31,0x9c35,0x9c36,0x9c37,0x9c3d,
0x9c41,0x9c43,0x9c44,0x9c45,0x9c49,0x9c4a,0x9c4e,0x9c4f,
0x9c50,0x9c53,0x9c54,0x9c56,0x9c58,0x9c5b,0x9c5d,0x9c5e,
0x9c5f,0x9c63,0x9c69,0x9c6a,0x9c5c,0x9c6b,0x9c68,0x9c6e,
0x9c70,0x9c72,0x9c75,0x9c77,0x9c7b,0x9ce6,0x9cf2,0x9cf7,
0x9cf9,0x9d0b,0x9d02,0x9d11,0x9d17,0x9d18,0x9d1c,0x9d1d,
0x9d1e,0x9d2f,0x9d30,0x9d32,0x9d33,0x9d34,0x9d3a,0x9d3c,
0x9d45,0x9d3d,0x9d42,0x9d43,0x9d47,0x9d4a,0x9d53,0x9d54,
0x9d5f,0x9d63,0x9d62,0x9d65,0x9d69,0x9d6a,0x9d6b,0x9d70,
0x9d76,0x9d77,0x9d7b, -1, -1, -1, -1, -1,
-1,0x9d7c,0x9d7e,0x9d83,0x9d84,0x9d86,0x9d8a,0x9d8d,
0x9d8e,0x9d92,0x9d93,0x9d95,0x9d96,0x9d97,0x9d98,0x9da1,
0x9daa,0x9dac,0x9dae,0x9db1,0x9db5,0x9db9,0x9dbc,0x9dbf,
0x9dc3,0x9dc7,0x9dc9,0x9dca,0x9dd4,0x9dd5,0x9dd6,0x9dd7,
0x9dda,0x9dde,0x9ddf,0x9de0,0x9de5,0x9de7,0x9de9,0x9deb,
0x9dee,0x9df0,0x9df3,0x9df4,0x9dfe,0x9e0a,0x9e02,0x9e07,
0x9e0e,0x9e10,0x9e11,0x9e12,0x9e15,0x9e16,0x9e19,0x9e1c,
0x9e1d,0x9e7a,0x9e7b,0x9e7c,0x9e80,0x9e82,0x9e83,0x9e84,
0x9e85,0x9e87,0x9e8e,0x9e8f,0x9e96,0x9e98,0x9e9b,0x9e9e,
0x9ea4,0x9ea8,0x9eac,0x9eae,0x9eaf,0x9eb0,0x9eb3,0x9eb4,
0x9eb5,0x9ec6,0x9ec8,0x9ecb,0x9ed5,0x9edf,0x9ee4,0x9ee7,
0x9eec,0x9eed,0x9eee,0x9ef0,0x9ef1,0x9ef2,0x9ef5, -1,
-1, -1, -1, -1, -1,0x9ef8,0x9eff,0x9f02,
0x9f03,0x9f09,0x9f0f,0x9f10,0x9f11,0x9f12,0x9f14,0x9f16,
0x9f17,0x9f19,0x9f1a,0x9f1b,0x9f1f,0x9f22,0x9f26,0x9f2a,
0x9f2b,0x9f2f,0x9f31,0x9f32,0x9f34,0x9f37,0x9f39,0x9f3a,
0x9f3c,0x9f3d,0x9f3f,0x9f41,0x9f43,0x9f44,0x9f45,0x9f46,
0x9f47,0x9f53,0x9f55,0x9f56,0x9f57,0x9f58,0x9f5a,0x9f5d,
0x9f5e,0x9f68,0x9f69,0x9f6d,0x9f6e,0x9f6f,0x9f70,0x9f71,
0x9f73,0x9f75,0x9f7a,0x9f7d,0x9f8f,0x9f90,0x9f91,0x9f92,
0x9f94,0x9f96,0x9f97,0x9f9e,0x9fa1,0x9fa2,0x9fa3,0x9fa5,
};

3
src/cmd/tcs/kuten212.h Normal file
View file

@ -0,0 +1,3 @@
#define KUTEN212MAX 7768
extern long tabkuten212[KUTEN212MAX]; /* runes indexed by kuten */

33
src/cmd/tcs/mkfile Normal file
View file

@ -0,0 +1,33 @@
<$PLAN9/src/mkhdr
TARG=tcs
OFILES=tcs.$O\
conv_jis.$O\
conv_big5.$O\
conv_gb.$O\
conv_ksc.$O\
utf.$O\
kuten208.$O\
gb.$O\
ksc.$O\
big5.$O
SHORTLIB=bio 9
<$PLAN9/src/mkone
CFLAGS= -DPLAN9 $CFLAGS
tcs.$O utf.$O: hdr.h
tcs.$O: jis.h
tcs.$O kuten208.$O: kuten208.h
tcs.$O big5.$O: big5.h
tcs.$O gb.$O: gb.h
tcs.$O: cyrillic.h
tcs.$O: conv.h
conv%.$O: conv.h
conv_ksc.$O: ksc.h
clean:V:
rm -f *.[$OS] [$OS].out y.tab.? y.debug y.output $TARG
nuke:V:
rm -f *.[$OS] [$OS].out y.tab.? y.debug y.output $TARG

23
src/cmd/tcs/plan9.h Normal file
View file

@ -0,0 +1,23 @@
typedef unsigned short Rune; /* 16 bits */
typedef unsigned char uchar;
#define Runeerror 0x80 /* decoding error in UTF */
#define Runeself 0x80 /* rune and UTF sequences are the same (<) */
#define UTFmax 6 /* maximum bytes per rune */
/*
plan 9 argument parsing
*/
#define ARGBEGIN for((argv0? 0: (argv0= *argv)),argv++,argc--;\
argv[0] && argv[0][0]=='-' && argv[0][1];\
argc--, argv++) {\
char *_args, *_argt, _argc;\
_args = &argv[0][1];\
if(_args[0]=='-' && _args[1]==0){\
argc--; argv++; break;\
}\
_argc=0;while(*_args) switch(_argc= *_args++)
#define ARGEND }
#define ARGF() (_argt=_args, _args="",\
(*_argt? _argt: argv[1]? (argc--, *++argv): 0))
#define ARGC() _argc
extern char *argv0;

1053
src/cmd/tcs/tcs.c Normal file

File diff suppressed because it is too large Load diff

581
src/cmd/tcs/utf.c Normal file
View file

@ -0,0 +1,581 @@
#ifdef PLAN9
#include <u.h>
#include <libc.h>
#include <bio.h>
#else
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include "plan9.h"
#endif
#include "hdr.h"
/*
the our_* routines are implementations for the corresponding library
routines. for a while, i tried to actually name them wctomb etc
but stopped that after i found a system which made wchar_t an
unsigned char.
*/
#ifdef PLAN9
long getrune(Biobuf *);
long getisorune(Biobuf *);
#else
long getrune(FILE *);
long getisorune(FILE *);
#endif
int our_wctomb(char *s, unsigned long wc);
int our_mbtowc(unsigned long *p, char *s, unsigned n);
int runetoisoutf(char *str, Rune *rune);
int fullisorune(char *str, int n);
int isochartorune(Rune *rune, char *str);
void
utf_in(int fd, long *notused, struct convert *out)
{
#ifndef PLAN9
FILE *fp;
#else /* PLAN9 */
Biobuf b;
#endif /* PLAN9 */
Rune *r;
long l;
USED(notused);
#ifndef PLAN9
if((fp = fdopen(fd, "r")) == NULL){
EPR "%s: input setup error: %s\n", argv0, strerror(errno));
#else /* PLAN9 */
if(Binit(&b, fd, OREAD) < 0){
EPR "%s: input setup error: %r\n", argv0);
#endif /* PLAN9 */
EXIT(1, "input error");
}
r = runes;
for(;;)
#ifndef PLAN9
switch(l = getrune(fp))
#else /* PLAN9 */
switch(l = getrune(&b))
#endif /* PLAN9 */
{
case -1:
goto done;
case -2:
if(squawk)
EPR "%s: bad UTF sequence near byte %ld in input\n", argv0, ninput);
if(clean)
continue;
nerrors++;
l = Runeerror;
default:
*r++ = l;
if(r >= &runes[N]){
OUT(out, runes, r-runes);
r = runes;
}
}
done:
if(r > runes)
OUT(out, runes, r-runes);
}
void
utf_out(Rune *base, int n, long *notused)
{
char *p;
Rune *r;
USED(notused);
nrunes += n;
for(r = base, p = obuf; n-- > 0; r++){
p += our_wctomb(p, *r);
}
noutput += p-obuf;
write(1, obuf, p-obuf);
}
void
isoutf_in(int fd, long *notused, struct convert *out)
{
#ifndef PLAN9
FILE *fp;
#else /* PLAN9 */
Biobuf b;
#endif /* PLAN9 */
Rune *r;
long l;
USED(notused);
#ifndef PLAN9
if((fp = fdopen(fd, "r")) == 0){
EPR "%s: input setup error: %s\n", argv0, strerror(errno));
#else /* PLAN9 */
if(Binit(&b, fd, OREAD) < 0){
EPR "%s: input setup error: %r\n", argv0);
#endif /* PLAN9 */
EXIT(1, "input error");
}
r = runes;
for(;;)
#ifndef PLAN9
switch(l = getisorune(fp))
#else /* PLAN9 */
switch(l = getisorune(&b))
#endif /* PLAN9 */
{
case -1:
goto done;
case -2:
if(squawk)
EPR "%s: bad UTF sequence near byte %ld in input\n", argv0, ninput);
if(clean)
continue;
nerrors++;
l = Runeerror;
default:
*r++ = l;
if(r >= &runes[N]){
OUT(out, runes, r-runes);
r = runes;
}
}
done:
if(r > runes)
OUT(out, runes, r-runes);
}
void
isoutf_out(Rune *base, int n, long *notused)
{
char *p;
Rune *r;
USED(notused);
nrunes += n;
for(r = base, p = obuf; n-- > 0; r++)
p += runetoisoutf(p, r);
noutput += p-obuf;
write(1, obuf, p-obuf);
}
long
#ifndef PLAN9
getrune(FILE *fp)
#else /* PLAN9 */
getrune(Biobuf *bp)
#endif /* PLAN9 */
{
int c, i;
char str[UTFmax]; /* MB_LEN_MAX really */
unsigned long l;
int n;
for(i = 0;;){
#ifndef PLAN9
c = getc(fp);
#else /* PLAN9 */
c = Bgetc(bp);
#endif /* PLAN9 */
if(c < 0)
return(c);
ninput++;
str[i++] = c;
n = our_mbtowc(&l, str, i);
if(n == -1)
return(-2);
if(n > 0)
return(l);
}
}
long
#ifndef PLAN9
getisorune(FILE *fp)
#else /* PLAN9 */
getisorune(Biobuf *bp)
#endif /* PLAN9 */
{
int c, i;
Rune rune;
char str[UTFmax]; /* MB_LEN_MAX really */
for(i = 0;;){
#ifndef PLAN9
c = getc(fp);
#else /* PLAN9 */
c = Bgetc(bp);
#endif /* PLAN9 */
if(c < 0)
return(c);
ninput++;
str[i++] = c;
if(fullisorune(str, i))
break;
}
isochartorune(&rune, str);
if(rune == Runeerror)
return -2;
return(rune);
}
enum
{
Char1 = Runeself, Rune1 = Runeself,
Char21 = 0xA1, Rune21 = 0x0100,
Char22 = 0xF6, Rune22 = 0x4016,
Char3 = 0xFC, Rune3 = 0x10000, /* really 0x38E2E */
Esc = 0xBE, Bad = Runeerror
};
static uchar U[256];
static uchar T[256];
static
void
mktable(void)
{
int i, u;
for(i=0; i<256; i++) {
u = i + (0x5E - 0xA0);
if(i < 0xA0)
u = i + (0xDF - 0x7F);
if(i < 0x7F)
u = i + (0x00 - 0x21);
if(i < 0x21)
u = i + (0xBE - 0x00);
U[i] = u;
T[u] = i;
}
}
int
isochartorune(Rune *rune, char *str)
{
int c, c1, c2;
long l;
if(U[0] == 0)
mktable();
/*
* one character sequence
* 00000-0009F => 00-9F
*/
c = *(uchar*)str;
if(c < Char1) {
*rune = c;
return 1;
}
/*
* two character sequence
* 000A0-000FF => A0; A0-FF
*/
c1 = *(uchar*)(str+1);
if(c < Char21) {
if(c1 >= Rune1 && c1 < Rune21) {
*rune = c1;
return 2;
}
goto bad;
}
/*
* two character sequence
* 00100-04015 => A1-F5; 21-7E/A0-FF
*/
c1 = U[c1];
if(c1 >= Esc)
goto bad;
if(c < Char22) {
*rune = (c-Char21)*Esc + c1 + Rune21;
return 2;
}
/*
* three character sequence
* 04016-38E2D => A6-FB; 21-7E/A0-FF
*/
c2 = U[*(uchar*)(str+2)];
if(c2 >= Esc)
goto bad;
if(c < Char3) {
l = (c-Char22)*Esc*Esc + c1*Esc + c2 + Rune22;
if(l >= Rune3)
goto bad;
*rune = l;
return 3;
}
/*
* bad decoding
*/
bad:
*rune = Bad;
return 1;
}
int
runetoisoutf(char *str, Rune *rune)
{
long c;
if(T[0] == 0)
mktable();
/*
* one character sequence
* 00000-0009F => 00-9F
*/
c = *rune;
if(c < Rune1) {
str[0] = c;
return 1;
}
/*
* two character sequence
* 000A0-000FF => A0; A0-FF
*/
if(c < Rune21) {
str[0] = (uchar)Char1;
str[1] = c;
return 2;
}
/*
* two character sequence
* 00100-04015 => A1-F5; 21-7E/A0-FF
*/
if(c < Rune22) {
c -= Rune21;
str[0] = c/Esc + Char21;
str[1] = T[c%Esc];
return 2;
}
/*
* three character sequence
* 04016-38E2D => A6-FB; 21-7E/A0-FF
*/
c -= Rune22;
str[0] = c/(Esc*Esc) + Char22;
str[1] = T[c/Esc%Esc];
str[2] = T[c%Esc];
return 3;
}
int
fullisorune(char *str, int n)
{
int c;
if(n > 0) {
c = *(uchar*)str;
if(c < Char1)
return 1;
if(n > 1)
if(c < Char22 || n > 2)
return 1;
}
return 0;
}
#ifdef PLAN9
int errno;
#endif
enum
{
T1 = 0x00,
Tx = 0x80,
T2 = 0xC0,
T3 = 0xE0,
T4 = 0xF0,
T5 = 0xF8,
T6 = 0xFC,
Bit1 = 7,
Bitx = 6,
Bit2 = 5,
Bit3 = 4,
Bit4 = 3,
Bit5 = 2,
Bit6 = 2,
Mask1 = (1<<Bit1)-1,
Maskx = (1<<Bitx)-1,
Mask2 = (1<<Bit2)-1,
Mask3 = (1<<Bit3)-1,
Mask4 = (1<<Bit4)-1,
Mask5 = (1<<Bit5)-1,
Mask6 = (1<<Bit6)-1,
Wchar1 = (1UL<<Bit1)-1,
Wchar2 = (1UL<<(Bit2+Bitx))-1,
Wchar3 = (1UL<<(Bit3+2*Bitx))-1,
Wchar4 = (1UL<<(Bit4+3*Bitx))-1,
Wchar5 = (1UL<<(Bit5+4*Bitx))-1
#ifndef EILSEQ
, /* we hate ansi c's comma rules */
EILSEQ = 123
#endif /* PLAN9 */
};
int
our_wctomb(char *s, unsigned long wc)
{
if(s == 0)
return 0; /* no shift states */
if(wc & ~Wchar2) {
if(wc & ~Wchar4) {
if(wc & ~Wchar5) {
/* 6 bytes */
s[0] = T6 | ((wc >> 5*Bitx) & Mask6);
s[1] = Tx | ((wc >> 4*Bitx) & Maskx);
s[2] = Tx | ((wc >> 3*Bitx) & Maskx);
s[3] = Tx | ((wc >> 2*Bitx) & Maskx);
s[4] = Tx | ((wc >> 1*Bitx) & Maskx);
s[5] = Tx | (wc & Maskx);
return 6;
}
/* 5 bytes */
s[0] = T5 | (wc >> 4*Bitx);
s[1] = Tx | ((wc >> 3*Bitx) & Maskx);
s[2] = Tx | ((wc >> 2*Bitx) & Maskx);
s[3] = Tx | ((wc >> 1*Bitx) & Maskx);
s[4] = Tx | (wc & Maskx);
return 5;
}
if(wc & ~Wchar3) {
/* 4 bytes */
s[0] = T4 | (wc >> 3*Bitx);
s[1] = Tx | ((wc >> 2*Bitx) & Maskx);
s[2] = Tx | ((wc >> 1*Bitx) & Maskx);
s[3] = Tx | (wc & Maskx);
return 4;
}
/* 3 bytes */
s[0] = T3 | (wc >> 2*Bitx);
s[1] = Tx | ((wc >> 1*Bitx) & Maskx);
s[2] = Tx | (wc & Maskx);
return 3;
}
if(wc & ~Wchar1) {
/* 2 bytes */
s[0] = T2 | (wc >> 1*Bitx);
s[1] = Tx | (wc & Maskx);
return 2;
}
/* 1 byte */
s[0] = T1 | wc;
return 1;
}
int
our_mbtowc(unsigned long *p, char *s, unsigned n)
{
uchar *us;
int c0, c1, c2, c3, c4, c5;
unsigned long wc;
if(s == 0)
return 0; /* no shift states */
if(n < 1)
goto badlen;
us = (uchar*)s;
c0 = us[0];
if(c0 >= T3) {
if(n < 3)
goto badlen;
c1 = us[1] ^ Tx;
c2 = us[2] ^ Tx;
if((c1|c2) & T2)
goto bad;
if(c0 >= T5) {
if(n < 5)
goto badlen;
c3 = us[3] ^ Tx;
c4 = us[4] ^ Tx;
if((c3|c4) & T2)
goto bad;
if(c0 >= T6) {
/* 6 bytes */
if(n < 6)
goto badlen;
c5 = us[5] ^ Tx;
if(c5 & T2)
goto bad;
wc = ((((((((((c0 & Mask6) << Bitx) |
c1) << Bitx) | c2) << Bitx) |
c3) << Bitx) | c4) << Bitx) | c5;
if(wc <= Wchar5)
goto bad;
*p = wc;
return 6;
}
/* 5 bytes */
wc = ((((((((c0 & Mask5) << Bitx) |
c1) << Bitx) | c2) << Bitx) |
c3) << Bitx) | c4;
if(wc <= Wchar4)
goto bad;
*p = wc;
return 5;
}
if(c0 >= T4) {
/* 4 bytes */
if(n < 4)
goto badlen;
c3 = us[3] ^ Tx;
if(c3 & T2)
goto bad;
wc = ((((((c0 & Mask4) << Bitx) |
c1) << Bitx) | c2) << Bitx) |
c3;
if(wc <= Wchar3)
goto bad;
*p = wc;
return 4;
}
/* 3 bytes */
wc = ((((c0 & Mask3) << Bitx) |
c1) << Bitx) | c2;
if(wc <= Wchar2)
goto bad;
*p = wc;
return 3;
}
if(c0 >= T2) {
/* 2 bytes */
if(n < 2)
goto badlen;
c1 = us[1] ^ Tx;
if(c1 & T2)
goto bad;
wc = ((c0 & Mask2) << Bitx) |
c1;
if(wc <= Wchar1)
goto bad;
*p = wc;
return 2;
}
/* 1 byte */
if(c0 >= Tx)
goto bad;
*p = c0;
return 1;
bad:
errno = EILSEQ;
return -1;
badlen:
return -2;
}