ain@j.cc.purdue.edu (Patrick White) (03/08/88)
Program Name: spheres (part 1 of 2)
Submitted By: guilford@csv.rpi.edu (Jim Guilford)
Summary: Rotate spheres in 3-D according to mouse movements.
Poster Boy: Pat White (ain@j.cc.purdue.edu)
Untested.
NOTES:
Docs and data posted in separate shar.
Reshared it.
Didn't test compile it.
-- Pat White (co-moderator comp.sources/binaries.amiga)
UUCP: j.cc.purdue.edu!ain BITNET: PATWHITE@PURCCVM PHONE: (317) 743-8421
U.S. Mail: 320 Brown St. apt. 406, West Lafayette, IN 47906
========================================
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# animballs.c
# globals.h
# hamstuff.c
# makedata.c
# myblit.c
# screen.c
# This archive created: Mon Mar 7 19:28:18 1988
# By: Patrick White (PUCC Land, USA)
echo shar: extracting animballs.c '(9992 characters)'
cat << \SHAR_EOF > animballs.c
/* animballs.c -- code to handle actual rotating images */
#include <exec/types.h>
#include <stdio.h>
#include <math.h>
#include <intuition/intuition.h>
#include "globals.h"
#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
int woffset = WOFFSET;
#define SETANDBOUND(ii,ff) {ii = 0.5 + ff * 15; \
if (ii > 15) ii = 15; \
else if (ii < 0) ii = 0;}
float ka, kd, ks, lx, ly, lz, n, r; /* coloring parameters */
long int ix,iy,iz, jx,jy,jz, kx,ky,kz;
static char title[81];
int bgcolor = 0;
int scx = WIDTH / 2, scy = SMHEIGHT / 2;
int xstart = -1; ystart = -1;
#define ISIZE 14
#define FTOI(x) ((long int) (x * (1 << ISIZE)))
#define MULT(x,y) ((x * y) >> ISIZE)
#define LSIZE 10
#define MAKEL(x) ((long int) x * (1 << LSIZE))
struct Ball {
long int x,y,z;
float r,g,b,rad;
long int xp,yp,zp;
int y1,y2,intr,size;
int dup;
};
int nball;
struct Ball **ballptr;
struct Ball *balls;
int maxsize = 0;
int maskw = 0, maskh = 1;
int maxextent = 0;
long int intsin[360];
long int intcos[360];
void
readballs(name)
char *name;
{
int i, j, extent;
int c;
float x,y,z,rad,r,g,b;
FILE *fp, *fopen();
int ir,ig,ib;
if ((fp = fopen(name,"r")) == NULL) {
fprintf(stderr,"Can't open balls file - '%s'",name);
panic("");
}
strcpy(title,"Drag Mouse to Rotate");
if ((c = getc(fp)) != '"') ungetc(c,fp);
else {
i = 0;
c = getc(fp);
while ((c != '"') && (c != EOF)) {
if (i < 80) title[i++] = c;
c = getc(fp);
}
if (c == EOF) panic("Error - title lacks final \"");
title[i] = 0;
}
if ((c = fscanf(fp,"%f %f %f",&r,&g,&b)) != 3) {
fprintf(stderr,"Error reading background color %d",c+1);
panic("");
} else {
SETANDBOUND(ir,r);
SETANDBOUND(ig,g);
SETANDBOUND(ib,b);
bgcolor = match(ir,ig,ib);
}
if (fscanf(fp,"%d",&nball) != 1)
panic("Error - Can't read number of balls");
balls = (struct Ball *) malloc(sizeof(struct Ball)*nball);
if (balls == 0) panic("Not enough memory for balls");
ballptr = (struct Ball **) malloc(sizeof(long int)*nball);
if (ballptr == 0) panic("Not enough memory for ballptr");
for (i = 0; i < nball; i++) {
if ((c=fscanf(fp,"%f %f %f %f %f %f %f",&x,&y,&z,&rad,&r,&g,&b))!=7)
{fprintf(stderr,
"Error in reading item %d in ball description %d",
c+1,i+1);
panic("");
}
balls[i].x = MAKEL(x);
balls[i].y = MAKEL(y);
balls[i].z = MAKEL(z);
balls[i].rad = rad;
balls[i].r = r;
balls[i].g = g;
balls[i].b = b;
balls[i].intr = rad + 0.5;
balls[i].size = 2 * balls[i].intr + 1;
extent = 0.9 + sqrt(x*x + y*y +z*z) + balls[i].intr;
if (extent > maxextent) maxextent = extent;
if (balls[i].size > maxsize) maxsize = balls[i].size;
balls[i].dup = -1;
for (j = 0; j < i; j++) /* check for duplicate entries */
if ((balls[j].rad == rad) && (balls[j].r == r) &&
(balls[j].g == g) && (balls[j].b == b)) {
balls[i].dup = j;
break;
}
if (balls[i].dup != -1) {
balls[i].y1 = balls[balls[i].dup].y1;
balls[i].y2 = balls[balls[i].dup].y2;
} else {
balls[i].y1 = maskh;
maskh += balls[i].size;
if (!bw) {
balls[i].y2 = maskh;
maskh += balls[i].size;
} else balls[i].y2 = 0;
}
}
maskw = ((maxsize + 15) & ~15) + 16;
fclose(fp);
checkextent();
}
void
checkextent()
{
int largest,i;
long int scale;
double fscale;
largest = scy - 10;
if (scx < largest) largest = scx;
if (maxextent > largest) {
fprintf(stderr,"Warning, balls are too far apart, I will re-scale.\n");
Delay(250);
fscale = (((double) largest) / ((double) maxextent));
scale = FTOI(fscale);
maxsize = 0;
maskw = 0;
maskh = 1;
for (i=0; i < nball; i++) {
balls[i].x = MULT(balls[i].x,scale);
balls[i].y = MULT(balls[i].y,scale);
balls[i].z = MULT(balls[i].z,scale);
balls[i].rad *= fscale;
balls[i].intr = balls[i].rad + 0.5;
balls[i].size = 2 * balls[i].intr + 1;
if (balls[i].size > maxsize) maxsize = balls[i].size;
if (balls[i].dup != -1 ) {
balls[i].y1 = balls[balls[i].dup].y1;
balls[i].y2 = balls[balls[i].dup].y2;
} else {
balls[i].y1 = maskh;
maskh += balls[i].size;
if (!bw) {
balls[i].y2 = maskh;
maskh += balls[i].size;
} else balls[i].y2 = 0;
}
}
maskw = ((maxsize + 15) & ~15) + 16;
}
}
void
initsin()
{
int i;
float r,s;
for (i=0; i < 360; i++) {
r = i * (3.14159/180.0);
s = sin(r);
intsin[i] = FTOI(s);
s = cos(r);
intcos[i] = FTOI(s);
}
}
void
isin(x,c,s)
int x; /* x is degrees */
long int *c,*s;
{
while (x >= 360) x -=360;
while (x < 0) x += 360;
*c = intcos[x];
*s = intsin[x];
}
void
initrender()
{
float m;
initsin();
ka = .2; kd = .5; ks = .65;
lx = ly = lz = 1;
m = sqrt(lx*lx + ly*ly + lz*lz);
lx /= m;
ly /= m;
lz /= m;
n = 10; r = 9.5;
ix = FTOI(1); iy = iz = 0;
jy = FTOI(1); jx = jz = 0;
kz = FTOI(1); kx = ky = 0;
}
void
render()
{
int i;
int x, y;
int cont, MouseMoved;
struct IntuiMessage *message;
ULONG class;
USHORT code,qual;
for (i = 0; i < nball; i++) renderball(i);
SetWindowTitles(mywindow,title,((char *)(-1)));
mylinecopy(sbitmap,0,10,WOFFSET);
showballs();
cont = 1;
while(cont) {
Wait(1 << (mywindow->UserPort->mp_SigBit));
MouseMoved = FALSE;
while(message = (struct IntuiMessage *)
GetMsg(mywindow->UserPort)) {
class = message->Class;
code = message->Code;
x = message->MouseX;
y = message->MouseY;
qual = message->Qualifier;
ReplyMsg((struct Message *)message);
if (class == MOUSEMOVE) MouseMoved = TRUE;
else if (class == CLOSEWINDOW) {
cont = 0;
break;
} else if (class == MOUSEBUTTONS)
mbutton(code,x,y);
}
if (MouseMoved && cont) mmove(x,y,qual);
}
}
void
showballs()
{
int i,j,sx,sy;
struct Ball *ball;
long int x,y;
for (i = 0; i < nball; i++) {
ball = ballptr[i] = &(balls[i]);
ball->xp = ((ball->x)*ix + (ball->y)*jx + (ball->z)*kx) >> ISIZE;
ball->yp = ((ball->x)*iy + (ball->y)*jy + (ball->z)*ky) >> ISIZE;
ball->zp = ((ball->x)*iz + (ball->y)*jz + (ball->z)*kz) >> ISIZE;
}
for (i = nball-1; i > 0; i--)
for (j = 0; j < i; j++) {
if (ballptr[i]->zp < ballptr[j]->zp) {
ball = ballptr[i];
ballptr[i]=ballptr[j];
ballptr[j]=ball;
}
}
myblankc(sbitmap,10+woffset,190+woffset,bgcolor);
if (!bw) myblankc(&tbitmap,0,SMHEIGHT-1,bgcolor);
for (i = 0; i < nball; i++) {
ball = ballptr[i];
x = (ball->xp + (1 << (LSIZE - 1))) >> LSIZE;
y = (ball->yp + (1 << (LSIZE - 1))) >> LSIZE;
sx = scx + x - ball->intr;
sy = scy - y - ball->intr;
BltBitMask(&ibitmap,0,ball->y1,
sbitmap,sx,sy+woffset,
&mbitmap,0,ball->y1,0,
ball->size,ball->size);
if (!bw) {
BltBitMask(&ibitmap,0,ball->y2,
&tbitmap,sx,sy,
&mbitmap,0,ball->y1,0,
ball->size,ball->size);
BltBitMask(&tbitmap,sx+ball->intr+1,sy,
sbitmap,sx+ball->intr+1,sy+woffset,
&mbitmap,ball->intr,ball->y2,0,
ball->intr+1,ball->size);
}
}
flip();
}
void
scrollx(d)
int d;
{
long int c,s;
long int t;
isin(-d,&c,&s);
t = (c * ix - s * iz) >> ISIZE;
iz = (s * ix + c * iz) >> ISIZE;
ix = t;
t = (c * jx - s * jz) >> ISIZE;
jz = (s * jx + c * jz) >> ISIZE;
jx = t;
t = (c * kx - s * kz) >> ISIZE;
kz = (s * kx + c * kz) >> ISIZE;
kx = t;
}
void
scrolly(d)
int d;
{
long int c,s;
long int t;
isin(d,&c,&s);
t = (c * iy - s * iz) >> ISIZE;
iz = (s * iy + c * iz) >> ISIZE;
iy = t;
t = (c * jy - s * jz) >> ISIZE;
jz = (s * jy + c * jz) >> ISIZE;
jy = t;
t = (c * ky - s * kz) >> ISIZE;
kz = (s * ky + c * kz) >> ISIZE;
ky = t;
}
void
scrollz(d)
int d;
{
long int c,s;
long int t;
isin(d,&c,&s);
t = (c * iy - s * ix) >> ISIZE;
ix = (s * iy + c * ix) >> ISIZE;
iy = t;
t = (c * jy - s * jx) >> ISIZE;
jx = (s * jy + c * jx) >> ISIZE;
jy = t;
t = (c * ky - s * kx) >> ISIZE;
kx = (s * ky + c * kx) >> ISIZE;
ky = t;
}
void
mbutton(code,x,y)
int code, x, y;
{
if (code == SELECTDOWN) {
xstart = x;
ystart = y;
} else if (code == SELECTUP) {
xstart = ystart = -1;
}
}
void
mmove(x,y,qual)
int x,y;
USHORT qual;
{
register int shift;
if (qual & 0x30) shift = 2; /* L-ALT, R-ALT */
else if (qual & 0x07) shift = 0; /* SHIFT */
else shift = 1;
if (xstart != -1) {
if (qual & 0x08) /* CNTL */
scrollz((x - xstart)<<shift);
else {
scrolly((y - ystart)<<shift);
scrollx((x - xstart)<<shift);
}
xstart = x;
ystart = y;
showballs();
}
}
void
flip()
{
Forbid();
WaitTOF();
WaitBlit();
Disable();
if (woffset) {
vp->RasInfo->RyOffset = WOFFSET;
} else {
vp->RasInfo->RyOffset = 0;
}
ScrollVPort(vp);
Enable();
Permit();
if (woffset) {
woffset = 0;
} else {
woffset = WOFFSET;
}
}
void
renderball(j)
int j;
{
struct Ball *ball;
int intr, size, y1, y2;
int x, y, xp, yp, ired, igreen, iblue;
int start;
float nx, ny, nz, rz, id, is;
ball = balls+j;
if (ball->dup != -1) return;
y1 = ball->y1;
y2 = ball->y2;
intr = ball->intr;
size = ball->size;
/* special mask is offset -1 in x */
for (y = 0; y < size; y++) {
start = 0;
for (x = 0; x < size; x++) {
xp = x - intr;
yp = intr - y;
nz = (ball->rad * ball->rad) - (xp * xp) - (yp * yp);
if (nz >= 0.0) {
mywritepixel1(&mbitmap,x,y+y1);
nx = xp / ball->rad;
ny = yp / ball->rad;
nz = sqrt(nz) / ball->rad;
id = lx*nx + ly*ny + lz*nz; /* diffuse intensity */
rz = (nz + nz) * id - lz;
if (rz < 0) rz = 0;
is = ks * pow(rz,n);
id = ka + kd * id;
SETANDBOUND(ired, (id * ball->r + is));
SETANDBOUND(igreen,(id * ball->g + is));
SETANDBOUND(iblue, (id * ball->b + is));
setcolor(x,y+y1,y+y2,ired,iblue,igreen,!start);
if (start == 0) start = 1;
} else if (start == 1) {
dolast();
if (!bw) mywritepixel1(&mbitmap,x-1,y+y2);
start = 2;
}
}
if (start == 1) {
dolast();
if (!bw) mywritepixel1(&mbitmap,x-1,y+y2);
}
}
}
SHAR_EOF
if test 9992 -ne "`wc -c animballs.c`"
then
echo shar: error transmitting animballs.c '(should have been 9992 characters)'
fi
echo shar: extracting globals.h '(925 characters)'
cat << \SHAR_EOF > globals.h
/* structs.h structure and external definitions */
extern struct RastPort *rp;
extern struct Window *mywindow;
extern struct ViewPort *vp;
extern struct Screen *myscreen;
extern struct BitMap *sbitmap;
extern struct BitMap tbitmap;
extern struct BitMap ibitmap;
extern struct BitMap mbitmap;
extern int bw;
extern int maxsize, maskw, maskh;
extern int bgcolor;
extern UWORD colortable[];
#define WOFFSET 200
#define HEIGHT 400
#define SMHEIGHT 200
#define WIDTH 192
void readballs();
void checkextent();
void initsin();
void isin();
void initrender();
void render();
void showballs();
void scrollx();
void scrolly();
void scrollz();
void mbutton();
void mmove();
void flip();
void renderball();
void panic();
void cleanup();
void setbw();
void dodefault();
void setcolor();
void dolast();
void BltBitMask();
void mywritepixel1();
void mywritepixel();
void myblank();
void mylinecopy();
void myblankc();
int match();
SHAR_EOF
if test 925 -ne "`wc -c globals.h`"
then
echo shar: error transmitting globals.h '(should have been 925 characters)'
fi
echo shar: extracting hamstuff.c '(3628 characters)'
cat << \SHAR_EOF > hamstuff.c
/* hamstuff.c - routines to be given a set of colors. These will be plotted
in ham mode. This is based on hamrtn.c */
#include <exec/types.h>
#include <stdio.h>
#include <intuition/intuition.h>
#include "globals.h"
extern UWORD colortable[];
extern UBYTE near[];
extern UWORD nearmc[];
/* near is 4096 long and is configured as a 16*16*16 array */
/* each byte gives the distance to the nearest colortable entry */
/* the high order nible is the index into the color table and the */
/* low order nible is the distance. */
/* color[16] - colormap containing rgb values fairly evenly */
/* spread throughout 16x16x16 space. */
/* near[4096] - table of distance. For each r,g,b */
/* address = (r<<8 | g<<4 | b) & 0xfff */
/* near>>4 gives the nearest color (index) and */
/* near & 0x0f gives the distance. */
/* nearmc[4096] - table of distance minus color */
/* This contains the nearest color ignoring a color */
/* (nearmc >> 8) & 0xf is for red, */
/* (nearmc >> 4) & 0xf is for green, */
/* and nearmc & 0xf is for blue */
#define INDEXNEAR(r,g,b) near[(((r)<<8) | ((g)<<4) | (b))&0xfff]
#define PLOTABS(x,y,color) {mywritepixel(&ibitmap,x,y,color); \
i = colortable[color]; \
pr = i >> 8; \
pg = (i >> 4) & 0x0f; \
pb = i & 0x0f; \
if (!exact) \
mywritepixel(&ibitmap,ox,oy,near[oc]>>4);}
#define RED 0x20
#define GREEN 0x30
#define BLUE 0x10
extern struct RastPort *rp;
static short pr, pg, pb;
static int ox, oy, oc;
void
setcolor(xpos,ypos,yepos,r,b,g,exact)
int xpos,ypos,yepos,r,b,g,exact;
{
short d1, dr, dg, db;
int i;
r &= 0x0f;
b &= 0x0f;
g &= 0x0f;
if (bw) mywritepixel(&ibitmap,xpos,ypos,(r+b+g)/3);
else {
d1 = INDEXNEAR(r,g,b);
if (((d1 & 0x0f) == 0) || (exact)) { /* equals existing color */
PLOTABS(xpos,ypos,(d1>>4));
if (exact) mywritepixel(&ibitmap,xpos,yepos,d1>>4);
} else {
/* calculate nearest dist from prev */
dr = r - pr;
if (dr < 0) dr = -dr;
dg = g - pg;
if (dg < 0) dg = -dg;
db = b - pb;
if (db < 0) db = -db;
if (dr > dg) {
if (dr > db) {
/* dr is max */
if ((d1 & 0x0f) < (dg+db)) {
PLOTABS(xpos,ypos,(d1>>4));
} else {
mywritepixel(&ibitmap,xpos,ypos,RED | r);
pr = r;
mywritepixel(&ibitmap,ox,oy,(nearmc[oc]>>8));
}
} else { /* if (dr > db) . . . */
/* db is max */
if ((d1 & 0x0f) < (dg+dr)) {
PLOTABS(xpos,ypos,(d1>>4));
} else {
mywritepixel(&ibitmap,xpos,ypos, BLUE | b);
pb = b;
mywritepixel(&ibitmap,ox,oy,(nearmc[oc] & 0xf));
}
}
} else { /* if (dr > dg) . . . */
if (dg > db) {
/* dg is max */
if ((d1 & 0x0f) < (dr+db)) {
PLOTABS(xpos,ypos,(d1>>4));
} else {
mywritepixel(&ibitmap,xpos,ypos,GREEN | g);
pg = g;
mywritepixel(&ibitmap,ox,oy,
(nearmc[oc]>>4)& 0xf);
}
} else { /* if (dg > db) . . . */
/* db is max */
if ((d1 & 0x0f) < (dg+dr)) {
PLOTABS(xpos,ypos,(d1>>4));
} else {
mywritepixel(&ibitmap,xpos,ypos,BLUE | b);
pb = b;
mywritepixel(&ibitmap,ox,oy,(nearmc[oc] & 0xf));
}
}
} /* end if (dr > dg) */
} /* end else for if ((d1 & 0x0f) == 0) */
oc = r<<8 | g<<4 | b;
ox = xpos;
oy = yepos;
}
} /* end setcolor */
void
dolast()
{
if (!bw) mywritepixel(&ibitmap,ox,oy,near[oc]>>4);
}
int
match(r,g,b)
int r,g,b;
{
if (bw) return(0.5 + ((float)(r + g + b)) / 3.0);
else return(INDEXNEAR(r,g,b) >> 4);
}
SHAR_EOF
if test 3628 -ne "`wc -c hamstuff.c`"
then
echo shar: error transmitting hamstuff.c '(should have been 3628 characters)'
fi
echo shar: extracting makedata.c '(3045 characters)'
cat << \SHAR_EOF > makedata.c
/* makedata.c - enhancement to basic code to create data.c HAM file */
#include <stdio.h>
printcomments()
{
printf("/* data.c - table of data for HAM routines. */\n\n");
printf("/* color[16] - colormap containing rgb values fairly evenly */\n");
printf("/* spread throughout 16x16x16 space. */\n");
printf("/* near[4096] - table of distance. For each r,g,b */\n");
printf("/* address = (r<<8 | g<<4 | b) & 0xfff */\n");
printf("/* near>>4 gives the nearest color (index) and */\n");
printf("/* near & 0x0f gives the distance. */\n");
printf("/* nearmc[4096] - table of distance minus color */\n");
printf("/* This contains the nearest color ignoring a color */\n");
printf("/* (nearmc >> 8) & 0xf is for red, */\n");
printf("/* (nearmc >> 4) & 0xf is for green, */\n");
printf("/* and nearmc & 0xf is for blue */\n\n");
}
struct color {
int red, green, blue;
};
struct color color[16] = {
{0x0,0x0,0x0},
{0x4,0x6,0x6},
{0x3,0x7,0x2},
{0xc,0x2,0x3},
{0x3,0xd,0x3},
{0x3,0x2,0xc},
{0xc,0xc,0x2},
{0xc,0x3,0xd},
{0x3,0xc,0xd},
{0xc,0xd,0xc},
{0x0,0x8,0xa},
{0x8,0x0,0x8},
{0x8,0x8,0x0},
{0xf,0x7,0x7},
{0x8,0xf,0x8},
{0x8,0x8,0xf}
};
main()
{
int r,g,b;
int d,dd,n,i;
int dr,dg,db, ddr,ddg,ddb, nr,ng,nb;
printcomments();
printf("#include <exec/types.h>\n\n");
printf("UWORD colortable[16] = {\n");
for (i=0; i<15; i++)
printf("\t0x%01x%01x%01x,\n",
color[i].red,color[i].green,color[i].blue);
printf("\t0x%01x%01x%01x\n",
color[i].red,color[i].green,color[i].blue);
printf("};\n\n");
printf("UBYTE near[4096] = {\n");
for (r = 0; r < 16; r++) {
for (g = 0; g < 16; g++) {
printf("\t");
for (b = 0; b < 16; b++) {
d = 10000;
for (i = 0; i < 16; i++) {
dd = abs(r - color[i].red) +
abs(g - color[i].green) +
abs(b - color[i].blue);
if (dd < d) {
d = dd;
n = i;
}
}
printf("0x%01x%01x",n,d);
if (b < 15) printf(", ");
else if ((r < 15) || (g < 15)) printf(",\n");
else printf("\n");
if (b == 7) printf("\n\t");
}
}
}
printf("};\n\n");
printf("UWORD nearmc[4096] = {\n");
for (r = 0; r < 16; r++) {
for (g = 0; g < 16; g++) {
printf("\t");
for (b = 0; b < 16; b++) {
dr = 10000;
dg = 10000;
db = 10000;
for (i = 0; i < 16; i++) {
ddr = abs(g -color[i].green) + abs(b - color[i].blue );
ddg = abs(r -color[i].red ) + abs(b - color[i].blue );
ddb = abs(r -color[i].red ) + abs(g - color[i].green);
if (ddr < dr) { dr = ddr; nr = i;}
if (ddg < dg) { dg = ddg; ng = i;}
if (ddb < db) { db = ddb; nb = i;}
}
printf("0x%01x%01x%01x",nr,ng,nb);
if (b < 15) printf(", ");
else if ((r < 15) || (g < 15)) printf(",\n");
else printf("\n");
if (b == 7) printf("\n\t");
}
}
}
printf("};\n");
}
SHAR_EOF
if test 3045 -ne "`wc -c makedata.c`"
then
echo shar: error transmitting makedata.c '(should have been 3045 characters)'
fi
echo shar: extracting myblit.c '(5261 characters)'
cat << \SHAR_EOF > myblit.c
/* myblit.c - definition of my blitter code */
/* It will blit from a source through a mask to a destination bitmap */
/* The mask must have the word before and after it clear */
#include <exec/types.h>
#ifdef BLTDEBUG
#include <stdio.h>
#endif
#include <hardware/custom.h>
#include <hardware/blit.h>
#include <graphics/gfx.h>
#define BLTADD (0xdff040)
/*
* This structure contains everything we need to know.
* Do not do a structure copy into this! Instead, assign
* each field. The last field assigned must be bltsize; that
* starts up the blitter. Also note that all of these are
* write only, and you can't read them.
*/
struct BltStruct {
WORD con0;
WORD con1;
WORD afwm;
WORD alwm;
WORD *csource, *bsource, *asource, *dsource;
WORD bltsize;
WORD dmy1, dmy2, dmy3;
WORD cmod, bmod, amod, dmod;
};
static struct BltStruct *Blitter = (struct BltStruct *)BLTADD;
static UBYTE boffset[] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
void
BltBitMask(sbm,sx,sy,dbm,dx,dy,mbm,mx,my,mpno,xsize,ysize)
struct BitMap *sbm, *dbm, *mbm;
int sx,sy,dx,dy,mx,my,mpno,xsize,ysize;
{
WORD *splane, *dplane, *mplane;
WORD *aaddr,*baddr,*daddr;
int ashft, bshft;
UWORD afwm,alwm;
int smodulo, dmodulo, mmodulo;
int i;
smodulo = ((sbm->BytesPerRow) + 1) >> 1;
dmodulo = ((dbm->BytesPerRow) + 1) >> 1;
mmodulo = ((mbm->BytesPerRow) + 1) >> 1;
splane = (WORD *) (sbm->Planes[0]);
dplane = (WORD *) (dbm->Planes[0]);
mplane = (WORD *) (mbm->Planes[mpno]);
daddr = dplane + dmodulo * dy + (dx >> 4);
dx &= 15;
aaddr = mplane + mmodulo * my + (mx >> 4);
mx &= 15;
baddr = splane + smodulo * sy + (sx >> 4);
sx &= 15;
#ifdef BLTDEBUG
printf("new - spl = %x, dpl = %x, mpl = %x\n",splane,dplane,mplane);
printf("smod = %x, dmod = %x, mmod = %x\n",smodulo,dmodulo,mmodulo);
printf("aa=%x, ba=%x, da=%x, (a)mx=%d, (b)sx=%d, dx=%d, xs=%d\n",
(aaddr - mplane - mmodulo * my),
(baddr - splane - smodulo * sy),
(daddr - dplane - dmodulo * dy),mx,sx,dx,xsize);
#endif
ashft = dx - mx;
bshft = dx - sx;
afwm = ((unsigned) 0xffff) >> mx;
alwm = 0xffff << (16 - ((mx + xsize) & 15));
xsize = (xsize + dx + 15) >> 4;
if ((ashft < 0) || (bshft < 0)) {
daddr--;
xsize++;
if (ashft < 0) ashft += 16;
else aaddr--;
if (bshft < 0) bshft += 16;
else baddr--;
}
#ifdef BLTDEBUG
printf("aaddr = %x, baddr = %x, daddr = %x\n",aaddr,baddr,daddr);
printf("aa=%x, ba=%x, da=%x, fw=%x, lw=%x, as=%d, bs=%d, xs=%d\n",
(aaddr - mplane - mmodulo * my),
(baddr - splane - smodulo * sy),
(daddr - dplane - dmodulo * dy),afwm,alwm,ashft,bshft,xsize);
#endif
OwnBlitter();
WaitBlit();
Blitter->asource = aaddr;
Blitter->bsource = baddr;
Blitter->csource = Blitter->dsource = daddr;
Blitter->amod = (mmodulo - xsize) << 1;
Blitter->bmod = (smodulo - xsize) << 1;
Blitter->cmod = Blitter->dmod = (dmodulo - xsize) << 1;
Blitter->afwm = afwm;
Blitter->alwm = alwm;
Blitter->con0 = (ashft << 12) | (0xf << 8) | 0xca;
Blitter->con1 = (bshft << 12);
Blitter->bltsize = (ysize << 6) | xsize;
for (i = 1; i < dbm->Depth; i++) {
WaitBlit();
Blitter->asource = aaddr;
Blitter->bsource = baddr +
(((WORD *)sbm->Planes[i]) - ((WORD *)sbm->Planes[0]));
Blitter->csource = Blitter->dsource = daddr +
(((WORD *)dbm->Planes[i]) - ((WORD *)dbm->Planes[0]));
Blitter->bltsize = (ysize << 6) | xsize;
}
DisownBlitter();
}
void
mywritepixel1(bm,x,y)
struct BitMap *bm;
int x,y;
{
register int offset;
register UBYTE bits;
offset = y * bm->BytesPerRow + (x >> 3);
bits = boffset[x & 7];
bm->Planes[0][offset] |= bits;
}
void
mywritepixel(bm,x,y,color)
struct BitMap *bm;
int x,y;
{
register int offset;
register int i;
UBYTE bits,nbits;
offset = y * bm->BytesPerRow + (x >> 3);
bits = boffset[x & 7];
nbits = ~bits;
for (i=0; i < bm->Depth; i++) {
if (color & 0x01) bm->Planes[i][offset] |= bits;
else bm->Planes[i][offset] &= nbits;
color >>= 1;
}
}
void
myblank(bm,y1,y2)
struct BitMap *bm;
int y1,y2;
{
register int offset, bytes;
register int i;
offset = y1 * bm->BytesPerRow;
bytes = (y2 - y1) * bm->BytesPerRow;
for (i=0; i < bm->Depth; i++)
BltClear(&(bm->Planes[i][offset]),bytes,0);
}
void
mylinecopy(bm,starty,len,delta)
struct BitMap *bm;
int starty, len, delta;
{
UBYTE *loc1, *loc2, *stop;
int i;
for(i=0; i < bm->Depth; i++) {
loc1 = &(bm->Planes[i][starty*bm->BytesPerRow]);
stop = loc1 + len*bm->BytesPerRow;
loc2 = loc1 + delta*bm->BytesPerRow;
while (loc1 < stop) *(loc2++) = *(loc1++);
}
}
void
myblankc(bm,y1,y2,color)
struct BitMap *bm;
int y1,y2,color;
{
register int i;
WORD *daddr;
int dmodulo;
dmodulo = ((bm->BytesPerRow) + 1) >> 1;
daddr = (WORD *) (bm->Planes[0]);
daddr += dmodulo * y1;
OwnBlitter();
WaitBlit();
Blitter->dsource = daddr;
Blitter->dmod = 0;
if (color & 1)
Blitter->con0 = (1 << 8) | (0xff);
else Blitter->con0 = (1 << 8);
Blitter->bltsize = ((y2-y1) << 6) | dmodulo;
color >>= 1;
for (i = 1; i < bm->Depth; i++) {
WaitBlit();
Blitter->dsource = daddr +
(((WORD *)bm->Planes[i]) - ((WORD *)bm->Planes[0]));
if (color & 1)
Blitter->con0 = (1 << 8) | (0xff);
else Blitter->con0 = (1 << 8);
color >>= 1;
Blitter->bltsize = ((y2 - y1) << 6) | dmodulo;
}
DisownBlitter();
}
SHAR_EOF
if test 5261 -ne "`wc -c myblit.c`"
then
echo shar: error transmitting myblit.c '(should have been 5261 characters)'
fi
echo shar: extracting screen.c '(5319 characters)'
cat << \SHAR_EOF > screen.c
/* screen.c -- code to open a screen and then call render */
#include <exec/types.h>
#include <stdio.h>
#include <math.h>
#include <intuition/intuition.h>
#include "globals.h"
#include <proto/exec.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
#include <proto/layers.h>
struct IntuitionBase *IntuitionBase = NULL;
struct GfxBase *GfxBase = NULL;
struct LayersBase *LayersBase = NULL;
#define IREV 29
#define GREV 29
char defaultfile[] = "balls.default.dat";
#define DEPTH 6
int depth = DEPTH;
struct BitMap pbitmap = { /* picture (screen) bitmap (*sbitmap) */
0, 0, 0, 0, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
struct BitMap tbitmap = { /* temp (exact) bitmap */
0, 0, 0, 0, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
struct BitMap ibitmap = { /* image bitmap */
0, 0, 0, 0, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
struct BitMap mbitmap = { /* mask bitmap */
0, 0, 0, 0, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
struct NewScreen mynewscreen = {
0, 0, WIDTH, 200, DEPTH,
0, 15,
HAM,
CUSTOMSCREEN | CUSTOMBITMAP,
NULL,
"B & W Low Res Screen",
NULL,
&pbitmap,
};
struct Screen *myscreen = NULL;
struct ViewPort *vp;
struct BitMap *sbitmap = NULL;
struct NewWindow mynewwindow = {
0, 1, WIDTH, 199,
0, 15,
MOUSEBUTTONS | MOUSEMOVE | CLOSEWINDOW,
WINDOWCLOSE | SIMPLE_REFRESH | /* BACKDROP | */ BORDERLESS |
REPORTMOUSE | ACTIVATE,
NULL,
NULL,
" Please Wait . . . ",
NULL,
NULL,
0, 0, 0, 0,
CUSTOMSCREEN,
};
struct Window *mywindow = NULL;
int bw = 0;
UWORD bwcolortable[16] = {
0x000, 0x111, 0x222, 0x333, 0x444, 0x555, 0x666, 0x777,
0x888, 0x999, 0xaaa, 0xbbb, 0xccc, 0xddd, 0xeee, 0xfff};
void
main(argc,argv)
int argc;
char *argv[];
{
int i;
void cleanup();
switch (argc) {
case 0: readballs(defaultfile);
break;
case 2: readballs(argv[1]);
break;
case 3: if (strcmp(argv[1],"-bw") == 0) {
setbw();
readballs(argv[2]);
break;
}
default:dodefault();
}
onbreak(&cleanup);
initrender();
IntuitionBase = (struct IntuitionBase *)
OpenLibrary("intuition.library",IREV);
if (IntuitionBase == NULL) panic("Can't open intuition");
GfxBase = (struct GfxBase *)
OpenLibrary("graphics.library",GREV);
if (GfxBase == NULL) panic("Can't open GfxBase");
InitBitMap(&pbitmap,depth,WIDTH,HEIGHT);
for (i=0; i < depth; i++) {
pbitmap.Planes[i] = (PLANEPTR)AllocRaster(WIDTH,HEIGHT);
if (pbitmap.Planes[i] == NULL)
panic("Not enough memory for screen");
BltClear(pbitmap.Planes[i],RASSIZE(WIDTH,HEIGHT),0);
}
if (!bw) {
InitBitMap(&tbitmap,depth,WIDTH,SMHEIGHT);
for (i=0; i < depth; i++) {
tbitmap.Planes[i] = (PLANEPTR)AllocRaster(WIDTH,SMHEIGHT);
if (tbitmap.Planes[i] == NULL)
panic("Not enough memory for temp bit map");
BltClear(tbitmap.Planes[i],RASSIZE(WIDTH,SMHEIGHT),0);
}
}
InitBitMap(&ibitmap,depth,maskw,maskh);
for (i=0; i < depth; i++) {
ibitmap.Planes[i] = (PLANEPTR)AllocRaster(maskw,maskh);
if (ibitmap.Planes[i] == NULL)
panic("Not enough memory for image bit map");
BltClear(ibitmap.Planes[i],RASSIZE(maskw,maskh),0);
}
InitBitMap(&mbitmap,1,maskw,maskh);
mbitmap.Planes[0] = (PLANEPTR)AllocRaster(maskw,maskh);
if (mbitmap.Planes[0] == NULL)
panic("Not enough memory for mask bit map");
BltClear(mbitmap.Planes[0],RASSIZE(maskw,maskh),0);
myscreen = (struct Screen *) OpenScreen(&mynewscreen);
if (myscreen == NULL) panic("Can't open screen");
vp = &(myscreen->ViewPort);
sbitmap = &(myscreen->BitMap);
mynewwindow.Screen = myscreen;
mywindow = (struct Window *) OpenWindow(&mynewwindow);
if (mywindow == NULL) panic("Can't open window");
if (bw) LoadRGB4(&myscreen->ViewPort,bwcolortable,16);
else LoadRGB4(&myscreen->ViewPort,colortable,16);
RethinkDisplay();
render();
cleanup();
}
void
panic(str)
char *str;
{
fprintf(stderr,"%s\n",str);
fflush(stderr);
cleanup();
}
void
cleanup()
{
int i;
if (mywindow) CloseWindow(mywindow);
if (myscreen) CloseScreen(myscreen);
if (mbitmap.Planes[0]) FreeRaster(mbitmap.Planes[0],maskw,maskh);
for (i = depth-1; i >= 0; i--) if (ibitmap.Planes[i])
FreeRaster(ibitmap.Planes[i],maskw,maskh);
for (i = depth-1; i >= 0; i--) if (tbitmap.Planes[i])
FreeRaster(tbitmap.Planes[i],WIDTH,SMHEIGHT);
for (i = depth-1; i >= 0; i--) if (pbitmap.Planes[i])
FreeRaster(pbitmap.Planes[i],WIDTH,HEIGHT);
if (GfxBase) CloseLibrary((struct Library *)GfxBase);
if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
exit(0);
}
void
setbw()
{
bw = TRUE;
mynewscreen.Depth = depth = 4;
mynewscreen.ViewModes &= ~HAM;
}
void
dodefault()
{
printf(" %c33manimballs%c31m - An animation hack by JimG\n\n",0x9b,0x9b);
printf("Usage: animballs [-bw] ballsfile\n\n");
printf(" You have invoked animballs without parameters. I will use\n");
printf("a default balls file (balls.default.dat). You should read the\n");
printf("README file to see how to run this program. As a quick intro,\n");
printf("there will be a delay and then you will see some balls appear.\n");
printf("Press and hold the left mouse button, then drag the mouse to\n");
printf("rotate the balls in 3-space. Click on the close gadget to end.\n\n");
printf("Press <Return> to continue:");
(void) getc(stdin);
readballs(defaultfile);
}
SHAR_EOF
if test 5319 -ne "`wc -c screen.c`"
then
echo shar: error transmitting screen.c '(should have been 5319 characters)'
fi
# End of shell archive
exit 0ain@j.cc.purdue.edu (Patrick White) (03/09/88)
Program Name: spheres (part 2 of 2)
Submitted By: guilford@csv.rpi.edu (Jim Guilford)
Summary: Rotate spheres in 3-D according to mouse movements.
Poster Boy: Pat White (ain@j.cc.purdue.edu)
Untested.
NOTES:
Docs and data posted in separate shar.
Reshared it.
Didn't try compiling it.
-- Pat White (co-moderator comp.sources/binaries.amiga)
UUCP: j.cc.purdue.edu!ain BITNET: PATWHITE@PURCCVM PHONE: (317) 743-8421
U.S. Mail: 320 Brown St. apt. 406, West Lafayette, IN 47906
========================================
# This is a shell archive.
# Remove everything above and including the cut line.
# Then run the rest of the file through sh.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: Shell Archiver
# Run the following text with /bin/sh to create:
# data.c
# This archive created: Mon Mar 7 19:28:03 1988
# By: Patrick White (PUCC Land, USA)
echo shar: extracting data.c '(55772 characters)'
cat << \SHAR_EOF > data.c
/* data.c - table of data for HAM routines. */
/* color[16] - colormap containing rgb values fairly evenly */
/* spread throughout 16x16x16 space. */
/* near[4096] - table of distance. For each r,g,b */
/* address = (r<<8 | g<<4 | b) & 0xfff */
/* near>>4 gives the nearest color (index) and */
/* near & 0x0f gives the distance. */
/* nearmc[4096] - table of distance minus color */
/* This contains the nearest color ignoring a color */
/* (nearmc >> 8) & 0xf is for red, */
/* (nearmc >> 4) & 0xf is for green, */
/* and nearmc & 0xf is for blue */
#include <exec/types.h>
UWORD colortable[16] = {
0x000,
0x466,
0x372,
0xc23,
0x3d3,
0x32c,
0xcc2,
0xc3d,
0x3cd,
0xcdc,
0x08a,
0x808,
0x880,
0xf77,
0x8f8,
0x88f
};
UBYTE near[4096] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x58, 0x57, 0x56, 0x55, 0x56, 0x57, 0x58,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x58, 0x57, 0x56, 0x55, 0x54, 0x55, 0x56, 0x57,
0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x58,
0x57, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x18,
0xa7, 0xa6, 0xa5, 0x55, 0x54, 0x55, 0x56, 0x57,
0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x17,
0xa6, 0xa5, 0xa4, 0xa5, 0x55, 0x56, 0x57, 0x58,
0x05, 0x06, 0x25, 0x26, 0x17, 0x16, 0x15, 0x16,
0xa5, 0xa4, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
0x06, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15,
0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0x25, 0x24, 0x23, 0x24, 0x25, 0x16, 0x15, 0xa4,
0xa3, 0xa2, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
0x26, 0x25, 0x24, 0x25, 0x26, 0xa5, 0xa4, 0xa3,
0xa2, 0xa1, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5,
0x27, 0x26, 0x25, 0x26, 0x27, 0xa6, 0xa5, 0xa4,
0xa3, 0xa2, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
0x28, 0x27, 0x26, 0x46, 0x47, 0xa7, 0xa6, 0xa5,
0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0x85, 0x86, 0x87,
0x48, 0x47, 0x46, 0x45, 0x46, 0x47, 0xa7, 0xa6,
0xa5, 0xa4, 0xa3, 0xa4, 0x85, 0x84, 0x85, 0x86,
0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0xa7,
0xa6, 0xa5, 0xa4, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47,
0xa7, 0xa6, 0xa5, 0x86, 0x85, 0x84, 0x85, 0x86,
0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0x48,
0xa8, 0xa7, 0xa6, 0x87, 0x86, 0x85, 0x86, 0x87,
0x48, 0x47, 0x46, 0x45, 0x46, 0x47, 0x48, 0x49,
0xe8, 0xa8, 0xa7, 0x88, 0x87, 0x86, 0x87, 0x88,
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0xb7, 0x57, 0x56, 0x55, 0x54, 0x55, 0x56, 0x57,
0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x58,
0x57, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x57,
0x56, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x17,
0x57, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x05, 0x06, 0x25, 0x26, 0x17, 0x16, 0x15, 0x16,
0x17, 0xa6, 0xa5, 0x55, 0x54, 0x55, 0x56, 0x57,
0x06, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15,
0x16, 0xa5, 0xa4, 0xa5, 0x55, 0x56, 0x57, 0x58,
0x25, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14,
0x15, 0xa4, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8,
0x24, 0x23, 0x22, 0x23, 0x24, 0x15, 0x14, 0x15,
0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
0x25, 0x24, 0x23, 0x24, 0x25, 0x16, 0x15, 0xa4,
0xa3, 0xa2, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
0x26, 0x25, 0x24, 0x25, 0x26, 0x17, 0x16, 0xa5,
0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0x85, 0x86, 0x87,
0x27, 0x26, 0x25, 0x45, 0x46, 0x47, 0x17, 0xa6,
0xa5, 0xa4, 0xa3, 0xa4, 0x85, 0x84, 0x85, 0x86,
0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0xa7,
0xa6, 0xa5, 0xa4, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47,
0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46,
0x47, 0x87, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47,
0x48, 0x88, 0x87, 0x86, 0x85, 0x84, 0x85, 0x86,
0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0x48,
0xe7, 0xe8, 0x88, 0x87, 0x86, 0x85, 0x86, 0x87,
0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0xb7,
0xb6, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x57,
0x56, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x56,
0x55, 0x54, 0x53, 0x52, 0x51, 0x52, 0x53, 0x54,
0x05, 0x06, 0x25, 0x26, 0x17, 0x16, 0x15, 0x16,
0x56, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
0x06, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15,
0x16, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x25, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14,
0x15, 0x16, 0xa5, 0x55, 0x54, 0x55, 0x56, 0x57,
0x24, 0x23, 0x22, 0x23, 0x14, 0x13, 0x12, 0x13,
0x14, 0x15, 0xa4, 0xa5, 0x55, 0x56, 0x57, 0x58,
0x23, 0x22, 0x21, 0x22, 0x23, 0x14, 0x13, 0x14,
0x15, 0xa4, 0xa3, 0xa4, 0xa5, 0x86, 0x87, 0xf7,
0x24, 0x23, 0x22, 0x23, 0x24, 0x15, 0x14, 0x15,
0xa4, 0xa3, 0xa2, 0xa3, 0xa4, 0x85, 0x86, 0xf6,
0x25, 0x24, 0x23, 0x24, 0x25, 0x16, 0x15, 0x16,
0xa5, 0xa4, 0xa3, 0xa4, 0x85, 0x84, 0x85, 0x86,
0x26, 0x25, 0x24, 0x44, 0x45, 0x46, 0x16, 0x17,
0xa6, 0xa5, 0xa4, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47,
0x87, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46,
0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x82, 0x83,
0x44, 0x43, 0x42, 0x41, 0x42, 0x43, 0x44, 0x45,
0x46, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46,
0x47, 0x87, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47,
0xe6, 0xe7, 0x87, 0x86, 0x85, 0x84, 0x85, 0x86,
0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0xb6,
0xb5, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x56,
0x55, 0x54, 0x53, 0x52, 0x51, 0x52, 0x53, 0x54,
0x05, 0x06, 0x25, 0x26, 0x17, 0x16, 0x15, 0x55,
0x54, 0x53, 0x52, 0x51, 0x50, 0x51, 0x52, 0x53,
0x06, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15,
0x55, 0x54, 0x53, 0x52, 0x51, 0x52, 0x53, 0x54,
0x25, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14,
0x15, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
0x24, 0x23, 0x22, 0x23, 0x14, 0x13, 0x12, 0x13,
0x14, 0x15, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x23, 0x22, 0x21, 0x22, 0x13, 0x12, 0x11, 0x12,
0x13, 0x14, 0x15, 0x55, 0x54, 0x55, 0x56, 0x57,
0x22, 0x21, 0x20, 0x21, 0x22, 0x13, 0x12, 0x13,
0x14, 0x15, 0xa4, 0xa5, 0x55, 0x85, 0x86, 0xf6,
0x23, 0x22, 0x21, 0x22, 0x23, 0x14, 0x13, 0x14,
0x15, 0xa4, 0xa3, 0xa4, 0x85, 0x84, 0x85, 0xf5,
0x24, 0x23, 0x22, 0x23, 0x24, 0x15, 0x14, 0x15,
0x16, 0xa5, 0xa4, 0x85, 0x84, 0x83, 0x84, 0x85,
0x25, 0x24, 0x23, 0x43, 0x44, 0x45, 0x15, 0x16,
0x17, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46,
0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x82, 0x83,
0x44, 0x43, 0x42, 0x41, 0x42, 0x43, 0x44, 0x45,
0x85, 0x84, 0x83, 0x82, 0x81, 0x80, 0x81, 0x82,
0x43, 0x42, 0x41, 0x40, 0x41, 0x42, 0x43, 0x44,
0x45, 0x85, 0x84, 0x83, 0x82, 0x81, 0x82, 0x83,
0x44, 0x43, 0x42, 0x41, 0x42, 0x43, 0x44, 0x45,
0x46, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46,
0xe5, 0xe6, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
0x04, 0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0xb5,
0xb4, 0xb5, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x05, 0x06, 0x07, 0x08, 0x17, 0x16, 0x15, 0x16,
0xb5, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
0x06, 0x07, 0x26, 0x17, 0x16, 0x15, 0x14, 0x15,
0x55, 0x54, 0x53, 0x52, 0x51, 0x52, 0x53, 0x54,
0x07, 0x26, 0x25, 0x16, 0x15, 0x14, 0x13, 0x14,
0x15, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
0x26, 0x25, 0x24, 0x15, 0x14, 0x13, 0x12, 0x13,
0x14, 0x15, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x25, 0x24, 0x23, 0x14, 0x13, 0x12, 0x11, 0x12,
0x13, 0x14, 0x15, 0x55, 0x54, 0x55, 0x56, 0x57,
0x24, 0x23, 0x22, 0x13, 0x12, 0x11, 0x10, 0x11,
0x12, 0x13, 0x14, 0x15, 0x55, 0x56, 0x57, 0xf6,
0x23, 0x22, 0x21, 0x22, 0x13, 0x12, 0x11, 0x12,
0x13, 0x14, 0x15, 0x16, 0x56, 0x86, 0xf6, 0xf5,
0x24, 0x23, 0x22, 0x23, 0x14, 0x13, 0x12, 0x13,
0x14, 0x15, 0xa4, 0xa5, 0x86, 0x85, 0xf5, 0xf4,
0x25, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14,
0x15, 0x16, 0xa5, 0x86, 0x85, 0x84, 0x85, 0xf5,
0x26, 0x25, 0x24, 0x44, 0x45, 0x15, 0x14, 0x15,
0x16, 0x17, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x15, 0x16,
0x17, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46,
0x86, 0x85, 0x84, 0x83, 0x82, 0x81, 0x82, 0x83,
0x44, 0x43, 0x42, 0x41, 0x42, 0x43, 0x44, 0x45,
0x46, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46,
0xe5, 0xe6, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0xe5,
0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x84, 0x85, 0x86,
0x05, 0x06, 0x07, 0x08, 0xb7, 0xb6, 0xb5, 0xb4,
0xb3, 0xb4, 0xb5, 0x55, 0x54, 0x55, 0x56, 0x57,
0x06, 0x07, 0x08, 0x38, 0x18, 0x17, 0x16, 0xb5,
0xb4, 0xb5, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x07, 0x08, 0x27, 0x37, 0x17, 0x16, 0x15, 0x16,
0xb5, 0x55, 0x54, 0x53, 0x52, 0x53, 0x54, 0x55,
0x08, 0x27, 0x26, 0x17, 0x16, 0x15, 0x14, 0x15,
0x16, 0x56, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0x27, 0x26, 0x25, 0x16, 0x15, 0x14, 0x13, 0x14,
0x15, 0x16, 0x56, 0x55, 0x54, 0x55, 0x56, 0x57,
0x26, 0x25, 0x24, 0x15, 0x14, 0x13, 0x12, 0x13,
0x14, 0x15, 0x16, 0x56, 0x55, 0x56, 0x57, 0xf6,
0x25, 0x24, 0x23, 0x14, 0x13, 0x12, 0x11, 0x12,
0x13, 0x14, 0x15, 0x16, 0x56, 0x57, 0xf6, 0xf5,
0x24, 0x23, 0x22, 0x23, 0x14, 0x13, 0x12, 0x13,
0x14, 0x15, 0x16, 0x17, 0x57, 0xf6, 0xf5, 0xf4,
0xc3, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14,
0x15, 0x16, 0xa5, 0xa6, 0xf6, 0xf5, 0xf4, 0xf3,
0xc4, 0x25, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15,
0x16, 0x17, 0xa6, 0x87, 0x86, 0x85, 0xf5, 0xf4,
0xc5, 0x26, 0x25, 0x45, 0x46, 0x16, 0x15, 0x16,
0x17, 0x18, 0x87, 0x86, 0x85, 0x84, 0x85, 0xf5,
0xc6, 0x46, 0x45, 0x44, 0x45, 0x46, 0x16, 0x17,
0xe7, 0x87, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0x47,
0xe6, 0x86, 0x85, 0x84, 0x83, 0x82, 0x83, 0x84,
0x45, 0x44, 0x43, 0x42, 0x43, 0x44, 0x45, 0x46,
0xe5, 0xe6, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0xe5,
0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x84, 0x85, 0x86,
0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0xe5, 0xe4,
0xe3, 0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x86, 0x87,
0x06, 0x07, 0x08, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3,
0xb2, 0xb3, 0xb4, 0xb5, 0x55, 0x56, 0x57, 0x58,
0x07, 0x08, 0x38, 0x37, 0xb7, 0xb6, 0xb5, 0xb4,
0xb3, 0xb4, 0xb5, 0x55, 0x54, 0x55, 0x56, 0x57,
0x08, 0x38, 0x37, 0x36, 0x37, 0x17, 0x16, 0xb5,
0xb4, 0xb5, 0x55, 0x54, 0x53, 0x54, 0x55, 0x56,
0xc7, 0x28, 0x27, 0x37, 0x17, 0x16, 0x15, 0x16,
0xb5, 0xb6, 0x56, 0x55, 0x54, 0x55, 0x56, 0x57,
0xc6, 0x27, 0x26, 0x17, 0x16, 0x15, 0x14, 0x15,
0x16, 0x17, 0x57, 0x56, 0x55, 0x56, 0x57, 0xf6,
0xc5, 0x26, 0x25, 0x16, 0x15, 0x14, 0x13, 0x14,
0x15, 0x16, 0x17, 0x57, 0x56, 0x57, 0xf6, 0xf5,
0xc4, 0x25, 0x24, 0x15, 0x14, 0x13, 0x12, 0x13,
0x14, 0x15, 0x16, 0x17, 0x57, 0xf6, 0xf5, 0xf4,
0xc3, 0x24, 0x23, 0x24, 0x15, 0x14, 0x13, 0x14,
0x15, 0x16, 0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
0xc2, 0xc3, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15,
0x16, 0x17, 0xa6, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
0xc3, 0xc4, 0x25, 0x26, 0x17, 0x16, 0x15, 0x16,
0x17, 0x18, 0xa7, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
0xc4, 0xc5, 0x26, 0x46, 0x47, 0x17, 0x16, 0x17,
0xe7, 0xe8, 0x88, 0x87, 0x86, 0x85, 0xf5, 0xf4,
0xc5, 0xc6, 0x46, 0x45, 0x46, 0x47, 0x17, 0xe7,
0xe6, 0xe7, 0x87, 0x86, 0x85, 0x84, 0x85, 0xf5,
0xc6, 0x46, 0x45, 0x44, 0x45, 0x46, 0x47, 0xe6,
0xe5, 0xe6, 0x86, 0x85, 0x84, 0x83, 0x84, 0x85,
0x46, 0x45, 0x44, 0x43, 0x44, 0x45, 0x46, 0xe5,
0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x84, 0x85, 0x86,
0x47, 0x46, 0x45, 0x44, 0x45, 0x46, 0xe5, 0xe4,
0xe3, 0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x86, 0x87,
0x48, 0x47, 0x46, 0x45, 0x46, 0xe5, 0xe4, 0xe3,
0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0x86, 0x87, 0x88,
0x07, 0x08, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2,
0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8,
0x08, 0x38, 0x37, 0x36, 0xb6, 0xb5, 0xb4, 0xb3,
0xb2, 0xb3, 0xb4, 0xb5, 0x55, 0x56, 0x57, 0x58,
0xc7, 0x37, 0x36, 0x35, 0x36, 0xb6, 0xb5, 0xb4,
0xb3, 0xb4, 0xb5, 0x55, 0x54, 0x55, 0x56, 0x57,
0xc6, 0xc7, 0x37, 0x36, 0x37, 0x17, 0x16, 0xb5,
0xb4, 0xb5, 0xb6, 0x56, 0x55, 0x75, 0x76, 0xf6,
0xc5, 0xc6, 0x27, 0x37, 0x17, 0x16, 0x15, 0x16,
0xb5, 0xb6, 0xb7, 0x57, 0x56, 0x76, 0xf6, 0xf5,
0xc4, 0xc5, 0x26, 0x17, 0x16, 0x15, 0x14, 0x15,
0x16, 0x17, 0x18, 0x58, 0x57, 0xf6, 0xf5, 0xf4,
0xc3, 0xc4, 0x25, 0x16, 0x15, 0x14, 0x13, 0x14,
0x15, 0x16, 0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
0xc2, 0xc3, 0x24, 0x25, 0x16, 0x15, 0x14, 0x15,
0x16, 0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x16, 0x15, 0x16,
0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1,
0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0x16, 0x17,
0xe7, 0xe8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0x18, 0x17, 0xe7,
0xe6, 0xe7, 0xe8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
0xc4, 0xc5, 0x66, 0x46, 0x47, 0x48, 0xe7, 0xe6,
0xe5, 0xe6, 0xe7, 0x87, 0x86, 0x85, 0xf5, 0xf4,
0xc5, 0x66, 0x65, 0x45, 0x46, 0x47, 0xe6, 0xe5,
0xe4, 0xe5, 0xe6, 0x86, 0x85, 0x84, 0x85, 0xf5,
0xc6, 0x46, 0x45, 0x44, 0x45, 0x46, 0xe5, 0xe4,
0xe3, 0xe4, 0xe5, 0x96, 0x95, 0x85, 0x86, 0xf6,
0xc7, 0x47, 0x46, 0x45, 0x46, 0xe5, 0xe4, 0xe3,
0xe2, 0xe3, 0xe4, 0xe5, 0x96, 0x86, 0x87, 0xf7,
0xc8, 0x48, 0x47, 0x46, 0xe5, 0xe4, 0xe3, 0xe2,
0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8,
0x08, 0xb7, 0xb6, 0xb5, 0xb4, 0xb3, 0xb2, 0xb1,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
0xc7, 0x37, 0x36, 0x35, 0xb5, 0xb4, 0xb3, 0xb2,
0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x76, 0x77, 0xf7,
0xc6, 0x36, 0x35, 0x34, 0x35, 0xb5, 0xb4, 0xb3,
0xb2, 0xb3, 0xb4, 0xb5, 0x55, 0x75, 0x76, 0xf6,
0xc5, 0xc6, 0x36, 0x35, 0x36, 0xb6, 0xb5, 0xb4,
0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x74, 0x75, 0xf5,
0xc4, 0xc5, 0xc6, 0x36, 0x37, 0x17, 0x16, 0xb5,
0xb4, 0xb5, 0xb6, 0x77, 0x76, 0x75, 0xf5, 0xf4,
0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0x16, 0x15, 0x16,
0xb5, 0xb6, 0xb7, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
0xc2, 0xc3, 0xc4, 0xc5, 0x16, 0x15, 0x14, 0x15,
0x16, 0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x16, 0x15, 0x16,
0x17, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0x16, 0x17,
0xe7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0xe7,
0xe6, 0xe7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1,
0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xe7, 0xe6,
0xe5, 0xe6, 0xe7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
0xc3, 0xc4, 0x65, 0x66, 0x67, 0xe7, 0xe6, 0xe5,
0xe4, 0xe5, 0xe6, 0x97, 0x96, 0xf5, 0xf4, 0xf3,
0xc4, 0x65, 0x64, 0x65, 0x66, 0xe6, 0xe5, 0xe4,
0xe3, 0xe4, 0xe5, 0x96, 0x95, 0x85, 0xf5, 0xf4,
0xc5, 0x66, 0x65, 0x45, 0x46, 0xe5, 0xe4, 0xe3,
0xe2, 0xe3, 0xe4, 0x95, 0x94, 0x95, 0x96, 0xf5,
0xc6, 0x67, 0x66, 0x46, 0xe5, 0xe4, 0xe3, 0xe2,
0xe1, 0xe2, 0xe3, 0xe4, 0x95, 0x96, 0x97, 0xf6,
0xc7, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0x38, 0x37, 0x36, 0x35, 0xb5, 0xb4, 0xb3, 0xb2,
0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0x76, 0x77, 0x78,
0x37, 0x36, 0x35, 0x34, 0x35, 0xb5, 0xb4, 0xb3,
0xb2, 0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x76, 0x77,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0xb5, 0xb4,
0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x74, 0x75, 0x76,
0xc6, 0x36, 0x35, 0x34, 0x35, 0x36, 0xb6, 0xb5,
0xb4, 0xb5, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0xc5, 0xc6, 0x36, 0x35, 0x36, 0x37, 0x17, 0xb6,
0xb5, 0xb6, 0x77, 0x76, 0x75, 0x74, 0x75, 0xf5,
0xc4, 0xc5, 0xc6, 0x36, 0x37, 0x17, 0x16, 0x17,
0xb6, 0xb7, 0x78, 0x77, 0x76, 0x75, 0xf5, 0xf4,
0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0x16, 0x15, 0x16,
0x17, 0x18, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0x16, 0xd6,
0xd7, 0xd8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0x17, 0xd7,
0xd8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1,
0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0x18, 0xd8,
0xe7, 0xe8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
0xc3, 0xc4, 0x65, 0x66, 0x67, 0x68, 0xe8, 0xe7,
0xe6, 0xe7, 0x98, 0x97, 0x96, 0xf5, 0xf4, 0xf3,
0xc4, 0x65, 0x64, 0x65, 0x66, 0x67, 0xe7, 0xe6,
0xe5, 0xe6, 0x97, 0x96, 0x95, 0x96, 0xf5, 0xf4,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xe6, 0xe5,
0xe4, 0xe5, 0x96, 0x95, 0x94, 0x95, 0x96, 0xf5,
0x66, 0x65, 0x64, 0x65, 0x66, 0xe6, 0xe5, 0xe4,
0xe3, 0xe4, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x67, 0x66, 0x65, 0x66, 0xe6, 0xe5, 0xe4, 0xe3,
0xe2, 0xe3, 0xe4, 0x95, 0x94, 0x95, 0x96, 0x97,
0x68, 0x67, 0x66, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2,
0xe1, 0xe2, 0xe3, 0xe4, 0x95, 0x96, 0x97, 0x98,
0x37, 0x36, 0x35, 0x34, 0x35, 0xb5, 0xb4, 0xb3,
0xb2, 0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x76, 0x77,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0xb5, 0xb4,
0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x74, 0x75, 0x76,
0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0xb5,
0xb4, 0xb5, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xb6,
0xb5, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
0xc6, 0x36, 0x35, 0x34, 0x35, 0x36, 0x37, 0xb7,
0xb6, 0x77, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0xc5, 0xc6, 0x36, 0x35, 0x36, 0x37, 0x17, 0xd7,
0xb7, 0x78, 0x77, 0x76, 0x75, 0x74, 0x75, 0xf5,
0xc4, 0xc5, 0xc6, 0x36, 0x37, 0x17, 0x16, 0xd6,
0xd7, 0xd8, 0x78, 0x77, 0x76, 0x75, 0xf5, 0xf4,
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xd7, 0xd6, 0xd5,
0xd6, 0xd7, 0xd8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3,
0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xd7, 0xd6,
0xd7, 0xd8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2,
0xc3, 0xc4, 0x65, 0x66, 0x67, 0x68, 0xd8, 0xd7,
0xd8, 0x99, 0x98, 0x97, 0x96, 0xf5, 0xf4, 0xf3,
0xc4, 0x65, 0x64, 0x65, 0x66, 0x67, 0x68, 0xd8,
0xe7, 0x98, 0x97, 0x96, 0x95, 0x96, 0xf5, 0xf4,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0x67, 0xe7,
0xe6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0xf5,
0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0xe6,
0xe5, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xe6, 0xe5,
0xe4, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
0x66, 0x65, 0x64, 0x65, 0x66, 0xe6, 0xe5, 0xe4,
0xe3, 0xe4, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x67, 0x66, 0x65, 0x66, 0xe6, 0xe5, 0xe4, 0xe3,
0xe2, 0xe3, 0xe4, 0x95, 0x94, 0x95, 0x96, 0x97,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0xb5, 0xb4,
0xb3, 0xb4, 0xb5, 0x76, 0x75, 0x74, 0x75, 0x76,
0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0xb5,
0xb4, 0xb5, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35,
0xb5, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36,
0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x72, 0x73,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0x37,
0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
0xc6, 0x36, 0x35, 0x34, 0x35, 0x36, 0x37, 0xd6,
0xd7, 0x77, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0xc5, 0xc6, 0x36, 0x35, 0x36, 0x37, 0xd6, 0xd5,
0xd6, 0xd7, 0x77, 0x76, 0x75, 0x74, 0x75, 0xf5,
0xc4, 0xc5, 0x66, 0x36, 0x37, 0xd6, 0xd5, 0xd4,
0xd5, 0xd6, 0xd7, 0x77, 0x76, 0x75, 0xf5, 0xf4,
0xc3, 0xc4, 0x65, 0x66, 0x67, 0xd7, 0xd6, 0xd5,
0xd6, 0xd7, 0x98, 0x97, 0x96, 0xf5, 0xf4, 0xf3,
0xc4, 0x65, 0x64, 0x65, 0x66, 0x67, 0xd7, 0xd6,
0xd7, 0x98, 0x97, 0x96, 0x95, 0x96, 0xf5, 0xf4,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0x67, 0xd7,
0x98, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0xf5,
0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x63, 0x62, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0x96,
0x95, 0x94, 0x93, 0x92, 0x91, 0x92, 0x93, 0x94,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xe6, 0xe5,
0xe4, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
0x66, 0x65, 0x64, 0x65, 0x66, 0xe6, 0xe5, 0xe4,
0xe3, 0xe4, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0xb5,
0xb4, 0xb5, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35,
0xb5, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
0x33, 0x32, 0x31, 0x30, 0x31, 0x32, 0x33, 0x34,
0x35, 0x75, 0x74, 0x73, 0x72, 0x71, 0x72, 0x73,
0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35,
0x75, 0x74, 0x73, 0x72, 0x71, 0x70, 0x71, 0x72,
0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36,
0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x72, 0x73,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xd5,
0xd6, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
0xc6, 0x36, 0x35, 0x34, 0x35, 0x36, 0xd5, 0xd4,
0xd5, 0xd6, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0xc5, 0x66, 0x65, 0x35, 0x36, 0xd5, 0xd4, 0xd3,
0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x74, 0x75, 0xf5,
0xc4, 0x65, 0x64, 0x65, 0x66, 0xd6, 0xd5, 0xd4,
0xd5, 0xd6, 0x97, 0x96, 0x95, 0x75, 0xf5, 0xf4,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xd6, 0xd5,
0xd6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0xf5,
0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0xd6,
0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x63, 0x62, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
0x62, 0x61, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65,
0x95, 0x94, 0x93, 0x92, 0x91, 0x92, 0x93, 0x94,
0x63, 0x62, 0x61, 0x62, 0x63, 0x64, 0x65, 0x95,
0x94, 0x93, 0x92, 0x91, 0x90, 0x91, 0x92, 0x93,
0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0x96,
0x95, 0x94, 0x93, 0x92, 0x91, 0x92, 0x93, 0x94,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xe6, 0xe5,
0xe4, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xb6,
0xb5, 0xb6, 0x77, 0x76, 0x75, 0x74, 0x75, 0x76,
0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36,
0xb6, 0x77, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0x34, 0x33, 0x32, 0x31, 0x32, 0x33, 0x34, 0x35,
0x36, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36,
0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x72, 0x73,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xd5,
0xd6, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0xd5, 0xd4,
0xd5, 0xd6, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0xc7, 0x37, 0x36, 0x35, 0x36, 0xd5, 0xd4, 0xd3,
0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x74, 0x75, 0x76,
0xc6, 0x67, 0x66, 0x36, 0xd5, 0xd4, 0xd3, 0xd2,
0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x76, 0xf6,
0xc5, 0x66, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 0xd3,
0xd4, 0xd5, 0xd6, 0x97, 0x96, 0x76, 0xf6, 0xf5,
0x66, 0x65, 0x64, 0x65, 0x66, 0xd6, 0xd5, 0xd4,
0xd5, 0xd6, 0x97, 0x96, 0x95, 0x96, 0x97, 0xf6,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xd6, 0xd5,
0xd6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0xd6,
0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x63, 0x62, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0x96,
0x95, 0x94, 0x93, 0x92, 0x91, 0x92, 0x93, 0x94,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0x67, 0x97,
0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
0x66, 0x65, 0x64, 0x65, 0x66, 0x67, 0xe7, 0xe6,
0xe5, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0x37, 0xb7,
0xb6, 0xb7, 0x78, 0x77, 0x76, 0x75, 0x76, 0x77,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0x37,
0xb7, 0x78, 0x77, 0x76, 0x75, 0x74, 0x75, 0x76,
0x35, 0x34, 0x33, 0x32, 0x33, 0x34, 0x35, 0x36,
0x37, 0x77, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xd5,
0xd6, 0x76, 0x75, 0x74, 0x73, 0x72, 0x73, 0x74,
0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0xd5, 0xd4,
0xd5, 0xd6, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0x38, 0x37, 0x36, 0x35, 0x36, 0xd5, 0xd4, 0xd3,
0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x74, 0x75, 0x76,
0xc8, 0x38, 0x37, 0x36, 0xd5, 0xd4, 0xd3, 0xd2,
0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x76, 0x77,
0xc7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1,
0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x77, 0xf7,
0xc6, 0x67, 0x66, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2,
0xd3, 0xd4, 0xd5, 0xd6, 0x97, 0x77, 0xf7, 0xf6,
0x67, 0x66, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 0xd3,
0xd4, 0xd5, 0xd6, 0x97, 0x96, 0x97, 0x98, 0xf7,
0x66, 0x65, 0x64, 0x65, 0x66, 0xd6, 0xd5, 0xd4,
0xd5, 0xd6, 0x97, 0x96, 0x95, 0x96, 0x97, 0x98,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xd6, 0xd5,
0xd6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
0x64, 0x63, 0x62, 0x63, 0x64, 0x65, 0x66, 0xd6,
0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0x67, 0x97,
0x96, 0x95, 0x94, 0x93, 0x92, 0x93, 0x94, 0x95,
0x66, 0x65, 0x64, 0x65, 0x66, 0x67, 0x68, 0x98,
0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x67, 0x66, 0x65, 0x66, 0x67, 0x68, 0xe8, 0xe7,
0xe6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
0x38, 0x37, 0x36, 0x35, 0x36, 0x37, 0x38, 0xd7,
0xb7, 0xb8, 0x79, 0x78, 0x77, 0x76, 0x77, 0x78,
0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0x37, 0xd6,
0xd7, 0xd8, 0x78, 0x77, 0x76, 0x75, 0x76, 0x77,
0x36, 0x35, 0x34, 0x33, 0x34, 0x35, 0x36, 0xd5,
0xd6, 0xd7, 0x77, 0x76, 0x75, 0x74, 0x75, 0x76,
0x37, 0x36, 0x35, 0x34, 0x35, 0x36, 0xd5, 0xd4,
0xd5, 0xd6, 0x76, 0x75, 0x74, 0x73, 0x74, 0x75,
0x38, 0x37, 0x36, 0x35, 0x36, 0xd5, 0xd4, 0xd3,
0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x74, 0x75, 0x76,
0x39, 0x38, 0x37, 0x36, 0xd5, 0xd4, 0xd3, 0xd2,
0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x75, 0x76, 0x77,
0xd8, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1,
0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0x76, 0x77, 0x78,
0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1, 0xd0,
0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8,
0xc7, 0xd7, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2, 0xd1,
0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xf7,
0x68, 0x67, 0x66, 0xd6, 0xd5, 0xd4, 0xd3, 0xd2,
0xd3, 0xd4, 0xd5, 0xd6, 0x97, 0x98, 0x99, 0xf8,
0x67, 0x66, 0x65, 0x66, 0xd6, 0xd5, 0xd4, 0xd3,
0xd4, 0xd5, 0xd6, 0x97, 0x96, 0x97, 0x98, 0x99,
0x66, 0x65, 0x64, 0x65, 0x66, 0xd6, 0xd5, 0xd4,
0xd5, 0xd6, 0x97, 0x96, 0x95, 0x96, 0x97, 0x98,
0x65, 0x64, 0x63, 0x64, 0x65, 0x66, 0xd6, 0xd5,
0xd6, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
0x66, 0x65, 0x64, 0x65, 0x66, 0x67, 0xd7, 0xd6,
0x97, 0x96, 0x95, 0x94, 0x93, 0x94, 0x95, 0x96,
0x67, 0x66, 0x65, 0x66, 0x67, 0x68, 0xd8, 0xd7,
0x98, 0x97, 0x96, 0x95, 0x94, 0x95, 0x96, 0x97,
0x68, 0x67, 0x66, 0x67, 0x68, 0x69, 0xd9, 0xd8,
0xe7, 0x98, 0x97, 0x96, 0x95, 0x96, 0x97, 0x98
};
UWORD nearmc[4096] = {
0x000, 0x000, 0x000, 0x300, 0x300, 0xb00, 0xb10, 0xba0,
0xba0, 0xba0, 0xba0, 0x5a0, 0x5a0, 0x580, 0x580, 0x580,
0x000, 0x000, 0x300, 0x300, 0x300, 0x300, 0xb10, 0xba0,
0xba0, 0xba0, 0x5a0, 0x5a0, 0x5a0, 0x580, 0x580, 0x580,
0x000, 0x300, 0x300, 0x300, 0x300, 0x300, 0x310, 0xba0,
0xba0, 0x5a0, 0x5a0, 0x5a0, 0x5a0, 0x580, 0x580, 0x580,
0x000, 0x300, 0x300, 0x300, 0x300, 0x300, 0x110, 0x1a0,
0xba0, 0x5a0, 0x5a0, 0x5a0, 0x5a0, 0x780, 0x780, 0x780,
0x000, 0x200, 0x200, 0x300, 0x300, 0x100, 0x110, 0x1a0,
0x1a0, 0x1a0, 0x5a0, 0x5a0, 0x5a0, 0x780, 0x780, 0x780,
0xc0a, 0x20a, 0x20a, 0x20a, 0x10a, 0x10a, 0x11a, 0x1aa,
0x1aa, 0x1aa, 0xaaa, 0x5aa, 0x5aa, 0x78a, 0x78a, 0xf8a,
0xc0a, 0x20a, 0x20a, 0x20a, 0x10a, 0x10a, 0x11a, 0x1aa,
0x1aa, 0x1aa, 0xaaa, 0xaaa, 0x5aa, 0x78a, 0xf8a, 0xf8a,
0xc0a, 0x20a, 0x20a, 0x20a, 0x20a, 0x10a, 0x11a, 0xdaa,
0xdaa, 0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xf8a, 0xf8a, 0xf8a,
0xc0a, 0xc0a, 0x20a, 0x20a, 0x20a, 0x10a, 0x11a, 0xdaa,
0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xf8a, 0xf8a, 0xf8a,
0xc0a, 0xc0a, 0x20a, 0x20a, 0x20a, 0x10a, 0x11a, 0xdaa,
0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xaaa, 0x88a, 0xf8a, 0xf8a,
0xc0a, 0x60a, 0x60a, 0x40a, 0x40a, 0x10a, 0x11a, 0xdaa,
0xaaa, 0xaaa, 0xaaa, 0xaaa, 0x8aa, 0x88a, 0x88a, 0xf8a,
0x60a, 0x60a, 0x60a, 0x40a, 0x40a, 0x40a, 0x11a, 0xdaa,
0xeaa, 0xaaa, 0xaaa, 0x8aa, 0x8aa, 0x88a, 0x88a, 0x88a,
0x608, 0x608, 0x608, 0x408, 0x408, 0x408, 0x418, 0xea8,
0xea8, 0x8a8, 0x8a8, 0x8a8, 0x8a8, 0x888, 0x888, 0x888,
0x404, 0x404, 0x404, 0x404, 0x404, 0x404, 0x414, 0xea4,
0xea4, 0x9a4, 0x9a4, 0x9a4, 0x9a4, 0x884, 0x884, 0x884,
0x404, 0x404, 0x404, 0x404, 0x404, 0x404, 0xe14, 0xea4,
0xea4, 0xea4, 0x9a4, 0x9a4, 0x9a4, 0x884, 0x884, 0x884,
0x404, 0x404, 0x404, 0x404, 0x404, 0xe04, 0xe14, 0xea4,
0xea4, 0xea4, 0xea4, 0x9a4, 0x9a4, 0x884, 0x884, 0x884,
0x000, 0x000, 0x020, 0x340, 0x340, 0xb10, 0xb10, 0xb10,
0xba0, 0xba0, 0xba0, 0x5a0, 0x550, 0x580, 0x580, 0x580,
0x000, 0x000, 0x320, 0x340, 0x340, 0x310, 0xb10, 0xb10,
0xba0, 0xba0, 0x5a0, 0x5a0, 0x550, 0x580, 0x580, 0x580,
0x005, 0x305, 0x325, 0x345, 0x345, 0x315, 0x315, 0xb15,
0xba5, 0x5a5, 0x5a5, 0x5a5, 0x555, 0x585, 0x585, 0x585,
0x005, 0x305, 0x325, 0x345, 0x345, 0x315, 0x115, 0x115,
0xba5, 0x5a5, 0x5a5, 0x5a5, 0x555, 0x785, 0x785, 0x785,
0x005, 0x205, 0x225, 0x345, 0x345, 0x115, 0x115, 0x115,
0x1a5, 0x1a5, 0x5a5, 0x5a5, 0x555, 0x785, 0x785, 0x785,
0xc01, 0x201, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111,
0x1a1, 0x1a1, 0xaa1, 0x5a1, 0x551, 0x781, 0x781, 0xf81,
0xc01, 0x201, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111,
0x1a1, 0x1a1, 0xaa1, 0xaa1, 0x551, 0x781, 0xf81, 0xf81,
0xc02, 0x202, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12,
0xda2, 0xaa2, 0xaa2, 0xaa2, 0xa52, 0xf82, 0xf82, 0xf82,
0xc0a, 0xc0a, 0x22a, 0x24a, 0x24a, 0x11a, 0x11a, 0xd1a,
0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xa5a, 0xf8a, 0xf8a, 0xf8a,
0xc0a, 0xc0a, 0x22a, 0x24a, 0x24a, 0x11a, 0x11a, 0xd1a,
0xaaa, 0xaaa, 0xaaa, 0xaaa, 0xa5a, 0x88a, 0xf8a, 0xf8a,
0xc0a, 0x60a, 0x62a, 0x44a, 0x44a, 0x11a, 0x11a, 0xd1a,
0xaaa, 0xaaa, 0xaaa, 0xaaa, 0x85a, 0x88a, 0x88a, 0xf8a,
0x608, 0x608, 0x628, 0x448, 0x448, 0x418, 0x118, 0xd18,
0xea8, 0xaa8, 0xaa8, 0x8a8, 0x858, 0x888, 0x888, 0x888,
0x608, 0x608, 0x628, 0x448, 0x448, 0x418, 0x418, 0xe18,
0xea8, 0x8a8, 0x8a8, 0x8a8, 0x858, 0x888, 0x888, 0x888,
0x404, 0x404, 0x424, 0x444, 0x444, 0x414, 0x414, 0xe14,
0xea4, 0x9a4, 0x9a4, 0x9a4, 0x954, 0x884, 0x884, 0x884,
0x404, 0x404, 0x424, 0x444, 0x444, 0x414, 0xe14, 0xe14,
0xea4, 0xea4, 0x9a4, 0x9a4, 0x954, 0x884, 0x884, 0x884,
0x404, 0x404, 0x424, 0x444, 0x444, 0xe14, 0xe14, 0xe14,
0xea4, 0xea4, 0xea4, 0x9a4, 0x954, 0x884, 0x884, 0x884,
0x000, 0x020, 0x020, 0x340, 0x340, 0xb10, 0xb10, 0xb10,
0xb10, 0xba0, 0xba0, 0x550, 0x550, 0x580, 0x580, 0x580,
0x005, 0x025, 0x325, 0x345, 0x345, 0x315, 0xb15, 0xb15,
0xb15, 0xba5, 0x5a5, 0x555, 0x555, 0x585, 0x585, 0x585,
0x005, 0x325, 0x325, 0x345, 0x345, 0x315, 0x315, 0xb15,
0xb15, 0x5a5, 0x5a5, 0x555, 0x555, 0x585, 0x585, 0x585,
0x005, 0x325, 0x325, 0x345, 0x345, 0x315, 0x115, 0x115,
0xb15, 0x5a5, 0x5a5, 0x555, 0x555, 0x785, 0x785, 0x785,
0x005, 0x225, 0x225, 0x345, 0x345, 0x115, 0x115, 0x115,
0x115, 0x1a5, 0x5a5, 0x555, 0x555, 0x785, 0x785, 0x785,
0xc01, 0x221, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111,
0x111, 0x1a1, 0xaa1, 0x551, 0x551, 0x781, 0x781, 0xf81,
0xc01, 0x221, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111,
0x111, 0x1a1, 0xaa1, 0xa51, 0x551, 0x781, 0xf81, 0xf81,
0xc02, 0x222, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12,
0xd12, 0xaa2, 0xaa2, 0xa52, 0xa52, 0xf82, 0xf82, 0xf82,
0xc02, 0xc22, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12,
0xa12, 0xaa2, 0xaa2, 0xa52, 0xa52, 0xf82, 0xf82, 0xf82,
0xc02, 0xc22, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12,
0xa12, 0xaa2, 0xaa2, 0xa52, 0xa52, 0x882, 0xf82, 0xf82,
0xc08, 0x628, 0x628, 0x448, 0x448, 0x118, 0x118, 0xd18,
0xa18, 0xaa8, 0xaa8, 0xa58, 0x858, 0x888, 0x888, 0xf88,
0x608, 0x628, 0x628, 0x448, 0x448, 0x418, 0x118, 0xd18,
0xe18, 0xaa8, 0xaa8, 0x858, 0x858, 0x888, 0x888, 0x888,
0x608, 0x628, 0x628, 0x448, 0x448, 0x418, 0x418, 0xe18,
0xe18, 0x8a8, 0x8a8, 0x858, 0x858, 0x888, 0x888, 0x888,
0x404, 0x424, 0x424, 0x444, 0x444, 0x414, 0x414, 0xe14,
0xe14, 0x9a4, 0x9a4, 0x954, 0x954, 0x884, 0x884, 0x884,
0x404, 0x424, 0x424, 0x444, 0x444, 0x414, 0xe14, 0xe14,
0xe14, 0xea4, 0x9a4, 0x954, 0x954, 0x884, 0x884, 0x884,
0x404, 0x424, 0x424, 0x444, 0x444, 0xe14, 0xe14, 0xe14,
0xe14, 0xea4, 0xea4, 0x954, 0x954, 0x884, 0x884, 0x884,
0x025, 0x025, 0x025, 0x345, 0x345, 0xb15, 0xb15, 0xb15,
0xb15, 0xb55, 0xb55, 0x555, 0x555, 0x585, 0x585, 0x585,
0x025, 0x025, 0x325, 0x345, 0x345, 0x315, 0xb15, 0xb15,
0xb15, 0xb55, 0x555, 0x555, 0x555, 0x585, 0x585, 0x585,
0x025, 0x325, 0x325, 0x345, 0x345, 0x315, 0x315, 0xb15,
0xb15, 0x555, 0x555, 0x555, 0x555, 0x585, 0x585, 0x585,
0x025, 0x325, 0x325, 0x345, 0x345, 0x315, 0x115, 0x115,
0xb15, 0x555, 0x555, 0x555, 0x555, 0x785, 0x785, 0x785,
0x025, 0x225, 0x225, 0x345, 0x345, 0x115, 0x115, 0x115,
0x115, 0x155, 0x555, 0x555, 0x555, 0x785, 0x785, 0x785,
0xc21, 0x221, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111,
0x111, 0x151, 0xa51, 0x551, 0x551, 0x781, 0x781, 0xf81,
0xc21, 0x221, 0x221, 0x241, 0x141, 0x111, 0x111, 0x111,
0x111, 0x151, 0xa51, 0xa51, 0x551, 0x781, 0xf81, 0xf81,
0xc22, 0x222, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12,
0xd12, 0xa52, 0xa52, 0xa52, 0xa52, 0xf82, 0xf82, 0xf82,
0xc22, 0xc22, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12,
0xa12, 0xa52, 0xa52, 0xa52, 0xa52, 0xf82, 0xf82, 0xf82,
0xc22, 0xc22, 0x222, 0x242, 0x242, 0x112, 0x112, 0xd12,
0xa12, 0xa52, 0xa52, 0xa52, 0xa52, 0x882, 0xf82, 0xf82,
0xc28, 0x628, 0x628, 0x448, 0x448, 0x118, 0x118, 0xd18,
0xa18, 0xa58, 0xa58, 0xa58, 0x858, 0x888, 0x888, 0xf88,
0x628, 0x628, 0x628, 0x448, 0x448, 0x418, 0x118, 0xd18,
0xe18, 0xa58, 0xa58, 0x858, 0x858, 0x888, 0x888, 0x888,
0x628, 0x628, 0x628, 0x448, 0x448, 0x418, 0x418, 0xe18,
0xe18, 0x858, 0x858, 0x858, 0x858, 0x888, 0x888, 0x888,
0x424, 0x424, 0x424, 0x444, 0x444, 0x414, 0x414, 0xe14,
0xe14, 0x954, 0x954, 0x954, 0x954, 0x884, 0x884, 0x884,
0x424, 0x424, 0x424, 0x444, 0x444, 0x414, 0xe14, 0xe14,
0xe14, 0xe54, 0x954, 0x954, 0x954, 0x884, 0x884, 0x884,
0x424, 0x424, 0x424, 0x444, 0x444, 0xe14, 0xe14, 0xe14,
0xe14, 0xe54, 0xe54, 0x954, 0x954, 0x884, 0x884, 0x884,
0x025, 0x025, 0x025, 0x345, 0x315, 0xb15, 0xb15, 0xb15,
0xb15, 0xb15, 0xb55, 0x555, 0x555, 0x585, 0x585, 0x585,
0x025, 0x025, 0x325, 0x345, 0x315, 0x315, 0xb15, 0xb15,
0xb15, 0xb15, 0x555, 0x555, 0x555, 0x585, 0x585, 0x585,
0x025, 0x325, 0x325, 0x345, 0x315, 0x315, 0x315, 0xb15,
0xb15, 0x515, 0x555, 0x555, 0x555, 0x585, 0x585, 0x585,
0x025, 0x325, 0x325, 0x345, 0x315, 0x315, 0x115, 0x115,
0xb15, 0x515, 0x555, 0x555, 0x555, 0x785, 0x785, 0x785,
0x021, 0x221, 0x221, 0x341, 0x311, 0x111, 0x111, 0x111,
0x111, 0x111, 0x551, 0x551, 0x551, 0x781, 0x781, 0x781,
0xc21, 0x221, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111,
0x111, 0x111, 0xa51, 0x551, 0x551, 0x781, 0x781, 0xf81,
0xc21, 0x221, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111,
0x111, 0x111, 0xa51, 0xa51, 0x551, 0x781, 0xf81, 0xf81,
0xc21, 0x221, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11,
0xd11, 0xa11, 0xa51, 0xa51, 0xa51, 0xf81, 0xf81, 0xf81,
0xc21, 0xc21, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11,
0xa11, 0xa11, 0xa51, 0xa51, 0xa51, 0xf81, 0xf81, 0xf81,
0xc21, 0xc21, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11,
0xa11, 0xa11, 0xa51, 0xa51, 0xa51, 0x881, 0xf81, 0xf81,
0xc28, 0x628, 0x628, 0x448, 0x418, 0x118, 0x118, 0xd18,
0xa18, 0xa18, 0xa58, 0xa58, 0x858, 0x888, 0x888, 0xf88,
0x628, 0x628, 0x628, 0x448, 0x418, 0x418, 0x118, 0xd18,
0xe18, 0xa18, 0xa58, 0x858, 0x858, 0x888, 0x888, 0x888,
0x628, 0x628, 0x628, 0x448, 0x418, 0x418, 0x418, 0xe18,
0xe18, 0x818, 0x858, 0x858, 0x858, 0x888, 0x888, 0x888,
0x424, 0x424, 0x424, 0x444, 0x414, 0x414, 0x414, 0xe14,
0xe14, 0x914, 0x954, 0x954, 0x954, 0x884, 0x884, 0x884,
0x424, 0x424, 0x424, 0x444, 0x414, 0x414, 0xe14, 0xe14,
0xe14, 0xe14, 0x954, 0x954, 0x954, 0x884, 0x884, 0x884,
0x424, 0x424, 0x424, 0x444, 0x414, 0xe14, 0xe14, 0xe14,
0xe14, 0xe14, 0xe54, 0x954, 0x954, 0x884, 0x884, 0x884,
0x0cb, 0x02b, 0x02b, 0x34b, 0x31b, 0xb1b, 0xb1b, 0xb1b,
0xb1b, 0xb1b, 0xb5b, 0x55b, 0x55b, 0x58b, 0x58b, 0x5fb,
0x0c5, 0x025, 0x325, 0x345, 0x315, 0x315, 0xb15, 0xb15,
0xb15, 0xb15, 0x555, 0x555, 0x555, 0x585, 0x585, 0x5f5,
0x0c5, 0x325, 0x325, 0x345, 0x315, 0x315, 0x315, 0xb15,
0xb15, 0x515, 0x555, 0x555, 0x555, 0x585, 0x585, 0x5f5,
0x0c5, 0x325, 0x325, 0x345, 0x315, 0x315, 0x115, 0x115,
0xb15, 0x515, 0x555, 0x555, 0x555, 0x785, 0x785, 0x7f5,
0x0c1, 0x221, 0x221, 0x341, 0x311, 0x111, 0x111, 0x111,
0x111, 0x111, 0x551, 0x551, 0x551, 0x781, 0x781, 0x7f1,
0xcc1, 0x221, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111,
0x111, 0x111, 0xa51, 0x551, 0x551, 0x781, 0x781, 0xff1,
0xcc1, 0x221, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111,
0x111, 0x111, 0xa51, 0xa51, 0x551, 0x781, 0xf81, 0xff1,
0xcc1, 0x221, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11,
0xd11, 0xa11, 0xa51, 0xa51, 0xa51, 0xf81, 0xf81, 0xff1,
0xcc1, 0xc21, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11,
0xa11, 0xa11, 0xa51, 0xa51, 0xa51, 0xf81, 0xf81, 0xff1,
0xcc1, 0xc21, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11,
0xa11, 0xa11, 0xa51, 0xa51, 0xa51, 0x881, 0xf81, 0xff1,
0xcc8, 0x628, 0x628, 0x448, 0x418, 0x118, 0x118, 0xd18,
0xa18, 0xa18, 0xa58, 0xa58, 0x858, 0x888, 0x888, 0xff8,
0x6c8, 0x628, 0x628, 0x448, 0x418, 0x418, 0x118, 0xd18,
0xe18, 0xa18, 0xa58, 0x858, 0x858, 0x888, 0x888, 0x8f8,
0x6c8, 0x628, 0x628, 0x448, 0x418, 0x418, 0x418, 0xe18,
0xe18, 0x818, 0x858, 0x858, 0x858, 0x888, 0x888, 0x8f8,
0x4c4, 0x424, 0x424, 0x444, 0x414, 0x414, 0x414, 0xe14,
0xe14, 0x914, 0x954, 0x954, 0x954, 0x884, 0x884, 0x8f4,
0x4c4, 0x424, 0x424, 0x444, 0x414, 0x414, 0xe14, 0xe14,
0xe14, 0xe14, 0x954, 0x954, 0x954, 0x884, 0x884, 0x8f4,
0x4ce, 0x42e, 0x42e, 0x44e, 0x41e, 0xe1e, 0xe1e, 0xe1e,
0xe1e, 0xe1e, 0xe5e, 0x95e, 0x95e, 0x88e, 0x88e, 0x8fe,
0x0cb, 0x0cb, 0x02b, 0x34b, 0x31b, 0xb1b, 0xb1b, 0xb1b,
0xbbb, 0xbbb, 0xbbb, 0x55b, 0x55b, 0x58b, 0x5fb, 0x5fb,
0x0cb, 0x0cb, 0x32b, 0x34b, 0x31b, 0x31b, 0xb1b, 0xb1b,
0xbbb, 0xbbb, 0x5bb, 0x55b, 0x55b, 0x58b, 0x5fb, 0x5fb,
0x0c5, 0x3c5, 0x325, 0x345, 0x315, 0x315, 0x315, 0xb15,
0xbb5, 0x5b5, 0x5b5, 0x555, 0x555, 0x585, 0x5f5, 0x5f5,
0x0c5, 0x3c5, 0x325, 0x345, 0x315, 0x315, 0x115, 0x115,
0xbb5, 0x5b5, 0x5b5, 0x555, 0x555, 0x785, 0x7f5, 0x7f5,
0x0c1, 0x2c1, 0x221, 0x341, 0x311, 0x111, 0x111, 0x111,
0x1b1, 0x1b1, 0x5b1, 0x551, 0x551, 0x781, 0x7f1, 0x7f1,
0xcc1, 0x2c1, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111,
0x1b1, 0x1b1, 0xab1, 0x551, 0x551, 0x781, 0x7f1, 0xff1,
0xcc1, 0x2c1, 0x221, 0x241, 0x111, 0x111, 0x111, 0x111,
0x1b1, 0x1b1, 0xab1, 0xa51, 0x551, 0x781, 0xff1, 0xff1,
0xcc1, 0x2c1, 0x221, 0x241, 0x211, 0x111, 0x111, 0xd11,
0xdb1, 0xab1, 0xab1, 0xa51, 0xa51, 0xf81, 0xff1, 0xff1,
0xccc, 0xccc, 0x22c, 0x24c, 0x21c, 0x11c, 0x11c, 0xd1c,
0xabc, 0xabc, 0xabc, 0xa5c, 0xa5c, 0xf8c, 0xffc, 0xffc,
0xccc, 0xccc, 0x22c, 0x24c, 0x21c, 0x11c, 0x11c, 0xd1c,
0xabc, 0xabc, 0xabc, 0xa5c, 0xa5c, 0x88c, 0xffc, 0xffc,
0xccc, 0x6cc, 0x62c, 0x44c, 0x41c, 0x11c, 0x11c, 0xd1c,
0xabc, 0xabc, 0xabc, 0xa5c, 0x85c, 0x88c, 0x8fc, 0xffc,
0x6c8, 0x6c8, 0x628, 0x448, 0x418, 0x418, 0x118, 0xd18,
0xeb8, 0xab8, 0xab8, 0x858, 0x858, 0x888, 0x8f8, 0x8f8,
0x6c8, 0x6c8, 0x628, 0x448, 0x418, 0x418, 0x418, 0xe18,
0xeb8, 0x8b8, 0x8b8, 0x858, 0x858, 0x888, 0x8f8, 0x8f8,
0x4c4, 0x4c4, 0x424, 0x444, 0x414, 0x414, 0x414, 0xe14,
0xeb4, 0x9b4, 0x9b4, 0x954, 0x954, 0x884, 0x8f4, 0x8f4,
0x4ce, 0x4ce, 0x42e, 0x44e, 0x41e, 0x41e, 0xe1e, 0xe1e,
0xebe, 0xebe, 0x9be, 0x95e, 0x95e, 0x88e, 0x8fe, 0x8fe,
0x4ce, 0x4ce, 0x42e, 0x44e, 0x41e, 0xe1e, 0xe1e, 0xe1e,
0xebe, 0xebe, 0xebe, 0x95e, 0x95e, 0x88e, 0x8fe, 0x8fe,
0x0cb, 0x0cb, 0x0cb, 0x34b, 0x31b, 0xb1b, 0xb1b, 0xbbb,
0xbbb, 0xbbb, 0xbbb, 0x5bb, 0x55b, 0x5fb, 0x5fb, 0x5fb,
0x0cb, 0x0cb, 0x3cb, 0x34b, 0x31b, 0x31b, 0xb1b, 0xbbb,
0xbbb, 0xbbb, 0x5bb, 0x5bb, 0x55b, 0x5fb, 0x5fb, 0x5fb,
0x0cb, 0x3cb, 0x3cb, 0x34b, 0x31b, 0x31b, 0x31b, 0xbbb,
0xbbb, 0x5bb, 0x5bb, 0x5bb, 0x55b, 0x5fb, 0x5fb, 0x5fb,
0x0cb, 0x3cb, 0x3cb, 0x34b, 0x31b, 0x31b, 0x11b, 0x1bb,
0xbbb, 0x5bb, 0x5bb, 0x5bb, 0x55b, 0x7fb, 0x7fb, 0x7fb,
0x0c1, 0x2c1, 0x2c1, 0x341, 0x311, 0x111, 0x111, 0x1b1,
0x1b1, 0x1b1, 0x5b1, 0x5b1, 0x551, 0x7f1, 0x7f1, 0x7f1,
0xcc1, 0x2c1, 0x2c1, 0x241, 0x111, 0x111, 0x111, 0x1b1,
0x1b1, 0x1b1, 0xab1, 0x5b1, 0x551, 0x7f1, 0x7f1, 0xff1,
0xcc1, 0x2c1, 0x2c1, 0x241, 0x111, 0x111, 0x111, 0x1b1,
0x1b1, 0x1b1, 0xab1, 0xab1, 0x551, 0x7f1, 0xff1, 0xff1,
0xccc, 0x2cc, 0x2cc, 0x24c, 0x21c, 0x11c, 0x11c, 0xdbc,
0xdbc, 0xabc, 0xabc, 0xabc, 0xa5c, 0xffc, 0xffc, 0xffc,
0xccc, 0xccc, 0x2cc, 0x24c, 0x21c, 0x11c, 0x11c, 0xdbc,
0xabc, 0xabc, 0xabc, 0xabc, 0xa5c, 0xffc, 0xffc, 0xffc,
0xccc, 0xccc, 0x2cc, 0x24c, 0x21c, 0x11c, 0x11c, 0xdbc,
0xabc, 0xabc, 0xabc, 0xabc, 0xa5c, 0x8fc, 0xffc, 0xffc,
0xccc, 0x6cc, 0x6cc, 0x44c, 0x41c, 0x11c, 0x11c, 0xdbc,
0xabc, 0xabc, 0xabc, 0xabc, 0x85c, 0x8fc, 0x8fc, 0xffc,
0x6cc, 0x6cc, 0x6cc, 0x44c, 0x41c, 0x41c, 0x11c, 0xdbc,
0xebc, 0xabc, 0xabc, 0x8bc, 0x85c, 0x8fc, 0x8fc, 0x8fc,
0x6c8, 0x6c8, 0x6c8, 0x448, 0x418, 0x418, 0x418, 0xeb8,
0xeb8, 0x8b8, 0x8b8, 0x8b8, 0x858, 0x8f8, 0x8f8, 0x8f8,
0x4ce, 0x4ce, 0x4ce, 0x44e, 0x41e, 0x41e, 0x41e, 0xebe,
0xebe, 0x9be, 0x9be, 0x9be, 0x95e, 0x8fe, 0x8fe, 0x8fe,
0x4ce, 0x4ce, 0x4ce, 0x44e, 0x41e, 0x41e, 0xe1e, 0xebe,
0xebe, 0xebe, 0x9be, 0x9be, 0x95e, 0x8fe, 0x8fe, 0x8fe,
0x4ce, 0x4ce, 0x4ce, 0x44e, 0x41e, 0xe1e, 0xe1e, 0xebe,
0xebe, 0xebe, 0xebe, 0x9be, 0x95e, 0x8fe, 0x8fe, 0x8fe,
0x0cb, 0x0cb, 0x0cb, 0x3cb, 0x3bb, 0xbbb, 0xbbb, 0xbbb,
0xbbb, 0xbbb, 0xbbb, 0x5bb, 0x5fb, 0x5fb, 0x5fb, 0x5fb,
0x0cb, 0x0cb, 0x3cb, 0x3cb, 0x3bb, 0x3bb, 0xbbb, 0xbbb,
0xbbb, 0xbbb, 0x5bb, 0x5bb, 0x5fb, 0x5fb, 0x5fb, 0x5fb,
0x0cb, 0x3cb, 0x3cb, 0x3cb, 0x3bb, 0x3bb, 0x3bb, 0xbbb,
0xbbb, 0x5bb, 0x5bb, 0x5bb, 0x5fb, 0x5fb, 0x5fb, 0x5fb,
0x0cb, 0x3cb, 0x3cb, 0x3cb, 0x3bb, 0x3bb, 0x1bb, 0x1bb,
0xbbb, 0x5bb, 0x5bb, 0x5bb, 0x5fb, 0x7fb, 0x7fb, 0x7fb,
0x0cb, 0x2cb, 0x2cb, 0x3cb, 0x3bb, 0x1bb, 0x1bb, 0x1bb,
0x1bb, 0x1bb, 0x5bb, 0x5bb, 0x5fb, 0x7fb, 0x7fb, 0x7fb,
0xccc, 0x2cc, 0x2cc, 0x2cc, 0x1bc, 0x1bc, 0x1bc, 0x1bc,
0x1bc, 0x1bc, 0xabc, 0x5bc, 0x5fc, 0x7fc, 0x7fc, 0xffc,
0xccc, 0x2cc, 0x2cc, 0x2cc, 0x1bc, 0x1bc, 0x1bc, 0x1bc,
0x1bc, 0x1bc, 0xabc, 0xabc, 0x5fc, 0x7fc, 0xffc, 0xffc,
0xccc, 0x2cc, 0x2cc, 0x2cc, 0x2bc, 0x1bc, 0x1bc, 0xdbc,
0xdbc, 0xabc, 0xabc, 0xabc, 0xafc, 0xffc, 0xffc, 0xffc,
0xccc, 0xccc, 0x2cc, 0x2cc, 0x2bc, 0x1bc, 0x1bc, 0xdbc,
0xabc, 0xabc, 0xabc, 0xabc, 0xafc, 0xffc, 0xffc, 0xffc,
0xccc, 0xccc, 0x2cc, 0x2cc, 0x2bc, 0x1bc, 0x1bc, 0xdbc,
0xabc, 0xabc, 0xabc, 0xabc, 0xafc, 0x8fc, 0xffc, 0xffc,
0xccc, 0x6cc, 0x6cc, 0x4cc, 0x4bc, 0x1bc, 0x1bc, 0xdbc,
0xabc, 0xabc, 0xabc, 0xabc, 0x8fc, 0x8fc, 0x8fc, 0xffc,
0x6cc, 0x6cc, 0x6cc, 0x4cc, 0x4bc, 0x4bc, 0x1bc, 0xdbc,
0xebc, 0xabc, 0xabc, 0x8bc, 0x8fc, 0x8fc, 0x8fc, 0x8fc,
0x6ce, 0x6ce, 0x6ce, 0x4ce, 0x4be, 0x4be, 0x4be, 0xebe,
0xebe, 0x8be, 0x8be, 0x8be, 0x8fe, 0x8fe, 0x8fe, 0x8fe,
0x4ce, 0x4ce, 0x4ce, 0x4ce, 0x4be, 0x4be, 0x4be, 0xebe,
0xebe, 0x9be, 0x9be, 0x9be, 0x9fe, 0x8fe, 0x8fe, 0x8fe,
0x4ce, 0x4ce, 0x4ce, 0x4ce, 0x4be, 0x4be, 0xebe, 0xebe,
0xebe, 0xebe, 0x9be, 0x9be, 0x9fe, 0x8fe, 0x8fe, 0x8fe,
0x4ce, 0x4ce, 0x4ce, 0x4ce, 0x4be, 0xebe, 0xebe, 0xebe,
0xebe, 0xebe, 0xebe, 0x9be, 0x9fe, 0x8fe, 0x8fe, 0x8fe,
0x0cb, 0x0cb, 0x06b, 0x33b, 0x33b, 0xbbb, 0xbbb, 0xbbb,
0xbbb, 0xbbb, 0xbbb, 0x59b, 0x59b, 0x57b, 0x5fb, 0x5fb,
0x0cb, 0x0cb, 0x36b, 0x33b, 0x33b, 0x3bb, 0xbbb, 0xbbb,
0xbbb, 0xbbb, 0x5bb, 0x59b, 0x59b, 0x57b, 0x5fb, 0x5fb,
0x0c3, 0x3c3, 0x363, 0x333, 0x333, 0x3b3, 0x3b3, 0xbb3,
0xbb3, 0x5b3, 0x5b3, 0x593, 0x593, 0x573, 0x5f3, 0x5f3,
0x0c7, 0x3c7, 0x367, 0x337, 0x337, 0x3b7, 0x1b7, 0x1b7,
0xbb7, 0x5b7, 0x5b7, 0x597, 0x597, 0x777, 0x7f7, 0x7f7,
0x0c7, 0x2c7, 0x267, 0x337, 0x337, 0x1b7, 0x1b7, 0x1b7,
0x1b7, 0x1b7, 0x5b7, 0x597, 0x597, 0x777, 0x7f7, 0x7f7,
0xccc, 0x2cc, 0x26c, 0x23c, 0x13c, 0x1bc, 0x1bc, 0x1bc,
0x1bc, 0x1bc, 0xabc, 0x59c, 0x59c, 0x77c, 0x7fc, 0xffc,
0xccc, 0x2cc, 0x26c, 0x23c, 0x13c, 0x1bc, 0x1bc, 0x1bc,
0x1bc, 0x1bc, 0xabc, 0xa9c, 0x59c, 0x77c, 0xffc, 0xffc,
0xccc, 0x2cc, 0x26c, 0x23c, 0x23c, 0x1bc, 0x1bc, 0xdbc,
0xdbc, 0xabc, 0xabc, 0xa9c, 0xa9c, 0xf7c, 0xffc, 0xffc,
0xccc, 0xccc, 0x26c, 0x23c, 0x23c, 0x1bc, 0x1bc, 0xdbc,
0xabc, 0xabc, 0xabc, 0xa9c, 0xa9c, 0xf7c, 0xffc, 0xffc,
0xccc, 0xccc, 0x26c, 0x23c, 0x23c, 0x1bc, 0x1bc, 0xdbc,
0xabc, 0xabc, 0xabc, 0xa9c, 0xa9c, 0x87c, 0xffc, 0xffc,
0xccc, 0x6cc, 0x66c, 0x43c, 0x43c, 0x1bc, 0x1bc, 0xdbc,
0xabc, 0xabc, 0xabc, 0xa9c, 0x89c, 0x87c, 0x8fc, 0xffc,
0x6c6, 0x6c6, 0x666, 0x436, 0x436, 0x4b6, 0x1b6, 0xdb6,
0xeb6, 0xab6, 0xab6, 0x896, 0x896, 0x876, 0x8f6, 0x8f6,
0x6c6, 0x6c6, 0x666, 0x436, 0x436, 0x4b6, 0x4b6, 0xeb6,
0xeb6, 0x8b6, 0x8b6, 0x896, 0x896, 0x876, 0x8f6, 0x8f6,
0x4c9, 0x4c9, 0x469, 0x439, 0x439, 0x4b9, 0x4b9, 0xeb9,
0xeb9, 0x9b9, 0x9b9, 0x999, 0x999, 0x879, 0x8f9, 0x8f9,
0x4ce, 0x4ce, 0x46e, 0x43e, 0x43e, 0x4be, 0xebe, 0xebe,
0xebe, 0xebe, 0x9be, 0x99e, 0x99e, 0x87e, 0x8fe, 0x8fe,
0x4ce, 0x4ce, 0x46e, 0x43e, 0x43e, 0xebe, 0xebe, 0xebe,
0xebe, 0xebe, 0xebe, 0x99e, 0x99e, 0x87e, 0x8fe, 0x8fe,
0x0cb, 0x06b, 0x06b, 0x33b, 0x33b, 0xb3b, 0xbbb, 0xbbb,
0xbbb, 0xbbb, 0xb9b, 0x59b, 0x59b, 0x57b, 0x57b, 0x5fb,
0x0c3, 0x063, 0x363, 0x333, 0x333, 0x333, 0xbb3, 0xbb3,
0xbb3, 0xbb3, 0x593, 0x593, 0x593, 0x573, 0x573, 0x5f3,
0x0c3, 0x363, 0x363, 0x333, 0x333, 0x333, 0x3b3, 0xbb3,
0xbb3, 0x5b3, 0x593, 0x593, 0x593, 0x573, 0x573, 0x5f3,
0x0c7, 0x367, 0x367, 0x337, 0x337, 0x337, 0x1b7, 0x1b7,
0xbb7, 0x5b7, 0x597, 0x597, 0x597, 0x777, 0x777, 0x7f7,
0x0c7, 0x267, 0x267, 0x337, 0x337, 0x137, 0x1b7, 0x1b7,
0x1b7, 0x1b7, 0x597, 0x597, 0x597, 0x777, 0x777, 0x7f7,
0xcc7, 0x267, 0x267, 0x237, 0x137, 0x137, 0x1b7, 0x1b7,
0x1b7, 0x1b7, 0xa97, 0x597, 0x597, 0x777, 0x777, 0xff7,
0xccc, 0x26c, 0x26c, 0x23c, 0x13c, 0x13c, 0x1bc, 0x1bc,
0x1bc, 0x1bc, 0xa9c, 0xa9c, 0x59c, 0x77c, 0xf7c, 0xffc,
0xccc, 0x26c, 0x26c, 0x23c, 0x23c, 0x13c, 0x1bc, 0xdbc,
0xdbc, 0xabc, 0xa9c, 0xa9c, 0xa9c, 0xf7c, 0xf7c, 0xffc,
0xccc, 0xc6c, 0x26c, 0x23c, 0x23c, 0x13c, 0x1bc, 0xdbc,
0xabc, 0xabc, 0xa9c, 0xa9c, 0xa9c, 0xf7c, 0xf7c, 0xffc,
0xccc, 0xc6c, 0x26c, 0x23c, 0x23c, 0x13c, 0x1bc, 0xdbc,
0xabc, 0xabc, 0xa9c, 0xa9c, 0xa9c, 0x87c, 0xf7c, 0xffc,
0xcc6, 0x666, 0x666, 0x436, 0x436, 0x136, 0x1b6, 0xdb6,
0xab6, 0xab6, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xff6,
0x6c6, 0x666, 0x666, 0x436, 0x436, 0x436, 0x1b6, 0xdb6,
0xeb6, 0xab6, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x8f6,
0x6c6, 0x666, 0x666, 0x436, 0x436, 0x436, 0x4b6, 0xeb6,
0xeb6, 0x8b6, 0x896, 0x896, 0x896, 0x876, 0x876, 0x8f6,
0x4c9, 0x469, 0x469, 0x439, 0x439, 0x439, 0x4b9, 0xeb9,
0xeb9, 0x9b9, 0x999, 0x999, 0x999, 0x879, 0x879, 0x8f9,
0x4c9, 0x469, 0x469, 0x439, 0x439, 0x439, 0xeb9, 0xeb9,
0xeb9, 0xeb9, 0x999, 0x999, 0x999, 0x879, 0x879, 0x8f9,
0x4ce, 0x46e, 0x46e, 0x43e, 0x43e, 0xe3e, 0xebe, 0xebe,
0xebe, 0xebe, 0xe9e, 0x99e, 0x99e, 0x87e, 0x87e, 0x8fe,
0x063, 0x063, 0x063, 0x333, 0x333, 0xb33, 0xb33, 0xbb3,
0xbb3, 0xb93, 0xb93, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x063, 0x363, 0x333, 0x333, 0x333, 0xb33, 0xbb3,
0xbb3, 0xb93, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x363, 0x363, 0x333, 0x333, 0x333, 0x333, 0xbb3,
0xbb3, 0x593, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
0x067, 0x367, 0x367, 0x337, 0x337, 0x337, 0x137, 0x1b7,
0xbb7, 0x597, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
0x067, 0x267, 0x267, 0x337, 0x337, 0x137, 0x137, 0x1b7,
0x1b7, 0x197, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x137, 0x1b7,
0x1b7, 0x197, 0xa97, 0x597, 0x597, 0x777, 0x777, 0xf77,
0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x137, 0x1b7,
0x1b7, 0x197, 0xa97, 0xa97, 0x597, 0x777, 0xf77, 0xf77,
0xc6c, 0x26c, 0x26c, 0x23c, 0x23c, 0x13c, 0x13c, 0xdbc,
0xdbc, 0xa9c, 0xa9c, 0xa9c, 0xa9c, 0xf7c, 0xf7c, 0xf7c,
0xc6c, 0xc6c, 0x26c, 0x23c, 0x23c, 0x13c, 0x13c, 0xdbc,
0xabc, 0xa9c, 0xa9c, 0xa9c, 0xa9c, 0xf7c, 0xf7c, 0xf7c,
0xc66, 0xc66, 0x266, 0x236, 0x236, 0x136, 0x136, 0xdb6,
0xab6, 0xa96, 0xa96, 0xa96, 0xa96, 0x876, 0xf76, 0xf76,
0xc66, 0x666, 0x666, 0x436, 0x436, 0x136, 0x136, 0xdb6,
0xab6, 0xa96, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xf76,
0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x136, 0xdb6,
0xeb6, 0xa96, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x876,
0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x436, 0xeb6,
0xeb6, 0x896, 0x896, 0x896, 0x896, 0x876, 0x876, 0x876,
0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0x439, 0xeb9,
0xeb9, 0x999, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0xe39, 0xeb9,
0xeb9, 0xe99, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
0x469, 0x469, 0x469, 0x439, 0x439, 0xe39, 0xe39, 0xeb9,
0xeb9, 0xe99, 0xe99, 0x999, 0x999, 0x879, 0x879, 0x879,
0x063, 0x063, 0x063, 0x333, 0x333, 0xb33, 0xb33, 0xbd3,
0xb93, 0xb93, 0xb93, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x063, 0x363, 0x333, 0x333, 0x333, 0xb33, 0xbd3,
0xb93, 0xb93, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x363, 0x363, 0x333, 0x333, 0x333, 0x333, 0xbd3,
0xb93, 0x593, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
0x067, 0x367, 0x367, 0x337, 0x337, 0x337, 0x137, 0x1d7,
0xb97, 0x597, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
0x067, 0x267, 0x267, 0x337, 0x337, 0x137, 0x137, 0x1d7,
0x197, 0x197, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x137, 0x1d7,
0x197, 0x197, 0xa97, 0x597, 0x597, 0x777, 0x777, 0xf77,
0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x137, 0x1d7,
0x197, 0x197, 0xa97, 0xa97, 0x597, 0x777, 0xf77, 0xf77,
0xc6d, 0x26d, 0x26d, 0x23d, 0x23d, 0x13d, 0x13d, 0xddd,
0xd9d, 0xa9d, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
0xc66, 0xc66, 0x266, 0x236, 0x236, 0x136, 0x136, 0xdd6,
0xa96, 0xa96, 0xa96, 0xa96, 0xa96, 0xf76, 0xf76, 0xf76,
0xc66, 0xc66, 0x266, 0x236, 0x236, 0x136, 0x136, 0xdd6,
0xa96, 0xa96, 0xa96, 0xa96, 0xa96, 0x876, 0xf76, 0xf76,
0xc66, 0x666, 0x666, 0x436, 0x436, 0x136, 0x136, 0xdd6,
0xa96, 0xa96, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xf76,
0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x136, 0xdd6,
0xe96, 0xa96, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x876,
0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x436, 0xed6,
0xe96, 0x896, 0x896, 0x896, 0x896, 0x876, 0x876, 0x876,
0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0x439, 0xed9,
0xe99, 0x999, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0xe39, 0xed9,
0xe99, 0xe99, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
0x469, 0x469, 0x469, 0x439, 0x439, 0xe39, 0xe39, 0xed9,
0xe99, 0xe99, 0xe99, 0x999, 0x999, 0x879, 0x879, 0x879,
0x063, 0x063, 0x063, 0x333, 0x333, 0xb33, 0xbd3, 0xbd3,
0xbd3, 0xb93, 0xb93, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x063, 0x363, 0x333, 0x333, 0x333, 0xbd3, 0xbd3,
0xbd3, 0xb93, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x363, 0x363, 0x333, 0x333, 0x333, 0x3d3, 0xbd3,
0xbd3, 0x593, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
0x067, 0x367, 0x367, 0x337, 0x337, 0x337, 0x1d7, 0x1d7,
0xbd7, 0x597, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
0x067, 0x267, 0x267, 0x337, 0x337, 0x137, 0x1d7, 0x1d7,
0x1d7, 0x197, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
0xc67, 0x267, 0x267, 0x237, 0x137, 0x137, 0x1d7, 0x1d7,
0x1d7, 0x197, 0xa97, 0x597, 0x597, 0x777, 0x777, 0xf77,
0xc6d, 0x26d, 0x26d, 0x23d, 0x13d, 0x13d, 0x1dd, 0x1dd,
0x1dd, 0x19d, 0xa9d, 0xa9d, 0x59d, 0x77d, 0xf7d, 0xf7d,
0xc6d, 0x26d, 0x26d, 0x23d, 0x23d, 0x13d, 0x1dd, 0xddd,
0xddd, 0xa9d, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
0xc6d, 0xc6d, 0x26d, 0x23d, 0x23d, 0x13d, 0x1dd, 0xddd,
0xadd, 0xa9d, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
0xc66, 0xc66, 0x266, 0x236, 0x236, 0x136, 0x1d6, 0xdd6,
0xad6, 0xa96, 0xa96, 0xa96, 0xa96, 0x876, 0xf76, 0xf76,
0xc66, 0x666, 0x666, 0x436, 0x436, 0x136, 0x1d6, 0xdd6,
0xad6, 0xa96, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xf76,
0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x1d6, 0xdd6,
0xed6, 0xa96, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x876,
0x666, 0x666, 0x666, 0x436, 0x436, 0x436, 0x4d6, 0xed6,
0xed6, 0x896, 0x896, 0x896, 0x896, 0x876, 0x876, 0x876,
0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0x4d9, 0xed9,
0xed9, 0x999, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
0x469, 0x469, 0x469, 0x439, 0x439, 0x439, 0xed9, 0xed9,
0xed9, 0xe99, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
0x469, 0x469, 0x469, 0x439, 0x439, 0xe39, 0xed9, 0xed9,
0xed9, 0xe99, 0xe99, 0x999, 0x999, 0x879, 0x879, 0x879,
0x063, 0x063, 0x063, 0x333, 0x333, 0xbd3, 0xbd3, 0xbd3,
0xbd3, 0xbd3, 0xb93, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x063, 0x363, 0x333, 0x333, 0x3d3, 0xbd3, 0xbd3,
0xbd3, 0xbd3, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x363, 0x363, 0x333, 0x333, 0x3d3, 0x3d3, 0xbd3,
0xbd3, 0x5d3, 0x593, 0x593, 0x593, 0x573, 0x573, 0x573,
0x067, 0x367, 0x367, 0x337, 0x337, 0x3d7, 0x1d7, 0x1d7,
0xbd7, 0x5d7, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
0x067, 0x267, 0x267, 0x337, 0x337, 0x1d7, 0x1d7, 0x1d7,
0x1d7, 0x1d7, 0x597, 0x597, 0x597, 0x777, 0x777, 0x777,
0xc6d, 0x26d, 0x26d, 0x23d, 0x13d, 0x1dd, 0x1dd, 0x1dd,
0x1dd, 0x1dd, 0xa9d, 0x59d, 0x59d, 0x77d, 0x77d, 0xf7d,
0xc6d, 0x26d, 0x26d, 0x23d, 0x13d, 0x1dd, 0x1dd, 0x1dd,
0x1dd, 0x1dd, 0xa9d, 0xa9d, 0x59d, 0x77d, 0xf7d, 0xf7d,
0xc6d, 0x26d, 0x26d, 0x23d, 0x23d, 0x1dd, 0x1dd, 0xddd,
0xddd, 0xadd, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
0xc6d, 0xc6d, 0x26d, 0x23d, 0x23d, 0x1dd, 0x1dd, 0xddd,
0xadd, 0xadd, 0xa9d, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
0xc6d, 0xc6d, 0x26d, 0x23d, 0x23d, 0x1dd, 0x1dd, 0xddd,
0xadd, 0xadd, 0xa9d, 0xa9d, 0xa9d, 0x87d, 0xf7d, 0xf7d,
0xc66, 0x666, 0x666, 0x436, 0x436, 0x1d6, 0x1d6, 0xdd6,
0xad6, 0xad6, 0xa96, 0xa96, 0x896, 0x876, 0x876, 0xf76,
0x666, 0x666, 0x666, 0x436, 0x436, 0x4d6, 0x1d6, 0xdd6,
0xed6, 0xad6, 0xa96, 0x896, 0x896, 0x876, 0x876, 0x876,
0x666, 0x666, 0x666, 0x436, 0x436, 0x4d6, 0x4d6, 0xed6,
0xed6, 0x8d6, 0x896, 0x896, 0x896, 0x876, 0x876, 0x876,
0x469, 0x469, 0x469, 0x439, 0x439, 0x4d9, 0x4d9, 0xed9,
0xed9, 0x9d9, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
0x469, 0x469, 0x469, 0x439, 0x439, 0x4d9, 0xed9, 0xed9,
0xed9, 0xed9, 0x999, 0x999, 0x999, 0x879, 0x879, 0x879,
0x469, 0x469, 0x469, 0x439, 0x439, 0xed9, 0xed9, 0xed9,
0xed9, 0xed9, 0xe99, 0x999, 0x999, 0x879, 0x879, 0x879,
0x063, 0x063, 0x063, 0x333, 0x3d3, 0xbd3, 0xbd3, 0xbd3,
0xbd3, 0xbd3, 0xbd3, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x063, 0x363, 0x333, 0x3d3, 0x3d3, 0xbd3, 0xbd3,
0xbd3, 0xbd3, 0x5d3, 0x593, 0x593, 0x573, 0x573, 0x573,
0x063, 0x363, 0x363, 0x333, 0x3d3, 0x3d3, 0x3d3, 0xbd3,
0xbd3, 0x5d3, 0x5d3, 0x593, 0x593, 0x573, 0x573, 0x573,
0x067, 0x367, 0x367, 0x337, 0x3d7, 0x3d7, 0x1d7, 0x1d7,
0xbd7, 0x5d7, 0x5d7, 0x597, 0x597, 0x777, 0x777, 0x777,
0x06d, 0x26d, 0x26d, 0x33d, 0x3dd, 0x1dd, 0x1dd, 0x1dd,
0x1dd, 0x1dd, 0x5dd, 0x59d, 0x59d, 0x77d, 0x77d, 0x77d,
0xc6d, 0x26d, 0x26d, 0x23d, 0x1dd, 0x1dd, 0x1dd, 0x1dd,
0x1dd, 0x1dd, 0xadd, 0x59d, 0x59d, 0x77d, 0x77d, 0xf7d,
0xc6d, 0x26d, 0x26d, 0x23d, 0x1dd, 0x1dd, 0x1dd, 0x1dd,
0x1dd, 0x1dd, 0xadd, 0xa9d, 0x59d, 0x77d, 0xf7d, 0xf7d,
0xc6d, 0x26d, 0x26d, 0x23d, 0x2dd, 0x1dd, 0x1dd, 0xddd,
0xddd, 0xadd, 0xadd, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
0xc6d, 0xc6d, 0x26d, 0x23d, 0x2dd, 0x1dd, 0x1dd, 0xddd,
0xadd, 0xadd, 0xadd, 0xa9d, 0xa9d, 0xf7d, 0xf7d, 0xf7d,
0xc6d, 0xc6d, 0x26d, 0x23d, 0x2dd, 0x1dd, 0x1dd, 0xddd,
0xadd, 0xadd, 0xadd, 0xa9d, 0xa9d, 0x87d, 0xf7d, 0xf7d,
0xc6d, 0x66d, 0x66d, 0x43d, 0x4dd, 0x1dd, 0x1dd, 0xddd,
0xadd, 0xadd, 0xadd, 0xa9d, 0x89d, 0x87d, 0x87d, 0xf7d,
0x666, 0x666, 0x666, 0x436, 0x4d6, 0x4d6, 0x1d6, 0xdd6,
0xed6, 0xad6, 0xad6, 0x896, 0x896, 0x876, 0x876, 0x876,
0x666, 0x666, 0x666, 0x436, 0x4d6, 0x4d6, 0x4d6, 0xed6,
0xed6, 0x8d6, 0x8d6, 0x896, 0x896, 0x876, 0x876, 0x876,
0x469, 0x469, 0x469, 0x439, 0x4d9, 0x4d9, 0x4d