URL
https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk
Subversion Repositories openrisc_me
Compare Revisions
- This comparison shows the changes necessary to convert path
/openrisc/trunk/rtos/ecos-2.0/packages/services/gfx/mw/v2_0/src/mwin
- from Rev 27 to Rev 174
- ↔ Reverse comparison
Rev 27 → Rev 174
/winevent.c
0,0 → 1,591
/* |
* Copyright (c) 1999, 2000 Greg Haerr <greg@censoft.com> |
* Copyright (c) 1991 David I. Bell |
* Permission is granted to use, distribute, or modify this source, |
* provided that this copyright notice remains intact. |
* |
* Graphics server event routines for windows. |
*/ |
#include "windows.h" |
#include "wintern.h" |
#include "device.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
|
#if !(DOS_TURBOC | DOS_QUICKC | _MINIX | VXWORKS) |
static int |
abs(int n) |
{ |
return n >= 0? n: -n; |
} |
#endif |
|
/* |
* Update mouse status and issue events on it if necessary. |
* This function doesn't block, but is normally only called when |
* there is known to be some data waiting to be read from the mouse. |
*/ |
BOOL |
MwCheckMouseEvent(void) |
{ |
MWCOORD rootx; /* latest mouse x position */ |
MWCOORD rooty; /* latest mouse y position */ |
int newbuttons; /* latest buttons */ |
int mousestatus; /* latest mouse status */ |
|
/* Read the latest mouse status: */ |
mousestatus = GdReadMouse(&rootx, &rooty, &newbuttons); |
if(mousestatus < 0) { |
/*MwError(GR_ERROR_MOUSE_ERROR, 0);*/ |
return FALSE; |
} else if(mousestatus) { /* Deliver events as appropriate: */ |
MwHandleMouseStatus(rootx, rooty, newbuttons); |
return TRUE; |
} |
return FALSE; |
} |
|
/* |
* Update keyboard status and issue events on it if necessary. |
* This function doesn't block, but is normally only called when |
* there is known to be some data waiting to be read from the keyboard. |
*/ |
BOOL |
MwCheckKeyboardEvent(void) |
{ |
MWKEY mwkey; /* latest character */ |
MWKEYMOD modifiers; /* latest modifiers */ |
MWSCANCODE scancode; |
int keystatus; /* latest keyboard status */ |
|
/* Read the latest keyboard status: */ |
keystatus = GdReadKeyboard(&mwkey, &modifiers, &scancode); |
if(keystatus < 0) { |
if(keystatus == -2) /* special case for ESC pressed*/ |
MwTerminate(); |
/*MwError(GR_ERROR_KEYBOARD_ERROR, 0);*/ |
return FALSE; |
} else if(keystatus) { /* Deliver events as appropriate: */ |
switch (mwkey) { |
case MWKEY_QUIT: |
MwTerminate(); |
/* no return*/ |
case MWKEY_REDRAW: |
MwRedrawScreen(); |
break; |
case MWKEY_PRINT: |
if (keystatus == 1) |
GdCaptureScreen("screen.bmp"); |
break; |
} |
MwDeliverKeyboardEvent(mwkey, modifiers, scancode, |
keystatus==1? TRUE: FALSE); |
return TRUE; |
} |
return FALSE; |
} |
|
/* |
* Handle all mouse events. These are mouse enter, mouse exit, mouse |
* motion, mouse position, button down, and button up. This also moves |
* the cursor to the new mouse position and changes it shape if needed. |
*/ |
void |
MwHandleMouseStatus(MWCOORD newx, MWCOORD newy, int newbuttons) |
{ |
int changebuttons; /* buttons that have changed */ |
MWKEYMOD modifiers; /* latest modifiers */ |
static int curbuttons; |
|
GdGetModifierInfo(NULL, &modifiers); /* Read kbd modifiers */ |
|
/* |
* First, if the mouse has moved, then position the cursor to the |
* new location, which will send mouse enter, mouse exit, focus in, |
* and focus out events if needed. Check here for mouse motion and |
* mouse position events. |
*/ |
if (newx != cursorx || newy != cursory) { |
MwMoveCursor(newx, newy); |
MwDeliverMouseEvent(newbuttons, 0, modifiers); |
} |
|
/* |
* Next, generate a button up event if any buttons have been released. |
*/ |
changebuttons = (curbuttons & ~newbuttons); |
if (changebuttons) |
MwDeliverMouseEvent(newbuttons, changebuttons, modifiers); |
|
/* |
* Finally, generate a button down event if any buttons have been |
* pressed. |
*/ |
changebuttons = (~curbuttons & newbuttons); |
if (changebuttons) |
MwDeliverMouseEvent(newbuttons, changebuttons, modifiers); |
|
curbuttons = newbuttons; |
} |
|
/* |
* Translate and deliver hardware mouse message to proper window. |
*/ |
void |
MwTranslateMouseMessage(HWND hwnd,UINT msg,int hittest) |
{ |
POINT pt; |
DWORD tick; |
static UINT lastmsg = 0; |
static HWND lasthwnd; |
static DWORD lasttick; |
static int lastx, lasty; |
|
/* determine double click eligibility*/ |
if(msg == WM_LBUTTONDOWN || msg == WM_RBUTTONDOWN) { |
tick = GetTickCount(); |
if((hwnd->pClass->style & CS_DBLCLKS) && |
msg == lastmsg && hwnd == lasthwnd && |
tick - lasttick < DBLCLICKSPEED && |
abs(cursorx-lastx) < mwSYSMETRICS_CXDOUBLECLK && |
abs(cursory-lasty) < mwSYSMETRICS_CYDOUBLECLK) |
msg += (WM_LBUTTONDBLCLK - WM_LBUTTONDOWN); |
lastmsg = msg; |
lasthwnd = hwnd; |
lasttick = tick; |
lastx = cursorx; |
lasty = cursory; |
} |
|
/* |
* We always send nc mouse message |
* unlike Windows, for HTCLIENT default processing |
*/ |
PostMessage(hwnd, msg + (WM_NCMOUSEMOVE-WM_MOUSEMOVE), hittest, |
MAKELONG(cursorx, cursory)); |
|
/* then possibly send user mouse message*/ |
if(hittest == HTCLIENT) { |
pt.x = cursorx; |
pt.y = cursory; |
ScreenToClient(hwnd, &pt); |
PostMessage(hwnd, msg, 0, MAKELONG(pt.x, pt.y)); |
} |
} |
|
/* |
* Deliver a mouse button or motion event. |
*/ |
int mwCurrentButtons; |
|
void |
MwDeliverMouseEvent(int buttons, int changebuttons, MWKEYMOD modifiers) |
{ |
HWND hwnd; |
int hittest; |
UINT msg; |
|
mwCurrentButtons = buttons; |
|
hwnd = GetCapture(); |
if(!hwnd) |
hwnd = mousewp; |
hittest = SendMessage(hwnd, WM_NCHITTEST, 0, MAKELONG(cursorx,cursory)); |
|
if(!changebuttons) |
MwTranslateMouseMessage(hwnd, WM_MOUSEMOVE, hittest); |
|
if(changebuttons & MWBUTTON_L) { |
msg = (buttons&MWBUTTON_L)? WM_LBUTTONDOWN: WM_LBUTTONUP; |
MwTranslateMouseMessage(hwnd, msg, hittest); |
} |
|
if(changebuttons & MWBUTTON_M) { |
msg = (buttons&MWBUTTON_M)? WM_MBUTTONDOWN: WM_MBUTTONUP; |
MwTranslateMouseMessage(hwnd, msg, hittest); |
} |
|
if(changebuttons & MWBUTTON_R) { |
msg = (buttons&MWBUTTON_R)? WM_RBUTTONDOWN: WM_RBUTTONUP; |
MwTranslateMouseMessage(hwnd, msg, hittest); |
} |
} |
|
/* |
* Deliver a keyboard event. |
*/ |
void |
MwDeliverKeyboardEvent(MWKEY keyvalue, MWKEYMOD modifiers, MWSCANCODE scancode, |
BOOL pressed) |
{ |
WPARAM VK_Code = keyvalue; /* default no translation*/ |
|
/* Keysyms from 1-255 are mapped to ASCII*/ |
if (keyvalue < 1 || keyvalue > 255) |
switch(keyvalue) { |
|
/* arrows + home/end pad*/ |
case MWKEY_LEFT: |
VK_Code = VK_LEFT; |
break; |
case MWKEY_RIGHT: |
VK_Code = VK_RIGHT; |
break; |
case MWKEY_UP: |
VK_Code = VK_UP; |
break; |
case MWKEY_DOWN: |
VK_Code = VK_DOWN; |
break; |
case MWKEY_INSERT: |
VK_Code = VK_INSERT; |
break; |
case MWKEY_DELETE: |
VK_Code = VK_DELETE; |
break; |
case MWKEY_HOME: |
VK_Code = VK_HOME; |
break; |
case MWKEY_END: |
VK_Code = VK_END; |
break; |
case MWKEY_PAGEUP: |
VK_Code = VK_PRIOR; |
break; |
case MWKEY_PAGEDOWN: |
VK_Code = VK_NEXT; |
break; |
|
/* Numeric keypad*/ |
case MWKEY_KP0: |
VK_Code = VK_NUMPAD0; |
break; |
case MWKEY_KP1: |
VK_Code = VK_NUMPAD1; |
break; |
case MWKEY_KP2: |
VK_Code = VK_NUMPAD2; |
break; |
case MWKEY_KP3: |
VK_Code = VK_NUMPAD3; |
break; |
case MWKEY_KP4: |
VK_Code = VK_NUMPAD4; |
break; |
case MWKEY_KP5: |
VK_Code = VK_NUMPAD5; |
break; |
case MWKEY_KP6: |
VK_Code = VK_NUMPAD6; |
break; |
case MWKEY_KP7: |
VK_Code = VK_NUMPAD7; |
break; |
case MWKEY_KP8: |
VK_Code = VK_NUMPAD8; |
break; |
case MWKEY_KP9: |
VK_Code = VK_NUMPAD9; |
break; |
case MWKEY_KP_PERIOD: |
VK_Code = VK_DECIMAL; |
break; |
case MWKEY_KP_DIVIDE: |
VK_Code = VK_DIVIDE; |
break; |
case MWKEY_KP_MULTIPLY: |
VK_Code = VK_MULTIPLY; |
break; |
case MWKEY_KP_MINUS: |
VK_Code = VK_SUBTRACT; |
break; |
case MWKEY_KP_PLUS: |
VK_Code = VK_ADD; |
break; |
case MWKEY_KP_ENTER: |
VK_Code = VK_RETURN; |
break; |
|
/* Function keys */ |
case MWKEY_F1: |
VK_Code = VK_F1; |
break; |
case MWKEY_F2: |
VK_Code = VK_F2; |
break; |
case MWKEY_F3: |
VK_Code = VK_F3; |
break; |
case MWKEY_F4: |
VK_Code = VK_F4; |
break; |
case MWKEY_F5: |
VK_Code = VK_F5; |
break; |
case MWKEY_F6: |
VK_Code = VK_F6; |
break; |
case MWKEY_F7: |
VK_Code = VK_F7; |
break; |
case MWKEY_F8: |
VK_Code = VK_F8; |
break; |
case MWKEY_F9: |
VK_Code = VK_F9; |
break; |
case MWKEY_F10: |
VK_Code = VK_F10; |
break; |
case MWKEY_F11: |
VK_Code = VK_F11; |
break; |
case MWKEY_F12: |
VK_Code = VK_F12; |
break; |
|
/* Key state modifier keys*/ |
case MWKEY_NUMLOCK: |
VK_Code = VK_NUMLOCK; |
break; |
case MWKEY_CAPSLOCK: |
VK_Code = VK_CAPITAL; |
break; |
case MWKEY_SCROLLOCK: |
VK_Code = VK_CAPITAL; |
break; |
case MWKEY_LSHIFT: |
VK_Code = VK_LSHIFT; |
break; |
case MWKEY_RSHIFT: |
VK_Code = VK_RSHIFT; |
break; |
case MWKEY_LCTRL: |
VK_Code = VK_LCONTROL; |
break; |
case MWKEY_RCTRL: |
VK_Code = VK_RCONTROL; |
break; |
case MWKEY_LALT: |
VK_Code = VK_MENU; |
break; |
case MWKEY_RALT: |
VK_Code = VK_MENU; |
break; |
|
/* Misc function keys*/ |
case MWKEY_PRINT: |
VK_Code = VK_PRINT; |
break; |
case MWKEY_PAUSE: |
VK_Code = VK_PAUSE; |
break; |
case MWKEY_MENU: |
VK_Code = VK_LMENU; /* virtual key*/ |
break; |
|
/* questionable mappings or no mappings...*/ |
case MWKEY_KP_EQUALS: |
VK_Code = '='; /* FIXME*/ |
break; |
|
/* map all non-handled MWKEY values to VK_NONAME*/ |
#if 0 |
case MWKEY_UNKNOWN: |
case MWKEY_SYSREQ: |
case MWKEY_BREAK |
case MWKEY_QUIT: |
case MWKEY_REDRAW: |
case MWKEY_LMETA: |
case MWKEY_RMETA: |
case MWKEY_ALTGR: |
/* Handheld function keys*/ |
case MWKEY_RECORD: |
case MWKEY_PLAY: |
case MWKEY_CONTRAST: |
case MWKEY_BRIGHTNESS: |
case MWKEY_SELECTUP: |
case MWKEY_SELECTDOWN: |
case MWKEY_ACCEPT: |
case MWKEY_CANCEL: |
case MWKEY_APP1: |
case MWKEY_APP2: |
case MWKEY_LAST: |
#endif |
default: |
VK_Code = VK_NONAME; |
break; |
} |
|
if (pressed) |
SendMessage(focuswp, WM_CHAR, VK_Code, 0L); |
} |
|
/* |
* Deliver a window expose event. |
* Most of the work is in calculating the update region |
* for better redraw look and feel, and then queuing a |
* WM_PAINT message to the window. |
*/ |
void |
MwDeliverExposureEvent(HWND wp, MWCOORD x, MWCOORD y, MWCOORD width, |
MWCOORD height) |
{ |
if (wp->unmapcount) |
return; |
|
MwUnionUpdateRegion(wp, x, y, width, height, TRUE); |
PostMessage(wp, WM_PAINT, 0, 0L); |
} |
|
/* |
* Combine the passed rectangle with the update region for the given window. |
* Coordinates are passed relative to window. |
* If bUnion is TRUE, union the rectangle, otherwise subtract it. |
*/ |
void |
MwUnionUpdateRegion(HWND wp, MWCOORD x, MWCOORD y, MWCOORD width, |
MWCOORD height, BOOL bUnion) |
{ |
#if UPDATEREGIONS |
MWRECT rc; |
|
if (wp->unmapcount) |
return; |
|
/* convert window relative coords to screen coords*/ |
rc.left = x + wp->winrect.left; |
rc.top = y + wp->winrect.top; |
rc.right = rc.left + width; |
rc.bottom = rc.top + height; |
|
if(bUnion) |
GdUnionRectWithRegion(&rc, wp->update); |
else |
GdSubtractRectFromRegion(&rc, wp->update); |
#endif |
} |
|
/* |
* Move the cursor to the specified absolute screen coordinates. |
* The coordinates are that of the defined hot spot of the cursor. |
* The cursor's appearance is changed to that defined for the window |
* in which the cursor is moved to. In addition, the window the |
* cursor is in is recalculated. |
*/ |
void MwMoveCursor(MWCOORD x, MWCOORD y) |
{ |
/* |
* Move the cursor only if necessary, offsetting it to |
* place the hot spot at the specified coordinates. |
*/ |
if (x != cursorx || y != cursory) { |
if(curcursor) |
GdMoveCursor(x - curcursor->cursor.hotx, |
y - curcursor->cursor.hoty); |
cursorx = x; |
cursory = y; |
} |
|
/* |
* Now check to see which window the mouse is in and whether or |
* not the cursor shape should be changed. |
*/ |
MwCheckMouseWindow(); |
MwCheckCursor(); |
} |
|
/* |
* Check to see if the cursor shape is the correct shape for its current |
* location. If not, its shape is changed. |
*/ |
void MwCheckCursor(void) |
{ |
HWND wp; /* window cursor is in */ |
HCURSOR cp; /* cursor definition */ |
|
/* |
* Get the cursor at its current position, and if it is not the |
* currently defined one, then set the new cursor. However, |
* if the window is currently captured, then leave it alone. |
*/ |
wp = capturewp; |
if (wp == NULL) |
wp = mousewp; |
|
cp = wp->cursor; |
if (cp == curcursor) |
return; |
|
/* |
* It needs redefining, so do it. |
*/ |
curcursor = cp; |
GdMoveCursor(cursorx - cp->cursor.hotx, cursory - cp->cursor.hoty); |
GdSetCursor(&cp->cursor); |
} |
|
/* |
* Find the window which is currently visible for the specified coordinates. |
* This just walks down the window tree looking for the deepest mapped |
* window which contains the specified point. If the coordinates are |
* off the screen, the root window is returned. |
*/ |
HWND |
MwFindVisibleWindow(MWCOORD x, MWCOORD y) |
{ |
HWND wp; /* current window */ |
HWND retwp; /* returned window */ |
|
wp = rootwp; |
retwp = wp; |
while (wp) { |
if (!wp->unmapcount && |
wp->winrect.left <= x && wp->winrect.top <= y && |
wp->winrect.right > x && wp->winrect.bottom > y) { |
retwp = wp; |
wp = wp->children; |
continue; |
} |
wp = wp->siblings; |
} |
return retwp; |
} |
|
/* |
* Check to see if the window the mouse is currently in has changed. |
*/ |
void MwCheckMouseWindow(void) |
{ |
HWND wp; |
|
/* Don't change if window drag or capture in progress*/ |
wp = dragwp; |
if(!wp) |
wp = capturewp; |
if(!wp) |
wp = MwFindVisibleWindow(cursorx, cursory); |
mousewp = wp; |
} |
|
/* |
* Copy dstsiz bytes, including nul, from src to dst. |
* Return # bytes, excluding nul, copied. |
*/ |
int |
strzcpy(char *dst,const char *src,int dstsiz) |
{ |
int cc = dstsiz; |
|
/* return 0 on NULL src*/ |
if(!src) |
cc = dstsiz = 1; |
|
while(--dstsiz > 0) { |
if((*dst++ = *src++) == '\0') |
return cc - dstsiz - 1; |
} |
*dst = 0; |
return cc - dstsiz - 1; |
} |
/winmain.c
0,0 → 1,558
/* |
* Copyright (c) 1999, 2000 Greg Haerr <greg@censoft.com> |
* |
* Main module of Microwindows |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include <signal.h> |
|
#ifndef __PACIFIC__ |
#include <errno.h> |
#include <sys/types.h> |
#endif |
|
#if UNIX | DOS_DJGPP |
#include <unistd.h> |
#if _MINIX |
#include <sys/times.h> |
#else |
#include <sys/time.h> |
#endif |
#endif |
|
#if ELKS |
#include <linuxmt/posix_types.h> |
#include <linuxmt/time.h> |
#endif |
|
#include "windows.h" |
#include "wintern.h" |
#include "device.h" |
/* |
* External definitions defined here. |
*/ |
HWND listwp; /* list of all windows */ |
HWND rootwp; /* root window pointer */ |
HWND focuswp; /* focus window for keyboard */ |
HWND mousewp; /* window mouse is currently in */ |
HWND capturewp; /* capture window*/ |
HWND dragwp; /* window user is dragging*/ |
HCURSOR curcursor; /* currently enabled cursor */ |
MWCOORD cursorx; /* current x position of cursor */ |
MWCOORD cursory; /* current y position of cursor */ |
DWORD startTicks; /* tickcount on startup */ |
int keyb_fd; /* the keyboard file descriptor */ |
int mouse_fd; /* the mouse file descriptor */ |
int escape_quits = 1; /* terminate when pressing ESC */ |
|
int |
main(int ac,char **av) |
{ |
/* call user hook routine before anything*/ |
if(MwUserInit(ac, av) < 0) |
exit(1); |
|
if(MwOpen() < 0) |
exit(1); |
|
/* call windows main program entry point*/ |
WinMain(NULL, NULL, NULL, SW_SHOW); |
|
MwClose(); |
return 0; |
} |
|
/* |
* Open a connection from a new client to the server. |
* Returns -1 on failure. |
*/ |
int |
MwOpen(void) |
{ |
/* Client calls this routine once. We |
* init everything here |
*/ |
if(MwInitialize() < 0) |
return -1; |
return 1; |
} |
|
/* |
* Close the connection to the server. |
*/ |
void |
MwClose(void) |
{ |
MwTerminate(); |
} |
|
#if (UNIX | DOS_DJGPP) && !_MINIX |
/* |
* Support for more than one user fd. |
* Chris Johns (ccj@acm.org) |
* |
* Register the specified file descriptor to post |
* WM_FDINPUT/WM_FDOUTPUT/WM_FDEXCEPT to the passed hwnd |
* when input/output/except is ready. |
* |
* Allow for any fd to be selected on. |
* |
* The user fd's are listed and scanned helping keep the |
* overhead down for a large list of fd's being selected on. |
*/ |
|
typedef struct { |
HWND read; |
HWND write; |
HWND except; |
int next; |
} WNDUSERFD; |
|
static WNDUSERFD userregfd[FD_SETSIZE]; |
static int userregfd_head; |
|
void |
MwRegisterFdInput(HWND hwnd, int fd) |
{ |
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) { |
if (!userregfd[fd].read) { |
userregfd[fd].read = hwnd; |
if (userregfd[fd].next == -1 && !userregfd[fd].write && !userregfd[fd].except) { |
userregfd[fd].next = userregfd_head; |
userregfd_head = fd; |
} |
} |
} |
} |
|
void |
MwUnregisterFdInput(HWND hwnd, int fd) |
{ |
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) { |
if (userregfd[fd].read == hwnd) { |
userregfd[fd].read = NULL; |
if (!userregfd[fd].write && !userregfd[fd].except) { |
int *listfd = &userregfd_head; |
while (*listfd != -1) { |
if (*listfd == fd) { |
*listfd = userregfd[fd].next; |
userregfd[fd].next = -1; |
return; |
} |
listfd = &userregfd[*listfd].next; |
} |
userregfd_head = fd; |
} |
} |
} |
} |
|
void |
MwRegisterFdOutput(HWND hwnd, int fd) |
{ |
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) { |
if (!userregfd[fd].write) { |
userregfd[fd].write = hwnd; |
if (userregfd[fd].next == -1 && !userregfd[fd].read && !userregfd[fd].except) { |
userregfd[fd].next = userregfd_head; |
userregfd_head = fd; |
} |
} |
} |
} |
|
void |
MwUnregisterFdOutput(HWND hwnd, int fd) |
{ |
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) { |
if (userregfd[fd].write == hwnd) { |
userregfd[fd].write = NULL; |
if (!userregfd[fd].read && !userregfd[fd].except) { |
int *listfd = &userregfd_head; |
while (*listfd != -1) { |
if (*listfd == fd) { |
*listfd = userregfd[fd].next; |
userregfd[fd].next = -1; |
return; |
} |
listfd = &userregfd[*listfd].next; |
} |
userregfd_head = fd; |
} |
} |
} |
} |
|
void |
MwRegisterFdExcept(HWND hwnd, int fd) |
{ |
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) { |
if (!userregfd[fd].except) { |
userregfd[fd].except = hwnd; |
if (userregfd[fd].next == -1 && !userregfd[fd].read && !userregfd[fd].write) { |
userregfd[fd].next = userregfd_head; |
userregfd_head = fd; |
} |
} |
} |
} |
|
void |
MwUnregisterFdExcept(HWND hwnd, int fd) |
{ |
if (fd < FD_SETSIZE && fd != mouse_fd && fd != keyb_fd) { |
if (userregfd[fd].except == hwnd) { |
userregfd[fd].except = NULL; |
if (!userregfd[fd].read && !userregfd[fd].write) { |
int *listfd = &userregfd_head; |
while (*listfd != -1) { |
if (*listfd == fd) { |
*listfd = userregfd[fd].next; |
userregfd[fd].next = -1; |
return; |
} |
listfd = &userregfd[*listfd].next; |
} |
userregfd_head = fd; |
} |
} |
} |
} |
|
#endif /* UNIX | DOS_DJGPP*/ |
|
#if MSDOS | _MINIX |
void |
MwSelect(void) |
{ |
/* If mouse data present, service it*/ |
if(mousedev.Poll()) |
while(MwCheckMouseEvent()) |
continue; |
|
/* If keyboard data present, service it*/ |
if(kbddev.Poll()) |
while(MwCheckKeyboardEvent()) |
continue; |
|
MwHandleTimers(); |
} |
#endif |
|
#if UNIX && defined(HAVESELECT) |
#if ANIMATEPALETTE |
static int fade = 0; |
#endif |
|
void |
MwSelect(void) |
{ |
fd_set rfds; |
fd_set wfds; |
fd_set efds; |
int fd; |
int e; |
int setsize = 0; |
UINT timeout; |
struct timeval to; |
|
/* perform pre-select duties, if any*/ |
if(scrdev.PreSelect) |
scrdev.PreSelect(&scrdev); |
|
/* Set up the FDs for use in the main select(): */ |
FD_ZERO(&rfds); |
FD_ZERO(&wfds); |
FD_ZERO(&efds); |
|
if(mouse_fd >= 0) { |
FD_SET(mouse_fd, &rfds); |
if(mouse_fd > setsize) |
setsize = mouse_fd; |
} |
if(keyb_fd >= 0) { |
FD_SET(keyb_fd, &rfds); |
if(keyb_fd > setsize) |
setsize = keyb_fd; |
} |
|
/* handle registered file descriptors */ |
fd = userregfd_head; |
while (fd != -1) { |
if (userregfd[fd].read) FD_SET(fd, &rfds); |
if (userregfd[fd].write) FD_SET(fd, &wfds); |
if (userregfd[fd].except) FD_SET(fd, &efds); |
if(fd > setsize) setsize = fd; |
fd = userregfd[fd].next; |
} |
|
++setsize; |
|
/* Set up the timeout for the main select(). If |
* the mouse is captured we're probably moving a window, |
* so poll quickly to allow other windows to repaint while |
* checking for more event input. |
*/ |
if(dragwp) |
timeout = to.tv_sec = to.tv_usec = 0L; |
else { |
timeout = MwGetNextTimeoutValue(); /* returns ms*/ |
#if ANIMATEPALETTE |
if(fade < 100) |
timeout = 40; |
#endif |
if (!timeout) timeout = 10; /* temp kluge required for mdemo to run ok*/ |
GdGetNextTimeout(&to, timeout); |
} |
|
/* Wait for some input on any of the fds in the set or a timeout: */ |
if((e = select(setsize, &rfds, &wfds, &efds, &to)) > 0) { |
|
/* If data is present on the mouse fd, service it: */ |
if(mouse_fd >= 0 && FD_ISSET(mouse_fd, &rfds)) |
while(MwCheckMouseEvent()) |
continue; |
|
/* If data is present on the keyboard fd, service it: */ |
if(keyb_fd >= 0 && FD_ISSET(keyb_fd, &rfds)) |
while(MwCheckKeyboardEvent()) |
continue; |
|
/* If registered descriptor, handle it */ |
fd = userregfd_head; |
while (fd != -1) { |
if (userregfd[fd].read && FD_ISSET(fd, &rfds)) |
PostMessage(userregfd[fd].read, WM_FDINPUT, fd, 0); |
if (userregfd[fd].write && FD_ISSET(fd, &wfds)) |
PostMessage(userregfd[fd].write, WM_FDOUTPUT, fd, 0); |
if (userregfd[fd].except && FD_ISSET(fd, &efds)) |
PostMessage(userregfd[fd].except, WM_FDEXCEPT, fd, 0); |
fd = userregfd[fd].next; |
} |
} |
else if(e == 0) { |
/* timeout has occured*/ |
if(GdTimeout() == FALSE) |
return; |
#if ANIMATEPALETTE |
if(fade <= 100) { |
setfadelevel(&scrdev, fade); |
fade += 5; |
} |
#endif |
MwHandleTimers(); |
} else |
if(errno != EINTR) |
EPRINTF("Select() call in main failed\n"); |
} |
#endif |
|
#if VTSWITCH |
static void |
CheckVtChange(void *arg) |
{ |
if(MwCheckVtChange()) { |
#if ANIMATEPALETTE |
fade = 0; |
#endif |
MwRedrawScreen(); |
} |
GdAddTimer(50, CheckVtChange, NULL); |
} |
#endif |
|
/* |
* Initialize the graphics and mouse devices at startup. |
* Returns nonzero with a message printed if the initialization failed. |
*/ |
int |
MwInitialize(void) |
{ |
HWND wp; /* root window */ |
PSD psd; |
WNDCLASS wc; |
int fd; |
static MWCURSOR arrow = { /* default arrow cursor*/ |
16, 16, |
0, 0, |
RGB(255, 255, 255), RGB(0, 0, 0), |
{ 0xe000, 0x9800, 0x8600, 0x4180, |
0x4060, 0x2018, 0x2004, 0x107c, |
0x1020, 0x0910, 0x0988, 0x0544, |
0x0522, 0x0211, 0x000a, 0x0004 }, |
{ 0xe000, 0xf800, 0xfe00, 0x7f80, |
0x7fe0, 0x3ff8, 0x3ffc, 0x1ffc, |
0x1fe0, 0x0ff0, 0x0ff8, 0x077c, |
0x073e, 0x021f, 0x000e, 0x0004 } |
}; |
|
extern MWLISTHEAD mwClassHead; |
|
#if (UNIX | DOS_DJGPP) && !_MINIX |
for (fd = 0; fd < FD_SETSIZE; fd++) { |
userregfd[fd].read = NULL; |
userregfd[fd].write = NULL; |
userregfd[fd].except = NULL; |
userregfd[fd].next = -1; |
} |
userregfd_head = -1; |
#endif |
/* catch terminate signal to restore tty state*/ |
signal(SIGTERM, (void *)MwTerminate); |
|
startTicks = GetTickCount(); |
|
if ((keyb_fd = GdOpenKeyboard()) == -1) { |
EPRINTF("Cannot initialise keyboard\n"); |
return -1; |
} |
|
if ((psd = GdOpenScreen()) == NULL) { |
EPRINTF("Cannot initialise screen\n"); |
GdCloseKeyboard(); |
return -1; |
} |
|
if ((mouse_fd = GdOpenMouse()) == -1) { |
EPRINTF("Cannot initialise mouse\n"); |
GdCloseScreen(psd); |
GdCloseKeyboard(); |
return -1; |
} |
|
#if ANIMATEPALETTE |
setfadelevel(psd, 0); |
#endif |
/* |
* Initialize the root window. |
*/ |
wc.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW; |
wc.lpfnWndProc = (WNDPROC)DefWindowProc; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 0; |
wc.hInstance = 0; |
wc.hIcon = 0; /*LoadIcon(GetHInstance(), MAKEINTRESOURCE( 1));*/ |
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/ |
wc.hbrBackground = CreateSolidBrush(GetSysColor(COLOR_BACKGROUND)); |
wc.lpszMenuName = NULL; |
wc.lpszClassName = "DeskTop"; |
RegisterClass( &wc); |
|
wp = GdItemNew(struct hwnd); |
if (!wp) { |
EPRINTF("No memory for root window\n"); |
GdCloseMouse(); |
GdCloseScreen(psd); |
GdCloseKeyboard(); |
return -1; |
} |
/* remove the WS_CAPTION to have bare desktop window*/ |
/*wp->style = WS_CLIPCHILDREN | WS_CAPTION | WS_VISIBLE;*/ |
wp->style = WS_CLIPCHILDREN | WS_VISIBLE; |
wp->exstyle = 0; |
wp->pClass = (PWNDCLASS)mwClassHead.head; |
wp->parent = NULL; |
wp->children = NULL; |
wp->siblings = NULL; |
wp->next = NULL; |
SetRect(&wp->winrect, 0, 0, psd->xvirtres, psd->yvirtres); |
MwCalcClientRect(wp); |
wp->cursor = NULL; |
wp->unmapcount = 0; |
wp->id = 0; |
strcpy(wp->szTitle, "Microwindows"); |
wp->gotPaintMsg = PAINT_PAINTED; |
#if UPDATEREGIONS |
wp->update = GdAllocRegion(); |
#endif |
|
listwp = wp; |
rootwp = wp; |
focuswp = wp; |
mousewp = wp; |
|
/* schedule desktop window paint*/ |
InvalidateRect(rootwp, NULL, TRUE); |
|
#if VTSWITCH |
MwInitVt(); |
/* Check for VT change every 50 ms: */ |
GdAddTimer(50, CheckVtChange, NULL); |
#endif |
|
/* |
* Initialize and position the default cursor. |
*/ |
curcursor = NULL; |
cursorx = -1; |
cursory = -1; |
GdShowCursor(psd); |
MwMoveCursor(psd->xvirtres / 2, psd->yvirtres / 2); |
MwSetCursor(rootwp, &arrow); |
|
/* |
* Finally tell the mouse driver some things. |
*/ |
GdRestrictMouse(0, 0, psd->xvirtres - 1, psd->yvirtres - 1); |
GdMoveMouse(psd->xvirtres / 2, psd->yvirtres / 2); |
|
return 0; |
} |
|
/* |
* Here to close down the server. |
*/ |
void |
MwTerminate(void) |
{ |
GdCloseScreen(&scrdev); |
GdCloseMouse(); |
GdCloseKeyboard(); |
#if VTSWITCH |
MwRedrawVt(mwvterm); |
MwExitVt(); |
#endif |
exit(0); |
} |
|
/* |
* Return # milliseconds elapsed since start of Microwindows |
* Granularity is 25 msec |
*/ |
DWORD WINAPI |
GetTickCount(VOID) |
{ |
#if MSDOS |
#include <time.h> |
return (DWORD)(clock() * 1000 / CLOCKS_PER_SEC); |
#else |
#if _MINIX |
struct tms t; |
|
return (DWORD)times(&t) * 16; |
#else |
#if UNIX |
struct timeval t; |
|
gettimeofday(&t, NULL); |
return ((t.tv_sec * 1000) + (t.tv_usec / 25000) * 25) - startTicks; |
#else |
return 0L; |
#endif |
#endif |
#endif |
} |
|
VOID WINAPI |
Sleep(DWORD dwMilliseconds) |
{ |
int i, j, k; |
const int loops_per_ms = 20000; |
|
/* FIXME this is not calibrated */ |
for(i=0; i < dwMilliseconds; i++) |
for(j=0; j < loops_per_ms; j++) |
k = i * j; |
} |
/winlib/caret.c
0,0 → 1,184
/* |
* Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* |
* Caret control for Microwindows win32 api. |
* |
* TODO: add SetSysTimer for blinking |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <sys/time.h> |
#ifndef __ECOS |
#include <malloc.h> |
#endif |
#include "windows.h" |
#include "device.h" |
|
#define DEF_BLINK_TIME 500 /* default blink time in ms*/ |
|
typedef struct { |
HWND hwnd; /* != NULL if caret is created*/ |
int x; |
int y; |
int nWidth; |
int nHeight; |
BOOL fShown; /* caret is currently visible*/ |
int nShowCount; /* <= 0 for hidden caret*/ |
UINT nBlinkTime; |
} CARETINFO; |
|
/* local data*/ |
static CARETINFO sysCaret; /* the system caret*/ |
|
/* local procs*/ |
static void MwShowCaret(void); |
static void MwHideCaret(void); |
static void MwUpdateCaret(void); |
|
BOOL WINAPI |
CreateCaret(HWND hwnd, HBITMAP hBitmap, int nWidth, int nHeight) |
{ |
|
DestroyCaret(); /* destroy old caret if any*/ |
|
if (nWidth <= 0) |
nWidth = 1; |
if (nHeight <= 0) |
nHeight = 1; |
|
sysCaret.hwnd = hwnd; |
sysCaret.x = 0; |
sysCaret.y = 0; |
sysCaret.nWidth = nWidth; |
sysCaret.nHeight = nHeight; |
sysCaret.fShown = FALSE; |
sysCaret.nShowCount = 0; |
sysCaret.nBlinkTime = DEF_BLINK_TIME; |
return TRUE; |
} |
|
BOOL WINAPI |
DestroyCaret(VOID) |
{ |
if (sysCaret.fShown) |
MwHideCaret(); |
sysCaret.hwnd = NULL; |
sysCaret.fShown = FALSE; |
return TRUE; |
} |
|
BOOL WINAPI |
HideCaret(HWND hwnd) |
{ |
if (hwnd == NULL) |
hwnd = sysCaret.hwnd; |
if (hwnd == NULL || hwnd != sysCaret.hwnd) |
return FALSE; |
|
/* hide caret if this call made it invisible*/ |
if (--sysCaret.nShowCount == 0) { |
MwHideCaret(); |
return TRUE; |
} |
return FALSE; |
} |
|
BOOL WINAPI |
ShowCaret(HWND hwnd) |
{ |
if (hwnd == NULL) |
hwnd = sysCaret.hwnd; |
if (hwnd == NULL || hwnd != sysCaret.hwnd || sysCaret.nShowCount < 0) |
return FALSE; |
|
if (++sysCaret.nShowCount > 1) |
return TRUE; |
|
/* show caret, this call made it visible*/ |
MwShowCaret(); |
return TRUE; |
} |
|
BOOL WINAPI |
SetCaretPos(int nX, int nY) |
{ |
if (sysCaret.fShown && (sysCaret.x != nX || sysCaret.y != nY)) { |
MwUpdateCaret(); /* toggle off*/ |
sysCaret.x = nX; |
sysCaret.y = nY; |
MwUpdateCaret(); /* toggle on in new location*/ |
return TRUE; |
} |
sysCaret.x = nX; |
sysCaret.y = nY; |
return TRUE; |
} |
|
BOOL WINAPI |
GetCaretPos(LPPOINT lpPoint) |
{ |
lpPoint->x = sysCaret.x; |
lpPoint->y = sysCaret.y; |
return TRUE; |
} |
|
UINT WINAPI |
GetCaretBlinkTime(VOID) |
{ |
return sysCaret.nBlinkTime; |
} |
|
BOOL WINAPI |
SetCaretBlinkTime(UINT uMSeconds) |
{ |
sysCaret.nBlinkTime = uMSeconds; |
/* SetSysTimer */ |
return TRUE; |
} |
|
static void |
MwShowCaret(void) |
{ |
if (sysCaret.fShown) |
return; |
MwUpdateCaret(); |
sysCaret.fShown = TRUE; |
} |
|
static void |
MwHideCaret(void) |
{ |
if (!sysCaret.fShown) |
return; |
MwUpdateCaret(); |
sysCaret.fShown = FALSE; |
} |
|
/* Draw the caret using XOR. Same routine is used to show and hide caret.*/ |
static void |
MwUpdateCaret(void) |
{ |
int oldmode; |
HDC hdc; |
HPEN hpen; |
HBRUSH hbr; |
|
oldmode = GdSetMode(MWMODE_XOR); |
hdc = GetDC(sysCaret.hwnd); |
hpen = SelectObject(hdc, GetStockObject(WHITE_PEN)); |
|
/* it seems there's some problems with Rectangle with nWidth == 1*/ |
if (sysCaret.nWidth == 1) { |
MoveToEx(hdc, sysCaret.x, sysCaret.y, NULL); |
LineTo(hdc, sysCaret.x, sysCaret.y+sysCaret.nHeight); |
} else { |
hbr = SelectObject(hdc, GetStockObject(WHITE_BRUSH)); |
Rectangle(hdc, sysCaret.x, sysCaret.y, |
sysCaret.x+sysCaret.nWidth, |
sysCaret.y+sysCaret.nHeight); |
SelectObject(hdc, hbr); |
} |
SelectObject(hdc, hpen); |
ReleaseDC(sysCaret.hwnd, hdc); |
GdSetMode(oldmode); |
} |
/winlib/medit.c
0,0 → 1,1744
/* |
* Copyright (C) 1999, 2000, Wei Yongming. |
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* |
* Multi Line Edit Control for Microwindows win32 api. |
*/ |
|
/* |
** This library is free software; you can redistribute it and/or |
** modify it under the terms of the GNU Library General Public |
** License as published by the Free Software Foundation; either |
** version 2 of the License, or (at your option) any later version. |
** |
** This library is distributed in the hope that it will be useful, |
** but WITHOUT ANY WARRANTY; without even the implied warranty of |
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
** Library General Public License for more details. |
** |
** You should have received a copy of the GNU Library General Public |
** License along with this library; if not, write to the Free |
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
** MA 02111-1307, USA |
*/ |
|
/* |
** Alternatively, the contents of this file may be used under the terms |
** of the Mozilla Public License (the "MPL License") in which case the |
** provisions of the MPL License are applicable instead of those above. |
*/ |
|
/* Note: |
** Although there was a version by Zhao Jianghua, this version of |
** EDIT control is written by Wei Yongming from scratch. |
** |
** Create date: 1999/8/26 |
** |
** Modify records: |
** |
** Who When Where For What Status |
**----------------------------------------------------------------------------- |
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished |
** Kevin Tseng 2000/08/30 gv port to microwin ported |
** |
** |
** TODO: |
** * Selection. |
** * Undo. |
*/ |
|
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include <sys/time.h> |
#define MWINCLUDECOLORS |
#include "windows.h" /* windef.h, winuser.h */ |
#include "wintools.h" |
#include "device.h" /* GdGetTextSize */ |
|
#define USE_BIG5 |
|
#define WIDTH_MEDIT_BORDER 2 |
#define MARGIN_MEDIT_LEFT 1 |
#define MARGIN_MEDIT_TOP 1 |
#define MARGIN_MEDIT_RIGHT 2 |
#define MARGIN_MEDIT_BOTTOM 1 |
|
#define LEN_MLEDIT_BUFFER 3000 |
#define LEN_MLEDIT_UNDOBUFFER 1024 |
|
#define EST_FOCUSED 0x00000001L |
#define EST_MODIFY 0x00000002L |
#define EST_READONLY 0x00000004L |
#define EST_REPLACE 0x00000008L |
|
#define MEDIT_OP_NONE 0x00 |
#define MEDIT_OP_DELETE 0x01 |
#define MEDIT_OP_INSERT 0x02 |
#define MEDIT_OP_REPLACE 0x03 |
|
typedef struct tagLINEDATA { |
|
int dataEnd; |
|
|
char buffer[LEN_MLEDIT_BUFFER+1]; |
}LINEDATA; |
typedef LINEDATA* PLINEDATA; |
|
#define ATTENG 0 /* english */ |
#define ATTCHL 1 /* chinese left(1st) byte */ |
#define ATTCHR 2 /* chinese right(2nd) byte */ |
static char attr[LEN_MLEDIT_BUFFER]; |
|
typedef struct tagMLEDITDATA { |
|
|
int editPos; /* current edit position */ |
int caretPos; /* caret offset in box */ |
int editLine; /* current eidt line */ |
|
int StartlineDisp; /* start line displayed */ |
int EndlineDisp; /* end line displayed */ |
|
|
|
|
int selStartPos; /* selection start position */ |
int selStartLine; /* selection start line */ |
int selEndPos; /* selection end position */ |
int selEndLine; /* selection end line */ |
|
int passwdChar; /* password character */ |
|
int leftMargin; /* left margin */ |
int topMargin; /* top margin */ |
int rightMargin; /* right margin */ |
int bottomMargin; /* bottom margin */ |
|
int hardLimit; /* hard limit */ |
|
int lastOp; /* last operation */ |
int lastPos; /* last operation position */ |
int lastLine; /* last operation line */ |
int affectedLen; /* affected len of last operation */ |
int undoBufferLen; /* undo buffer len */ |
char undoBuffer [LEN_MLEDIT_UNDOBUFFER]; |
/* Undo buffer; */ |
PLINEDATA head; /* buffer */ |
|
}MLEDITDATA; |
typedef MLEDITDATA* PMLEDITDATA; |
|
BOOL RegisterMLEditControl (void); |
|
int MLEditCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam); |
|
#define PIXEL_invalid (-1) |
extern HWND sg_hCaretWnd; |
extern HWND rootwp; |
|
static int GetSysCharHeight (HWND hwnd) |
{ |
#ifndef USE_BIG5 |
HDC hdc; |
int xw, xh, xb; |
|
hdc = GetDC(hwnd); |
SelectObject(hdc, GetStockObject(DEFAULT_FONT)); |
GdSetFont(hdc->font->pfont); |
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII); |
ReleaseDC(hwnd,hdc); |
|
return xh; |
#else |
return 12; |
#endif |
} |
|
static int GetSysCharWidth (HWND hwnd) |
{ |
#ifndef USE_BIG5 |
HDC hdc; |
int xw, xh, xb; |
|
hdc = GetDC(hwnd); |
SelectObject(hdc, GetStockObject(DEFAULT_FONT)); |
GdSetFont(hdc->font->pfont); |
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII); |
ReleaseDC(hwnd,hdc); |
|
return xw; |
#else |
return 6; |
#endif |
} |
|
static int GetSysCCharWidth (HWND hwnd) |
{ |
return (2*GetSysCharWidth(hwnd)); |
} |
char* GetWindowCaption (HWND hWnd) |
{ |
return hWnd->szTitle; |
} |
|
DWORD GetWindowAdditionalData (HWND hWnd) |
{ |
return hWnd->userdata; |
} |
|
DWORD SetWindowAdditionalData (HWND hWnd, DWORD newData) |
{ |
DWORD oldOne = 0L; |
|
oldOne = hWnd->userdata; |
hWnd->userdata = newData; |
|
return oldOne; |
} |
|
DWORD GetWindowAdditionalData2 (HWND hWnd) |
{ |
return hWnd->userdata2; |
} |
|
DWORD SetWindowAdditionalData2 (HWND hWnd, DWORD newData) |
{ |
DWORD oldOne = 0L; |
|
oldOne = hWnd->userdata2; |
hWnd->userdata2 = newData; |
|
return oldOne; |
} |
|
DWORD GetWindowStyle (HWND hWnd) |
{ |
return hWnd->style; |
} |
|
BOOL ExcludeWindowStyle (HWND hWnd, DWORD dwStyle) |
{ |
if (hWnd == rootwp/*HWND_DESKTOP*/) |
return FALSE; |
|
hWnd->style &= ~dwStyle; |
return TRUE; |
} |
|
BOOL IncludeWindowStyle (HWND hWnd, DWORD dwStyle) |
{ |
|
if (hWnd == rootwp/*HWND_DESKTOP*/) |
return FALSE; |
|
hWnd->style |= dwStyle; |
return TRUE; |
} |
|
int WINAPI MwRegisterMEditControl(HINSTANCE hInstance) |
{ |
WNDCLASS wc; |
|
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS; |
wc.lpfnWndProc = (WNDPROC)MLEditCtrlProc; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 0; |
wc.hInstance = hInstance; |
wc.hIcon = NULL; |
wc.hCursor = 0; |
wc.hbrBackground= GetStockObject(WHITE_BRUSH); |
wc.lpszMenuName = NULL; |
wc.lpszClassName= "MEDIT"; |
|
return RegisterClass(&wc); |
} |
|
static inline int edtGetOutWidth (HWND hWnd) |
{ |
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); |
RECT rc; |
GetClientRect(hWnd,&rc); |
return rc.right - rc.left |
- pMLEditData->leftMargin |
- pMLEditData->rightMargin; |
} |
|
static int edtGetStartDispPosAtEnd (HWND hWnd, |
PLINEDATA pLineData) |
{ |
int nOutWidth = edtGetOutWidth (hWnd); |
int endPos = pLineData->dataEnd; |
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); |
int newStartPos = pMLEditData->dispPos; |
const char* buffer = pLineData->buffer; |
|
if(endPos < newStartPos) |
return 0; |
while (TRUE) |
{ |
if ((endPos - newStartPos) * GetSysCharWidth (hWnd) < nOutWidth) |
break; |
|
/* 1st:gb:a1-f7,big5:a1-f9 */ |
if ((BYTE)buffer [newStartPos] > 0xA0) |
{ |
newStartPos ++; |
if (newStartPos < pLineData->dataEnd) |
{ |
#ifndef USE_BIG5 |
if ((BYTE)buffer [newStartPos] > 0xA0) |
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
if ( ((BYTE)buffer [newStartPos] >= 0x40 && (BYTE)buffer[newStartPos] <= 0x7e) || |
((BYTE)buffer [newStartPos] >= 0xa1 && (BYTE)buffer[newStartPos] <= 0xfe)) |
#endif |
newStartPos ++; |
} |
} |
else |
newStartPos ++; |
} |
return newStartPos; |
} |
|
static int edtGetDispLen (HWND hWnd,PLINEDATA pLineData) |
{ |
int i, n = 0; |
int nOutWidth = edtGetOutWidth (hWnd); |
int nTextWidth = 0; |
PMLEDITDATA pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); |
const char* buffer = pLineData->buffer; |
|
if(buffer[0]==0||pLineData->dataEnd<pMLEditData->dispPos) |
return 0; |
|
for (i = pMLEditData->dispPos; i < pLineData->dataEnd; i++) |
{ |
/* 1st:gb:a1-f7,big5:a1-f9 */ |
if ((BYTE)buffer [i] > 0xA0) |
{ |
i++; |
if (i < pLineData->dataEnd) |
{ |
#ifndef USE_BIG5 |
if ((BYTE)buffer [i] > 0xA0) /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
if ( ((BYTE)buffer [i] >= 0x40 && (BYTE)buffer[i] <= 0x7e) || |
((BYTE)buffer [i] >= 0xa1 && (BYTE)buffer[i] <= 0xfe)) |
#endif |
{ |
nTextWidth += GetSysCCharWidth (hWnd); |
n += 2; |
} |
else |
i--; |
} |
else |
{ |
nTextWidth += GetSysCharWidth (hWnd); |
n++; |
} |
} |
else |
{ |
nTextWidth += GetSysCharWidth (hWnd); |
n++; |
} |
|
if (nTextWidth > nOutWidth) |
break; |
} |
|
return n; |
} |
|
static int edtGetOffset (HWND hwnd,const MLEDITDATA* pMLEditData, PLINEDATA pLineData, int x) |
{ |
int i; |
int newOff = 0; |
int nTextWidth = 0; |
const char* buffer = pLineData->buffer; |
|
if(pLineData->dataEnd<pMLEditData->dispPos) |
return pLineData->dataEnd; |
|
x -= pMLEditData->leftMargin; |
for (i = pMLEditData->dispPos; i < pLineData->dataEnd; i++) { |
if ((nTextWidth + (GetSysCharWidth(hwnd) >> 1)) >= x) |
break; |
|
/* 1st:gb:a1-f7,big5:a1-f9 */ |
if ((BYTE)buffer [i] > 0xA0) |
{ |
i++; |
|
if (nTextWidth + GetSysCCharWidth(hwnd)/2 >= x) |
break; |
|
if (i < pLineData->dataEnd) |
{ |
#ifndef USE_BIG5 |
if ((BYTE)buffer [i] > 0xA0) /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
if ( ((BYTE)buffer [i] >= 0x40 && (BYTE)buffer[i] <= 0x7e) || |
((BYTE)buffer [i] >= 0xa1 && (BYTE)buffer[i] <= 0xfe)) |
#endif |
{ |
nTextWidth += GetSysCCharWidth (hwnd); |
newOff += 2; |
} |
else |
i --; |
} |
else |
{ |
nTextWidth += GetSysCharWidth (hwnd); |
newOff ++; |
} |
} |
else |
{ |
nTextWidth += GetSysCharWidth (hwnd); |
newOff ++; |
} |
} |
return newOff; |
} |
|
static int edtGetLineNO (HWND hwnd,const MLEDITDATA* pMLEditData, int x) |
{ |
int nline = 0; |
if(x>=0) |
{ |
nline = x / GetSysCharHeight(hwnd); |
if (nline <= pMLEditData->linesDisp) |
return nline; |
} |
return -1; |
} |
|
static BOOL edtIsACCharAtPosition (const char* string, int len, int pos) |
{ |
if (pos > (len - 2)) |
return FALSE; |
|
/* 1st:gb:a1-f7,big5:a1-f9 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
#ifndef USE_BIG5 |
if ((BYTE)string [pos] > 0xA0 && (BYTE)string [pos + 1] > 0xA0) |
return TRUE; |
#else |
if ((BYTE)string [pos] > 0xA0) |
{ |
if ( ((BYTE)string [pos + 1] >= 0x40 && (BYTE)string [pos + 1] <= 0x7e) || |
((BYTE)string [pos + 1] >= 0xa1 && (BYTE)string [pos + 1] <= 0xfe)) { |
/*fprintf(stderr,"true\n"); |
fflush(stderr);*/ |
return TRUE; |
} |
} |
#endif |
|
return FALSE; |
} |
|
static void str2attr(const char* str,int len) |
{ |
int i=0; |
do |
{ |
if (edtIsACCharAtPosition(str,len,i)) |
{ |
attr[i]=ATTCHL; |
attr[i+1]=ATTCHR; |
i+=2; |
} |
else |
{ |
attr[i]=ATTENG; |
i++; |
} |
}while(i<len); |
} |
|
static BOOL edtIsACCharBeforePosition (const char* string,int len, int pos) |
{ |
if (pos < 2) |
return FALSE; |
|
/* 1st:gb:a1-f7,big5:a1-f9 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
#ifndef USE_BIG5 |
/* FIXME #ifdef GB2312?*/ |
if ((BYTE)string [pos - 2] > 0xA0 && (BYTE)string [pos - 1] > 0xA0) |
return TRUE; |
#else |
#if 0 |
if ((BYTE)string [pos - 2] > 0xA0) |
{ |
if ( ((BYTE)string [pos - 1] >= 0x40 && (BYTE)string[pos - 1] <= 0x7e) || |
((BYTE)string [pos - 1] >= 0xa1 && (BYTE)string[pos - 1] <= 0xfe)) |
return TRUE; |
} |
#else |
str2attr(string,len); |
if (attr[pos-1]==ATTENG) return FALSE; |
else return TRUE; |
#endif |
#endif |
|
return FALSE; |
} |
|
|
static BOOL edtIsACCharFromBegin(const char* string,int len,int pos) |
{ |
int i; |
if(pos == 0) |
return TRUE; |
if(len == 0) |
return FALSE; |
for(i=0;i<len;) |
{ |
if( edtIsACCharAtPosition(string,len,i) ) |
i += 2; |
else |
i++; |
if(i==pos) |
return TRUE; |
} |
return FALSE; |
} |
|
int GetRETURNPos(char *str) |
{ |
int i; |
for(i=0;i<strlen(str);i++) |
{ |
if(str[i]==10) |
return i; |
} |
return -1; |
} |
|
void MLEditInitBuffer (PMLEDITDATA pMLEditData,char *spcaption) |
{ |
char *caption=spcaption; |
int off1; |
int lineNO=0; |
PLINEDATA pLineData; |
if (!(pMLEditData->head = malloc (sizeof (LINEDATA)))) { |
fprintf (stderr, "EDITLINE: malloc error!\n"); |
return ; |
} |
pMLEditData->head->previous = NULL; |
pLineData=pMLEditData->head; |
while ( (off1 = GetRETURNPos(caption)) != -1) |
{ |
off1 = min(off1, LEN_MLEDIT_BUFFER); |
memcpy(pLineData->buffer,caption,off1); |
pLineData->buffer[off1] = '\0'; |
caption+=min(off1,LEN_MLEDIT_BUFFER)+1; |
pLineData->lineNO = lineNO; |
pMLEditData->dispPos = 0; |
pLineData->dataEnd = strlen(pLineData->buffer); |
pLineData->next = malloc (sizeof (LINEDATA)); |
pLineData->next->previous = pLineData; |
pLineData = pLineData->next; |
lineNO++; |
} |
off1 = min(strlen(caption),LEN_MLEDIT_BUFFER); |
memcpy(pLineData->buffer,caption,off1); |
pLineData->buffer[off1] = '\0'; |
pLineData->lineNO = lineNO++; |
pMLEditData->dispPos = 0; |
pLineData->dataEnd = strlen(pLineData->buffer); |
pLineData->next = NULL; |
pMLEditData->lines = lineNO ; |
} |
|
PLINEDATA GetLineData(PMLEDITDATA pMLEditData,int lineNO) |
{ |
PLINEDATA pLineData=pMLEditData->head; |
while(pLineData) |
{ |
if(pLineData->lineNO==lineNO) |
return pLineData; |
pLineData = pLineData->next; |
} |
return NULL; |
} |
|
int MLEditCtrlProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam) |
{ |
DWORD dwStyle; |
DWORD dw; |
HDC hdc; |
PLINEDATA pLineData; |
RECT clientRect; |
PMLEDITDATA pMLEditData; |
dwStyle = GetWindowStyle(hWnd); |
|
switch (message) |
{ |
case WM_CREATE: |
{ |
if (!(pMLEditData = malloc (sizeof (MLEDITDATA)))) { |
fprintf (stderr, "EDIT: malloc error!\n"); |
return -1; |
} |
|
pMLEditData->totalLen = LEN_MLEDIT_BUFFER; |
pMLEditData->editPos = 0; |
pMLEditData->editLine = 0; |
pMLEditData->caretPos = 0; |
|
MLEditInitBuffer(pMLEditData,GetWindowCaption(hWnd)); |
|
GetClientRect(hWnd,&clientRect); |
pMLEditData->MaxlinesDisp = (clientRect.bottom-clientRect.top)/GetSysCharHeight(hWnd); |
pMLEditData->linesDisp = min(pMLEditData->MaxlinesDisp,pMLEditData->lines); |
pMLEditData->StartlineDisp = 0; |
pMLEditData->EndlineDisp = pMLEditData->StartlineDisp + pMLEditData->linesDisp - 1; |
|
pMLEditData->selStartPos = 0; |
pMLEditData->selEndPos = 0; |
pMLEditData->passwdChar = '*'; |
pMLEditData->leftMargin = MARGIN_MEDIT_LEFT; |
pMLEditData->topMargin = MARGIN_MEDIT_TOP; |
pMLEditData->rightMargin = MARGIN_MEDIT_RIGHT; |
pMLEditData->bottomMargin = MARGIN_MEDIT_BOTTOM; |
|
pMLEditData->hardLimit = -1; |
|
/* undo information */ |
pMLEditData->lastOp = MEDIT_OP_NONE; |
pMLEditData->lastPos = 0; |
pMLEditData->affectedLen = 0; |
pMLEditData->undoBufferLen = LEN_MLEDIT_UNDOBUFFER; |
pMLEditData->undoBuffer [0] = '\0'; |
SetWindowAdditionalData2(hWnd,(DWORD)pMLEditData); |
SetWindowAdditionalData(hWnd,(DWORD)0); |
break; |
} |
case WM_DESTROY: |
{ |
PLINEDATA temp; |
pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); |
DestroyCaret (); |
pLineData = pMLEditData->head; |
while(pLineData) |
{ |
/*printf("delete lineNO = %d,buffer=%s\n",pLineData->lineNO,pLineData->buffer);*/ |
temp = pLineData->next; |
free(pLineData); |
pLineData = temp; |
} |
free(pMLEditData); |
} |
break; |
|
case WM_SETFONT: |
break; |
|
case WM_GETFONT: |
break; |
|
#if 0 /* fix: no WM_SETCURSOR */ |
case WM_SETCURSOR: |
if (dwStyle & WS_DISABLED) { |
SetCursor (GetSystemCursor (IDC_ARROW)); |
return 0; |
} |
break; |
|
case WM_SIZECHANGED: |
{ |
} |
return 0; |
#endif |
case WM_KILLFOCUS: |
{ |
dw= GetWindowAdditionalData(hWnd); |
dw&= ~EST_FOCUSED; |
SetWindowAdditionalData(hWnd,dw); |
|
HideCaret (hWnd); |
DestroyCaret (); |
|
SendMessage (GetParent (hWnd), |
WM_COMMAND, |
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_KILLFOCUS), |
(LPARAM)hWnd); |
} |
break; |
|
case WM_SETFOCUS: |
{ |
dw= GetWindowAdditionalData(hWnd); |
if (dw & EST_FOCUSED) |
return 0; |
|
dw |= EST_FOCUSED; |
SetWindowAdditionalData(hWnd,dw); |
|
pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); |
|
/* only implemented for ES_LEFT align format. */ |
|
CreateCaret (hWnd, NULL, 1, /*GetSysCharWidth(hWnd)+1,*/ |
hWnd->clirect.bottom-hWnd->clirect.top-2); |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, pMLEditData->topMargin); |
ShowCaret(hWnd); |
|
SendMessage (GetParent (hWnd), |
WM_COMMAND, |
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_SETFOCUS), |
(LPARAM) hWnd); |
} |
break; |
|
case WM_ENABLE: |
if ( (!(dwStyle & WS_DISABLED) && !wParam) |
|| ((dwStyle & WS_DISABLED) && wParam) ) { |
if (wParam) |
ExcludeWindowStyle(hWnd,WS_DISABLED); |
else |
IncludeWindowStyle(hWnd,WS_DISABLED); |
|
InvalidateRect (hWnd, NULL, FALSE); |
} |
return 0; |
|
case WM_NCPAINT: |
{ |
RECT rc; |
#if 0 |
if (wParam) |
hdc = (HDC)wParam; |
else |
hdc = GetDC (hWnd); |
#if 0 /* fix: no ClipRectIntersect() */ |
if (lParam) |
ClipRectIntersect (hdc, (RECT*)lParam); |
#endif |
#else |
hdc = wParam? (HDC)wParam: GetWindowDC (hWnd); |
GetWindowRect(hWnd, &rc); |
#endif |
if (dwStyle & WS_BORDER) |
{ |
#if 0 |
RECT rc; |
GetWindowRect(hWnd,&rc); |
Draw3DDownFrame (hdc, 0, 0, |
rc.right - rc.left - 1, |
rc.bottom - rc.top - 1, |
PIXEL_invalid); |
#else |
Draw3dInset(hdc, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top); |
#endif |
} |
if (!wParam) { |
ReleaseDC(hWnd,hdc); |
} |
} |
return 0; |
|
case WM_PAINT: |
{ |
int dispLen,i; |
char* dispBuffer; |
RECT rect,rc; |
PAINTSTRUCT ps; |
HGDIOBJ oldfont=NULL; |
|
hdc = BeginPaint (hWnd,&ps); |
GetClientRect (hWnd, &rect); |
|
if (dwStyle & WS_DISABLED) |
{ |
rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right; |
FillRect(hdc,&rc,GetStockObject(LTGRAY_BRUSH)); |
SetBkColor (hdc, LTGRAY/*PIXEL_lightgray*/); |
} |
else { |
rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right; |
FillRect(hdc,&rc,GetStockObject(WHITE_BRUSH)); |
SetBkColor (hdc, WHITE/*PIXEL_lightwhite*/); |
} |
|
SetTextColor (hdc, BLACK/*PIXEL_black*/); |
|
pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); |
for(i = pMLEditData->StartlineDisp; i <= pMLEditData->EndlineDisp; i++) |
{ |
pLineData= GetLineData(pMLEditData,i); |
dispLen = edtGetDispLen (hWnd,pLineData); |
if (dispLen == 0 && pMLEditData->EndlineDisp >= pMLEditData->lines) { |
continue; |
} |
|
#ifdef _DEBUG |
if (pMLEditData->dispPos > pLineData->dataEnd) |
fprintf (stderr, "ASSERT failure: %s.\n", "Edit Paint"); |
#endif |
|
dispBuffer = alloca (LEN_MLEDIT_BUFFER+1); |
|
if (dwStyle & ES_PASSWORD) |
memset (dispBuffer, '*', pLineData->dataEnd); |
memcpy (dispBuffer, |
pLineData->buffer, /* +pMLEditData->dispPos, */ |
pLineData->dataEnd); /* - pMLEditData->dispPos); */ |
dispBuffer[pLineData->dataEnd] = '\0'; |
|
/* only implemented ES_LEFT align format for single line edit. */ |
rect.left = pMLEditData->leftMargin; |
rect.top = pMLEditData->topMargin ; |
rect.right = pMLEditData->rightMargin; |
rect.bottom = pMLEditData->bottomMargin; |
#if 0 |
printf("lineNO=%d,lines=%d,editLine=%d\n",pLineData->lineNO,pMLEditData->lines, |
pMLEditData->editLine); |
printf("--dispBuffer=%s--\n",dispBuffer); |
ClipRectIntersect (hdc, &rect); /* fix: no ClipRectIntersect() */ |
#endif |
|
#ifdef USE_BIG5 |
oldfont=SelectObject(hdc,CreateFont(12, |
0,0,0,0,0,0,0,0,0,0,0, |
FF_DONTCARE|DEFAULT_PITCH, |
"HZXFONT")); |
#endif |
TextOut (hdc, |
pMLEditData->leftMargin - pMLEditData->dispPos * GetSysCharWidth(hWnd) , |
GetSysCharHeight(hWnd)*(pLineData->lineNO - pMLEditData->StartlineDisp) |
+ pMLEditData->topMargin, |
dispBuffer,-1); |
} |
#ifdef USE_BIG5 |
DeleteObject(SelectObject(hdc,oldfont)); |
#endif |
EndPaint (hWnd, &ps); |
} |
break; |
|
case WM_KEYDOWN: |
{ |
BOOL bChange = FALSE; |
int i; |
int deleted; |
PLINEDATA temp = NULL; |
char * tempP = NULL; |
|
pMLEditData =(PMLEDITDATA) GetWindowAdditionalData2(hWnd); |
|
switch (LOWORD (wParam)) |
{ |
|
case VK_RETURN: /* SCANCODE_ENTER: */ |
{ |
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
if (pMLEditData->editPos < pLineData->dataEnd) |
tempP = pLineData->buffer + pMLEditData->editPos; |
temp = pLineData->next; |
pLineData->next = malloc( sizeof(LINEDATA) ); |
pLineData->next->previous = pLineData; |
pLineData->next->next = temp; |
if(temp) |
{ |
temp->previous = pLineData->next; |
} |
temp = pLineData->next; |
temp->lineNO = pMLEditData->editLine + 1; |
if(tempP) |
{ |
memcpy(temp->buffer,tempP,strlen(tempP)); |
temp->dataEnd = strlen(tempP); |
} |
else |
temp->dataEnd = 0; |
temp->buffer[temp->dataEnd] = '\0'; |
pLineData->dataEnd = pMLEditData->editPos; |
pLineData->buffer[pLineData->dataEnd]='\0'; |
temp = temp->next; |
while (temp) |
{ |
temp->lineNO++; |
temp = temp->next; |
} |
pMLEditData->editPos = 0; |
pMLEditData->caretPos= 0; |
pMLEditData->dispPos = 0; |
if(pMLEditData->linesDisp < pMLEditData->MaxlinesDisp) |
{ |
pMLEditData->EndlineDisp++; |
pMLEditData->linesDisp++; |
} |
else if(pMLEditData->editLine == pMLEditData->EndlineDisp) |
{ |
pMLEditData->StartlineDisp++; |
pMLEditData->EndlineDisp++; |
} |
pMLEditData->editLine++; |
pMLEditData->lines++; |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+pMLEditData->topMargin); |
InvalidateRect (hWnd, NULL, FALSE); |
return 0; |
} |
case VK_HOME: /* SCANCODE_HOME: */ |
{ |
PLINEDATA temp; |
if (pMLEditData->editPos == 0) |
return 0; |
|
pMLEditData->editPos = 0; |
pMLEditData->caretPos = 0; |
|
SetCaretPos (pMLEditData->leftMargin, |
(pMLEditData->editLine-pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+pMLEditData->topMargin); |
temp = GetLineData(pMLEditData,pMLEditData->editLine); |
if (pMLEditData->dispPos != 0) |
{ |
pMLEditData->dispPos = 0; |
InvalidateRect (hWnd, NULL, FALSE); |
} |
return 0; |
} |
case VK_END: /* SCANCODE_END: */ |
{ |
int newStartPos; |
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
if (pMLEditData->editPos == pLineData->dataEnd) |
return 0; |
newStartPos = edtGetStartDispPosAtEnd (hWnd, pLineData); |
|
pMLEditData->editPos = pLineData->dataEnd; |
pMLEditData->caretPos = pMLEditData->editPos - newStartPos; |
|
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine-pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+ pMLEditData->topMargin); |
|
if (pMLEditData->dispPos != newStartPos) |
InvalidateRect (hWnd, NULL, FALSE); |
pMLEditData->dispPos = newStartPos; |
} |
return 0; |
|
case VK_LEFT: /* SCANCODE_CURSORBLOCKLEFT: */ |
{ |
BOOL bScroll = FALSE; |
int scrollStep,newStartPos; |
PLINEDATA temp; |
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
if (pMLEditData->editPos == 0 ) |
{ |
temp = pLineData->previous; |
if(temp && pMLEditData->editLine > pMLEditData->StartlineDisp) |
{ |
pMLEditData->editLine --; |
pMLEditData->editPos = temp->dataEnd; |
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp); |
pMLEditData->caretPos = pMLEditData->editPos - newStartPos; |
if (pMLEditData->dispPos != newStartPos) |
{ |
pMLEditData->dispPos = newStartPos; |
bScroll = TRUE; |
} |
} |
else |
return 0; |
} |
else |
{ if (edtIsACCharBeforePosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) { |
scrollStep = 2; |
pMLEditData->editPos -= 2; |
} |
else { |
scrollStep = 1; |
pMLEditData->editPos --; |
} |
|
pMLEditData->caretPos -= scrollStep; |
if (pMLEditData->caretPos == 0 |
&& pMLEditData->editPos != 0) { |
|
bScroll = TRUE; |
|
if (edtIsACCharBeforePosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) { |
pMLEditData->dispPos -= 2; |
pMLEditData->caretPos = 2; |
} |
else { |
pMLEditData->dispPos--; |
pMLEditData->caretPos = 1; |
} |
} |
else if (pMLEditData->caretPos < 0) { |
pMLEditData->dispPos = 0; |
pMLEditData->caretPos = 0; |
} |
} |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+ pMLEditData->topMargin); |
|
if (bScroll) |
InvalidateRect (hWnd, NULL, FALSE); |
} |
return 0; |
|
case VK_RIGHT: /* SCANCODE_CURSORBLOCKRIGHT: */ |
{ |
BOOL bScroll = FALSE; |
int scrollStep, moveStep; |
PLINEDATA temp; |
|
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
if (pMLEditData->editPos == pLineData->dataEnd) |
{ |
temp = pLineData->next; |
if(temp) |
{ |
pMLEditData->editLine++; |
pMLEditData->editPos = 0; |
pMLEditData->caretPos = 0; |
if(pMLEditData->dispPos !=0) |
{ |
pMLEditData->dispPos = 0; |
bScroll = TRUE; |
} |
} |
else |
return 0; |
} |
else |
{ |
if (edtIsACCharAtPosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->dispPos)) { |
if (edtIsACCharAtPosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) { |
scrollStep = 2; |
moveStep = 2; |
pMLEditData->editPos += 2; |
} |
else { |
scrollStep = 2; |
moveStep = 1; |
pMLEditData->editPos ++; |
} |
} |
else { |
if (edtIsACCharAtPosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) { |
|
if (edtIsACCharAtPosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->dispPos + 1)) |
scrollStep = 3; |
else |
scrollStep = 2; |
|
moveStep = 2; |
pMLEditData->editPos += 2; |
} |
else { |
scrollStep = 1; |
moveStep = 1; |
pMLEditData->editPos ++; |
} |
} |
|
pMLEditData->caretPos += moveStep; |
if (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
> edtGetOutWidth (hWnd)) { |
bScroll = TRUE; |
pMLEditData->dispPos += scrollStep; |
pMLEditData->caretPos = |
pMLEditData->editPos - pMLEditData->dispPos; |
} |
} |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight (hWnd) |
+ pMLEditData->topMargin); |
|
if (bScroll) |
InvalidateRect (hWnd, NULL, FALSE); |
} |
return 0; |
|
case VK_UP: /* SCANCODE_CURSORBLOCKUP: */ |
{ |
BOOL bScroll = FALSE; |
int newStartPos; |
PLINEDATA temp; |
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
temp = pLineData->previous; |
if(pMLEditData->editLine == 0) |
return 0; |
else if (pMLEditData->editLine == pMLEditData->StartlineDisp) |
{ |
bScroll = TRUE; |
pMLEditData->StartlineDisp--; |
pMLEditData->EndlineDisp--; |
} |
pMLEditData->editLine--; |
|
if( pMLEditData->editPos >= temp->dataEnd ) |
{ |
pMLEditData->editPos = temp->dataEnd; |
pMLEditData->dispPos = 0; |
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp); |
pMLEditData->dispPos = newStartPos; |
pMLEditData->caretPos = pMLEditData->editPos - newStartPos; |
bScroll = TRUE; |
} |
else |
{ |
newStartPos = edtGetOffset(hWnd, pMLEditData,temp, |
pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin); |
if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd, |
pMLEditData->dispPos)) |
{ |
bScroll = TRUE; |
pMLEditData->dispPos--; |
newStartPos = edtGetOffset(hWnd, pMLEditData,temp, |
pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin+GetSysCharWidth(hWnd)/2); |
} |
pMLEditData->editPos = newStartPos + pMLEditData->dispPos; |
pMLEditData->caretPos = newStartPos; |
} |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+ pMLEditData->topMargin); |
if(bScroll) |
InvalidateRect(hWnd,NULL,FALSE); |
} |
break; |
case VK_DOWN: /* SCANCODE_CURSORBLOCKDOWN: */ |
{ |
BOOL bScroll = FALSE; |
int newStartPos; |
PLINEDATA temp; |
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
temp = pLineData->next; |
if(pMLEditData->editLine == pMLEditData->lines-1) |
return 0; |
else if (pMLEditData->editLine == pMLEditData->EndlineDisp) |
{ |
bScroll = TRUE; |
pMLEditData->StartlineDisp++; |
pMLEditData->EndlineDisp++; |
} |
pMLEditData->editLine++; |
|
if( pMLEditData->editPos >= temp->dataEnd ) |
{ |
pMLEditData->editPos = temp->dataEnd; |
pMLEditData->dispPos = 0; |
newStartPos = edtGetStartDispPosAtEnd (hWnd, temp); |
pMLEditData->dispPos = newStartPos; |
pMLEditData->caretPos = pMLEditData->editPos - newStartPos; |
bScroll = TRUE; |
} |
else |
{ |
newStartPos = edtGetOffset(hWnd, pMLEditData,temp, |
pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin); |
if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd, |
pMLEditData->dispPos)) |
{ |
bScroll = TRUE; |
pMLEditData->dispPos--; |
newStartPos = edtGetOffset(hWnd, pMLEditData,temp, |
pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin+GetSysCharWidth(hWnd)/2); |
} |
pMLEditData->editPos = newStartPos + pMLEditData->dispPos; |
pMLEditData->caretPos = newStartPos; |
} |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+ pMLEditData->topMargin); |
if(bScroll) |
InvalidateRect(hWnd,NULL,FALSE); |
|
} |
break; |
case VK_INSERT: /* SCANCODE_INSERT: */ |
dw = GetWindowAdditionalData(hWnd); |
dw ^= EST_REPLACE; |
SetWindowAdditionalData(hWnd,dw); |
break; |
|
case VK_DELETE: /* SCANCODE_REMOVE: */ |
{ |
PLINEDATA temp; |
int leftLen; |
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
if ((GetWindowAdditionalData(hWnd) & EST_READONLY) ){ |
#if 0 /* fix: no ping() */ |
ping (); |
#endif |
return 0; |
} |
temp = pLineData->next; |
if (pLineData->dataEnd == pMLEditData->editPos && temp) |
{ |
if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER) |
{ |
memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,temp->dataEnd); |
pLineData->dataEnd += temp->dataEnd; |
pLineData->buffer[pLineData->dataEnd] = '\0'; |
if(temp->next) |
{ |
pLineData->next = temp->next; |
temp->next->previous = pLineData; |
} |
else |
pLineData->next = NULL; |
free(temp); |
temp = pLineData->next; |
while (temp) |
{ |
temp->lineNO--; |
temp = temp->next; |
} |
if(pMLEditData->lines <= pMLEditData->MaxlinesDisp) |
{ |
pMLEditData->EndlineDisp--; |
pMLEditData->linesDisp--; |
} |
if(pMLEditData->EndlineDisp >= pMLEditData->lines-1) |
{ |
pMLEditData->EndlineDisp--; |
if(pMLEditData->StartlineDisp !=0) |
pMLEditData->StartlineDisp--; |
else |
pMLEditData->linesDisp--; |
} |
pMLEditData->lines--; |
} |
else if (temp->dataEnd > 0) |
{ |
leftLen = LEN_MLEDIT_BUFFER - pLineData->dataEnd; |
memcpy(pLineData->buffer+pLineData->dataEnd,temp->buffer,leftLen); |
pLineData->dataEnd +=leftLen; |
pLineData->buffer[pLineData->dataEnd] = '\0'; |
memcpy(temp->buffer,temp->buffer+leftLen,temp->dataEnd-leftLen); |
temp->dataEnd -=leftLen; |
temp->buffer[temp->dataEnd] = '\0'; |
} |
} |
else if (pMLEditData->editPos != pLineData->dataEnd) |
{ |
if (edtIsACCharAtPosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) |
deleted = 2; |
else |
deleted = 1; |
|
for (i = pMLEditData->editPos; |
i < pLineData->dataEnd - deleted; |
i++) |
pLineData->buffer [i] |
= pLineData->buffer [i + deleted]; |
|
pLineData->dataEnd -= deleted; |
pLineData->buffer[pLineData->dataEnd] = '\0'; |
} |
bChange = TRUE; |
InvalidateRect (hWnd, NULL,FALSE); |
} |
break; |
|
case VK_BACK: /* SCANCODE_BACKSPACE: */ |
{ |
PLINEDATA temp; |
int leftLen,tempEnd; |
if ((GetWindowAdditionalData(hWnd) & EST_READONLY) ){ |
#if 0 /* fix: no Ping() */ |
Ping (); |
#endif |
return 0; |
} |
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
temp = pLineData->previous; |
if (pMLEditData->editPos == 0 && temp) |
{ |
tempEnd = temp->dataEnd; |
if(pLineData->dataEnd + temp->dataEnd <= LEN_MLEDIT_BUFFER) |
{ |
memcpy(temp->buffer+temp->dataEnd,pLineData->buffer,pLineData->dataEnd); |
temp->dataEnd +=pLineData->dataEnd; |
temp->buffer[temp->dataEnd] = '\0'; |
if(pLineData->next) |
{ |
temp->next = pLineData->next; |
pLineData->next->previous = temp; |
} |
else |
temp->next = NULL; |
free(pLineData); |
pLineData = temp; |
temp = temp->next; |
while(temp) |
{ |
temp->lineNO--; |
temp = temp->next; |
} |
if(pMLEditData->StartlineDisp == pMLEditData->editLine |
&& pMLEditData->StartlineDisp != 0) |
{ |
pMLEditData->StartlineDisp--; |
if(pMLEditData->EndlineDisp == pMLEditData->lines) |
pMLEditData->EndlineDisp--; |
} |
if(pMLEditData->lines <= pMLEditData->MaxlinesDisp) |
{ |
pMLEditData->linesDisp--; |
pMLEditData->EndlineDisp--; |
} |
pMLEditData->lines--; |
} |
else if (pLineData->dataEnd > 0) |
{ |
leftLen = LEN_MLEDIT_BUFFER - temp->dataEnd; |
memcpy(temp->buffer+temp->dataEnd,pLineData->buffer,leftLen); |
temp->dataEnd +=leftLen; |
temp->buffer[temp->dataEnd] = '\0'; |
memcpy(pLineData->buffer,pLineData->buffer+leftLen,pLineData->dataEnd-leftLen); |
pLineData->dataEnd -=leftLen; |
pLineData->buffer[pLineData->dataEnd] = '\0'; |
} |
pMLEditData->editLine--; |
pMLEditData->editPos = tempEnd; |
pMLEditData->dispPos = tempEnd; |
|
if (pMLEditData->caretPos == 0 |
&& pMLEditData->editPos != 0) { |
if (edtIsACCharBeforePosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) { |
pMLEditData->dispPos -= 2; |
pMLEditData->caretPos = 2; |
} |
else { |
pMLEditData->dispPos--; |
pMLEditData->caretPos = 1; |
} |
} |
else if (pMLEditData->caretPos < 0) { |
pMLEditData->dispPos = 0; |
pMLEditData->caretPos = 0; |
} |
} |
else if (pMLEditData->editPos != 0 ) |
{ |
if (edtIsACCharBeforePosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) |
deleted = 2; |
else |
deleted = 1; |
|
for (i = pMLEditData->editPos; |
i < pLineData->dataEnd; |
i++) |
pLineData->buffer [i - deleted] |
= pLineData->buffer [i]; |
|
pLineData->dataEnd -= deleted; |
pMLEditData->editPos -= deleted; |
pMLEditData->caretPos -= deleted; |
if (pMLEditData->caretPos == 0 |
&& pMLEditData->editPos != 0) { |
if (edtIsACCharBeforePosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) { |
pMLEditData->dispPos -= 2; |
pMLEditData->caretPos = 2; |
} |
else { |
pMLEditData->dispPos --; |
pMLEditData->caretPos = 1; |
} |
|
} |
} |
bChange = TRUE; |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+ pMLEditData->topMargin); |
InvalidateRect (hWnd, NULL, FALSE); |
} |
break; |
|
default: |
break; |
} |
|
if (bChange) |
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_CHANGE), |
(LPARAM) hWnd); |
return 0; |
} |
|
case WM_CHAR: |
{ |
char charBuffer [2]; |
int i, chars, scrollStep, inserting; |
UINT format; |
|
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
|
pLineData = GetLineData(pMLEditData,pMLEditData->editLine); |
|
if (dwStyle & ES_READONLY) { |
#if 0 /* fix: no Ping() */ |
Ping (); |
#endif |
return 0; |
} |
if (HIBYTE (wParam)) { |
charBuffer [0] = LOBYTE (wParam); |
charBuffer [1] = HIBYTE (wParam); |
chars = 2; |
} |
else { |
charBuffer [0] = LOBYTE (wParam); |
chars = 1; |
} |
|
if (chars == 1) { |
switch (charBuffer [0]) |
{ |
case 0x00: /* NULL */ |
case 0x07: /* BEL */ |
case 0x08: /* BS */ |
case 0x09: /* HT */ |
case 0x0A: /* LF */ |
case 0x0B: /* VT */ |
case 0x0C: /* FF */ |
case 0x0D: /* CR */ |
case 0x1B: /* Escape */ |
return 0; |
} |
} |
if (GetWindowAdditionalData(hWnd) & EST_REPLACE) { |
if (pLineData->dataEnd == pMLEditData->editPos) |
inserting = chars; |
else if (edtIsACCharAtPosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->editPos)) { |
if (chars == 2) |
inserting = 0; |
else |
inserting = -1; |
} |
else { |
if (chars == 2) |
inserting = 1; |
else |
inserting = 0; |
} |
} |
else |
inserting = chars; |
|
/* check space */ |
if (pLineData->dataEnd + inserting > pMLEditData->totalLen) { |
#if 0 /* fix no ping */ |
Ping (); |
#endif |
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_MAXTEXT), |
(LPARAM) hWnd); |
return 0; |
} |
else if ((pMLEditData->hardLimit >= 0) |
&& ((pLineData->dataEnd + inserting) |
> pMLEditData->hardLimit)) { |
#if 0 /* fix no ping */ |
Ping (); |
#endif |
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_MAXTEXT), |
(LPARAM) hWnd); |
return 0; |
} |
if (inserting == -1) { |
for (i = pMLEditData->editPos; i < pLineData->dataEnd-1; i++) |
pLineData->buffer [i] = pLineData->buffer [i + 1]; |
} |
else if (inserting > 0) { |
for (i = pLineData->dataEnd + inserting - 1; |
i > pMLEditData->editPos + inserting - 1; |
i--) |
pLineData->buffer [i] |
= pLineData->buffer [i - inserting]; |
} |
for (i = 0; i < chars; i++) |
pLineData->buffer [pMLEditData->editPos + i] |
= charBuffer [i]; |
|
pMLEditData->editPos += chars; |
pMLEditData->caretPos += chars; |
pLineData->dataEnd += inserting; |
pLineData->buffer[pLineData->dataEnd] = '\0'; |
if (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
> edtGetOutWidth (hWnd)) |
{ |
if (edtIsACCharAtPosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->dispPos)) |
scrollStep = 2; |
else { |
if (chars == 2) { |
if (edtIsACCharAtPosition (pLineData->buffer, |
pLineData->dataEnd, |
pMLEditData->dispPos + 1)) |
scrollStep = 3; |
else |
scrollStep = 2; |
} |
else |
scrollStep = 1; |
} |
|
pMLEditData->dispPos += scrollStep; |
|
pMLEditData->caretPos = |
pMLEditData->editPos - pMLEditData->dispPos; |
|
} |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+ pMLEditData->topMargin); |
InvalidateRect (hWnd, NULL,FALSE); |
format = DT_NOPREFIX; |
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (GetDlgCtrlID(hWnd), EN_CHANGE), |
(LPARAM) hWnd); |
} |
return 0; |
|
case WM_GETTEXTLENGTH: |
{ |
PLINEDATA temp; |
int lineNO = (int)wParam; |
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
temp = pMLEditData->head; |
while(temp) |
{ |
if (temp->lineNO == lineNO) |
return temp->dataEnd; |
temp = temp->next; |
} |
return -1; |
} |
case WM_GETTEXT: |
{ |
PLINEDATA temp; |
int len,total = 0,lineNO; |
char * buffer = (char*)lParam; |
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
len = (int)wParam; |
lineNO = (int)wParam; |
temp = pMLEditData->head; |
while (temp && total + temp->dataEnd < len) |
{ |
memcpy(buffer+total,temp->buffer,temp->dataEnd); |
total += temp->dataEnd; |
temp = temp->next; |
} |
|
} |
return 0; |
/* can i add it to message define ? */ |
#if 0 |
case WM_GETLINETEXT: |
{ |
PLINEDATA temp; |
char* buffer = (char*)lParam; |
int lineNO,len; |
|
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
lineNO = (int)wParam; |
temp = GetLineData(pMLEditData,lineNO); |
if(temp) |
{ |
len = min ((int)wParam, temp->dataEnd); |
memcpy (buffer, temp->buffer,len); |
buffer [len] = '\0'; |
return 0; |
} |
return -1; |
} |
break; |
case WM_SETTEXT: |
{ |
MLEditInitBuffer(pMLEditData,(char *)lParam); |
} |
return 0; |
#endif |
/* can i add it to message defined? */ |
#if 0 |
case WM_SETLINETEXT: |
{ |
int len,lineNO; |
PLINEDATA temp; |
|
if (dwStyle & ES_READONLY) |
return 0; |
|
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
|
len = strlen ((char*)lParam); |
lineNO = (int)wParam; |
temp = pMLEditData->head; |
len = min (len, pMLEditData->totalLen); |
|
if (pMLEditData->hardLimit >= 0) |
len = min (len, pMLEditData->hardLimit); |
while (temp) |
{ |
if(temp->lineNO == lineNO) |
{ |
temp->dataEnd = len; |
memcpy (temp->buffer, (char*)lParam, len); |
} |
temp = temp->next; |
} |
pMLEditData->editPos = 0; |
pMLEditData->caretPos = 0; |
pMLEditData->dispPos = 0; |
InvalidateRect (hWnd, NULL, FALSE); |
} |
return 0; |
#endif |
case WM_LBUTTONDBLCLK: |
break; |
|
case WM_LBUTTONDOWN: |
{ |
int newOff,lineNO; |
PLINEDATA temp; |
BOOL bScroll = FALSE; |
|
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
lineNO = edtGetLineNO (hWnd,pMLEditData, HIWORD (lParam)); |
if ( lineNO < 0 ) |
return 0; |
lineNO += pMLEditData->StartlineDisp; |
if (lineNO <= pMLEditData->EndlineDisp && lineNO <= pMLEditData->lines-1 ) |
{ |
temp = GetLineData(pMLEditData,lineNO); |
newOff = edtGetOffset (hWnd,pMLEditData,temp, LOWORD (lParam)); |
if(!edtIsACCharFromBegin(temp->buffer,temp->dataEnd,pMLEditData->dispPos)) |
{ |
bScroll = TRUE; |
pMLEditData->dispPos--; |
newOff = edtGetOffset (hWnd,pMLEditData,temp, LOWORD(lParam)+GetSysCharWidth(hWnd)/2); |
} |
if (newOff != pMLEditData->caretPos || lineNO != pMLEditData->editLine) { |
pMLEditData->editLine = temp->lineNO; |
pMLEditData->editPos = newOff +pMLEditData->dispPos; |
pMLEditData->caretPos = newOff; |
SetCaretPos (pMLEditData->caretPos * GetSysCharWidth (hWnd) |
+ pMLEditData->leftMargin, |
(pMLEditData->editLine - pMLEditData->StartlineDisp) * GetSysCharHeight(hWnd) |
+ pMLEditData->topMargin); |
} |
if(bScroll) |
InvalidateRect(hWnd,NULL,FALSE); |
} |
} |
break; |
|
case WM_LBUTTONUP: |
break; |
|
case WM_MOUSEMOVE: |
break; |
|
case WM_GETDLGCODE: |
return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS; |
|
case EM_SETREADONLY: |
if (wParam) |
IncludeWindowStyle(hWnd,ES_READONLY); |
else |
ExcludeWindowStyle(hWnd,ES_READONLY); |
return 0; |
|
case EM_SETPASSWORDCHAR: |
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
|
if (pMLEditData->passwdChar != (int)wParam) { |
if (dwStyle & ES_PASSWORD) { |
pMLEditData->passwdChar = (int)wParam; |
InvalidateRect (hWnd, NULL, TRUE); |
} |
} |
return 0; |
|
case EM_GETPASSWORDCHAR: |
{ |
int* passwdchar; |
|
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
passwdchar = (int*) lParam; |
|
*passwdchar = pMLEditData->passwdChar; |
} |
return 0; |
|
case EM_LIMITTEXT: |
{ |
int newLimit = (int)wParam; |
|
if (newLimit >= 0) { |
pMLEditData = (PMLEDITDATA)GetWindowAdditionalData2(hWnd); |
if (pMLEditData->totalLen < newLimit) |
pMLEditData->hardLimit = -1; |
else |
pMLEditData->hardLimit = newLimit; |
} |
} |
return 0; |
|
default: |
return DefWindowProc (hWnd, message, wParam, lParam); |
break; |
} |
|
return 0; /* !DefaultControlProc (hWnd, message, wParam, lParam); */ |
} |
|
/winlib/fastfill.c
0,0 → 1,19
#include "windows.h" |
#include "wintools.h" |
/* |
* WIN Draw Library |
* Fast fill rectangle |
*/ |
|
/* |
* fast fill background (works with non-dithered colors only) |
*/ |
void WINAPI |
FastFillRect(HDC hdc,LPRECT lprect,COLORREF cr) |
{ |
COLORREF crOld; |
|
crOld = SetBkColor( hdc, cr); |
ExtTextOut( hdc, 0, 0, ETO_OPAQUE | ETO_CLIPPED, lprect, NULL, 0, NULL); |
SetBkColor( hdc, crOld); |
} |
/winlib/insetr.c
0,0 → 1,14
#include "windows.h" |
#include "wintools.h" |
/* |
* WIN Draw Library |
*/ |
|
void WINAPI |
InsetR(LPRECT lprc,int h,int v) |
{ |
lprc->top += v; |
lprc->left += h; |
lprc->right -= 2*h-1; |
lprc->bottom -= 2*v-1; |
} |
/winlib/combobox.c
0,0 → 1,1785
/*-------------------------------------------------------------------------- |
** ComboBox.c Twin From: Twin/controls |
** |
** |
**------------------------- < License Information > ------------------------ |
** |
** This file was originally a part of Willows TWIN. Willows |
** TWIN was released under a Library GPL (LGPL). This permits |
** redistribution of this source code, provided that the full |
** TWIN license is in effect, and provided that all modifications |
** to this source code are made publicly available. |
** Please refer to Willows software (www.willows.com) or |
** LICENSE for full information. |
** |
** Under Twine, this file is also protected by an LGPL. Please |
** see LICENSE for full details on this license. |
** |
** |
** Copyright 1997 Willows Software, Inc. |
**------------------------ < File Content Description > -------------------- |
** |
** Module: controls/ComboBox.c |
** |
** Description: |
** |
** |
** Functions defined: |
** |
**------------------------- < Revision Information > ----------------------- |
** |
** Full Revision history at bottom of file |
** |
**--------------------------------------------------------------------------*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include "windows.h" |
#include "windowsx.h" |
|
#define WinMalloc(n) malloc((n)) |
#define WinFree(p) free(p) |
|
#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp) |
#define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp) |
#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp) |
#define GET_WM_COMMAND_MPS(id, hwnd, cmd) \ |
(WPARAM)MAKELONG(id, cmd), (LONG)(hwnd) |
#define LOSHORT(x) (short int)LOWORD(x) |
#define Edit_SetSel(hwndCtl, ichStart, ichEnd) ((void)SendMessage((hwndCtl), EM_SETSEL, (ichStart), (ichEnd))) |
|
|
typedef struct { |
HFONT hFont; /* hFont used */ |
HWND hWndParent; /* parent window */ |
UINT nID; /* control ID */ |
WORD wStateFlags; /* combobox state flags */ |
UINT wStyle; /* this is a copy of LOWORD(style) */ |
BOOL bExtended; /* extended UI flag */ |
BOOL bRedraw; /* MiD - redraw flag, draw only if it's 1 */ |
HWND EditControl; /* edit/static control hWnd */ |
HWND ListBoxControl; /* listbox control hWnd */ |
RECT ButtonRect; /* local button rect (client) */ |
RECT ListBoxRect; /* listbox rect (screen) */ |
UINT uHeight; /* height of the normal state */ |
WNDPROC lpfnOldStatic; /* previous static wndproc */ |
UINT nListItems; /* ecw */ |
} COMBOBOX; |
|
#define CWD_LPCBDATA 0 |
#define CBC_EDITID 1 |
|
#define CSF_CAPTUREACTIVE 0x0001 |
#define CSF_LOCALBUTTONDOWN 0x0002 |
#define CSF_BUTTONDOWN 0x0004 |
#define CSF_LBOXBUTTONDOWN 0x0008 |
#define CSF_FOCUS 0x0010 /* MiD */ |
#define CSF_HASDROPPED 0x0020 /* weav */ |
|
#define SET_STATE(lp, wMask) (lp->wStateFlags |= (wMask)) |
#define CLEAR_STATE(lp, wMask) (lp->wStateFlags &= ~(wMask)) |
#define IS_SET(lp, wMask) (lp->wStateFlags & (wMask)) |
|
#define BOWNERDRAW(l) ((l)->wStyle & (CBS_OWNERDRAWFIXED|CBS_OWNERDRAWVARIABLE)) |
|
/********************************************** |
Styles: |
|
CBS_AUTOHSCROLL passed to the edit control |
CBS_DISABLENOSCROLL passed to the listbox control |
CBS_DROPDOWN |
CBS_DROPDOWNLIST |
CBS_HASSTRINGS passed to the listbox control |
CBS_NOINTEGRALHEIGHT passed to the listbox control |
CBS_OEMCONVERT passed to the edit control |
CBS_OWNERDRAWFIXED passed to the listbox control |
CBS_OWNERDRAWVARIABLE passed to the listbox control |
CBS_SIMPLE TODO |
CBS_SORT passed to the listbox control |
|
WS_VSCROLL passed to the listbox control |
|
*********************************************/ |
|
/********************************************** |
CBN_xxx messages to be added |
|
from mouse tracking... |
CBN_SELENDCANCEL TODO |
CBN_SELENDOK TODO |
|
*********************************************/ |
|
/* imported stuff */ |
#if 1 |
void |
Draw3DButtonRect(HDC hDC, HPEN hPenHigh, HPEN hPenShadow, |
RECT rc, BOOL fClicked) |
{ |
HPEN hPenOld; |
POINT lpt[6]; |
|
POINT p3[3]; |
int shrink=1; |
|
hPenOld = SelectObject(hDC, hPenShadow); |
if (fClicked) { |
lpt[0].x = lpt[1].x = rc.left; |
lpt[1].y = lpt[2].y = rc.top; |
lpt[2].x = rc.right-1; |
lpt[0].y = rc.bottom-1; |
Polyline(hDC,lpt,3); |
} |
else { |
lpt[0].x = lpt[1].x = rc.right-1; |
lpt[0].y = rc.top; |
lpt[1].y = lpt[2].y = rc.bottom-1; |
lpt[2].x = rc.left; |
lpt[3].x = rc.left+1; |
lpt[3].y = lpt[4].y = rc.bottom-2; |
lpt[4].x = lpt[5].x = rc.right-2; |
lpt[5].y = rc.top+1; |
Polyline(hDC,lpt,6); |
|
SelectObject(hDC, hPenHigh); |
lpt[0].x = rc.right-1; |
lpt[0].y = lpt[1].y = rc.top; |
lpt[1].x = lpt[2].x = rc.left; |
lpt[2].y = rc.bottom-1; |
lpt[3].x = lpt[4].x = rc.left+1; |
lpt[3].y = rc.bottom-2; |
lpt[4].y = lpt[5].y = rc.top+1; |
lpt[5].x = rc.right-2; |
Polyline(hDC,lpt,6); |
} |
|
SelectObject(hDC,GetStockObject(BLACK_BRUSH)); |
/* down */ |
p3[0].x= rc.left + ((rc.right-rc.left)/2) - 1; |
p3[0].y= rc.bottom - 4 - shrink; |
p3[1].x= rc.left + 2 + shrink - 1; |
p3[1].y= rc.bottom-(rc.bottom-rc.top) + 2 + shrink; |
p3[2].x= rc.left + ((rc.right-rc.left)-4) - shrink; |
p3[2].y= rc.bottom-(rc.bottom-rc.top) + 2 + shrink; |
Polygon(hDC,p3,3); |
|
SelectObject(hDC,hPenOld); |
} |
#endif |
|
#if 0 /* jmt: fix: no COMBOLBOX */ |
extern LRESULT DefLISTBOXProc(HWND, UINT, WPARAM, LPARAM); |
extern LRESULT ListboxCtrlProc(HWND, UINT, WPARAM, LPARAM); |
#endif |
|
#if 0 |
static HPEN GetSysColorPen(int color) |
{ |
return NULL; |
} |
static HBRUSH GetSysColorBrush(int color) |
{ |
return NULL; |
} |
#endif |
|
typedef HWND HWND32; |
|
#if 0 /* jmt: fix: no ownerdraw */ |
typedef HANDLE HCLASS32; |
static HCLASS32 FindClass(LPCSTR str, HINSTANCE hInstance) |
{ |
return NULL; |
} |
#endif |
|
#if 0 /* jmt: fix: no scrollbar */ |
static HWND TWIN_ConvertToSysScroll(HWND hwnd, BOOL status, LPPOINT pp) |
{ |
return NULL; |
} |
#endif |
extern HWND listwp; |
static HWND WindowFromPoint(POINT pt) |
{ |
HWND wp,wp1; |
int dx,dy,dx1,dy1; |
#if 0 |
return NULL; /* fix!! */ |
#else |
wp1=NULL; |
switch(sizeof(dx)) |
{ |
case 4: |
dx=0x7fffffff; |
dy=0x7fffffff; |
break; |
case 2: |
dx=0x7fff; |
dy=0x7fff; |
break; |
} |
for(wp=listwp; wp; wp=wp->next) |
{ |
if (wp->winrect.left <= pt.x && pt.x <= wp->winrect.right) |
{ |
dx1=(wp->winrect.right-pt.x); |
if (dx1<dx) |
{ |
wp1=wp; |
dx=dx1; |
} |
dx1=(pt.x-wp->winrect.left); |
if (dx1<dx) |
{ |
wp1=wp; |
dx=dx1; |
} |
} |
if (wp->winrect.top <= pt.y && pt.y <= wp->winrect.bottom) |
{ |
dy1=(wp->winrect.bottom-pt.y); |
if (dy1<dy) |
{ |
wp1=wp; |
dy=dy1; |
} |
dy1=(pt.y-wp->winrect.top); |
if (dy1<dy) |
{ |
wp1=wp; |
dy=dy1; |
} |
} |
} |
#endif |
return wp1; |
} |
|
/* internal stuff */ |
static void CBoxDrawButton(HWND,UINT,COMBOBOX *); |
static void CBoxSendMouseToLBox(COMBOBOX *, UINT, WPARAM, POINT); |
static void CBoxCapture(HWND, WORD); |
static void CBoxDrawEdit(COMBOBOX *, HWND, UINT); |
static void CBoxDrawStatic(COMBOBOX *, HWND, UINT); /* MiD */ |
|
/* handle specific CB messages */ |
static LRESULT DefCBProc(HWND , UINT , WPARAM , LPARAM ); |
|
#if 0 /* jmt: fix: no ownerdraw */ |
static WNDPROC lpComboBinToNat = 0; |
#endif |
|
static LRESULT CALLBACK |
DefComboboxProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); |
|
int WINAPI MwRegisterComboboxControl(HINSTANCE hInstance) |
{ |
WNDCLASS wc; |
|
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS; |
wc.lpfnWndProc = (WNDPROC)DefComboboxProc; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 0; |
wc.hInstance = hInstance; |
wc.hIcon = NULL; |
wc.hCursor = 0; |
wc.hbrBackground= GetStockObject(WHITE_BRUSH); |
wc.lpszMenuName = NULL; |
wc.lpszClassName= "COMBOBOX"; |
|
return RegisterClass(&wc); |
} |
|
static LRESULT CALLBACK |
DefComboboxProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) |
{ |
PAINTSTRUCT ps; |
HDC hDC; |
TEXTMETRIC tm; |
#if 0 /* jmt: fix: no ownerdraw */ |
MEASUREITEMSTRUCT mis; |
#endif |
COMBOBOX *lp = (COMBOBOX *)NULL; |
LRESULT rc; |
HINSTANCE hInst; |
POINT cp,cpScreen,pp; |
UINT uiKey; |
LPCREATESTRUCT lpcs; |
#if 1 /* jmt: fix: no WM_WINDOWPOSCHANGING */ |
LPWINDOWPOS lpwp; |
#endif |
#if 0 /* jmt: fix: no ownerdraw */ |
HCLASS32 hComboClass32; |
LPMEASUREITEMSTRUCT lpmis; |
LPDRAWITEMSTRUCT lpdis; |
LPDELETEITEMSTRUCT lpdlis; |
#endif |
DWORD dwStyle,dwExStyle; |
WORD wEditWidth = 0,wEditHeight; |
WORD wCBN; |
#if 0 /* jmt: fix: no WM_SETFONT/WM_GETFONT */ |
RECT rcClient; |
#endif |
|
rc = CB_OKAY; |
if ((uMsg != WM_CREATE/*WM_NCCREATE*/) && /*(uMsg != WM_CONVERT) &&*/ |
!(lp = (COMBOBOX *)hWnd->userdata/*GetWindowLong(hWnd,CWD_LPCBDATA)*/)) |
return rc; |
|
switch(uMsg) { |
#if 0 |
case WM_SIZE: |
case WM_ENABLE: |
case WM_LBUTTONDBLCLK: |
case WM_COMPAREITEM: |
case WM_CUT: |
case WM_CLEAR: |
#endif |
|
case WM_SETFOCUS: |
SET_STATE(lp, CSF_FOCUS); |
if ((lp->wStyle & 0x0F) == CBS_DROPDOWNLIST) |
{ |
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0L); |
CBoxDrawStatic(lp, hWnd, uiKey); |
} |
if (lp->EditControl) |
{ |
SetFocus(lp->EditControl); |
} |
break; |
|
case WM_KILLFOCUS: |
CLEAR_STATE(lp, CSF_FOCUS); |
if ((lp->wStyle & 0x0F) == CBS_DROPDOWNLIST) |
{ |
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0L); |
CBoxDrawStatic(lp, hWnd, uiKey); |
} |
/* |
** Hide listbox when loosing focus to window other than |
** our own listbox... When wParam == 0 we "loose" the focus |
** to the scrollbar in a listbox! |
*/ |
if ((lp->wStyle & 0x0F) != CBS_SIMPLE && wParam != (WPARAM)lp->ListBoxControl && wParam != 0) |
SendMessage(hWnd, CB_SHOWDROPDOWN, 0, 0L); |
fprintf(stderr," 385: WM_KILLFOCUS\n"); |
break; |
|
#if 0 /* jmt: fix: no WM_KEYDOWN */ |
case WM_KEYDOWN: /* MiD 08/14/95 */ |
/* |
** We have to process this message in order to show |
** current selection in a static control for certain |
** keys. This doesn't affect combobox with an edit |
** control, since the edit traps all key messages. |
*/ |
{ |
int nCur = SendMessage(lp->ListBoxControl, LB_GETCURSEL,0, 0L); |
int nPrevCur = nCur; |
int nCount = SendMessage(lp->ListBoxControl, LB_GETCOUNT, 0, 0L); |
|
if (nCount == 0) |
break; |
|
switch(wParam) |
{ |
case VK_HOME: |
nCur = 0; |
break; |
|
case VK_END: |
nCur = nCount - 1; |
break; |
|
case VK_UP: |
nCur--; |
break; |
|
case VK_DOWN: |
nCur++; |
break; |
|
default: |
return 0L; |
} |
|
if (nCur >= nCount) |
nCur = nCount - 1; |
if (nCur < 0) |
nCur = 0; |
|
SendMessage(lp->ListBoxControl, LB_SETCURSEL, nCur, 0L); |
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID, hWnd, CBN_SELCHANGE)); |
if (nCur != nPrevCur) |
/* ecw */ SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID, hWnd, CBN_SELENDOK)); |
InvalidateRect(hWnd, NULL, 1); |
break; |
} |
#endif /* WM_KEYDOWN */ |
|
case WM_CHAR: |
{ |
int nNewCur; |
int nOldCur; |
|
if (lp->EditControl) |
{ |
SendMessage(lp->EditControl, uMsg, wParam, lParam); |
} |
else { |
nOldCur = SendMessage(lp->ListBoxControl, LB_GETCURSEL,0, 0L); |
SendMessage(lp->ListBoxControl, uMsg, wParam, lParam); |
nNewCur = SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0L); |
if (nNewCur != nOldCur) |
{ |
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID, hWnd, CBN_SELCHANGE)); |
InvalidateRect(hWnd, NULL, 1); |
} |
} |
break; |
} |
|
#if 0 /* jmt: fix: no WM_SETREDRAW */ |
case WM_SETREDRAW: |
lp->bRedraw = wParam; |
if (lp->EditControl) |
SendMessage(lp->EditControl, WM_SETREDRAW, wParam, lParam); |
if (lp->ListBoxControl) |
SendMessage(lp->ListBoxControl, WM_SETREDRAW, wParam, lParam); |
break; |
#endif |
case WM_CREATE: /*WM_NCCREATE:*/ |
lp = (COMBOBOX *)WinMalloc(sizeof(COMBOBOX)); |
memset((LPSTR)lp,'\0',sizeof(COMBOBOX)); |
|
/* save ptr to internal structure */ |
hWnd->userdata=(DWORD)lp; /* -SetWindowLong(hWnd, CWD_LPCBDATA, (LONG) lp); */ |
|
/* this is for CreateWindow calls */ |
hInst = NULL; /* -GetWindowInstance(hWnd); */ |
|
/* fill in the internal structure */ |
lpcs = (LPCREATESTRUCT)lParam; |
lp->bRedraw = 1; |
lp->wStateFlags = 0; |
lp->wStyle = (UINT)LOWORD(lpcs->style); |
if (!BOWNERDRAW(lp)) |
lp->wStyle |= CBS_HASSTRINGS; |
lp->bExtended = TRUE; |
lp->hFont = 0; |
lp->hWndParent = lpcs->hwndParent; |
lp->nID = (UINT)lpcs->hMenu; |
|
#if 0 /* jmt: fix: no ownerdraw */ |
/* calc the height of the edit/static control */ |
if (0) /* (BOWNERDRAW(lp)) */ |
{ |
mis.CtlType = ODT_COMBOBOX; |
mis.CtlID = (UINT)lpcs->hMenu; |
mis.itemID = (UINT)-1; |
mis.itemData = 0L; |
SendMessage(lpcs->hwndParent, WM_MEASUREITEM, (WPARAM)lpcs->hMenu, (LPARAM)&mis); |
/*** wEditHeight = (WORD)mis.itemHeight + 2; ***/ |
} |
#endif /* ownerdraw */ |
|
/* get system font dimensions */ |
hDC = GetDC((HWND)0); |
GetTextMetrics(hDC,&tm); |
ReleaseDC((HWND)0,hDC); |
|
/* allow different fonts to fit, don't hard code */ |
/* otherwise big fonts won't fit. */ |
/*****wEditHeight = ((tm.tmHeight - tm.tmInternalLeading)*7)/4;*****/ |
wEditHeight = tm.tmHeight + tm.tmInternalLeading * 3; |
|
lp->uHeight = (UINT)wEditHeight; |
|
if ((lp->wStyle & 0x0F) != CBS_SIMPLE) |
{ |
lp->ButtonRect.top = 0; |
lp->ButtonRect.left = lpcs->cx - 1 - GetSystemMetrics(SM_CXVSCROLL); |
lp->ButtonRect.right = lpcs->cx; |
lp->ButtonRect.bottom = wEditHeight; |
/* for CBS_DROPDOWN/DROPDOWNLIST resize the window */ |
SetWindowPos(hWnd, 0, |
0, 0, lpcs->cx, (int)wEditHeight, |
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW); |
} |
else SetRectEmpty(&lp->ButtonRect); |
|
if ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST) |
{ /* EDIT field - calc edit control style */ |
dwStyle = WS_CHILD | WS_VISIBLE | WS_BORDER; |
if (lp->wStyle & CBS_AUTOHSCROLL) |
dwStyle |= ES_AUTOHSCROLL; |
if (lp->wStyle & CBS_OEMCONVERT) |
dwStyle |= ES_OEMCONVERT; |
|
if ((lp->wStyle & 0x0F) == CBS_SIMPLE) |
{ |
fprintf(stderr," 528: wEditWidth = lpcs->cx=%d\n",lpcs->cx); |
wEditWidth = lpcs->cx; |
} |
else /* ?if ((lp->wStyle & 0xf) == CBS_DROPDOWN) */ |
{ |
fprintf(stderr," 533: wEditWidth = lp->ButtonRect.left - 5=%d;\n",lp->ButtonRect.left - 5); |
wEditWidth = lp->ButtonRect.left - 5; |
} |
/* create edit control */ |
lp->EditControl = CreateWindow("EDIT", NULL, dwStyle, |
0, 0, wEditWidth, wEditHeight, |
hWnd, (HMENU)CBC_EDITID, |
hInst,(LPVOID)NULL); |
} |
else /* CBS_DROPDOWN -- static instead of edit */ |
lp->EditControl = 0; |
|
/* listbox style */ |
/* jmt: fix: no WS_EX_SAVEBITS, WS_EX_NOCAPTURE, WS_EX_POPUPMENU */ |
dwExStyle = 0L; /* WS_EX_SAVEBITS | WS_EX_NOCAPTURE | WS_EX_POPUPMENU; */ |
dwStyle = WS_BORDER | LBS_NOTIFY ; /* | LBS_COMBOLBOX; */ |
if ((lp->wStyle & 0xf) == CBS_SIMPLE) |
dwStyle |= WS_VISIBLE | WS_CHILD; |
else |
dwStyle |= WS_POPUP; |
#if 0 |
if (lp->wStyle & CBS_DISABLENOSCROLL) |
dwStyle |= LBS_DISABLENOSCROLL; |
#endif |
if (lp->wStyle & CBS_HASSTRINGS) |
dwStyle |= LBS_HASSTRINGS; |
if (lp->wStyle & CBS_NOINTEGRALHEIGHT) |
dwStyle |= LBS_NOINTEGRALHEIGHT; |
if (lp->wStyle & CBS_OWNERDRAWFIXED) |
dwStyle |= LBS_OWNERDRAWFIXED; |
if (lp->wStyle & CBS_OWNERDRAWVARIABLE) |
dwStyle |= LBS_OWNERDRAWVARIABLE; |
if (lp->wStyle & CBS_SORT) |
dwStyle |= LBS_SORT; |
if (lpcs->style & WS_VSCROLL) |
dwStyle |= WS_VSCROLL; |
|
/* calc listbox dimensions and position */ |
if ((lp->wStyle & 0xf) == CBS_SIMPLE) { |
lp->ListBoxRect.left = 5; |
lp->ListBoxRect.top = wEditHeight - 1; |
lp->ListBoxRect.right = lpcs->cx; |
lp->ListBoxRect.bottom = lpcs->cy - 2; |
} else { |
lp->ListBoxRect.left = lpcs->x; |
lp->ListBoxRect.right = lp->ListBoxRect.left + lpcs->cx - 1; |
lp->ListBoxRect.top = lpcs->y + wEditHeight - 1; |
lp->ListBoxRect.bottom = lp->ListBoxRect.top + lpcs->cy + 1; |
if ((lp->wStyle & 0x0F) == CBS_DROPDOWN) { |
lp->ListBoxRect.left += 5; |
} |
} |
#ifdef LATER |
cp.x = ((lp->wStyle & 0xf) == CBS_DROPDOWNLIST)?0:5; |
cp.y = wEditHeight - 1; |
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
ClientToScreen(hWnd,&cp); |
lp->ListBoxRect.left = cp.x; |
lp->ListBoxRect.top = cp.y; |
lp->ListBoxRect.right = cp.x + lpcs->cx; |
if ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST) |
lp->ListBoxRect.right -= 5; |
lp->ListBoxRect.bottom = lp->ListBoxRect.top + lpcs->cy - |
wEditHeight + 1; |
#endif |
|
lp->ListBoxControl = CreateWindowEx(dwExStyle,"LISTBOX",/*"COMBOLBOX",*/ |
NULL, dwStyle, |
lp->ListBoxRect.left, lp->ListBoxRect.top, |
lp->ListBoxRect.right - lp->ListBoxRect.left, |
lp->ListBoxRect.bottom - lp->ListBoxRect.top, |
hWnd, 0, |
hInst,(LPVOID)NULL); |
#if MWCLIENT |
#if 0 |
GrLowerWindow(lp->ListBoxControl->wid); |
#endif |
MwLowerWindow(lp->ListBoxControl); |
#endif |
#ifdef LATER |
/* Microsoft Word 6.0 wants to see COMBOLBOX on top */ |
/* of Z-order... */ |
if (dwStyle & WS_POPUP) |
{ |
SetWindowPos(lp->ListBoxControl, HWND_TOP, |
0, 0, 0, 0, |
SWP_NOREDRAW | SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE); |
} |
#endif |
|
#if 0 /* jmt: fix: no HWND32(LPWININFO) */ |
/* physically expand client window, |
if there is a scroll style |
*/ |
if (lpcs->style & WS_VSCROLL) |
{ |
HWND32 hWnd32 = GETHWND32(hWnd); |
|
SetRectEmpty(&hWnd32->rcNC); |
|
hWnd32->wWidth = (WORD) hWnd32->rWnd.right-hWnd32->rWnd.left; |
hWnd32->wHeight = (WORD)hWnd32->rWnd.bottom-hWnd32->rWnd.top; |
RELEASEWININFO(hWnd32); |
} |
#endif |
/* |
** Finally turn off border drawing and WM_?SCROLL styles to prevent creation |
** of system scrollbars. |
*/ |
dwStyle = GetWindowLong(hWnd, GWL_STYLE); |
dwStyle &= ~(WS_VSCROLL | WS_HSCROLL | WS_BORDER | WS_DLGFRAME | WS_THICKFRAME); |
SetWindowLong(hWnd, GWL_STYLE, dwStyle); |
lp->nListItems = 0; |
return TRUE; |
|
case WM_DESTROY: /*WM_NCDESTROY:*/ |
if (IsWindow(lp->ListBoxControl)) |
DestroyWindow(lp->ListBoxControl); |
if (IsWindow(lp->EditControl)) |
DestroyWindow(lp->EditControl); |
WinFree((LPSTR)lp); |
return 0L; |
|
case WM_GETDLGCODE: |
return (LRESULT)(DLGC_WANTCHARS|DLGC_WANTARROWS); |
|
/* jmt: twine->mwin bug fixed: */ |
case WM_NCLBUTTONDOWN: /* jmt: a must */ |
#if 0 /* twine->mw buggy */ |
case WM_LBUTTONDOWN: |
#endif |
if ((lp->wStyle & 0xf) == CBS_SIMPLE) |
break; |
|
cp.x = (int)(short)LOWORD(lParam); |
cp.y = (int)(short)HIWORD(lParam); |
#if 1 /* WM_NCLBUTTONDOWM: */ |
ScreenToClient(hWnd, &cp); /* jmt: a must */ |
#endif |
if (!IS_SET(lp, CSF_CAPTUREACTIVE)) /* no listbox yet */ |
{ |
/* click on a button or anywhere if it's dropdown combo */ |
if (PtInRect(&lp->ButtonRect, cp) || |
(lp->wStyle & 0x0F) == CBS_DROPDOWNLIST) |
{ |
if (PtInRect(&lp->ButtonRect, cp)) |
CBoxDrawButton(hWnd, 1, lp); |
|
cp.x = ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST) ? 5 : 0; |
cp.y = lp->uHeight - 1; |
|
ClientToScreen(hWnd, &cp); |
|
fprintf(stderr," (1)lp->ListBoxRect:(%d,%d,%d,%d)\n", |
lp->ListBoxRect.left, |
lp->ListBoxRect.top, |
lp->ListBoxRect.right, |
lp->ListBoxRect.bottom); |
|
OffsetRect(&lp->ListBoxRect, cp.x - lp->ListBoxRect.left, cp.y - lp->ListBoxRect.top); |
|
fprintf(stderr," (2)lp->ListBoxRect:(%d,%d,%d,%d)\n", |
lp->ListBoxRect.left, |
lp->ListBoxRect.top, |
lp->ListBoxRect.right, |
lp->ListBoxRect.bottom); |
|
SetWindowPos(lp->ListBoxControl, HWND_TOP, /*0,*/ |
cp.x, cp.y, 0, 0, |
SWP_NOSIZE | /*SWP_NOZORDER |*/ SWP_NOACTIVATE); |
|
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_DROPDOWN)); |
/* ECW added following conditional... 4/4/96 */ |
/* JMT following conditional is a must for microwindows 8/14/2k */ |
if (1) /* -(!IS_SET(lp, CSF_HASDROPPED)) jmt: a must */ |
{ |
/* ??first time it drops down, size it to hold all items?? */ |
|
int nitems = SendMessage(lp->ListBoxControl,LB_GETCOUNT,0,0L); |
#if 0 |
/* resize if too small, in this case, also do too long */ |
if (lp->ListBoxRect.bottom - lp->ListBoxRect.top < |
((lp->uHeight-2) * nitems)) |
{ |
#endif |
nitems = (nitems > 12 ? 12 : nitems); /* a dozen, max */ |
|
#if 0 /* twine->mw buggy? */ |
lp->ListBoxRect.bottom = |
lp->ListBoxRect.top + ((lp->uHeight-2) * nitems); |
#endif |
fprintf(stderr," (2.5)lp->ListBoxRect:(%d,%d,%d,%d)\n", |
lp->ListBoxRect.left, |
lp->ListBoxRect.top, |
lp->ListBoxRect.right, |
lp->ListBoxRect.bottom); |
|
/* jmt: twine->mwin bug fixed: */ |
fprintf(stderr," 706: fixed: SetWindowPos(lp->ListBoxControl,,%d,%d,...)\n",cp.x,cp.y); |
#if 0 /* twine->mwin bug */ |
SetWindowPos(lp->ListBoxControl,HWND_TOP,0,0, |
lp->ListBoxRect.right - lp->ListBoxRect.left, |
lp->ListBoxRect.bottom - lp->ListBoxRect.top, |
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); |
#else /* jmt: twine->mwin bug fixed: */ |
SetWindowPos(lp->ListBoxControl,HWND_TOP,cp.x,cp.y, |
lp->ListBoxRect.right - lp->ListBoxRect.left, |
lp->ListBoxRect.bottom - lp->ListBoxRect.top, |
SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER); |
#endif |
|
#if 0 |
} |
#endif |
SET_STATE(lp, CSF_HASDROPPED); |
} |
/* End of addition */ |
ShowWindow(lp->ListBoxControl, SW_SHOW); |
#if 0 /* orig(twine) */ |
SetFocus(lp->ListBoxControl); |
#else /* jmt: mwclient */ |
SetForegroundWindow(lp->ListBoxControl); |
#endif |
CBoxCapture(hWnd, 1); |
SET_STATE(lp, CSF_CAPTUREACTIVE); |
SET_STATE(lp, CSF_BUTTONDOWN); |
} |
} |
else |
{ /* there is a listbox visible */ |
HWND hwndNewFocus = 0; |
|
cpScreen = cp; |
|
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
{ |
ClientToScreen(hWnd, &cpScreen); |
hwndNewFocus = WindowFromPoint(cpScreen); |
} |
|
fprintf(stderr," (3)lp->ListBoxRect:(%d,%d,%d,%d)\n", |
lp->ListBoxRect.left, |
lp->ListBoxRect.top, |
lp->ListBoxRect.right, |
lp->ListBoxRect.bottom); |
|
if (PtInRect(&lp->ListBoxRect, cpScreen)) |
{ |
CBoxSendMouseToLBox(lp, WM_LBUTTONDOWN, wParam, cpScreen); |
} |
else |
{ |
if (PtInRect(&lp->ButtonRect, cp)) |
CBoxDrawButton(hWnd, 0, lp); |
if ((lp->wStyle & 0x0F) == CBS_DROPDOWN && hwndNewFocus == lp->EditControl) |
/* don't close listbox */; |
else { |
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_CLOSEUP)); |
|
fprintf(stderr," 802: (hide) SetWindowPos(lp->ListBoxControl, , 0, 0, 0, 0,..)\n"); |
|
SetWindowPos(lp->ListBoxControl, 0, |
0, 0, 0, 0, |
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_HIDEWINDOW); |
#if MWCLIENT |
MwLowerWindow(lp->ListBoxControl); |
#endif |
CBoxCapture(hWnd, 0); |
CLEAR_STATE(lp, CSF_BUTTONDOWN); |
} |
CLEAR_STATE(lp, CSF_CAPTUREACTIVE); |
|
if (hwndNewFocus && hwndNewFocus != hWnd) |
{ |
ScreenToClient(hwndNewFocus, &cpScreen); |
SetFocus(hwndNewFocus); |
|
SendMessage(hwndNewFocus, WM_LBUTTONDOWN, wParam, MAKELONG(cpScreen.x, cpScreen.y)); |
} |
} /* !(PtInRect(&lp->ListBoxRect, cpScreen)) */ |
} |
break; |
|
/* jmt: twine->mwin bug fixed: */ |
case WM_NCMOUSEMOVE: |
#if 0 /* jmt: twine->mw buggy */ |
case WM_MOUSEMOVE: |
#endif |
if (!IS_SET(lp,CSF_BUTTONDOWN) && ((lp->wStyle & 0xf) == CBS_SIMPLE)) |
break; |
|
cp.x = (int)(short)LOWORD(lParam); |
cp.y = (int)(short)HIWORD(lParam); |
#if 1 /* WM_NCMOUSEMOVE: */ |
ScreenToClient(hWnd, &cp); /* jmt: a must */ |
#endif |
|
if (IS_SET(lp, CSF_CAPTUREACTIVE)) |
{ |
if (PtInRect(&lp->ButtonRect,cp)) |
{ |
if (!IS_SET(lp, CSF_LOCALBUTTONDOWN)) |
CBoxDrawButton(hWnd, 1, lp); |
break; |
} |
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
ClientToScreen(hWnd,&cp); |
if (PtInRect(&lp->ListBoxRect,cp)) |
{ |
CBoxSendMouseToLBox(lp,WM_MOUSEMOVE,wParam,cp); |
} |
if (IS_SET(lp,CSF_LOCALBUTTONDOWN) && ((lp->wStyle & 0xf) != CBS_SIMPLE)) |
CBoxDrawButton(hWnd,0,lp); |
} |
break; |
|
/* jmt: twine->mwin bug fixed: */ |
case WM_NCLBUTTONUP: |
#if 0 /* twine->mw buggy */ |
case WM_LBUTTONUP: |
#endif |
if (!IS_SET(lp, CSF_CAPTUREACTIVE)) |
break; |
|
cp.x = (int)(short)LOWORD(lParam); |
cp.y = (int)(short)HIWORD(lParam); |
#if 1 /* WM_NCLBUTTONUP */ |
ScreenToClient(hWnd, &cp); /* jmt: a must */ |
#endif |
|
CLEAR_STATE(lp,CSF_BUTTONDOWN); |
|
if (PtInRect(&lp->ButtonRect, cp)) |
/*(lp->wStyle & 0x0F) == CBS_DROPDOWNLIST)*/ |
{ |
if (PtInRect(&lp->ButtonRect, cp)) |
CBoxDrawButton(hWnd, 0, lp); |
if (IS_SET(lp, CSF_LBOXBUTTONDOWN)) |
{ |
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
ClientToScreen(hWnd, &cp); |
CBoxSendMouseToLBox(lp, WM_LBUTTONUP, wParam, cp); |
CLEAR_STATE(lp,CSF_LBOXBUTTONDOWN); |
} |
break; |
} |
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
ClientToScreen(hWnd, &cp); |
|
if (PtInRect(&lp->ListBoxRect, cp)) |
{ |
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0); |
if (uiKey != (UINT)LB_ERR) |
{ |
if (lp->EditControl) |
{ |
SetFocus(lp->EditControl); |
|
CBoxDrawEdit(lp, hWnd, uiKey); |
} |
else { |
SetFocus(hWnd); |
|
CBoxDrawStatic(lp, hWnd, uiKey); |
} |
|
/* LATER check the WS_EX_NOPARENTNOTIFY bit in ext style.*/ |
/* ecw */ SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_SELENDOK)); |
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_CLOSEUP)); |
|
fprintf(stderr," 844: (hide) SetWindowPos(lp->ListBoxControl, , 0, 0, 0, 0,..)\n"); |
|
SetWindowPos(lp->ListBoxControl, 0, |
0, 0, 0, 0, |
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_HIDEWINDOW); |
|
CBoxCapture(hWnd, 0); |
CLEAR_STATE(lp,CSF_CAPTUREACTIVE); |
} /* uiKey ok */ |
|
CBoxSendMouseToLBox(lp, WM_LBUTTONUP, wParam, cp); |
CLEAR_STATE(lp,CSF_LBOXBUTTONDOWN); |
#if MWCLIENT |
#if 0 |
GrLowerWindow(lp->ListBoxControl->wid); |
#endif |
MwLowerWindow(lp->ListBoxControl); |
#endif |
} |
else /* clicked somewhere outside button or listbox - |
** the listbox should stay intact... MiD |
*/ |
if (IS_SET(lp, CSF_LBOXBUTTONDOWN)) |
{ |
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
ClientToScreen(hWnd, &cp); |
CBoxSendMouseToLBox(lp, WM_LBUTTONUP, wParam, cp); |
CLEAR_STATE(lp,CSF_LBOXBUTTONDOWN); |
} |
break; |
|
case WM_ERASEBKGND: |
return 1L; |
|
case WM_PAINT: |
BeginPaint(hWnd,&ps); |
EndPaint(hWnd,&ps); |
|
if (!IsWindowVisible(hWnd) || !lp->bRedraw) |
return 0L; |
|
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
CBoxDrawButton(hWnd, IS_SET(lp,CSF_LOCALBUTTONDOWN), lp); |
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0); |
if (lp->EditControl) |
CBoxDrawEdit(lp, hWnd, uiKey); |
else CBoxDrawStatic(lp, hWnd, uiKey); |
return 0L; |
|
case WM_COMMAND: |
if (GET_WM_COMMAND_ID(wParam,lParam) == CBC_EDITID) { |
/* edit/static control notifications */ |
switch((short)GET_WM_COMMAND_CMD(wParam,lParam)) { |
case EN_SETFOCUS: |
#ifdef LATER |
wCBN = CBN_SETFOCUS; |
#else |
wCBN = 0; |
#endif |
break; |
case EN_KILLFOCUS: |
wCBN = CBN_KILLFOCUS; |
break; |
case EN_CHANGE: |
{ |
int index = 0; |
char sz[128]; |
/* |
** Advance listbox |
** selection until there is string match. One first mismatch |
** listbox advances to its first item. |
*/ |
SendMessage(lp->EditControl, WM_GETTEXT, sizeof(sz)-1, (LPARAM)sz); |
if (/*l*/strlen(sz) > 0/*L*/) |
index = (int)SendMessage(lp->ListBoxControl, LB_FINDSTRING, -1, (LPARAM)sz); |
if (index == LB_ERR) |
index = 0; |
SendMessage(lp->ListBoxControl, LB_SETTOPINDEX, index, 0L); |
wCBN = CBN_EDITCHANGE; |
break; |
} |
case EN_UPDATE: |
wCBN = CBN_EDITUPDATE; |
break; |
case EN_ERRSPACE: |
wCBN = CBN_ERRSPACE; |
break; |
default: |
wCBN = 0; |
break; |
} |
if (wCBN) |
return SendMessage(lp->hWndParent,WM_COMMAND, |
GET_WM_COMMAND_MPS(lp->nID,hWnd,wCBN)); |
else |
return rc; |
} |
if (GET_WM_COMMAND_ID(wParam,lParam) == 0) { |
/* listbox notifications */ |
switch ((short)GET_WM_COMMAND_CMD(wParam,lParam)) { |
case LBN_ERRSPACE: |
wCBN = CBN_ERRSPACE; |
break; |
case LBN_SELCHANGE: |
if ((lp->wStyle & 0xf) == CBS_SIMPLE) |
{ |
uiKey = (UINT)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0); |
if (uiKey != (UINT)LB_ERR) |
if (lp->EditControl) |
{ |
CBoxDrawEdit(lp, hWnd, uiKey); |
} |
} |
wCBN = CBN_SELCHANGE; |
break; |
case LBN_DBLCLK: |
wCBN = CBN_DBLCLK; |
break; |
case LBN_SELCANCEL: /* TODO */ |
wCBN = 0; |
break; |
case LBN_SETFOCUS: |
wCBN = CBN_SETFOCUS; |
break; |
case LBN_KILLFOCUS: |
wCBN = CBN_KILLFOCUS; |
break; |
default: |
wCBN = 0; |
break; |
} |
if (wCBN) |
return SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,wCBN)); |
else |
return rc; |
} |
break; |
|
case WM_GETTEXT: |
if ( lp->EditControl ) |
return SendMessage(lp->EditControl,uMsg,wParam,lParam); |
else if ( lp->ListBoxControl ) { |
WPARAM sel, len; |
|
sel = (WPARAM)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0); |
if ( sel != (WPARAM)LB_ERR ) { |
len = (WPARAM)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, 0, 0); |
if ( len <= wParam ) |
return SendMessage(lp->ListBoxControl, LB_GETTEXT, sel, lParam); |
} |
} |
return CB_ERR; |
|
case WM_GETTEXTLENGTH: |
if ( lp->EditControl ) |
return SendMessage(lp->EditControl,uMsg,wParam,lParam); |
else if ( lp->ListBoxControl ) { |
WPARAM sel; |
|
sel = (WPARAM)SendMessage(lp->ListBoxControl, LB_GETCURSEL, 0, 0); |
if ( sel != (WPARAM)LB_ERR ) |
return SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, sel, 0); |
} |
return CB_ERR; |
|
case WM_SETTEXT: |
if ( lp->EditControl ) |
return SendMessage(lp->EditControl,uMsg,wParam,lParam); |
return CB_ERR; |
|
#if 0 /* jmt: fix: no WM_SETFONT/WM_GETFONT */ |
case WM_SETFONT: |
lp->hFont = (HFONT)wParam; |
|
hDC = GetDC(hWnd); |
SelectObject(hDC,lp->hFont); |
GetTextMetrics(hDC,&tm); |
ReleaseDC(hWnd,hDC); |
wEditHeight = tm.tmHeight + 3 * tm.tmInternalLeading; |
|
if (wEditHeight == lp->uHeight) |
return 0L; |
|
lp->uHeight = (UINT)wEditHeight; |
lp->ButtonRect.bottom = wEditHeight; |
/* |
** The following SetWindowPos causes WM_WINDOWPOSCHANGING message |
** where child windows are resized and/or moved. |
*/ |
ShowWindow(hWnd, SW_HIDE); |
GetClientRect(hWnd,&rcClient); |
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
SetWindowPos(hWnd, 0, |
0, 0, rcClient.right, (int)wEditHeight, |
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW); |
else SetWindowPos(hWnd, 0, |
0, 0, rcClient.right, (int)wEditHeight + lp->ListBoxRect.bottom - lp->ListBoxRect.top + 1, |
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOREDRAW); |
ShowWindow(hWnd, SW_SHOWNA); |
|
if (lp->EditControl) |
SendMessage(lp->EditControl, WM_SETFONT, wParam,lParam); |
SendMessage(lp->ListBoxControl, WM_SETFONT, wParam,lParam); |
|
if(LOWORD(lParam)) |
RedrawWindow(hWnd,(const RECT *)0,(HRGN)0, |
RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW ); |
return (LRESULT)0; |
|
case WM_GETFONT: |
return lp->hFont; |
#endif /* WM_SETFONT/WM_GETFONT */ |
|
case WM_MOVE: /*WM_WINDOWPOSCHANGING:*/ |
#if 0 |
lpwp = (LPWINDOWPOS)lParam; |
#else |
pp.x=LOWORD(lParam); |
pp.y=HIWORD(lParam); |
#endif |
if (1)/*(lpwp)*/ { |
if (1)/*(!(lpwp->flags & SWP_NOSIZE))*/ { |
lp->ButtonRect.right = (hWnd->winrect.right-hWnd->winrect.left); /* lpwp->cx; */ |
if ((lp->wStyle & 0xf) == CBS_SIMPLE) |
lp->ButtonRect.left = lp->ButtonRect.right; |
else lp->ButtonRect.left = (hWnd->winrect.right-hWnd->winrect.left)/*lpwp->cx*/ - 1 - |
GetSystemMetrics(SM_CXVSCROLL); |
|
if (lp->EditControl) |
{ |
wEditWidth = lp->ButtonRect.left + 1; |
if ((lp->wStyle & 0xf) == CBS_SIMPLE) |
wEditWidth --; |
if ((lp->wStyle & 0xf) == CBS_DROPDOWN) |
wEditWidth -= 5; |
SetWindowPos(lp->EditControl,(HWND)0, |
0,0, |
wEditWidth, lp->uHeight, |
SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER); |
} |
if (lp->ListBoxControl) |
{ |
if ((lp->wStyle & 0x0F) == CBS_SIMPLE) |
{ |
lp->ListBoxRect.left = 5; |
lp->ListBoxRect.top = lp->uHeight - 1; |
lp->ListBoxRect.right = (hWnd->winrect.right-hWnd->winrect.left); /* lpwp->cx; */ |
lp->ListBoxRect.bottom = (hWnd->winrect.bottom-hWnd->winrect.top)/*lpwp->cy*/ - 2; |
} |
else { |
POINT cp; |
cp.x = 0; |
cp.y = lp->uHeight - 1; |
ClientToScreen(hWnd, &cp); |
OffsetRect(&lp->ListBoxRect, cp.x - lp->ListBoxRect.left, cp.y - lp->ListBoxRect.top); |
|
lp->ListBoxRect.right = lp->ListBoxRect.left + (hWnd->winrect.right-hWnd->winrect.left)/*lpwp->cx*/; |
if ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST) |
lp->ListBoxRect.right -= 5; |
} |
|
SetWindowPos(lp->ListBoxControl,(HWND)0, |
lp->ListBoxRect.left, lp->ListBoxRect.top, |
lp->ListBoxRect.right - lp->ListBoxRect.left, |
lp->ListBoxRect.bottom - lp->ListBoxRect.top, |
SWP_NOACTIVATE|SWP_NOZORDER); |
} |
#if 0 /* jmt: fix: no WM_WINDOWPOSCHANGING */ |
/* the height of the normal state stays the same */ |
if ((lp->wStyle & 0xf) != CBS_SIMPLE) |
lpwp->cy = (int)lp->uHeight; |
#endif |
} |
} |
return (LRESULT)0; |
|
case WM_WINDOWPOSCHANGED: |
DefWindowProc(hWnd,uMsg,wParam,lParam); |
lpwp = (LPWINDOWPOS)lParam; |
if (lpwp) { |
if (!(lpwp->flags & SWP_NOSIZE)) /* TODO */ |
#if 0 |
RedrawWindow(hWnd,(const RECT *)0,(HRGN)0, |
RDW_INVALIDATE|RDW_ERASE); |
#else |
InvalidateRect(hWnd,NULL,TRUE); |
#endif |
} |
return (LRESULT)0; |
|
#if 0 /* jmt: fix: no ownerdraw */ |
/*********************************************/ |
/* ownerdraw stuff */ |
/*********************************************/ |
case WM_DRAWITEM: |
lpdis = (LPDRAWITEMSTRUCT)lParam; |
lpdis->CtlType = ODT_COMBOBOX; |
lpdis->CtlID = lp->nID; |
lpdis->hwndItem = hWnd; |
return SendMessage(lp->hWndParent,WM_DRAWITEM, |
(WPARAM)lp->nID,lParam); |
|
case WM_MEASUREITEM: |
lpmis = (LPMEASUREITEMSTRUCT)lParam; |
lpmis->CtlType = ODT_COMBOBOX; |
lpmis->CtlID = lp->nID; |
return SendMessage(lp->hWndParent,WM_MEASUREITEM, |
(WPARAM)lp->nID,lParam); |
|
case WM_DELETEITEM: |
lpdlis = (LPDELETEITEMSTRUCT)lParam; |
lpdlis->CtlType = ODT_COMBOBOX; |
lpdlis->CtlID = lp->nID; |
lpdlis->hwndItem = hWnd; |
return SendMessage(lp->hWndParent,WM_DELETEITEM, |
(WPARAM)lp->nID,lParam); |
|
case WM_CONVERT: |
if (!lpComboBinToNat) { |
hComboClass32 = FindClass("COMBOBOX",0); |
lpComboBinToNat = (WNDPROC)GetClassHandleLong( |
hComboClass32,GCL_BINTONAT); |
} |
if (lpComboBinToNat) |
return lpComboBinToNat(hWnd, uMsg, wParam, lParam); |
else |
return (LRESULT)0; |
#endif /* ownerdraw */ |
|
default: |
return DefCBProc( hWnd, uMsg, wParam, lParam); |
} |
return rc; |
} |
|
/************************************************************************ |
** |
************************************************************************/ |
static LRESULT DefCBProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) |
{ |
int len,index; |
COMBOBOX *lp; |
char *selection; |
int rc; |
POINT cp; |
|
lp = (COMBOBOX *) hWnd->userdata/*GetWindowLong(hWnd,CWD_LPCBDATA)*/; |
switch(uMsg) { |
/*********************************************/ |
/* messages specific to the list box control */ |
/*********************************************/ |
case CB_ADDSTRING: |
lp->nListItems++; /* shd. test for successful return */ |
return SendMessage(lp->ListBoxControl,LB_ADDSTRING, |
wParam,lParam); |
|
case CB_DELETESTRING: |
if (lp->nListItems) |
lp->nListItems--; |
return SendMessage(lp->ListBoxControl,LB_DELETESTRING, |
wParam,lParam); |
|
case CB_DIR: |
return SendMessage(lp->ListBoxControl,LB_DIR, |
wParam,lParam); |
|
case CB_FINDSTRING: |
return SendMessage(lp->ListBoxControl,LB_FINDSTRING, |
wParam,lParam); |
|
case CB_FINDSTRINGEXACT: |
return SendMessage(lp->ListBoxControl,LB_FINDSTRINGEXACT, |
wParam,lParam); |
|
case CB_GETCOUNT: |
return SendMessage(lp->ListBoxControl,LB_GETCOUNT, |
wParam,lParam); |
|
case CB_GETCURSEL: |
return SendMessage(lp->ListBoxControl,LB_GETCURSEL, |
wParam,lParam); |
|
case CB_GETITEMDATA: |
return SendMessage(lp->ListBoxControl,LB_GETITEMDATA, |
wParam,lParam); |
|
case CB_GETITEMHEIGHT: |
return SendMessage(lp->ListBoxControl,LB_GETITEMHEIGHT, |
wParam,lParam); |
|
case CB_GETLBTEXT: |
return SendMessage(lp->ListBoxControl,LB_GETTEXT, |
wParam,lParam); |
|
case CB_GETLBTEXTLEN: |
return SendMessage(lp->ListBoxControl,LB_GETTEXTLEN, |
wParam,lParam); |
|
case CB_INSERTSTRING: |
return SendMessage(lp->ListBoxControl,LB_INSERTSTRING, |
wParam,lParam); |
|
case CB_SETITEMDATA: |
return SendMessage(lp->ListBoxControl,LB_SETITEMDATA, |
wParam,lParam); |
|
/*********************************************/ |
/* messages specific to the edit control */ |
/*********************************************/ |
case CB_GETEDITSEL: |
return SendMessage(lp->EditControl,EM_GETSEL,0,0); |
|
case CB_LIMITTEXT: |
return SendMessage(lp->EditControl,EM_LIMITTEXT, |
wParam,lParam); |
|
case CB_SETEDITSEL: |
return SendMessage(lp->EditControl,EM_SETSEL, |
wParam,lParam); |
|
/*********************************************/ |
/* messages handled by the combobox */ |
/*********************************************/ |
case CB_GETDROPPEDCONTROLRECT: |
CopyRect((LPRECT)lParam,&lp->ListBoxRect); |
break; |
case CB_GETDROPPEDSTATE: |
return IS_SET(lp,CSF_CAPTUREACTIVE); |
|
case CB_GETEXTENDEDUI: |
return (LRESULT)lp->bExtended; |
|
case CB_RESETCONTENT: |
SendMessage(lp->ListBoxControl,LB_RESETCONTENT,0,0); |
if (lp->EditControl) |
SendMessage(lp->EditControl,WM_SETTEXT,0,(LPARAM)(LPSTR)""); |
break; |
|
case CB_SELECTSTRING: |
index = (int)SendMessage(lp->ListBoxControl, LB_SELECTSTRING, wParam, lParam); |
if (index == LB_ERR) |
return CB_ERR; |
|
len = (int)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, index, 0); |
if (len <= 0) |
return CB_ERR; |
|
selection = (LPSTR)WinMalloc((UINT)len+1); |
rc = (int)SendMessage(lp->ListBoxControl, LB_GETTEXT, (WPARAM)index, (LPARAM)selection); |
if (lp->EditControl) |
rc = (int)SendMessage(lp->EditControl, WM_SETTEXT, 0, (LPARAM)selection); |
else CBoxDrawStatic(lp, hWnd, index); |
WinFree(selection); |
break; |
|
case CB_SETCURSEL: |
rc = (int)SendMessage(lp->ListBoxControl, LB_SETCURSEL, wParam, lParam); |
if (rc == LB_ERR) |
return CB_ERR; |
len = (int)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, wParam, 0); |
if (len <= 0) |
return CB_ERR; |
|
selection = (LPSTR)WinMalloc((UINT)len+1); |
rc = (int)SendMessage(lp->ListBoxControl, LB_GETTEXT, wParam, (LPARAM)selection); |
if (lp->EditControl) |
rc = (int)SendMessage(lp->EditControl, WM_SETTEXT, 0, (LPARAM)selection); |
else CBoxDrawStatic(lp, hWnd, wParam); |
WinFree(selection); |
return (LRESULT)wParam; |
|
case CB_SETEXTENDEDUI: |
lp->bExtended = (BOOL)wParam; |
break; |
|
case CB_SETITEMHEIGHT: /* TODO */ |
break; |
|
case CB_SHOWDROPDOWN: |
if ((lp->wStyle & 0xf) == CBS_SIMPLE) |
return 1L; |
if (wParam) |
{ |
if (IS_SET(lp,CSF_CAPTUREACTIVE)) |
return 1L; |
|
cp.x = ((lp->wStyle & 0xf) != CBS_DROPDOWNLIST) ? 5 : 0; |
cp.y = lp->uHeight -1; |
|
ClientToScreen(hWnd, &cp); |
OffsetRect(&lp->ListBoxRect, cp.x - lp->ListBoxRect.left, cp.y - lp->ListBoxRect.top); |
|
SetWindowPos(lp->ListBoxControl, 0, |
cp.x, cp.y, 0, 0, |
SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); |
|
SendMessage(lp->hWndParent,WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_DROPDOWN)); |
|
fprintf(stderr," 1330: SetWindowPos(lp->ListBoxControl, , 0, 0, 0, 0,..)\n"); |
|
SetWindowPos(lp->ListBoxControl, HWND_TOP, |
0, 0, 0, 0, |
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_SHOWWINDOW); |
|
CBoxCapture(hWnd, 1); |
SET_STATE(lp,CSF_CAPTUREACTIVE); |
} |
else |
{ |
if (!IS_SET(lp,CSF_CAPTUREACTIVE)) |
return 1L; |
|
SendMessage(lp->hWndParent, WM_COMMAND, GET_WM_COMMAND_MPS(lp->nID,hWnd,CBN_CLOSEUP)); |
/* test: */ |
fprintf(stderr," 1343: (hide) SetWindowPos(lp->ListBoxControl, , 0, 0, 0, 0,..)\n"); |
|
SetWindowPos(lp->ListBoxControl, 0, |
0, 0, 0, 0, |
SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER | SWP_HIDEWINDOW); |
|
CBoxCapture(hWnd, 0); |
CLEAR_STATE(lp, CSF_CAPTUREACTIVE); |
} |
return 1L; |
|
/*********************************************/ |
/* messages handled by the defwindowproc.... */ |
/*********************************************/ |
default: |
return DefWindowProc( hWnd, uMsg, wParam, lParam); |
} |
return CB_OKAY; |
} |
|
|
static void |
CBoxDrawButton(HWND hWnd,UINT wState,COMBOBOX *lp) |
{ |
HDC hDC; |
int x,y; |
int dx,dy; |
#if 0 /* jmt: fix: no LoadBitmap() */ |
int cx,cy; |
static int nWidth,nHeight; |
BITMAP bmpCombo; |
static HBITMAP hbmpCombo = 0; |
HBITMAP hbmpOld = 0; |
HDC hdcSrc; |
COLORREF rgbText, rgbBk; |
#endif |
HBRUSH hBrush; |
HPEN hPenHigh,hPenShadow; |
RECT rc; |
|
hDC = GetDC(hWnd); |
|
CopyRect(&rc,&lp->ButtonRect); |
x = rc.left; |
y = rc.top; |
dx = rc.right; |
dy = rc.bottom; |
|
hPenHigh = GetStockObject(WHITE_PEN); |
#if 0 |
hPenShadow = GetSysColorPen(COLOR_BTNSHADOW); |
#else |
hPenShadow = CreatePen(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW)); |
#endif |
#if 0 |
hBrush = GetSysColorBrush(COLOR_BTNFACE); |
#else |
hBrush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); |
#endif |
FillRect(hDC, &rc, hBrush); |
#if 0 |
hBrush = GetStockObject(BLACK_BRUSH); |
FillRect/*FrameRect*/(hDC, &lp->ButtonRect, hBrush); |
#else |
SelectObject(hDC,GetStockObject(BLACK_PEN)); |
Rectangle(hDC,lp->ButtonRect.left,lp->ButtonRect.top,lp->ButtonRect.right,lp->ButtonRect.bottom); |
#endif |
rc.left += 1; rc.right -= 1; |
rc.top += 1; rc.bottom -= 1; |
|
Draw3DButtonRect(hDC,hPenHigh,hPenShadow,rc,wState); |
|
#if 0 /* jmt: fix: no LoadBitmap(),GetObject() */ |
if (hbmpCombo == 0) |
{ |
hbmpCombo = LoadBitmap(0,(LPSTR)OBM_COMBO); |
GetObject(hbmpCombo, sizeof(BITMAP), (LPVOID)&bmpCombo); |
nWidth = bmpCombo.bmWidth; |
nHeight = bmpCombo.bmHeight; |
} |
/* |
** MiD 08/15/95 changed to mono bitmap as it is in Windows. Convert |
** it to colors on the fly |
*/ |
hdcSrc = CreateCompatibleDC(hDC); |
hbmpOld = SelectObject(hdcSrc, hbmpCombo); |
/* |
** Source hdc ok. Prepare the target hdc, then BitBlt to it. |
*/ |
rgbText = SetTextColor(hDC,GetSysColor(COLOR_BTNTEXT)); |
rgbBk = SetBkColor(hDC,GetSysColor(COLOR_BTNFACE)); |
|
cx = (dx - x - nWidth)/2; |
cy = (dy - y - nHeight)/2; |
if (wState) |
{ cx++; cy++; } |
BitBlt(hDC, x+cx, y+cy, nWidth, nHeight, hdcSrc, 0, 0, SRCCOPY); |
|
SetTextColor(hDC, rgbText); |
SetBkColor(hDC, rgbBk); |
SelectObject(hdcSrc,hbmpOld); |
DeleteDC(hdcSrc); |
#endif /* BitBlt Bitmap */ |
#if 1 |
DeleteObject(hBrush); |
DeleteObject(hPenShadow); |
#endif |
ReleaseDC(hWnd,hDC); |
|
if (wState) |
SET_STATE(lp,CSF_LOCALBUTTONDOWN); |
else |
CLEAR_STATE(lp,CSF_LOCALBUTTONDOWN); |
} |
|
#if 0 /* jmt: fix: no COMBOLBOX */ |
/************************************************************************ |
** |
************************************************************************/ |
LRESULT DefCOMBOLBOXProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) |
{ |
#if 0 |
return DefLISTBOXProc(hWnd, msg, wParam,lParam); |
#endif |
return ListboxCtrlProc(hWnd, msg, wParam,lParam); |
} |
#endif |
|
/************************************************************************ |
** |
************************************************************************/ |
static void CBoxSendMouseToLBox(COMBOBOX *lp, UINT uiMsg, WPARAM wParam, POINT ptScreen) |
{ |
POINT pt; |
int nNCHit; |
#if 0 /* jmt: fix: no scrollbar */ |
HWND hWndScroll; |
#endif |
pt = ptScreen; |
ScreenToClient(lp->ListBoxControl,&pt); |
|
nNCHit = LOSHORT(SendMessage(lp->ListBoxControl, WM_NCHITTEST, 0, MAKELPARAM(ptScreen.x,ptScreen.y))); |
|
switch (nNCHit) |
{ |
case HTCLIENT: |
if (uiMsg == WM_MOUSEMOVE && !IS_SET(lp,CSF_LBOXBUTTONDOWN)) |
{ |
SendMessage(lp->ListBoxControl, WM_LBUTTONDOWN, 0, MAKELONG((WORD)pt.x,(WORD)pt.y)); |
|
SET_STATE(lp, CSF_BUTTONDOWN | CSF_LBOXBUTTONDOWN); |
} |
SendMessage(lp->ListBoxControl, uiMsg, wParam, MAKELONG((WORD)pt.x,(WORD)pt.y)); |
break; |
|
#if 0 /* jmt: fix: no scrollbar */ |
case HTVSCROLL: |
if (0 != (hWndScroll = TWIN_ConvertToSysScroll(lp->ListBoxControl, TRUE /* vertical */, &pt))) |
SendMessage(hWndScroll, uiMsg, wParam, MAKELONG((WORD)pt.x,(WORD)pt.y)); |
break; |
#endif |
default: |
break; |
} |
} |
|
/************************************************************************ |
** |
************************************************************************/ |
static void CBoxCapture(HWND hWnd, WORD wFunc) |
{ |
static HWND hWndCapture = (HWND)0; |
|
if (wFunc) |
{ |
hWndCapture = SetCapture(hWnd); |
|
SetFocus(hWnd); |
} |
else { |
if (!hWndCapture) |
ReleaseCapture(); |
else { |
#ifdef LATER |
SetCapture(hWndCapture); |
#else |
ReleaseCapture(); |
#endif |
hWndCapture = (HWND)0; |
} |
} |
} |
|
/************************************************************************ |
** |
************************************************************************/ |
static void CBoxDrawEdit(COMBOBOX *lp, HWND hWnd, UINT uiKey) |
{ |
int nLen; |
LPVOID lpData; |
#if 0 /* jmt: fix: no ownerdraw */ |
HRGN hRgn; |
DRAWITEMSTRUCT dis; |
#endif |
/* |
if (uiKey == (UINT)LB_ERR) |
return; |
|
if (!BOWNERDRAW(lp)) |
*/ |
if (lp->wStyle & CBS_HASSTRINGS) |
{ |
if (uiKey == (UINT)LB_ERR) |
return; |
nLen = (int)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, uiKey, 0L); |
if (nLen <= 0) |
return; |
lpData = (LPVOID)WinMalloc(nLen+1); |
SendMessage(lp->ListBoxControl, LB_GETTEXT, uiKey, (LPARAM)lpData); |
SendMessage(lp->EditControl, WM_SETTEXT, strlen(lpData), (LPARAM)lpData); |
Edit_SetSel(lp->EditControl, 0, -1); |
WinFree((LPSTR)lpData); |
} |
#if 0 /* jmt: fix: no ownerdraw */ |
else { |
dis.CtlType = ODT_COMBOBOX; |
dis.CtlID = (UINT)lp->nID; |
dis.itemID = -1; /* used to be uiKey */ |
dis.itemAction = ODA_DRAWENTIRE; |
dis.itemState = ODS_FOCUS; |
dis.hwndItem = hWnd; |
dis.itemData = 0; |
GetClientRect(lp->EditControl,&dis.rcItem); |
dis.rcItem.left += 3; |
dis.rcItem.right -= 3; |
dis.rcItem.top += 2; |
dis.rcItem.bottom -= 2; |
|
dis.hDC = GetDC(lp->EditControl); |
hRgn = CreateRectRgnIndirect(&dis.rcItem); |
SelectClipRgn(dis.hDC,hRgn); |
SelectObject(dis.hDC, lp->hFont); |
SendMessage(lp->hWndParent, WM_DRAWITEM, (WPARAM)(UINT)lp->nID, (LPARAM)&dis); |
ReleaseDC(lp->EditControl,dis.hDC); |
DeleteObject(hRgn); |
} |
#endif /* ownerdraw */ |
} |
|
/************************************************************************ |
** |
************************************************************************/ |
static void CBoxDrawStatic(COMBOBOX *lp, HWND hWnd, UINT uiKey) |
{ |
int nLen; |
HDC hdc; |
LPVOID lpData; |
RECT rcClient; |
HFONT hfonOld = 0; |
#if 0 /* jmt: fix: no ownerdraw */ |
HRGN hRgn; |
DRAWITEMSTRUCT dis; |
#endif |
HBRUSH hbrStatic, hbrOld; |
|
/* Draw rectangle regardless of ownerdraw style... |
*/ |
hdc = GetDC(hWnd); |
rcClient.left = 0; |
rcClient.top = 0; |
rcClient.right = lp->ButtonRect.left+1; |
rcClient.bottom = lp->uHeight; |
hbrStatic = CreateSolidBrush(GetSysColor(COLOR_WINDOW)); |
hbrOld = SelectObject(hdc, hbrStatic); |
SelectObject(hdc, GetStockObject(BLACK_PEN));/* ??? COLOR_WINDOWFRAME */ |
Rectangle(hdc, rcClient.left, rcClient.top, rcClient.right, rcClient.bottom); |
SelectObject(hdc, hbrOld); |
DeleteObject(hbrStatic); |
ReleaseDC(hWnd, hdc); |
|
if (uiKey == (UINT)LB_ERR) |
return; |
|
/* jmt: no ownerdraw */ |
if (1) /* (!BOWNERDRAW(lp)) */ |
{ |
/* if necessary, draw text */ |
hdc = GetDC(hWnd); |
nLen = (int)SendMessage(lp->ListBoxControl, LB_GETTEXTLEN, (WPARAM)uiKey, 0L); |
if (nLen > 0) |
{ |
lpData = (LPVOID)WinMalloc(nLen+1); |
SendMessage(lp->ListBoxControl, LB_GETTEXT, uiKey, (LPARAM)lpData); |
SetBkMode(hdc, TRANSPARENT); |
if (!IS_SET(lp, CSF_FOCUS)) |
{ |
SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT)); |
rcClient.left += 2; |
} |
else { |
InflateRect(&rcClient, -2, -2); |
hbrStatic = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT)); |
hbrOld = SelectObject(hdc, hbrStatic); |
FillRect(hdc, &rcClient, hbrStatic); |
#if 0 /* jmt: fix: no DrawFocusRect() */ |
DrawFocusRect(hdc, &rcClient); |
#endif |
SelectObject(hdc, hbrOld); |
DeleteObject(hbrStatic); |
SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT)); |
} |
if (lp->hFont) |
hfonOld = SelectObject(hdc, lp->hFont); |
DrawText(hdc, (LPSTR)lpData, nLen, &rcClient, DT_VCENTER | DT_SINGLELINE | DT_NOPREFIX); |
if (lp->hFont) |
SelectObject(hdc, hfonOld); |
WinFree((LPVOID)lpData); |
} |
ReleaseDC(hWnd, hdc); |
} |
#if 0 /* jmt: fix: no ownerdraw */ |
else { /* fill OWNERDRAWSTRUCT and send WM_DRAWITEM message */ |
dis.CtlType = ODT_COMBOBOX; |
dis.CtlID = (UINT)lp->nID; |
dis.itemID = uiKey; |
dis.itemAction = ODA_DRAWENTIRE; |
dis.itemState = ODS_FOCUS; |
dis.hwndItem = hWnd; |
dis.itemData = SendMessage(lp->ListBoxControl, LB_GETITEMDATA, uiKey, 0L); |
GetClientRect(hWnd, &dis.rcItem); |
dis.rcItem.left += 3; |
dis.rcItem.right = lp->ButtonRect.left - 2; /* do not touch button */ |
dis.rcItem.top += 2; |
dis.rcItem.bottom -= 2; |
|
dis.hDC = GetDC(hWnd); |
hRgn = CreateRectRgnIndirect(&dis.rcItem); |
SelectClipRgn(dis.hDC, hRgn); |
SelectObject(dis.hDC, lp->hFont); |
SendMessage(lp->hWndParent, WM_DRAWITEM, (WPARAM)(UINT)lp->nID, (LPARAM)&dis); |
ReleaseDC(hWnd, dis.hDC); |
DeleteObject(hRgn); |
} |
#endif /* ownerdraw */ |
|
} |
|
|
/*------------------------- < Full Revision History > ---------------------- |
** Revision 1.2 2001/11/06 23:35:46 greg |
** |
** Revision 1.1.1.1 2001/06/21 06:32:42 greg |
** Microwindows pre8 with patches |
** |
** Revision 1.1.1.1 2001/06/05 03:44:01 root |
** First import of 5/5/2001 Microwindows to CVS |
** |
** Revision 1.8 2000/08/14 jmt |
** ported to microwin(non-client/server mode) |
** |
** Revision 1.7 2000/06/28 jmt |
** porting to microwin |
** |
** Revision 1.6 2000/01/21 02:48:47 robf |
** remove dead code |
** |
** Revision 1.5 1999/11/29 05:07:54 robf |
** removed extraneous call CreateCompatibleDC |
** |
** Revision 1.4 1999/07/08 18:52:50 mwalsh |
** Updated Comments |
** |
**-------------------------------------------------------------------------*/ |
|
/winlib/ptinsid.c
0,0 → 1,18
#include "windows.h" |
#include "wintools.h" |
|
BOOL WINAPI |
PtInsideWindow(HWND hwnd,UINT x,UINT y) |
{ |
/* Determine whether or not the position ( x, y) is contained */ |
/* within the control's client rectangle. */ |
|
RECT clientRect; |
POINT buttonPoint; |
|
buttonPoint.x = x; |
buttonPoint.y = y; |
|
GetClientRect( hwnd, &clientRect); |
return PtInRect( &clientRect, buttonPoint); |
} |
/winlib/button.c
0,0 → 1,898
#include "windows.h" |
#include "windowsx.h" |
#include "wintools.h" |
/* |
* WINCTL Custom Control Library |
* Push button Custom Control |
* This control implements a custom pushbutton control. |
* |
* 4/8/98 g haerr original version from control palette v2.00, Blaise Computing |
*/ |
|
#define GET_PBSTATE(h) (GetWindowWord(h, 0)) |
#define GET_PBCAPTURE(h) (GetWindowWord(h, 2)) |
#define GET_PBWASINSIDE(h) (GetWindowWord(h, 4)) |
#define GET_PBDELETEFONT(h) (GetWindowWord(h, 6)) |
#define GET_PBFONT(h) (GetWindowWord(h, 8)) |
|
#define SET_PBSTATE(h,x) (SetWindowWord(h, 0, x)) |
#define SET_PBCAPTURE(h,x) (SetWindowWord(h, 2, x)) |
#define SET_PBWASINSIDE(h,x) (SetWindowWord(h, 4, x)) |
#define SET_PBDELETEFONT(h,x) (SetWindowWord(h, 6, x)) |
#define SET_PBFONT(h,x) (SetWindowWord(h, 8, x)) |
|
#define PARENT(hwnd) ((HWND)GetWindowLong(hwnd,GWL_HWNDPARENT)) |
|
/* Internal state variable bit positions */ |
#define PUSH_UP 0x0000 |
#define PUSH_DOWN 0x0001 /* Button is down */ |
#define PUSH_FOCUS 0x0002 /* Button is focused */ |
#define PUSH_DISABLED 0x0004 /* Button is disabled */ |
#define PUSH_DEFAULT 0x0008 /* Button is currently a default */ |
#define PUSH_CHECKED 0x0010 |
|
/* Push Button states */ |
#define PBS_UP 0x0000 /* Normal button state. */ |
#define PBS_FOCUSDOWN 0x0001 /* Button pressed. */ |
#define PBS_FOCUSUP 0x0002 /* Focused state. */ |
#define PBS_DISABLED 0x0004 /* Disabled state. */ |
#define PBS_DEFAULT 0x0008 /* Default state. */ |
#define PBS_CHECKED 0x0010 /* checked state. */ |
|
#define WM_PAINT_SPECIAL WM_PAINT |
#define HANDLE_WM_PAINT_SPECIAL(hwnd, wParam, lParam, fn) \ |
((fn)((hwnd),(HDC)(wParam)), 0L) |
|
/* BOOL Cls_OnGetState( HWND hwnd); */ |
#define HANDLE_BM_GETSTATE(hwnd, wParam, lParam, fn) ((fn)(hwnd)) |
#define FORWARD_BM_GETSTATE(hwnd) \ |
(LONG)(fn)((hwnd), BM_GETSTATE, (WPARAM)0, (LPARAM)0) |
|
/* void Cls_OnSetState( HWND hwnd, WORD wState); */ |
#define HANDLE_BM_SETSTATE( hwnd, wParam, lParam, fn) \ |
((fn)((hwnd), (WORD)wParam), 0) |
#define FORWARD_BM_SETSTATE( hwnd, wState) \ |
(fn)((hwnd), BM_SETSTATE, (WPARAM)wState, (LPARAM)0) |
|
/* void Cls_OnSetStyle( HWND hwnd, WORD style, BOOL bRedraw); */ |
#define HANDLE_BM_SETSTYLE( hwnd, wParam, lParam, fn) \ |
((fn)((hwnd), (WORD)wParam, (BOOL)LOWORD(lParam)), 0) |
#define FORWARD_BM_SETSTYLE( hwnd, style, bRedraw, fn) \ |
(fn)((hwnd), BM_SETSTYLE, (WPARAM)style, MAKELPARAM(bRedraw, 0)) |
|
/* entry points*/ |
void WINAPI CheckRadioButton(HWND hDlg, int nIDFirst,int nIDLast, |
int nIDCheckButton); |
|
/* local procs*/ |
static void WINAPI cenButton_FnEnd( HWND, WORD); |
static WORD WINAPI cenButton_FnStart( HWND); |
static BOOL WINAPI cenButton_OnCreate( HWND, LPCREATESTRUCT); |
/*static void WINAPI cenButton_OnDestroy( HWND);*/ |
/*static void WINAPI cenButton_OnEnable( HWND, BOOL);*/ |
static BOOL WINAPI cenButton_OnEraseBkgnd( HWND, HDC); |
/*static UINT WINAPI cenButton_OnGetDlgCode( HWND, LPMSG);*/ |
static LONG WINAPI cenButton_OnGetState( HWND); |
/*static void WINAPI cenButton_OnKey( HWND, UINT, BOOL, int, UINT);*/ |
static void WINAPI cenButton_OnKillFocus( HWND, HWND); |
static void WINAPI cenButton_OnLButtonDown( HWND, BOOL, UINT, UINT, UINT); |
static void WINAPI cenButton_OnLButtonUp( HWND, UINT, UINT, UINT); |
static void WINAPI cenButton_OnMouseMove( HWND, UINT, UINT, UINT); |
static void WINAPI cenButton_OnPaint( HWND, HDC); |
static void WINAPI DrawPushButton(HWND hwnd,HDC hDCwParam,UINT wEnumState, |
DWORD dwStyle); |
static void WINAPI DrawGroupBox(HWND hwnd,HDC hDCwParam, DWORD dwStyle); |
static void WINAPI cenButton_OnSetFocus( HWND, HWND); |
static void WINAPI cenButton_OnSetStyle( HWND, WORD, BOOL); |
static void WINAPI cenButton_OnSetState( HWND, WORD); |
static void WINAPI cenButton_SetState( HWND, WORD, BOOL); |
static void WINAPI cenButton_OnSetText( HWND, LPCSTR); |
|
static void WINAPI |
cenButton_FnEnd( |
HWND hwnd, |
WORD wState) |
{ |
if( wState != GET_PBSTATE( hwnd)) { |
if( IsWindowVisible( hwnd)) |
UpdateWindow( hwnd); |
} |
} |
|
static WORD WINAPI |
cenButton_FnStart( |
HWND hwnd) |
{ |
return GET_PBSTATE( hwnd); |
} |
|
static BOOL WINAPI |
cenButton_OnCreate( |
HWND hwnd, |
LPCREATESTRUCT lpCreate) |
{ |
/* Set initial states */ |
/*SET_PBDELETEFONT( hwnd, FALSE);*/ |
/*SET_PBFONT( hwnd, NULL);*/ |
SET_PBSTATE( hwnd, PUSH_UP ); |
SET_PBCAPTURE( hwnd, FALSE ); |
SET_PBWASINSIDE( hwnd, FALSE ); |
|
if ((lpCreate->style & 0x0f) == BS_DEFPUSHBUTTON) |
cenButton_SetState( hwnd, PUSH_DEFAULT, TRUE ); |
|
if (lpCreate->style & WS_DISABLED) |
cenButton_SetState( hwnd, PUSH_DISABLED, TRUE ); |
|
return( TRUE); |
} |
|
#if 0 |
static void WINAPI |
cenButton_OnDestroy( |
HWND hwnd) |
{ |
if( GET_PBDELETEFONT( hwnd)) { |
DeleteObject( GET_PBFONT( hwnd)); |
SET_PBDELETEFONT( hwnd, FALSE); |
} |
} |
|
static void WINAPI |
cenButton_OnEnable( |
HWND hwnd, |
BOOL bEnable) |
{ |
WORD wState; |
|
wState = cenButton_FnStart( hwnd); |
cenButton_SetState( hwnd, PUSH_DISABLED, !bEnable); |
cenButton_FnEnd( hwnd, wState); |
} |
#endif |
|
static BOOL WINAPI |
cenButton_OnEraseBkgnd( |
HWND hwnd, |
HDC hdc) |
{ |
/* Background is erased at WM_PAINT time, so return TRUE*/ |
return TRUE; |
} |
|
#if 0 |
static UINT WINAPI |
cenButton_OnGetDlgCode( |
HWND hwnd, |
LPMSG lpMsg) |
{ |
/* WM_GETDLGCODE is sent by the dialog manager to find */ |
/* what type/style of control is responding and/or to */ |
/* determine what keystrokes the control wants to process */ |
/* itself. In this case, the pushbutton identifies itself */ |
/* and also indicates whether it is currently the default */ |
/* pushbutton. */ |
|
/*return( DLGC_BUTTON | ((GET_PBSTATE( hwnd) & PUSH_DEFAULT) ? |
DLGC_DEFPUSHBUTTON : DLGC_UNDEFPUSHBUTTON));*/ |
return( DLGC_BUTTON); |
} |
#endif |
|
static LONG WINAPI |
cenButton_OnGetState( |
HWND hwnd) |
{ |
/* BM_GETSTATE is sent to enquire about the state of the */ |
/* control. It returns TRUE if the button is in the down */ |
/* state. */ |
|
return( ( GET_PBSTATE( hwnd) & PUSH_DOWN) == PUSH_DOWN); |
} |
|
#if 0 |
static void WINAPI |
cenButton_OnKey( |
HWND hwnd, |
UINT vk, |
BOOL bDown, |
int cRepeat, |
UINT flag) |
{ |
WORD wState; |
|
wState = cenButton_FnStart( hwnd); |
if (bDown) { |
/* WM_KEYDOWN is sent when a non-system key is pressed. */ |
/* If a spacebar is detected and the previous key state */ |
/* was up, then the control should switch to the down */ |
/* state. */ |
|
if ( (vk == ' ') && !(HIBYTE(flag) & 0x40) ) |
cenButton_SetState( hwnd, PUSH_DOWN, TRUE ); |
} |
else { |
/* WM_KEYUP is sent when a non-system key is released. */ |
/* If a space bar is detected, change to the up state. If */ |
/* the control is the focused control, send the BN_CLICKED */ |
/* notification message. */ |
|
if ( vk == ' ' ) |
{ cenButton_SetState( hwnd, PUSH_DOWN, FALSE ); |
|
if (GET_PBSTATE( hwnd) & PUSH_FOCUS) { |
FORWARD_WM_COMMAND( PARENT( hwnd), GetDlgCtrlID( hwnd), |
hwnd, BN_CLICKED, SendMessage); |
if(!IsWindow(hwnd)) |
return; |
} |
} |
} |
cenButton_FnEnd( hwnd, wState); |
} |
#endif |
|
static void WINAPI |
cenButton_OnKillFocus( |
HWND hwnd, |
HWND hwndNewFocus) |
{ |
WORD wState; |
|
wState = cenButton_FnStart( hwnd); |
cenButton_SetState( hwnd, PUSH_FOCUS, FALSE ); |
cenButton_FnEnd( hwnd, wState); |
} |
|
static void WINAPI |
cenButton_OnLButtonDown( |
HWND hwnd, |
BOOL bDblClick, |
UINT x, |
UINT y, |
UINT keyState) |
{ |
WORD wState; |
|
wState = cenButton_FnStart( hwnd); |
/* capture the mouse*/ |
SetCapture( hwnd ); |
/* set focus to ourself*/ |
SetFocus( hwnd ); |
SET_PBCAPTURE( hwnd, TRUE ); |
SET_PBWASINSIDE( hwnd, TRUE ); |
/* set down state*/ |
cenButton_SetState( hwnd, PUSH_DOWN, TRUE ); |
cenButton_FnEnd( hwnd, wState); |
} |
|
static void WINAPI |
cenButton_OnLButtonUp( |
HWND hwnd, |
UINT x, |
UINT y, |
UINT keys) |
{ |
WORD wState; |
DWORD dwStyle; |
|
dwStyle = GetWindowLong(hwnd, GWL_STYLE); |
wState = cenButton_FnStart( hwnd); |
|
/* only draw up state if we captured mouse*/ |
if(GetCapture() == hwnd) |
cenButton_SetState( hwnd, PUSH_DOWN, FALSE ); |
/* release mouse capture*/ |
ReleaseCapture(); |
|
/* if cursor is inside control, send clicked notification to parent*/ |
if (GET_PBWASINSIDE( hwnd)) { |
switch((int)(dwStyle & 0x0f)) { |
case BS_AUTOCHECKBOX: |
SendMessage(hwnd,BM_SETCHECK,(wState & PBS_CHECKED)?0:1,0L); |
break; |
case BS_AUTORADIOBUTTON: |
CheckRadioButton(PARENT(hwnd),0,0xffff,hwnd->id); |
break; |
} |
FORWARD_WM_COMMAND( PARENT( hwnd), GetDlgCtrlID( hwnd), hwnd, |
BN_CLICKED, SendMessage); |
if(!IsWindow(hwnd)) |
return; |
} |
|
SET_PBCAPTURE( hwnd, FALSE ); |
SET_PBWASINSIDE( hwnd, FALSE ); |
cenButton_FnEnd( hwnd, wState); |
} |
|
static void WINAPI |
cenButton_OnMouseMove( |
HWND hwnd, |
UINT x, |
UINT y, |
UINT keys) |
{ |
/* WM_MOUSEMOVE is sent at every discernable mouse */ |
/* movement. It is necessary to detect this because if */ |
/* the mouse has been captured (because of a button down */ |
/* message), the location of the cursor needs to be */ |
/* tracked. If it moves out of the confines of the */ |
/* control, the control should change to the focus/up */ |
/* state (and retain capture.) If the cursor then moves */ |
/* back into the control, change back to the down state. */ |
|
WORD wState; |
DWORD dwStyle; |
|
wState = cenButton_FnStart( hwnd); |
dwStyle = GetWindowLong(hwnd, GWL_STYLE); |
if( GET_PBCAPTURE( hwnd)) { |
if( !PtInsideWindow( hwnd, x, y) ) { |
if( GET_PBWASINSIDE( hwnd)) { |
cenButton_SetState( hwnd, PUSH_DOWN, FALSE); |
SET_PBWASINSIDE( hwnd, FALSE ); |
} |
} else { |
if( !GET_PBWASINSIDE( hwnd) ) { |
cenButton_SetState( hwnd, PUSH_DOWN, TRUE ); |
SET_PBWASINSIDE( hwnd, TRUE ); |
} |
} |
} |
cenButton_FnEnd( hwnd, wState); |
} |
|
static void WINAPI |
cenButton_OnPaint( |
HWND hwnd, |
HDC hDCwParam) |
{ |
UINT wEnumState; |
DWORD dwStyle; |
|
if( GET_PBSTATE( hwnd) & PUSH_DISABLED) |
wEnumState = PBS_DISABLED; |
else if( GET_PBSTATE( hwnd) & PUSH_DOWN) |
wEnumState = PBS_FOCUSDOWN; |
else if( GET_PBSTATE( hwnd) & PUSH_CHECKED) |
wEnumState = PBS_CHECKED; |
else |
{ |
if( GET_PBSTATE( hwnd) & PUSH_FOCUS) |
wEnumState = PBS_FOCUSUP; |
else |
wEnumState = PBS_UP; |
if( GET_PBSTATE( hwnd) & PUSH_DEFAULT) |
wEnumState |= PBS_DEFAULT; |
} |
|
/* common draw code for button and checkbox*/ |
dwStyle = GetWindowLong(hwnd, GWL_STYLE); |
switch((int)(dwStyle & 0x0f)) { |
case BS_GROUPBOX: |
DrawGroupBox( hwnd, hDCwParam, dwStyle); |
break; |
default: |
DrawPushButton( hwnd, hDCwParam, wEnumState, dwStyle); |
} |
} |
|
static void WINAPI |
DrawPushButton(HWND hwnd,HDC hDCwParam,UINT wEnumState,DWORD dwStyle) |
{ |
HDC hdc; |
HBRUSH hNewBrush; |
RECT rect; |
RECT rectClient; |
RECT rectSave; |
RECT rc; |
int iFaceOffset = 0; |
INT uiHeight; |
INT uiWidth; |
COLORREF crOld; |
COLORREF crBkOld; |
int oldBkMode; |
HFONT hNewFont; |
HFONT hOldFont; |
HPEN hOldPen; |
COLORREF hOldColor; |
PAINTSTRUCT ps; |
char buf[256]; |
#define uiWidthFrame 0 |
#define uiWidthShadow 2 |
|
hdc = BeginPaint(hwnd, &ps); |
if(!hdc) |
goto Return; |
|
GetWindowText(hwnd, buf, sizeof(buf)); |
GetClientRect( hwnd, &rectClient ); |
uiWidth = rectClient.right - rectClient.left; |
uiHeight = rectClient.bottom - rectClient.top; |
|
hNewBrush = (HBRUSH) GetStockObject(LTGRAY_BRUSH); |
crOld = SetTextColor( hdc, GetSysColor( COLOR_BTNTEXT)); |
crBkOld = SetBkColor( hdc, GetSysColor( COLOR_BTNFACE)); |
|
rc = rectClient; |
switch((int)(dwStyle & 0x0f)) { |
case BS_PUSHBUTTON: |
case BS_DEFPUSHBUTTON: |
if( wEnumState & PBS_FOCUSDOWN) { |
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_WINDOWFRAME), GetSysColor(COLOR_WINDOWFRAME)); |
InsetR(&rc, 1, 1); |
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_BTNSHADOW)); |
InsetR(&rc, 1, 1); |
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNFACE)); |
iFaceOffset = 1; |
} else { |
if(wEnumState & PBS_DEFAULT) { |
Draw3dBox(hdc, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_WINDOWFRAME), |
GetSysColor(COLOR_WINDOWFRAME)); |
InsetR(&rc, 1, 1); |
} |
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_BTNHIGHLIGHT),GetSysColor(COLOR_WINDOWFRAME)); |
InsetR(&rc, 1, 1); |
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_3DLIGHT), GetSysColor(COLOR_BTNSHADOW)); |
InsetR(&rc, 1, 1); |
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNFACE)); |
iFaceOffset = 0; |
} |
break; |
|
case BS_CHECKBOX: |
case BS_AUTOCHECKBOX: |
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNFACE)); |
/*rc.left += 2;*/ |
/*rc.top += 2;*/ |
rc.right = rc.left + 12; |
rc.bottom = rc.top + 12; |
/*Draw3dBox(hdc, rc.left, rc.top, 8, 8, |
GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_3DLIGHT));*/ |
Draw3dInset(hdc, rc.left, rc.top, 12, 12); |
InsetR(&rc, 2, 2); |
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNHIGHLIGHT)); |
iFaceOffset = 1; |
if(wEnumState & PBS_CHECKED) { |
MoveToEx(hdc, rc.left, rc.top,NULL); |
LineTo(hdc, rc.right, rc.bottom); |
MoveToEx(hdc, rc.left, rc.bottom,NULL); |
LineTo(hdc, rc.right, rc.top); |
} |
break; |
|
case BS_AUTORADIOBUTTON: |
case BS_RADIOBUTTON: |
FastFillRect(hdc, &rc, GetSysColor(COLOR_BTNFACE)); |
rc.left = 0; |
rc.top += 1; |
rc.right = rc.left + 10; |
rc.bottom = rc.top + 10; |
|
SelectObject(hdc, GetStockObject(NULL_BRUSH)); |
hOldPen = SelectObject(hdc, CreatePen(PS_SOLID, 1, |
GetSysColor(COLOR_BTNSHADOW))); |
SelectObject(hdc, GetStockObject(WHITE_BRUSH)); |
Ellipse(hdc,rc.left,rc.top, rc.right,rc.bottom); |
InsetR(&rc, 1, 1); |
|
SelectObject(hdc, GetStockObject(WHITE_BRUSH)); |
DeleteObject(SelectObject(hdc, |
CreatePen(PS_SOLID, 1,GetSysColor(COLOR_WINDOWFRAME)))); |
Ellipse(hdc,rc.left,rc.top, rc.right,rc.bottom); |
DeleteObject(SelectObject(hdc, hOldPen)); |
|
iFaceOffset = 0; |
if(wEnumState & PBS_CHECKED) |
Ellipse(hdc, rc.left+2, rc.top+2, rc.right-2, |
rc.bottom-2); |
break; |
} |
|
/* |
* draw text |
*/ |
if(buf[ 0]) { |
hNewFont = GetStockObject( DEFAULT_GUI_FONT); |
hOldFont = SelectObject( hdc, hNewFont); |
|
/* calculate text bounding rect*/ |
rect.left = 0; |
rect.top = 0; |
DrawText( hdc, buf, -1, &rect, DT_CALCRECT | DT_LEFT | |
DT_SINGLELINE | DT_TOP); |
rectSave = rect; |
|
/* |
* calculate text draw location |
*/ |
switch((int)(dwStyle & (BS_LEFT|BS_CENTER|BS_RIGHT))) { |
case BS_CENTER: |
default: |
rect.left = (uiWidth - (rect.right - rect.left)) / 2 |
+ iFaceOffset; |
break; |
case BS_LEFT: |
rect.left = uiWidthFrame + uiWidthShadow + 2 |
+ iFaceOffset; |
break; |
case BS_RIGHT: |
rect.left = (rect.right - rect.left) + uiWidthFrame |
+ uiWidthShadow + 4 + iFaceOffset; |
break; |
} |
|
switch((int)(dwStyle & 0x0f)) { |
case BS_CHECKBOX: |
case BS_AUTOCHECKBOX: |
case BS_AUTORADIOBUTTON: |
case BS_RADIOBUTTON: |
rect.left = 12; |
break; |
} |
|
rect.right += rect.left - rectSave.left; |
|
switch((int)(dwStyle & (BS_TOP|BS_VCENTER|BS_BOTTOM))) { |
case BS_VCENTER: |
default: |
rect.top = (uiHeight - (rect.bottom - rect.top)) / 2 |
+ iFaceOffset; |
break; |
case BS_TOP: |
rect.top = 2 + uiWidthFrame + uiWidthShadow |
+ iFaceOffset; |
break; |
case BS_BOTTOM: |
rect.top = uiHeight - uiWidthFrame - uiWidthShadow - |
(rect.bottom - rect.top) - 1 + iFaceOffset; |
break; |
} |
switch((int)(dwStyle & 0x0f)) { |
case BS_CHECKBOX: |
case BS_AUTOCHECKBOX: |
case BS_AUTORADIOBUTTON: |
case BS_RADIOBUTTON: |
rect.top = 0; |
break; |
} |
rect.bottom += rect.top - rectSave.top; |
|
oldBkMode = SetBkMode( hdc, TRANSPARENT); |
if(wEnumState & PBS_DISABLED) |
hOldColor = SetTextColor( hdc, |
GetSysColor( COLOR_GRAYTEXT)); |
else |
hOldColor = SetTextColor( hdc, |
GetSysColor( COLOR_BTNTEXT)); |
|
DrawText( hdc, buf, -1, &rect,DT_LEFT | DT_SINGLELINE | DT_TOP); |
|
SetBkMode( hdc, oldBkMode); |
SetTextColor( hdc, hOldColor); |
SelectObject( hdc, hOldFont); |
} |
|
#if 0 |
if( (!(wEnumState&PBS_CHECKED) && (wEnumState&PBS_FOCUSDOWN)) || |
(wEnumState & PBS_FOCUSUP)) { |
rect = rectClient; |
uiWidth = uiWidthFrame + uiWidthShadow + 2; |
rect.left += uiWidth; |
rect.top += uiWidth; |
rect.right -= uiWidth; |
rect.bottom -= uiWidth; |
if((dwStyle & (BS_FLAT|BS_NOFOCUSRECT)) == 0) |
DrawFocusRect( hdc, &rect); |
} |
#endif |
|
SetTextColor( hdc, crOld); |
SetBkColor( hdc, crBkOld); |
|
Return: |
EndPaint(hwnd, &ps); |
} |
|
static void WINAPI |
cenButton_OnSetFocus( |
HWND hwnd, |
HWND hwndOldFocus) |
{ |
/* WM_SETFOCUS is sent when the user clicks on the control */ |
/* or when the dialog manager determines that a keystroke */ |
/* should cause the control to be focused. This affects */ |
/* the appearance of the control so the state is saved for */ |
/* future drawing. */ |
|
WORD wState; |
|
wState = cenButton_FnStart( hwnd); |
/*if(!IsWindowEnabled(hwnd)) |
cenButton_SetState( hwnd, PUSH_FOCUS, TRUE );*/ |
cenButton_FnEnd( hwnd, wState); |
} |
|
static void WINAPI |
cenButton_OnSetStyle( |
HWND hwnd, |
WORD style, |
BOOL bRedraw) |
{ |
WORD wState; |
|
wState = cenButton_FnStart( hwnd); |
cenButton_SetState( hwnd, PUSH_DEFAULT, |
(style & 0x0f) == BS_DEFPUSHBUTTON); |
cenButton_FnEnd( hwnd, wState); |
} |
|
static void WINAPI |
cenButton_OnSetState( |
HWND hwnd, |
WORD wState) |
{ |
WORD wStateOld; |
|
wStateOld = cenButton_FnStart( hwnd); |
cenButton_SetState( hwnd, PUSH_DOWN, (wState ? TRUE : FALSE ) ); |
cenButton_FnEnd( hwnd, wStateOld); |
} |
|
static void WINAPI |
cenButton_SetState( |
HWND hwnd, |
WORD wState, |
BOOL bEnable ) |
{ |
/* Turn on/off state bits according to the bEnable flag. If the */ |
/* new state is different, invalidate the client window so that */ |
/* the proper bitmap is displayed. */ |
|
WORD wNewState; |
WORD wOldState; |
RECT rectClient; |
|
wOldState = GET_PBSTATE( hwnd); |
wNewState = (bEnable ? (wOldState | wState) : (wOldState & ~wState)); |
|
if (wOldState != wNewState) |
{ SET_PBSTATE( hwnd, wNewState ); |
GetClientRect(hwnd, &rectClient); |
InvalidateRect(hwnd, &rectClient, FALSE); |
} |
} |
|
#if 0 |
static void WINAPI |
cenButton_OnSetFont( |
HWND hwnd, |
HFONT hFont, |
BOOL bRedraw) |
{ |
BOOL bDeleteFont = FALSE; |
HFONT hFontNew = 0; |
LOGFONT logFont; |
|
/* create a thin font*/ |
if( GetObject( hFont, sizeof( logFont), &logFont) != 0) { |
if( logFont.lfWeight != FW_NORMAL) { |
logFont.lfWeight = FW_NORMAL; |
if( ( hFontNew = CreateFontIndirect( &logFont)) != 0) { |
hFont = hFontNew; |
bDeleteFont = TRUE; |
} |
} |
} |
|
if( GET_PBDELETEFONT( hwnd)) |
DeleteObject( GET_PBFONT( hwnd)); |
|
SET_PBDELETEFONT( hwnd, bDeleteFont); |
SET_PBFONT( hwnd, hFont); |
|
FORWARD_WM_SETFONT( hwnd, hFont, bRedraw, DefWindowProc); |
} |
#endif |
|
static void WINAPI |
cenButton_OnSetText( |
HWND hwnd, |
LPCSTR lpszText) |
{ |
/* WM_SETTEXT is sent to change the text of the button */ |
/* control. In this case we allow the default window proc */ |
/* to handle the message first. But this only affects the */ |
/* internal Windows data structure of the control, it does */ |
/* not display the change. To do this we invalidate and */ |
/* update the client area of the control which displays */ |
/* the new text. */ |
|
FORWARD_WM_SETTEXT( hwnd, lpszText, DefWindowProc); |
InvalidateRect( hwnd, NULL, FALSE); |
UpdateWindow( hwnd); |
} |
|
LRESULT CALLBACK |
cenButtonWndFn( |
HWND hwnd, |
UINT message, |
WPARAM wParam, |
LPARAM lParam) |
{ |
/* This is the window proc for the pushbutton control. Most of */ |
/* the drawing is accomplished in the DrawPushButton() function. */ |
/* The code below is mainly concerned with the keyboard and mouse */ |
/* events that the control detects. */ |
|
switch( message) { |
HANDLE_MSG( hwnd, WM_CREATE, cenButton_OnCreate); |
/*HANDLE_MSG( hwnd, WM_ENABLE, cenButton_OnEnable);*/ |
HANDLE_MSG( hwnd, WM_SETFOCUS, cenButton_OnSetFocus); |
HANDLE_MSG( hwnd, WM_KILLFOCUS, cenButton_OnKillFocus); |
HANDLE_MSG( hwnd, WM_LBUTTONDOWN, cenButton_OnLButtonDown); |
HANDLE_MSG( hwnd, WM_LBUTTONDBLCLK, cenButton_OnLButtonDown); |
HANDLE_MSG( hwnd, WM_LBUTTONUP, cenButton_OnLButtonUp); |
HANDLE_MSG( hwnd, WM_MOUSEMOVE, cenButton_OnMouseMove); |
/*HANDLE_MSG( hwnd, WM_KEYDOWN, cenButton_OnKey);*/ |
/*HANDLE_MSG( hwnd, WM_KEYUP, cenButton_OnKey);*/ |
HANDLE_MSG( hwnd, WM_ERASEBKGND, cenButton_OnEraseBkgnd); |
HANDLE_MSG( hwnd, WM_PAINT_SPECIAL, cenButton_OnPaint); |
/*HANDLE_MSG( hwnd, WM_GETDLGCODE, cenButton_OnGetDlgCode);*/ |
HANDLE_MSG( hwnd, BM_SETSTYLE, cenButton_OnSetStyle); |
HANDLE_MSG( hwnd, BM_GETSTATE, cenButton_OnGetState); |
HANDLE_MSG( hwnd, BM_SETSTATE, cenButton_OnSetState); |
/*HANDLE_MSG( hwnd, WM_DESTROY, cenButton_OnDestroy);*/ |
/*HANDLE_MSG( hwnd, WM_SETFONT, cenButton_OnSetFont);*/ |
HANDLE_MSG( hwnd, WM_SETTEXT, cenButton_OnSetText); |
|
case BM_GETCHECK: |
#if 0 |
return cenButton_OnGetState(hwnd); |
#else |
return( ( GET_PBSTATE(hwnd) & PUSH_CHECKED) == PUSH_CHECKED); |
#endif |
|
case BM_SETCHECK: |
#if 0 |
cenButton_OnSetState(hwnd, (WORD)wParam); |
#else |
{ |
WORD wStateOld; |
|
wStateOld = cenButton_FnStart( hwnd); |
cenButton_SetState( hwnd, PUSH_CHECKED, |
((WORD)wParam ? TRUE : FALSE) ); |
cenButton_FnEnd( hwnd, wStateOld); |
} |
#endif |
return 0; |
} |
|
return DefWindowProc( hwnd, message, wParam, lParam); |
} |
|
/* backwards compatibility*/ |
int WINAPI |
MwButtonRegister(HINSTANCE hInstance) |
{ |
return MwRegisterButtonControl(hInstance); |
} |
|
int WINAPI |
MwRegisterButtonControl(HINSTANCE hInstance) |
{ |
WNDCLASS wc; |
|
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS; |
wc.lpfnWndProc = (WNDPROC)cenButtonWndFn; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 10; |
wc.hInstance = hInstance; |
wc.hIcon = NULL; |
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/ |
wc.hbrBackground= GetStockObject(LTGRAY_BRUSH); |
wc.lpszMenuName = NULL; |
wc.lpszClassName= "BUTTON"; |
|
return RegisterClass(&wc); |
} |
|
static void WINAPI |
DrawGroupBox(HWND hwnd,HDC hDCwParam,DWORD dwStyle) |
{ |
HDC hdc; |
HFONT hFont; |
RECT rcClient; |
RECT rcText; |
RECT rc; |
PAINTSTRUCT ps; |
char buf[256]; |
HPEN hPenTop, hPenBottom, holdPen; |
COLORREF crTop,crBottom; |
|
|
hdc = BeginPaint(hwnd, &ps); |
if(!hdc) |
goto Return; |
|
GetWindowText(hwnd, buf, sizeof(buf)); |
GetClientRect( hwnd, &rcClient ); |
|
hFont = GetStockObject( DEFAULT_GUI_FONT); |
if (hFont) |
hFont = SelectObject(hdc,hFont); |
|
rc.left = 0; |
rc.top = 0; |
DrawText( hdc, buf, -1, &rc, DT_CALCRECT); |
|
if(buf[ 0]) { |
SetTextColor(hdc,GetSysColor(COLOR_WINDOWTEXT)); |
SetBkMode(hdc,TRANSPARENT); |
SetRect(&rcText,8,2,rc.right+8,rc.bottom+2); |
DrawText(hdc,buf,-1,&rcText,DT_CENTER); |
} |
|
crTop=GetSysColor(COLOR_BTNHIGHLIGHT); |
crBottom=GetSysColor(COLOR_BTNSHADOW); |
|
hPenTop = CreatePen( PS_SOLID, 1, crTop); |
hPenBottom = CreatePen( PS_SOLID, 1, crBottom); |
holdPen = SelectObject( hdc, hPenTop); |
|
MoveToEx(hdc,0,rc.bottom/2,NULL); |
|
if(buf[ 0]) { |
LineTo(hdc,5,rc.bottom/2); |
MoveToEx(hdc,rc.right+11,rc.bottom/2,NULL); |
LineTo(hdc,rcClient.right-1,rc.bottom/2); |
} |
else |
LineTo(hdc,rcClient.right-1,rc.bottom/2); |
|
LineTo(hdc,rcClient.right-1,rcClient.bottom-1); |
|
SelectObject( hdc, hPenBottom); |
LineTo(hdc,rcClient.left,rcClient.bottom-1); |
LineTo(hdc,rcClient.left,rc.bottom/2); |
|
SelectObject( hdc, holdPen); |
DeleteObject( hPenTop); |
DeleteObject( hPenBottom); |
|
if (hFont) |
SelectObject(hdc,hFont); |
|
Return: |
EndPaint(hwnd, &ps); |
} |
|
/* temporarily here, should move to winuser.c*/ |
void WINAPI |
CheckRadioButton(HWND hDlg, int nIDFirst,int nIDLast,int nIDCheckButton) |
{ |
HWND hWndCheck,hWndTemp; |
DWORD dwStyle; |
|
if (!(hWndCheck = GetDlgItem(hDlg,nIDCheckButton))) |
return; |
|
for(hWndTemp=hDlg->children; hWndTemp; hWndTemp=hWndTemp->siblings) { |
if(hWndCheck == hWndTemp) continue; |
dwStyle = GetWindowLong(hWndTemp,GWL_STYLE); |
if ((hWndTemp->id >= (WORD)nIDFirst) && |
(hWndTemp->id <= (WORD)nIDLast) && |
((LOWORD(dwStyle) == BS_RADIOBUTTON) || |
(LOWORD(dwStyle) == BS_AUTORADIOBUTTON))) |
SendMessage(hWndTemp,BM_SETCHECK,FALSE,0); |
} |
SendMessage(hWndCheck,BM_SETCHECK,TRUE,0); |
} |
/winlib/mwuser.c
0,0 → 1,7
#include "windows.h" |
|
int |
MwUserInit(int ac,char **av) |
{ |
return 0; |
} |
/winlib/draw3d.c
0,0 → 1,144
#include "windows.h" |
#include "wintools.h" |
/* |
* WIN Draw Library |
* Draw3dShadow - draws a shadow with bottom-left and top-right missing |
* Draw3dBox - draws a complete shadow |
* Draw3dInset - draw a 2 line 3d inset |
* Draw3dOutset - draw a 2 line 3d outset |
*/ |
|
/* |
* Draw3dShadow |
* NOINDENT_BLACK T=white, B=black |
* NOINDENT_GRAY T=white, B=dkgray |
* INDENT_BLACK T=black, B=white |
* INDENT_GRAY T=dkgray, B=white |
* |
* TTTTTTTTTTTTTT |
* T B |
* T B |
* BBBBBBBBBBBBBB |
*/ |
void WINAPI |
Draw3dShadow(HDC hDC,int x,int y,int w,int h,COLORREF crTop,COLORREF crBottom) |
{ |
HPEN hPenTop, hPenBottom, holdPen; |
|
hPenTop = CreatePen( PS_SOLID, 1, crTop); |
hPenBottom = CreatePen( PS_SOLID, 1, crBottom); |
holdPen = SelectObject( hDC, hPenTop); |
MoveToEx( hDC, x, y+h-2, NULL); |
LineTo( hDC, x, y); /* left side*/ |
LineTo( hDC, x+w-1, y); /* top side*/ |
|
SelectObject( hDC, hPenBottom); |
MoveToEx( hDC, x+w-1, y+1, NULL); |
LineTo( hDC, x+w-1, y+h-1); /* right side*/ |
LineTo( hDC, x, y+h-1); /* bottom side*/ |
|
SelectObject( hDC, holdPen); |
DeleteObject( hPenTop); |
DeleteObject( hPenBottom); |
} |
|
/* |
* Draw3dBox |
* |
* TTTTTTTTTTTTTTB |
* T B |
* T B |
* BBBBBBBBBBBBBBB |
*/ |
void WINAPI |
Draw3dBox(HDC hDC,int x,int y,int w,int h,COLORREF crTop,COLORREF crBottom) |
{ |
HPEN hPenTop, hPenBottom, holdPen; |
|
hPenTop = CreatePen( PS_SOLID, 1, crTop); |
hPenBottom = CreatePen( PS_SOLID, 1, crBottom); |
holdPen = SelectObject( hDC, hPenTop); |
MoveToEx( hDC, x, y+h-2, NULL); |
LineTo( hDC, x, y); /* left side*/ |
MoveToEx( hDC, x, y, NULL); |
LineTo( hDC, x+w-1, y); /* top side*/ |
|
SelectObject( hDC, hPenBottom); |
MoveToEx( hDC, x+w-1, y, NULL); |
LineTo( hDC, x+w-1, y+h-1); /* right side*/ |
LineTo( hDC, x-1, y+h-1); /* bottom side*/ |
|
SelectObject( hDC, holdPen); |
DeleteObject( hPenTop); |
DeleteObject( hPenBottom); |
} |
|
/* |
* Draw 2 line deep 3d inset |
*/ |
void WINAPI |
Draw3dInset(HDC hDC,int x,int y,int w,int h) |
{ |
Draw3dBox(hDC, x, y, w, h, |
GetSysColor(COLOR_BTNSHADOW), GetSysColor(COLOR_BTNHIGHLIGHT)); |
++x; ++y; w -= 2; h -= 2; |
Draw3dBox(hDC, x, y, w, h, |
GetSysColor(COLOR_WINDOWFRAME), GetSysColor(COLOR_3DLIGHT)); |
} |
|
/* |
* Draw 2 line deep 3d outset |
*/ |
void WINAPI |
Draw3dOutset(HDC hDC,int x,int y,int w,int h) |
{ |
Draw3dBox(hDC, x, y, w, h, |
GetSysColor(COLOR_3DLIGHT), GetSysColor(COLOR_WINDOWFRAME)); |
++x; ++y; w -= 2; h -= 2; |
Draw3dBox(hDC, x, y, w, h, |
GetSysColor(COLOR_BTNHIGHLIGHT), GetSysColor(COLOR_BTNSHADOW)); |
} |
|
/* |
* Draw 1 line pushed down rectangle |
*/ |
void WINAPI |
Draw3dPushDown(HDC hDC, int x, int y, int w, int h) |
{ |
Draw3dBox(hDC, x, y, w, h, GetSysColor(COLOR_BTNSHADOW), |
GetSysColor(COLOR_BTNSHADOW)); |
} |
|
/* |
* Draw either 3d up or down depending on state |
*/ |
void WINAPI |
Draw3dUpDownState(HDC hDC, int x, int y, int w, int h, BOOL fDown) |
{ |
if (fDown) |
Draw3dPushDown(hDC, x, y, w, h); |
else Draw3dOutset(hDC, x, y, w, h); |
} |
|
void WINAPI |
Draw3dUpFrame(HDC hDC, int l, int t, int r, int b) |
{ |
RECT rc; |
HBRUSH hbr; |
|
SetRect(&rc, l, t, r, b); |
Draw3dBox(hDC, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_3DLIGHT), |
GetSysColor(COLOR_WINDOWFRAME)); |
InflateRect(&rc, -1, -1); |
Draw3dBox(hDC, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_BTNHIGHLIGHT), |
GetSysColor(COLOR_BTNSHADOW)); |
InflateRect(&rc, -1, -1); |
|
hbr = CreateSolidBrush(GetSysColor(COLOR_BTNFACE)); |
FillRect(hDC, &rc, hbr); |
DeleteObject(hbr); |
} |
/winlib/listbox.c
0,0 → 1,1688
/* |
* Copyright (C) 1999, 2000, Wei Yongming. |
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* |
* Listbox for Microwindows win32 api. |
*/ |
|
/* |
** This library is free software; you can redistribute it and/or |
** modify it under the terms of the GNU Library General Public |
** License as published by the Free Software Foundation; either |
** version 2 of the License, or (at your option) any later version. |
** |
** This library is distributed in the hope that it will be useful, |
** but WITHOUT ANY WARRANTY; without even the implied warranty of |
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
** Library General Public License for more details. |
** |
** You should have received a copy of the GNU Library General Public |
** License along with this library; if not, write to the Free |
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
** MA 02111-1307, USA |
*/ |
|
/* |
** Alternatively, the contents of this file may be used under the terms |
** of the Mozilla Public License (the "MPL License") in which case the |
** provisions of the MPL License are applicable instead of those above. |
*/ |
|
/* Note: |
** Although there was a version by Zhao Jianghua, this version of |
** LISTBOX control is written by Wei Yongming from scratch. |
** |
** Modify records: |
** |
** Who When Where For What Status |
**----------------------------------------------------------------------------- |
** Wei Yongming 1999/10/18 Tsinghua Item Additional Data Finished |
** Wei Yongming 1999/10/31 Tsinghua Space bar for checkmark Finished |
** Wei Yongming 1999/10/31 Tsinghua Character match item Finished |
** Wei Yongming 1999/11/07 Tsinghua Character match item Bug fixing |
** WEI Yongming 2000/01/20 Tsinghua Thumb dragging Finished |
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished |
** Kevin Tseng 2000/05/26 gv port to microwin ported |
** Greg Haerr 2000/06/15 Utah 3d look, bug fixes Finished |
** Kevin Tseng 2000/06/22 gv port to mw-nanox ported |
** Kevin Tseng 2000/06/22 gv fixed bug if no item Finished |
** Kevin Tseng 2000/08/08 gv enable scrollbar(V) porting |
** Kevin Tseng 2000/08/10 gv enable scrollbar(V) ported |
** Kevin Tseng 2000/08/10 gv WM_CHAR, WM_KEYDOWN ported |
** |
** TODO: |
** 1. Multiple columns support. |
*/ |
|
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#define MWINCLUDECOLORS |
#include "windows.h" |
#include "wintools.h" /* Draw3dBox */ |
#include "device.h" /* GdGetTextSize */ |
|
#define FixStrAlloc(n) malloc((n)+1) |
#define FreeFixStr(p) free(p) |
|
#define LBIF_NORMAL 0x0000L |
#define LBIF_SELECTED 0x0001L |
#define LBIF_CHECKED 0x0010L |
#define LBIF_PARTCHECKED 0x0020L |
#define LBIF_CHECKMARKMASK 0x00F0L |
|
#define CMFLAG_BLANK 0 |
#define CMFLAG_CHECKED 1 |
#define CMFLAG_PARTCHECKED 2 |
typedef struct _LISTBOXITEMINFO { |
int insPos; /* insert position */ |
char* string; /* item string */ |
int cmFlag; /* check mark flag */ |
HICON hIcon; /* handle of icon */ |
} LISTBOXITEMINFO, *PLISTBOXITEMINFO; |
|
typedef struct _LISTBOXITEM { |
char* key; /* item sort key */ |
DWORD dwFlags; /* item flags */ |
DWORD dwData; /* item data */ |
DWORD dwAddData; /* item additional data */ |
struct _LISTBOXITEM* next; /* next item */ |
} LISTBOXITEM, *PLISTBOXITEM; |
|
#define DEF_LB_BUFFER_LEN 5 |
|
#define LBF_FOCUS 0x0001 |
#define LBF_NOTHINGSELECTED 0x0002 |
|
typedef struct _LISTBOXDATA { |
DWORD dwFlags; /* listbox flags */ |
|
int itemCount; /* items count */ |
int itemTop; /* start display item */ |
int itemVisibles; /* number of visible items */ |
|
int itemHilighted; /* current hilighted item */ |
int itemHeight; /* item height */ |
|
LISTBOXITEM* head; /* items linked list head */ |
|
int buffLen; /* buffer length */ |
LISTBOXITEM* buffStart; /* buffer start */ |
LISTBOXITEM* buffEnd; /* buffer end */ |
LISTBOXITEM* freeList; /* free list in buffer */ |
} LISTBOXDATA, *PLISTBOXDATA; |
|
void ListboxControlCleanup (); |
static LRESULT CALLBACK |
ListboxCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); |
|
#define ITEM_BOTTOM(x) (x->itemTop + x->itemVisibles - 1) |
|
#define LST_WIDTH_CHECKMARK 11 |
#define LST_HEIGHT_CHECKMARK 11 |
#define LST_INTER_BMPTEXT 2 |
|
int WINAPI MwRegisterListboxControl(HINSTANCE hInstance) |
{ |
WNDCLASS wc; |
#if 0 |
static BITMAP sg_bmpCheckMark; |
if (!LoadSystemBitmap (&sg_bmpCheckMark, "checkmark")) { |
fprintf (stderr, "Load ListBox Check Mark Bitmap failure!\n"); |
return FALSE; |
} |
#endif |
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS; |
wc.lpfnWndProc = (WNDPROC)ListboxCtrlProc; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 0; |
wc.hInstance = hInstance; |
wc.hIcon = NULL; |
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/ |
wc.hbrBackground= GetStockObject(WHITE_BRUSH); |
wc.lpszMenuName = NULL; |
wc.lpszClassName= "LISTBOX"; |
|
return RegisterClass(&wc); |
} |
|
void ListboxControlCleanup () |
{ |
#if 0 |
UnloadBitmap (&sg_bmpCheckMark); |
#endif |
} |
|
static LRESULT NotifyParent (HWND hwnd, int id, int code) |
{ |
return SendMessage (GetParent (hwnd), WM_COMMAND, |
(WPARAM) MAKELONG (id, code), (LPARAM)hwnd); |
} |
|
static BOOL lstInitListBoxData (HWND hwnd,LISTBOXDATA* pData, int len) |
{ |
int i, xw, xh, xb; |
PLISTBOXITEM plbi; |
HDC hdc; |
|
memset (pData, 0, sizeof (LISTBOXDATA)); |
#if 0 |
pData->itemHeight = GetSysCharHeight (); |
#else |
hdc=GetDC(hwnd); |
#if MWCLIENT /* nanox client */ |
GrSetGCFont(hdc->gc,hdc->font->fontid); |
GrGetGCTextSize(hdc->gc,"X",1, |
MWTF_ASCII,&xw,&xh,&xb); |
#else |
GdSetFont(hdc->font->pfont); |
GdGetTextSize(hdc->font->pfont,"X",1, |
&xw,&xh,&xb,MWTF_ASCII); |
#endif |
ReleaseDC(hwnd,hdc); |
pData->itemHeight=xh + 1; |
#endif |
pData->itemHilighted = 0; |
pData->dwFlags = LBF_NOTHINGSELECTED; |
|
/* init item buffer. */ |
if (!(pData->buffStart = malloc (len * sizeof (LISTBOXITEM)))) |
return FALSE; |
|
pData->buffLen = len; |
pData->buffEnd = pData->buffStart + len; |
pData->freeList = pData->buffStart; |
|
plbi = pData->freeList; |
for (i = 0; i < len - 1; i++) { |
plbi->next = plbi + 1; |
plbi ++; |
} |
plbi->next = NULL; |
|
return TRUE; |
} |
|
static void lstListBoxCleanUp (LISTBOXDATA* pData) |
{ |
PLISTBOXITEM plbi; |
PLISTBOXITEM next; |
|
plbi = pData->head; |
while (plbi) { |
FreeFixStr (plbi->key); |
next = plbi->next; |
if (plbi < pData->buffStart || plbi > pData->buffEnd) |
free (plbi); |
|
plbi = next; |
} |
|
free (pData->buffStart); |
} |
|
static void lstResetListBoxContent (PLISTBOXDATA pData) |
{ |
int i; |
PLISTBOXITEM plbi, next; |
|
pData->itemCount = 0; |
pData->itemTop = 0; |
pData->itemHilighted = 0; |
#if 0 |
pData->itemVisibles = 0; |
#endif |
|
plbi = pData->head; |
while (plbi) { |
FreeFixStr (plbi->key); |
next = plbi->next; |
if (plbi < pData->buffStart || plbi > pData->buffEnd) |
free (plbi); |
|
plbi = next; |
} |
|
pData->head = NULL; |
pData->freeList = pData->buffStart; |
|
plbi = pData->freeList; |
for (i = 0; i < pData->buffLen - 1; i++) { |
plbi->next = plbi + 1; |
plbi ++; |
} |
plbi->next = NULL; |
} |
|
static PLISTBOXITEM lstAllocItem (PLISTBOXDATA pData) |
{ |
PLISTBOXITEM plbi; |
|
if (pData->freeList) { |
plbi = pData->freeList; |
pData->freeList = plbi->next; |
} |
else |
plbi = (PLISTBOXITEM) malloc (sizeof (LISTBOXITEM)); |
|
return plbi; |
} |
|
static void lstFreeItem (PLISTBOXDATA pData, PLISTBOXITEM plbi) |
{ |
if (plbi < pData->buffStart || plbi > pData->buffEnd) |
free (plbi); |
else { |
plbi->next = pData->freeList; |
pData->freeList = plbi; |
} |
} |
|
static int lstAddNewItem (DWORD dwStyle, |
PLISTBOXDATA pData, PLISTBOXITEM newItem, int pos) |
{ |
PLISTBOXITEM plbi; |
PLISTBOXITEM insPosItem = NULL; |
int insPos = 0; |
|
newItem->next = NULL; |
if (!pData->head) |
insPosItem = NULL; |
else if (dwStyle & LBS_SORT) { |
plbi = pData->head; |
|
if (strcmp (newItem->key, plbi->key) < 0) { |
insPosItem = NULL; |
insPos = 0; |
} |
else { |
while (plbi->next) { |
if (strcmp (newItem->key, plbi->next->key) <= 0) |
break; |
|
plbi = plbi->next; |
insPos ++; |
} |
insPosItem = plbi; |
} |
} |
else { |
plbi = pData->head; |
|
if (pos < 0) { |
while (plbi->next) { |
plbi = plbi->next; |
insPos ++; |
} |
insPosItem = plbi; |
} |
else if (pos > 0) { |
int index = 0; |
|
while (plbi->next) { |
if (pos == index) |
break; |
plbi = plbi->next; |
index ++; |
insPos ++; |
} |
insPosItem = plbi; |
} |
} |
|
if (insPosItem) { |
plbi = insPosItem->next; |
insPosItem->next = newItem; |
newItem->next = plbi; |
|
insPos ++; |
} |
else { |
plbi = pData->head; |
pData->head = newItem; |
newItem->next = plbi; |
} |
|
pData->itemCount ++; |
return insPos; |
} |
|
static PLISTBOXITEM lstRemoveItem (PLISTBOXDATA pData, int* pos) |
{ |
int index = 0; |
PLISTBOXITEM plbi, prev; |
|
if (!pData->head) |
return NULL; |
|
if (*pos < 0) { |
prev = pData->head; |
plbi = pData->head; |
while (plbi->next) { |
prev = plbi; |
plbi = plbi->next; |
index ++; |
} |
|
if (plbi == pData->head) { |
pData->head = pData->head->next; |
*pos = 0; |
return plbi; |
} |
else { |
prev->next = plbi->next; |
*pos = index; |
return plbi; |
} |
} |
else if (*pos == 0) { |
plbi = pData->head; |
pData->head = plbi->next; |
return plbi; |
} |
else { |
index = 0; |
prev = pData->head; |
plbi = pData->head; |
while (plbi->next) { |
if (*pos == index) |
break; |
|
prev = plbi; |
plbi = plbi->next; |
index ++; |
} |
|
if (plbi == pData->head) { |
pData->head = pData->head->next; |
*pos = 0; |
return plbi; |
} |
else { |
prev->next = plbi->next; |
*pos = index; |
return plbi; |
} |
} |
|
return NULL; |
} |
|
static void lstGetItemsRect (PLISTBOXDATA pData, int start, int end, RECT* prc) |
{ |
if (start < 0) |
start = 0; |
|
prc->top = (start - pData->itemTop)*pData->itemHeight; |
|
if (end >= 0) |
prc->bottom = (end - pData->itemTop + 1)*pData->itemHeight; |
|
} |
|
static void lstInvalidateItem (HWND hwnd, PLISTBOXDATA pData, int pos,BOOL fEBk) |
{ |
RECT rcInv; |
|
if (pos < pData->itemTop || pos > (pData->itemTop + pData->itemVisibles)) |
return; |
|
GetClientRect (hwnd, &rcInv); |
rcInv.top = (pos - pData->itemTop)*pData->itemHeight; |
rcInv.bottom = rcInv.top + pData->itemHeight; |
|
InvalidateRect (hwnd, &rcInv, fEBk); |
} |
|
static BOOL lstInvalidateUnderItem (HWND hwnd, PLISTBOXDATA pData, int pos) |
{ |
RECT rcInv; |
|
if (pos > (pData->itemTop + pData->itemVisibles)) |
return FALSE; |
|
if (pos <= pData->itemTop) { |
InvalidateRect (hwnd, NULL, TRUE); |
return TRUE; |
} |
|
GetClientRect (hwnd, &rcInv); |
|
lstGetItemsRect (pData, pos, -1, &rcInv); |
|
if (rcInv.top < rcInv.bottom) |
InvalidateRect (hwnd, &rcInv, TRUE); |
|
return TRUE; |
} |
|
static PLISTBOXITEM lstGetItem (PLISTBOXDATA pData, int pos) |
{ |
int i; |
PLISTBOXITEM plbi; |
|
plbi = pData->head; |
for (i=0; i < pos && plbi; i++) |
plbi = plbi->next; |
|
return plbi; |
} |
|
static int lstFindItem (PLISTBOXDATA pData, int start, char* key, BOOL bExact) |
{ |
PLISTBOXITEM plbi; |
int keylen = strlen (key); |
|
if (start >= (pData->itemCount - 1)) |
start = 0; |
|
plbi = lstGetItem (pData, start); |
|
while (plbi) |
{ |
if (bExact && (keylen != strlen (plbi->key))) { |
plbi = plbi->next; |
start ++; |
continue; |
} |
|
if (strncasecmp (key, plbi->key, keylen) == 0) |
return start; |
|
plbi = plbi->next; |
start ++; |
} |
|
return LB_ERR; |
} |
|
static void lstOnDrawSListBoxItems (HDC hdc, DWORD dwStyle, |
PLISTBOXDATA pData, int width) |
{ |
PLISTBOXITEM plbi; |
int i; |
int x = 0, y = 0; |
int offset; |
RECT rc; |
COLORREF bk; |
|
plbi = lstGetItem (pData, pData->itemTop); |
|
for (i = 0; plbi && i < (pData->itemVisibles + 1); i++) { |
|
if (plbi->dwFlags & LBIF_SELECTED) { |
SetBkColor (hdc, bk = BLUE); |
SetTextColor (hdc, WHITE); |
} |
else { |
SetBkColor (hdc, bk = WHITE); |
SetTextColor (hdc, BLACK); |
} |
rc.left = 0; |
rc.top = y; |
rc.right = width; |
rc.bottom = y + pData->itemHeight; |
FastFillRect(hdc, &rc, bk); |
|
if (dwStyle & LBS_CHECKBOX) { |
x = LST_INTER_BMPTEXT; |
if (plbi->dwFlags & LBIF_CHECKED) |
offset = 0; |
else if (plbi->dwFlags & LBIF_PARTCHECKED) |
offset = LST_WIDTH_CHECKMARK << 1; |
else |
offset = LST_WIDTH_CHECKMARK; |
#if 0 /* fix: no bitmap */ |
FillBoxWithBitmapPart (hdc, |
x, y + ((pData->itemHeight - LST_HEIGHT_CHECKMARK)>>1), |
LST_WIDTH_CHECKMARK, LST_HEIGHT_CHECKMARK, |
0, 0, |
&sg_bmpCheckMark, |
offset, 0); |
#endif |
x += LST_WIDTH_CHECKMARK + LST_INTER_BMPTEXT; |
} |
#if 0 /* fix: no icon */ |
if (dwStyle & LBS_USEICON && plbi->dwData) { |
DrawIcon (hdc, |
x, y, pData->itemHeight, pData->itemHeight, |
(HICON) plbi->dwData); |
x += pData->itemHeight + LST_INTER_BMPTEXT; |
} |
#endif |
|
/* jmt: should be SYSTEM_FIXED_FONT because of minigui's GetSysCharXXX() */ |
#if 0 |
SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT)); |
#endif |
SelectObject(hdc, GetStockObject(SYSTEM_FIXED_FONT)); |
TextOut (hdc, x+2, y, plbi->key,-1); |
|
y += pData->itemHeight; |
plbi = plbi->next; |
} |
} |
|
static int lstSelectItem (DWORD dwStyle, PLISTBOXDATA pData, int newSel) |
{ |
PLISTBOXITEM plbi, newItem; |
int index; |
|
newItem = lstGetItem (pData, newSel); |
#if 1 /* jmt: fixed if no item added */ |
if (!newItem) return -1; |
#endif |
#ifdef _DEBUG |
if (!newItem) |
fprintf (stderr, "ASSERT failed: return value of lstGetItem" |
" in lstSelectItem.\n"); |
#endif |
|
if (dwStyle & LBS_MULTIPLESEL) { |
newItem->dwFlags ^= LBIF_SELECTED; |
return newSel; |
} |
|
index = 0; |
plbi = pData->head; |
while (plbi) { |
if (plbi->dwFlags & LBIF_SELECTED) { |
if (index != newSel) { |
plbi->dwFlags &= ~LBIF_SELECTED; |
newItem->dwFlags |= LBIF_SELECTED; |
return index; |
} |
break; |
} |
|
plbi = plbi->next; |
index ++; |
} |
|
newItem->dwFlags |= LBIF_SELECTED; |
return -1; |
} |
|
static void lstDrawFocusRect (HDC hdc, PLISTBOXDATA pData, RECT* rc) |
{ |
HGDIOBJ oldbrush,oldpen; |
|
if (pData->itemHilighted < pData->itemTop |
|| pData->itemHilighted > (pData->itemTop + pData->itemVisibles)) |
return; |
|
if (pData->dwFlags & LBF_FOCUS) { |
lstGetItemsRect (pData, pData->itemHilighted, pData->itemHilighted, rc); |
#if 0 |
InflateRect (rc, -1, -1); |
|
FocusRect (hdc, rc->left - 1, rc->top, rc->right, rc->bottom); |
#else |
oldbrush=SelectObject(hdc, GetStockObject(NULL_BRUSH)); |
oldpen=SelectObject(hdc, CreatePen(PS_SOLID, 1, |
GetSysColor(COLOR_BTNHIGHLIGHT))); |
#if 0 |
GdSetMode(MWMODE_XOR); |
#endif |
Rectangle (hdc, rc->left, rc->top, rc->right, rc->bottom); |
#if 0 |
GdSetMode(MWMODE_SET); |
#endif |
SelectObject(hdc,oldbrush); |
DeleteObject(SelectObject(hdc,oldpen)); |
#endif |
} |
} |
|
static void lstCalcParams (const RECT* rcClient, PLISTBOXDATA pData) |
{ |
#define RECTHP(prc) (prc->bottom - prc->top) |
pData->itemVisibles = (RECTHP (rcClient)) / pData->itemHeight; |
|
#if 1 /* test calculation of itemVisibles */ |
if( ((RECTHP (rcClient)) % pData->itemHeight) ) |
pData->itemVisibles++; |
#endif |
} |
|
extern BOOL SetScrollPos (HWND hWnd, int iSBar, int iNewPos); |
extern BOOL EnableScrollBar (HWND hWnd, int iSBar, BOOL bEnable); |
|
static void lstSetVScrollInfo (HWND hwnd, PLISTBOXDATA pData, BOOL fRedraw) |
{ |
SCROLLINFO si; |
|
if (pData->itemVisibles >= pData->itemCount) |
{ |
SetScrollPos (hwnd, SB_VERT, 0); |
EnableScrollBar (hwnd, SB_VERT, FALSE); |
return; |
} |
|
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS; |
si.nMax = pData->itemCount - 1; |
si.nMin = 0; |
si.nPage = min (pData->itemVisibles, (pData->itemCount - pData->itemTop)); |
si.nPos = pData->itemTop; |
|
SetScrollInfo (hwnd, SB_VERT, &si, fRedraw); |
EnableScrollBar (hwnd, SB_VERT, TRUE); |
} |
|
LRESULT CALLBACK |
ListboxCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) |
{ |
HDC hdc; |
HWND pCtrl; |
PLISTBOXDATA pData; |
DWORD dwStyle; |
|
pCtrl = hwnd; |
dwStyle = pCtrl->style; |
|
switch (message) |
{ |
case WM_CREATE: |
pData = (LISTBOXDATA*) malloc (sizeof(LISTBOXDATA)); |
if (pData == NULL) |
return -1; |
|
pCtrl->userdata = (DWORD)pData; |
if (!lstInitListBoxData (hwnd, pData, DEF_LB_BUFFER_LEN)) { |
free (pData); |
return -1; |
} |
break; |
|
case WM_SIZE: |
{ |
RECT rc; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
GetClientRect(hwnd, &rc); |
lstCalcParams (&rc, pData); |
} |
break; |
|
case WM_DESTROY: |
pData = (PLISTBOXDATA)pCtrl->userdata; |
lstListBoxCleanUp (pData); |
free (pData); |
break; |
|
case LB_RESETCONTENT: |
pData = (PLISTBOXDATA)pCtrl->userdata; |
lstResetListBoxContent (pData); |
InvalidateRect (hwnd, NULL, TRUE); |
break; |
|
case LB_ADDSTRING: |
case LB_INSERTSTRING: |
{ |
char* string = NULL; |
PLISTBOXITEMINFO plbii = NULL; |
PLISTBOXITEM newItem; |
int pos; |
|
if (dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON) { |
plbii = (PLISTBOXITEMINFO)lParam; |
if (!plbii) |
return LB_ERR; |
|
string = plbii->string; |
} |
else { |
string = (char*)lParam; |
if (string == NULL || string [0] == '\0') |
return LB_ERR; |
} |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
newItem = lstAllocItem (pData); |
if (!newItem) { |
NotifyParent (hwnd, pCtrl->id, LBN_ERRSPACE); |
return LB_ERRSPACE; |
} |
|
newItem->key = FixStrAlloc (strlen (string)); |
strcpy (newItem->key, string); |
newItem->dwFlags = LBIF_NORMAL; |
if (plbii) { |
switch (plbii->cmFlag) { |
case CMFLAG_CHECKED: |
newItem->dwFlags |= LBIF_CHECKED; |
break; |
case CMFLAG_PARTCHECKED: |
newItem->dwFlags |= LBIF_PARTCHECKED; |
break; |
} |
|
if (dwStyle & LBS_USEICON) |
newItem->dwData = (DWORD)plbii->hIcon; |
else |
newItem->dwData = 0L; |
} |
newItem->dwAddData = 0L; |
|
if (message == LB_ADDSTRING) |
pos = lstAddNewItem (dwStyle, pData, newItem, -1); |
else |
pos = lstAddNewItem (dwStyle, pData, newItem, (int)wParam); |
|
lstInvalidateUnderItem (hwnd, pData, pos); |
|
lstSetVScrollInfo (hwnd, pData, TRUE); |
|
return pos; |
} |
break; |
|
case LB_DELETESTRING: |
{ |
PLISTBOXITEM removed; |
int delete; |
|
delete = (int)wParam; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
removed = lstRemoveItem (pData, &delete); |
if (removed) { |
FreeFixStr (removed->key); |
lstFreeItem (pData, removed); |
|
pData->itemCount --; |
|
if (pData->itemTop != 0 |
&& pData->itemCount <= pData->itemVisibles) { |
pData->itemTop = 0; |
InvalidateRect (hwnd, NULL, TRUE); |
} |
else { |
lstInvalidateUnderItem (hwnd, pData, delete); |
if (delete <= pData->itemTop) { |
pData->itemTop --; |
if (pData->itemTop < 0) |
pData->itemTop = 0; |
} |
} |
|
if (pData->itemHilighted >= pData->itemCount) { |
pData->itemHilighted = pData->itemCount - 1; |
if (pData->itemHilighted < 0) |
pData->itemHilighted = 0; |
} |
|
if (pData->itemHilighted < pData->itemTop) |
pData->itemHilighted = pData->itemTop; |
if (pData->itemHilighted > ITEM_BOTTOM (pData)) |
pData->itemHilighted = ITEM_BOTTOM (pData); |
|
lstSetVScrollInfo (hwnd, pData, TRUE); |
} |
} |
break; |
|
case LB_FINDSTRING: |
if( *(char*)lParam == '\0' ) |
return LB_ERR; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
return lstFindItem(pData, (int)wParam, (char*)lParam, FALSE); |
|
case LB_FINDSTRINGEXACT: |
if( *(char*)lParam == '\0' ) |
return LB_ERR; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
return lstFindItem(pData, (int)wParam, (char*)lParam, TRUE); |
|
case LB_SETTOPINDEX: |
{ |
int newTop = (int) wParam; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
|
if (newTop <0) |
newTop = 0; |
else if (newTop > pData->itemCount - pData->itemVisibles) |
newTop = pData->itemCount - pData->itemVisibles; |
|
if (pData->itemTop != newTop) { |
pData->itemTop = newTop; |
|
if (pData->itemHilighted < pData->itemTop) |
pData->itemHilighted = pData->itemTop; |
if (pData->itemHilighted > ITEM_BOTTOM (pData)) |
pData->itemHilighted = ITEM_BOTTOM (pData); |
|
lstSetVScrollInfo (hwnd, pData, TRUE); |
|
InvalidateRect (hwnd, NULL, TRUE); |
} |
} |
break; |
|
case LB_SETCURSEL: |
case LB_SETCARETINDEX: |
{ |
int new = (int)wParam; |
int old, newTop; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (new < 0 || new > pData->itemCount - 1) |
return LB_ERR; |
|
old = pData->itemHilighted; |
if (new >= 0 && new != old) { |
if (pData->itemCount - new >= pData->itemVisibles) |
newTop = new; |
else |
newTop = max (pData->itemCount - pData->itemVisibles, 0); |
|
pData->itemTop = newTop; |
pData->itemHilighted = new; |
lstSetVScrollInfo (hwnd, pData, TRUE); |
} |
|
if (!(dwStyle & LBS_MULTIPLESEL)) |
lstSelectItem (dwStyle, pData, new); |
InvalidateRect (hwnd, NULL, TRUE); |
|
return old; |
} |
break; |
|
case LB_GETCOUNT: |
pData = (PLISTBOXDATA)pCtrl->userdata; |
return pData->itemCount; |
break; |
|
case LB_GETCURSEL: |
{ |
PLISTBOXITEM plbi; |
int index = 0; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (dwStyle & LBS_MULTIPLESEL) |
return pData->itemHilighted; |
|
plbi = pData->head; |
while (plbi) { |
if (plbi->dwFlags & LBIF_SELECTED) |
return index; |
|
index ++; |
plbi = plbi->next; |
} |
|
return LB_ERR; |
} |
break; |
|
case LB_GETSELCOUNT: |
{ |
int nSel; |
PLISTBOXITEM plbi; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
|
nSel = 0; |
plbi = pData->head; |
while (plbi) { |
if (plbi->dwFlags & LBIF_SELECTED) |
nSel ++; |
plbi = plbi->next; |
} |
|
return nSel; |
} |
break; |
|
case LB_GETTOPINDEX: |
pData = (PLISTBOXDATA)pCtrl->userdata; |
return pData->itemTop; |
break; |
|
case LB_GETCARETINDEX: |
pData = (PLISTBOXDATA)pCtrl->userdata; |
return pData->itemHilighted; |
break; |
|
case LB_GETTEXTLEN: |
{ |
PLISTBOXITEM plbi; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
plbi = lstGetItem (pData, (int)wParam); |
if (plbi) |
return strlen (plbi->key); |
else |
return LB_ERR; |
} |
break; |
|
case LB_GETTEXT: |
{ |
PLISTBOXITEM plbi; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
plbi = lstGetItem (pData, (int)wParam); |
if (plbi) |
strcpy ((char*)lParam, plbi->key); |
else |
return LB_ERR; |
} |
break; |
|
case LB_SETTEXT: |
{ |
PLISTBOXITEM plbi; |
char* newStr; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
plbi = lstGetItem (pData, (int)wParam); |
if (plbi) { |
newStr = FixStrAlloc (strlen ((char*)lParam)); |
if (newStr) { |
FreeFixStr (plbi->key); |
plbi->key = newStr; |
strcpy (plbi->key, (char*)lParam); |
lstInvalidateItem (hwnd, pData, (int)wParam, TRUE); |
} |
else |
return LB_ERR; |
} |
else |
return LB_ERR; |
} |
break; |
|
case LB_GETITEMDATA: |
{ |
PLISTBOXITEM plbi; |
PLISTBOXITEMINFO plbii; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (!(plbi = lstGetItem (pData, (int)wParam))) |
return LB_ERR; |
|
if (!(dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON)) { |
return plbi->dwData; |
} |
|
plbii = (PLISTBOXITEMINFO)lParam; |
if (!plbii) |
return LB_ERR; |
|
if (plbi->dwFlags & LBIF_CHECKED) |
plbii->cmFlag = CMFLAG_CHECKED; |
else if (plbi->dwFlags & LBIF_PARTCHECKED) |
plbii->cmFlag = CMFLAG_PARTCHECKED; |
else |
plbii->cmFlag = CMFLAG_BLANK; |
plbii->hIcon = (HICON)plbi->dwData; |
|
return LB_OKAY; |
} |
break; |
|
case LB_SETITEMDATA: |
{ |
PLISTBOXITEM plbi; |
PLISTBOXITEMINFO plbii; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (!(plbi = lstGetItem (pData, (int)wParam))) |
return LB_ERR; |
|
if (!(dwStyle & LBS_CHECKBOX || dwStyle & LBS_USEICON)) { |
plbi->dwData = (DWORD)lParam; |
return LB_OKAY; |
} |
|
plbii = (PLISTBOXITEMINFO)lParam; |
if (!plbii) |
return LB_ERR; |
|
plbi->dwFlags &= ~LBIF_CHECKMARKMASK; |
switch (plbii->cmFlag) { |
case CMFLAG_CHECKED: |
plbi->dwFlags |= LBIF_CHECKED; |
break; |
case CMFLAG_PARTCHECKED: |
plbi->dwFlags |= LBIF_PARTCHECKED; |
break; |
} |
|
if (dwStyle & LBS_USEICON) |
plbi->dwData = (DWORD)plbii->hIcon; |
else |
plbi->dwData = 0; |
|
lstInvalidateItem (hwnd, pData, (int)wParam, TRUE); |
|
return LB_OKAY; |
} |
break; |
|
case LB_GETITEMADDDATA: |
{ |
PLISTBOXITEM plbi; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (!(plbi = lstGetItem (pData, (int)wParam))) |
return LB_ERR; |
|
return plbi->dwAddData; |
} |
break; |
|
case LB_SETITEMADDDATA: |
{ |
PLISTBOXITEM plbi; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (!(plbi = lstGetItem (pData, (int)wParam))) |
return LB_ERR; |
|
plbi->dwAddData = (DWORD)lParam; |
|
return LB_OKAY; |
} |
break; |
|
case LB_GETCHECKMARK: |
{ |
PLISTBOXITEM plbi; |
|
if (!(dwStyle & LBS_CHECKBOX)) |
return LB_ERR; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (!(plbi = lstGetItem (pData, (int)wParam))) |
return LB_ERR; |
|
if (plbi->dwFlags & LBIF_CHECKED) |
return CMFLAG_CHECKED; |
|
if (plbi->dwFlags & LBIF_PARTCHECKED) |
return CMFLAG_PARTCHECKED; |
|
return CMFLAG_BLANK; |
} |
break; |
|
case LB_SETCHECKMARK: |
{ |
PLISTBOXITEM plbi; |
|
if (!(dwStyle & LBS_CHECKBOX)) |
return LB_ERR; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (!(plbi = lstGetItem (pData, (int)wParam))) |
return LB_ERR; |
|
plbi->dwFlags &= ~LBIF_CHECKMARKMASK; |
switch (lParam) { |
case CMFLAG_CHECKED: |
plbi->dwFlags |= LBIF_CHECKED; |
break; |
case CMFLAG_PARTCHECKED: |
plbi->dwFlags |= LBIF_PARTCHECKED; |
break; |
} |
|
lstInvalidateItem (hwnd, pData, (int)wParam, TRUE); |
|
return LB_OKAY; |
} |
break; |
|
case LB_GETSELITEMS: |
{ |
int nItem; |
int nSel = 0; |
int index = 0; |
int* pInt; |
PLISTBOXITEM plbi; |
|
nItem = (int)wParam; |
pInt = (int*)lParam; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
plbi = pData->head; |
while (plbi) { |
|
if (plbi->dwFlags & LBIF_SELECTED) { |
if (pInt) { |
if (nSel < nItem) |
*(pInt + nSel) = index; |
else |
return nItem; |
} |
nSel ++; |
} |
|
plbi = plbi->next; |
index ++; |
} |
|
return nSel; |
} |
break; |
|
case LB_GETSEL: |
{ |
PLISTBOXITEM plbi; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
plbi = lstGetItem (pData, (int)wParam); |
if (plbi) |
return plbi->dwFlags & LBIF_SELECTED; |
else |
return LB_ERR; |
} |
break; |
|
case LB_SETSEL: |
{ |
PLISTBOXITEM plbi; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
plbi = lstGetItem (pData, (int)lParam); |
if (plbi) { |
pData->dwFlags &= ~LBF_NOTHINGSELECTED; |
if (wParam == -1) |
plbi->dwFlags ^= LBIF_SELECTED; |
else if (wParam == 0) |
plbi->dwFlags &= ~LBIF_SELECTED; |
else |
plbi->dwFlags |= LBIF_SELECTED; |
|
lstInvalidateItem (hwnd, pData, (int)lParam, FALSE); |
} |
else |
return LB_ERR; |
} |
break; |
|
case LB_GETITEMHEIGHT: |
pData = (PLISTBOXDATA)pCtrl->userdata; |
return pData->itemHeight; |
break; |
|
case LB_SETITEMHEIGHT: |
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (pData->itemHeight != LOWORD (lParam)) { |
RECT rcClient; |
|
pData->itemHeight = LOWORD (lParam); |
GetClientRect (hwnd, &rcClient); |
lstCalcParams (&rcClient, pData); |
|
lstSetVScrollInfo (hwnd, pData, TRUE); |
InvalidateRect (hwnd, NULL, TRUE); |
} |
break; |
|
case WM_SETFOCUS: |
{ |
pData = (PLISTBOXDATA)pCtrl->userdata; |
|
if (pData->dwFlags & LBF_FOCUS) |
break; |
|
pData->dwFlags |= LBF_FOCUS; |
InvalidateRect(hwnd, NULL, TRUE); |
|
NotifyParent (hwnd, pCtrl->id, LBN_SETFOCUS); |
} |
break; |
|
case WM_KILLFOCUS: |
{ |
pData = (PLISTBOXDATA)pCtrl->userdata; |
|
pData->dwFlags &= ~LBF_FOCUS; |
InvalidateRect(hwnd, NULL, TRUE); |
|
NotifyParent (hwnd, pCtrl->id, LBN_KILLFOCUS); |
} |
break; |
|
case WM_GETDLGCODE: |
return DLGC_WANTARROWS | DLGC_WANTCHARS; |
|
case WM_GETTEXTLENGTH: |
case WM_GETTEXT: |
case WM_SETTEXT: |
return -1; |
#if 0 |
case WM_SETFONT: |
break; |
|
case WM_GETFONT: |
break; |
#endif |
case WM_NCCALCSIZE: |
{ |
LPNCCALCSIZE_PARAMS lpnc; |
|
/* calculate client rect from passed window rect in rgrc[0]*/ |
lpnc = (LPNCCALCSIZE_PARAMS)lParam; |
if(GetWindowLong(hwnd, GWL_STYLE) & WS_BORDER) |
InflateRect(&lpnc->rgrc[0], -2, -2); |
} |
break; |
|
case WM_NCPAINT: |
{ |
RECT rc; |
|
hdc = wParam? (HDC)wParam: GetWindowDC (hwnd); |
GetWindowRect(hwnd, &rc); |
|
if (dwStyle & WS_BORDER) |
Draw3dInset(hdc, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top); |
|
if (!wParam) |
ReleaseDC (hwnd, hdc); |
} |
break; |
|
case WM_PAINT: |
{ |
RECT rc; |
PAINTSTRUCT ps; |
|
hdc = BeginPaint (hwnd,&ps); |
pData = (PLISTBOXDATA)pCtrl->userdata; |
|
/* |
* If this is the first paint and there's nothing |
* selected, then auto select the topmost displayed item. |
*/ |
if (pData->dwFlags & LBF_NOTHINGSELECTED) { |
lstSelectItem (hwnd->style, pData, pData->itemTop); |
pData->dwFlags &= ~LBF_NOTHINGSELECTED; |
} |
GetClientRect (hwnd, &rc); |
lstOnDrawSListBoxItems (hdc, dwStyle, pData, rc.right-rc.left); |
lstDrawFocusRect (hdc, pData, &rc); |
|
EndPaint (hwnd, &ps); |
} |
break; |
|
case WM_LBUTTONDBLCLK: |
if (dwStyle & LBS_NOTIFY) |
NotifyParent (hwnd, pCtrl->id, LBN_DBLCLK); |
break; |
|
case WM_LBUTTONDOWN: |
{ |
int oldSel, mouseX, mouseY, hit; |
RECT rcInv; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
if (pData->itemCount == 0) |
break; |
|
mouseX = LOWORD (lParam); |
mouseY = HIWORD (lParam); |
hit = mouseY / pData->itemHeight; |
hit += pData->itemTop; |
|
if (hit >= pData->itemCount) |
break; |
|
GetClientRect (hwnd, &rcInv); |
oldSel = lstSelectItem (dwStyle, pData, hit); |
if ((dwStyle & LBS_NOTIFY) && (oldSel != hit)) |
NotifyParent (hwnd, pCtrl->id, LBN_SELCHANGE); |
if (oldSel >= 0) { |
if (oldSel >= pData->itemTop |
&& (oldSel <= pData->itemTop + pData->itemVisibles)) { |
lstGetItemsRect (pData, oldSel, oldSel, &rcInv); |
InvalidateRect (hwnd, &rcInv, TRUE); |
} |
} |
|
lstGetItemsRect (pData, hit, hit, &rcInv); |
InvalidateRect (hwnd, &rcInv, TRUE); |
|
if (pData->itemHilighted != hit) |
{ |
hdc = GetDC(hwnd); /* hdc = GetClientDC (hwnd); */ |
|
lstDrawFocusRect (hdc, pData, &rcInv); |
ReleaseDC (hwnd,hdc); |
} |
pData->itemHilighted = hit; |
|
if (dwStyle & LBS_CHECKBOX) { |
if (mouseX > 0 && mouseX < LST_WIDTH_CHECKMARK) { |
NotifyParent (hwnd, pCtrl->id, LBN_CLICKCHECKMARK); |
|
if (dwStyle & LBS_AUTOCHECK) { |
PLISTBOXITEM plbi; |
|
plbi = lstGetItem (pData, hit); |
|
switch (plbi->dwFlags & LBIF_CHECKMARKMASK) { |
case LBIF_CHECKED: |
plbi->dwFlags &= ~LBIF_CHECKMARKMASK; |
break; |
default: |
plbi->dwFlags &= ~LBIF_CHECKMARKMASK; |
plbi->dwFlags |= LBIF_CHECKED; |
break; |
} |
|
lstInvalidateItem (hwnd, pData, hit, TRUE); |
} |
} |
} |
|
lstSetVScrollInfo (hwnd, pData, TRUE); |
} |
break; |
|
case WM_LBUTTONUP: |
break; |
|
case WM_MOUSEMOVE: |
break; |
|
case WM_KEYDOWN: |
{ |
int oldSel, newSel, newTop; |
RECT rcInv; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
newTop = pData->itemTop; |
newSel = pData->itemHilighted; |
switch (LOWORD (wParam)) |
{ |
case VK_HOME: /* SCANCODE_HOME: */ |
newSel = 0; |
newTop = 0; |
break; |
|
case VK_END: /* SCANCODE_END: */ |
newSel = pData->itemCount - 1; |
if (pData->itemCount > pData->itemVisibles) |
newTop = pData->itemCount - pData->itemVisibles; |
else |
newTop = 0; |
break; |
|
case VK_DOWN: /* SCANCODE_CURSORBLOCKDOWN: */ |
newSel ++; |
if (newSel >= pData->itemCount) |
return 0; |
if (newSel > ITEM_BOTTOM (pData)) |
newTop ++; |
break; |
|
case VK_UP: /* SCANCODE_CURSORBLOCKUP: */ |
newSel --; |
if (newSel < 0) |
return 0; |
if (newSel < pData->itemTop) |
newTop --; |
break; |
|
case VK_NEXT: /* SCANCODE_PAGEDOWN: */ |
newSel += pData->itemVisibles; |
if (newSel >= pData->itemCount) |
newSel = pData->itemCount - 1; |
|
if (pData->itemCount - newSel >= pData->itemVisibles) |
newTop = newSel; |
else |
newTop = max (pData->itemCount-pData->itemVisibles, 0); |
break; |
|
case VK_PRIOR: /* SCANCODE_PAGEUP: */ |
newSel -= pData->itemVisibles; |
if (newSel < 0) |
newSel = 0; |
|
newTop -= pData->itemVisibles; |
if (newTop < 0) |
newTop = 0; |
break; |
|
default: |
return 0; |
} |
|
GetClientRect (hwnd, &rcInv); |
if (pData->itemHilighted != newSel) { |
if (pData->itemTop != newTop) { |
pData->itemTop = newTop; |
pData->itemHilighted = newSel; |
if (!(dwStyle & LBS_MULTIPLESEL)) { |
oldSel = lstSelectItem (dwStyle, pData, newSel); |
if ((dwStyle & LBS_NOTIFY) && (oldSel != newSel)) |
NotifyParent (hwnd, pCtrl->id, LBN_SELCHANGE); |
} |
InvalidateRect (hwnd, NULL, TRUE); |
} |
else { |
if (!(dwStyle & LBS_MULTIPLESEL)) { |
oldSel = lstSelectItem (dwStyle, pData, newSel); |
if ((dwStyle & LBS_NOTIFY) && (oldSel != newSel)) |
NotifyParent (hwnd, pCtrl->id, LBN_SELCHANGE); |
if (oldSel >= 0) { |
if (oldSel >= pData->itemTop |
&& oldSel <= (ITEM_BOTTOM (pData) + 1)) { |
lstGetItemsRect (pData, oldSel, oldSel, &rcInv); |
InvalidateRect (hwnd, &rcInv, TRUE); |
} |
} |
|
if (newSel < newTop) { |
pData->itemHilighted = newSel; |
break; |
} |
|
lstGetItemsRect (pData, pData->itemHilighted, |
pData->itemHilighted, &rcInv); |
|
hdc = GetDC(hwnd); /* hdc = GetClientDC (hwnd); */ |
|
lstDrawFocusRect (hdc, pData, &rcInv); |
ReleaseDC (hwnd,hdc); |
|
pData->itemHilighted = newSel; |
lstGetItemsRect (pData, newSel, newSel, &rcInv); |
InvalidateRect (hwnd, &rcInv, TRUE); |
} |
else |
{ |
hdc = GetDC(hwnd); /* hdc = GetClientDC (hwnd); */ |
|
lstDrawFocusRect (hdc, pData, &rcInv); |
pData->itemHilighted = newSel; |
GetClientRect (hwnd, &rcInv); |
lstDrawFocusRect (hdc, pData, &rcInv); |
ReleaseDC (hwnd,hdc); |
} |
} |
lstSetVScrollInfo (hwnd, pData, TRUE); |
} |
} |
break; |
|
case WM_CHAR: |
{ |
char head [2]; |
int index; |
int newTop; |
|
head [0] = (char) (wParam); |
head [1] = '\0'; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
|
if (head[0] == ' ') { |
if (dwStyle & LBS_MULTIPLESEL) { |
RECT rcInv; |
|
GetClientRect (hwnd, &rcInv); |
lstSelectItem (dwStyle, pData, pData->itemHilighted); |
lstGetItemsRect (pData, |
pData->itemHilighted, |
pData->itemHilighted, |
&rcInv); |
InvalidateRect (hwnd, &rcInv, TRUE); |
} |
else if (dwStyle & LBS_CHECKBOX) { |
NotifyParent (hwnd, pCtrl->id, LBN_CLICKCHECKMARK); |
|
if (dwStyle & LBS_AUTOCHECK) { |
PLISTBOXITEM plbi; |
|
plbi = lstGetItem (pData, pData->itemHilighted); |
|
switch (plbi->dwFlags & LBIF_CHECKMARKMASK) { |
case LBIF_CHECKED: |
plbi->dwFlags &= ~LBIF_CHECKMARKMASK; |
break; |
default: |
plbi->dwFlags &= ~LBIF_CHECKMARKMASK; |
plbi->dwFlags |= LBIF_CHECKED; |
break; |
} |
|
lstInvalidateItem (hwnd, pData, |
pData->itemHilighted, TRUE); |
} |
} |
break; |
} |
|
index = lstFindItem (pData, pData->itemHilighted + 1, head, FALSE); |
if (index < 0) { |
index = lstFindItem (pData, 0, head, FALSE); |
} |
|
if (index >= 0) { |
if (pData->itemCount - index >= pData->itemVisibles) |
newTop = index; |
else |
newTop = max (pData->itemCount - pData->itemVisibles, 0); |
|
pData->itemTop = newTop; |
pData->itemHilighted = index; |
if (!(dwStyle & LBS_MULTIPLESEL)) |
lstSelectItem (dwStyle, pData, index); |
InvalidateRect (hwnd, NULL, TRUE); |
|
lstSetVScrollInfo (hwnd, pData, TRUE); |
} |
} |
break; |
|
case WM_VSCROLL: |
{ |
int newTop; |
int scrollHeight = 0; |
|
pData = (PLISTBOXDATA)pCtrl->userdata; |
newTop = pData->itemTop; |
switch(wParam) |
{ |
case SB_LINEDOWN: |
|
#if 0 /* test itemVisibles */ |
printf("itemVisibles:%d\n",pData->itemVisibles); |
printf("SB_LINEDOWN:(%d:%d)\n", |
ITEM_BOTTOM (pData),(pData->itemCount - 1 )); |
#endif |
if (ITEM_BOTTOM (pData) < (pData->itemCount - 1 )) |
{ |
newTop ++; |
scrollHeight = -pData->itemHeight; /* for ScrollWindow() */ |
} |
break; |
|
case SB_LINEUP: |
if (pData->itemTop > 0) |
{ |
newTop --; |
scrollHeight = pData->itemHeight; |
} |
break; |
|
case SB_PAGEDOWN: |
if ((pData->itemTop + (pData->itemVisibles << 1)) <= |
pData->itemCount) |
newTop += pData->itemVisibles; |
else |
newTop = pData->itemCount - pData->itemVisibles; |
|
if (newTop < 0) |
return 0; |
|
scrollHeight = -(newTop - pData->itemTop) |
*pData->itemHeight; |
break; |
|
case SB_PAGEUP: |
if (pData->itemTop >= pData->itemVisibles) |
newTop -= pData->itemVisibles; |
else |
newTop = 0; |
|
scrollHeight = (pData->itemTop - newTop)*pData->itemHeight; |
break; |
|
case SB_THUMBTRACK: |
newTop = (int)lParam; |
scrollHeight = (pData->itemTop - newTop)*pData->itemHeight; |
break; |
} |
|
if (scrollHeight) |
{ |
pData->itemTop = newTop; |
#if 0 /* !!: fix: no scroll */ |
ScrollWindow (hwnd, 0, scrollHeight, NULL, NULL); |
#endif |
SendMessage (hwnd, WM_PAINT, 0, 0); |
|
lstSetVScrollInfo (hwnd, pData, TRUE); |
|
return 0; |
} |
} |
break; |
|
case WM_HSCROLL: |
pData = (PLISTBOXDATA)pCtrl->userdata; |
switch (wParam) |
{ |
case SB_LINERIGHT: |
break; |
|
case SB_LINELEFT: |
break; |
|
case SB_PAGELEFT: |
break; |
|
case SB_PAGERIGHT: |
break; |
} |
break; |
|
default: |
return DefWindowProc (hwnd, message, wParam, lParam); |
} |
return 0; |
} |
/winlib/edit.c
0,0 → 1,1172
/* |
* Copyright (C) 1999, 2000, Wei Yongming. |
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* |
* Edit control for Microwindows win32 api. |
*/ |
|
/* |
** This library is free software; you can redistribute it and/or |
** modify it under the terms of the GNU Library General Public |
** License as published by the Free Software Foundation; either |
** version 2 of the License, or (at your option) any later version. |
** |
** This library is distributed in the hope that it will be useful, |
** but WITHOUT ANY WARRANTY; without even the implied warranty of |
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
** Library General Public License for more details. |
** |
** You should have received a copy of the GNU Library General Public |
** License along with this library; if not, write to the Free |
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
** MA 02111-1307, USA |
*/ |
|
/* |
** Alternatively, the contents of this file may be used under the terms |
** of the Mozilla Public License (the "MPL License") in which case the |
** provisions of the MPL License are applicable instead of those above. |
*/ |
|
/* Note: |
** Although there was a version by Zhao Jianghua, this version of |
** EDIT control is written by Wei Yongming from scratch. |
** |
** Create date: 1999/8/26 |
** |
** Modify records: |
** |
** Who When Where For What Status |
**----------------------------------------------------------------------------- |
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished |
** Kevin Tseng 2000/05/30 gv port to microwin ported |
** Greg Haerr 2000/06/16 Utah 3d look, bug fixes Finished |
** Kevin Tseng 2000/06/22 gv port to mw-nanox ported |
** |
** TODO: |
** * Selection. |
** * Undo. |
*/ |
|
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#define MWINCLUDECOLORS |
#include "windows.h" /* windef.h, winuser.h */ |
#include "wintools.h" |
#include "device.h" /* GdGetTextSize */ |
|
#define USE_BIG5 |
|
#if 0 |
#define DEFAULT_FONT DEFAULT_GUI_FONT |
#endif |
#define DEFAULT_FONT SYSTEM_FIXED_FONT |
|
#define WIDTH_EDIT_BORDER 2 |
#define MARGIN_EDIT_LEFT 1 |
#define MARGIN_EDIT_TOP 1 |
#define MARGIN_EDIT_RIGHT 2 |
#define MARGIN_EDIT_BOTTOM 1 |
|
#define LEN_SLEDIT_BUFFER 3000 |
#define LEN_SLEDIT_UNDOBUFFER 1024 |
|
#define EST_FOCUSED 0x00000001L |
#define EST_MODIFY 0x00000002L |
#define EST_READONLY 0x00000004L |
#define EST_REPLACE 0x00000008L |
|
#define EDIT_OP_NONE 0x00 |
#define EDIT_OP_DELETE 0x01 |
#define EDIT_OP_INSERT 0x02 |
#define EDIT_OP_REPLACE 0x03 |
|
typedef struct tagSLEDITDATA { |
HFONT hFont; /* hFont used */ |
int bufferLen; /* length of buffer */ |
|
int dataEnd; /* data end position */ |
int editPos; /* current edit position */ |
int caretOff; /* caret offset in box */ |
int startPos; /* start display position */ |
|
int selStart; /* selection start position */ |
int selEnd; /* selection end position */ |
|
int passwdChar; /* password character */ |
|
int leftMargin; /* left margin */ |
int topMargin; /* top margin */ |
int rightMargin; /* right margin */ |
int bottomMargin; /* bottom margin */ |
|
int hardLimit; /* hard limit */ |
|
int lastOp; /* last operation */ |
int lastPos; /* last operation position */ |
int affectedLen; /* affected len of last operation */ |
int undoBufferLen; /* undo buffer len */ |
char undoBuffer [LEN_SLEDIT_UNDOBUFFER]; /* Undo buffer; */ |
char buffer [LEN_SLEDIT_BUFFER]; /* buffer */ |
} SLEDITDATA, *PSLEDITDATA; |
|
static LRESULT CALLBACK |
SLEditCtrlProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); |
|
static int GetSysCharHeight (HWND hwnd) |
{ |
#ifndef USE_BIG5 |
HDC hdc; |
int xw, xh, xb; |
|
hdc = GetDC(hwnd); |
SelectObject(hdc, GetStockObject(DEFAULT_FONT)); |
GdSetFont(hdc->font->pfont); |
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII); |
ReleaseDC(hwnd,hdc); |
|
return xh; |
#else |
return 12; |
#endif |
} |
|
static int GetSysCharWidth (HWND hwnd) |
{ |
#ifndef USE_BIG5 |
HDC hdc; |
int xw, xh, xb; |
|
hdc = GetDC(hwnd); |
SelectObject(hdc, GetStockObject(DEFAULT_FONT)); |
GdSetFont(hdc->font->pfont); |
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII); |
ReleaseDC(hwnd,hdc); |
|
return xw; |
#else |
return 6; |
#endif |
} |
|
static int GetSysCCharWidth (HWND hwnd) |
{ |
return (2*GetSysCharWidth(hwnd)); |
} |
|
int WINAPI MwRegisterEditControl(HINSTANCE hInstance) |
{ |
WNDCLASS wc; |
|
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS; |
wc.lpfnWndProc = (WNDPROC)SLEditCtrlProc; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 0; |
wc.hInstance = hInstance; |
wc.hIcon = NULL; |
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/ |
wc.hbrBackground= GetStockObject(WHITE_BRUSH); |
wc.lpszMenuName = NULL; |
wc.lpszClassName= "EDIT"; |
|
return RegisterClass(&wc); |
} |
|
static int edtGetOutWidth (const HWND pCtrl) |
{ |
return pCtrl->clirect.right - pCtrl->clirect.left |
- ((PSLEDITDATA)(pCtrl->userdata2))->leftMargin |
- ((PSLEDITDATA)(pCtrl->userdata2))->rightMargin; |
} |
|
static int edtGetStartDispPosAtEnd (const HWND pCtrl, PSLEDITDATA pSLEditData) |
{ |
int nOutWidth = edtGetOutWidth (pCtrl); |
int endPos = pSLEditData->dataEnd; |
int newStartPos = pSLEditData->startPos; |
const char* buffer = pSLEditData->buffer; |
|
while (TRUE) { |
if ((endPos - newStartPos) * GetSysCharWidth (pCtrl) < nOutWidth) |
break; |
|
/* FIXME: #ifdef GB2312?*/ |
if ((BYTE)buffer [newStartPos] > 0xA0) /* 1st:gb:a1-f7,big5:a1-f9 */ |
{ |
newStartPos ++; |
if (newStartPos < pSLEditData->dataEnd) |
{ |
#ifndef USE_BIG5 |
if ((BYTE)buffer [newStartPos] > 0xA0) |
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
if ( ((BYTE)buffer [newStartPos] >= 0x40 && (BYTE)buffer[newStartPos] <= 0x7e) || |
((BYTE)buffer [newStartPos] >= 0xa1 && (BYTE)buffer[newStartPos] <= 0xfe)) |
#endif |
newStartPos ++; |
} |
} |
else |
newStartPos ++; |
} |
|
return newStartPos; |
} |
|
static int edtGetDispLen (const HWND pCtrl) |
{ |
int i, n = 0; |
int nOutWidth = edtGetOutWidth (pCtrl); |
int nTextWidth = 0; |
PSLEDITDATA pSLEditData = (PSLEDITDATA)(pCtrl->userdata2); |
const char* buffer = pSLEditData->buffer; |
|
for (i = pSLEditData->startPos; i < pSLEditData->dataEnd; i++) { |
/* FIXME #ifdef GB2312?*/ |
if ((BYTE)buffer [i] > 0xA0) /* st:gb:a1-f7,big5:a1-f9 */ |
{ |
i++; |
if (i < pSLEditData->dataEnd) |
{ |
#ifndef USE_BIG5 |
if ((BYTE)buffer [i] > 0xA0) /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
if ( ((BYTE)buffer [i] >= 0x40 && (BYTE)buffer[i] <= 0x7e) || |
((BYTE)buffer [i] >= 0xa1 && (BYTE)buffer[i] <= 0xfe)) |
#endif |
{ |
nTextWidth += GetSysCCharWidth (pCtrl); |
n += 2; |
} |
else |
i--; |
} |
else |
{ |
nTextWidth += GetSysCharWidth (pCtrl); |
n++; |
} |
} |
else |
{ |
nTextWidth += GetSysCharWidth (pCtrl); |
n++; |
} |
|
if (nTextWidth > nOutWidth) |
break; |
} |
|
return n; |
} |
|
static int edtGetOffset (HWND hwnd,const SLEDITDATA* pSLEditData, int x) |
{ |
int i; |
int newOff = 0; |
int nTextWidth = 0; |
const char* buffer = pSLEditData->buffer; |
|
x -= pSLEditData->leftMargin; |
for (i = pSLEditData->startPos; i < pSLEditData->dataEnd; i++) { |
if ((nTextWidth + (GetSysCharWidth(hwnd) >> 1)) >= x) |
break; |
|
/* FIXME #ifdef GB2312?*/ |
if ((BYTE)buffer [i] > 0xA0) /* 1st:gb:a1-f7,big5:a1-f9 */ |
{ |
i++; |
if (i < pSLEditData->dataEnd) |
{ |
#ifndef USE_BIG5 |
if ((BYTE)buffer [i] > 0xA0) /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
#else /* 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
if ( ((BYTE)buffer [i] >= 0x40 && (BYTE)buffer[i] <= 0x7e) || |
((BYTE)buffer [i] >= 0xa1 && (BYTE)buffer[i] <= 0xfe)) |
#endif |
{ |
nTextWidth += GetSysCCharWidth (hwnd); |
newOff += 2; |
} |
else |
i --; |
} |
else |
{ |
nTextWidth += GetSysCharWidth (hwnd); |
newOff ++; |
} |
} |
else |
{ |
nTextWidth += GetSysCharWidth (hwnd); |
newOff ++; |
} |
|
} |
|
return newOff; |
} |
|
static BOOL edtIsACCharBeforePosition (const char* string, int pos) |
{ |
if (pos < 2) |
return FALSE; |
|
/* 1st:gb:a1-f7,big5:a1-f9 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
#ifndef USE_BIG5 |
/* FIXME #ifdef GB2312?*/ |
if ((BYTE)string [pos - 2] > 0xA0 && (BYTE)string [pos - 1] > 0xA0) |
return TRUE; |
#else |
if ((BYTE)string [pos - 2] > 0xA0) |
{ |
if ( ((BYTE)string [pos - 1] >= 0x40 && (BYTE)string[pos - 1] <= 0x7e) || |
((BYTE)string [pos - 1] >= 0xa1 && (BYTE)string[pos - 1] <= 0xfe)) |
return TRUE; |
} |
#endif |
|
return FALSE; |
} |
|
static BOOL edtIsACCharAtPosition (const char* string, int len, int pos) |
{ |
if (pos > (len - 2)) |
return FALSE; |
|
/* 1st:gb:a1-f7,big5:a1-f9 2nd:gb:a1-fe,big5:40-7e,a1-fe */ |
#ifndef USE_BIG5 |
if ((BYTE)string [pos] > 0xA0 && (BYTE)string [pos + 1] > 0xA0) |
return TRUE; |
#else |
if ((BYTE)string [pos] > 0xA0) |
{ |
if ( ((BYTE)string [pos + 1] >= 0x40 && (BYTE)string [pos + 1] <= 0x7e) || |
((BYTE)string [pos + 1] >= 0xa1 && (BYTE)string [pos + 1] <= 0xfe)) { |
/*fprintf(stderr,"true\n"); |
fflush(stderr);*/ |
return TRUE; |
} |
} |
#endif |
|
return FALSE; |
} |
|
LRESULT CALLBACK |
SLEditCtrlProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) |
{ |
HWND pCtrl; |
DWORD dwStyle; |
HDC hdc; |
PSLEDITDATA pSLEditData; |
RECT rc; |
|
pCtrl = hWnd; |
dwStyle = pCtrl->style; |
|
switch (message) |
{ |
case WM_CREATE: |
if (!(pSLEditData = malloc (sizeof (SLEDITDATA)))) { |
fprintf (stderr, "EDIT: malloc error!\n"); |
return -1; |
} |
|
pSLEditData->hFont = GetStockObject(DEFAULT_FONT); |
|
pSLEditData->bufferLen = LEN_SLEDIT_BUFFER; |
pSLEditData->editPos = 0; |
pSLEditData->caretOff = 0; |
pSLEditData->startPos = 0; |
|
pSLEditData->selStart = 0; |
pSLEditData->selEnd = 0; |
pSLEditData->passwdChar = '*'; |
pSLEditData->leftMargin = MARGIN_EDIT_LEFT; |
pSLEditData->topMargin = MARGIN_EDIT_TOP; |
pSLEditData->rightMargin = MARGIN_EDIT_RIGHT; |
pSLEditData->bottomMargin = MARGIN_EDIT_BOTTOM; |
|
pSLEditData->hardLimit = -1; |
|
/* undo information */ |
pSLEditData->lastOp = EDIT_OP_NONE; |
pSLEditData->lastPos = 0; |
pSLEditData->affectedLen = 0; |
pSLEditData->undoBufferLen = LEN_SLEDIT_UNDOBUFFER; |
pSLEditData->undoBuffer [0] = '\0'; |
|
pSLEditData->dataEnd = strlen (pCtrl->szTitle); |
memcpy (pSLEditData->buffer, pCtrl->szTitle, |
min (LEN_SLEDIT_BUFFER, pSLEditData->dataEnd)); |
|
pCtrl->userdata2 = (DWORD) pSLEditData; |
|
pCtrl->userdata = 0; |
break; |
|
case WM_DESTROY: |
DestroyCaret (); |
|
free ((void*)pCtrl->userdata2); |
break; |
#if 0 |
case WM_CHANGESIZE: |
{ |
pCtrl->cl = pCtrl->left + WIDTH_EDIT_BORDER; |
pCtrl->ct = pCtrl->top + WIDTH_EDIT_BORDER; |
pCtrl->cr = pCtrl->right - WIDTH_EDIT_BORDER; |
pCtrl->cb = pCtrl->bottom - WIDTH_EDIT_BORDER; |
} |
break; |
#endif |
|
#if 1 /* jmt: for edit: chinese support */ |
case WM_SETFONT: |
{ |
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
pSLEditData->hFont = (HFONT)wParam; |
|
ShowWindow(hWnd, SW_HIDE); |
ShowWindow(hWnd, SW_SHOWNA); |
|
if(LOWORD(lParam)) |
InvalidateRect(hWnd,NULL,TRUE); |
} |
return (LRESULT)0; |
|
case WM_GETFONT: |
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
return (LRESULT)pSLEditData->hFont; |
#endif |
|
#if 0 |
case WM_SETCURSOR: |
if (dwStyle & WS_DISABLED) |
{ |
SetCursor (GetSystemCursor (IDC_ARROW)); |
return 0; |
} |
break; |
#endif |
case WM_KILLFOCUS: |
pCtrl->userdata &= ~EST_FOCUSED; |
|
HideCaret (hWnd); |
DestroyCaret (); |
|
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (pCtrl->id, EN_KILLFOCUS), (LPARAM)hWnd); |
break; |
|
case WM_SETFOCUS: |
if (pCtrl->userdata & EST_FOCUSED) |
return 0; |
|
pCtrl->userdata |= EST_FOCUSED; |
|
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
/* only implemented for ES_LEFT align format. */ |
|
CreateCaret (hWnd, NULL, 1 /*+ GetSysCharWidth(hWnd)*/, |
hWnd->clirect.bottom-hWnd->clirect.top-2); |
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
+ pSLEditData->leftMargin, pSLEditData->topMargin); |
ShowCaret (hWnd); |
|
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (pCtrl->id, EN_SETFOCUS), (LPARAM) hWnd); |
break; |
|
case WM_ENABLE: |
if ( (!(dwStyle & WS_DISABLED) && !wParam) |
|| ((dwStyle & WS_DISABLED) && wParam) ) { |
if (wParam) |
pCtrl->style &= ~WS_DISABLED; |
else |
pCtrl->style |= WS_DISABLED; |
|
InvalidateRect (hWnd, NULL, FALSE); |
} |
break; |
|
case WM_NCCALCSIZE: |
{ |
LPNCCALCSIZE_PARAMS lpnc; |
|
/* calculate client rect from passed window rect in rgrc[0]*/ |
lpnc = (LPNCCALCSIZE_PARAMS)lParam; |
if(GetWindowLong(hWnd, GWL_STYLE) & WS_BORDER) |
InflateRect(&lpnc->rgrc[0], -2, -2); |
} |
break; |
|
case WM_NCPAINT: |
hdc = wParam? (HDC)wParam: GetWindowDC (hWnd); |
GetWindowRect(hWnd, &rc); |
|
if (dwStyle & WS_BORDER) |
Draw3dInset(hdc, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top); |
|
if (!wParam) |
ReleaseDC (hWnd, hdc); |
break; |
|
case WM_PAINT: |
{ |
int dispLen; |
char* dispBuffer; |
RECT rect,rc; |
PAINTSTRUCT ps; |
|
HGDIOBJ oldfont; |
oldfont=NULL; |
|
hdc = BeginPaint (hWnd,&ps); |
GetClientRect (hWnd, &rect); |
|
if (dwStyle & WS_DISABLED) |
{ |
#if 0 |
SetBrushColor (hdc, LTGRAY/*COLOR_lightgray*/); |
FillBox (hdc, 0, 0, rect.right, rect.bottom); |
#else |
rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right; |
FillRect(hdc,&rc,GetStockObject(LTGRAY_BRUSH)); |
#endif |
SetBkColor (hdc, LTGRAY/*COLOR_lightgray*/); |
} |
else |
{ |
#if 0 |
SetBrushColor (hdc, WHITE/*COLOR_lightwhite*/); |
FillBox (hdc, 0, 0, rect.right, rect.bottom); |
#else |
rc.left=0; rc.top=0; rc.bottom=rect.bottom; rc.right=rect.right; |
FillRect(hdc,&rc,GetStockObject(WHITE_BRUSH)); |
#endif |
SetBkColor (hdc, WHITE/*COLOR_lightwhite*/); |
} |
|
SetTextColor (hdc, BLACK/*COLOR_black*/); |
dispLen = edtGetDispLen (pCtrl); |
if (dispLen == 0) |
{ |
EndPaint (hWnd, &ps); |
break; |
} |
|
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
|
#ifdef _DEBUG |
if (pSLEditData->startPos > pSLEditData->dataEnd) |
fprintf (stderr, "ASSERT failure: %s.\n", "Edit Paint"); |
#endif |
|
dispBuffer = ALLOCA(dispLen + 1); |
|
if (dwStyle & ES_PASSWORD) |
memset (dispBuffer, '*', dispLen); |
else |
memcpy (dispBuffer, |
pSLEditData->buffer + pSLEditData->startPos, |
dispLen); |
|
dispBuffer [dispLen] = '\0'; |
|
/* only implemented ES_LEFT align format for single line edit. */ |
rect.left += pSLEditData->leftMargin; |
rect.top += pSLEditData->topMargin; |
rect.right -= pSLEditData->rightMargin; |
rect.bottom -= pSLEditData->bottomMargin; |
|
#if 0 /* FIXME no ClipRectIntersect() */ |
#if 0 |
ClipRectIntersect (hdc, &rect); |
#else |
GdSetClipRects(hdc->psd,1,&rect); /*??==ClipRectIntersect??*/ |
#endif |
#endif |
|
#ifdef USE_BIG5 |
oldfont=SelectObject(hdc,CreateFont(12, |
0,0,0,0,0,0,0,0,0,0,0, |
FF_DONTCARE|DEFAULT_PITCH, |
"HZXFONT")); |
#else |
SelectObject(hdc, pSLEditData->hFont); |
#endif |
TextOut (hdc, pSLEditData->leftMargin, pSLEditData->topMargin, |
dispBuffer,-1); |
|
#ifdef USE_BIG5 |
DeleteObject(SelectObject(hdc,oldfont)); |
#endif |
|
EndPaint (hWnd, &ps); |
|
FREEA(dispBuffer); |
} |
break; |
#if 1 /* jmt+ */ |
case WM_KEYDOWN: |
{ |
BOOL bChange = FALSE; |
int i; |
RECT InvRect; |
int deleted; |
|
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
|
switch ((int)(wParam)) /* (LOWORD (wParam)) */ |
{ |
#if 0 |
case SCANCODE_ENTER: |
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (pCtrl->id, EN_ENTER), (LPARAM) hWnd); |
return 0; |
|
case SCANCODE_HOME: |
if (pSLEditData->editPos == 0) |
return 0; |
|
pSLEditData->editPos = 0; |
pSLEditData->caretOff = 0; |
|
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
+ pSLEditData->leftMargin, pSLEditData->topMargin); |
if (pSLEditData->startPos != 0) |
InvalidateRect (hWnd, NULL, FALSE); |
|
pSLEditData->startPos = 0; |
return 0; |
|
case SCANCODE_END: |
{ |
int newStartPos; |
|
if (pSLEditData->editPos == pSLEditData->dataEnd) |
return 0; |
|
newStartPos = edtGetStartDispPosAtEnd (pCtrl, pSLEditData); |
|
pSLEditData->editPos = pSLEditData->dataEnd; |
pSLEditData->caretOff = pSLEditData->editPos - newStartPos; |
|
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
+ pSLEditData->leftMargin, pSLEditData->topMargin); |
if (pSLEditData->startPos != newStartPos) |
InvalidateRect (hWnd, NULL, FALSE); |
|
pSLEditData->startPos = newStartPos; |
} |
return 0; |
#endif |
|
case VK_LEFT: /* SCANCODE_CURSORBLOCKLEFT: */ |
{ |
BOOL bScroll = FALSE; |
int scrollStep; |
|
if (pSLEditData->editPos == 0) |
return 0; |
|
if (edtIsACCharBeforePosition (pSLEditData->buffer, |
pSLEditData->editPos)) |
{ |
scrollStep = 2; |
pSLEditData->editPos -= 2; |
} |
else { |
scrollStep = 1; |
pSLEditData->editPos --; |
} |
|
pSLEditData->caretOff -= scrollStep; |
if (pSLEditData->caretOff == 0 |
&& pSLEditData->editPos != 0) |
{ |
bScroll = TRUE; |
|
if (edtIsACCharBeforePosition (pSLEditData->buffer, |
pSLEditData->editPos)) |
{ |
pSLEditData->startPos -= 2; |
pSLEditData->caretOff = 2; |
} |
else |
{ |
pSLEditData->startPos --; |
pSLEditData->caretOff = 1; |
} |
} |
else if (pSLEditData->caretOff < 0) |
{ |
pSLEditData->startPos = 0; |
pSLEditData->caretOff = 0; |
} |
|
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
+ pSLEditData->leftMargin, pSLEditData->topMargin); |
|
if (bScroll) |
InvalidateRect (hWnd, NULL, FALSE); |
} |
return 0; |
|
case VK_RIGHT: /* SCANCODE_CURSORBLOCKRIGHT: */ |
{ |
BOOL bScroll = FALSE; |
int scrollStep, moveStep; |
|
if (pSLEditData->editPos == pSLEditData->dataEnd) |
return 0; |
|
if (edtIsACCharAtPosition (pSLEditData->buffer, |
pSLEditData->dataEnd, |
pSLEditData->startPos)) |
{ |
if (edtIsACCharAtPosition (pSLEditData->buffer, |
pSLEditData->dataEnd, |
pSLEditData->editPos)) |
{ |
scrollStep = 2; |
moveStep = 2; |
pSLEditData->editPos += 2; |
} |
else |
{ |
scrollStep = 2; |
moveStep = 1; |
pSLEditData->editPos ++; |
} |
} |
else |
{ |
if (edtIsACCharAtPosition (pSLEditData->buffer, |
pSLEditData->dataEnd, |
pSLEditData->editPos)) |
{ |
if (edtIsACCharAtPosition (pSLEditData->buffer, |
pSLEditData->dataEnd, |
pSLEditData->startPos + 1)) |
scrollStep = 3; |
else |
scrollStep = 2; |
|
moveStep = 2; |
pSLEditData->editPos += 2; |
} |
else |
{ |
scrollStep = 1; |
moveStep = 1; |
pSLEditData->editPos ++; |
} |
} |
|
pSLEditData->caretOff += moveStep; |
if (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
> edtGetOutWidth (pCtrl)) |
{ |
bScroll = TRUE; |
pSLEditData->startPos += scrollStep; |
|
pSLEditData->caretOff = |
pSLEditData->editPos - pSLEditData->startPos; |
} |
|
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
+ pSLEditData->leftMargin, pSLEditData->topMargin); |
if (bScroll) |
InvalidateRect (hWnd, NULL, FALSE); |
} |
return 0; |
#if 0 |
case SCANCODE_INSERT: |
pCtrl->userdata ^= EST_REPLACE; |
break; |
#endif |
case VK_DELETE: /* SCANCODE_REMOVE: */ |
if ((pCtrl->userdata & EST_READONLY) |
|| (pSLEditData->editPos == pSLEditData->dataEnd)){ |
#if 0 /* fix: no ping() */ |
Ping (); |
#endif |
return 0; |
} |
|
if (edtIsACCharAtPosition (pSLEditData->buffer, |
pSLEditData->dataEnd, pSLEditData->editPos)) |
deleted = 2; |
else |
deleted = 1; |
|
for (i = pSLEditData->editPos; |
i < pSLEditData->dataEnd - deleted; i++) |
pSLEditData->buffer [i] |
= pSLEditData->buffer [i + deleted]; |
|
pSLEditData->dataEnd -= deleted; |
bChange = TRUE; |
|
InvRect.left = pSLEditData->leftMargin |
+ pSLEditData->caretOff * GetSysCharWidth (hWnd); |
InvRect.top = pSLEditData->topMargin; |
InvRect.right = pCtrl->clirect.right - pCtrl->clirect.left; |
InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top; |
|
InvalidateRect (hWnd, &InvRect, FALSE); |
break; |
|
case VK_BACK: /* SCANCODE_BACKSPACE: */ |
if ((pCtrl->userdata & EST_READONLY) |
|| (pSLEditData->editPos == 0)) { |
#if 0 /* fix: no ping */ |
Ping (); |
#endif |
return 0; |
} |
|
if (edtIsACCharBeforePosition (pSLEditData->buffer, |
pSLEditData->editPos)) |
deleted = 2; |
else |
deleted = 1; |
|
for (i = pSLEditData->editPos; |
i < pSLEditData->dataEnd; |
i++) |
pSLEditData->buffer [i - deleted] |
= pSLEditData->buffer [i]; |
|
pSLEditData->dataEnd -= deleted; |
pSLEditData->editPos -= deleted; |
bChange = TRUE; |
|
pSLEditData->caretOff -= deleted; |
if (pSLEditData->caretOff == 0 |
&& pSLEditData->editPos != 0) { |
if (edtIsACCharBeforePosition (pSLEditData->buffer, |
pSLEditData->editPos)) { |
pSLEditData->startPos -= 2; |
pSLEditData->caretOff = 2; |
} |
else { |
pSLEditData->startPos --; |
pSLEditData->caretOff = 1; |
} |
|
InvRect.left = pSLEditData->leftMargin; |
InvRect.top = pSLEditData->topMargin; |
InvRect.right = pCtrl->clirect.right - |
pCtrl->clirect.left; |
InvRect.bottom = pCtrl->clirect.bottom - |
pCtrl->clirect.top; |
} |
else { |
InvRect.left = pSLEditData->leftMargin |
+ pSLEditData->caretOff * GetSysCharWidth (hWnd); |
InvRect.top = pSLEditData->topMargin; |
InvRect.right = pCtrl->clirect.right - |
pCtrl->clirect.left; |
InvRect.bottom = pCtrl->clirect.bottom - |
pCtrl->clirect.top; |
} |
|
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
+ pSLEditData->leftMargin, pSLEditData->topMargin); |
InvalidateRect (hWnd, &InvRect, FALSE); |
break; |
|
default: |
break; |
} |
|
if (bChange) |
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (pCtrl->id, EN_CHANGE), (LPARAM) hWnd); |
} |
break; |
#endif |
case WM_CHAR: |
{ |
char charBuffer [2]; |
int i, chars, scrollStep, inserting; |
RECT InvRect; |
|
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
|
if (dwStyle & ES_READONLY) { |
|
#if 0 /* fix: no ping() */ |
Ping(); |
#endif |
return 0; |
} |
|
if (HIBYTE (wParam)) { |
charBuffer [0] = LOBYTE (wParam); |
charBuffer [1] = HIBYTE (wParam); |
chars = 2; |
} |
else { |
charBuffer [0] = LOBYTE (wParam); |
chars = 1; |
} |
|
if (chars == 1) { |
switch (charBuffer [0]) |
{ |
case 0x00: /* NULL */ |
case 0x07: /* BEL */ |
case 0x08: /* BS */ |
case 0x09: /* HT */ |
case 0x0A: /* LF */ |
case 0x0B: /* VT */ |
case 0x0C: /* FF */ |
case 0x0D: /* CR */ |
case 0x1B: /* Escape */ |
return 0; |
} |
} |
|
if (pCtrl->userdata & EST_REPLACE) { |
if (pSLEditData->dataEnd == pSLEditData->editPos) |
inserting = chars; |
else if (edtIsACCharAtPosition (pSLEditData->buffer, |
pSLEditData->dataEnd, |
pSLEditData->editPos)) { |
if (chars == 2) |
inserting = 0; |
else |
inserting = -1; |
} |
else { |
if (chars == 2) |
inserting = 1; |
else |
inserting = 0; |
} |
} |
else |
inserting = chars; |
|
/* check space */ |
if (pSLEditData->dataEnd + inserting > pSLEditData->bufferLen) { |
|
#if 0 /* fix: no ping() */ |
Ping (); |
#endif |
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (pCtrl->id, EN_MAXTEXT), (LPARAM) hWnd); |
return 0; |
} |
else if ((pSLEditData->hardLimit >= 0) |
&& ((pSLEditData->dataEnd + inserting) |
> pSLEditData->hardLimit)) { |
#if 0 /* fix: no ping() */ |
Ping (); |
#endif |
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (pCtrl->id, EN_MAXTEXT), (LPARAM) hWnd); |
return 0; |
} |
|
if (inserting == -1) { |
for (i = pSLEditData->editPos; i < pSLEditData->dataEnd-1; i++) |
pSLEditData->buffer [i] = pSLEditData->buffer [i + 1]; |
} |
else if (inserting > 0) { |
for (i = pSLEditData->dataEnd + inserting - 1; |
i > pSLEditData->editPos + inserting - 1; |
i--) |
pSLEditData->buffer [i] |
= pSLEditData->buffer [i - inserting]; |
} |
|
for (i = 0; i < chars; i++) |
pSLEditData->buffer [pSLEditData->editPos + i] |
= charBuffer [i]; |
|
pSLEditData->editPos += chars; |
pSLEditData->caretOff += chars; |
pSLEditData->dataEnd += inserting; |
|
if (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
> edtGetOutWidth (pCtrl)) |
{ |
if (edtIsACCharAtPosition (pSLEditData->buffer, |
pSLEditData->dataEnd, |
pSLEditData->startPos)) |
scrollStep = 2; |
else { |
if (chars == 2) { |
if (edtIsACCharAtPosition (pSLEditData->buffer, |
pSLEditData->dataEnd, |
pSLEditData->startPos + 1)) |
scrollStep = 3; |
else |
scrollStep = 2; |
} |
else |
scrollStep = 1; |
} |
|
pSLEditData->startPos += scrollStep; |
|
pSLEditData->caretOff = |
pSLEditData->editPos - pSLEditData->startPos; |
|
InvRect.left = pSLEditData->leftMargin; |
InvRect.top = pSLEditData->topMargin; |
InvRect.right = pCtrl->clirect.right - pCtrl->clirect.left; |
InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top; |
} |
else { |
InvRect.left = pSLEditData->leftMargin |
+ (pSLEditData->caretOff - chars) |
* GetSysCharWidth (hWnd); |
InvRect.top = pSLEditData->topMargin; |
InvRect.right = pCtrl->clirect.right - pCtrl->clirect.left; |
InvRect.bottom = pCtrl->clirect.bottom - pCtrl->clirect.top; |
} |
|
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
+ pSLEditData->leftMargin, pSLEditData->topMargin); |
InvalidateRect (hWnd, &InvRect, FALSE); |
|
SendMessage (GetParent (hWnd), WM_COMMAND, |
(WPARAM) MAKELONG (pCtrl->id, EN_CHANGE), (LPARAM) hWnd); |
} |
break; |
|
case WM_GETTEXTLENGTH: |
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
return pSLEditData->dataEnd; |
|
case WM_GETTEXT: |
{ |
char* buffer = (char*)lParam; |
int len; |
|
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
|
len = min ((int)wParam, pSLEditData->dataEnd); |
|
memcpy (buffer, pSLEditData->buffer, len); |
buffer [len] = '\0'; |
|
return len; |
} |
break; |
|
case WM_SETTEXT: |
{ |
int len; |
|
if (dwStyle & ES_READONLY) |
return 0; |
|
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
|
|
len = strlen ((char*)lParam); |
len = min (len, pSLEditData->bufferLen); |
|
if (pSLEditData->hardLimit >= 0) |
len = min (len, pSLEditData->hardLimit); |
|
pSLEditData->dataEnd = len; |
memcpy (pSLEditData->buffer, (char*)lParam, len); |
|
pSLEditData->editPos = 0; |
pSLEditData->caretOff = 0; |
pSLEditData->startPos = 0; |
|
InvalidateRect (hWnd, NULL, FALSE); |
} |
break; |
|
case WM_LBUTTONDBLCLK: |
break; |
|
case WM_LBUTTONDOWN: |
{ |
int newOff; |
|
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
newOff = edtGetOffset (hWnd,pSLEditData, LOWORD (lParam)); |
|
if (newOff != pSLEditData->caretOff) |
{ |
pSLEditData->editPos += newOff - pSLEditData->caretOff; |
pSLEditData->caretOff = newOff; |
|
SetCaretPos (pSLEditData->caretOff * GetSysCharWidth (hWnd) |
+ pSLEditData->leftMargin, pSLEditData->topMargin); |
} |
} |
break; |
|
case WM_LBUTTONUP: |
break; |
|
case WM_MOUSEMOVE: |
break; |
|
case WM_GETDLGCODE: |
return DLGC_WANTCHARS | DLGC_HASSETSEL | DLGC_WANTARROWS; |
|
case EM_SETREADONLY: |
if (wParam) |
pCtrl->style/*dwStyle*/ |= ES_READONLY; |
else |
pCtrl->style/*dwStyle*/ &= ~ES_READONLY; |
return 0; |
|
case EM_SETPASSWORDCHAR: |
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
|
if (pSLEditData->passwdChar != (int)wParam) { |
if (dwStyle & ES_PASSWORD) { |
pSLEditData->passwdChar = (int)wParam; |
InvalidateRect (hWnd, NULL, TRUE); |
} |
} |
return 0; |
|
case EM_GETPASSWORDCHAR: |
{ |
int* passwdchar; |
|
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
passwdchar = (int*) lParam; |
|
*passwdchar = pSLEditData->passwdChar; |
} |
return 0; |
|
case EM_LIMITTEXT: |
{ |
int newLimit = (int)wParam; |
|
if (newLimit >= 0) { |
pSLEditData = (PSLEDITDATA) (pCtrl->userdata2); |
if (pSLEditData->bufferLen < newLimit) |
pSLEditData->hardLimit = -1; |
else |
pSLEditData->hardLimit = newLimit; |
} |
} |
return 0; |
|
default: |
return DefWindowProc (hWnd, message, wParam, lParam); |
break; |
} |
return 0; |
} |
/winlib/static.c
0,0 → 1,369
/* |
* Copyright (C) 1999, 2000, Wei Yongming. |
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* |
* Static control for Microwindows win32 api. |
*/ |
|
/* |
** This library is free software; you can redistribute it and/or |
** modify it under the terms of the GNU Library General Public |
** License as published by the Free Software Foundation; either |
** version 2 of the License, or (at your option) any later version. |
** |
** This library is distributed in the hope that it will be useful, |
** but WITHOUT ANY WARRANTY; without even the implied warranty of |
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
** Library General Public License for more details. |
** |
** You should have received a copy of the GNU Library General Public |
** License along with this library; if not, write to the Free |
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
** MA 02111-1307, USA |
*/ |
|
/* |
** Alternatively, the contents of this file may be used under the terms |
** of the Mozilla Public License (the "MPL License") in which case the |
** provisions of the MPL License are applicable instead of those above. |
*/ |
|
/* Create date: 1999/5/22 |
** |
** Modify records: |
** |
** Who When Where For What Status |
**----------------------------------------------------------------------------- |
** WEI Yongming 1999/8/21 Tsinghua Rearrangment Finished |
** WEI Yongming 1999/10/27 Tsinghua SETTEXT bug Finished |
** WEI Yongming 1999/10/27 Tsinghua SETTEXT bug Finished |
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished |
** Kevin Tseng 2000/06/26 gv port to microwin ported |
** Greg Haerr 2000/07/05 Utah bug fixes Finished |
*/ |
|
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#define MWINCLUDECOLORS |
#include "windows.h" /* windef.h, winuser.h */ |
#include "wintools.h" |
#include "device.h" /* GdGetTextSize */ |
|
/* jmt: should be SYSTEM_FIXED_FONT because of minigui's GetSysCharXXX() */ |
#define FONT_NAME SYSTEM_FIXED_FONT /* was DEFAULT_GUI_FONT*/ |
|
static LRESULT CALLBACK |
StaticControlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); |
|
int WINAPI MwRegisterStaticControl(HINSTANCE hInstance) |
{ |
WNDCLASS wc; |
|
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS; |
wc.lpfnWndProc = (WNDPROC)StaticControlProc; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 0; |
wc.hInstance = hInstance; |
wc.hIcon = NULL; |
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/ |
wc.hbrBackground= GetStockObject(WHITE_BRUSH); |
wc.lpszMenuName = NULL; |
wc.lpszClassName= "STATIC"; |
|
return RegisterClass(&wc); |
} |
|
#if 1 |
#define RECTW(rc) (rc.right-rc.left) |
#define RECTH(rc) (rc.bottom-rc.top) |
|
static DWORD GetWindowStyle (HWND hwnd) |
{ |
return hwnd->style; |
} |
|
static COLORREF GetWindowBkColor (HWND hwnd) |
{ |
MWBRUSHOBJ *hbr; |
hbr=(MWBRUSHOBJ *)hwnd->pClass->hbrBackground; |
return hbr->color; |
} |
|
static char *GetWindowCaption (HWND hwnd) |
{ |
return hwnd->szTitle; |
} |
|
static void SetWindowCaption (HWND hwnd,char *caption) |
{ |
if (strlen(caption)<=63) /* mw: szTitle[64] */ |
strcpy(hwnd->szTitle,caption); |
else |
{ |
strncpy(hwnd->szTitle,caption,63); |
hwnd->szTitle[63]='\0'; |
} |
} |
|
static int GetSysCharHeight (HWND hwnd) |
{ |
HDC hdc; |
int xw, xh, xb; |
|
hdc = GetDC(hwnd); |
|
SelectObject(hdc, GetStockObject(FONT_NAME)); |
|
#if MWCLIENT /* nanox client */ |
GrGetGCTextSize(hdc->gc, "X", 1, MWTF_ASCII, &xw, &xh, &xb); |
#else |
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII); |
#endif |
ReleaseDC(hwnd,hdc); |
|
return xh; |
} |
|
static int GetSysCharWidth (HWND hwnd) |
{ |
HDC hdc; |
int xw, xh, xb; |
|
hdc = GetDC(hwnd); |
|
SelectObject(hdc, GetStockObject(FONT_NAME)); |
|
#if MWCLIENT /* nanox client */ |
GrGetGCTextSize(hdc->gc, "X", 1, MWTF_ASCII, &xw, &xh, &xb); |
#else |
GdGetTextSize(hdc->font->pfont,"X",1, &xw,&xh,&xb,MWTF_ASCII); |
#endif |
ReleaseDC(hwnd,hdc); |
|
return xw; |
} |
#endif |
|
static LRESULT CALLBACK |
StaticControlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) |
{ |
RECT rcClient; |
HDC hdc; |
char* spCaption; |
HWND pCtrl; |
UINT uFormat; |
DWORD dwStyle; |
|
pCtrl = hwnd; |
switch (message) { |
case WM_CREATE: |
return 0; |
|
case WM_DESTROY: |
break; |
|
case STM_GETIMAGE: |
return (int)(pCtrl->userdata); |
|
case STM_SETIMAGE: |
{ |
int pOldValue; |
|
pOldValue = (int)(pCtrl->userdata); |
pCtrl->userdata = (DWORD)wParam; |
InvalidateRect (hwnd, NULL, FALSE); |
return pOldValue; |
} |
|
case WM_GETDLGCODE: |
return DLGC_STATIC; |
|
|
case WM_PAINT: |
{ |
PAINTSTRUCT ps; |
RECT rc; |
HBRUSH hbr; |
|
hdc = BeginPaint (hwnd,&ps); |
|
GetClientRect (hwnd, &rcClient); |
|
FastFillRect(hdc, &rcClient, GetSysColor(COLOR_BTNFACE)); |
|
dwStyle = GetWindowStyle (hwnd); |
|
switch (dwStyle & SS_TYPEMASK) |
{ |
case SS_GRAYRECT: |
#if 0 |
SetBrushColor (hdc, LTGRAY); |
FillBox(hdc, 0, 0, RECTW(rcClient), RECTH(rcClient)); |
#else |
rc.left=0; rc.top=0; rc.bottom=RECTH(rcClient); rc.right=RECTW(rcClient); |
FillRect(hdc,&rc,GetStockObject(LTGRAY_BRUSH)); |
#endif |
break; |
|
case SS_GRAYFRAME: |
#if 0 |
Draw3DDownFrame (hdc, |
0, 0, rcClient.right, rcClient.bottom, |
DKGRAY); |
#else |
Draw3dInset(hdc, 0, 0, |
rcClient.right, rcClient.bottom); |
#endif |
break; |
|
case SS_BITMAP: |
#if 0 /* jmt: fix: no FillBoxWithBitmap() */ |
FillBoxWithBitmap(hdc, 0, 0, 0, 0, |
(PBITMAP)(pCtrl->userdata)); |
#endif |
break; |
|
case SS_ICON: |
#if 0 /* jmt: fix: no DrawIcon */ |
hIcon = (HICON)(pCtrl->userdata); |
DrawIcon (hdc, 0, 0, 0, 0, hIcon); |
#endif |
break; |
|
case SS_SIMPLE: |
#if 0 |
SetBrushColor (hdc, GetWindowBkColor (hwnd)); |
FillBox (hdc, 0, 0, rcClient.right, rcClient.bottom); |
#else |
hbr=CreateSolidBrush(GetWindowBkColor(hwnd)); |
rc.left=0; rc.top=0; rc.bottom=rcClient.bottom; rc.right=rcClient.right; |
FillRect(hdc,&rc,hbr); |
DeleteObject(hbr); |
#endif |
if (dwStyle & WS_DISABLED) |
SetTextColor (hdc, DKGRAY); |
else |
SetTextColor (hdc, BLACK); |
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE)); |
spCaption = GetWindowCaption (hwnd); |
if (spCaption) |
{ |
SelectObject(hdc, GetStockObject(FONT_NAME)); |
TextOut (hdc, 0, 0, spCaption, -1); |
} |
break; |
|
case SS_LEFT: |
case SS_CENTER: |
case SS_RIGHT: |
case SS_LEFTNOWORDWRAP: |
uFormat = DT_TOP; |
if ( (dwStyle & SS_TYPEMASK) == SS_LEFT) |
uFormat |= DT_LEFT | DT_WORDBREAK; |
else if ( (dwStyle & SS_TYPEMASK) == SS_CENTER) |
uFormat |= DT_CENTER | DT_WORDBREAK; |
else if ( (dwStyle & SS_TYPEMASK) == SS_RIGHT) |
uFormat |= DT_RIGHT | DT_WORDBREAK; |
else if ( (dwStyle & SS_TYPEMASK) == SS_LEFTNOWORDWRAP) |
uFormat |= DT_LEFT | DT_SINGLELINE | DT_EXPANDTABS; |
|
if (dwStyle & WS_DISABLED) |
SetTextColor (hdc, DKGRAY); |
else |
SetTextColor (hdc, BLACK); |
|
#if 0 |
SetBkColor (hdc, GetWindowBkColor (hwnd)); |
#endif |
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE)); |
spCaption = GetWindowCaption (hwnd); |
if (dwStyle & SS_NOPREFIX) |
uFormat |= DT_NOPREFIX; |
|
if (spCaption) |
{ |
SelectObject(hdc, GetStockObject(FONT_NAME)); |
DrawText (hdc, spCaption, -1, &rcClient, uFormat); |
} |
break; |
|
case SS_GROUPBOX: |
#if 0 |
Draw3DBorder (hdc, rcClient.left, |
rcClient.top + (GetSysCharHeight(hwnd) >> 1), |
rcClient.right, rcClient.bottom); |
#else |
Draw3dInset(hdc, rcClient.left, |
rcClient.top+(GetSysCharHeight(hwnd) >> 1), |
rcClient.right-rcClient.left, |
rcClient.bottom-rcClient.top); |
#endif |
if (dwStyle & WS_DISABLED) |
SetTextColor (hdc, DKGRAY); |
else |
SetTextColor (hdc, BLACK); |
|
#if 0 |
SetBkColor(hdc, GetWindowBkColor (GetParent (hwnd))); |
#endif |
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE)); |
spCaption = GetWindowCaption (hwnd); |
if (spCaption) |
{ |
SelectObject(hdc, GetStockObject(FONT_NAME)); |
TextOut (hdc, GetSysCharWidth (hwnd), 2, spCaption, -1); |
} |
break; |
} |
EndPaint (hwnd, &ps); |
} |
break; |
|
#if 0 /* jmt: SS_NOTIFY isn't standard in win32 */ |
case WM_LBUTTONDBLCLK: |
if (GetWindowStyle (hwnd) & SS_NOTIFY) |
SendMessage (GetParent(hwnd), WM_COMMAND, |
(WPARAM)MAKELONG(pCtrl->id, STN_DBLCLK), |
(LPARAM)hwnd); |
break; |
#endif |
case WM_LBUTTONDOWN: |
break; |
|
case WM_NCLBUTTONDBLCLK: |
break; |
|
case WM_NCLBUTTONDOWN: |
break; |
|
case WM_NCHITTEST: |
dwStyle = GetWindowStyle (hwnd); |
if ((dwStyle & SS_TYPEMASK) == SS_GROUPBOX) |
return HTTRANSPARENT; |
|
#if 0 /* jmt: SS_NOTIFY isn't standard in win32 */ |
if (GetWindowStyle (hwnd) & SS_NOTIFY) |
return HTCLIENT; |
else |
#endif |
return HTNOWHERE; |
break; |
|
|
#if 0 /* jmt: fix: no WM_GETFONT/WM_SETFONT */ |
case WM_GETFONT: |
break; |
case WM_SETFONT: |
break; |
#endif |
case WM_SETTEXT: |
SetWindowCaption (hwnd, (char*)lParam); |
InvalidateRect (hwnd, NULL, TRUE); |
break; |
|
default: |
return DefWindowProc (hwnd, message, wParam, lParam); |
} |
return 0; |
} |
/winlib/scrlbar.c
0,0 → 1,1140
/* |
* Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* Portions Copyright (c) 1999, 2000, Wei Yongming. |
* jmt: scrollbar thumb ported |
* |
* Microwindows win32 Scrollbars control |
*/ |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#define MWINCLUDECOLORS /* jmt: for color macros */ |
#include "windows.h" |
#include "wintern.h" |
#include "wintools.h" |
|
/* scrollbar status/positions*/ |
#define SBS_UNKNOWN 0x0000 |
#define SBS_LEFTARROW 0x0001 |
#define SBS_RIGHTARROW 0x0002 |
#define SBS_LEFTSPACE 0x0004 |
#define SBS_RIGHTSPACE 0x0008 |
#define SBS_HORZTHUMB 0x0010 |
#define SBS_UPARROW 0x0020 |
#define SBS_DOWNARROW 0x0040 |
#define SBS_UPSPACE 0x0080 |
#define SBS_DOWNSPACE 0x0100 |
#define SBS_VERTTHUMB 0x0200 |
#define SBS_MASK 0x03ff |
#define SBS_DISABLED 0x4000 |
#define SBS_HIDE 0x8000 |
|
|
#define MWM_DEFBARLEN 18 |
#define MWM_MINBARLEN 8 |
|
static LRESULT CALLBACK |
ScrollbarControlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); |
|
|
int WINAPI MwRegisterScrollbarControl(HINSTANCE hInstance) |
{ |
WNDCLASS wc; |
|
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS; |
wc.lpfnWndProc = (WNDPROC)ScrollbarControlProc; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 0; |
wc.hInstance = hInstance; |
wc.hIcon = NULL; |
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/ |
wc.hbrBackground= GetStockObject(WHITE_BRUSH); |
wc.lpszMenuName = NULL; |
wc.lpszClassName= "SCROLLBAR"; |
|
return RegisterClass(&wc); |
} |
|
static DWORD GetWindowStyle (HWND hwnd) |
{ |
return hwnd->style; |
} |
|
static int |
wndGetBorder(HWND hwnd) |
{ |
if (hwnd->style & WS_BORDER) { |
if ((hwnd->style & WS_CAPTION) == WS_CAPTION) |
return mwSYSMETRICS_CXFRAME; |
return mwSYSMETRICS_CXBORDER; |
} |
return 0; |
} |
|
static BOOL |
wndGetVScrollBarRect (HWND hwnd, RECT* rcVBar) |
{ |
int cx,cy; RECT rc; |
MWSCROLLBARINFO* pData; |
|
pData = (MWSCROLLBARINFO *)hwnd->userdata; |
rc = hwnd->winrect; |
cx=rc.right-rc.left; |
cy=rc.bottom-rc.top; |
|
rcVBar->left = hwnd->winrect.right - cx |
- wndGetBorder (hwnd); |
rcVBar->right = hwnd->winrect.right - wndGetBorder (hwnd); |
rcVBar->top = hwnd->winrect.top; |
rcVBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd); |
|
return TRUE; |
} |
|
static BOOL |
wndGetHScrollBarRect (HWND hwnd, RECT* rcHBar) |
{ |
int cx,cy; RECT rc; |
MWSCROLLBARINFO* pData; |
|
pData = (MWSCROLLBARINFO *)hwnd->userdata; |
rc = hwnd->winrect; |
cx=rc.right-rc.left; |
cy=rc.bottom-rc.top; |
|
rcHBar->top = hwnd->winrect.bottom - cy |
- wndGetBorder (hwnd); |
rcHBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd); |
rcHBar->left = hwnd->winrect.left; |
rcHBar->right = hwnd->winrect.right - wndGetBorder (hwnd); |
|
return TRUE; |
} |
|
void |
MwPaintScrollbars(HWND hwnd, HDC hdc, DWORD style) |
{ |
BOOL vertbar = (style==SBS_VERT); |
BOOL horzbar = (style==SBS_HORZ); |
BOOL fGotDC = FALSE; |
RECT rc,rc2; |
|
POINT p3[3]; |
int shrink=2; |
|
int start = 0; |
RECT rcHBar, rcVBar; |
|
int cx,cy; |
MWSCROLLBARINFO* pData; |
|
pData = (MWSCROLLBARINFO *)hwnd->userdata; |
rc = hwnd->winrect; |
cx=rc.right-rc.left; |
cy=rc.bottom-rc.top; |
|
if (!hdc && (horzbar || vertbar)) { |
hdc = GetWindowDC(hwnd); |
fGotDC = TRUE; |
} |
|
if (vertbar) { |
|
#if 1 |
/* bkgnd */ |
rc2.left=rc.left; rc2.right=rc2.left+ cx; |
rc2.top=rc.top; |
rc2.bottom=rc2.top+ cx; |
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1)); |
rc2.top=rc.bottom- cx; |
rc2.bottom=rc2.top+ cx; |
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1)); |
#endif |
/* up */ |
Draw3dUpDownState(hdc, rc.left, rc.top, |
cx, cx, |
pData->status & SBS_UPARROW); |
/* down */ |
Draw3dUpDownState(hdc, rc.left,rc.bottom-cx, |
cx, cx, |
pData->status & SBS_DOWNARROW); |
/* jmt: draw arrows */ |
SelectObject(hdc,GetStockObject(BLACK_BRUSH)); |
/* up */ |
p3[0].x= rc.left + (cx/2) - 1; |
p3[0].y= rc.top + 2 + shrink; |
p3[1].x= rc.left + 2 + shrink - 1; |
p3[1].y= rc.top + (cx-4) - shrink; |
p3[2].x= rc.left + (cx-4) - shrink; |
p3[2].y= rc.top + (cx-4) - shrink; |
Polygon(hdc,p3,3); |
/* down */ |
p3[0].x= rc.left + (cx/2) - 1; |
p3[0].y= rc.bottom - 4 - shrink; |
p3[1].x= rc.left + 2 + shrink - 1; |
p3[1].y= rc.bottom-cx + 2 + shrink; |
p3[2].x= rc.left + (cx-4) - shrink; |
p3[2].y= rc.bottom-cx + 2 + shrink; |
Polygon(hdc,p3,3); |
|
/* draw moving bar */ |
|
wndGetVScrollBarRect (hwnd, &rcVBar); |
rcVBar.left -- ; |
/*rcVBar.right -- ;*/ |
|
start = rcVBar.top + cx + pData->barStart; |
|
if (start + pData->barLen > rcVBar.bottom) |
start = rcVBar.bottom - pData->barLen; |
|
if (pData->barLen == 0) |
pData->barLen=rc.bottom-rc.top-(cx*2); |
|
/* bkgnd */ |
rc2.left=rc.left; rc2.right=rc.right/*-1*/; |
rc2.top=rc.top+cx; |
rc2.bottom=start; |
if (rc2.bottom>rc2.top) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
rc2.top=start+pData->barLen; |
rc2.bottom=rc.bottom-cx; |
if (rc2.bottom>rc2.top) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
Draw3dUpFrame (hdc, rcVBar.left, start, rcVBar.right, |
start + pData->barLen); |
/*printf("barv:(l,t,r,b):(%d,%d,%d,%d)\n", |
rcVBar.left, start, rcVBar.right, |
start + pData->barLen);*/ |
|
} |
if (horzbar) { |
#if 1 |
/* bkgnd */ |
rc2.top=rc.top; rc2.bottom=rc2.top+ cy; |
rc2.left=rc.left; |
rc2.right=rc2.left+ cy; |
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1)); |
rc2.left=rc.right- cy; |
rc2.right=rc2.left+ cy; |
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1)); |
#endif |
/* left */ |
Draw3dUpDownState(hdc, rc.left, rc.top, |
cy, cy, |
pData->status & SBS_LEFTARROW); |
/* right */ |
Draw3dUpDownState(hdc, rc.right-cy, rc.top, |
cy, cy, |
pData->status & SBS_RIGHTARROW); |
/* jmt: draw arrows */ |
SelectObject(hdc,GetStockObject(BLACK_BRUSH)); |
/* left */ |
p3[0].x= rc.left + 2 + shrink; |
p3[0].y= rc.top + (cy/2) ; |
p3[1].x= rc.left + (cy-4) - shrink ; |
p3[1].y= rc.top + 2 + shrink; |
p3[2].x= rc.left + (cy-4) - shrink; |
p3[2].y= rc.bottom - 4 - shrink + 1; |
Polygon(hdc,p3,3); |
/* right */ |
p3[0].x= rc.right - 4 - shrink; |
p3[0].y= rc.top + (cy/2) ; |
p3[1].x= rc.right-cy + 2 + shrink ; |
p3[1].y= rc.top + 2 + shrink; |
p3[2].x= rc.right-cy + 2 + shrink; |
p3[2].y= rc.bottom - 4 - shrink + 1; |
Polygon(hdc,p3,3); |
|
/* draw moving bar. */ |
|
wndGetHScrollBarRect (hwnd, &rcHBar); |
rcHBar.top -- ; |
/*rcHBar.bottom -- ;*/ |
|
start = rcHBar.left + cy + pData->barStart; |
|
if (start + pData->barLen > rcHBar.right) |
start = rcHBar.right - pData->barLen; |
|
if (pData->barLen == 0) |
pData->barLen=rc.right-rc.left-(cy*2); |
|
/* bkgnd */ |
rc2.top=rc.top; rc2.bottom=rc.bottom/*-1*/; |
rc2.left=rc.left+cy; |
rc2.right=start; |
if (rc2.right>rc2.left) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
rc2.left=start+pData->barLen; |
rc2.right=rc.right-cy; |
if (rc2.right>rc2.left) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
Draw3dUpFrame (hdc, start, rcHBar.top, start + pData->barLen, |
rcHBar.bottom); |
/*printf("barh:(l,t,r,b):(%d,%d,%d,%d)\n", |
start, rcHBar.top, start + pData->barLen, |
rcHBar.bottom);*/ |
} |
|
if (fGotDC) |
ReleaseDC(hwnd, hdc); |
} |
|
/* handle a non-client message for a scrollbar*/ |
void |
MwHandleMessageScrollbar(HWND hwnd, WPARAM hitcode, LPARAM lParam, UINT msg, DWORD style) |
{ |
int pos = SBS_UNKNOWN; |
BOOL vertbar = (style==SBS_VERT); |
BOOL horzbar = (style==SBS_HORZ); |
int * pStat; |
POINT pt; |
RECT rc; |
|
static BOOL bDraw; |
|
static int downPos = SBS_UNKNOWN; |
static int sbCode; |
int newThumbPos; |
|
int itemMoveable,itemCount,itemVisible,moveRange; /* jmt:2k0819 */ |
int moveTop,moveBottom,moveLeft,moveRight; /* jmt:2k0819 */ |
|
int cx,cy; |
MWSCROLLBARINFO* pData; |
|
pData = (MWSCROLLBARINFO *)hwnd->userdata; |
rc = hwnd->winrect; |
cx=rc.right-rc.left; |
cy=rc.bottom-rc.top; |
|
POINTSTOPOINT(pt, lParam); |
for (;;) { /* use for() to allow break statement*/ |
if (vertbar) |
{ |
pStat = &pData->status; |
rc = hwnd->winrect; |
rc.bottom = rc.top + cx; |
if (PtInRect(&rc, pt)) |
{ |
pos = SBS_UPARROW; |
break; |
} |
rc.bottom = hwnd->winrect.bottom; |
rc.top = rc.bottom - cx; |
if (PtInRect(&rc, pt)) |
{ |
pos = SBS_DOWNARROW; |
break; |
} |
pos = SBS_VERTTHUMB; |
} else if (horzbar) |
{ |
pStat = &pData->status; |
rc = hwnd->winrect; |
rc.right = rc.left + cy; |
if (PtInRect(&rc, pt)) { |
pos = SBS_LEFTARROW; |
break; |
} |
rc.right = hwnd->winrect.right; |
rc.left = rc.right - cy; |
if (PtInRect(&rc, pt)) { |
pos = SBS_RIGHTARROW; |
break; |
} |
pos = SBS_HORZTHUMB; |
} else |
return; |
break; |
} |
|
if (pos == SBS_UNKNOWN) |
return; |
|
*pStat &= ~SBS_MASK; /* remove stray mouse states*/ |
|
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK) |
*pStat |= pos; |
else *pStat &= ~pos; |
|
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK) |
bDraw=TRUE; |
|
if (bDraw) |
MwPaintScrollbars(hwnd, NULL,style); |
|
if (pos == SBS_UPARROW || pos == SBS_LEFTARROW) /* jmt:2k0820 */ |
{ |
if (pData->curPos != pData->minPos) |
sbCode = SB_LINEUP; |
} |
else if (pos == SBS_DOWNARROW || pos == SBS_RIGHTARROW) /* jmt:2k0820 */ |
{ |
if (pData->curPos != pData->maxPos) |
sbCode = SB_LINEDOWN; |
} |
else if (pos == SBS_VERTTHUMB || pos == SBS_HORZTHUMB) |
{ |
sbCode = SB_THUMBTRACK; |
} |
|
switch(msg) |
{ |
case WM_NCLBUTTONDOWN: |
case WM_NCLBUTTONDBLCLK: |
downPos = pos; |
break; |
|
case WM_NCMOUSEMOVE: |
if (vertbar) |
{ |
if (sbCode == SB_THUMBTRACK && downPos == SBS_VERTTHUMB) |
{ |
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
rc = hwnd->winrect; |
moveTop = rc.top + cx; |
moveBottom = hwnd->winrect.bottom - cx; |
moveRange = moveBottom - moveTop; |
|
itemCount = pData->maxPos - pData->minPos + 1; |
itemVisible = pData->pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveTop,itemMoveable,moveRange,newThumbPos); |
|
if ( newThumbPos >= pData->minPos && |
newThumbPos <= pData->maxPos) |
{ |
SendMessage (hwnd, |
WM_VSCROLL, SB_THUMBTRACK, newThumbPos); |
|
SendMessage (GetParent(hwnd), |
WM_VSCROLL, SB_THUMBTRACK, newThumbPos); |
} |
break; |
} |
} |
if (horzbar) |
{ |
if (sbCode == SB_THUMBTRACK && downPos == SBS_HORZTHUMB) |
{ |
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
rc = hwnd->winrect; |
moveLeft = rc.left + cy; |
moveRight = hwnd->winrect.right - cy; |
moveRange = moveRight - moveLeft; |
|
itemCount = pData->maxPos - pData->minPos + 1; |
itemVisible = pData->pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos); |
|
if ( newThumbPos >= pData->minPos && |
newThumbPos <= pData->maxPos) |
{ |
SendMessage (hwnd, |
WM_HSCROLL, SB_THUMBTRACK, newThumbPos); |
|
SendMessage (GetParent(hwnd), |
WM_HSCROLL, SB_THUMBTRACK, newThumbPos); |
} |
break; |
} |
} |
break; |
|
case WM_NCLBUTTONUP: |
bDraw=FALSE; |
downPos = SBS_UNKNOWN; |
|
if (sbCode==SB_THUMBTRACK) |
{ |
if (vertbar) |
{ |
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
rc = hwnd->winrect; |
moveTop = rc.top + cx; |
moveBottom = hwnd->winrect.bottom - cx; |
moveRange = moveBottom - moveTop; |
|
itemCount = pData->maxPos - pData->minPos + 1; |
itemVisible = pData->pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveTop,itemMoveable,moveRange,newThumbPos); |
|
if ( newThumbPos >= pData->minPos && |
newThumbPos <= pData->maxPos) |
{ |
SendMessage (hwnd, |
WM_VSCROLL, SB_THUMBTRACK, newThumbPos); |
|
SendMessage (GetParent(hwnd), |
WM_VSCROLL, SB_THUMBTRACK, newThumbPos); |
} |
break; /* case */ |
} |
if (horzbar) |
{ |
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
rc = hwnd->winrect; |
moveLeft = rc.left + cy; |
moveRight = hwnd->winrect.right - cy; |
moveRange = moveRight - moveLeft; |
|
itemCount = pData->maxPos - pData->minPos + 1; |
itemVisible = pData->pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos); |
|
if ( newThumbPos >= pData->minPos && |
newThumbPos <= pData->maxPos) |
{ |
SendMessage (hwnd, |
WM_HSCROLL, SB_THUMBTRACK, newThumbPos); |
|
SendMessage (GetParent(hwnd), |
WM_HSCROLL, SB_THUMBTRACK, newThumbPos); |
} |
break; /* case */ |
} |
} |
else |
{ |
if (vertbar) |
{ |
SendMessage (hwnd, WM_VSCROLL, sbCode, 0); |
SendMessage (GetParent(hwnd), WM_VSCROLL, sbCode, 0); |
} |
if (horzbar) |
{ |
SendMessage (hwnd, WM_HSCROLL, sbCode, 0); |
SendMessage (GetParent(hwnd), WM_HSCROLL, sbCode, 0); |
} |
} |
break; |
} |
} |
|
|
static BOOL |
PtInRect2(const RECT *lprc, int x, int y) |
{ |
POINT p; |
|
p.x = x; |
p.y = y; |
return PtInRect(lprc, p); |
} |
|
static void |
wndScrollBarPos (HWND hwnd, BOOL bIsHBar, RECT* rcBar) /* jmt: 2k0820 */ |
{ |
UINT moveRange; |
PMWSCROLLBARINFO pSBar; |
int cx,cy; |
RECT rc; |
|
rc = hwnd->winrect; |
cx=rc.right-rc.left; |
cy=rc.bottom-rc.top; |
pSBar = (MWSCROLLBARINFO *)hwnd->userdata; |
|
if (pSBar->minPos == pSBar->maxPos) { |
pSBar->status |= SBS_HIDE; |
return; |
} |
|
if (bIsHBar) |
moveRange = (rcBar->right - rcBar->left) - (cy << 1); |
else |
moveRange = (rcBar->bottom - rcBar->top) - (cx << 1); |
|
|
if (pSBar->pageStep == 0) |
{ |
pSBar->barLen = MWM_DEFBARLEN; |
|
if (pSBar->barLen > moveRange) |
pSBar->barLen = MWM_MINBARLEN; |
} |
else |
{ |
pSBar->barLen = moveRange * pSBar->pageStep / |
(pSBar->maxPos - pSBar->minPos + 1); |
if (pSBar->barLen < MWM_MINBARLEN) |
pSBar->barLen = MWM_MINBARLEN; |
} |
|
pSBar->barStart = moveRange * (pSBar->curPos - pSBar->minPos) / |
(pSBar->maxPos - pSBar->minPos + 1); |
|
|
if (pSBar->barStart + pSBar->barLen > moveRange) |
pSBar->barStart = moveRange - pSBar->barLen; |
|
|
if (pSBar->barStart < 0) |
pSBar->barStart = 0; |
} |
|
static PMWSCROLLBARINFO wndGetScrollBar (HWND pWin) /* jmt: 2k0820 */ |
{ |
MWSCROLLBARINFO* pData; |
|
pData = (MWSCROLLBARINFO *)pWin->userdata; |
|
if (!strcmp(pWin->pClass->lpszClassName,"SCROLLBAR")) |
return pData; |
else |
return NULL; |
} |
|
BOOL EnableScrollBarEx (HWND hWnd, int iSBar, BOOL bEnable) /* jmt: iSBar not used */ |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
BOOL bPrevState; |
RECT rcBar; |
|
DWORD dwStyle; /* jmt:2k0820 */ |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin)) ) |
return FALSE; |
|
bPrevState = !(pSBar->status & SBS_DISABLED); |
|
if (bEnable && !bPrevState) |
pSBar->status &= ~SBS_DISABLED; |
else if (!bEnable && bPrevState) |
pSBar->status |= SBS_DISABLED; |
else |
return FALSE; |
|
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ |
|
if (dwStyle == SBS_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */ |
#endif |
|
return TRUE; |
} |
|
BOOL GetScrollPosEx (HWND hWnd, int iSBar, int* pPos) /* jmt: iSBar not used */ |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin)) ) |
return FALSE; |
|
*pPos = pSBar->curPos; |
return TRUE; |
} |
|
BOOL GetScrollRangeEx (HWND hWnd, int iSBar, int* pMinPos, int* pMaxPos) /* jmt: iSBar not used */ |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin)) ) |
return FALSE; |
|
*pMinPos = pSBar->minPos; |
*pMaxPos = pSBar->maxPos; |
return TRUE; |
} |
|
BOOL SetScrollPosEx (HWND hWnd, int iSBar, int iNewPos) /* jmt: iSBar not used */ |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
DWORD dwStyle; /* jmt:2k0820 */ |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin)) ) |
return FALSE; |
|
if (iNewPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
else |
pSBar->curPos = iNewPos; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ |
|
if (dwStyle == SBS_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
|
wndScrollBarPos (pWin, dwStyle == SBS_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */ |
#endif |
return TRUE; |
} |
|
BOOL SetScrollRangeEx (HWND hWnd, int iSBar, int iMinPos, int iMaxPos) /* jmt: iSBar not used */ |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
DWORD dwStyle; /* jmt:2k0820 */ |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin)) ) |
return FALSE; |
|
pSBar->minPos = (iMinPos < iMaxPos)?iMinPos:iMaxPos; |
pSBar->maxPos = (iMinPos > iMaxPos)?iMinPos:iMaxPos; |
|
/* validate parameters. */ |
if (pSBar->curPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
|
if (pSBar->pageStep <= 0) |
pSBar->pageStep = 0; |
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) |
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ |
|
if (dwStyle == SBS_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
wndScrollBarPos (pWin, dwStyle == SBS_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */ |
#endif |
|
return TRUE; |
} |
|
BOOL SetScrollInfoEx (HWND hWnd, int iSBar, |
LPCSCROLLINFO lpsi, BOOL fRedraw) /* jmt: iSBar not used */ |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
DWORD dwStyle; /* jmt:2k0820 */ |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin)) ) |
return FALSE; |
|
if( lpsi->fMask & SIF_RANGE ) |
{ |
pSBar->minPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMin:lpsi->nMax; |
pSBar->maxPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMax:lpsi->nMin; |
} |
|
if( lpsi->fMask & SIF_POS ) |
pSBar->curPos = lpsi->nPos; |
|
if( lpsi->fMask & SIF_PAGE ) |
pSBar->pageStep = lpsi->nPage; |
|
/* validate parameters. */ |
if (pSBar->curPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
|
if (pSBar->pageStep <= 0) |
pSBar->pageStep = 0; |
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) |
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ |
|
if(fRedraw) |
{ |
if (dwStyle == SBS_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
wndScrollBarPos (pWin, dwStyle == SBS_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */ |
#endif |
} |
|
return TRUE; |
} |
|
BOOL GetScrollInfoEx(HWND hWnd, int iSBar, LPSCROLLINFO lpsi) /* jmt: iSBar not used */ |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin)) ) |
return FALSE; |
|
if( lpsi->fMask & SIF_RANGE ) |
{ |
lpsi->nMin = pSBar->minPos; |
lpsi->nMax = pSBar->maxPos; |
} |
|
if( lpsi->fMask & SIF_POS ) |
{ |
lpsi->nPos = pSBar->curPos; |
} |
|
if( lpsi->fMask & SIF_PAGE ) |
lpsi->nPage = pSBar->pageStep; |
|
return TRUE; |
} |
|
BOOL ShowScrollBarEx (HWND hWnd, int iSBar, BOOL bShow) /* jmt: iSBar not used */ |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
BOOL bPrevState; |
RECT rcBar; |
|
DWORD dwStyle; /* jmt:2k0820 */ |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin)) ) |
return FALSE; |
|
bPrevState = !(pSBar->status & SBS_HIDE); |
|
if (bShow && !bPrevState) |
pSBar->status &= ~SBS_HIDE; |
else if (!bShow && bPrevState) |
pSBar->status |= SBS_HIDE; |
else |
return FALSE; |
|
#if 0 /* fix: no WM_CHANGESIZE */ |
SendMessage (hWnd, WM_CHANGESIZE, 0, 0); |
#endif |
|
dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ |
|
if (dwStyle == SBS_VERT) |
wndGetVScrollBarRect (pWin, &rcBar); |
else |
wndGetHScrollBarRect (pWin, &rcBar); |
|
{ |
RECT rcWin, rcClient; |
|
memcpy (&rcWin, &pWin->winrect.left, sizeof (RECT)); |
|
rcClient.left = 0; |
rcClient.top = 0; |
rcClient.right = pWin->clirect.right - pWin->clirect.left; |
rcClient.bottom = pWin->clirect.bottom - pWin->clirect.top; |
#if 0 /* fix: no WM_SIZECHANGED */ |
SendMessage (hWnd, WM_SIZECHANGED, |
(WPARAM)&rcWin, (LPARAM)&rcClient); |
#endif |
} |
|
if (bShow) { |
SendMessage (hWnd, WM_NCPAINT, 0, 0); |
} |
else { |
rcBar.left -= pWin->clirect.left; |
rcBar.top -= pWin->clirect.top; |
rcBar.right -= pWin->clirect.left; |
rcBar.bottom -= pWin->clirect.top; |
SendMessage (hWnd, WM_NCPAINT, 0, 0); |
InvalidateRect (hWnd, &rcBar, TRUE); |
} |
|
return TRUE; |
} |
|
static void sbSetScrollInfo (HWND hwnd, PMWSCROLLBARINFO pData, BOOL fRedraw) /* jmt:2k0820 */ |
{ |
SCROLLINFO si; |
|
int itemCount,itemVisibles; |
|
itemCount = pData->maxPos - pData->minPos + 1; |
itemVisibles = pData->pageStep; |
|
if (itemVisibles >= itemCount) |
{ |
SetScrollPosEx (hwnd, 0, 0); /* jmt: arg2 not used */ |
EnableScrollBarEx (hwnd, 0, FALSE); /* jmt: arg2 not used */ |
return; |
} |
|
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS; |
si.nMax = itemCount - 1; |
si.nMin = 0; |
|
si.nPage = itemVisibles; /* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
si.nPos = pData->curPos; |
|
SetScrollInfoEx (hwnd, 0, &si, fRedraw); /* jmt: arg2 not used */ |
EnableScrollBarEx (hwnd, 0, TRUE); /* jmt: arg2 not used */ |
} |
|
static LRESULT CALLBACK |
ScrollbarControlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) /* jmt:2k0820 */ |
{ |
DWORD dwStyle; |
MWSCROLLBARINFO* pData; |
|
int moveRange; |
RECT rcBar; |
|
dwStyle = (GetWindowStyle (hwnd) & SBS_TYPEMASK); |
switch (message) |
{ |
case WM_CREATE: |
if (!(pData = malloc (sizeof (MWSCROLLBARINFO)))) |
{ |
fprintf(stderr, "Create scroll bar control failure!\n"); |
return -1; |
} |
|
pData->minPos=0; /* min value of scroll range.*/ |
/* max value of scroll range.*/ |
pData->maxPos=0; |
if (dwStyle==SBS_VERT) |
moveRange=((hwnd->winrect.bottom-hwnd->winrect.top) |
-((hwnd->winrect.right-hwnd->winrect.left)<<1)); |
else |
moveRange=((hwnd->winrect.right-hwnd->winrect.left) |
-((hwnd->winrect.bottom-hwnd->winrect.top)<<1)); |
if (moveRange > MWM_MINBARLEN) |
{ |
|
|
pData->maxPos=moveRange / MWM_MINBARLEN; |
if( (moveRange % MWM_MINBARLEN) ) |
pData->maxPos++; |
} |
printf("maxPos=%d\n",pData->maxPos); |
|
pData->curPos=0; /* current scroll pos.*/ |
|
/* steps per page.*/ |
pData->pageStep=1; |
if ( (pData->maxPos - 2) > 1) |
pData->pageStep = pData->maxPos - 2; |
printf("pageStep=%d\n",pData->pageStep); |
|
pData->barStart=0; /* start pixel of bar.*/ |
pData->barLen=MWM_MINBARLEN; /* length of bar.*/ |
pData->status=SBS_UNKNOWN; /* status of scroll bar.*/ |
#if 0 /* jmt: must handle WM_MOVE */ |
pData->rc=hwnd->winrect; /* screen coordinates position*/ |
#endif |
hwnd->userdata = (DWORD)pData; |
|
if (dwStyle == SBS_VERT) |
{ |
wndGetVScrollBarRect (hwnd, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (hwnd, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
/* adjust pData->barLen */ |
wndScrollBarPos (hwnd, dwStyle == SBS_HORZ, &rcBar); |
|
break; |
|
case WM_DESTROY: |
free ((void *)(hwnd->userdata)); |
break; |
|
case WM_PAINT: |
MwPaintScrollbars(hwnd,NULL,dwStyle); |
break; |
|
case WM_NCLBUTTONDOWN: |
case WM_NCLBUTTONDBLCLK: |
case WM_NCMOUSEMOVE: |
case WM_NCLBUTTONUP: |
MwHandleMessageScrollbar(hwnd, wParam, lParam, message, dwStyle); |
break; |
|
case WM_HSCROLL: |
case WM_VSCROLL: |
{ |
int newTop,itemCount,itemVisibles; |
|
pData = (MWSCROLLBARINFO *)hwnd->userdata; |
newTop = pData->curPos; |
itemCount = pData->maxPos - pData->minPos + 1; |
itemVisibles = pData->pageStep; |
|
switch(wParam) |
{ |
case SB_LINEDOWN: |
#define ITEM_BOTTOM(x) (x->curPos + itemVisibles - 1) |
if (ITEM_BOTTOM (pData) < (itemCount - 1 )) |
{ |
newTop ++; |
} |
break; |
|
case SB_LINEUP: |
if (pData->curPos > 0) |
{ |
newTop --; |
} |
break; |
|
case SB_PAGEDOWN: |
if ((pData->curPos + (itemVisibles << 1)) <= |
itemCount) |
newTop += itemVisibles; |
else |
newTop = itemCount - itemVisibles; |
|
if (newTop < 0) |
return 0; |
|
break; |
|
case SB_PAGEUP: |
if (pData->curPos >= itemVisibles) |
newTop -= itemVisibles; |
else |
newTop = 0; |
|
break; |
|
case SB_THUMBTRACK: |
newTop = (int)lParam; |
break; |
} |
|
pData->curPos = newTop; |
|
SendMessage (hwnd, WM_PAINT, 0, 0); |
|
sbSetScrollInfo (hwnd, pData, TRUE); |
|
return 0; |
} |
break; |
|
default: |
return DefWindowProc (hwnd, message, wParam, lParam); |
} |
return 0; |
} |
|
/winlib/graph3d.c
0,0 → 1,540
/* |
* Copyright (c) 1999 Greg Haerr <greg@censoft.com> |
* |
* 3D Graphics Library for Micro-Windows |
*/ |
#define MWINCLUDECOLORS |
#include "windows.h" |
#include "device.h" |
#include "graph3d.h" |
#define USEBLIT 1 /* =1 to use memDC's*/ |
|
static int nxpix; |
static int nypix; |
static vec1 xscale; |
static vec1 yscale; |
static vec3 eye; |
static vec3 direct; |
static double Q[5][5]; |
static HDC hdc; |
static HDC hdcMem; |
static HBITMAP hbmp, hbmpOrg; |
|
/* setup eye, direction, calc observation matrix Q*/ |
void |
look3(vec1 x, vec1 y, vec1 z) |
{ |
eye.x = x; |
eye.y = y; |
eye.z = z; |
direct.x = -eye.x; |
direct.y = -eye.y; |
direct.z = -eye.z; |
findQ(); |
} |
|
void |
init3(HDC hDC, HWND memhwnd) |
{ |
HBRUSH hbr; |
|
hdc = hDC; |
if(hdc) { |
nxpix = hdc->hwnd->clirect.right - hdc->hwnd->clirect.left; |
nypix = hdc->hwnd->clirect.bottom - hdc->hwnd->clirect.top; |
xscale = (vec1)(nxpix-1) / nxpix * nxpix/2; |
yscale = (vec1)(nypix-1) / nypix * nypix/2; |
|
if(memhwnd) { |
hdcMem = CreateCompatibleDC(NULL); |
if(hdcMem) { |
hbmp = CreateCompatibleBitmap(hdcMem, |
nxpix, nypix); |
hbmpOrg = SelectObject(hdcMem, hbmp); |
hdc = hdcMem; |
} |
hbr = (HBRUSH)GetClassLong(memhwnd, GCL_HBRBACKGROUND); |
FillRect(hdc, NULL, hbr); |
} |
/* create pen for setcolor3() color override*/ |
SelectObject(hdc, CreatePen(PS_SOLID, 1, BLACK)); |
} |
} |
|
void |
paint3(HDC hDC) |
{ |
if(hdcMem) { |
BitBlt(hDC, 0, 0, nxpix, nypix, hdcMem, 0, 0, SRCCOPY); |
DeleteObject(SelectObject(hdcMem, hbmpOrg)); |
DeleteDC(hdcMem); |
} |
hdcMem = NULL; |
} |
|
int |
fx(vec1 x) |
{ |
return (int)(x * xscale + nxpix*0.5 - 0.5); |
} |
|
int |
fy(vec1 y) |
{ |
return (int)(y * yscale + nypix*0.5 - 0.5); |
} |
|
void |
moveto3(vec2 pt) |
{ |
MoveToEx(hdc, fx(pt.x), fy(pt.y), NULL); |
} |
|
void |
setcolor3(MWCOLORVAL c) |
{ |
if(hdc) |
hdc->pen->color = c; |
} |
|
void |
lineto3(vec2 pt) |
{ |
LineTo(hdc, fx(pt.x), fy(pt.y)); |
} |
|
void |
polyfill(int n, vec2 points[]) |
{ |
int i; |
int xoff, yoff; |
MWPOINT pv[MAXPOLY]; |
|
if(!hdc) |
return; |
|
/* calc window offset*/ |
xoff = hdc->hwnd->clirect.left; |
yoff = hdc->hwnd->clirect.top; |
|
/* only plot non-trivial polygons*/ |
if(n > 2) { |
for(i=0; i<n; ++i) { |
pv[i].x = fx(points[i].x) + xoff; |
pv[i].y = fy(points[i].y) + yoff; |
/* fix: floating round error, y intercept difference |
* with GdLine |
*/ |
/*pv[i].x = fx(points[i].x + xoff);*/ |
/*pv[i].y = fy(points[i].y + yoff);*/ |
} |
GdSetForeground(GdFindColor(hdc->pen->color)); |
GdFillPoly(hdc->psd, n, pv); |
} |
} |
|
void |
square(void) |
{ |
vec2 pt0, pt1, pt2, pt3; |
|
pt0.x = -1; pt0.y = 1; |
pt1.x = -1; pt1.y = -1; |
pt2.x = 1; pt2.y = -1; |
pt3.x = 1; pt3.y = 1; |
moveto3(pt0); |
lineto3(pt1); |
lineto3(pt2); |
lineto3(pt3); |
lineto3(pt0); |
} |
|
void |
circle3(vec1 r) |
{ |
vec1 theta = 0; |
vec1 thinc = 2*pi/100; |
int i; |
vec2 pt; |
|
pt.x = r; |
pt.y = 0.0; |
moveto3(pt); |
|
for(i=0; i<100; ++i) { |
theta = theta + thinc; |
pt.x = r*cos(theta); |
pt.y = r*sin(theta); |
lineto3(pt); |
} |
} |
|
void |
daisy(vec1 r,int points) |
{ |
int i, j; |
vec1 theta = 0; |
vec1 thinc; |
vec2 pt[100]; |
|
/* calculate n points on a circle*/ |
thinc = 2*pi/points; |
for(i=0; i<points; ++i) { |
pt[i].x = r*cos(theta); |
pt[i].y = r*sin(theta); |
theta += thinc; |
} |
|
/* join point i to point j for all 0 <= i < j < n */ |
for(i=0; i<points-1; ++i) { |
for(j=i+1; j<points; ++j) { |
moveto3(pt[i]); |
lineto3(pt[j]); |
} |
} |
} |
|
void |
rose(vec1 r,int levels,int points) |
{ |
int i, j, m, n; |
vec1 r1, theta, thinc; |
vec2 inner[100]; |
vec2 outer[100]; |
vec2 triangle[3]; |
|
m = levels; |
n = points; |
thinc = 2*pi/n; |
|
/* initial inner circle*/ |
for(i=0; i<n; ++i) { |
inner[i].x = 0.0; |
inner[i].y = 0.0; |
} |
|
/* loop thru m levels*/ |
for(j=1; j<=m; ++j) { |
theta = -j*pi/n; |
r1 = r * (vec1)j/m; |
|
/* calc n points on outer circle*/ |
for(i=0; i<n; ++i) { |
theta += thinc; |
outer[i].x = r1*cos(theta); |
outer[i].y = r1*sin(theta); |
} |
|
/* construct/draw triangles with vertices on |
* inner and outer circles |
*/ |
for(i=0; i<n; ++i) { |
triangle[0] = outer[i]; |
triangle[1] = outer[(i+1) % n]; |
triangle[2] = inner[i]; |
|
/* fill triangle in red*/ |
setcolor3(RED); |
polyfill(3, triangle); |
|
#if 1 |
/* outline triangle in white*/ |
setcolor3(WHITE); |
moveto3(triangle[0]); |
lineto3(triangle[1]); |
lineto3(triangle[2]); |
lineto3(triangle[0]); |
#endif |
} |
|
/* copy points on outer circle to inner arrays*/ |
for(i=0; i<n; ++i) |
inner[i] = outer[i]; |
} |
} |
|
/* draw a triangle with cordners v0, v1, v2*/ |
void |
triangle(vec2 v0, vec2 v1, vec2 v2) |
{ |
vec2 poly[3]; |
|
poly[0] = v0; |
poly[1] = v1; |
poly[2] = v2; |
|
setcolor3(GREEN); |
polyfill(3, poly); |
setcolor3(BLACK); |
moveto3(poly[2]); |
lineto3(poly[0]); |
lineto3(poly[1]); |
lineto3(poly[2]); |
} |
|
/* draw a quadrilateral with corners v0, v1, v2, v3*/ |
void |
quadrilateral(vec2 v0, vec2 v1, vec2 v2, vec2 v3) |
{ |
vec2 poly[4]; |
|
poly[0] = v0; |
poly[1] = v1; |
poly[2] = v2; |
poly[3] = v3; |
setcolor3(GREEN); |
polyfill(4, poly); |
setcolor3(BLACK); |
moveto3(poly[3]); |
lineto3(poly[0]); |
lineto3(poly[1]); |
lineto3(poly[2]); |
lineto3(poly[3]); |
} |
|
/* find intersection of lines v0 to v1 and v2 to v3*/ |
static int |
patch(vec2 v0, vec2 v1, vec2 v2, vec2 v3) |
{ |
vec1 denom; |
vec1 mu; |
vec2 v4; |
|
denom = (v1.x-v0.x)*(v3.y-v2.y) - (v1.y-v0.y)*(v3.x-v2.x); |
if(fabs(denom) > epsilon) { |
mu = ((v2.x-v0.x)*(v3.y-v2.y) - (v2.y-v0.y)*(v3.x-v2.x))/denom; |
|
/* if intersection between lines v0 to v1 and v2 to v3, |
* call it v4 and form triangles v0,v2,v4 and v1,v3,v4 |
*/ |
if(mu >= 0 && mu <= 1) { |
v4.x = (1-mu)*v0.x + mu*v1.x; |
v4.y = (1-mu)*v0.y + mu*v1.y; |
triangle(v0, v2, v4); |
triangle(v1, v3, v4); |
return 0; |
} |
} |
|
/* else find intersection of lines v0 to v2 and v1 to v3*/ |
denom = (v2.x-v0.x)*(v3.y-v1.y) - (v2.y-v0.y)*(v3.x-v1.x); |
if(fabs(denom) > epsilon) { |
mu = ((v1.x-v0.x)*(v3.y-v1.y) - (v1.y-v0.y)*(v3.x-v1.x))/denom; |
|
/* if intersection between v0 and v1, call it v4 |
* and form triangles v0,v1,v4 and v2,v3,v4 |
*/ |
if(mu >= 0 && mu <= 1) { |
v4.x = (1-mu)*v0.x + mu*v2.x; |
v4.y = (1-mu)*v0.y + mu*v2.y; |
triangle(v0, v1, v4); |
triangle(v2, v3, v4); |
return 0; |
} |
} |
|
/* there are no proper intersections so form quadrilateral v0,v1,v3,v2*/ |
quadrilateral(v0, v1, v3, v2); |
return 1; |
} |
|
/* plotted function*/ |
static vec1 |
plotfn(vec1 x, vec1 z) |
{ |
vec1 t; |
|
/* y = 4sin(sqrt(x*x+z*z))/sqrt(x*x+z*z) */ |
t = sqrt(x*x + z*z); |
if(fabs(t) < epsilon) |
return 4.0; |
return 4.0 * sin(t) / t; |
} |
|
/* draw mathematical function plotfn*/ |
void |
drawgrid(vec1 xmin, vec1 xmax, int nx, vec1 zmin, vec1 zmax, int nz) |
{ |
int i, j; |
vec1 xi, xstep, yij; |
vec1 zj, zstep; |
vec2 v[2][100]; |
double S[5][5]; |
|
/* scale it down*/ |
scale3(1.0/(xmax-xmin)*2, 1.0/(xmax-xmin)*2, 1.0/(zmax-zmin), S); |
mult3(Q, S, Q); |
|
/* grid from xmin to xmax in nx steps and zmin to xmax in nz steps*/ |
xstep = (xmax-xmin)/nx; |
zstep = (zmax-zmin)/nz; |
xi = xmin; |
zj = zmin; |
|
/* calc grid points on first fixed-z line, fine the y-height |
* and transfrorm the points (xi,yij,zj) into observed |
* position. Observed first set stored in v[0,1..nx] |
*/ |
for(i=0; i<=nx; ++i) { |
yij = plotfn(xi, zj); |
v[0][i].x = Q[1][1]*xi + Q[1][2]*yij + Q[1][3]*zj; |
v[0][i].y = Q[2][1]*xi + Q[2][2]*yij + Q[2][3]*zj; |
xi += xstep; |
} |
|
/* run thru consecutive fixed-z lines (the second set)*/ |
for(j=0; j<nz; ++j) { |
xi = xmin; |
zj += zstep; |
|
/* calc grid points on this second set, find the |
* y-height and transform the points (xi,yij,zj) |
* into observed position. Observed second set |
* stored in v[1,0..nx] |
*/ |
for(i=0; i<=nx; ++i) { |
yij = plotfn(xi, zj); |
v[1][i].x = Q[1][1]*xi + Q[1][2]*yij + Q[1][3]*zj; |
v[1][i].y = Q[2][1]*xi + Q[2][2]*yij + Q[2][3]*zj; |
xi += xstep; |
} |
|
/* run thru the nx patches formed by these two sets*/ |
for(i=0; i<nx; ++i) |
patch(v[0][i], v[0][i+1], v[1][i], v[1][i+1]); |
|
/* copy second set into first set*/ |
for(i=0; i<=nx; ++i) |
v[0][i] = v[1][i]; |
} |
} |
|
/* returns the angle whose tangent is y/x. |
* all anomalies such as x=0 are also checked |
*/ |
vec1 |
angle(vec1 x, vec1 y) |
{ |
if(fabs(x) < epsilon) |
if(fabs(y) < epsilon) |
return 0.0; |
else |
if(y > 0.0) |
return pi*0.5; |
else return pi*1.5; |
else |
if(x < 0.0) |
return atan(y/x) + pi; |
else return atan(y/x); |
} |
|
/* calc 3d scaling matrix A giving scaling vector sx,sy,sz. |
* one unit on the x axis becomes sx units, one unit on y, sy, |
* and one unit on the z axis becomes sz units |
*/ |
void |
scale3(vec1 sx, vec1 sy, vec1 sz, double A[][5]) |
{ |
int i, j; |
|
for(i=1; i<5; ++i) |
for(j=1; j<5; ++j) |
A[i][j] = 0.0; |
A[1][1] = sx; |
A[2][2] = sy; |
A[3][3] = sz; |
A[4][4] = 1.0; |
} |
|
/* calc 3d axes translation matrix A |
* origin translated by vectdor tx,ty,tz |
*/ |
void |
tran3(vec1 tx, vec1 ty, vec1 tz, double A[][5]) |
{ |
int i, j; |
|
for(i=1; i<5; ++i) { |
for(j=1; j<5; ++j) |
A[i][j] = 0.0; |
A[i][i] = 1.0; |
} |
A[1][4] = -tx; |
A[2][4] = -ty; |
A[3][4] = -tz; |
} |
|
/* calc 3d axes rotation matrix A. The axes are |
* rotated anti-clockwise through an angle theta radians |
* about an axis specified by m: m=1 means x, m=2 y, m=3 z axis |
*/ |
void |
rot3(int m, vec1 theta, double A[][5]) |
{ |
int i, j, m1, m2; |
vec1 c, s; |
|
for(i=1; i<5; ++i) |
for(j=1; j<5; ++j) |
A[i][j] = 0.0; |
A[m][m] = 1.0; |
A[4][4] = 1.0; |
m1 = (m % 3) + 1; |
m2 = (m1 % 3) + 1; |
c = cos(theta); |
s = sin(theta); |
A[m1][m1] = c; |
A[m2][m2] = c; |
A[m1][m2] = s; |
A[m2][m1] = s; |
} |
|
/* calc the matrix product C of two matrices A and B*/ |
void |
mult3(double A[][5], double B[][5], double C[][5]) |
{ |
int i, j, k; |
vec1 ab; |
|
for(i=1; i<5; ++i) |
for(j=1; j<5; ++j) { |
ab = 0; |
for(k=1; k<5; ++k) |
ab += A[i][k] * B[k][j]; |
C[i][j] = ab; |
} |
} |
|
/* calc observation matrix Q for given observer*/ |
void |
findQ(void) |
{ |
vec1 alpha, beta, gamma, v, w; |
double E[5][5]; |
double F[5][5]; |
double G[5][5]; |
double H[5][5]; |
double U[5][5]; |
|
/* calc translation matrix F*/ |
tran3(eye.x, eye.y, eye.z, F); |
|
/* calc rotation matrix G*/ |
alpha = angle(-direct.x, -direct.y); |
rot3(3, alpha, G); |
|
/* calc rotation matrix H*/ |
v = sqrt(direct.x*direct.x + direct.y*direct.y); |
beta = angle(-direct.z, v); |
rot3(2, beta, H); |
|
/* calc rotation matrix U*/ |
w = sqrt(v*v + direct.z*direct.z); |
gamma = angle(-direct.x*w, direct.y*direct.z); |
rot3(3, -gamma, U); |
|
/* combine the transformations to find Q*/ |
mult3(G, F, Q); |
mult3(H, Q, E); |
mult3(U, E, Q); |
} |
/winlib/Makefile
0,0 → 1,50
############################################################################## |
# Microwindows template Makefile |
# Copyright (c) 2000 Martin Jolicoeur, Greg Haerr |
############################################################################## |
|
ifndef TOP |
TOP = ../.. |
CONFIG = $(TOP)/config |
endif |
|
include $(CONFIG) |
|
######################## Additional Flags section ############################ |
|
# Directories list for header files |
INCLUDEDIRS += |
# Defines for preprocessor |
DEFINES += |
|
# Compilation flags for C files OTHER than include directories |
CFLAGS += |
# Preprocessor flags OTHER than defines |
CPPFLAGS += |
# Linking flags |
LDFLAGS += |
|
############################# targets section ################################ |
|
ifeq ($(MICROWIN), Y) |
|
# If you want to create a library with the objects files, define the name here |
LIBNAME = libmwinlib.a |
LIBNAMESO = libmwinlib.so |
|
# List of objects to compile |
OBJS = draw3d.o ptinsid.o insetr.o fastfill.o graph3d.o mwuser.o |
|
ifneq ($(ARCH), ELKS) |
OBJS += button.o edit.o listbox.o progbar.o static.o combobox.o caret.o \ |
scrlbar.o medit.o |
endif |
|
endif |
|
######################### Makefile.rules section ############################# |
|
include $(TOP)/Makefile.rules |
|
######################## Tools targets section ############################### |
|
/winlib/progbar.c
0,0 → 1,363
/* |
* Copyright (C) 1999, 2000, Wei Yongming. |
* Portions Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* |
* Progress bar for Microwindows win32 api. |
*/ |
|
/* |
** This library is free software; you can redistribute it and/or |
** modify it under the terms of the GNU Library General Public |
** License as published by the Free Software Foundation; either |
** version 2 of the License, or (at your option) any later version. |
** |
** This library is distributed in the hope that it will be useful, |
** but WITHOUT ANY WARRANTY; without even the implied warranty of |
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
** Library General Public License for more details. |
** |
** You should have received a copy of the GNU Library General Public |
** License along with this library; if not, write to the Free |
** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, |
** MA 02111-1307, USA |
*/ |
|
/* |
** Alternatively, the contents of this file may be used under the terms |
** of the Mozilla Public License (the "MPL License") in which case the |
** provisions of the MPL License are applicable instead of those above. |
*/ |
|
/* Copyright (C) 1999, 2000, Wei Yongming. |
** |
** Note: |
** Originally by Zhao Jianghua. |
** |
** Create date: 1999/8/29 |
** |
** Modify records: |
** |
** Who When Where For What Status |
**----------------------------------------------------------------------------- |
** WEI Yongming 1999/10/27 Tsinghua unsigned int Finished |
** WEI Yongming 1999/10/27 Tsinghua FPException fixing Finished |
** WEI Yongming 2000/02/24 Tsinghua Add MPL License Finished |
** Kevin Tseng 2000/05/24 gv port to microwin ported |
** Greg Haerr 2000/06/15 Utah removed floats Finished |
*/ |
|
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#define MWINCLUDECOLORS |
#include "windows.h" /* windef.h, winuser.h */ |
#include "wintools.h" /* Draw3dBox */ |
#include "device.h" /* GdGetTextSize */ |
|
#define TEST 1 /* =1 for testing*/ |
|
#define WIDTH_PBAR_BORDER 2 |
|
typedef struct _PROGRESSDATA { |
unsigned int nMin; |
unsigned int nMax; |
unsigned int nPos; |
unsigned int nStepInc; |
} PROGRESSDATA, *PPROGRESSDATA; |
|
static LRESULT CALLBACK |
ProgressBarCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); |
|
int WINAPI MwRegisterProgressBarControl(HINSTANCE hInstance) |
{ |
WNDCLASS wc; |
|
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_GLOBALCLASS; |
wc.lpfnWndProc = (WNDPROC)ProgressBarCtrlProc; |
wc.cbClsExtra = 0; |
wc.cbWndExtra = 0; |
wc.hInstance = hInstance; |
wc.hIcon = NULL; |
wc.hCursor = 0; /*LoadCursor(NULL, IDC_ARROW);*/ |
wc.hbrBackground= GetStockObject(LTGRAY_BRUSH); |
wc.lpszMenuName = NULL; |
wc.lpszClassName= "PROGBAR"; |
|
return RegisterClass(&wc); |
} |
|
static void |
FillBox(HDC hdc, int x, int y, int w, int h, COLORREF cr) |
{ |
RECT rc; |
|
if (w <= 0) |
return; |
SetRect(&rc, x, y, x+w, y+h); |
FastFillRect(hdc, &rc, cr); |
} |
|
static int |
GetSysCharWidth(HDC hdc) |
{ |
int cw, ch, cb; |
|
GdGetTextSize(hdc->font->pfont,"X",1, &cw,&ch,&cb,MWTF_ASCII); |
return cw; |
} |
|
static int |
GetSysCharHeight(HDC hdc) |
{ |
int cw, ch, cb; |
|
GdGetTextSize(hdc->font->pfont,"X",1, &cw,&ch,&cb,MWTF_ASCII); |
return ch; |
} |
|
void pbarOnDraw (HWND hwnd, HDC hdc, PROGRESSDATA* pData, BOOL fVertical, |
BOOL fErase) |
{ |
int x, y, w, h; |
unsigned int nAllPart; |
unsigned int nNowPart; |
int whOne, nRem; |
int ix, iy; |
int i; |
int step; |
COLORREF cr; |
RECT rcClient; |
char szText[8]; |
|
if (!hdc || (pData->nMax == pData->nMin)) |
return; |
|
if ((pData->nMax - pData->nMin) > 5) |
step = 5; |
else |
step = 1; |
|
GetClientRect (hwnd, &rcClient); |
SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT)); |
|
x = rcClient.left + WIDTH_PBAR_BORDER; |
y = rcClient.top + WIDTH_PBAR_BORDER; |
w = (rcClient.right - rcClient.left) - (WIDTH_PBAR_BORDER << 1); |
h = (rcClient.bottom - rcClient.top) - (WIDTH_PBAR_BORDER << 1); |
|
nAllPart = (pData->nMax - pData->nMin) / step; |
nNowPart = (pData->nPos - pData->nMin) / step; |
if (fVertical) { |
whOne = h / nAllPart; |
nRem = h % nAllPart; |
} else { |
whOne = w / nAllPart; |
nRem = w % nAllPart; |
} |
|
if (fErase) |
FillBox (hdc, x, y, w, h, GetSysColor(COLOR_BTNSHADOW)); |
|
if(whOne >= 4) { |
if (fVertical) { |
for (i = 0, iy = y + h - 1; i < nNowPart; ++i) { |
#if 0 |
if ((iy - whOne) < y) |
whOne = iy - y; |
#endif |
|
FillBox (hdc, x, iy - whOne, w, whOne - 1, BLUE); |
|
iy -= whOne + 1; |
#if 0 |
if(nRem > 0) { |
iy --; |
nRem --; |
} |
#endif |
} |
} |
else { |
for (i = 0, ix = x + 1; i < nNowPart; ++i) { |
#if 0 |
if ((ix + whOne) > (x + w)) |
whOne = x + w - ix; |
#endif |
FillBox (hdc, ix, y, whOne - 1, h, BLUE); |
ix += whOne + 1; |
#if 0 |
if(nRem > 0) { |
ix ++; |
nRem --; |
} |
#endif |
} |
} |
} |
else { |
/* no vertical support */ |
int d = nNowPart*100/nAllPart; |
int maxw = GetSysCharWidth (hdc) << 2; |
int charh = GetSysCharHeight (hdc); |
|
if (d > 50) |
cr = BLUE; |
else |
cr = GetSysColor(COLOR_BTNSHADOW); |
FillBox (hdc, x + ((w - maxw)>>1), y + ((h - charh) > 1), maxw, |
charh - 1, cr); |
FillBox (hdc, x, y, (int)((long)w*d/100L), h, BLUE); |
SetTextColor (hdc, WHITE); |
SetBkMode (hdc, TRANSPARENT); |
sprintf (szText, "%d%%", d); |
TextOut (hdc, x + ((w - GetSysCharWidth (hdc) * strlen (szText) )>>1), |
y + ((h - GetSysCharHeight(hdc) )>>1), |
szText, strlen(szText)); |
} |
} |
|
static void pbarNormalizeParams (const HWND pCtrl, |
PROGRESSDATA* pData, BOOL fNotify) |
{ |
if (pData->nPos > pData->nMax) { |
if (fNotify) |
SendMessage (GetParent ((HWND)pCtrl), WM_COMMAND, |
(WPARAM)MAKELONG (pCtrl->id, PBN_REACHMAX), (LPARAM)pCtrl); |
pData->nPos = pData->nMax; |
} |
|
if (pData->nPos < pData->nMin) { |
if (fNotify) |
SendMessage (GetParent ((HWND)pCtrl), WM_COMMAND, |
(WPARAM)MAKELONG (pCtrl->id, PBN_REACHMIN), (LPARAM)pCtrl); |
pData->nPos = pData->nMin; |
} |
} |
|
static LRESULT CALLBACK |
ProgressBarCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) |
{ |
HDC hdc; |
HWND pCtrl; |
PROGRESSDATA* pData; |
BOOL fErase; |
RECT rc; |
PAINTSTRUCT ps; |
int pos; |
|
pCtrl = hwnd; |
|
switch (message) |
{ |
case WM_CREATE: |
if (!(pData = malloc (sizeof (PROGRESSDATA)))) { |
fprintf(stderr, "Create progress bar control failure!\n"); |
return -1; |
} |
|
#if TEST |
pData->nMax = 1000; |
pData->nMin = 0; |
pData->nPos = 500; |
pData->nStepInc = 100; |
#else |
pData->nMax = 100; |
pData->nMin = 0; |
pData->nPos = 0; |
pData->nStepInc = 10; |
#endif |
|
pCtrl->userdata = (DWORD)pData; |
break; |
|
case WM_DESTROY: |
free ((void *)(pCtrl->userdata)); |
break; |
|
case WM_GETDLGCODE: |
return DLGC_STATIC; |
|
case WM_NCPAINT: |
if(GetWindowLong(hwnd, GWL_STYLE) & WS_BORDER) { |
GetWindowRect(hwnd, &rc); |
hdc = GetWindowDC(hwnd); |
Draw3dBox(hdc, rc.left, rc.top, rc.right-rc.left, |
rc.bottom-rc.top, GetSysColor(COLOR_BTNSHADOW), |
GetSysColor(COLOR_BTNHIGHLIGHT)); |
} |
break; |
|
case WM_PAINT: |
hdc = BeginPaint (hwnd,&ps); |
pbarOnDraw (hwnd, hdc, (PROGRESSDATA *)pCtrl->userdata, |
hwnd->style & PBS_VERTICAL, TRUE); |
EndPaint (hwnd, &ps); |
break; |
|
case PBM_SETRANGE: |
pData = (PROGRESSDATA *)pCtrl->userdata; |
pData->nMin = min (wParam, lParam); |
pData->nMax = max (wParam, lParam); |
if (pData->nPos > pData->nMax) |
pData->nPos = pData->nMax; |
if (pData->nPos < pData->nMin) |
pData->nPos = pData->nMin; |
break; |
|
case PBM_SETSTEP: |
pData = (PROGRESSDATA *)pCtrl->userdata; |
pData->nStepInc = wParam; |
break; |
|
case PBM_SETPOS: |
pData = (PROGRESSDATA *)pCtrl->userdata; |
|
if (pData->nPos == wParam) |
break; |
|
fErase = (wParam < pData->nPos); |
pData->nPos = wParam; |
pbarNormalizeParams (pCtrl, pData, hwnd->style & PBS_NOTIFY); |
InvalidateRect(hwnd, NULL, fErase); |
break; |
|
case PBM_DELTAPOS: |
pData = (PROGRESSDATA *)pCtrl->userdata; |
|
if (wParam == 0) |
break; |
|
fErase = (wParam < 0); |
pData->nPos += wParam; |
pbarNormalizeParams (pCtrl, pData, hwnd->style & PBS_NOTIFY); |
InvalidateRect(hwnd, NULL, fErase); |
break; |
|
case PBM_STEPIT: |
pData = (PROGRESSDATA *)pCtrl->userdata; |
|
if (pData->nStepInc == 0) |
break; |
|
fErase = (pData->nStepInc < 0); |
pData->nPos += pData->nStepInc; |
pbarNormalizeParams (pCtrl, pData, hwnd->style & PBS_NOTIFY); |
InvalidateRect(hwnd, NULL, fErase); |
break; |
|
#if TEST |
case WM_LBUTTONDOWN: |
case WM_LBUTTONDBLCLK: |
pData = (PROGRESSDATA *)pCtrl->userdata; |
pos = pData->nPos; |
pos += pData->nStepInc; |
if (pos > pData->nMax) |
pos = pData->nMin; |
SendMessage(hwnd, PBM_SETPOS, pos, 0L); |
break; |
#endif |
default: |
return DefWindowProc (hwnd, message, wParam, lParam); |
} |
return 0; |
} |
/windefw.c
0,0 → 1,402
/* |
* Copyright (c) 1999 Greg Haerr <greg@censoft.com> |
* |
* DefWindowProc implementation for Micro-Windows |
* This file should ideally only include windows.h, and be built |
* on top of regular win32 api calls. For speed, however, |
* certain knowledge of the internal hwnd is known... |
*/ |
#include "windows.h" |
#include "wintern.h" |
#include "device.h" |
#include "wintools.h" /* Draw3dBox, etc*/ |
#include <string.h> |
|
/* desktop wallpaper image*/ |
static PMWIMAGEHDR pImageWallpaper = NULL; |
|
/* local routines*/ |
static void GetCloseBoxRect(HWND hwnd, LPRECT lprc); |
static void DrawXORFrame(HWND hwnd,int x, int y, BOOL bDrawCurrent); |
static RECT lastrc; |
|
BOOL |
MwSetDesktopWallpaper(PMWIMAGEHDR pImage) |
{ |
pImageWallpaper = pImage; |
InvalidateRect(rootwp, NULL, TRUE); |
return TRUE; |
} |
|
/* needed only for XORMOVE repaint algorithm*/ |
static void |
DrawXORFrame(HWND hwnd,int x, int y, BOOL bDrawCurrent) |
{ |
HDC hdc; |
RECT rc; |
|
hdc = GetDCEx(NULL, NULL, DCX_WINDOW|DCX_EXCLUDEUPDATE); |
SelectObject(hdc, GetStockObject(NULL_BRUSH)); |
SelectObject(hdc, GetStockObject(WHITE_PEN)); |
GdSetMode(MWMODE_XOR); |
if(!IsRectEmpty(&lastrc)) |
Rectangle(hdc, lastrc.left, lastrc.top, lastrc.right, |
lastrc.bottom); |
GetWindowRect(hwnd, &rc); |
SetRect(&lastrc, rc.left+x, rc.top+y, rc.right+x, rc.bottom+y); |
if(bDrawCurrent) |
Rectangle(hdc, lastrc.left, lastrc.top, lastrc.right, |
lastrc.bottom); |
ReleaseDC(NULL, hdc); |
GdSetMode(MWMODE_COPY); |
} |
|
/* |
* This procedure implements the messages passed by the window |
* manager for default processing on behalf of the window. |
*/ |
LRESULT WINAPI |
DefWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) |
{ |
HDC hdc; |
RECT rc; |
DWORD dwStyle; |
HBRUSH hbr; |
HPEN hpen, holdpen; |
PAINTSTRUCT ps; |
POINT curpt; |
int x, y; |
HWND wp; |
HWND oldActive; |
COLORREF crCaption; |
LPNCCALCSIZE_PARAMS lpnc; |
CHAR szTitle[64]; |
static POINT startpt; |
|
switch(msg) { |
case WM_NCCALCSIZE: |
/* calculate client rect from passed window rect in rgrc[0]*/ |
lpnc = (LPNCCALCSIZE_PARAMS)lParam; |
dwStyle = GetWindowLong(hwnd, GWL_STYLE); |
if(dwStyle & WS_BORDER) { |
if((dwStyle & WS_CAPTION) == WS_CAPTION) { |
InflateRect(&lpnc->rgrc[0], |
-mwSYSMETRICS_CXFRAME, |
-mwSYSMETRICS_CYFRAME); |
lpnc->rgrc[0].top += mwSYSMETRICS_CYCAPTION + 1; |
} else |
InflateRect(&lpnc->rgrc[0], -1, -1); |
} |
break; |
|
case WM_NCPAINT: |
/* repaint all non-client area*/ |
dwStyle = GetWindowLong(hwnd, GWL_STYLE); |
|
if(dwStyle & WS_BORDER) { |
hdc = GetWindowDC(hwnd); |
GetWindowRect(hwnd, &rc); |
|
if((dwStyle & WS_CAPTION) == WS_CAPTION) { |
/* draw 2-line 3d border around window*/ |
Draw3dOutset(hdc, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top); |
InflateRect(&rc, -2, -2); |
|
/* draw 1-line inset inside border*/ |
hpen = CreatePen(PS_SOLID, 1, |
GetSysColor(COLOR_BTNFACE)); |
holdpen = SelectObject(hdc, hpen); |
SelectObject(hdc, GetStockObject(NULL_BRUSH)); |
Rectangle(hdc, rc.left, rc.top, rc.right, |
rc.bottom); |
InflateRect(&rc, -1, -1); |
|
/* fill caption*/ |
rc.bottom = rc.top + mwSYSMETRICS_CYCAPTION; |
crCaption = GetActiveWindow()==hwnd? |
GetSysColor(COLOR_ACTIVECAPTION): |
GetSysColor(COLOR_INACTIVECAPTION); |
hbr = CreateSolidBrush(crCaption); |
FillRect(hdc, &rc, hbr); |
DeleteObject(hbr); |
|
/* draw 1 line under caption*/ |
MoveToEx(hdc, rc.left, rc.bottom, NULL); |
LineTo(hdc, rc.right, rc.bottom); |
DeleteObject(SelectObject(hdc, holdpen)); |
|
/* draw caption text*/ |
if(GetWindowText(hwnd, szTitle, |
sizeof(szTitle))) { |
SetBkMode(hdc, TRANSPARENT); |
/* set background color even though |
* transparent in case GdArea is used |
* to draw text which compares |
* gr_foreground != gr_background |
* when transparent... |
*/ |
SetBkColor(hdc, crCaption); |
SetTextColor(hdc, |
GetActiveWindow()==hwnd? |
GetSysColor(COLOR_CAPTIONTEXT): |
GetSysColor(COLOR_INACTIVECAPTIONTEXT)); |
SelectObject(hdc, |
GetStockObject(DEFAULT_GUI_FONT)); |
GetWindowRect(hwnd, &rc); |
TextOut(hdc, rc.left+4, rc.top+2, |
szTitle, strlen(szTitle)); |
} |
|
/* draw close box*/ |
GetCloseBoxRect(hwnd, &rc); |
/*DrawDIB(hdc, rc.right-XSIZE_CLOSEBOX-3, |
rc.top+3, &image_close4);*/ |
Draw3dBox(hdc, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_BTNHIGHLIGHT), |
GetSysColor(COLOR_WINDOWFRAME)); |
InflateRect(&rc, -1, -1); |
hbr = CreateSolidBrush( |
GetSysColor(COLOR_BTNFACE)); |
FillRect(hdc, &rc, hbr); |
DeleteObject(hbr); |
|
InflateRect(&rc, -1, -1); |
MoveToEx(hdc, rc.left, rc.top, NULL); |
LineTo(hdc, rc.right-1, rc.bottom-1); |
MoveToEx(hdc, rc.left, rc.bottom-1, NULL); |
LineTo(hdc, rc.right-1, rc.top); |
} else { |
SelectObject(hdc, GetStockObject(NULL_BRUSH)); |
Rectangle(hdc, rc.left, rc.top, rc.right, |
rc.bottom); |
} |
ReleaseDC(hwnd, hdc); |
} |
break; |
|
case WM_NCHITTEST: |
/* if system is dragging a window, always return caption*/ |
if(dragwp) |
return HTCAPTION; |
|
/* Determine what part of the window the mouse is over*/ |
POINTSTOPOINT(curpt, lParam); |
|
if(PtInRect(&hwnd->clirect, curpt)) |
return HTCLIENT; |
|
if(PtInRect(&hwnd->vscroll.rc, curpt)) |
return HTVSCROLL; |
if(PtInRect(&hwnd->hscroll.rc, curpt)) |
return HTHSCROLL; |
|
dwStyle = GetWindowLong(hwnd, GWL_STYLE); |
if((dwStyle & WS_CAPTION) == WS_CAPTION) { |
GetCloseBoxRect(hwnd, &rc); |
if(PtInRect(&rc, curpt)) |
return HTCLOSE; |
|
GetWindowRect(hwnd, &rc); |
InflateRect(&rc, -2, -2); |
rc.bottom = rc.top + mwSYSMETRICS_CYCAPTION; |
if(PtInRect(&rc, curpt)) |
return HTCAPTION; |
|
GetWindowRect(hwnd, &rc); |
InflateRect(&rc, -2, -2); |
rc.top += mwSYSMETRICS_CYCAPTION; |
if(PtInRect(&rc, curpt)) |
return HTCLIENT; |
|
return HTBORDER; |
} |
return HTNOWHERE; |
|
case WM_NCLBUTTONDOWN: |
/* Handle default actions for mouse down on window*/ |
if(wParam == HTCLOSE) { |
SendMessage(hwnd, WM_CLOSE, 0, 0L); |
break; |
} |
|
/* set focus on mouse down, repaint if necessary*/ |
oldActive = GetActiveWindow(); |
if(wParam == HTCLIENT || wParam == HTVSCROLL || |
wParam == HTHSCROLL) |
/* activate and raise window if in client area*/ |
/* kaffe port requires this commented out*/ |
SetForegroundWindow(hwnd); |
else { |
/* otherwise just change focus window, same z order*/ |
/* this will activate it's top level parent*/ |
SetFocus(hwnd); |
} |
/* repaint captions now because of activation change*/ |
UpdateWindow(oldActive); |
UpdateWindow(hwnd); |
|
if(wParam == HTVSCROLL || wParam == HTHSCROLL) { |
MwHandleNCMessageScrollbar(hwnd, msg, wParam, lParam); |
break; |
} |
|
/* start window drag if in caption area*/ |
if(wParam == HTCAPTION && hwnd != rootwp) { |
POINTSTOPOINT(startpt, lParam); |
if(!(GetWindowLong(hwnd, GWL_STYLE) & WS_MAXIMIZE)) |
dragwp = hwnd; |
SetRectEmpty(&lastrc); /* XORMOVE only*/ |
} |
break; |
|
case WM_NCMOUSEMOVE: |
if(wParam == HTVSCROLL || wParam == HTHSCROLL) { |
MwHandleNCMessageScrollbar(hwnd, msg, wParam, lParam); |
break; |
} |
|
/* drag window with mousemove after mousedown*/ |
if(dragwp == hwnd) { |
POINTSTOPOINT(curpt, lParam); |
x = curpt.x - startpt.x; |
y = curpt.y - startpt.y; |
|
if(mwERASEMOVE) { |
GetWindowRect(hwnd, &rc); |
MoveWindow(hwnd, rc.left+x, rc.top+y, |
rc.right-rc.left, rc.bottom-rc.top, |
TRUE); |
startpt = curpt; |
} else |
DrawXORFrame(hwnd, x, y, TRUE); |
} |
break; |
|
case WM_NCLBUTTONUP: |
/* stop window drag*/ |
if(dragwp == hwnd) { |
dragwp = NULL; |
|
if(mwERASEMOVE) { |
/* |
* User stopped moving window, repaint |
* windows previously queued for painting. |
*/ |
for(wp=listwp; wp; wp=wp->next) |
if(wp->gotPaintMsg == PAINT_DELAYPAINT) |
wp->gotPaintMsg = PAINT_NEEDSPAINT; |
} else { |
POINTSTOPOINT(curpt, lParam); |
x = curpt.x - startpt.x; |
y = curpt.y - startpt.y; |
DrawXORFrame(hwnd, x, y, FALSE); |
GetWindowRect(hwnd, &rc); |
MoveWindow(hwnd, rc.left+x, rc.top+y, |
rc.right-rc.left, rc.bottom-rc.top, TRUE); |
} |
} |
|
if(wParam == HTVSCROLL || wParam == HTHSCROLL) { |
MwHandleNCMessageScrollbar(hwnd, msg, wParam, lParam); |
break; |
} |
break; |
|
case WM_NCLBUTTONDBLCLK: |
if(wParam == HTVSCROLL || wParam == HTHSCROLL) { |
MwHandleNCMessageScrollbar(hwnd, msg, wParam, lParam); |
break; |
} |
|
/* maximize/restore processing*/ |
if(wParam != HTCAPTION) |
break; |
|
if((hwnd->style & WS_CAPTION) == WS_CAPTION) { |
if(hwnd->style & WS_MAXIMIZE) { |
rc = hwnd->restorerc; |
MoveWindow(hwnd, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, |
TRUE); |
hwnd->style &= ~WS_MAXIMIZE; |
} else { |
hwnd->restorerc = hwnd->winrect; |
GetWindowRect(rootwp, &rc); |
MoveWindow(hwnd, -mwSYSMETRICS_CXFRAME, |
-mwSYSMETRICS_CYFRAME, |
rc.right+2*mwSYSMETRICS_CXFRAME, |
rc.bottom+2*mwSYSMETRICS_CYFRAME, TRUE); |
hwnd->style |= WS_MAXIMIZE; |
} |
} |
break; |
|
case WM_GETTEXTLENGTH: |
/* Get window text length. This routine requires |
* knowledge of the internal window structure |
*/ |
return strlen(hwnd->szTitle); |
|
case WM_GETTEXT: |
/* Get window text. This routine requires |
* knowledge of the internal window structure |
*/ |
return strzcpy((LPSTR)lParam, hwnd->szTitle, wParam); |
|
case WM_SETTEXT: |
/* Set window text. This routine requires |
* knowledge of the internal window structure. |
* Note that setting text doesn't invalidate the window. |
*/ |
strzcpy(hwnd->szTitle, (LPSTR)lParam, sizeof(hwnd->szTitle)); |
return TRUE; |
|
case WM_CLOSE: |
DestroyWindow(hwnd); |
if(hwnd == rootwp) |
PostQuitMessage(0); |
break; |
|
case WM_ERASEBKGND: |
/* erase background with class background brush*/ |
hbr = (HBRUSH)GetClassLong(hwnd, GCL_HBRBACKGROUND); |
if(!hbr) |
return 0; |
/* don't exclude update region*/ |
hdc = GetDCEx(hwnd, NULL, DCX_DEFAULTCLIP); |
FillRect(hdc, NULL, hbr); |
ReleaseDC(hwnd, hdc); |
return 1; |
|
case WM_PAINT: |
/* required to send erasebkgnd for desktop window*/ |
hdc = BeginPaint(hwnd, &ps); |
|
/* draw desktop wallpaper*/ |
if(hwnd == rootwp && pImageWallpaper) { |
GetWindowRect(hwnd, &rc); |
DrawDIB(hdc, |
(rc.right-rc.left-pImageWallpaper->width)/2, |
(rc.bottom-rc.top-pImageWallpaper->height)/2, |
pImageWallpaper); |
} |
|
EndPaint(hwnd, &ps); |
break; |
} |
return 0; |
} |
|
static void |
GetCloseBoxRect(HWND hwnd, LPRECT lprc) |
{ |
#define XSIZE_CLOSEBOX 9 |
#define YSIZE_CLOSEBOX 9 |
GetWindowRect(hwnd, lprc); |
lprc->left = lprc->right - XSIZE_CLOSEBOX - 5; |
lprc->top = lprc->top + 5; |
lprc->right = lprc->left + XSIZE_CLOSEBOX; |
lprc->bottom = lprc->top + YSIZE_CLOSEBOX; |
} |
/winrgn.c
0,0 → 1,566
/* |
* Portions Copyright (c) 1999, 2000 Greg Haerr <greg@censoft.com> |
* Somewhat less shamelessly ripped from the Wine distribution |
* |
* Win32 API Region Management Routines. |
* Win32 API Complex Rectangle Routines. |
* |
* GDI region objects. Shamelessly ripped out from the X11 distribution |
* Thanks for the nice licence. |
* |
* Copyright 1993, 1994, 1995 Alexandre Julliard |
* Modifications and additions: Copyright 1998 Huw Davies |
*/ |
#include "windows.h" |
#include "device.h" |
#include <stdlib.h> |
#include <string.h> |
|
/* later, error checking can be built into this get*/ |
#define GDI_GetObjPtr(hrgn,type) (hrgn) |
|
/* local functions*/ |
static HRGN REGION_CreateRegion(void); |
/*BOOL REGION_UnionRectWithRgn( HRGN hrgn, const RECT *lpRect );*/ |
/*BOOL REGION_FrameRgn( HRGN hDest, HRGN hSrc, INT x, INT y );*/ |
|
#define EMPTY_REGION(pReg) { \ |
(pReg)->numRects = 0; \ |
(pReg)->extents.left = (pReg)->extents.top = 0; \ |
(pReg)->extents.right = (pReg)->extents.bottom = 0; \ |
(pReg)->type = NULLREGION; \ |
} |
|
/* |
* Create a new empty region. |
*/ |
static HRGN |
REGION_CreateRegion(void) |
{ |
MWRGNOBJ *obj; |
|
obj = GdItemNew(MWRGNOBJ); |
if(!obj) |
return NULL; |
obj->hdr.type = OBJ_REGION; |
obj->hdr.stockobj = FALSE; |
if(!(obj->rgn = GdAllocRegion())) { |
GdItemFree(obj); |
return NULL; |
} |
return (HRGN)obj; |
} |
|
|
INT WINAPI |
OffsetRgn( HRGN hrgn, INT x, INT y ) |
{ |
MWRGNOBJ * obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION ); |
|
if (obj) |
{ |
GdOffsetRegion(obj->rgn, x, y); |
return obj->rgn->type; |
} |
return ERRORREGION; |
} |
|
|
INT WINAPI |
GetRgnBox( HRGN hrgn, LPRECT rect ) |
{ |
MWRGNOBJ * obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION ); |
if (obj) |
return GdGetRegionBox(obj->rgn, rect); |
return ERRORREGION; |
} |
|
|
HRGN WINAPI |
CreateRectRgn(INT left, INT top, INT right, INT bottom) |
{ |
HRGN hrgn; |
|
if (!(hrgn = REGION_CreateRegion())) |
return 0; |
/*TRACE(region, "\n");*/ |
SetRectRgn(hrgn, left, top, right, bottom); |
return hrgn; |
} |
|
|
HRGN WINAPI |
CreateRectRgnIndirect( const RECT* rect ) |
{ |
return CreateRectRgn( rect->left, rect->top, rect->right, rect->bottom ); |
} |
|
|
/* |
* Allows either or both left and top to be greater than right or bottom. |
*/ |
VOID WINAPI |
SetRectRgn( HRGN hrgn, INT left, INT top, INT right, INT bottom ) |
{ |
MWRGNOBJ * obj; |
MWCLIPREGION *rgn; |
|
/*TRACE(region, " %04x %d,%d-%d,%d\n", hrgn, left, top, right, bottom );*/ |
|
if (!(obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION ))) return; |
|
if (left > right) { INT tmp = left; left = right; right = tmp; } |
if (top > bottom) { INT tmp = top; top = bottom; bottom = tmp; } |
|
rgn = obj->rgn; |
GdSetRectRegion(rgn, left, top, right, bottom); |
} |
|
|
HRGN WINAPI |
CreateRoundRectRgn( INT left, INT top, INT right, INT bottom, |
INT ellipse_width, INT ellipse_height ) |
{ |
MWRGNOBJ * obj; |
HRGN hrgn; |
int asq, bsq, d, xd, yd; |
RECT rect; |
|
/* Check if we can do a normal rectangle instead */ |
if (ellipse_width == 0 || ellipse_height == 0) |
return CreateRectRgn( left, top, right, bottom ); |
|
/* Make the dimensions sensible */ |
if (left > right) { INT tmp = left; left = right; right = tmp; } |
if (top > bottom) { INT tmp = top; top = bottom; bottom = tmp; } |
|
ellipse_width = abs(ellipse_width); |
ellipse_height = abs(ellipse_height); |
|
/* Create region */ |
|
if (!(hrgn = REGION_CreateRegion())) |
return 0; |
obj = (MWRGNOBJ *)hrgn; |
/*TRACE(region,"(%d,%d-%d,%d %dx%d): ret=%04x\n", |
left, top, right, bottom, ellipse_width, ellipse_height, hrgn);*/ |
|
/* Check parameters */ |
|
if (ellipse_width > right-left) ellipse_width = right-left; |
if (ellipse_height > bottom-top) ellipse_height = bottom-top; |
|
/* Ellipse algorithm, based on an article by K. Porter */ |
/* in DDJ Graphics Programming Column, 8/89 */ |
|
asq = ellipse_width * ellipse_width / 4; /* a^2 */ |
bsq = ellipse_height * ellipse_height / 4; /* b^2 */ |
if (asq == 0) asq = 1; |
if (bsq == 0) bsq = 1; |
d = bsq - asq * ellipse_height / 2 + asq / 4; /* b^2 - a^2b + a^2/4 */ |
xd = 0; |
yd = asq * ellipse_height; /* 2a^2b */ |
|
rect.left = left + ellipse_width / 2; |
rect.right = right - ellipse_width / 2; |
|
/* Loop to draw first half of quadrant */ |
|
while (xd < yd) |
{ |
if (d > 0) /* if nearest pixel is toward the center */ |
{ |
/* move toward center */ |
rect.top = top++; |
rect.bottom = rect.top + 1; |
GdUnionRectWithRegion( &rect, obj->rgn ); |
rect.top = --bottom; |
rect.bottom = rect.top + 1; |
GdUnionRectWithRegion( &rect, obj->rgn ); |
yd -= 2*asq; |
d -= yd; |
} |
rect.left--; /* next horiz point */ |
rect.right++; |
xd += 2*bsq; |
d += bsq + xd; |
} |
|
/* Loop to draw second half of quadrant */ |
|
d += (3 * (asq-bsq) / 2 - (xd+yd)) / 2; |
while (yd >= 0) |
{ |
/* next vertical point */ |
rect.top = top++; |
rect.bottom = rect.top + 1; |
GdUnionRectWithRegion( &rect, obj->rgn ); |
rect.top = --bottom; |
rect.bottom = rect.top + 1; |
GdUnionRectWithRegion( &rect, obj->rgn ); |
if (d < 0) /* if nearest pixel is outside ellipse */ |
{ |
rect.left--; /* move away from center */ |
rect.right++; |
xd += 2*bsq; |
d += xd; |
} |
yd -= 2*asq; |
d += asq - yd; |
} |
|
/* Add the inside rectangle */ |
|
if (top <= bottom) |
{ |
rect.top = top; |
rect.bottom = bottom; |
GdUnionRectWithRegion( &rect, obj->rgn ); |
} |
obj->rgn->type = SIMPLEREGION; /* FIXME? */ |
return hrgn; |
} |
|
|
HRGN WINAPI |
CreateEllipticRgn( INT left, INT top, INT right, INT bottom ) |
{ |
return CreateRoundRectRgn(left, top, right, bottom, right-left, bottom-top); |
} |
|
|
HRGN WINAPI |
CreateEllipticRgnIndirect( const RECT *rect ) |
{ |
return CreateRoundRectRgn( rect->left, rect->top, rect->right, |
rect->bottom, rect->right - rect->left, |
rect->bottom - rect->top ); |
} |
|
HRGN WINAPI |
CreatePolygonRgn(const POINT *points, INT count, INT mode) |
{ |
#if POLYREGIONS |
HRGN hrgn; |
MWRGNOBJ * obj; |
MWCLIPREGION * rgn; |
|
if (!(hrgn = REGION_CreateRegion())) |
return NULL; |
obj = (MWRGNOBJ *)GDI_GetObjPtr(hrgn, OBJ_REGION); |
if (!obj) |
return NULL; |
|
rgn = GdAllocPolygonRegion((POINT *)points, count, mode); |
if (!rgn) |
return hrgn; |
GdDestroyRegion(obj->rgn); |
obj->rgn = rgn; |
return hrgn; |
#endif |
} |
|
DWORD WINAPI |
GetRegionData(HRGN hrgn, DWORD count, LPRGNDATA rgndata) |
{ |
DWORD size; |
MWRGNOBJ *obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION ); |
MWCLIPREGION *rgn; |
|
/*TRACE(region," %04x count = %ld, rgndata = %p\n", hrgn, count, rgndata);*/ |
|
if(!obj) return 0; |
|
rgn = obj->rgn; |
size = rgn->numRects * sizeof(RECT); |
if(count < (size + sizeof(RGNDATAHEADER)) || rgndata == NULL) |
return size + sizeof(RGNDATAHEADER); |
|
rgndata->rdh.dwSize = sizeof(RGNDATAHEADER); |
rgndata->rdh.iType = RDH_RECTANGLES; |
rgndata->rdh.nCount = rgn->numRects; |
rgndata->rdh.nRgnSize = size; |
rgndata->rdh.rcBound.left = rgn->extents.left; |
rgndata->rdh.rcBound.top = rgn->extents.top; |
rgndata->rdh.rcBound.right = rgn->extents.right; |
rgndata->rdh.rcBound.bottom = rgn->extents.bottom; |
|
memcpy( rgndata->Buffer, rgn->rects, size ); |
|
return 1; |
} |
|
|
#if 0 |
HRGN WINAPI |
ExtCreateRegion(const XFORM* lpXform, DWORD dwCount, const RGNDATA* rgndata) |
{ |
HRGN hrgn = CreateRectRgn(0, 0, 0, 0); |
MWRGNOBJ *obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION ); |
RECT *pCurRect, *pEndRect; |
|
/*TRACE(region, " %p %ld %p. Returning %04x\n", |
lpXform, dwCount, rgndata, hrgn);*/ |
if(!hrgn) |
{ |
WARN(region, "Can't create a region!\n"); |
return 0; |
} |
if(lpXform) |
WARN(region, "Xform not implemented - ignoring\n"); |
|
if(rgndata->rdh.iType != RDH_RECTANGLES) |
{ |
WARN(region, "Type not RDH_RECTANGLES\n"); |
DeleteObject( hrgn ); |
return 0; |
} |
|
pEndRect = (RECT *)rgndata->Buffer + rgndata->rdh.nCount; |
for(pCurRect = (RECT *)rgndata->Buffer; pCurRect < pEndRect; pCurRect++) |
GdUnionRectWithRegion( pCurRect, obj->rgn ); |
|
return hrgn; |
} |
#endif |
|
|
BOOL WINAPI |
PtInRegion( HRGN hrgn, INT x, INT y ) |
{ |
MWRGNOBJ * obj; |
|
obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION ); |
if(!obj) |
return FALSE; |
return GdPtInRegion(obj->rgn, x, y); |
} |
|
/* |
* Returns TRUE if rect is at least partly inside hrgn |
*/ |
BOOL WINAPI |
RectInRegion( HRGN hrgn, const RECT *rect ) |
{ |
MWRGNOBJ * obj; |
|
obj = (MWRGNOBJ *) GDI_GetObjPtr( hrgn, OBJ_REGION ); |
if(!obj) |
return FALSE; |
return (GdRectInRegion(obj->rgn, rect) == MWRECT_OUT? FALSE: TRUE); |
} |
|
BOOL WINAPI |
EqualRgn( HRGN hrgn1, HRGN hrgn2 ) |
{ |
MWRGNOBJ *obj1, *obj2; |
|
if ((obj1 = (MWRGNOBJ *) GDI_GetObjPtr( hrgn1, OBJ_REGION ))) |
if ((obj2 = (MWRGNOBJ *) GDI_GetObjPtr( hrgn2, OBJ_REGION ))) |
return GdEqualRegion(obj1->rgn, obj2->rgn); |
return FALSE; |
} |
|
#if 0 |
/* |
* REGION_UnionRectWithRgn |
* Adds a rectangle to a HRGN |
* A helper used by scroll.c |
*/ |
BOOL |
REGION_UnionRectWithRgn( HRGN hrgn, const RECT *lpRect ) |
{ |
MWRGNOBJ *obj = (MWRGNOBJ *)hrgn; |
|
if(!obj) return FALSE; |
GdUnionRectWithRegion( lpRect, obj->rgn ); |
return TRUE; |
} |
|
/* |
* REGION_FrameRgn |
* Create a region that is a frame around another region. |
* Expand all rectangles by +/- x and y, then subtract original region. |
*/ |
BOOL |
REGION_FrameRgn( HRGN hDest, HRGN hSrc, INT x, INT y ) |
{ |
BOOL bRet; |
MWRGNOBJ *srcObj = (MWRGNOBJ*) GDI_GetObjPtr( hSrc, OBJ_REGION ); |
|
if (srcObj->rgn->numRects != 0) |
{ |
MWRGNOBJ* destObj = (MWRGNOBJ*) GDI_GetObjPtr( hDest, OBJ_REGION ); |
RECT *pRect, *pEndRect; |
RECT tempRect; |
|
EMPTY_REGION( destObj->rgn ); |
|
pEndRect = srcObj->rgn->rects + srcObj->rgn->numRects; |
for(pRect = srcObj->rgn->rects; pRect < pEndRect; pRect++) |
{ |
tempRect.left = pRect->left - x; |
tempRect.top = pRect->top - y; |
tempRect.right = pRect->right + x; |
tempRect.bottom = pRect->bottom + y; |
GdUnionRectWithRegion( &tempRect, destObj->rgn ); |
} |
GdSubtractRegion( destObj->rgn, destObj->rgn, srcObj->rgn ); |
bRet = TRUE; |
} |
else |
bRet = FALSE; |
return bRet; |
} |
#endif |
|
/* |
* Note: The behavior is correct even if src and dest regions are the same. |
*/ |
INT WINAPI |
CombineRgn(HRGN hDest, HRGN hSrc1, HRGN hSrc2, INT mode) |
{ |
MWRGNOBJ *destObj = (MWRGNOBJ *) GDI_GetObjPtr( hDest, OBJ_REGION); |
INT result = ERRORREGION; |
|
/*TRACE(region, " %04x,%04x -> %04x mode=%x\n", hSrc1, hSrc2, hDest,mode);*/ |
|
if (destObj) |
{ |
MWRGNOBJ *src1Obj = (MWRGNOBJ *) GDI_GetObjPtr( hSrc1, OBJ_REGION); |
|
if (src1Obj) |
{ |
/*TRACE(region, "dump:\n"); |
if(TRACE_ON(region)) |
REGION_DumpRegion(src1Obj->rgn);*/ |
if (mode == RGN_COPY) |
{ |
GdCopyRegion( destObj->rgn, src1Obj->rgn ); |
result = destObj->rgn->type; |
} |
else |
{ |
MWRGNOBJ *src2Obj = (MWRGNOBJ *) GDI_GetObjPtr( hSrc2, OBJ_REGION); |
|
if (src2Obj) |
{ |
/*TRACE(region, "dump:\n"); |
if(TRACE_ON(region)) |
REGION_DumpRegion(src2Obj->rgn);*/ |
switch (mode) |
{ |
case RGN_AND: |
GdIntersectRegion( destObj->rgn, src1Obj->rgn, src2Obj->rgn); |
break; |
case RGN_OR: |
GdUnionRegion( destObj->rgn, src1Obj->rgn, src2Obj->rgn ); |
break; |
case RGN_XOR: |
GdXorRegion( destObj->rgn, src1Obj->rgn, src2Obj->rgn ); |
break; |
case RGN_DIFF: |
GdSubtractRegion( destObj->rgn, src1Obj->rgn, src2Obj->rgn ); |
break; |
} |
result = destObj->rgn->type; |
} |
} |
} |
/*TRACE(region, "dump:\n"); |
if(TRACE_ON(region)) |
REGION_DumpRegion(destObj->rgn);*/ |
} |
return result; |
} |
|
/* |
* Rectangle-related functions |
* |
* Copyright 1993, 1996 Alexandre Julliard |
* |
*/ |
BOOL WINAPI |
IntersectRect( LPRECT dest, const RECT *src1, const RECT *src2 ) |
{ |
if (IsRectEmpty(src1) || IsRectEmpty(src2) || |
(src1->left >= src2->right) || (src2->left >= src1->right) || |
(src1->top >= src2->bottom) || (src2->top >= src1->bottom)) |
{ |
SetRectEmpty( dest ); |
return FALSE; |
} |
dest->left = MWMAX( src1->left, src2->left ); |
dest->right = MWMIN( src1->right, src2->right ); |
dest->top = MWMAX( src1->top, src2->top ); |
dest->bottom = MWMIN( src1->bottom, src2->bottom ); |
return TRUE; |
} |
|
|
BOOL WINAPI |
UnionRect( LPRECT dest, const RECT *src1, const RECT *src2 ) |
{ |
if (IsRectEmpty(src1)) |
{ |
if (IsRectEmpty(src2)) |
{ |
SetRectEmpty( dest ); |
return FALSE; |
} |
else *dest = *src2; |
} |
else |
{ |
if (IsRectEmpty(src2)) *dest = *src1; |
else |
{ |
dest->left = MWMIN( src1->left, src2->left ); |
dest->right = MWMAX( src1->right, src2->right ); |
dest->top = MWMIN( src1->top, src2->top ); |
dest->bottom = MWMAX( src1->bottom, src2->bottom ); |
} |
} |
return TRUE; |
} |
|
|
BOOL WINAPI |
EqualRect( const RECT* rect1, const RECT* rect2 ) |
{ |
return ((rect1->left == rect2->left) && (rect1->right == rect2->right) && |
(rect1->top == rect2->top) && (rect1->bottom == rect2->bottom)); |
} |
|
|
BOOL WINAPI |
SubtractRect( LPRECT dest, const RECT *src1, const RECT *src2 ) |
{ |
RECT tmp; |
|
if (IsRectEmpty( src1 )) |
{ |
SetRectEmpty( dest ); |
return FALSE; |
} |
*dest = *src1; |
if (IntersectRect( &tmp, src1, src2 )) |
{ |
if (EqualRect( &tmp, dest )) |
{ |
SetRectEmpty( dest ); |
return FALSE; |
} |
if ((tmp.top == dest->top) && (tmp.bottom == dest->bottom)) |
{ |
if (tmp.left == dest->left) dest->left = tmp.right; |
else if (tmp.right == dest->right) dest->right = tmp.left; |
} |
else if ((tmp.left == dest->left) && (tmp.right == dest->right)) |
{ |
if (tmp.top == dest->top) dest->top = tmp.bottom; |
else if (tmp.bottom == dest->bottom) dest->bottom = tmp.top; |
} |
} |
return TRUE; |
} |
/winsbar.c
0,0 → 1,921
/* |
* Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* Portions Copyright (c) 1999, 2000, Wei Yongming. |
* jmt: scrollbar thumb ported |
* |
* Microwindows win32 NonClient Scrollbars |
*/ |
#define MWINCLUDECOLORS |
#include "windows.h" |
#include "wintern.h" |
#include "wintools.h" |
#include <stdlib.h> |
#include <string.h> |
#include <stdio.h> |
|
/* scrollbar status/positions*/ |
#define SBS_UNKNOWN 0x0000 |
#define SBS_LEFTARROW 0x0001 |
#define SBS_RIGHTARROW 0x0002 |
#define SBS_LEFTSPACE 0x0004 |
#define SBS_RIGHTSPACE 0x0008 |
#define SBS_HORZTHUMB 0x0010 |
#define SBS_UPARROW 0x0020 |
#define SBS_DOWNARROW 0x0040 |
#define SBS_UPSPACE 0x0080 |
#define SBS_DOWNSPACE 0x0100 |
#define SBS_VERTTHUMB 0x0200 |
#define SBS_MASK 0x03ff |
#define SBS_DISABLED 0x4000 |
#define SBS_HIDE 0x8000 |
|
#define HSCROLLBARVISIBLE(hwnd) ((hwnd)->style & WS_HSCROLL) |
#define VSCROLLBARVISIBLE(hwnd) ((hwnd)->style & WS_VSCROLL) |
|
/* |
* Adjust client area smaller if scrollbars visible. |
* Also, compute the NC hittest regions for the scrollbars. |
*/ |
void |
MwAdjustNCScrollbars(HWND hwnd) |
{ |
BOOL vertbar = VSCROLLBARVISIBLE(hwnd); |
BOOL horzbar = HSCROLLBARVISIBLE(hwnd); |
|
if (vertbar) { |
hwnd->clirect.right -= mwSYSMETRICS_CXVSCROLL; |
if (horzbar) |
hwnd->clirect.bottom -= mwSYSMETRICS_CYHSCROLL; |
hwnd->vscroll.rc.left = hwnd->clirect.right; |
hwnd->vscroll.rc.right = hwnd->clirect.right + |
mwSYSMETRICS_CXVSCROLL; |
hwnd->vscroll.rc.top = hwnd->clirect.top; |
hwnd->vscroll.rc.bottom = hwnd->clirect.bottom; |
} else |
SetRectEmpty(&hwnd->vscroll.rc); |
if (horzbar) { |
if (!vertbar) |
hwnd->clirect.bottom -= mwSYSMETRICS_CYHSCROLL; |
hwnd->hscroll.rc.top = hwnd->clirect.bottom; |
hwnd->hscroll.rc.bottom = hwnd->clirect.bottom + |
mwSYSMETRICS_CYHSCROLL; |
hwnd->hscroll.rc.left = hwnd->clirect.left; |
hwnd->hscroll.rc.right = hwnd->clirect.right; |
} else |
SetRectEmpty(&hwnd->hscroll.rc); |
} |
|
static int |
wndGetBorder(HWND hwnd) |
{ |
if (hwnd->style & WS_BORDER) { |
if ((hwnd->style & WS_CAPTION) == WS_CAPTION) |
return mwSYSMETRICS_CXFRAME; |
return mwSYSMETRICS_CXBORDER; |
} |
return 0; |
} |
|
static BOOL |
wndGetVScrollBarRect (HWND hwnd, RECT* rcVBar) |
{ |
if (hwnd->style & WS_VSCROLL) { |
rcVBar->left = hwnd->winrect.right - mwSYSMETRICS_CXVSCROLL |
- wndGetBorder (hwnd); |
rcVBar->right = hwnd->winrect.right - wndGetBorder (hwnd); |
rcVBar->top = hwnd->clirect.top; |
rcVBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd); |
|
if (hwnd->style & WS_HSCROLL && !(hwnd->hscroll.status & SBS_HIDE)) |
rcVBar->bottom -= mwSYSMETRICS_CYHSCROLL; |
|
return TRUE; |
} |
|
return FALSE; |
} |
|
static BOOL |
wndGetHScrollBarRect (HWND hwnd, RECT* rcHBar) |
{ |
if (hwnd->style & WS_HSCROLL) { |
rcHBar->top = hwnd->winrect.bottom - mwSYSMETRICS_CYHSCROLL |
- wndGetBorder (hwnd); |
rcHBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd); |
rcHBar->left = hwnd->clirect.left; |
rcHBar->right = hwnd->winrect.right - wndGetBorder (hwnd); |
|
if (hwnd->style & WS_VSCROLL && !(hwnd->vscroll.status & SBS_HIDE)) |
rcHBar->right -= mwSYSMETRICS_CXVSCROLL; |
|
return TRUE; |
} |
|
return FALSE; |
} |
|
void |
MwPaintNCScrollbars(HWND hwnd, HDC hdc) |
{ |
BOOL vertbar = VSCROLLBARVISIBLE(hwnd); |
BOOL horzbar = HSCROLLBARVISIBLE(hwnd); |
BOOL fGotDC = FALSE; |
RECT rc,rc2; |
|
POINT p3[3]; |
int shrink=2; |
|
int start = 0; |
RECT rcHBar, rcVBar; |
|
|
if (!hdc && (horzbar || vertbar)) { |
hdc = GetWindowDC(hwnd); |
fGotDC = TRUE; |
} |
|
if (horzbar && vertbar) { |
rc.left = hwnd->clirect.right; |
rc.top = hwnd->clirect.bottom; |
rc.right = rc.left + mwSYSMETRICS_CXVSCROLL; |
rc.bottom = rc.top + mwSYSMETRICS_CYHSCROLL; |
FillRect(hdc, &rc, (HBRUSH)(COLOR_BTNFACE+1)); |
} |
if (vertbar) { |
rc = hwnd->vscroll.rc; |
#if 1 |
/* bkgnd */ |
rc2.left=rc.left; rc2.right=rc2.left+ mwSYSMETRICS_CXVSCROLL; |
rc2.top=rc.top; |
rc2.bottom=rc2.top+ mwSYSMETRICS_CYHSCROLL; |
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1)); |
rc2.top=rc.bottom- mwSYSMETRICS_CYHSCROLL; |
rc2.bottom=rc2.top+ mwSYSMETRICS_CYHSCROLL; |
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1)); |
#endif |
/* up */ |
Draw3dUpDownState(hdc, rc.left, rc.top, |
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL, |
hwnd->vscroll.status & SBS_UPARROW); |
/* down */ |
Draw3dUpDownState(hdc, rc.left,rc.bottom-mwSYSMETRICS_CYHSCROLL, |
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL, |
hwnd->vscroll.status & SBS_DOWNARROW); |
/* jmt: draw arrows */ |
SelectObject(hdc,GetStockObject(BLACK_BRUSH)); |
/* up */ |
p3[0].x= rc.left + (mwSYSMETRICS_CXVSCROLL/2) - 1; |
p3[0].y= rc.top + 2 + shrink; |
p3[1].x= rc.left + 2 + shrink - 1; |
p3[1].y= rc.top + (mwSYSMETRICS_CYHSCROLL-4) - shrink; |
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink; |
p3[2].y= rc.top + (mwSYSMETRICS_CYHSCROLL-4) - shrink; |
Polygon(hdc,p3,3); |
/* down */ |
p3[0].x= rc.left + (mwSYSMETRICS_CXVSCROLL/2) - 1; |
p3[0].y= rc.bottom - 4 - shrink; |
p3[1].x= rc.left + 2 + shrink - 1; |
p3[1].y= rc.bottom-mwSYSMETRICS_CYHSCROLL + 2 + shrink; |
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink; |
p3[2].y= rc.bottom-mwSYSMETRICS_CYHSCROLL + 2 + shrink; |
Polygon(hdc,p3,3); |
|
/* draw moving bar */ |
|
wndGetVScrollBarRect (hwnd, &rcVBar); |
rcVBar.left -- ; |
rcVBar.right -- ; |
|
start = rcVBar.top + mwSYSMETRICS_CYVSCROLL + hwnd->vscroll.barStart; |
|
if (start + hwnd->vscroll.barLen > rcVBar.bottom) |
start = rcVBar.bottom - hwnd->vscroll.barLen; |
|
if (hwnd->vscroll.barLen == 0) |
hwnd->vscroll.barLen=rc.bottom-rc.top-(mwSYSMETRICS_CYVSCROLL*2); |
|
/* bkgnd */ |
rc2.left=rc.left; rc2.right=rc.right/*-1*/; |
rc2.top=rc.top+mwSYSMETRICS_CYHSCROLL; |
rc2.bottom=start; |
if (rc2.bottom>rc2.top) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
rc2.top=start+hwnd->vscroll.barLen; |
rc2.bottom=rc.bottom-mwSYSMETRICS_CYHSCROLL; |
if (rc2.bottom>rc2.top) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
Draw3dUpFrame (hdc, rcVBar.left, start, rcVBar.right, |
start + hwnd->vscroll.barLen); |
/*printf("barv:(l,t,r,b):(%d,%d,%d,%d)\n", |
rcVBar.left, start, rcVBar.right, |
start + hwnd->vscroll.barLen);*/ |
} |
if (horzbar) { |
rc = hwnd->hscroll.rc; |
|
#if 1 |
/* bkgnd */ |
rc2.top=rc.top; rc2.bottom=rc2.top+ mwSYSMETRICS_CYHSCROLL; |
rc2.left=rc.left; |
rc2.right=rc2.left+ mwSYSMETRICS_CXVSCROLL; |
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1)); |
rc2.left=rc.right- mwSYSMETRICS_CXVSCROLL; |
rc2.right=rc2.left+ mwSYSMETRICS_CXVSCROLL; |
FillRect(hdc, &rc2, (HBRUSH)(COLOR_BTNFACE+1)); |
#endif |
|
/* left */ |
Draw3dUpDownState(hdc, rc.left, rc.top, |
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL, |
hwnd->hscroll.status & SBS_LEFTARROW); |
/* right */ |
Draw3dUpDownState(hdc, rc.right-mwSYSMETRICS_CXVSCROLL, rc.top, |
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL, |
hwnd->hscroll.status & SBS_RIGHTARROW); |
/* jmt: draw arrows */ |
SelectObject(hdc,GetStockObject(BLACK_BRUSH)); |
/* left */ |
p3[0].x= rc.left + 2 + shrink; |
p3[0].y= rc.top + (mwSYSMETRICS_CYHSCROLL/2) ; |
p3[1].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink ; |
p3[1].y= rc.top + 2 + shrink; |
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink; |
p3[2].y= rc.bottom - 4 - shrink + 1; |
Polygon(hdc,p3,3); |
/* right */ |
p3[0].x= rc.right - 4 - shrink; |
p3[0].y= rc.top + (mwSYSMETRICS_CYHSCROLL/2) ; |
p3[1].x= rc.right-mwSYSMETRICS_CXVSCROLL + 2 + shrink ; |
p3[1].y= rc.top + 2 + shrink; |
p3[2].x= rc.right-mwSYSMETRICS_CXVSCROLL + 2 + shrink; |
p3[2].y= rc.bottom - 4 - shrink + 1; |
Polygon(hdc,p3,3); |
|
/* draw moving bar. */ |
|
wndGetHScrollBarRect (hwnd, &rcHBar); |
rcHBar.top -- ; |
rcHBar.bottom -- ; |
|
start = rcHBar.left + mwSYSMETRICS_CXHSCROLL + hwnd->hscroll.barStart; |
|
if (start + hwnd->hscroll.barLen > rcHBar.right) |
start = rcHBar.right - hwnd->hscroll.barLen; |
|
if (hwnd->hscroll.barLen == 0) |
hwnd->hscroll.barLen=rc.right-rc.left-(mwSYSMETRICS_CXHSCROLL*2); |
|
/* bkgnd */ |
rc2.top=rc.top; rc2.bottom=rc.bottom/*-1*/; |
rc2.left=rc.left+mwSYSMETRICS_CXVSCROLL; |
rc2.right=start; |
if (rc2.right>rc2.left) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
rc2.left=start+hwnd->hscroll.barLen; |
rc2.right=rc.right-mwSYSMETRICS_CXVSCROLL; |
if (rc2.right>rc2.left) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
Draw3dUpFrame (hdc, start, rcHBar.top, start + hwnd->hscroll.barLen, |
rcHBar.bottom); |
/*printf("barh:(l,t,r,b):(%d,%d,%d,%d)\n", |
start, rcHBar.top, start + hwnd->hscroll.barLen, |
rcHBar.bottom);*/ |
|
} |
|
if (fGotDC) |
ReleaseDC(hwnd, hdc); |
} |
|
/* handle a non-client message for a scrollbar*/ |
void |
MwHandleNCMessageScrollbar(HWND hwnd, UINT msg, WPARAM hitcode, LPARAM lParam) |
{ |
int pos = SBS_UNKNOWN; |
BOOL vertbar = VSCROLLBARVISIBLE(hwnd); |
BOOL horzbar = HSCROLLBARVISIBLE(hwnd); |
int * pStat; |
POINT pt; |
RECT rc; |
|
static BOOL bDraw; |
|
static int downPos = SBS_UNKNOWN; |
static int sbCode; |
int newThumbPos; |
|
int itemMoveable,itemCount,itemVisible,moveRange; /* jmt:2k0819 */ |
int moveTop,moveBottom,moveLeft,moveRight; /* jmt:2k0819 */ |
|
POINTSTOPOINT(pt, lParam); |
for (;;) { /* use for() to allow break statement*/ |
if (hitcode == HTVSCROLL && vertbar) |
{ |
pStat = &hwnd->vscroll.status; |
rc = hwnd->vscroll.rc; |
rc.bottom = rc.top + mwSYSMETRICS_CYVSCROLL; |
if (PtInRect(&rc, pt)) |
{ |
pos = SBS_UPARROW; |
break; |
} |
rc.bottom = hwnd->vscroll.rc.bottom; |
rc.top = rc.bottom - mwSYSMETRICS_CYVSCROLL; |
if (PtInRect(&rc, pt)) |
{ |
pos = SBS_DOWNARROW; |
break; |
} |
pos = SBS_VERTTHUMB; |
} else if (hitcode == HTHSCROLL && horzbar) |
{ |
pStat = &hwnd->hscroll.status; |
rc = hwnd->hscroll.rc; |
rc.right = rc.left + mwSYSMETRICS_CXHSCROLL; |
if (PtInRect(&rc, pt)) { |
pos = SBS_LEFTARROW; |
break; |
} |
rc.right = hwnd->hscroll.rc.right; |
rc.left = rc.right - mwSYSMETRICS_CXHSCROLL; |
if (PtInRect(&rc, pt)) { |
pos = SBS_RIGHTARROW; |
break; |
} |
pos = SBS_HORZTHUMB; |
} else |
return; |
break; |
} |
|
if (pos == SBS_UNKNOWN) |
return; |
|
*pStat &= ~SBS_MASK; /* remove stray mouse states*/ |
|
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK) /* jmt:2k0819 */ |
*pStat |= pos; |
else *pStat &= ~pos; |
|
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK) /* jmt:2k0819 */ |
bDraw=TRUE; |
|
if (bDraw) |
MwPaintNCScrollbars(hwnd, NULL); |
|
if (pos == SBS_UPARROW || pos == SBS_LEFTARROW) /* jmt:2k0820 */ |
{ |
if (hwnd->vscroll.curPos != hwnd->vscroll.minPos) |
sbCode = SB_LINEUP; |
} |
else if (pos == SBS_DOWNARROW || pos == SBS_RIGHTARROW) /* jmt:2k0820 */ |
{ |
if (hwnd->vscroll.curPos != hwnd->vscroll.maxPos) |
sbCode = SB_LINEDOWN; |
} |
else if (pos == SBS_VERTTHUMB || pos == SBS_HORZTHUMB) |
{ |
sbCode = SB_THUMBTRACK; |
} |
|
switch(msg) |
{ |
case WM_NCLBUTTONDOWN: |
case WM_NCLBUTTONDBLCLK: /* jmt:2k0819 */ |
downPos = pos; |
#if MWCLIENT |
InvalidateRect(hwnd,NULL,TRUE); |
#endif |
break; |
|
case WM_NCMOUSEMOVE: /* jmt:2k0819 */ |
if (hitcode == HTVSCROLL && vertbar) |
{ |
if (sbCode == SB_THUMBTRACK && downPos == SBS_VERTTHUMB) |
{ |
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
rc = hwnd->vscroll.rc; |
moveTop = rc.top + mwSYSMETRICS_CYVSCROLL; |
moveBottom = hwnd->vscroll.rc.bottom - mwSYSMETRICS_CYVSCROLL; |
moveRange = moveBottom - moveTop; |
|
itemCount = hwnd->vscroll.maxPos - hwnd->vscroll.minPos + 1; |
itemVisible = hwnd->vscroll.pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveTop,itemMoveable,moveRange,newThumbPos); |
|
if ( newThumbPos >= hwnd->vscroll.minPos && |
newThumbPos <= hwnd->vscroll.maxPos) |
SendMessage (hwnd, |
WM_VSCROLL, SB_THUMBTRACK, newThumbPos); |
break; |
} |
} |
|
if (hitcode == HTHSCROLL && horzbar) |
{ |
if (sbCode == SB_THUMBTRACK && downPos == SBS_HORZTHUMB) |
{ |
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
rc = hwnd->hscroll.rc; |
moveLeft = rc.left + mwSYSMETRICS_CXHSCROLL; |
moveRight = hwnd->hscroll.rc.right - mwSYSMETRICS_CXHSCROLL; |
moveRange = moveRight - moveLeft; |
|
itemCount = hwnd->hscroll.maxPos - hwnd->hscroll.minPos + 1; |
itemVisible = hwnd->hscroll.pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos); |
|
if ( newThumbPos >= hwnd->hscroll.minPos && |
newThumbPos <= hwnd->hscroll.maxPos) |
SendMessage (hwnd, |
WM_HSCROLL, SB_THUMBTRACK, newThumbPos); |
break; |
} |
} |
|
break; |
|
case WM_NCLBUTTONUP: /* jmt:2k0819 */ |
bDraw=FALSE; |
downPos = SBS_UNKNOWN; |
|
if (sbCode==SB_THUMBTRACK) |
{ |
if (hitcode == HTVSCROLL && vertbar) |
{ |
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
rc = hwnd->vscroll.rc; |
moveTop = rc.top + mwSYSMETRICS_CYVSCROLL; |
moveBottom = hwnd->vscroll.rc.bottom - mwSYSMETRICS_CYVSCROLL; |
moveRange = moveBottom - moveTop; |
|
itemCount = hwnd->vscroll.maxPos - hwnd->vscroll.minPos + 1; |
itemVisible = hwnd->vscroll.pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveTop,itemMoveable,moveRange,newThumbPos); |
|
if ( newThumbPos >= hwnd->vscroll.minPos && |
newThumbPos <= hwnd->vscroll.maxPos) |
SendMessage (hwnd, |
WM_VSCROLL, SB_THUMBTRACK, newThumbPos); |
break; |
} |
|
if (hitcode == HTHSCROLL && horzbar) |
{ |
/* jmt(2k0819): new algorithm for SB_THUMBTRACK */ |
|
rc = hwnd->hscroll.rc; |
moveLeft = rc.left + mwSYSMETRICS_CXHSCROLL; |
moveRight = hwnd->hscroll.rc.right - mwSYSMETRICS_CXHSCROLL; |
moveRange = moveRight - moveLeft; |
|
itemCount = hwnd->hscroll.maxPos - hwnd->hscroll.minPos + 1; |
itemVisible = hwnd->hscroll.pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos); |
|
if ( newThumbPos >= hwnd->hscroll.minPos && |
newThumbPos <= hwnd->hscroll.maxPos) |
SendMessage (hwnd, |
WM_HSCROLL, SB_THUMBTRACK, newThumbPos); |
break; |
} |
} |
else /* jmt:2k0820 */ |
{ |
if (hitcode == HTVSCROLL && vertbar) |
SendMessage (hwnd, WM_VSCROLL, sbCode, 0); |
|
if (hitcode == HTHSCROLL && horzbar) |
SendMessage (hwnd, WM_HSCROLL, sbCode, 0); |
} |
break; |
} |
|
} |
|
|
static BOOL |
PtInRect2(const RECT *lprc, int x, int y) |
{ |
POINT p; |
|
p.x = x; |
p.y = y; |
return PtInRect(lprc, p); |
} |
|
#if 1 /* 0000 */ |
|
|
static void |
wndScrollBarPos (HWND hwnd, BOOL bIsHBar, RECT* rcBar) |
{ |
UINT moveRange; |
PMWSCROLLBARINFO pSBar; |
|
if (bIsHBar) |
pSBar = &hwnd->hscroll; |
else |
pSBar = &hwnd->vscroll; |
|
if (pSBar->minPos == pSBar->maxPos) { |
pSBar->status |= SBS_HIDE; |
return; |
} |
|
if (bIsHBar) |
moveRange = (rcBar->right - rcBar->left) - (mwSYSMETRICS_CXHSCROLL<<1); |
else |
moveRange = (rcBar->bottom - rcBar->top) - (mwSYSMETRICS_CYVSCROLL<<1); |
|
#define MWM_DEFBARLEN 18 |
#define MWM_MINBARLEN 8 |
|
if (pSBar->pageStep == 0) |
{ |
pSBar->barLen = MWM_DEFBARLEN; |
|
if (pSBar->barLen > moveRange) |
pSBar->barLen = MWM_MINBARLEN; |
} |
else |
{ |
pSBar->barLen = moveRange * pSBar->pageStep / |
(pSBar->maxPos - pSBar->minPos + 1); |
if (pSBar->barLen < MWM_MINBARLEN) |
pSBar->barLen = MWM_MINBARLEN; |
} |
|
pSBar->barStart = moveRange * (pSBar->curPos - pSBar->minPos) / |
(pSBar->maxPos - pSBar->minPos + 1); |
|
|
if (pSBar->barStart + pSBar->barLen > moveRange) |
pSBar->barStart = moveRange - pSBar->barLen; |
|
|
if (pSBar->barStart < 0) |
pSBar->barStart = 0; |
} |
|
static PMWSCROLLBARINFO wndGetScrollBar (HWND pWin, int iSBar) |
{ |
if (iSBar == SB_HORZ) { |
if (pWin->style & WS_HSCROLL) |
return &pWin->hscroll; |
} |
else if (iSBar == SB_VERT) { |
if (pWin->style & WS_VSCROLL) |
return &pWin->vscroll; |
} |
|
return NULL; |
} |
|
BOOL EnableScrollBar (HWND hWnd, int iSBar, BOOL bEnable) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
BOOL bPrevState; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
bPrevState = !(pSBar->status & SBS_DISABLED); |
|
if (bEnable && !bPrevState) |
pSBar->status &= ~SBS_DISABLED; |
else if (!bEnable && bPrevState) |
pSBar->status |= SBS_DISABLED; |
else |
return FALSE; |
|
if (iSBar == SB_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintNCScrollbars(hWnd,NULL); /* a must */ |
#endif |
|
return TRUE; |
} |
|
BOOL GetScrollPos (HWND hWnd, int iSBar, int* pPos) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
*pPos = pSBar->curPos; |
return TRUE; |
} |
|
BOOL GetScrollRange (HWND hWnd, int iSBar, int* pMinPos, int* pMaxPos) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
*pMinPos = pSBar->minPos; |
*pMaxPos = pSBar->maxPos; |
return TRUE; |
} |
|
BOOL SetScrollPos (HWND hWnd, int iSBar, int iNewPos) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
if (iNewPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
else |
pSBar->curPos = iNewPos; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
if (iSBar == SB_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
|
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintNCScrollbars(hWnd,NULL); /* a must */ |
#endif |
return TRUE; |
} |
|
BOOL SetScrollRange (HWND hWnd, int iSBar, int iMinPos, int iMaxPos) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
pSBar->minPos = (iMinPos < iMaxPos)?iMinPos:iMaxPos; |
pSBar->maxPos = (iMinPos > iMaxPos)?iMinPos:iMaxPos; |
|
/* validate parameters. */ |
if (pSBar->curPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
|
if (pSBar->pageStep <= 0) |
pSBar->pageStep = 0; |
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) |
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
if (iSBar == SB_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintNCScrollbars(hWnd,NULL); /* a must */ |
#endif |
|
return TRUE; |
} |
|
BOOL SetScrollInfo (HWND hWnd, int iSBar, |
LPCSCROLLINFO lpsi, BOOL fRedraw) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
if( lpsi->fMask & SIF_RANGE ) |
{ |
pSBar->minPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMin:lpsi->nMax; |
pSBar->maxPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMax:lpsi->nMin; |
} |
|
if( lpsi->fMask & SIF_POS ) |
pSBar->curPos = lpsi->nPos; |
|
if( lpsi->fMask & SIF_PAGE ) |
pSBar->pageStep = lpsi->nPage; |
|
/* validate parameters. */ |
if (pSBar->curPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
|
if (pSBar->pageStep <= 0) |
pSBar->pageStep = 0; |
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) |
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
if(fRedraw) |
{ |
if (iSBar == SB_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintNCScrollbars(hWnd,NULL); /* a must */ |
#endif |
} |
|
return TRUE; |
} |
|
BOOL GetScrollInfo(HWND hWnd, int iSBar, LPSCROLLINFO lpsi) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
if( lpsi->fMask & SIF_RANGE ) |
{ |
lpsi->nMin = pSBar->minPos; |
lpsi->nMax = pSBar->maxPos; |
} |
|
if( lpsi->fMask & SIF_POS ) |
{ |
lpsi->nPos = pSBar->curPos; |
} |
|
if( lpsi->fMask & SIF_PAGE ) |
lpsi->nPage = pSBar->pageStep; |
|
return TRUE; |
} |
|
BOOL ShowScrollBar (HWND hWnd, int iSBar, BOOL bShow) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
BOOL bPrevState; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
bPrevState = !(pSBar->status & SBS_HIDE); |
|
if (bShow && !bPrevState) |
pSBar->status &= ~SBS_HIDE; |
else if (!bShow && bPrevState) |
pSBar->status |= SBS_HIDE; |
else |
return FALSE; |
#if 0 /* fix: no WM_CHANGESIZE */ |
SendMessage (hWnd, WM_CHANGESIZE, 0, 0); |
#endif |
if (iSBar == SB_VERT) |
wndGetVScrollBarRect (pWin, &rcBar); |
else |
wndGetHScrollBarRect (pWin, &rcBar); |
|
{ |
RECT rcWin, rcClient; |
|
memcpy (&rcWin, &pWin->winrect.left, sizeof (RECT)); |
|
rcClient.left = 0; |
rcClient.top = 0; |
rcClient.right = pWin->clirect.right - pWin->clirect.left; |
rcClient.bottom = pWin->clirect.bottom - pWin->clirect.top; |
#if 0 /* fix: no WM_SIZECHANGED */ |
SendMessage/*SendAsyncMessage*/ (hWnd, WM_SIZECHANGED, |
(WPARAM)&rcWin, (LPARAM)&rcClient); |
#endif |
} |
|
if (bShow) { |
SendMessage (hWnd, WM_NCPAINT, 0, 0); |
} |
else { |
rcBar.left -= pWin->clirect.left; |
rcBar.top -= pWin->clirect.top; |
rcBar.right -= pWin->clirect.left; |
rcBar.bottom -= pWin->clirect.top; |
SendMessage (hWnd, WM_NCPAINT, 0, 0); |
InvalidateRect (hWnd, &rcBar, TRUE); |
} |
|
return TRUE; |
} |
#endif |
/winclip.c
0,0 → 1,7
#include "device.h" |
|
#if DYNAMICREGIONS |
#include "winclip2.c" |
#else |
#include "winclip1.c" |
#endif |
/mwobjects/mwobjects.cc
0,0 → 1,551
/* |
Copyright (C) Chris Johns (ccj@acm.org) |
|
Microwindows C++ Wrappers. |
|
*/ |
|
#include <algorithm> |
#include <stdarg.h> |
#include <stdio.h> |
#include <mwobjects.h> |
|
namespace MicroWindowsObjects |
{ |
|
static Application *the_application = 0; |
|
WindowClass::WindowClass () |
{ |
wclass.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW; |
wclass.lpfnWndProc = 0; |
wclass.lpfnWndProc = 0; |
wclass.cbClsExtra = 0; |
wclass.cbWndExtra = 0; |
wclass.hInstance = 0; |
wclass.hIcon = 0; |
wclass.hCursor = 0; |
wclass.hbrBackground = 0; |
wclass.lpszMenuName = 0; |
wclass.lpszClassName = 0; |
} |
|
WindowClass::WindowClass (LPCSTR lpszClassName, |
UINT style, |
int cbClsExtra, |
int cbWndExtra, |
HINSTANCE hInstance, |
HICON hIcon, |
HCURSOR hCursor, |
HBRUSH hbrBackground, |
LPCSTR lpszMenuName) |
{ |
wclass.style = style; |
wclass.lpfnWndProc = (WNDPROC) Window::WndProc; |
wclass.cbClsExtra = cbClsExtra; |
wclass.cbWndExtra = cbWndExtra + sizeof (Window *); |
wclass.hInstance = hInstance; |
wclass.hIcon = hIcon; |
wclass.hCursor = hCursor; |
wclass.hbrBackground = hbrBackground; |
wclass.lpszMenuName = lpszMenuName; |
wclass.lpszClassName = lpszClassName; |
} |
|
ATOM WindowClass::register_class () |
{ |
return RegisterClass (&wclass); |
} |
|
Window::Window () |
: hwnd (0) |
{ |
} |
|
Window::Window (DWORD dwExStyle, |
LPCSTR lpClassName, |
LPCSTR lpWindowName, |
DWORD dwStyle, |
int x, |
int y, |
int nWidth, |
int nHeight, |
HWND hwndParent, |
HMENU hMenu, |
HINSTANCE hInstance, |
LPVOID lpParam) |
: hwnd (0) |
{ |
create (dwExStyle, |
lpClassName, |
lpWindowName, |
dwStyle, |
x, y, nWidth, nHeight, |
hwndParent, |
hMenu, |
hInstance, |
lpParam); |
} |
|
Window::~Window () |
{ |
destory (); |
} |
|
HWND |
Window::create (DWORD dwExStyle, |
LPCSTR lpClassName, |
LPCSTR lpWindowName, |
DWORD dwStyle, |
int x, |
int y, |
int nWidth, |
int nHeight, |
HWND hwndParent, |
HMENU hMenu, |
HINSTANCE hInstance, |
LPVOID lpParam) |
{ |
lpCreateParams = lpParam; |
|
lpParam = (LPVOID) this; |
|
hwnd = ::CreateWindowEx (dwExStyle, |
lpClassName, |
lpWindowName, |
dwStyle, |
x, y, nWidth, nHeight, |
hwndParent, |
hMenu, |
hInstance, |
lpParam); |
return hwnd; |
} |
|
BOOL |
Window::destory () |
{ |
if (hwnd) |
{ |
HWND old_hwnd = hwnd; |
hwnd = 0; |
return ::DestroyWindow (old_hwnd); |
} |
return 0; |
} |
|
bool |
Window::attach (const int fd, FileDescriptor& file_descriptor) |
{ |
// |
// The user must set the fd before being added to the set. |
// |
|
if ((fd < 0) || (fd >= FD_SETSIZE) || (file_descriptor.file_desc != -1)) |
return false; |
|
// |
// If this fd is already taken do not add another. |
// |
|
file_descriptor.file_desc = fd; |
file_descriptor.window = this; |
|
if (file_descriptors.find (&file_descriptor) != file_descriptors.end ()) |
{ |
file_descriptor.file_desc = -1; |
file_descriptor.window = 0; |
return false; |
} |
|
file_descriptors.insert (&file_descriptor); |
|
return true; |
} |
|
bool |
Window::detach (FileDescriptor& file_descriptor) |
{ |
// |
// The user must set the fd before being added to the set. |
// |
|
if ((file_descriptor.fd () < 0) || (file_descriptor.fd () >= FD_SETSIZE)) |
return false; |
|
// |
// If this fd is already taken do not add another. |
// |
|
if (file_descriptors.find (&file_descriptor) == file_descriptors.end ()) |
return false; |
|
file_descriptor.disable_read (); |
file_descriptor.disable_write (); |
file_descriptor.disable_except (); |
|
file_descriptors.erase (&file_descriptor); |
|
file_descriptor.file_desc = -1; |
file_descriptor.window = 0; |
|
return true; |
} |
|
struct eq_fd |
{ |
const int fd; |
eq_fd (const int fd) : fd (fd) {} |
bool operator() (const FileDescriptor* f1) const |
{ return (f1->fd () == fd); } |
}; |
|
LRESULT |
Window::message_handler (UINT msg, |
WPARAM wp, |
LPARAM lp) |
{ |
switch (msg) |
{ |
case WM_FDINPUT: |
case WM_FDOUTPUT: |
case WM_FDEXCEPT: |
|
{ |
// |
// The iterator provides a reference to the object pointer |
// as the set contains pointers. |
// |
|
set<FileDescriptor*>::iterator file_descriptor; |
|
file_descriptor = find_if (file_descriptors.begin (), |
file_descriptors.end (), |
eq_fd ((int) wp)); |
|
if (file_descriptor != file_descriptors.end ()) |
{ |
switch (msg) |
{ |
case WM_FDINPUT: |
return (*file_descriptor)->read (); |
|
case WM_FDOUTPUT: |
return (*file_descriptor)->write (); |
|
case WM_FDEXCEPT: |
return (*file_descriptor)->except (); |
} |
} |
} |
break; |
|
default: |
break; |
} |
|
return ::DefWindowProc (hwnd, msg, wp, lp); |
} |
|
bool |
Window::ltint::operator () (const FileDescriptor* f1, |
const FileDescriptor* f2) const |
{ |
return f1->fd () < f2->fd (); |
} |
|
LRESULT CALLBACK |
Window::WndProc (HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) |
{ |
int offset = GetClassLong (hwnd, GCL_CBWNDEXTRA) - sizeof (Window *); |
Window *window = 0; |
|
if (msg == WM_CREATE) |
{ |
LPCREATESTRUCT cs = (LPCREATESTRUCT) lp; |
|
window = dynamic_cast<Window*>((Window*) cs->lpCreateParams); |
|
if (window) |
{ |
window->hwnd = hwnd; |
SetWindowLong (hwnd, offset, (DWORD) window); |
cs->lpCreateParams = window->lpCreateParams; |
} |
} |
else |
{ |
window = dynamic_cast<Window*>((Window*) GetWindowLong (hwnd, offset)); |
} |
|
if (window) |
return window->message_handler (msg, wp, lp); |
|
return ::DefWindowProc (hwnd, msg, wp, lp); |
} |
|
Paint::Paint (HWND hwnd) |
: hwnd (hwnd), |
draw_3d (false), |
drawing (false), |
r (0, 0, 0, 0), |
text_format (0) |
{ |
} |
|
Paint::Paint (HWND hwnd, LPARAM lpParam) |
: hwnd (hwnd), |
draw_3d (false), |
drawing (false), |
r (0, 0, 0, 0), |
text_format (0) |
{ |
POINTSTOPOINT (pt, lpParam); |
} |
|
Paint::~Paint () |
{ |
end (); |
} |
|
void |
Paint::begin (bool init_3d, bool draw_3d_in_mem) |
{ |
if (!drawing && hwnd) |
{ |
hdc = ::BeginPaint (hwnd, &ps); |
|
r.get_client (hwnd); |
|
if (init_3d) |
initialise_3d (draw_3d_in_mem); |
|
drawing = true; |
} |
} |
|
void |
Paint::end () |
{ |
if (drawing) |
{ |
paint_3d (); |
|
::EndPaint (hwnd, &ps); |
|
drawing = false; |
} |
} |
|
int |
Paint::text_out (int x, int y, const char *format, ...) |
{ |
Rect rect (x, y, x + 100, y + 100); |
va_list arg; |
|
va_start (arg, format); |
vsnprintf (format_buf, TEXT_BUF_SIZE, format, arg); |
format_buf[TEXT_BUF_SIZE - 1] = '\0'; |
|
return ::DrawText (hdc, format_buf, -1, rect, text_format); |
} |
|
FileDescriptor::FileDescriptor () |
: file_desc (-1), |
window (0) |
{ |
} |
|
FileDescriptor::~FileDescriptor () |
{ |
if (window) |
window->detach (*this); |
} |
|
bool |
FileDescriptor::enable_read () |
{ |
if (!read_is_enabled && window && (file_desc != -1)) |
{ |
::MwRegisterFdInput (*window, file_desc); |
read_is_enabled = true; |
return true; |
} |
return false; |
} |
|
bool |
FileDescriptor::disable_read () |
{ |
if (read_is_enabled && window && (file_desc != -1)) |
{ |
::MwUnregisterFdInput (*window, file_desc); |
read_is_enabled = false; |
return true; |
} |
return false; |
} |
|
|
bool |
FileDescriptor::enable_write () |
{ |
if (!write_is_enabled && window && (file_desc != -1)) |
{ |
::MwRegisterFdOutput (*window, file_desc); |
write_is_enabled = true; |
return true; |
} |
return false; |
} |
|
bool |
FileDescriptor::disable_write () |
{ |
if (write_is_enabled && window && (file_desc != -1)) |
{ |
::MwUnregisterFdOutput (*window, file_desc); |
write_is_enabled = false; |
return true; |
} |
return false; |
} |
|
bool |
FileDescriptor::enable_except () |
{ |
if (!except_is_enabled && window && (file_desc != -1)) |
{ |
::MwRegisterFdExcept (*window, file_desc); |
except_is_enabled = true; |
return true; |
} |
return false; |
} |
|
bool |
FileDescriptor::disable_except () |
{ |
if (except_is_enabled && window && (file_desc != -1)) |
{ |
::MwUnregisterFdExcept (*window, file_desc); |
except_is_enabled = false; |
return true; |
} |
return false; |
} |
|
LRESULT |
FileDescriptor::read () |
{ |
return 0; |
} |
|
LRESULT |
FileDescriptor::write () |
{ |
return 0; |
} |
|
LRESULT |
FileDescriptor::except () |
{ |
return 0; |
} |
|
Application::Application () |
: background (0) |
{ |
if (!the_application) |
the_application = this; |
} |
|
Application::Application (MWIMAGEHDR& background) |
: background (&background) |
{ |
if (!the_application) |
the_application = this; |
} |
|
Application::~Application () |
{ |
} |
|
int |
Application::initialise () |
{ |
return 0; |
} |
|
int |
Application::shutdown () |
{ |
return 0; |
} |
|
int WINAPI |
Application::WinMain (HINSTANCE hInstance, |
HINSTANCE hPrevInstance, |
LPSTR lpCmdLine, |
int nShowCmd) |
{ |
if (the_application) |
{ |
int result; |
|
MwRegisterButtonControl (0); |
|
result = the_application->initialise (); |
|
if (result) |
return result; |
|
// |
// Set background wallpaper |
// |
|
if (the_application->background) |
MwSetDesktopWallpaper (the_application->background); |
|
MSG msg; |
|
// |
// type ESC to quit... |
// |
|
while (GetMessage (&msg, 0, 0, 0)) |
{ |
TranslateMessage (&msg); |
DispatchMessage (&msg); |
} |
|
result = the_application->shutdown (); |
|
if (result) |
return result; |
|
return 0; |
} |
|
return 1; |
} |
|
}; |
|
// |
// Global Microwindows WinMain () routine with "C" linkage |
// |
|
extern "C" |
{ |
int WinMain (HINSTANCE hInstance, |
HINSTANCE hPrevInstance, |
LPSTR lpCmdLine, |
int nShowCmd) |
{ |
return MicroWindowsObjects::Application::WinMain (hInstance, |
hPrevInstance, |
lpCmdLine, |
nShowCmd); |
} |
}; |
/mwobjects/Makefile
0,0 → 1,20
# |
# Copyright (C) Chris Johns (ccj@acm.org) |
# |
# Microwindows C++ Wrappers. |
# |
|
include $(CONFIG) |
|
LIBNAME = libmwobjects.a |
LIBNAMESO = libmwobjects.so |
|
ifeq ($(OBJFRAMEWORK), Y) |
CXXOBJS += mwobjects.o |
endif |
|
######################### Makefile.rules section ############################# |
|
include $(TOP)/Makefile.rules |
|
######################## Tools targets section ############################### |
/winexpos.c
0,0 → 1,369
/* |
* Copyright (c) 1999 Greg Haerr <greg@censoft.com> |
* Portions Copyright (c) 1991 David I. Bell |
* |
* Non-Win32 API helper routines for window showing/hiding/exposing |
*/ |
#include "windows.h" |
#include "wintern.h" |
#include <stdlib.h> |
|
/* Redraw all windows*/ |
void |
MwRedrawScreen(void) |
{ |
/* redraw all windows except desktop window*/ |
MwExposeArea(rootwp, 0, 0, rootwp->winrect.right, |
rootwp->winrect.bottom); |
|
/* redraw desktop window*/ |
PostMessage(rootwp, WM_PAINT, 0, 0L); |
} |
|
/* |
* Hide the window to make it and its children invisible on the screen. |
* This is a recursive routine which increments the unmapcount values for |
* this window and all of its children, and causes exposure events for |
* windows which are newly uncovered. |
*/ |
void |
MwHideWindow(HWND hwnd,BOOL bChangeFocus, BOOL bSendMsg) |
{ |
HWND wp = hwnd; |
HWND pwp; /* parent window */ |
HWND sibwp; /* sibling window */ |
HWND childwp; /* child window */ |
|
if (wp == rootwp) |
return; |
|
++mwpaintNC; /* experimental NC paint handling*/ |
|
/* send hide message if currently visible*/ |
if(bSendMsg && wp->unmapcount == 0) |
SendMessage(wp, WM_SHOWWINDOW, FALSE, 0L); |
|
wp->unmapcount++; |
|
for (childwp = wp->children; childwp; childwp = childwp->siblings) |
MwHideWindow(childwp, bChangeFocus, bSendMsg); |
|
if (wp == mousewp) { |
MwCheckMouseWindow(); |
MwCheckCursor(); |
} |
|
if (bChangeFocus && wp == focuswp) |
SetFocus(rootwp->children? rootwp->children: rootwp); |
|
/* |
* If the parent window is still unmapped, then we are all done. |
*/ |
if (wp->parent->unmapcount) |
return; |
|
/* |
* Clear the area in the parent for this window, causing an |
* exposure event for it. |
*/ |
pwp = wp->parent; |
MwClearWindow(pwp, wp->winrect.left - pwp->winrect.left, |
wp->winrect.top - pwp->winrect.top, |
wp->winrect.right - wp->winrect.left, |
wp->winrect.bottom - wp->winrect.top, TRUE); |
|
/* |
* Finally clear and redraw all parts of our lower sibling |
* windows that were covered by this window. |
*/ |
sibwp = wp; |
while (sibwp->siblings) { |
sibwp = sibwp->siblings; |
MwExposeArea(sibwp, wp->winrect.left, wp->winrect.top, |
wp->winrect.right - wp->winrect.left, |
wp->winrect.bottom - wp->winrect.top); |
} |
} |
|
/* |
* Map the window to possibly make it and its children visible on the screen. |
* This is a recursive routine which decrements the unmapcount values for |
* this window and all of its children, and causes exposure events for |
* those windows which become visible. |
*/ |
void |
MwShowWindow(HWND hwnd, BOOL bSendMsg) |
{ |
HWND wp = hwnd; |
|
if (wp == rootwp) |
return; |
|
++mwpaintNC; /* experimental NC paint handling*/ |
|
if (wp->unmapcount) |
wp->unmapcount--; |
|
if (wp->unmapcount == 0) { |
SendMessage(wp, WM_SHOWWINDOW, TRUE, 0L); |
MwCheckMouseWindow(); |
MwCheckCursor(); |
} |
|
/* |
* If the window just became visible, |
* then draw its border, clear it to the background color, and |
* generate an exposure event. |
*/ |
if (wp->unmapcount == 0) { |
/*MwDrawBorder(wp);*/ |
MwClearWindow(wp, 0, 0, wp->winrect.right - wp->winrect.left, |
wp->winrect.bottom - wp->winrect.top, TRUE); |
} |
|
/* |
* Do the same thing for the children. |
*/ |
for (wp = wp->children; wp; wp = wp->siblings) |
MwShowWindow(wp, bSendMsg); |
} |
|
/* |
* Raise a window to the highest level among its siblings. |
*/ |
void |
MwRaiseWindow(HWND hwnd) |
{ |
HWND wp = hwnd; |
HWND prevwp; |
BOOL overlap; |
|
if (!wp || wp == rootwp) |
return; |
|
++mwpaintNC; /* experimental NC paint handling*/ |
|
/* |
* If this is already the highest window then we are done. |
*/ |
prevwp = wp->parent->children; |
if (prevwp == wp) |
return; |
|
/* |
* Find the sibling just before this window so we can unlink it. |
* Also, determine if any sibling ahead of us overlaps the window. |
* Remember that for exposure events. |
*/ |
overlap = FALSE; |
while (prevwp->siblings != wp) { |
overlap |= MwCheckOverlap(prevwp, wp); |
prevwp = prevwp->siblings; |
} |
overlap |= MwCheckOverlap(prevwp, wp); |
|
/* |
* Now unlink the window and relink it in at the front of the |
* sibling chain. |
*/ |
prevwp->siblings = wp->siblings; |
wp->siblings = wp->parent->children; |
wp->parent->children = wp; |
|
/* |
* Finally redraw the window if necessary. |
*/ |
if (overlap) { |
/*MwDrawBorder(wp);*/ |
MwExposeArea(wp, wp->winrect.left, wp->winrect.top, |
wp->winrect.right - wp->winrect.left, |
wp->winrect.bottom - wp->winrect.top); |
} |
} |
|
/* |
* Lower a window to the lowest level among its siblings. |
*/ |
void |
MwLowerWindow(HWND hwnd) |
{ |
HWND wp = hwnd; |
HWND prevwp; |
HWND sibwp; /* sibling window */ |
HWND expwp; /* siblings being exposed */ |
|
if (!wp || wp == rootwp || !wp->siblings) |
return; |
|
++mwpaintNC; /* experimental NC paint handling*/ |
|
/* |
* Find the sibling just before this window so we can unlink us. |
*/ |
prevwp = wp->parent->children; |
if (prevwp != wp) { |
while (prevwp->siblings != wp) |
prevwp = prevwp->siblings; |
} |
|
/* |
* Remember the first sibling that is after us, so we can |
* generate exposure events for the remaining siblings. Then |
* walk down the sibling chain looking for the last sibling. |
*/ |
expwp = wp->siblings; |
sibwp = wp; |
while (sibwp->siblings) |
sibwp = sibwp->siblings; |
|
/* |
* Now unlink the window and relink it in at the end of the |
* sibling chain. |
*/ |
if (prevwp == wp) |
wp->parent->children = wp->siblings; |
else |
prevwp->siblings = wp->siblings; |
sibwp->siblings = wp; |
|
wp->siblings = NULL; |
|
/* |
* Finally redraw the sibling windows which this window covered |
* if they overlapped our window. |
*/ |
while (expwp && (expwp != wp)) { |
if (MwCheckOverlap(wp, expwp)) |
MwExposeArea(expwp, wp->winrect.left, wp->winrect.top, |
wp->winrect.right - wp->winrect.left, |
wp->winrect.bottom - wp->winrect.top); |
expwp = expwp->siblings; |
} |
} |
|
/* |
* Check to see if the first window overlaps the second window. |
*/ |
BOOL |
MwCheckOverlap(HWND topwp, HWND botwp) |
{ |
MWCOORD minx1; |
MWCOORD miny1; |
MWCOORD maxx1; |
MWCOORD maxy1; |
MWCOORD minx2; |
MWCOORD miny2; |
MWCOORD maxx2; |
MWCOORD maxy2; |
|
if (topwp->unmapcount || botwp->unmapcount) |
return FALSE; |
|
minx1 = topwp->winrect.left; |
miny1 = topwp->winrect.top; |
maxx1 = topwp->winrect.right - 1; |
maxy1 = topwp->winrect.bottom - 1; |
|
minx2 = botwp->winrect.left; |
miny2 = botwp->winrect.top; |
maxx2 = botwp->winrect.right - 1; |
maxy2 = botwp->winrect.bottom - 1; |
|
if (minx1 > maxx2 || minx2 > maxx1 || miny1 > maxy2 || miny2 > maxy1) |
return FALSE; |
|
return TRUE; |
} |
|
/* |
* Clear the specified area of a window and possibly make an exposure event. |
* This sets the area window to its background color. If the exposeflag is |
* nonzero, then this also creates an exposure event for the window. |
*/ |
void |
MwClearWindow(HWND wp, MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height, |
BOOL exposeflag) |
{ |
if (wp->unmapcount) |
return; |
|
/* |
* Reduce the arguments so that they actually lie within the window. |
*/ |
if (x < 0) { |
width += x; |
x = 0; |
} |
if (y < 0) { |
height += y; |
y = 0; |
} |
if (x + width > wp->winrect.right - wp->winrect.left) |
width = (wp->winrect.right - wp->winrect.left) - x; |
if (y + height > wp->winrect.bottom - wp->winrect.top) |
height = (wp->winrect.bottom - wp->winrect.top) - y; |
|
/* |
* Now see if the region is really in the window. If not, then |
* do nothing. |
*/ |
if (x >= (wp->winrect.right - wp->winrect.left) || |
y >= (wp->winrect.bottom - wp->winrect.top) || |
width <= 0 || height <= 0) |
return; |
|
/* |
* Now do the exposure if required. |
*/ |
if (exposeflag) |
MwDeliverExposureEvent(wp, x, y, width, height); |
} |
|
/* |
* Handle the exposing of the specified absolute region of the screen, |
* starting with the specified window. That window and all of its |
* children will be redrawn and/or exposure events generated if they |
* overlap the specified area. This is a recursive routine. |
*/ |
void |
MwExposeArea(HWND wp, MWCOORD rootx, MWCOORD rooty, MWCOORD width, |
MWCOORD height) |
{ |
if (wp->unmapcount) |
return; |
|
++mwpaintNC; /* experimental NC paint handling*/ |
|
/* |
* First see if the area overlaps the window including the border. |
* If not, then there is nothing more to do. |
*/ |
if (rootx >= wp->winrect.right || rooty >= wp->winrect.bottom || |
(rootx + width) <= wp->winrect.left || |
(rooty + height) <= wp->winrect.top) |
return; |
|
#if 0 |
/* |
* The area does overlap the window. See if the area overlaps |
* the border, and if so, then redraw it. |
*/ |
if (rootx < wp->winrect.left || rooty < wp->winrect.top || |
(rootx + width) > wp->winrect.right || |
(rooty + height) > wp->winrect.bottom) |
MwDrawBorder(wp); |
#endif |
|
/* |
* Now clear the window itself in the specified area, |
* which might cause an exposure event. |
*/ |
MwClearWindow(wp, rootx - wp->winrect.left, rooty - wp->winrect.top, |
width, height, TRUE); |
|
/* |
* Now do the same for all the children. |
*/ |
for (wp = wp->children; wp; wp = wp->siblings) |
MwExposeArea(wp, rootx, rooty, width, height); |
} |
/wingdi.c
0,0 → 1,1438
/* |
* Copyright (c) 1999, 2000, 2001 Greg Haerr <greg@censoft.com> |
* |
* Win32 API upper level graphics drawing routines |
*/ |
#include "windows.h" |
#include "wintern.h" |
#include "device.h" |
#include <stdlib.h> |
#include <string.h> |
|
#define MAXSYSCOLORS 29 /* # of COLOR_* system colors*/ |
#define MAXSTOCKOBJECTS 18 /* # of stock objects*/ |
|
#if ERASEMOVE |
BOOL mwERASEMOVE = TRUE; /* default XORMOVE repaint algorithm*/ |
#else |
BOOL mwERASEMOVE = FALSE; /* default ERASEMOVE repaint algorithm*/ |
#endif |
|
/* cast a pointer to an integer*/ |
#if DOS_TURBOC |
#define PTRTOINT unsigned long |
#else |
#define PTRTOINT unsigned int |
#endif |
|
static HDC cliphdc; /* current window cliprects*/ |
|
/* default bitmap for new DCs*/ |
static MWBITMAPOBJ default_bitmap = { |
{OBJ_BITMAP, TRUE}, 1, 1, 1, 1, 1, 1 |
}; |
|
static BOOL MwExtTextOut(HDC hdc, int x, int y, UINT fuOptions, |
CONST RECT *lprc, LPCVOID lpszString, UINT cbCount, |
CONST INT *lpDx, int flags); |
static int MwDrawText(HDC hdc, LPCVOID lpString, int nCount, LPRECT lpRect, |
UINT uFormat, int flags); |
|
HDC WINAPI |
GetDCEx(HWND hwnd,HRGN hrgnClip,DWORD flags) |
{ |
HDC hdc; |
|
if(!hwnd) /* handle NULL hwnd => desktop*/ |
hwnd = rootwp; |
|
/* handle private DC's*/ |
if(hwnd->owndc && !(flags & DCX_WINDOW)) |
return hwnd->owndc; |
|
/* add caching?*/ |
hdc = GdItemNew(struct hdc); |
if(!hdc) |
return NULL; |
|
hdc->psd = &scrdev; |
hdc->hwnd = hwnd; |
if(flags & DCX_DEFAULTCLIP) { |
flags &= ~DCX_DEFAULTCLIP; |
if(hwnd->style & WS_CLIPSIBLINGS) |
flags |= DCX_CLIPSIBLINGS; |
if(hwnd->style & WS_CLIPCHILDREN) |
flags |= DCX_CLIPCHILDREN; |
} |
hdc->flags = flags; |
hdc->bkmode = OPAQUE; |
hdc->textalign = TA_LEFT | TA_TOP | TA_NOUPDATECP; |
hdc->bkcolor = RGB(255, 255, 255); /* WHITE*/ |
hdc->textcolor = RGB(0, 0, 0); /* BLACK*/ |
hdc->brush = (MWBRUSHOBJ *)GetStockObject(WHITE_BRUSH); |
hdc->pen = (MWPENOBJ *)GetStockObject(BLACK_PEN); |
hdc->font = (MWFONTOBJ *)GetStockObject(SYSTEM_FONT); |
#if UPDATEREGIONS |
if(hrgnClip) { |
/* make a copy of passed region*/ |
hdc->region = (MWRGNOBJ *)CreateRectRgn(0, 0, 0, 0); |
CombineRgn((HRGN)hdc->region, hrgnClip, NULL, RGN_COPY); |
} |
#endif |
|
/* make default bitmap compatible with scrdev |
* otherwise problems occur later because selecting |
* in the default bitmap overwrite planes and bpp |
* in a memory dc, and thus it becomes incompatible |
* with scrdev. |
*/ |
default_bitmap.planes = scrdev.planes; |
default_bitmap.bpp = scrdev.bpp; |
hdc->bitmap = &default_bitmap; |
|
hdc->drawmode = R2_COPYPEN; |
hdc->pt.x = 0; |
hdc->pt.y = 0; |
|
/* assign private DC if CS_OWNDC and not WindowDC*/ |
if((hwnd->pClass->style & CS_OWNDC) && !(flags & DCX_WINDOW)) { |
/* must exclude update region due to BeginPaint GetDCEx call*/ |
hdc->flags |= DCX_EXCLUDEUPDATE; |
hwnd->owndc = hdc; |
} |
|
return hdc; |
} |
|
HDC WINAPI |
GetDC(HWND hwnd) |
{ |
/* |
* Exclude update regions when drawing with GetDC. |
* This is required because some programs use GetDC |
* when painting outside of BeginPaint/EndPaint, and |
* the update region is empty then. |
*/ |
return GetDCEx(hwnd, NULL, DCX_DEFAULTCLIP|DCX_EXCLUDEUPDATE); |
} |
|
HDC WINAPI |
GetWindowDC(HWND hwnd) |
{ |
/* |
* Exclude update region for now, since we |
* don't keep track of non-client update regions yet |
*/ |
return GetDCEx(hwnd, NULL,DCX_WINDOW|DCX_DEFAULTCLIP|DCX_EXCLUDEUPDATE); |
} |
|
/* free a DC allocated from GetDC*/ |
int WINAPI |
ReleaseDC(HWND hwnd, HDC hdc) |
{ |
/* don't delete a memory dc on release*/ |
if(!hdc || (hdc->psd->flags&PSF_MEMORY)) |
return 0; |
|
if(hdc == cliphdc) |
cliphdc = NULL; |
|
/* handle private DC's*/ |
if(hdc->hwnd->owndc && !(hdc->flags & DCX_WINDOW)) |
return 1; |
|
DeleteObject((HBRUSH)hdc->brush); |
DeleteObject((HPEN)hdc->pen); |
#if 0 /* don't delete font resources on ReleaseDC... use DeleteObject instead*/ |
DeleteObject((HFONT)hdc->font); |
#endif |
DeleteObject((HRGN)hdc->region); |
/* |
* We can only select a bitmap in a memory DC, |
* so bitmaps aren't released except through DeleteDC. |
*/ |
DeleteObject((HBITMAP)hdc->bitmap); |
GdItemFree(hdc); |
return 1; |
} |
|
/* free a dc allocated from CreateCompatibleDC*/ |
BOOL WINAPI |
DeleteDC(HDC hdc) |
{ |
/* don't delete a normal dc, only memory dc's*/ |
if(!hdc || !(hdc->psd->flags&PSF_MEMORY)) |
return 0; |
|
/* free allocated memory screen device*/ |
hdc->psd->FreeMemGC(hdc->psd); |
|
/* make it look like a GetDC dc, and free it*/ |
hdc->psd = &scrdev; |
return ReleaseDC(NULL, hdc); |
} |
|
void |
MwPaintNCArea(HWND hwnd) |
{ |
SendMessage(hwnd, WM_NCPAINT, 0, 0L); |
|
/* for now, we always paint NC scrollbar areas*/ |
MwPaintNCScrollbars(hwnd, NULL); |
} |
|
HDC WINAPI |
BeginPaint(HWND hwnd, LPPAINTSTRUCT lpPaint) |
{ |
HDC hdc; |
|
/* first update non-client area*/ |
if(mwforceNCpaint || hwnd->paintNC != mwpaintNC) { |
MwPaintNCArea(hwnd); |
hwnd->paintNC = mwpaintNC; |
} |
|
/* If ERASEMOVE: |
* Don't allow windows to repaint while user is moving |
* a window. Instead, just erase backgrounds |
* and indicate delayed painting required, which |
* will occur after user completes window move. |
*/ |
if(mwERASEMOVE && dragwp) { |
hdc = NULL; |
lpPaint->fErase = !DefWindowProc(hwnd, WM_ERASEBKGND, 0, 0L); |
hwnd->gotPaintMsg = PAINT_DELAYPAINT; |
} else { |
HideCaret(hwnd); |
|
/* FIXME: mdemo requires update excluded or draw errors occur*/ |
hdc = GetDCEx(hwnd, NULL, DCX_DEFAULTCLIP |
|DCX_EXCLUDEUPDATE); /* FIXME - bug*/ |
|
/* erase client background*/ |
lpPaint->fErase = !SendMessage(hwnd, WM_ERASEBKGND, (WPARAM)hdc, |
0L); |
} |
lpPaint->hdc = hdc; |
|
GetUpdateRect(hwnd, &lpPaint->rcPaint, FALSE); |
return hdc; |
} |
|
BOOL WINAPI |
EndPaint(HWND hwnd, CONST PAINTSTRUCT *lpPaint) |
{ |
ReleaseDC(hwnd, lpPaint->hdc); |
#if UPDATEREGIONS |
/* don't clear update region until done dragging*/ |
if(mwERASEMOVE && !dragwp) |
GdSetRectRegion(hwnd->update, 0, 0, 0, 0); |
#endif |
ShowCaret(hwnd); |
return TRUE; |
} |
|
COLORREF WINAPI |
SetTextColor(HDC hdc, COLORREF crColor) |
{ |
COLORREF oldtextcolor; |
|
if (!hdc) |
return CLR_INVALID; |
oldtextcolor = hdc->textcolor; |
hdc->textcolor = (MWCOLORVAL)crColor; |
return oldtextcolor; |
} |
|
COLORREF WINAPI |
SetBkColor(HDC hdc, COLORREF crColor) |
{ |
COLORREF oldbkcolor; |
|
if (!hdc) |
return CLR_INVALID; |
oldbkcolor = hdc->bkcolor; |
hdc->bkcolor = crColor; |
return oldbkcolor; |
} |
|
int WINAPI |
SetBkMode(HDC hdc, int iBkMode) |
{ |
int oldbkmode; |
|
if(!hdc) |
return 0; |
oldbkmode = hdc->bkmode; |
hdc->bkmode = iBkMode; |
return oldbkmode; |
} |
|
UINT WINAPI |
SetTextAlign(HDC hdc, UINT fMode) |
{ |
UINT oldfMode; |
|
if(!hdc) |
return GDI_ERROR; |
oldfMode = hdc->textalign; |
hdc->textalign = fMode; |
return oldfMode; |
} |
|
/* FIXME: releasing a DC does NOT change back the drawing mode!*/ |
int WINAPI |
SetROP2(HDC hdc, int fnDrawMode) |
{ |
int newmode, oldmode; |
|
if(!hdc || (fnDrawMode <= 0 || fnDrawMode > R2_LAST)) |
return 0; |
|
oldmode = hdc->drawmode; |
newmode = fnDrawMode - 1; /* map to MWMODE_xxx*/ |
hdc->drawmode = newmode; |
GdSetMode(newmode); |
return oldmode; |
} |
|
/* |
* Setup clip region from device context's associated window or bitmap. |
* Memory DC's are always associated with the desktop window, and are |
* always visible. Return the DC's hwnd if window is visible. |
*/ |
HWND |
MwPrepareDC(HDC hdc) |
{ |
HWND hwnd; |
|
if(!hdc || !hdc->hwnd) |
return NULL; |
|
hwnd = hdc->hwnd; |
if (hwnd->unmapcount) |
return NULL; |
|
/* |
* If the window is not the currently clipped one, then |
* make it the current one and define its clip rectangles. |
*/ |
if(hdc != cliphdc) { |
/* clip memory dc's to the bitmap size*/ |
if(hdc->psd->flags&PSF_MEMORY) { |
#if DYNAMICREGIONS |
GdSetClipRegion(hdc->psd, |
GdAllocRectRegion(0, 0, hdc->psd->xvirtres, |
hdc->psd->yvirtres)); |
#else |
static MWCLIPRECT crc = {0, 0, 0, 0}; |
|
crc.width = hdc->psd->xvirtres; |
crc.height = hdc->psd->yvirtres; |
GdSetClipRects(hdc->psd, 1, &crc); |
#endif |
} else MwSetClipWindow(hdc); |
cliphdc = hdc; |
} |
|
return hwnd; |
} |
|
/* return RGB value at specified coordinates*/ |
COLORREF WINAPI |
GetPixel(HDC hdc, int x, int y) |
{ |
HWND hwnd; |
POINT pt; |
MWPIXELVAL pixel; |
MWPALENTRY rgb; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return CLR_INVALID; |
pt.x = x; |
pt.y = y; |
if(MwIsClientDC(hdc)) |
ClientToScreen(hwnd, &pt); |
|
/* read pixel value*/ |
GdReadArea(hdc->psd, pt.x, pt.y, 1, 1, &pixel); |
|
switch(hdc->psd->pixtype) { |
case MWPF_TRUECOLOR0888: |
case MWPF_TRUECOLOR888: |
/* create RGB colorval from 8/8/8 pixel*/ |
return PIXEL888TOCOLORVAL(pixel); |
|
case MWPF_TRUECOLOR565: |
/* create RGB colorval from 5/6/5 pixel*/ |
return PIXEL565TOCOLORVAL(pixel); |
|
case MWPF_TRUECOLOR555: |
/* create RGB colorval from 5/5/5 pixel*/ |
return PIXEL555TOCOLORVAL(pixel); |
|
case MWPF_TRUECOLOR332: |
/* create RGB colorval from 3/3/2 pixel*/ |
return PIXEL332TOCOLORVAL(pixel); |
|
case MWPF_PALETTE: |
if(GdGetPalette(hdc->psd, pixel, 1, &rgb)) |
return RGB(rgb.r, rgb.g, rgb.b); |
} |
return CLR_INVALID; |
} |
|
COLORREF WINAPI |
SetPixel(HDC hdc, int x, int y, COLORREF crColor) |
{ |
HWND hwnd; |
POINT pt; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return 0; /* doesn't return previous color*/ |
pt.x = x; |
pt.y = y; |
if(MwIsClientDC(hdc)) |
ClientToScreen(hwnd, &pt); |
|
/* draw point in passed color*/ |
GdSetForeground(GdFindColor(crColor)); |
GdPoint(hdc->psd, pt.x, pt.y); |
return 0; /* doesn't return previous color*/ |
} |
|
BOOL WINAPI |
MoveToEx(HDC hdc, int x, int y, LPPOINT lpPoint) |
{ |
if(!hdc) |
return FALSE; |
if(lpPoint) |
*lpPoint = hdc->pt; |
hdc->pt.x = x; |
hdc->pt.y = y; |
return TRUE; |
} |
|
BOOL WINAPI |
LineTo(HDC hdc, int x, int y) |
{ |
HWND hwnd; |
POINT beg, end; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return FALSE; |
|
beg.x = hdc->pt.x; |
beg.y = hdc->pt.y; |
end.x = x; |
end.y = y; |
if(MwIsClientDC(hdc)) { |
ClientToScreen(hwnd, &beg); |
ClientToScreen(hwnd, &end); |
} |
|
/* draw line in current pen color*/ |
if(hdc->pen->style != PS_NULL) { |
GdSetForeground(GdFindColor(hdc->pen->color)); |
/* don't draw last point*/ |
GdLine(hdc->psd, beg.x, beg.y, end.x, end.y, FALSE); |
} |
hdc->pt.x = x; |
hdc->pt.y = y; |
return TRUE; |
} |
|
/* draw line segments by connecting passed points*/ |
BOOL WINAPI |
Polyline(HDC hdc, CONST POINT *lppt, int cPoints) |
{ |
HWND hwnd; |
POINT beg, end; |
|
if(cPoints <= 1) |
return FALSE; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return FALSE; |
|
if(hdc->pen->style == PS_NULL) |
return TRUE; |
|
/* draw line in current pen color*/ |
GdSetForeground(GdFindColor(hdc->pen->color)); |
|
beg = *lppt++; |
if(MwIsClientDC(hdc)) |
ClientToScreen(hwnd, &beg); |
while(--cPoints > 0) { |
end = *lppt++; |
if(MwIsClientDC(hdc)) |
ClientToScreen(hwnd, &end); |
|
/* don't draw last point*/ |
GdLine(hdc->psd, beg.x, beg.y, end.x, end.y, FALSE); |
|
beg = end; |
} |
return TRUE; |
} |
|
BOOL WINAPI |
Rectangle(HDC hdc, int nLeft, int nTop, int nRight, int nBottom) |
{ |
HWND hwnd; |
RECT rc; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return FALSE; |
|
SetRect(&rc, nLeft, nTop, nRight, nBottom); |
if(MwIsClientDC(hdc)) |
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2); |
|
/* draw rectangle in current pen color*/ |
if(hdc->pen->style != PS_NULL) { |
GdSetForeground(GdFindColor(hdc->pen->color)); |
GdRect(hdc->psd, rc.left, rc.top, |
rc.right - rc.left, rc.bottom - rc.top); |
} |
|
/* fill rectangle in current brush color*/ |
if(hdc->brush->style != BS_NULL) { |
InflateRect(&rc, -1, -1); |
GdSetForeground(GdFindColor(hdc->brush->color)); |
GdFillRect(hdc->psd, rc.left, rc.top, rc.right - rc.left, |
rc.bottom - rc.top); |
} |
|
return TRUE; |
} |
|
BOOL WINAPI |
Ellipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect) |
{ |
HWND hwnd; |
int rx, ry; |
RECT rc; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return FALSE; |
|
SetRect(&rc, nLeftRect, nTopRect, nRightRect, nBottomRect); |
if(MwIsClientDC(hdc)) |
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2); |
|
rx = (rc.right - rc.left)/2 - 1; |
ry = (rc.bottom - rc.top)/2 - 1; |
rc.left += rx; |
rc.top += ry; |
|
/* fill ellipse in current brush color*/ |
if(hdc->brush->style != BS_NULL) { |
InflateRect(&rc, -1, -1); |
GdSetForeground(GdFindColor(hdc->brush->color)); |
GdEllipse(hdc->psd, rc.left, rc.top, rx, ry, TRUE); |
} |
|
/* draw ellipse outline in current pen color*/ |
if(hdc->pen->style != PS_NULL) { |
GdSetForeground(GdFindColor(hdc->pen->color)); |
GdEllipse(hdc->psd, rc.left, rc.top, rx, ry, FALSE); |
} |
|
return TRUE; |
} |
|
static void |
dopiearc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, |
int ax, int ay, int bx, int by, int type) |
{ |
HWND hwnd; |
int rx, ry; |
RECT rc, rc2; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return; |
|
SetRect(&rc, nLeftRect, nTopRect, nRightRect, nBottomRect); |
SetRect(&rc2, ax, ay, bx, by); |
if(MwIsClientDC(hdc)) { |
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2); |
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc2, 2); |
} |
|
rx = (rc.right - rc.left)/2 - 1; |
ry = (rc.bottom - rc.top)/2 - 1; |
rc.left += rx; |
rc.top += ry; |
|
/* fill ellipse in current brush color*/ |
if(hdc->brush->style != BS_NULL && type == MWPIE) { |
GdSetForeground(GdFindColor(hdc->brush->color)); |
GdArc(hdc->psd, rc.left, rc.top, rx, ry, |
rc2.left, rc2.top, rc2.right, rc2.bottom, MWPIE); |
} |
|
/* draw ellipse outline in current pen color*/ |
if(hdc->pen->style != PS_NULL) { |
GdSetForeground(GdFindColor(hdc->pen->color)); |
if(type == MWPIE) |
type = MWARC; /* MWARCOUTLINE?*/ |
GdArc(hdc->psd, rc.left, rc.top, rx, ry, |
rc2.left, rc2.top, rc2.right, rc2.bottom, type); |
} |
} |
|
BOOL WINAPI |
Arc(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, |
int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc) |
{ |
dopiearc(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, |
nXStartArc, nYStartArc, nXEndArc, nYEndArc, MWARC); |
return TRUE; |
} |
|
BOOL WINAPI |
Pie(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, |
int nXRadial1, int nYRadial1, int nXRadial2, int nYRadial2) |
{ |
dopiearc(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect, |
nXRadial1, nYRadial1, nXRadial2, nYRadial2, MWPIE); |
return TRUE; |
} |
|
BOOL WINAPI |
Polygon(HDC hdc, CONST POINT *lpPoints, int nCount) |
{ |
HWND hwnd; |
int i; |
LPPOINT pp, ppAlloc = NULL; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return FALSE; |
|
if(MwIsClientDC(hdc)) { |
/* convert points to client coords*/ |
ppAlloc = (LPPOINT)malloc(nCount * sizeof(POINT)); |
if(!ppAlloc) |
return FALSE; |
memcpy(ppAlloc, lpPoints, nCount*sizeof(POINT)); |
pp = ppAlloc; |
for(i=0; i<nCount; ++i) |
ClientToScreen(hwnd, pp++); |
pp = ppAlloc; |
} else pp = (LPPOINT)lpPoints; |
|
/* fill polygon in current brush color*/ |
if(hdc->brush->style != BS_NULL) { |
GdSetForeground(GdFindColor(hdc->brush->color)); |
GdFillPoly(hdc->psd, nCount, pp); |
} |
|
/* draw polygon outline in current pen color*/ |
if(hdc->pen->style != PS_NULL) { |
GdSetForeground(GdFindColor(hdc->pen->color)); |
GdPoly(hdc->psd, nCount, pp); |
} |
|
if(ppAlloc) |
free(ppAlloc); |
return TRUE; |
} |
|
/* draw nCount polygons*/ |
BOOL WINAPI |
PolyPolygon(HDC hdc, CONST POINT *lpPoints, LPINT lpPolyCounts, int nCount) |
{ |
while(--nCount >= 0) { |
if (!Polygon(hdc, lpPoints, *lpPolyCounts)) |
return FALSE; |
lpPoints += *lpPolyCounts++; |
} |
return TRUE; |
} |
|
int WINAPI |
FillRect(HDC hdc, CONST RECT *lprc, HBRUSH hbr) |
{ |
HWND hwnd; |
RECT rc; |
MWBRUSHOBJ * obr = (MWBRUSHOBJ *)hbr; |
COLORREF crFill; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd || !obr) |
return FALSE; |
|
if(!lprc) { |
if(MwIsClientDC(hdc)) |
GetClientRect(hwnd, &rc); |
else |
GetWindowRect(hwnd, &rc); |
lprc = &rc; |
} else |
rc = *lprc; |
if(MwIsClientDC(hdc)) |
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2); |
|
/* handle COLOR_xxx + 1 passed as HBRUSH*/ |
if((PTRTOINT)obr <= MAXSYSCOLORS) |
crFill = GetSysColor((int)obr-1); |
else { |
/* get color from passed HBRUSH*/ |
if(obr->style == BS_NULL) |
return TRUE; |
crFill = obr->color; |
} |
|
/* fill rectangle in passed brush color*/ |
GdSetForeground(GdFindColor(crFill)); |
GdFillRect(hdc->psd, rc.left, rc.top, |
rc.right - rc.left, rc.bottom - rc.top); |
return TRUE; |
} |
|
/* ascii*/ |
BOOL WINAPI |
TextOut(HDC hdc, int x, int y, LPCSTR lpszString, int cbString) |
{ |
/* kaffe port wants MWTF_UTF8 here...*/ |
return MwExtTextOut(hdc, x, y, 0, NULL, lpszString, cbString, NULL, |
MWTF_ASCII); |
} |
|
/* ascii*/ |
BOOL WINAPI |
ExtTextOut(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc, |
LPCSTR lpszString, UINT cbCount, CONST INT *lpDx) |
{ |
return MwExtTextOut(hdc, x, y, fuOptions, lprc, lpszString, |
cbCount, lpDx, MWTF_ASCII); |
} |
|
/* unicode*/ |
BOOL WINAPI |
ExtTextOutW(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc, |
LPCWSTR lpszString, UINT cbCount, CONST INT *lpDx) |
{ |
return MwExtTextOut(hdc, x, y, fuOptions, lprc, lpszString, |
cbCount, lpDx, MWTF_UC16); |
} |
|
/* internal version of ExtTextOut, passed flags for text data type*/ |
static BOOL |
MwExtTextOut(HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc, |
LPCVOID lpszString, UINT cbCount, CONST INT *lpDx, int flags) |
{ |
HWND hwnd; |
POINT pt; |
RECT rc; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd) |
return FALSE; |
|
pt.x = x; |
pt.y = y; |
if(MwIsClientDC(hdc)) |
ClientToScreen(hwnd, &pt); |
|
/* optionally fill passed rectangle*/ |
if(lprc && (fuOptions&ETO_OPAQUE)) { |
rc = *lprc; |
if(MwIsClientDC(hdc)) |
MapWindowPoints(hwnd, NULL, (LPPOINT)&rc, 2); |
|
/* fill rectangle with current background color*/ |
GdSetForeground(GdFindColor(hdc->bkcolor)); |
GdFillRect(hdc->psd, rc.left, rc.top, rc.right - rc.left, |
rc.bottom - rc.top); |
GdSetUseBackground(FALSE); |
} else { |
/* use current background mode for text background draw*/ |
GdSetUseBackground(hdc->bkmode == OPAQUE? TRUE: FALSE); |
/* always set background color in case GdArea is |
* used to draw, which compares gr_foreground != gr_background |
* if gr_usebg is false... |
*/ |
/*if(hdc->bkmode == OPAQUE)*/ |
GdSetBackground(GdFindColor(hdc->bkcolor)); |
} |
|
/* nyi: lpDx*/ |
|
/* draw text in current text foreground and background color*/ |
GdSetForeground(GdFindColor(hdc->textcolor)); |
GdSetFont(hdc->font->pfont); |
|
/* this whole text alignment thing needs rewriting*/ |
if((hdc->textalign & TA_BASELINE) == TA_BASELINE) { |
/* this is not right... changed for kaffe port |
flags |= MWTF_TOP; |
*/ |
flags |= MWTF_BASELINE; |
} else if(hdc->textalign & TA_BOTTOM) { |
MWCOORD ph, pw, pb; |
|
if(lprc) |
pt.y += lprc->bottom - lprc->top; |
else { |
GdGetTextSize(hdc->font->pfont, lpszString, cbCount, |
&pw, &ph, &pb, flags); |
pt.y += ph; |
} |
flags |= MWTF_BOTTOM; |
} else |
flags |= MWTF_TOP; |
GdText(hdc->psd, pt.x, pt.y, lpszString, cbCount, flags); |
|
return TRUE; |
} |
|
/* ascii*/ |
int WINAPI |
DrawTextA(HDC hdc, LPCSTR lpString, int nCount, LPRECT lpRect, UINT uFormat) |
{ |
return MwDrawText(hdc, lpString, nCount, lpRect, uFormat, MWTF_ASCII); |
} |
|
/* unicode*/ |
int WINAPI |
DrawTextW(HDC hdc, LPCWSTR lpString, int nCount, LPRECT lpRect, UINT uFormat) |
{ |
return MwDrawText(hdc, lpString, nCount, lpRect, uFormat, MWTF_UC16); |
} |
|
/* note: many DT_x aren't implemented in this function*/ |
/* internal version of DrawText, passed flags for text data type*/ |
static int |
MwDrawText(HDC hdc, LPCVOID lpString, int nCount, LPRECT lpRect, UINT uFormat, |
int flags) |
{ |
MWCOORD x, y, width, height, baseline; |
|
if(nCount == -1) |
nCount = strlen(lpString); |
|
if(uFormat & (DT_CALCRECT|DT_CENTER|DT_RIGHT)) { |
if(!hdc) |
return 0; |
GdGetTextSize(hdc->font->pfont, lpString, nCount, |
&width, &height, &baseline, MWTF_ASCII); |
} |
x = lpRect->left; |
y = lpRect->top; |
|
if(uFormat & DT_CALCRECT) { |
lpRect->right = x + width; |
lpRect->bottom = y + height; |
return height; |
} |
|
if(uFormat & DT_CENTER) |
x = (lpRect->left + lpRect->right - width) / 2; |
else if(uFormat & DT_RIGHT) |
x += lpRect->right - width; |
|
/* draw text at DT_TOP using current fg, bg and bkmode*/ |
MwExtTextOut(hdc, x, y, 0, NULL, lpString, nCount, NULL, flags); |
return height; |
} |
|
/* Microwindows only*/ |
BOOL WINAPI |
DrawDIB(HDC hdc,int x,int y,PMWIMAGEHDR pimage) |
{ |
HWND hwnd; |
POINT pt; |
|
hwnd = MwPrepareDC(hdc); |
if(!hwnd || !pimage) |
return FALSE; |
pt.x = x; |
pt.y = y; |
if(MwIsClientDC(hdc)) |
ClientToScreen(hwnd, &pt); |
|
GdDrawImage(hdc->psd, pt.x, pt.y, pimage); |
return TRUE; |
} |
|
/* define color scheme: A (tan), B (winstd) or C (old)*/ |
#if ELKS |
#define B |
#else |
#define A |
#endif |
|
#define A_RGB(r,g,b) |
#define B_RGB(r,g,b) |
#define C_RGB(r,g,b) |
|
#ifdef A |
#undef A_RGB |
#define A_RGB(r,g,b) RGB(r,g,b), |
#endif |
#ifdef B |
#undef B_RGB |
#define B_RGB(r,g,b) RGB(r,g,b), |
#endif |
#ifdef C |
#undef C_RGB |
#define C_RGB(r,g,b) RGB(r,g,b), |
#endif |
|
static COLORREF sysColors[MAXSYSCOLORS] = { |
RGB(192, 192, 192), /* COLOR_SCROLLBAR 0*/ |
RGB( 0, 128, 128), /* COLOR_BACKGROUND */ |
A_RGB(128, 0, 0) /* COLOR_ACTIVECAPTION */ |
B_RGB(128, 0, 128) /* COLOR_ACTIVECAPTION */ |
C_RGB(128, 0, 128) /* COLOR_ACTIVECAPTION */ |
A_RGB(162, 141, 104) /* COLOR_INACTIVECAPTION */ |
B_RGB(128, 128, 128) /* COLOR_INACTIVECAPTION */ |
C_RGB( 0, 64, 128) /* COLOR_INACTIVECAPTION */ |
RGB(192, 192, 192), /* COLOR_MENU */ |
RGB(255, 255, 255), /* COLOR_WINDOW 5*/ |
RGB( 0, 0, 0), /* COLOR_WINDOWFRAME */ |
RGB( 0, 0, 0), /* COLOR_MENUTEXT */ |
RGB( 0, 0, 0), /* COLOR_WINDOWTEXT */ |
RGB(255, 255, 255), /* COLOR_CAPTIONTEXT */ |
RGB(192, 192, 192), /* COLOR_ACTIVEBORDER 10*/ |
RGB(192, 192, 192), /* COLOR_INACTIVEBORDER */ |
RGB(128, 128, 128), /* COLOR_APPWORKSPACE */ |
RGB(128, 0, 0), /* COLOR_HIGHLIGHT */ |
RGB(255, 255, 255), /* COLOR_HIGHLIGHTTEXT */ |
A_RGB(213, 204, 187) /* COLOR_BTNFACE 15*/ |
B_RGB(192, 192, 192) /* COLOR_BTNFACE 15*/ |
C_RGB(160, 160, 160) /* COLOR_BTNFACE 15*/ |
A_RGB(162, 141, 104) /* COLOR_BTNSHADOW */ |
B_RGB(128, 128, 128) /* COLOR_BTNSHADOW */ |
C_RGB(128, 128, 128) /* COLOR_BTNSHADOW */ |
RGB( 64, 64, 64), /* COLOR_GRAYTEXT */ |
RGB( 0, 0, 0), /* COLOR_BTNTEXT */ |
RGB(192, 192, 192), /* COLOR_INACTIVECAPTIONTEXT */ |
A_RGB(234, 230, 221) /* COLOR_BTNHIGHLIGHT 20*/ |
B_RGB(255, 255, 255) /* COLOR_BTNHIGHLIGHT 20*/ |
C_RGB(223, 223, 223) /* COLOR_BTNHIGHLIGHT 20*/ |
RGB( 0, 0, 0), /* COLOR_3DDKSHADOW */ |
A_RGB(213, 204, 187) /* COLOR_3DLIGHT */ |
B_RGB(223, 223, 223) /* COLOR_3DLIGHT */ |
C_RGB(192, 192, 192) /* COLOR_3DLIGHT */ |
RGB( 0, 0, 0), /* COLOR_INFOTEXT */ |
RGB(225, 255, 255), /* COLOR_INFOBK */ |
RGB(184, 180, 184), /* COLOR_ALTERNATEBTNFACE 25*/ |
RGB( 0, 0, 255), /* COLOR_HOTLIGHT */ |
RGB( 16, 132, 208), /* COLOR_GRADIENTACTIVECAPTION */ |
RGB(184, 180, 184) /* COLOR_GRADIENTINACTIVECAPTION 28*/ |
}; |
|
DWORD WINAPI |
GetSysColor(int nIndex) |
{ |
if(nIndex >= 0 && nIndex < MAXSYSCOLORS) |
return sysColors[nIndex]; |
return 0; |
} |
|
COLORREF WINAPI |
SetSysColor(int nIndex, COLORREF crColor) /* Microwindows only*/ |
{ |
COLORREF oldColor; |
|
if(nIndex >= 0 && nIndex < MAXSYSCOLORS) { |
oldColor = sysColors[nIndex]; |
sysColors[nIndex] = crColor; |
return oldColor; |
} |
return 0; |
} |
|
static MWBRUSHOBJ OBJ_WHITE_BRUSH = { |
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(255, 255, 255) |
}; |
|
static MWBRUSHOBJ OBJ_LTGRAY_BRUSH = { |
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(192, 192, 192) |
}; |
|
static MWBRUSHOBJ OBJ_GRAY_BRUSH = { |
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(128, 128, 128) |
}; |
|
static MWBRUSHOBJ OBJ_DKGRAY_BRUSH = { |
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(32, 32, 32) |
}; |
|
static MWBRUSHOBJ OBJ_BLACK_BRUSH = { |
{OBJ_BRUSH, TRUE}, BS_SOLID, RGB(0, 0, 0) |
}; |
|
static MWBRUSHOBJ OBJ_NULL_BRUSH = { |
{OBJ_BRUSH, TRUE}, BS_NULL, RGB(0, 0, 0) |
}; |
|
static MWPENOBJ OBJ_WHITE_PEN = { |
{OBJ_PEN, TRUE}, PS_SOLID, RGB(255, 255, 255) |
}; |
|
static MWPENOBJ OBJ_BLACK_PEN = { |
{OBJ_PEN, TRUE}, PS_SOLID, RGB(0, 0, 0) |
}; |
|
static MWPENOBJ OBJ_NULL_PEN = { |
{OBJ_PEN, TRUE}, PS_NULL, RGB(0, 0, 0) |
}; |
|
static MWFONTOBJ OBJ_OEM_FIXED_FONT = { |
{OBJ_FONT, TRUE}, NULL, MWFONT_OEM_FIXED |
}; |
|
static MWFONTOBJ OBJ_ANSI_FIXED_FONT = { |
{OBJ_FONT, TRUE}, NULL, MWFONT_SYSTEM_FIXED |
}; |
|
static MWFONTOBJ OBJ_ANSI_VAR_FONT = { |
{OBJ_FONT, TRUE}, NULL, MWFONT_SYSTEM_VAR |
}; |
|
static MWFONTOBJ OBJ_SYSTEM_FONT = { |
{OBJ_FONT, TRUE}, NULL, MWFONT_SYSTEM_VAR |
}; |
|
static MWFONTOBJ OBJ_DEVICE_DEFAULT_FONT = { |
{OBJ_FONT, TRUE}, NULL, MWFONT_OEM_FIXED |
}; |
|
static MWFONTOBJ OBJ_SYSTEM_FIXED_FONT = { |
{OBJ_FONT, TRUE}, NULL, MWFONT_SYSTEM_FIXED |
}; |
|
static MWFONTOBJ OBJ_DEFAULT_GUI_FONT = { |
{OBJ_FONT, TRUE}, NULL, MWFONT_GUI_VAR |
}; |
|
static struct hgdiobj *stockObjects[MAXSTOCKOBJECTS] = { |
(struct hgdiobj *)&OBJ_WHITE_BRUSH, /* WHITE_BRUSH*/ |
(struct hgdiobj *)&OBJ_LTGRAY_BRUSH, /* LTGRAY_BRUSH*/ |
(struct hgdiobj *)&OBJ_GRAY_BRUSH, /* GRAY_BRUSH*/ |
(struct hgdiobj *)&OBJ_DKGRAY_BRUSH, /* DKGRAY_BRUSH*/ |
(struct hgdiobj *)&OBJ_BLACK_BRUSH, /* BLACK_BRUSH*/ |
(struct hgdiobj *)&OBJ_NULL_BRUSH, /* NULL_BRUSH*/ |
(struct hgdiobj *)&OBJ_WHITE_PEN, /* WHITE_PEN*/ |
(struct hgdiobj *)&OBJ_BLACK_PEN, /* BLACK_PEN*/ |
(struct hgdiobj *)&OBJ_NULL_PEN, /* NULL_PEN*/ |
(struct hgdiobj *)NULL, |
(struct hgdiobj *)&OBJ_OEM_FIXED_FONT, /* OEM_FIXED_FONT*/ |
(struct hgdiobj *)&OBJ_ANSI_FIXED_FONT, /* ANSI_FIXED_FONT*/ |
(struct hgdiobj *)&OBJ_ANSI_VAR_FONT, /* ANSI_VAR_FONT*/ |
(struct hgdiobj *)&OBJ_SYSTEM_FONT, /* SYSTEM_FONT*/ |
(struct hgdiobj *)&OBJ_DEVICE_DEFAULT_FONT, /* DEVICE_DEFAULT_FONT*/ |
(struct hgdiobj *)NULL, /* DEFAULT_PALETTE*/ |
(struct hgdiobj *)&OBJ_SYSTEM_FIXED_FONT, /* SYSTEM_FIXED_FONT*/ |
(struct hgdiobj *)&OBJ_DEFAULT_GUI_FONT /* DEFAULT_GUI_FONT*/ |
}; |
|
HGDIOBJ WINAPI |
GetStockObject(int nObject) |
{ |
HGDIOBJ pObj; |
MWFONTOBJ * pFont; |
|
if(nObject >= 0 && nObject < MAXSTOCKOBJECTS) { |
pObj = stockObjects[nObject]; |
|
/* create stock fonts on first access*/ |
if(pObj->hdr.type == OBJ_FONT) { |
pFont = (MWFONTOBJ *)pObj; |
if(pFont->pfont == NULL) { |
pFont->pfont = GdCreateFont(&scrdev, |
pFont->name, 0, NULL); |
} |
return pObj; |
} |
|
/* implement multiple color schemes with |
* standard background brushes... |
*/ |
switch(nObject) { |
case LTGRAY_BRUSH: |
case GRAY_BRUSH: |
((MWBRUSHOBJ *)pObj)->color =GetSysColor(COLOR_BTNFACE); |
break; |
case DKGRAY_BRUSH: |
((MWBRUSHOBJ *)pObj)->color = |
GetSysColor(COLOR_BTNSHADOW); |
break; |
} |
return pObj; |
} |
return NULL; |
} |
|
HGDIOBJ WINAPI |
SelectObject(HDC hdc, HGDIOBJ hObject) |
{ |
HGDIOBJ objOrg; |
MWBITMAPOBJ * pb; |
|
if(!hdc || !hObject) |
return NULL; |
|
switch(hObject->hdr.type) { |
case OBJ_PEN: |
objOrg = (HGDIOBJ)hdc->pen; |
hdc->pen = (MWPENOBJ *)hObject; |
break; |
case OBJ_BRUSH: |
objOrg = (HGDIOBJ)hdc->brush; |
hdc->brush = (MWBRUSHOBJ *)hObject; |
break; |
case OBJ_FONT: |
objOrg = (HGDIOBJ)hdc->font; |
hdc->font = (MWFONTOBJ *)hObject; |
break; |
case OBJ_BITMAP: |
/* must be memory dc to select bitmap*/ |
if(!(hdc->psd->flags&PSF_MEMORY)) |
return NULL; |
objOrg = (HGDIOBJ)hdc->bitmap; |
|
/* setup mem dc for drawing into bitmap*/ |
pb = (MWBITMAPOBJ *)hObject; |
|
/* init memory context*/ |
if (!hdc->psd->MapMemGC(hdc->psd, pb->width, pb->height, |
pb->planes, pb->bpp, pb->linelen, pb->size, |
&pb->bits[0])) |
return NULL; |
|
hdc->bitmap = (MWBITMAPOBJ *)hObject; |
break; |
#if UPDATEREGIONS |
case OBJ_REGION: |
/*objOrg = (HGDIOBJ)hdc->region;*/ |
objOrg = NULL; /* FIXME? hdc->region is destroyed below*/ |
SelectClipRgn(hdc, (HRGN)hObject); |
break; |
#endif |
default: |
return NULL; |
} |
|
return objOrg; |
} |
|
BOOL WINAPI |
DeleteObject(HGDIOBJ hObject) |
{ |
if(!hObject || hObject->hdr.stockobj) |
return FALSE; |
if(hObject->hdr.type == OBJ_FONT) |
GdDestroyFont(((MWFONTOBJ *)hObject)->pfont); |
if(hObject->hdr.type == OBJ_REGION) |
GdDestroyRegion(((MWRGNOBJ *)hObject)->rgn); |
GdItemFree(hObject); |
return TRUE; |
} |
|
#if UPDATEREGIONS |
/* region is passed in client coords (win32 api doc bug)*/ |
int WINAPI |
SelectClipRgn(HDC hdc, HRGN hrgn) |
{ |
return ExtSelectClipRgn(hdc, hrgn, RGN_COPY); |
} |
|
/* |
* Select a user clip region into DC, recalculate final clipregion. |
* Only a copy of the passed region is used. |
*/ |
/* region is passed in client coords (win32 api doc bug)*/ |
int WINAPI |
ExtSelectClipRgn(HDC hdc, HRGN hrgn, int fnMode) |
{ |
HRGN newrgn; |
|
if(!hdc) |
return ERROR; |
if(hdc->region != (MWRGNOBJ *)hrgn) { |
/* combine region if not null*/ |
if(hrgn) { |
newrgn = CreateRectRgn(0, 0, 0, 0); |
|
/* |
* Temporarily convert region from |
* client coords to screen coords, since |
* hwnd->update is kept in screen coords. |
*/ |
OffsetRgn(hrgn, hdc->hwnd->clirect.left, |
hdc->hwnd->clirect.top); |
|
if(fnMode == RGN_COPY) |
CombineRgn(newrgn, hrgn, NULL, fnMode); |
else CombineRgn(newrgn, (HRGN)hdc->region, hrgn,fnMode); |
|
/* convert passed region back to client coords*/ |
OffsetRgn(hrgn, -hdc->hwnd->clirect.left, |
-hdc->hwnd->clirect.top); |
|
|
hrgn = newrgn; |
} |
DeleteObject((HRGN)hdc->region); |
hdc->region = (MWRGNOBJ *)hrgn; |
|
/* force recalc of clipregion*/ |
cliphdc = NULL; |
MwPrepareDC(hdc); |
} |
if(hrgn) |
return ((MWRGNOBJ *)hrgn)->rgn->type; |
return NULLREGION; |
} |
|
/* update region is returned in client coordinates*/ |
int WINAPI |
GetUpdateRgn(HWND hwnd, HRGN hrgn, BOOL bErase) |
{ |
/* FIXME bErase*/ |
if(!hwnd) |
return ERROR; |
|
/* convert internal update region to client coords*/ |
GdOffsetRegion(hwnd->update, -hwnd->clirect.left, -hwnd->clirect.top); |
GdCopyRegion(((MWRGNOBJ *)hrgn)->rgn, hwnd->update); |
GdOffsetRegion(hwnd->update, hwnd->clirect.left, hwnd->clirect.top); |
return hwnd->update->type; |
} |
#endif /* UPDATEREGIONS*/ |
|
/* update rectangle is returned in client coords*/ |
BOOL WINAPI |
GetUpdateRect(HWND hwnd, LPRECT lpRect, BOOL bErase) |
{ |
/* FIXME bErase*/ |
if(!hwnd) |
return FALSE; |
#if UPDATEREGIONS |
if(lpRect) { |
*lpRect = hwnd->update->extents; |
/* convert to client coords*/ |
ScreenToClient(hwnd, (LPPOINT)&lpRect->left); |
ScreenToClient(hwnd, (LPPOINT)&lpRect->right); |
} |
|
/* return TRUE if update region is non-empty*/ |
return hwnd->update->type != NULLREGION; |
#else |
GetClientRect(hwnd, lpRect); |
return TRUE; |
#endif |
} |
|
HBRUSH WINAPI |
CreateSolidBrush(COLORREF crColor) |
{ |
MWBRUSHOBJ *hbr; |
|
hbr = GdItemNew(MWBRUSHOBJ); |
if(!hbr) |
return NULL; |
hbr->hdr.type = OBJ_BRUSH; |
hbr->hdr.stockobj = FALSE; |
hbr->style = BS_SOLID; |
hbr->color = crColor; |
return (HBRUSH)hbr; |
} |
|
HPEN WINAPI |
CreatePen(int nPenStyle, int nWidth, COLORREF crColor) |
{ |
MWPENOBJ *hpen; |
|
/* fix: nWidth > 1*/ |
hpen = GdItemNew(MWPENOBJ); |
if(!hpen) |
return NULL; |
hpen->hdr.type = OBJ_PEN; |
hpen->hdr.stockobj = FALSE; |
hpen->style = nPenStyle; |
hpen->color = crColor; |
return (HPEN)hpen; |
} |
|
HBITMAP WINAPI |
CreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight) |
{ |
MWBITMAPOBJ * hbitmap; |
int size; |
int linelen; |
|
if(!hdc) |
return NULL; |
|
nWidth = MWMAX(nWidth, 1); |
nHeight = MWMAX(nHeight, 1); |
|
/* calc memory allocation size and linelen from width and height*/ |
if(!GdCalcMemGCAlloc(hdc->psd, nWidth, nHeight, 0, 0, &size, &linelen)) |
return NULL; |
|
/* allocate gdi object*/ |
hbitmap = (MWBITMAPOBJ *)GdItemAlloc(sizeof(MWBITMAPOBJ)-1+size); |
if(!hbitmap) |
return NULL; |
hbitmap->hdr.type = OBJ_BITMAP; |
hbitmap->hdr.stockobj = FALSE; |
hbitmap->width = nWidth; |
hbitmap->height = nHeight; |
|
/* create compatible with hdc*/ |
hbitmap->planes = hdc->psd->planes; |
hbitmap->bpp = hdc->psd->bpp; |
hbitmap->linelen = linelen; |
hbitmap->size = size; |
|
return (HBRUSH)hbitmap; |
} |
|
/* return NULL if no driver bitblit available*/ |
HDC WINAPI |
CreateCompatibleDC(HDC hdc) |
{ |
HDC hdcmem; |
PSD psd; |
PSD mempsd; |
|
/* allow NULL hdc to mean screen*/ |
psd = hdc? hdc->psd: &scrdev; |
|
/* allocate memory device, if driver doesn't blit will fail*/ |
mempsd = psd->AllocateMemGC(psd); |
if(!mempsd) |
return NULL; |
|
/* allocate a DC for DesktopWindow*/ |
hdcmem = GetDCEx(NULL, NULL, DCX_DEFAULTCLIP); |
if(!hdcmem) { |
mempsd->FreeMemGC(mempsd); |
return NULL; |
} |
hdcmem->psd = mempsd; |
|
/* select in default bitmap to setup mem device parms*/ |
SelectObject(hdcmem, (HGDIOBJ)&default_bitmap); |
return hdcmem; |
} |
|
BOOL WINAPI |
BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, |
HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop) |
{ |
/* use stretch blit with equal src and dest width/height*/ |
return StretchBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, |
hdcSrc, nXSrc, nYSrc, nWidth, nHeight, dwRop); |
} |
|
BOOL WINAPI |
StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, |
int nHeightDest, HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, |
int nWidthSrc, int nHeightSrc, DWORD dwRop) |
{ |
|
HWND hwnd; |
POINT dst, src; |
|
if(!hdcDest || !hdcSrc) |
return FALSE; |
dst.x = nXOriginDest; |
dst.y = nYOriginDest; |
src.x = nXOriginSrc; |
src.y = nYOriginSrc; |
|
/* if src screen DC, convert coords*/ |
/* FIXME: src clipping isn't checked, only one set of cliprects also*/ |
if(!MwIsMemDC(hdcSrc) && MwIsClientDC(hdcSrc)) { |
if(!(hwnd = MwPrepareDC(hdcSrc))) |
return FALSE; |
ClientToScreen(hwnd, &src); |
} |
/* if dst screen DC, convert coords and set clipping*/ |
/* FIXME: if dest is also screen, src clipping will be overwritten*/ |
if(!MwIsMemDC(hdcDest) && MwIsClientDC(hdcDest)) { |
if(!(hwnd = MwPrepareDC(hdcDest))) |
return FALSE; |
ClientToScreen(hwnd, &dst); |
} |
|
if (nWidthDest == nWidthSrc && nHeightDest == nHeightSrc) { |
GdBlit(hdcDest->psd, dst.x, dst.y, nWidthDest, nHeightDest, |
hdcSrc->psd, src.x, src.y, dwRop); |
} else { |
GdStretchBlit(hdcDest->psd, dst.x, dst.y, |
nWidthDest, nHeightDest, hdcSrc->psd, src.x, src.y, |
nWidthSrc, nHeightSrc, dwRop); |
} |
return TRUE; |
} |
|
UINT WINAPI |
GetSystemPaletteEntries(HDC hdc,UINT iStartIndex,UINT nEntries, |
LPPALETTEENTRY lppe) |
{ |
UINT i; |
MWPALENTRY rgb; |
|
/* currently, we only work for screen device*/ |
if(!hdc || hdc->psd != &scrdev) |
return 0; |
|
for(i=0; i<nEntries; ++i) { |
if(!GdGetPalette(hdc->psd, i+iStartIndex, 1, &rgb)) |
break; |
lppe->peRed = rgb.r; |
lppe->peGreen = rgb.g; |
lppe->peBlue = rgb.b; |
lppe->peFlags = 0; |
++lppe; |
} |
return i; |
} |
|
/* allow NULL hdc for scrdev*/ |
int WINAPI |
GetDeviceCaps(HDC hdc, int nIndex) |
{ |
PSD psd; |
|
if (!hdc) |
psd = &scrdev; |
else psd = hdc->psd; |
|
switch(nIndex) { |
case HORZRES: |
return psd->xvirtres; |
case VERTRES: |
return psd->yvirtres; |
case BITSPIXEL: |
return psd->bpp; |
case PLANES: |
return psd->planes; |
case LOGPIXELSX: |
case LOGPIXELSY: |
return 96; |
case SIZEPALETTE: |
if (psd->bpp <= 8) |
return psd->ncolors; |
break; |
} |
return 0; |
} |
/winsbar.2
0,0 → 1,940
/* |
* Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* Portions Copyright (c) 1999, 2000, Wei Yongming. |
* jmt: scrollbar thumb ported |
* |
* Microwindows win32 NonClient Scrollbars |
*/ |
#define MWINCLUDECOLORS//jmt: for color macros |
#include "windows.h" |
#include "wintern.h" |
#include "wintools.h" |
#include <stdlib.h> |
#include <string.h> |
#include <stdio.h>//printf |
/* scrollbar status/positions*/ |
#define SBS_UNKNOWN 0x0000 |
#define SBS_LEFTARROW 0x0001 |
#define SBS_RIGHTARROW 0x0002 |
#define SBS_LEFTSPACE 0x0004 |
#define SBS_RIGHTSPACE 0x0008 |
#define SBS_HORZTHUMB 0x0010 |
#define SBS_UPARROW 0x0020 |
#define SBS_DOWNARROW 0x0040 |
#define SBS_UPSPACE 0x0080 |
#define SBS_DOWNSPACE 0x0100 |
#define SBS_VERTTHUMB 0x0200 |
#define SBS_MASK 0x03ff |
#define SBS_DISABLED 0x4000 |
#define SBS_HIDE 0x8000 |
|
#define HSCROLLBARVISIBLE(hwnd) ((hwnd)->style & WS_HSCROLL) |
#define VSCROLLBARVISIBLE(hwnd) ((hwnd)->style & WS_VSCROLL) |
|
//# |
|
/****************************** Drawing Helpers *******************************/ |
static void |
Draw3DUpFrame(HDC hDC, int l, int t, int r, int b) |
{ |
RECT rc; |
HBRUSH hbr; |
|
SetRect(&rc, l, t, r, b); |
Draw3dBox(hDC, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_3DLIGHT), |
GetSysColor(COLOR_WINDOWFRAME)); |
InflateRect(&rc, -1, -1); |
Draw3dBox(hDC, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, |
GetSysColor(COLOR_BTNHIGHLIGHT), |
GetSysColor(COLOR_BTNSHADOW)); |
InflateRect(&rc, -1, -1); |
|
hbr = CreateSolidBrush(LTGRAY); |
FillRect(hDC, &rc, hbr); |
DeleteObject(hbr); |
} |
|
|
/* |
* Adjust client area smaller if scrollbars visible. |
* Also, compute the NC hittest regions for the scrollbars. |
*/ |
void |
MwAdjustNCScrollbars(HWND hwnd) |
{ |
BOOL vertbar = VSCROLLBARVISIBLE(hwnd); |
BOOL horzbar = HSCROLLBARVISIBLE(hwnd); |
|
if (vertbar) { |
hwnd->clirect.right -= mwSYSMETRICS_CXVSCROLL; |
if (horzbar) |
hwnd->clirect.bottom -= mwSYSMETRICS_CYHSCROLL; |
hwnd->vscroll.rc.left = hwnd->clirect.right; |
hwnd->vscroll.rc.right = hwnd->clirect.right + |
mwSYSMETRICS_CXVSCROLL; |
hwnd->vscroll.rc.top = hwnd->clirect.top; |
hwnd->vscroll.rc.bottom = hwnd->clirect.bottom; |
} else |
SetRectEmpty(&hwnd->vscroll.rc); |
if (horzbar) { |
if (!vertbar) |
hwnd->clirect.bottom -= mwSYSMETRICS_CYHSCROLL; |
hwnd->hscroll.rc.top = hwnd->clirect.bottom; |
hwnd->hscroll.rc.bottom = hwnd->clirect.bottom + |
mwSYSMETRICS_CYHSCROLL; |
hwnd->hscroll.rc.left = hwnd->clirect.left; |
hwnd->hscroll.rc.right = hwnd->clirect.right; |
} else |
SetRectEmpty(&hwnd->hscroll.rc); |
} |
|
static int |
wndGetBorder(HWND hwnd) |
{ |
if (hwnd->style & WS_BORDER) { |
if ((hwnd->style & WS_CAPTION) == WS_CAPTION) |
return mwSYSMETRICS_CXFRAME; |
return mwSYSMETRICS_CXBORDER; |
} |
return 0; |
} |
|
static BOOL |
wndGetVScrollBarRect (HWND hwnd, RECT* rcVBar) |
{ |
if (hwnd->style & WS_VSCROLL) { |
rcVBar->left = hwnd->winrect.right - mwSYSMETRICS_CXVSCROLL |
- wndGetBorder (hwnd); |
rcVBar->right = hwnd->winrect.right - wndGetBorder (hwnd); |
rcVBar->top = hwnd->clirect.top; |
rcVBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd); |
|
if (hwnd->style & WS_HSCROLL && !(hwnd->hscroll.status & SBS_HIDE)) |
rcVBar->bottom -= mwSYSMETRICS_CYHSCROLL; |
|
return TRUE; |
} |
|
return FALSE; |
} |
|
static BOOL |
wndGetHScrollBarRect (HWND hwnd, RECT* rcHBar) |
{ |
if (hwnd->style & WS_HSCROLL) { |
rcHBar->top = hwnd->winrect.bottom - mwSYSMETRICS_CYHSCROLL |
- wndGetBorder (hwnd); |
rcHBar->bottom = hwnd->winrect.bottom - wndGetBorder (hwnd); |
rcHBar->left = hwnd->clirect.left; |
rcHBar->right = hwnd->winrect.right - wndGetBorder (hwnd); |
|
if (hwnd->style & WS_VSCROLL && !(hwnd->vscroll.status & SBS_HIDE)) |
rcHBar->right -= mwSYSMETRICS_CXVSCROLL; |
|
return TRUE; |
} |
|
return FALSE; |
} |
|
void |
MwPaintNCScrollbars(HWND hwnd, HDC hdc) |
{ |
BOOL vertbar = VSCROLLBARVISIBLE(hwnd); |
BOOL horzbar = HSCROLLBARVISIBLE(hwnd); |
BOOL fGotDC = FALSE; |
RECT rc,rc2; |
|
POINT p3[3]; |
int shrink=2; |
|
int start = 0; |
RECT rcHBar, rcVBar; |
|
|
if (!hdc && (horzbar || vertbar)) { |
hdc = GetWindowDC(hwnd); |
fGotDC = TRUE; |
} |
|
if (horzbar && vertbar) { |
rc.left = hwnd->clirect.right; |
rc.top = hwnd->clirect.bottom; |
rc.right = rc.left + mwSYSMETRICS_CXVSCROLL; |
rc.bottom = rc.top + mwSYSMETRICS_CYHSCROLL; |
FillRect(hdc, &rc, (HBRUSH)(COLOR_BTNFACE+1)); |
} |
if (vertbar) { |
rc = hwnd->vscroll.rc; |
|
/* bkgnd */ |
FillRect(hdc, &rc, (HBRUSH)(COLOR_BTNFACE+1)); |
|
/* up */ |
Draw3dUpDownState(hdc, rc.left, rc.top, |
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL, |
hwnd->vscroll.status & SBS_UPARROW); |
/* down */ |
Draw3dUpDownState(hdc, rc.left,rc.bottom-mwSYSMETRICS_CYHSCROLL, |
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL, |
hwnd->vscroll.status & SBS_DOWNARROW); |
#if 1//jmt: draw arrows |
SelectObject(hdc,GetStockObject(BLACK_BRUSH)); |
/* up */ |
p3[0].x= rc.left + (mwSYSMETRICS_CXVSCROLL/2) - 1; |
p3[0].y= rc.top + 2 + shrink; |
p3[1].x= rc.left + 2 + shrink - 1; |
p3[1].y= rc.top + (mwSYSMETRICS_CYHSCROLL-4) - shrink; |
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink; |
p3[2].y= rc.top + (mwSYSMETRICS_CYHSCROLL-4) - shrink; |
Polygon(hdc,p3,3); |
/* down */ |
p3[0].x= rc.left + (mwSYSMETRICS_CXVSCROLL/2) - 1; |
p3[0].y= rc.bottom - 4 - shrink; |
p3[1].x= rc.left + 2 + shrink - 1; |
p3[1].y= rc.bottom-mwSYSMETRICS_CYHSCROLL + 2 + shrink; |
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink; |
p3[2].y= rc.bottom-mwSYSMETRICS_CYHSCROLL + 2 + shrink; |
Polygon(hdc,p3,3); |
#endif |
#if 1 |
// draw moving bar |
|
wndGetVScrollBarRect (hwnd, &rcVBar); |
rcVBar.left -- ; |
rcVBar.right -- ; |
|
start = rcVBar.top + mwSYSMETRICS_CYVSCROLL + hwnd->vscroll.barStart; |
|
if (start + hwnd->vscroll.barLen > rcVBar.bottom) |
start = rcVBar.bottom - hwnd->vscroll.barLen; |
|
if (hwnd->vscroll.barLen == 0) |
hwnd->vscroll.barLen=rc.bottom-rc.top-(mwSYSMETRICS_CYVSCROLL*2); |
|
/* bkgnd */ |
rc2.left=rc.left; rc2.right=rc.right/*-1*/; |
rc2.top=rc.top+mwSYSMETRICS_CYHSCROLL; |
rc2.bottom=start; |
if (rc2.bottom>rc2.top) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
rc2.top=start+hwnd->vscroll.barLen; |
rc2.bottom=rc.bottom-mwSYSMETRICS_CYHSCROLL; |
if (rc2.bottom>rc2.top) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
Draw3DUpFrame (hdc, rcVBar.left, start, rcVBar.right, |
start + hwnd->vscroll.barLen); |
#if 0 |
printf("barv:(l,t,r,b):(%d,%d,%d,%d)\n", |
rcVBar.left, start, rcVBar.right, |
start + hwnd->vscroll.barLen); |
#endif |
#endif |
} |
if (horzbar) { |
rc = hwnd->hscroll.rc; |
|
/* bkgnd */ |
FillRect(hdc, &rc, (HBRUSH)(COLOR_BTNFACE+1)); |
|
/* left */ |
Draw3dUpDownState(hdc, rc.left, rc.top, |
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL, |
hwnd->hscroll.status & SBS_LEFTARROW); |
/* right */ |
Draw3dUpDownState(hdc, rc.right-mwSYSMETRICS_CXVSCROLL, rc.top, |
mwSYSMETRICS_CXVSCROLL, mwSYSMETRICS_CYHSCROLL, |
hwnd->hscroll.status & SBS_RIGHTARROW); |
#if 1//jmt: draw arrows |
SelectObject(hdc,GetStockObject(BLACK_BRUSH)); |
/* left */ |
p3[0].x= rc.left + 2 + shrink; |
p3[0].y= rc.top + (mwSYSMETRICS_CYHSCROLL/2) ; |
p3[1].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink ; |
p3[1].y= rc.top + 2 + shrink; |
p3[2].x= rc.left + (mwSYSMETRICS_CXVSCROLL-4) - shrink; |
p3[2].y= rc.bottom - 4 - shrink + 1; |
Polygon(hdc,p3,3); |
/* right */ |
p3[0].x= rc.right - 4 - shrink; |
p3[0].y= rc.top + (mwSYSMETRICS_CYHSCROLL/2) ; |
p3[1].x= rc.right-mwSYSMETRICS_CXVSCROLL + 2 + shrink ; |
p3[1].y= rc.top + 2 + shrink; |
p3[2].x= rc.right-mwSYSMETRICS_CXVSCROLL + 2 + shrink; |
p3[2].y= rc.bottom - 4 - shrink + 1; |
Polygon(hdc,p3,3); |
#endif |
#if 1 |
// draw moving bar. |
|
wndGetHScrollBarRect (hwnd, &rcHBar); |
rcHBar.top -- ; |
rcHBar.bottom -- ; |
|
start = rcHBar.left + mwSYSMETRICS_CXHSCROLL + hwnd->hscroll.barStart; |
|
if (start + hwnd->hscroll.barLen > rcHBar.right) |
start = rcHBar.right - hwnd->hscroll.barLen; |
|
if (hwnd->hscroll.barLen == 0) |
hwnd->hscroll.barLen=rc.right-rc.left-(mwSYSMETRICS_CXHSCROLL*2); |
|
/* bkgnd */ |
rc2.top=rc.top; rc2.bottom=rc.bottom/*-1*/; |
rc2.left=rc.left+mwSYSMETRICS_CXVSCROLL; |
rc2.right=start; |
if (rc2.right>rc2.left) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
rc2.left=start+hwnd->hscroll.barLen; |
rc2.right=rc.right-mwSYSMETRICS_CXVSCROLL; |
if (rc2.right>rc2.left) |
FillRect(hdc, &rc2, (HBRUSH)GetStockObject(DKGRAY_BRUSH)); |
|
Draw3DUpFrame (hdc, start, rcHBar.top, start + hwnd->hscroll.barLen, |
rcHBar.bottom); |
#if 0 |
printf("barh:(l,t,r,b):(%d,%d,%d,%d)\n", |
start, rcHBar.top, start + hwnd->hscroll.barLen, |
rcHBar.bottom); |
#endif |
#endif |
} |
|
if (fGotDC) |
ReleaseDC(hwnd, hdc); |
} |
|
/* handle a non-client message for a scrollbar*/ |
void |
MwHandleNCMessageScrollbar(HWND hwnd, WPARAM hitcode, LPARAM lParam, UINT msg/*BOOL fDown*/) |
{ |
int pos = SBS_UNKNOWN; |
BOOL vertbar = VSCROLLBARVISIBLE(hwnd); |
BOOL horzbar = HSCROLLBARVISIBLE(hwnd); |
int * pStat; |
POINT pt; |
RECT rc; |
|
static BOOL bDraw; |
|
static int downPos = SBS_UNKNOWN;// |
static int sbCode; |
int newThumbPos; |
|
int itemMoveable,itemCount,itemVisible,moveRange;//jmt:2k0819 |
int moveTop,moveBottom,moveLeft,moveRight;//jmt:2k0819 |
|
POINTSTOPOINT(pt, lParam); |
for (;;) { /* use for() to allow break statement*/ |
if (hitcode == HTVSCROLL && vertbar) |
{ |
pStat = &hwnd->vscroll.status; |
rc = hwnd->vscroll.rc; |
rc.bottom = rc.top + mwSYSMETRICS_CYVSCROLL; |
if (PtInRect(&rc, pt)) |
{ |
pos = SBS_UPARROW; |
break; |
} |
rc.bottom = hwnd->vscroll.rc.bottom; |
rc.top = rc.bottom - mwSYSMETRICS_CYVSCROLL; |
if (PtInRect(&rc, pt)) |
{ |
pos = SBS_DOWNARROW; |
break; |
} |
pos = SBS_VERTTHUMB; |
} else if (hitcode == HTHSCROLL && horzbar) |
{ |
pStat = &hwnd->hscroll.status; |
rc = hwnd->hscroll.rc; |
rc.right = rc.left + mwSYSMETRICS_CXHSCROLL; |
if (PtInRect(&rc, pt)) { |
pos = SBS_LEFTARROW; |
break; |
} |
rc.right = hwnd->hscroll.rc.right; |
rc.left = rc.right - mwSYSMETRICS_CXHSCROLL; |
if (PtInRect(&rc, pt)) { |
pos = SBS_RIGHTARROW; |
break; |
} |
pos = SBS_HORZTHUMB; |
} else |
return; |
break; |
} |
|
if (pos == SBS_UNKNOWN) |
return; |
|
*pStat &= ~SBS_MASK; /* remove stray mouse states*/ |
|
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK)//jmt:2k0819 |
*pStat |= pos; |
else *pStat &= ~pos; |
|
if (msg == WM_NCLBUTTONDOWN || msg == WM_NCLBUTTONDBLCLK)//jmt:2k0819 |
bDraw=TRUE; |
|
if (bDraw) |
MwPaintNCScrollbars(hwnd, NULL); |
|
if (pos == SBS_UPARROW || pos == SBS_LEFTARROW)//jmt:2k0820 |
{ |
if (hwnd->vscroll.curPos != hwnd->vscroll.minPos) |
sbCode = SB_LINEUP; |
} |
else if (pos == SBS_DOWNARROW || pos == SBS_RIGHTARROW)//jmt:2k0820 |
{ |
if (hwnd->vscroll.curPos != hwnd->vscroll.maxPos) |
sbCode = SB_LINEDOWN; |
} |
else if (pos == SBS_VERTTHUMB || pos == SBS_HORZTHUMB)// |
{ |
sbCode = SB_THUMBTRACK;// |
} |
|
switch(msg) |
{ |
case WM_NCLBUTTONDOWN: |
case WM_NCLBUTTONDBLCLK://jmt:2k0819 |
downPos = pos; |
break; |
|
case WM_NCMOUSEMOVE://jmt:2k0819 |
if (hitcode == HTVSCROLL && vertbar) |
{ |
if (sbCode == SB_THUMBTRACK && downPos == SBS_VERTTHUMB)// |
{ |
//jmt(2k0819): new algorithm for SB_THUMBTRACK |
|
rc = hwnd->vscroll.rc; |
moveTop = rc.top + mwSYSMETRICS_CYVSCROLL; |
moveBottom = hwnd->vscroll.rc.bottom - mwSYSMETRICS_CYVSCROLL; |
moveRange = moveBottom - moveTop; |
|
itemCount = hwnd->vscroll.maxPos - hwnd->vscroll.minPos + 1; |
itemVisible = hwnd->vscroll.pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveTop,itemMoveable,moveRange,newThumbPos); |
//# |
|
if ( newThumbPos >= hwnd->vscroll.minPos && |
newThumbPos <= hwnd->vscroll.maxPos) |
SendMessage (hwnd, |
WM_VSCROLL, SB_THUMBTRACK, newThumbPos); |
break; |
} |
} |
|
if (hitcode == HTHSCROLL && horzbar) |
{ |
if (sbCode == SB_THUMBTRACK && downPos == SBS_HORZTHUMB)// |
{ |
//jmt(2k0819): new algorithm for SB_THUMBTRACK |
|
rc = hwnd->hscroll.rc; |
moveLeft = rc.left + mwSYSMETRICS_CXHSCROLL; |
moveRight = hwnd->hscroll.rc.right - mwSYSMETRICS_CXHSCROLL; |
moveRange = moveRight - moveLeft; |
|
itemCount = hwnd->hscroll.maxPos - hwnd->hscroll.minPos + 1; |
itemVisible = hwnd->hscroll.pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos); |
//# |
|
if ( newThumbPos >= hwnd->hscroll.minPos && |
newThumbPos <= hwnd->hscroll.maxPos) |
SendMessage (hwnd, |
WM_HSCROLL, SB_THUMBTRACK, newThumbPos); |
break; |
} |
} |
|
break; |
|
case WM_NCLBUTTONUP://jmt:2k0819 |
bDraw=FALSE; |
downPos = SBS_UNKNOWN;// |
|
if (sbCode==SB_THUMBTRACK) |
{ |
if (hitcode == HTVSCROLL && vertbar) |
{ |
//jmt(2k0819): new algorithm for SB_THUMBTRACK |
|
rc = hwnd->vscroll.rc; |
moveTop = rc.top + mwSYSMETRICS_CYVSCROLL; |
moveBottom = hwnd->vscroll.rc.bottom - mwSYSMETRICS_CYVSCROLL; |
moveRange = moveBottom - moveTop; |
|
itemCount = hwnd->vscroll.maxPos - hwnd->vscroll.minPos + 1; |
itemVisible = hwnd->vscroll.pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.y - moveTop) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveTop,itemMoveable,moveRange,newThumbPos); |
//# |
if ( newThumbPos >= hwnd->vscroll.minPos && |
newThumbPos <= hwnd->vscroll.maxPos) |
SendMessage (hwnd, |
WM_VSCROLL, SB_THUMBTRACK, newThumbPos); |
break; |
} |
|
if (hitcode == HTHSCROLL && horzbar) |
{ |
//jmt(2k0819): new algorithm for SB_THUMBTRACK |
|
rc = hwnd->hscroll.rc; |
moveLeft = rc.left + mwSYSMETRICS_CXHSCROLL; |
moveRight = hwnd->hscroll.rc.right - mwSYSMETRICS_CXHSCROLL; |
moveRange = moveRight - moveLeft; |
|
itemCount = hwnd->hscroll.maxPos - hwnd->hscroll.minPos + 1; |
itemVisible = hwnd->hscroll.pageStep; |
itemMoveable = itemCount - itemVisible + 1; |
|
newThumbPos = ((pt.x - moveLeft) * itemMoveable) / moveRange; |
printf("((%d-%d)*%d)/%d=%d\n", |
pt.y,moveLeft,itemMoveable,moveRange,newThumbPos); |
//# |
|
if ( newThumbPos >= hwnd->hscroll.minPos && |
newThumbPos <= hwnd->hscroll.maxPos) |
SendMessage (hwnd, |
WM_HSCROLL, SB_THUMBTRACK, newThumbPos); |
break; |
} |
} |
else//jmt:2k0820 |
{ |
if (hitcode == HTVSCROLL && vertbar) |
SendMessage (hwnd, WM_VSCROLL, sbCode, 0); |
|
if (hitcode == HTHSCROLL && horzbar) |
SendMessage (hwnd, WM_HSCROLL, sbCode, 0); |
} |
break; |
} |
|
} |
|
|
static BOOL |
PtInRect2(const RECT *lprc, int x, int y) |
{ |
POINT p; |
|
p.x = x; |
p.y = y; |
return PtInRect(lprc, p); |
} |
|
#if 1//0000 |
|
|
static void |
wndScrollBarPos (HWND hwnd, BOOL bIsHBar, RECT* rcBar) |
{ |
UINT moveRange; |
PMWSCROLLBARINFO pSBar; |
|
if (bIsHBar) |
pSBar = &hwnd->hscroll; |
else |
pSBar = &hwnd->vscroll; |
|
if (pSBar->minPos == pSBar->maxPos) { |
pSBar->status |= SBS_HIDE; |
return; |
} |
|
if (bIsHBar) |
moveRange = (rcBar->right - rcBar->left) - (mwSYSMETRICS_CXHSCROLL<<1); |
else |
moveRange = (rcBar->bottom - rcBar->top) - (mwSYSMETRICS_CYVSCROLL<<1); |
|
#define MWM_DEFBARLEN 18// |
#define MWM_MINBARLEN 8// |
|
if (pSBar->pageStep == 0) |
{ |
pSBar->barLen = MWM_DEFBARLEN; |
|
if (pSBar->barLen > moveRange) |
pSBar->barLen = MWM_MINBARLEN; |
} |
else |
{ |
pSBar->barLen = moveRange * pSBar->pageStep / |
(pSBar->maxPos - pSBar->minPos + 1); |
if (pSBar->barLen < MWM_MINBARLEN) |
pSBar->barLen = MWM_MINBARLEN; |
} |
|
pSBar->barStart = moveRange * (pSBar->curPos - pSBar->minPos) / |
(pSBar->maxPos - pSBar->minPos + 1); |
|
|
if (pSBar->barStart + pSBar->barLen > moveRange) |
pSBar->barStart = moveRange - pSBar->barLen; |
|
|
if (pSBar->barStart < 0) |
pSBar->barStart = 0; |
} |
|
static PMWSCROLLBARINFO wndGetScrollBar (HWND pWin, int iSBar) |
{ |
if (iSBar == SB_HORZ) { |
if (pWin->style & WS_HSCROLL) |
return &pWin->hscroll; |
} |
else if (iSBar == SB_VERT) { |
if (pWin->style & WS_VSCROLL) |
return &pWin->vscroll; |
} |
|
return NULL; |
} |
|
BOOL EnableScrollBar (HWND hWnd, int iSBar, BOOL bEnable) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
BOOL bPrevState; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )//ok |
return FALSE; |
|
bPrevState = !(pSBar->status & SBS_DISABLED); |
|
if (bEnable && !bPrevState) |
pSBar->status &= ~SBS_DISABLED; |
else if (!bEnable && bPrevState) |
pSBar->status |= SBS_DISABLED; |
else |
return FALSE; |
|
if (iSBar == SB_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintNCScrollbars(hWnd,NULL);//a must |
#endif |
|
return TRUE; |
} |
|
BOOL GetScrollPos (HWND hWnd, int iSBar, int* pPos) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
*pPos = pSBar->curPos; |
return TRUE; |
} |
|
BOOL GetScrollRange (HWND hWnd, int iSBar, int* pMinPos, int* pMaxPos) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
*pMinPos = pSBar->minPos; |
*pMaxPos = pSBar->maxPos; |
return TRUE; |
} |
|
BOOL SetScrollPos (HWND hWnd, int iSBar, int iNewPos)//ok |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
if (iNewPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
else |
pSBar->curPos = iNewPos; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
if (iSBar == SB_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
|
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintNCScrollbars(hWnd,NULL);//a must |
#endif |
return TRUE; |
} |
|
BOOL SetScrollRange (HWND hWnd, int iSBar, int iMinPos, int iMaxPos) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
pSBar->minPos = (iMinPos < iMaxPos)?iMinPos:iMaxPos; |
pSBar->maxPos = (iMinPos > iMaxPos)?iMinPos:iMaxPos; |
|
// validate parameters. |
if (pSBar->curPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
|
if (pSBar->pageStep <= 0) |
pSBar->pageStep = 0; |
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) |
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
if (iSBar == SB_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintNCScrollbars(hWnd,NULL);//a must |
#endif |
|
return TRUE; |
} |
|
BOOL SetScrollInfo (HWND hWnd, int iSBar, |
LPCSCROLLINFO lpsi, BOOL fRedraw)//ok |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
if( lpsi->fMask & SIF_RANGE ) |
{ |
pSBar->minPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMin:lpsi->nMax; |
pSBar->maxPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMax:lpsi->nMin; |
} |
|
if( lpsi->fMask & SIF_POS ) |
pSBar->curPos = lpsi->nPos; |
|
if( lpsi->fMask & SIF_PAGE ) |
pSBar->pageStep = lpsi->nPage; |
|
// validate parameters. |
if (pSBar->curPos < pSBar->minPos) |
pSBar->curPos = pSBar->minPos; |
|
if (pSBar->pageStep <= 0) |
pSBar->pageStep = 0; |
else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) |
pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; |
|
{ |
int max = pSBar->maxPos; |
max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; |
|
if (pSBar->curPos > max) |
pSBar->curPos = max; |
} |
|
if(fRedraw) |
{ |
if (iSBar == SB_VERT) |
{ |
wndGetVScrollBarRect (pWin, &rcBar); |
rcBar.left --; |
rcBar.right --; |
} |
else |
{ |
wndGetHScrollBarRect (pWin, &rcBar); |
rcBar.top --; |
rcBar.bottom --; |
} |
wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); |
|
#if 0 |
SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); |
#else |
MwPaintNCScrollbars(hWnd,NULL);//a must |
#endif |
} |
|
return TRUE; |
} |
|
BOOL GetScrollInfo(HWND hWnd, int iSBar, LPSCROLLINFO lpsi) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
if( lpsi->fMask & SIF_RANGE ) |
{ |
lpsi->nMin = pSBar->minPos; |
lpsi->nMax = pSBar->maxPos; |
} |
|
if( lpsi->fMask & SIF_POS ) |
{ |
lpsi->nPos = pSBar->curPos; |
} |
|
if( lpsi->fMask & SIF_PAGE ) |
lpsi->nPage = pSBar->pageStep; |
|
return TRUE; |
} |
|
BOOL ShowScrollBar (HWND hWnd, int iSBar, BOOL bShow) |
{ |
PMWSCROLLBARINFO pSBar; |
HWND pWin; |
BOOL bPrevState; |
RECT rcBar; |
|
pWin = (HWND)hWnd; |
|
if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) |
return FALSE; |
|
bPrevState = !(pSBar->status & SBS_HIDE); |
|
if (bShow && !bPrevState) |
pSBar->status &= ~SBS_HIDE; |
else if (!bShow && bPrevState) |
pSBar->status |= SBS_HIDE; |
else |
return FALSE; |
#if 0//fix: no WM_CHANGESIZE |
SendMessage (hWnd, WM_CHANGESIZE, 0, 0); |
#endif |
if (iSBar == SB_VERT) |
wndGetVScrollBarRect (pWin, &rcBar); |
else |
wndGetHScrollBarRect (pWin, &rcBar); |
|
{ |
RECT rcWin, rcClient; |
|
memcpy (&rcWin, &pWin->winrect.left, sizeof (RECT)); |
|
rcClient.left = 0; |
rcClient.top = 0; |
rcClient.right = pWin->clirect.right - pWin->clirect.left; |
rcClient.bottom = pWin->clirect.bottom - pWin->clirect.top; |
#if 0//fix: no WM_SIZECHANGED |
SendMessage/*SendAsyncMessage*/ (hWnd, WM_SIZECHANGED, |
(WPARAM)&rcWin, (LPARAM)&rcClient); |
#endif |
} |
|
if (bShow) { |
SendMessage (hWnd, WM_NCPAINT, 0, 0); |
} |
else { |
rcBar.left -= pWin->clirect.left; |
rcBar.top -= pWin->clirect.top; |
rcBar.right -= pWin->clirect.left; |
rcBar.bottom -= pWin->clirect.top; |
SendMessage (hWnd, WM_NCPAINT, 0, 0); |
InvalidateRect (hWnd, &rcBar, TRUE); |
} |
|
return TRUE; |
} |
#endif |
/winfont.c
0,0 → 1,250
/* |
* Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* GetTextExtent*Point by Roman Guseynov |
* Original contributions by Shane Nay |
* |
* Win32 API upper level font selection routines |
*/ |
#include "windows.h" |
#include "wintern.h" |
#include "device.h" |
#include <stdlib.h> |
#include <string.h> |
|
HFONT WINAPI |
CreateFont(int nHeight, int nWidth, int nEscapement, int nOrientation, |
int fnWeight, DWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut, |
DWORD fdwCharSet,DWORD fdwOutputPrecision,DWORD fdwClipPrecision, |
DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCSTR lpszFace) |
{ |
LOGFONT lf; |
|
lf.lfHeight = nHeight; |
lf.lfWidth = nWidth; |
lf.lfEscapement = nEscapement; |
lf.lfOrientation = nOrientation; |
lf.lfWeight = fnWeight; |
lf.lfItalic = fdwItalic; |
lf.lfUnderline = fdwUnderline; |
lf.lfStrikeOut = fdwStrikeOut; |
lf.lfCharSet = fdwCharSet; |
lf.lfOutPrecision = fdwOutputPrecision; |
lf.lfClipPrecision = fdwClipPrecision; |
lf.lfQuality = fdwQuality; |
lf.lfPitchAndFamily = fdwPitchAndFamily; |
strncpy(lf.lfFaceName, lpszFace, sizeof(lf.lfFaceName)); |
|
return CreateFontIndirect(&lf); |
} |
|
HFONT WINAPI |
CreateFontIndirect(CONST LOGFONT *lplf) |
{ |
MWFONTOBJ * hfont; |
int family, pitch; |
MWLOGFONT mwlf; |
char szFacename[32]; |
|
/* create a gdi font object*/ |
hfont = GdItemNew(MWFONTOBJ); |
if(!hfont) |
return NULL; |
hfont->hdr.type = OBJ_FONT; |
hfont->hdr.stockobj = FALSE; |
|
/* convert LOGFONT to MWLOGFONT*/ |
memset(&mwlf, 0, sizeof(mwlf)); |
mwlf.lfHeight = lplf->lfHeight; |
mwlf.lfWidth = lplf->lfWidth; |
mwlf.lfEscapement = lplf->lfEscapement; |
mwlf.lfOrientation = lplf->lfOrientation; |
mwlf.lfWeight = lplf->lfWeight; |
mwlf.lfItalic = lplf->lfItalic; |
mwlf.lfUnderline = lplf->lfUnderline; |
mwlf.lfStrikeOut = lplf->lfStrikeOut; |
mwlf.lfCharSet = lplf->lfCharSet; |
mwlf.lfOutPrecision = lplf->lfOutPrecision; |
mwlf.lfClipPrecision = lplf->lfClipPrecision; |
mwlf.lfQuality = lplf->lfQuality; |
strncpy(mwlf.lfFaceName, lplf->lfFaceName, sizeof(mwlf.lfFaceName)); |
|
family = lplf->lfPitchAndFamily & 0xf0; |
switch(family) { |
case FF_DONTCARE: |
break; |
case FF_ROMAN: |
mwlf.lfRoman = 1; |
mwlf.lfSerif = 1; |
break; |
case FF_SWISS: |
mwlf.lfSansSerif = 1; |
break; |
case FF_MODERN: |
mwlf.lfModern = 1; |
break; |
} |
|
pitch = lplf->lfPitchAndFamily & 0x0f; |
switch(pitch) { |
case DEFAULT_PITCH: |
break; |
case FIXED_PITCH: |
case MONO_FONT: |
mwlf.lfMonospace = 1; |
break; |
case VARIABLE_PITCH: |
mwlf.lfProportional = 1; |
break; |
} |
/*mwlf.lfOblique = 0;*/ |
/*mwlf.lfSmallCaps = 0;*/ |
/*mwlf.lfPitch = 0;*/ |
|
/* select a font based on facename, bold/italic and height*/ |
strncpy(szFacename, lplf->lfFaceName, sizeof(szFacename)); |
if (lplf->lfWeight==FW_BOLD) |
strcat(szFacename, "B"); |
if (lplf->lfItalic) |
strcat(szFacename, "I"); |
hfont->pfont = GdCreateFont(&scrdev, szFacename, lplf->lfHeight, &mwlf); |
|
return (HFONT)hfont; |
} |
|
BOOL WINAPI |
GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm) |
{ |
MWFONTINFO fi; |
|
if(!hdc) |
return FALSE; |
|
GdGetFontInfo(hdc->font->pfont, &fi); |
|
/* FIXME many items are guessed for the time being*/ |
lptm->tmHeight = fi.height; |
|
/* reversed for kaffe port |
lptm->tmAscent = fi.height - fi.baseline; |
lptm->tmDescent= fi.baseline; |
*/ |
|
lptm->tmDescent = fi.height - fi.baseline; |
lptm->tmAscent= fi.baseline; |
lptm->tmInternalLeading = 0; |
lptm->tmExternalLeading = 0; |
lptm->tmAveCharWidth = fi.widths['x']; |
lptm->tmMaxCharWidth = fi.maxwidth; |
lptm->tmWeight = FW_NORMAL; |
lptm->tmOverhang = 0; |
lptm->tmDigitizedAspectX = fi.maxwidth; |
lptm->tmDigitizedAspectY = fi.height; |
lptm->tmFirstChar = 32; |
lptm->tmLastChar = 255; |
lptm->tmDefaultChar = '?'; |
lptm->tmBreakChar = 0; |
lptm->tmItalic = 0; |
lptm->tmUnderlined = 0; |
lptm->tmStruckOut = 0; |
/* note that win32 has the TMPF_FIXED_PITCH flags REVERSED...*/ |
lptm->tmPitchAndFamily = fi.fixed? |
FF_DONTCARE: (FF_DONTCARE | TMPF_FIXED_PITCH); |
lptm->tmCharSet = OEM_CHARSET; |
return TRUE; |
} |
|
BOOL WINAPI |
GetCharWidth(HDC hdc, UINT iFirstChar, UINT iLastChar, LPINT lpBuffer) |
{ |
int i; |
int j = 0; |
MWFONTINFO fi; |
|
if(!hdc || iLastChar < iFirstChar) |
return FALSE; |
|
GdGetFontInfo(hdc->font->pfont, &fi); |
for(i=iFirstChar; i <= iLastChar; ++i) |
if(i < fi.firstchar || i > fi.lastchar || i > 255) |
lpBuffer[j++] = 0; |
else lpBuffer[j++] = fi.widths[i]; |
lpBuffer[j++] = fi.widths[i]; |
|
return TRUE; |
} |
|
BOOL WINAPI |
GetTextExtentPoint( |
HDC hdc, /* handle to DC*/ |
LPCTSTR lpszStr, /* character string*/ |
int cchString, /* number of characters*/ |
LPSIZE lpSize) /* string dimensions*/ |
{ |
int width = 1, height = 1, baseline = 0; |
|
if (lpSize) { |
lpSize->cx = 0; |
lpSize->cy = 0; |
} |
if (!hdc || !lpszStr || !cchString || !lpSize) |
return FALSE; |
GdGetTextSize(hdc->font->pfont, lpszStr, cchString, &width, &height, |
&baseline, MWTF_UTF8); |
lpSize->cx = width; |
lpSize->cy = height; |
|
/*printf("<MWIN>: lpszStr=\"%s\", cchString=%d, lpsize->cx=%d, lpSize->cy=%d\n", lpszStr, cchString, lpSize->cx, lpSize->cy);*/ |
return TRUE; |
} |
|
BOOL WINAPI |
GetTextExtentExPoint(HDC hdc, /* handle to DC*/ |
LPCTSTR lpszStr, /* character string*/ |
int cchString, /* number of characters*/ |
int nMaxExtent, /* maximum width of formatted string*/ |
LPINT lpnFit, /* maximum number of characters*/ |
LPINT alpDx, /* array of partial string widths*/ |
LPSIZE lpSize) /* string dimensions*/ |
|
{ |
int attr,width=0,height=0; |
|
if(!hdc || !lpszStr) |
return FALSE; |
if (cchString<0) |
cchString = strlen((char *)lpszStr); |
attr=hdc->font->pfont->fontattr; |
if (attr&FS_FREETYPE) |
{ |
if (GdGetTextSizeEx(hdc->font->pfont,lpszStr,cchString, |
nMaxExtent,lpnFit,alpDx,&width,&height,NULL,MWTF_UTF8)) |
{ |
lpSize->cx=width; |
lpSize->cy=height; |
return TRUE; |
} |
return FALSE; |
} |
else |
{ |
SIZE sz; |
int i; |
|
if (!GetTextExtentPoint(hdc, lpszStr, cchString, lpSize)) |
return FALSE; |
if ((!nMaxExtent)||(!lpnFit)||(!alpDx)) |
return TRUE; |
for (i=0; i<cchString; i++) { |
if (!GetTextExtentPoint(hdc, lpszStr, i+1, &sz)) |
return FALSE; |
if (sz.cx <= nMaxExtent) |
alpDx[i] = sz.cx; |
else { |
(*lpnFit) = i; |
return TRUE; |
} |
} |
(*lpnFit) = cchString; |
return TRUE; |
} |
} |
/winclip1.c
0,0 → 1,398
/* |
* Copyright (c) 1999 Greg Haerr <greg@censoft.com> |
* Copyright (c) 1991 David I. Bell |
* Permission is granted to use, distribute, or modify this source, |
* provided that this copyright notice remains intact. |
*/ |
#include "windows.h" |
#include "wintern.h" |
|
/* |
* Macro to distinguish cases of clipping. |
*/ |
#define GAPVAL(leftgap, rightgap, topgap, bottomgap) \ |
(((leftgap) << 3) + ((rightgap) << 2) + ((topgap) << 1) + (bottomgap)) |
|
static BOOL MwExcludeClipRect(int minx,int miny,int maxx,int maxy,int *count, |
MWCLIPRECT *cliprects); |
static int MwSplitClipRect(MWCLIPRECT *srcrect, MWCLIPRECT *destrect, |
MWCOORD minx, MWCOORD miny, MWCOORD maxx, MWCOORD maxy); |
|
/* |
* Set the clip rectangles for a window taking into account other |
* windows that may be obscuring it. The windows that may be obscuring |
* this one are the siblings of each direct ancestor which are higher |
* in priority than those ancestors. Also, each parent limits the visible |
* area of the window. |
*/ |
void |
MwSetClipWindow(HDC hdc) |
{ |
HWND wp = hdc->hwnd; |
HWND pwp; /* parent window */ |
HWND sibwp; /* sibling windows */ |
MWCLIPRECT *clip; /* first clip rectangle */ |
int count; /* number of clip rectangles */ |
MWCOORD diff; /* difference in coordinates */ |
BOOL toomany; /* TRUE if too many clip rects */ |
PRECT prc; /* client or window rectangle*/ |
MWCLIPRECT cliprects[MAX_CLIPRECTS]; /* clip rectangles */ |
|
if (wp->unmapcount) |
return; |
|
/* |
* Start with the rectangle for the complete window. |
* We will then cut pieces out of it as needed. |
*/ |
prc = MwIsClientDC(hdc)? &wp->clirect: &wp->winrect; |
count = 1; |
clip = cliprects; |
clip->x = prc->left; |
clip->y = prc->top; |
clip->width = prc->right - prc->left; |
clip->height = prc->bottom - prc->top; |
|
/* |
* First walk upwards through all parent windows, |
* and restrict the visible part of this window to the part |
* that shows through all of those parent windows client areas. |
*/ |
pwp = wp; |
while (pwp != rootwp) { |
pwp = pwp->parent; |
|
diff = pwp->clirect.left - clip->x; |
if (diff > 0) { |
clip->width -= diff; |
clip->x = pwp->clirect.left; |
} |
|
diff = pwp->clirect.right - (clip->x + clip->width); |
if (diff < 0) |
clip->width += diff; |
|
diff = pwp->clirect.top - clip->y; |
if (diff > 0) { |
clip->height -= diff; |
clip->y = pwp->clirect.top; |
} |
|
diff = pwp->clirect.bottom - (clip->y + clip->height); |
if (diff < 0) |
clip->height += diff; |
} |
|
/* |
* If the window is completely clipped out of view, then |
* set the clipping region to indicate that. |
*/ |
if (clip->width <= 0 || clip->height <= 0) { |
GdSetClipRects(hdc->psd, 1, cliprects); |
return; |
} |
|
/* |
* Now examine all windows that obscure this window, and |
* for each obscuration, break up the clip rectangles into |
* the smaller pieces that are still visible. The windows |
* that can obscure us are the earlier siblings of all of |
* our parents. When clipping the root window, search all children. |
*/ |
toomany = FALSE; |
pwp = wp; |
while (pwp != NULL) { |
wp = pwp; |
pwp = wp->parent; |
if(!pwp) { |
/* We're clipping the root window*/ |
if(hdc->flags & DCX_CLIPCHILDREN) |
/* start with root's children*/ |
sibwp = rootwp->children; |
else sibwp = NULL; /* no search*/ |
wp = NULL; /* search all root's children*/ |
} else { |
if(hdc->flags & DCX_CLIPSIBLINGS) |
sibwp = pwp->children; |
else sibwp = wp; /* no search*/ |
} |
for (; sibwp != wp; sibwp = sibwp->siblings) { |
if (sibwp->unmapcount) |
continue; |
|
toomany |= MwExcludeClipRect(sibwp->winrect.left, |
sibwp->winrect.top, sibwp->winrect.right-1, |
sibwp->winrect.bottom-1, &count, cliprects); |
|
} |
|
/* if not clipping the root window, stop when you reach it*/ |
if(pwp == rootwp) |
break; |
} |
|
/* |
* If not the root window and we're going to be drawing |
* in the client area, clip all children. This is |
* required for non-special paint handling for child windows. |
* Non-client dc's don't clip children in order to get |
* proper border clipping in the case of border-clipped children. |
*/ |
wp = hdc->hwnd; |
if(wp != rootwp && MwIsClientDC(hdc)) { |
for (sibwp=wp->children; sibwp; sibwp = sibwp->siblings) { |
if (sibwp->unmapcount) |
continue; |
|
toomany |= MwExcludeClipRect(sibwp->winrect.left, |
sibwp->winrect.top, sibwp->winrect.right-1, |
sibwp->winrect.bottom-1, &count, cliprects); |
} |
} |
|
if (toomany) { |
/*GsError(GR_ERROR_TOO_MUCH_CLIPPING, wp->id);*/ |
clip->x = 0; |
clip->y = 0; |
clip->width = -1; |
clip->height = -1; |
count = 1; |
} |
|
/* |
* Set the clip rectangles. |
*/ |
GdSetClipRects(hdc->psd, count, cliprects); |
} |
|
static BOOL |
MwExcludeClipRect(int minx,int miny,int maxx,int maxy,int *count, |
MWCLIPRECT *cliprects) |
{ |
int i; /* current index */ |
int newcount; /* number of new rectangles */ |
BOOL toomany = FALSE;/* TRUE if too many clip rects */ |
|
newcount = *count; |
for (i = 0; i < *count; i++) { |
if (newcount > MAX_CLIPRECTS - 3) { |
toomany = TRUE; |
break; |
} |
newcount += MwSplitClipRect(&cliprects[i], |
&cliprects[newcount], |
minx, miny, maxx, maxy); |
} |
*count = newcount; |
return toomany; |
} |
|
/* |
* Check the specified clip rectangle against the specified rectangular |
* region, and reduce it or split it up into multiple clip rectangles |
* such that the specified region is not contained in any of the clip |
* rectangles. The source clip rectangle can be modified in place, and |
* in addition more clip rectangles can be generated, which are placed in |
* the indicated destination location. The maximum number of new clip |
* rectangles needed is 3. Returns the number of clip rectangles added. |
* If the source clip rectangle is totally obliterated, it is set to an |
* impossible region and 0 is returned. When splits are done, we prefer |
* to create wide regions instead of high regions. |
*/ |
static int |
MwSplitClipRect(MWCLIPRECT *srcrect, MWCLIPRECT *destrect, MWCOORD minx, |
MWCOORD miny, MWCOORD maxx, MWCOORD maxy) |
{ |
MWCOORD x; |
MWCOORD y; |
MWCOORD width; |
MWCOORD height; |
MWCOORD dx; |
MWCOORD dy; |
int gaps; |
|
/* |
* First see if there is any overlap at all. |
* If not, then nothing to do. |
*/ |
x = srcrect->x; |
y = srcrect->y; |
width = srcrect->width; |
height = srcrect->height; |
|
if ((minx > maxx) || (miny > maxy) || (maxx < x) || (maxy < y) || |
(x + width <= minx) || (y + height <= miny)) |
return 0; |
|
/* |
* There is an overlap. Calculate a value to differentiate |
* various cases, and then handle each case separately. The |
* cases are classified on whether there are gaps on the left, |
* right, top, and bottom sides of the clip rectangle. |
*/ |
gaps = 0; |
if (x < minx) |
gaps |= GAPVAL(1, 0, 0, 0); |
if (x + width - 1 > maxx) |
gaps |= GAPVAL(0, 1, 0, 0); |
if (y < miny) |
gaps |= GAPVAL(0, 0, 1, 0); |
if (y + height - 1 > maxy) |
gaps |= GAPVAL(0, 0, 0, 1); |
|
switch (gaps) { |
case GAPVAL(0, 0, 0, 0): /* no gaps at all */ |
srcrect->x = 0; |
srcrect->y = 0; |
srcrect->width = 0; |
srcrect->height = 0; |
return 0; |
|
case GAPVAL(0, 0, 0, 1): /* gap on bottom */ |
dy = maxy - y + 1; |
srcrect->y += dy; |
srcrect->height -= dy; |
return 0; |
|
case GAPVAL(0, 0, 1, 0): /* gap on top */ |
srcrect->height = miny - y; |
return 0; |
|
case GAPVAL(0, 0, 1, 1): /* gap on top, bottom */ |
srcrect->height = miny - y; |
destrect->x = x; |
destrect->width = width; |
destrect->y = maxy + 1; |
destrect->height = y + height - maxy - 1; |
return 1; |
|
case GAPVAL(0, 1, 0, 0): /* gap on right */ |
dx = maxx - x + 1; |
srcrect->x += dx; |
srcrect->width -= dx; |
return 0; |
|
case GAPVAL(0, 1, 0, 1): /* gap on right, bottom */ |
dx = maxx - x + 1; |
srcrect->x += dx; |
srcrect->width -= dx; |
srcrect->height = maxy - y + 1; |
destrect->x = x; |
destrect->width = width; |
destrect->y = maxy + 1; |
destrect->height = y + height - maxy - 1; |
return 1; |
|
case GAPVAL(0, 1, 1, 0): /* gap on right, top */ |
dx = maxx - x + 1; |
srcrect->height = miny - y; |
destrect->x = x + dx; |
destrect->width = width - dx; |
destrect->y = miny; |
destrect->height = y + height - miny; |
return 1; |
|
case GAPVAL(0, 1, 1, 1): /* gap on right, top, bottom */ |
dx = maxx - x + 1; |
srcrect->height = miny - y; |
destrect->x = x; |
destrect->width = width; |
destrect->y = maxy + 1; |
destrect->height = y + height - maxy - 1; |
destrect++; |
destrect->x = x + dx; |
destrect->width = width - dx; |
destrect->y = miny; |
destrect->height = maxy - miny + 1; |
return 2; |
|
case GAPVAL(1, 0, 0, 0): /* gap on left */ |
srcrect->width = minx - x; |
return 0; |
|
case GAPVAL(1, 0, 0, 1): /* gap on left, bottom */ |
srcrect->width = minx - x; |
srcrect->height = maxy - y + 1; |
destrect->x = x; |
destrect->width = width; |
destrect->y = maxy + 1; |
destrect->height = y + height - maxy - 1; |
return 1; |
|
case GAPVAL(1, 0, 1, 0): /* gap on left, top */ |
srcrect->height = miny - y; |
destrect->x = x; |
destrect->width = minx - x; |
destrect->y = miny; |
destrect->height = y + height - miny; |
return 1; |
|
case GAPVAL(1, 0, 1, 1): /* gap on left, top, bottom */ |
srcrect->height = miny - y; |
destrect->x = x; |
destrect->width = minx - x; |
destrect->y = miny; |
destrect->height = maxy - miny + 1; |
destrect++; |
destrect->x = x; |
destrect->width = width; |
destrect->y = maxy + 1; |
destrect->height = y + height - maxy - 1; |
return 2; |
|
case GAPVAL(1, 1, 0, 0): /* gap on left, right */ |
destrect->x = maxx + 1; |
destrect->width = x + width - maxx - 1; |
destrect->y = y; |
destrect->height = height; |
srcrect->width = minx - x; |
return 1; |
|
case GAPVAL(1, 1, 0, 1): /* gap on left, right, bottom */ |
dy = maxy - y + 1; |
srcrect->y += dy; |
srcrect->height -= dy; |
destrect->x = x; |
destrect->width = minx - x; |
destrect->y = y; |
destrect->height = dy; |
destrect++; |
destrect->x = maxx + 1; |
destrect->width = x + width - maxx - 1; |
destrect->y = y; |
destrect->height = dy; |
return 2; |
|
case GAPVAL(1, 1, 1, 0): /* gap on left, right, top */ |
srcrect->height = miny - y; |
destrect->x = x; |
destrect->width = minx - x; |
destrect->y = miny; |
destrect->height = y + height - miny; |
destrect++; |
destrect->x = maxx + 1; |
destrect->width = x + width - maxx - 1; |
destrect->y = miny; |
destrect->height = y + height - miny; |
return 2; |
|
case GAPVAL(1, 1, 1, 1): /* gap on all sides */ |
srcrect->height = miny - y; |
destrect->x = x; |
destrect->width = minx - x; |
destrect->y = miny; |
destrect->height = maxy - miny + 1; |
destrect++; |
destrect->x = maxx + 1; |
destrect->width = x + width - maxx - 1; |
destrect->y = miny; |
destrect->height = maxy - miny + 1; |
destrect++; |
destrect->x = x; |
destrect->width = width; |
destrect->y = maxy + 1; |
destrect->height = y + height - maxy - 1; |
return 3; |
} |
return 0; /* NOTREACHED */ |
} |
/winclip2.c
0,0 → 1,164
/* |
* Copyright (c) 2000 Greg Haerr <greg@censoft.com> |
* Portions Copyright (c) 1991 David I. Bell |
* Permission is granted to use, distribute, or modify this source, |
* provided that this copyright notice remains intact. |
* |
* DYNAMICREGIONS MwSetClipWindow |
*/ |
#include "windows.h" |
#include "wintern.h" |
|
/* |
* Set the clip rectangles for a window taking into account other |
* windows that may be obscuring it. The windows that may be obscuring |
* this one are the siblings of each direct ancestor which are higher |
* in priority than those ancestors. Also, each parent limits the visible |
* area of the window. |
*/ |
void |
MwSetClipWindow(HDC hdc) |
{ |
HWND wp = hdc->hwnd; |
HWND pwp; /* parent window */ |
HWND sibwp; /* sibling windows */ |
MWCOORD diff; /* difference in coordinates */ |
PRECT prc; /* client or window rectangle*/ |
MWCLIPREGION *vis, *r; |
MWCOORD x, y, width, height; |
|
/* |
* Start with the rectangle for the complete window. |
* We will then cut pieces out of it as needed. |
*/ |
prc = MwIsClientDC(hdc)? &wp->clirect: &wp->winrect; |
x = prc->left; |
y = prc->top; |
width = prc->right - prc->left; |
height = prc->bottom - prc->top; |
|
/* |
* First walk upwards through all parent windows, |
* and restrict the visible part of this window to the part |
* that shows through all of those parent windows client areas. |
*/ |
pwp = wp; |
while (pwp != rootwp) { |
pwp = pwp->parent; |
|
diff = pwp->clirect.left - x; |
if (diff > 0) { |
width -= diff; |
x = pwp->clirect.left; |
} |
|
diff = pwp->clirect.right - (x + width); |
if (diff < 0) |
width += diff; |
|
diff = pwp->clirect.top - y; |
if (diff > 0) { |
height -= diff; |
y = pwp->clirect.top; |
} |
|
diff = pwp->clirect.bottom - (y + height); |
if (diff < 0) |
height += diff; |
} |
|
/* |
* If the window is completely clipped out of view, then |
* set the clipping region to indicate that. |
*/ |
if (width <= 0 || height <= 0) { |
GdSetClipRegion(hdc->psd, NULL); |
return; |
} |
|
/* |
* Allocate initial vis region to parent-clipped size of window |
*/ |
vis = GdAllocRectRegion(x, y, x+width, y+height); |
|
/* |
* Allocate temp region |
*/ |
r = GdAllocRegion(); |
|
/* |
* Now examine all windows that obscure this window, and |
* for each obscuration, break up the clip rectangles into |
* the smaller pieces that are still visible. The windows |
* that can obscure us are the earlier siblings of all of |
* our parents. When clipping the root window, search all children. |
*/ |
pwp = wp; |
while (pwp != NULL) { |
wp = pwp; |
pwp = wp->parent; |
if(!pwp) { |
/* We're clipping the root window*/ |
if(hdc->flags & DCX_CLIPCHILDREN) |
/* start with root's children*/ |
sibwp = rootwp->children; |
else sibwp = NULL; /* no search*/ |
wp = NULL; /* search all root's children*/ |
} else { |
if(hdc->flags & DCX_CLIPSIBLINGS) |
sibwp = pwp->children; |
else sibwp = wp; /* no search*/ |
} |
for (; sibwp != wp; sibwp = sibwp->siblings) { |
if (sibwp->unmapcount) |
continue; |
|
GdSetRectRegionIndirect(r, &sibwp->winrect); |
GdSubtractRegion(vis, vis, r); |
} |
|
/* if not clipping the root window, stop when you reach it*/ |
if(pwp == rootwp) |
break; |
} |
|
/* |
* If not the root window and we're going to be drawing |
* in the client area, clip all children. This is |
* required for non-special paint handling for child windows. |
* Non-client dc's don't clip children in order to get |
* proper border clipping in the case of border-clipped children. |
*/ |
wp = hdc->hwnd; |
if(wp != rootwp && MwIsClientDC(hdc)) { |
for (sibwp=wp->children; sibwp; sibwp = sibwp->siblings) { |
if (sibwp->unmapcount) |
continue; |
|
GdSetRectRegionIndirect(r, &sibwp->winrect); |
GdSubtractRegion(vis, vis, r); |
} |
} |
|
#if UPDATEREGIONS |
/* |
* Intersect with update region, unless requested not to. |
*/ |
if(!(hdc->flags & DCX_EXCLUDEUPDATE)) |
GdIntersectRegion(vis, vis, wp->update); |
#endif |
/* |
* Intersect with user region, if set. |
*/ |
if (hdc->region) |
GdIntersectRegion(vis, vis, hdc->region->rgn); |
/* |
* Set the clip region (later destroy handled by GdSetClipRegion) |
*/ |
GdSetClipRegion(hdc->psd, vis); |
|
/* |
* Destroy temp region |
*/ |
GdDestroyRegion(r); |
} |
/Makefile
0,0 → 1,55
############################################################################## |
# Microwindows template Makefile |
# Copyright (c) 2000, 2002 Martin Jolicoeur, Greg Haerr |
############################################################################## |
|
ifndef TOP |
TOP = .. |
CONFIG = $(TOP)/config |
endif |
|
include $(CONFIG) |
|
VPATH := $(TOP)/mwin |
|
######################## Additional Flags section ############################ |
|
# Directories list for header files |
INCLUDEDIRS += |
|
# Defines for preprocessor |
ifeq ($(ERASEMOVE), Y) |
DEFINES += -DERASEMOVE=1 |
endif |
|
ifeq ($(UPDATEREGIONS), Y) |
DEFINES += -DUPDATEREGIONS=1 |
endif |
|
# Compilation flags for C files OTHER than include directories |
CFLAGS += |
# Preprocessor flags OTHER than defines |
CPPFLAGS += |
# Linking flags |
LDFLAGS += |
|
############################# targets section ################################ |
|
ifeq ($(MICROWIN), Y) |
|
# If you want to create a library with the objects files, define the name here |
LIBNAME = libmwin.a |
LIBNAMESO = libmwin.so |
|
# List of objects to compile |
OBJS = winmain.o winuser.o wingdi.o winexpos.o winclip.o winevent.o\ |
windefw.o winrgn.o winfont.o winsbar.o |
|
endif |
|
######################### Makefile.rules section ############################# |
|
include $(TOP)/Makefile.rules |
|
######################## Tools targets section ############################### |
|
/winuser.c
0,0 → 1,1420
/* |
* Copyright (c) 1999 Greg Haerr <greg@censoft.com> |
* |
* Win32 API upper level window creation, management and msg routines |
*/ |
#include "windows.h" |
#include "wintern.h" |
#include "device.h" |
#include <stdlib.h> |
#include <string.h> |
|
#define PAINTONCE 1 /* =1 to queue paint msgs only once*/ |
#define MOUSETEST 1 |
|
MWLISTHEAD mwMsgHead; /* application msg queue*/ |
MWLISTHEAD mwClassHead; /* register class list*/ |
|
int mwSYSMETRICS_CYCAPTION = 12; /* Y caption height*/ |
int mwSYSMETRICS_CXFRAME = 3; /* width of frame border*/ |
int mwSYSMETRICS_CYFRAME = 3; /* height of frame border*/ |
int mwSYSMETRICS_CXBORDER = 1; /* width of single border*/ |
int mwSYSMETRICS_CYBORDER = 1; /* width of single border*/ |
int mwSYSMETRICS_CXVSCROLL = 13; /* width of vertical scrollbar*/ |
int mwSYSMETRICS_CYHSCROLL = 13; /* height of horizontal scrollbar*/ |
int mwSYSMETRICS_CXHSCROLL = 13; /* width of arrow on horz scrollbar*/ |
int mwSYSMETRICS_CYVSCROLL = 13; /* height of arrow on vert scrollbar*/ |
int mwSYSMETRICS_CXDOUBLECLK = 2; /* +/- X double click position*/ |
int mwSYSMETRICS_CYDOUBLECLK = 2; /* +/- Y double click position*/ |
int mwpaintSerial = 1; /* experimental alphablend sequencing*/ |
int mwpaintNC = 1; /* experimental NC paint handling*/ |
BOOL mwforceNCpaint = FALSE; /* force NC paint when alpha blending*/ |
|
static void MwOffsetChildren(HWND hwnd, int offx, int offy); |
|
LRESULT WINAPI |
CallWindowProc(WNDPROC lpPrevWndFunc, HWND hwnd, UINT Msg, WPARAM wParam, |
LPARAM lParam) |
{ |
return (*lpPrevWndFunc)(hwnd, Msg, wParam, lParam); |
} |
|
LRESULT WINAPI |
SendMessage(HWND hwnd, UINT Msg,WPARAM wParam,LPARAM lParam) |
{ |
if(hwnd && hwnd->pClass) { |
hwnd->paintSerial = mwpaintSerial; /* assign msg sequence #*/ |
return (*hwnd->pClass->lpfnWndProc)(hwnd, Msg, wParam, lParam); |
} |
return 0; |
} |
|
BOOL WINAPI |
PostMessage(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) |
{ |
MSG * pMsg; |
|
#if PAINTONCE |
/* don't queue paint msgs, set window paint status instead*/ |
if(Msg == WM_PAINT) { |
hwnd->gotPaintMsg = PAINT_NEEDSPAINT; |
return TRUE; |
} |
#endif |
#if MOUSETEST |
/* replace multiple mouse messages with one for better mouse handling*/ |
if(Msg == WM_MOUSEMOVE) { |
PMWLIST p; |
for(p=mwMsgHead.head; p; p=p->next) { |
pMsg = GdItemAddr(p, MSG, link); |
if(pMsg->hwnd == hwnd && pMsg->message == Msg) { |
pMsg->wParam = wParam; |
pMsg->lParam = lParam; |
pMsg->time = GetTickCount(); |
pMsg->pt.x = cursorx; |
pMsg->pt.y = cursory; |
return TRUE; |
} |
} |
} |
#endif |
pMsg = GdItemNew(MSG); |
if(!pMsg) |
return FALSE; |
pMsg->hwnd = hwnd; |
pMsg->message = Msg; |
pMsg->wParam = wParam; |
pMsg->lParam = lParam; |
pMsg->time = GetTickCount(); |
pMsg->pt.x = cursorx; |
pMsg->pt.y = cursory; |
GdListAdd(&mwMsgHead, &pMsg->link); |
return TRUE; |
} |
|
/* currently, we post to the single message queue, regardless of thread*/ |
BOOL WINAPI |
PostThreadMessage(DWORD dwThreadId, UINT Msg, WPARAM wParam, LPARAM lParam) |
{ |
return PostMessage(NULL, Msg, wParam, lParam); |
} |
|
VOID WINAPI |
PostQuitMessage(int nExitCode) |
{ |
PostMessage(NULL, WM_QUIT, nExitCode, 0L); |
} |
|
static BOOL |
chkPaintMsg(HWND wp, LPMSG lpMsg) |
{ |
/* |
* Tricky: only repaint window if there |
* isn't a mouse capture (window move) in progress, |
* or the window is the moving window. |
*/ |
if(wp->gotPaintMsg == PAINT_NEEDSPAINT && |
(!dragwp || dragwp == wp)) { |
paint: |
wp->gotPaintMsg = PAINT_PAINTED; |
lpMsg->hwnd = wp; |
lpMsg->message = WM_PAINT; |
lpMsg->wParam = 0; |
lpMsg->lParam = 0; |
lpMsg->time = 0; |
lpMsg->pt.x = cursorx; |
lpMsg->pt.y = cursory; |
return TRUE; |
} else if(dragwp && wp->gotPaintMsg == PAINT_NEEDSPAINT) { |
/* All other windows we'll check for |
* event input first, then allow repaint. |
*/ |
MwSelect(); |
if(mwMsgHead.head == NULL) |
goto paint; |
} |
return FALSE; |
} |
|
BOOL WINAPI |
PeekMessage(LPMSG lpMsg, HWND hwnd, UINT uMsgFilterMin, UINT uMsgFilterMax, |
UINT wRemoveMsg) |
{ |
HWND wp; |
PMSG pNxtMsg; |
|
/* check if no messages in queue*/ |
if(mwMsgHead.head == NULL) { |
#if PAINTONCE |
/* check all windows for pending paint messages*/ |
for(wp=listwp; wp; wp=wp->next) { |
if(!(wp->style & WS_CHILD)) { |
if(chkPaintMsg(wp, lpMsg)) |
return TRUE; |
} |
} |
for(wp=listwp; wp; wp=wp->next) { |
if(wp->style & WS_CHILD) { |
if(chkPaintMsg(wp, lpMsg)) |
return TRUE; |
} |
} |
#endif |
MwSelect(); |
} |
|
if(mwMsgHead.head == NULL) |
return FALSE; |
|
pNxtMsg = (PMSG)mwMsgHead.head; |
if(wRemoveMsg & PM_REMOVE) |
GdListRemove(&mwMsgHead, &pNxtMsg->link); |
*lpMsg = *pNxtMsg; |
if(wRemoveMsg & PM_REMOVE) |
GdItemFree(pNxtMsg); |
return TRUE; |
} |
|
BOOL WINAPI |
GetMessage(LPMSG lpMsg,HWND hwnd,UINT wMsgFilterMin,UINT wMsgFilterMax) |
{ |
/* |
* currently MwSelect() must poll for VT switch reasons, |
* so this code will work |
*/ |
while(!PeekMessage(lpMsg, hwnd, wMsgFilterMin, wMsgFilterMax,PM_REMOVE)) |
continue; |
return lpMsg->message != WM_QUIT; |
} |
|
BOOL WINAPI |
TranslateMessage(CONST MSG *lpMsg) |
{ |
return FALSE; |
} |
|
LONG WINAPI |
DispatchMessage(CONST MSG *lpMsg) |
{ |
return SendMessage(lpMsg->hwnd, lpMsg->message, lpMsg->wParam, |
lpMsg->lParam); |
} |
|
/* find the registered window class struct by name*/ |
PWNDCLASS |
MwFindClassByName(LPCSTR lpClassName) |
{ |
PMWLIST p; |
PWNDCLASS pClass; |
|
for(p=mwClassHead.head; p; p=p->next) { |
pClass = GdItemAddr(p, WNDCLASS, link); |
if(strcmpi(pClass->szClassName, lpClassName) == 0) |
return pClass; |
} |
return NULL; |
} |
|
ATOM WINAPI |
RegisterClass(CONST WNDCLASS *lpWndClass) |
{ |
PWNDCLASS pClass; |
|
/* check if already present*/ |
pClass = MwFindClassByName(lpWndClass->lpszClassName); |
if(pClass) |
return 0; |
|
/* copy class into new struct*/ |
pClass = GdItemNew(WNDCLASS); |
if(!pClass) |
return 0; |
*pClass = *lpWndClass; |
strcpy(pClass->szClassName, lpWndClass->lpszClassName); |
GdListAdd(&mwClassHead, &pClass->link); |
|
return 1; |
} |
|
BOOL WINAPI |
UnregisterClass(LPCSTR lpClassName, HINSTANCE hInstance) |
{ |
PWNDCLASS pClass; |
|
pClass = MwFindClassByName(lpClassName); |
if(!pClass) |
return FALSE; |
GdListRemove(&mwClassHead, &pClass->link); |
DeleteObject(pClass->hbrBackground); |
GdItemFree(pClass); |
return TRUE; |
} |
|
HWND WINAPI |
CreateWindowEx(DWORD dwExStyle, LPCSTR lpClassName, LPCSTR lpWindowName, |
DWORD dwStyle, int x, int y, int nWidth, int nHeight, |
HWND hwndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam) |
{ |
HWND pwp; /* parent window */ |
HWND wp; /* new window */ |
HWND hwndOwner; |
PWNDCLASS pClass; |
CREATESTRUCT cs; |
static int nextx = 20; |
static int nexty = 20; |
|
pClass = MwFindClassByName(lpClassName); |
if(!pClass) |
return NULL; |
|
if(x == CW_USEDEFAULT || y == CW_USEDEFAULT) { |
x = nextx; |
nextx += 10; |
y = nexty; |
nexty += 10; |
if(nextx > 200) |
nextx = nexty = 20; |
} |
if(nWidth == CW_USEDEFAULT || nHeight == CW_USEDEFAULT) { |
nWidth = 250; |
nHeight = 250; |
} |
|
if(hwndParent == NULL) { |
if(dwStyle & WS_CHILD) |
return NULL; |
pwp = rootwp; |
} else |
pwp = hwndParent; |
|
/* WS_POPUP z-order parent is the root window (passed parent is owner)*/ |
if(dwStyle & WS_POPUP) |
pwp = rootwp; /* force clip to root, not z-parent*/ |
|
/* window owner is NULL for child windows, else it's the passed parent*/ |
if(dwStyle & WS_CHILD) |
hwndOwner = NULL; |
else hwndOwner = hwndParent; |
|
wp = (HWND)GdItemAlloc(sizeof(struct hwnd) - 1 + pClass->cbWndExtra); |
if(!wp) |
return NULL; |
|
/* force all clipping on by default*/ |
dwStyle |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN; |
|
wp->pClass = pClass; |
wp->style = dwStyle; |
wp->exstyle = dwExStyle; |
wp->parent = pwp; |
wp->owner = hwndOwner; |
wp->children = NULL; |
wp->siblings = pwp->children; |
pwp->children = wp; |
wp->next = listwp; |
listwp = wp; |
wp->winrect.left = pwp->clirect.left + x; |
wp->winrect.top = pwp->clirect.top + y; |
wp->winrect.right = wp->winrect.left + nWidth; |
wp->winrect.bottom = wp->winrect.top + nHeight; |
wp->cursor = pwp->cursor; |
wp->cursor->usecount++; |
wp->unmapcount = pwp->unmapcount + 1; |
wp->id = (int)hMenu; |
wp->gotPaintMsg = PAINT_PAINTED; |
strzcpy(wp->szTitle, lpWindowName, sizeof(wp->szTitle)); |
#if UPDATEREGIONS |
wp->update = GdAllocRegion(); |
#endif |
wp->nextrabytes = pClass->cbWndExtra; |
|
/* calculate client area*/ |
MwCalcClientRect(wp); |
|
cs.lpCreateParams = lpParam; |
cs.hInstance = hInstance; |
cs.hMenu = hMenu; |
cs.hwndParent = hwndParent; |
cs.cy = nHeight; |
cs.cx = nWidth; |
cs.y = y; |
cs.x = x; |
cs.style = dwStyle; |
cs.lpszName = lpWindowName; |
cs.lpszClass = lpClassName; |
cs.dwExStyle = dwExStyle; |
|
if(SendMessage(wp, WM_CREATE, 0, (LPARAM)(LPSTR)&cs) == -1) { |
MwDestroyWindow(wp, FALSE); |
return NULL; |
} |
|
/* send SIZE and MOVE msgs*/ |
MwSendSizeMove(wp, TRUE, TRUE); |
|
if(wp->style & WS_VISIBLE) { |
MwShowWindow(wp, TRUE); |
SetFocus(wp); |
} |
|
return wp; |
} |
|
BOOL WINAPI |
DestroyWindow(HWND hwnd) |
{ |
MwDestroyWindow(hwnd, TRUE); |
return TRUE; |
} |
|
/* |
* Destroy the specified window, and all of its children. |
* This is a recursive routine. |
*/ |
void |
MwDestroyWindow(HWND hwnd,BOOL bSendMsg) |
{ |
HWND wp = hwnd; |
HWND prevwp; |
PMWLIST p; |
PMSG pmsg; |
|
if (wp == rootwp) |
return; |
|
/* |
* Unmap the window. |
*/ |
if (wp->unmapcount == 0) |
MwHideWindow(wp, FALSE, FALSE); |
|
if(bSendMsg) |
SendMessage(hwnd, WM_DESTROY, 0, 0L); |
|
/* |
* Disable all sendmessages to this window. |
*/ |
wp->pClass = NULL; |
|
/* |
* Destroy all children, sending WM_DESTROY messages. |
*/ |
while (wp->children) |
MwDestroyWindow(wp->children, bSendMsg); |
|
/* |
* Free any cursor associated with the window. |
*/ |
if (wp->cursor->usecount-- == 1) { |
free(wp->cursor); |
wp->cursor = NULL; |
} |
|
/* |
* Remove this window from the child list of its parent. |
*/ |
prevwp = wp->parent->children; |
if (prevwp == wp) |
wp->parent->children = wp->siblings; |
else { |
while (prevwp->siblings != wp) |
prevwp = prevwp->siblings; |
prevwp->siblings = wp->siblings; |
} |
wp->siblings = NULL; |
|
/* |
* Remove this window from the complete list of windows. |
*/ |
prevwp = listwp; |
if (prevwp == wp) |
listwp = wp->next; |
else { |
while (prevwp->next != wp) |
prevwp = prevwp->next; |
prevwp->next = wp->next; |
} |
wp->next = NULL; |
|
/* |
* Forget various information related to this window. |
* Then finally free the structure. |
*/ |
|
/* Remove all messages from msg queue for this window*/ |
for(p=mwMsgHead.head; p; ) { |
pmsg = GdItemAddr(p, MSG, link); |
if(pmsg->hwnd == wp) { |
p = p->next; |
GdListRemove(&mwMsgHead, &pmsg->link); |
GdItemFree(p); |
} else |
p = p->next; |
} |
|
/* FIXME: destroy hdc's relating to window?*/ |
|
if (wp == capturewp) { |
capturewp = NULL; |
MwCheckMouseWindow(); |
} |
|
if (wp == MwGetTopWindow(focuswp)) |
SetFocus(rootwp->children? rootwp->children: rootwp); |
|
/* destroy private DC*/ |
if(wp->owndc) { |
HDC hdc = wp->owndc; |
wp->owndc = NULL; /* force destroy with ReleaseDC*/ |
ReleaseDC(wp, hdc); |
} |
#if UPDATEREGIONS |
GdDestroyRegion(wp->update); |
#endif |
GdItemFree(wp); |
} |
|
BOOL WINAPI |
IsWindow(HWND hwnd) |
{ |
HWND wp; |
|
for(wp=listwp; wp; wp=wp->next) |
if(wp == hwnd) |
return TRUE; |
return FALSE; |
} |
|
BOOL WINAPI |
ShowWindow(HWND hwnd, int nCmdShow) |
{ |
if(!hwnd) |
return FALSE; |
|
/* fix: send show msg*/ |
|
switch(nCmdShow) { |
case SW_HIDE: |
if (!(hwnd->style & WS_VISIBLE)) |
return FALSE; |
MwHideWindow(hwnd, TRUE, TRUE); |
hwnd->style &= ~WS_VISIBLE; |
break; |
|
default: |
if (hwnd->style & WS_VISIBLE) |
return FALSE; |
hwnd->style |= WS_VISIBLE; |
MwShowWindow(hwnd, TRUE); |
} |
return TRUE; |
} |
|
BOOL WINAPI |
InvalidateRect(HWND hwnd, CONST RECT *lpRect, BOOL bErase) |
{ |
/* FIXME: handle bErase*/ |
if(!hwnd) |
MwRedrawScreen(); |
else { |
#if UPDATEREGIONS |
RECT rc; |
|
/* add to update region*/ |
if(!lpRect) |
GetClientRect(hwnd, &rc); |
else rc = *lpRect; |
rc.bottom += mwSYSMETRICS_CYCAPTION + |
mwSYSMETRICS_CYFRAME + 1; |
rc.right += mwSYSMETRICS_CXFRAME; |
MwUnionUpdateRegion(hwnd, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, TRUE); |
|
/* if update region not empty, mark as needing painting*/ |
if(hwnd->update->numRects != 0) |
#endif |
if(hwnd->gotPaintMsg == PAINT_PAINTED) |
hwnd->gotPaintMsg = PAINT_NEEDSPAINT; |
} |
return TRUE; |
} |
|
#if UPDATEREGIONS |
/* add region to window update region*/ |
BOOL WINAPI |
InvalidateRgn(HWND hwnd, HRGN hrgn, BOOL bErase) |
{ |
/* FIXME: handle bErase*/ |
if(hwnd) { |
if(!hrgn) |
/* add client area to update region*/ |
return InvalidateRect(hwnd, NULL, bErase); |
|
/* passed region is in client coords, convert to screen*/ |
GdOffsetRegion(((MWRGNOBJ *)hrgn)->rgn, |
hwnd->clirect.left, hwnd->clirect.top); |
GdUnionRegion(hwnd->update, hwnd->update, |
((MWRGNOBJ *)hrgn)->rgn); |
GdOffsetRegion(((MWRGNOBJ *)hrgn)->rgn, |
-hwnd->clirect.left, -hwnd->clirect.top); |
|
/* if update region not empty, mark as needing painting*/ |
if(hwnd->update->numRects != 0) |
if(hwnd->gotPaintMsg == PAINT_PAINTED) |
hwnd->gotPaintMsg = PAINT_NEEDSPAINT; |
} |
return TRUE; |
} |
|
BOOL WINAPI |
ValidateRect(HWND hwnd, CONST RECT *lprc) |
{ |
RECT rc; |
|
if(!hwnd) |
MwRedrawScreen(); |
else { |
/* subtract from update region*/ |
if(!lprc) |
GetClientRect(hwnd, &rc); |
else rc = *lprc; |
rc.bottom += mwSYSMETRICS_CYCAPTION + |
mwSYSMETRICS_CYFRAME + 1; |
rc.right += mwSYSMETRICS_CXFRAME; |
MwUnionUpdateRegion(hwnd, rc.left, rc.top, |
rc.right-rc.left, rc.bottom-rc.top, FALSE); |
|
/* if update region empty, mark window as painted*/ |
if(hwnd->update->numRects == 0) |
if(hwnd->gotPaintMsg == PAINT_NEEDSPAINT) |
hwnd->gotPaintMsg = PAINT_PAINTED; |
} |
return TRUE; |
} |
|
/* remove region from window update region*/ |
BOOL WINAPI |
ValidateRgn(HWND hwnd, HRGN hrgn) |
{ |
if(hwnd) { |
if(!hrgn) |
/* remove client area from update region*/ |
return ValidateRect(hwnd, NULL); |
|
/* passed region is in client coords, convert to screen*/ |
GdOffsetRegion(((MWRGNOBJ *)hrgn)->rgn, |
hwnd->clirect.left, hwnd->clirect.top); |
GdSubtractRegion(hwnd->update, hwnd->update, |
((MWRGNOBJ *)hrgn)->rgn); |
GdOffsetRegion(((MWRGNOBJ *)hrgn)->rgn, |
-hwnd->clirect.left, -hwnd->clirect.top); |
|
/* if update region empty, mark window as painted*/ |
if(hwnd->update->numRects == 0) |
if(hwnd->gotPaintMsg == PAINT_NEEDSPAINT) |
hwnd->gotPaintMsg = PAINT_PAINTED; |
} |
return TRUE; |
} |
#endif /* UPDATEREGIONS*/ |
|
BOOL WINAPI |
UpdateWindow(HWND hwnd) |
{ |
#if PAINTONCE |
if(hwnd && hwnd->gotPaintMsg == PAINT_NEEDSPAINT) { |
SendMessage(hwnd, WM_PAINT, 0, 0L); |
hwnd->gotPaintMsg = PAINT_PAINTED; |
return TRUE; |
} |
return FALSE; |
#else |
/* fix: remove other paint messages from queue*/ |
SendMessage(hwnd, WM_PAINT, 0, 0L); |
return TRUE; |
#endif |
} |
|
HWND WINAPI |
GetFocus(VOID) |
{ |
return focuswp; |
} |
|
HWND WINAPI |
SetFocus(HWND hwnd) |
{ |
HWND oldfocus; |
HWND top, top2; |
|
/* if NULL or hidden, set focus to desktop*/ |
if(!hwnd || hwnd->unmapcount) |
hwnd = rootwp; |
|
if(hwnd == focuswp) |
return focuswp; |
|
oldfocus = focuswp; |
SendMessage(oldfocus, WM_KILLFOCUS, (WPARAM)hwnd, 0L); |
focuswp = hwnd; |
SendMessage(focuswp, WM_SETFOCUS, (WPARAM)oldfocus, 0L); |
|
/* FIXME SetActiveWindow() here?*/ |
top = MwGetTopWindow(oldfocus); |
top2 = MwGetTopWindow(focuswp); |
if(top2 != top) { |
/* send deactivate*/ |
SendMessage(top, WM_ACTIVATE, (WPARAM)MAKELONG(WA_INACTIVE, 0), |
(LPARAM)top2); |
/* repaint captions*/ |
MwPaintNCArea(top); |
#if 0 |
/* Make sure that caption area is fully invalidated, |
* as repaint will be in active color. |
* FIXME: this doesn't work; breaks terminal emulator |
* on focus out/in |
*/ |
MwUnionUpdateRegion(top2, 0, 0, |
top2->winrect.right-top2->winrect.left, |
mwSYSMETRICS_CYCAPTION+4, TRUE); |
#endif |
/* send deactivate*/ |
SendMessage(top, WM_ACTIVATE, (WPARAM)MAKELONG(WA_ACTIVE, 0), |
(LPARAM)top); |
MwPaintNCArea(top2); |
} |
|
return oldfocus; |
} |
|
/* the foreground window is the top level window at the top of the z order*/ |
/* setting the foreground window sets focus and moves window to top*/ |
BOOL WINAPI |
SetForegroundWindow(HWND hwnd) |
{ |
/* activate (set focus to) specified window*/ |
SetFocus(hwnd); |
|
/* raise top level parent to top of z order*/ |
SetWindowPos(MwGetTopWindow(hwnd), HWND_TOP, 0, 0, 0, 0, |
SWP_NOMOVE|SWP_NOSIZE); |
|
return TRUE; |
} |
|
/* our SetActiveWindow is the same as SetFocus, no z order change*/ |
HWND WINAPI |
SetActiveWindow(HWND hwnd) |
{ |
HWND oldActive; |
|
oldActive = GetActiveWindow(); |
SetFocus(hwnd); /* WM_ACTIVATE sent by SetFocus*/ |
return oldActive; |
} |
|
/* The active window is the first non-child ancestor of focus window*/ |
HWND WINAPI |
GetActiveWindow(VOID) |
{ |
return MwGetTopWindow(focuswp); |
} |
|
/* activate the top level window associated with window*/ |
BOOL WINAPI |
BringWindowToTop(HWND hwnd) |
{ |
return SetForegroundWindow(hwnd); |
} |
|
HWND WINAPI |
GetDesktopWindow(VOID) |
{ |
return rootwp; |
} |
|
HWND |
MwGetTopWindow(HWND hwnd) |
{ |
while(hwnd->style & WS_CHILD) |
hwnd = hwnd->parent; |
return hwnd; |
} |
|
HWND WINAPI |
GetParent(HWND hwnd) |
{ |
/* top level windows return NULL instead of rootwp*/ |
if(!hwnd || !(hwnd->style & (WS_POPUP|WS_CHILD))) |
return NULL; /* toplevel window*/ |
if(hwnd->style & WS_POPUP) |
return hwnd->owner; /* popup window*/ |
return hwnd->parent; /* child window*/ |
} |
|
BOOL WINAPI |
EnableWindow(HWND hwnd, BOOL bEnable) |
{ |
if(bEnable && (hwnd->style & WS_DISABLED)) { |
/* enable window*/ |
hwnd->style &= ~WS_DISABLED; |
SendMessage(hwnd, WM_ENABLE, TRUE, 0L); |
return TRUE; |
} |
if(!bEnable && !(hwnd->style & WS_DISABLED)) { |
/* disable window*/ |
hwnd->style |= WS_DISABLED; |
/* FIXME: handle lost focus for child window of hwnd*/ |
/* FIXME: handle lost focus for capture window*/ |
if(hwnd == focuswp) |
SetFocus(NULL); |
SendMessage(hwnd, WM_ENABLE, FALSE, 0L); |
return FALSE; |
} |
return (hwnd->style & WS_DISABLED) != 0; |
} |
|
/* calc window rect from client rect in screen coords*/ |
BOOL WINAPI |
AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu, DWORD dwExStyle) |
{ |
int yoffset; |
|
if(dwStyle & WS_BORDER) { |
if((dwStyle & WS_CAPTION) == WS_CAPTION) { |
InflateRect(lpRect, mwSYSMETRICS_CXFRAME, |
mwSYSMETRICS_CYFRAME); |
yoffset = mwSYSMETRICS_CYCAPTION + 1; |
lpRect->top -= yoffset; |
lpRect->bottom -= yoffset; |
} else |
InflateRect(lpRect, 1, 1); |
|
/* make sure upper left is on screen*/ |
if(lpRect->left < 0) { |
lpRect->right -= lpRect->left; |
lpRect->left = 0; |
} |
if(lpRect->top < 0) { |
lpRect->bottom -= lpRect->top; |
lpRect->top = 0; |
} |
} |
return TRUE; |
} |
|
/* set the client rect for a window from the window position*/ |
void |
MwCalcClientRect(HWND hwnd) |
{ |
NCCALCSIZE_PARAMS nccs; |
|
/* set first rectangle to window rect*/ |
nccs.rgrc[0] = hwnd->winrect; |
SendMessage(hwnd, WM_NCCALCSIZE, FALSE, (LPARAM)(LPSTR)&nccs); |
hwnd->clirect = nccs.rgrc[0]; |
|
/* adjust client area if scrollbar(s) visible*/ |
MwAdjustNCScrollbars(hwnd); |
} |
|
BOOL WINAPI |
GetClientRect(HWND hwnd, LPRECT lpRect) |
{ |
if(!hwnd || !lpRect) |
return FALSE; |
|
/* convert client area rect from screen coordinates*/ |
lpRect->left = 0; |
lpRect->top = 0; |
lpRect->right = hwnd->clirect.right - hwnd->clirect.left; |
lpRect->bottom = hwnd->clirect.bottom - hwnd->clirect.top; |
return TRUE; |
} |
|
BOOL WINAPI |
GetWindowRect(HWND hwnd, LPRECT lpRect) |
{ |
if(!hwnd || !lpRect) |
return FALSE; |
|
/* window rect is already in screen coordinates*/ |
*lpRect = hwnd->winrect; |
return TRUE; |
} |
|
BOOL WINAPI |
ClientToScreen(HWND hwnd, LPPOINT lpPoint) |
{ |
if(!hwnd || !lpPoint) |
return FALSE; |
MapWindowPoints(hwnd, NULL, lpPoint, 1); |
return TRUE; |
} |
|
BOOL WINAPI |
ScreenToClient(HWND hwnd, LPPOINT lpPoint) |
{ |
if(!hwnd || !lpPoint) |
return FALSE; |
MapWindowPoints(NULL, hwnd, lpPoint, 1); |
return TRUE; |
} |
|
int WINAPI |
MapWindowPoints(HWND hwndFrom, HWND hwndTo, LPPOINT lpPoints, UINT cPoints) |
{ |
MWCOORD offx = 0; |
MWCOORD offy = 0; |
|
/* map src window to screen coords*/ |
if(hwndFrom) { |
offx = hwndFrom->clirect.left; |
offy = hwndFrom->clirect.top; |
} |
|
/* map to dst window client coords*/ |
if(hwndTo) { |
offx -= hwndTo->clirect.left; |
offy -= hwndTo->clirect.top; |
} |
|
/* adjust points*/ |
while(cPoints--) { |
lpPoints->x += offx; |
lpPoints->y += offy; |
++lpPoints; |
} |
return (int)MAKELONG(offx, offy); |
} |
|
BOOL WINAPI |
SetRect(LPRECT lprc, int xLeft, int yTop, int xRight, int yBottom) |
{ |
lprc->left = xLeft; |
lprc->top = yTop; |
lprc->right = xRight; |
lprc->bottom = yBottom; |
return TRUE; |
} |
|
BOOL WINAPI |
SetRectEmpty(LPRECT lprc) |
{ |
lprc->left = lprc->right = lprc->top = lprc->bottom = 0; |
return TRUE; |
} |
|
BOOL WINAPI |
CopyRect(LPRECT lprcDst, CONST RECT *lprcSrc) |
{ |
*lprcDst = *lprcSrc; |
return TRUE; |
} |
|
BOOL WINAPI |
IsRectEmpty(CONST RECT *lprc) |
{ |
/* FIXME: should this just be ==, not <= ?*/ |
/*return lprc->left == lprc->right || lprc->top == lprc->bottom;*/ |
return lprc->right <= lprc->left || lprc->bottom <= lprc->top; |
} |
|
BOOL WINAPI |
InflateRect(LPRECT lprc, int dx, int dy) |
{ |
lprc->left -= dx; |
lprc->top -= dy; |
lprc->right += dx; |
lprc->bottom += dy; |
return TRUE; |
} |
|
BOOL WINAPI |
OffsetRect(LPRECT lprc, int dx, int dy) |
{ |
lprc->left += dx; |
lprc->right += dx; |
lprc->top += dy; |
lprc->bottom += dy; |
return TRUE; |
} |
|
/* PtInRect is #defined to MwPTINRECT because of bcc struct passing bug*/ |
BOOL WINAPI |
MwPTINRECT(CONST RECT *lprc, POINT pt) |
{ |
return (pt.x >= lprc->left && pt.x < lprc->right && |
pt.y >= lprc->top && pt.y < lprc->bottom); |
} |
|
LONG WINAPI |
GetWindowLong(HWND hwnd, int nIndex) |
{ |
switch(nIndex) { |
case GWL_WNDPROC: |
return (LONG)hwnd->pClass->lpfnWndProc; |
case GWL_HINSTANCE: |
/* nyi*/ |
break; |
case GWL_HWNDPARENT: |
return (LONG)hwnd->parent; |
case GWL_ID: |
return hwnd->id; |
case GWL_STYLE: |
return hwnd->style; |
case GWL_EXSTYLE: |
return hwnd->exstyle; |
case GWL_USERDATA: |
return hwnd->userdata; |
default: |
if(nIndex+3 < hwnd->nextrabytes) |
return *(LONG *)&hwnd->extrabytes[nIndex]; |
} |
return 0; |
} |
|
LONG WINAPI |
SetWindowLong(HWND hwnd, int nIndex, LONG lNewLong) |
{ |
LONG oldval = 0; |
|
switch(nIndex) { |
case GWL_USERDATA: |
oldval = hwnd->userdata; |
hwnd->userdata = lNewLong; |
break; |
case GWL_WNDPROC: |
oldval = (LONG)hwnd->pClass->lpfnWndProc; |
hwnd->pClass->lpfnWndProc = (WNDPROC)lNewLong; |
break; |
case GWL_HINSTANCE: |
case GWL_HWNDPARENT: |
case GWL_ID: |
case GWL_STYLE: |
case GWL_EXSTYLE: |
/* nyi*/ |
break; |
default: |
if(nIndex+3 < hwnd->nextrabytes) { |
oldval = GetWindowLong(hwnd, nIndex); |
*(LONG *)&hwnd->extrabytes[nIndex] = lNewLong; |
} |
break; |
} |
return oldval; |
} |
|
WORD WINAPI |
GetWindowWord(HWND hwnd, int nIndex) |
{ |
if(nIndex+1 < hwnd->nextrabytes) |
return *(WORD *)&hwnd->extrabytes[nIndex]; |
return 0; |
} |
|
WORD WINAPI |
SetWindowWord(HWND hwnd, int nIndex, WORD wNewWord) |
{ |
WORD oldval = 0; |
|
if(nIndex+1 < hwnd->nextrabytes) { |
oldval = GetWindowWord(hwnd, nIndex); |
*(WORD *)&hwnd->extrabytes[nIndex] = wNewWord; |
} |
return oldval; |
} |
|
DWORD WINAPI |
GetClassLong(HWND hwnd, int nIndex) |
{ |
switch(nIndex) { |
case GCL_HBRBACKGROUND: |
return (DWORD)hwnd->pClass->hbrBackground; |
case GCL_CBWNDEXTRA: |
return (DWORD)hwnd->pClass->cbWndExtra; |
} |
return 0; |
} |
|
int WINAPI |
GetWindowTextLength(HWND hwnd) |
{ |
return SendMessage(hwnd, WM_GETTEXTLENGTH, 0, 0L); |
} |
|
int WINAPI |
GetWindowText(HWND hwnd, LPSTR lpString, int nMaxCount) |
{ |
return SendMessage(hwnd, WM_GETTEXT, nMaxCount,(LPARAM)(LPSTR)lpString); |
} |
|
BOOL WINAPI |
SetWindowText(HWND hwnd, LPCSTR lpString) |
{ |
return SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)(LPCSTR)lpString); |
} |
|
/* Recursively offset all children of passed window*/ |
static void |
MwOffsetChildren(HWND hwnd, int offx, int offy) |
{ |
HWND cp; |
|
/* offset all child windows for move*/ |
for(cp=hwnd->children; cp; cp=cp->siblings) { |
|
/* offset window and client area rects*/ |
OffsetRect(&cp->winrect, offx, offy); |
OffsetRect(&cp->clirect, offx, offy); |
|
/* offset scrollbar NC hittest rects*/ |
if(!IsRectEmpty(&cp->vscroll.rc)) |
OffsetRect(&cp->vscroll.rc, offx, offy); |
if(!IsRectEmpty(&cp->hscroll.rc)) |
OffsetRect(&cp->hscroll.rc, offx, offy); |
MwOffsetChildren(cp, offx, offy); |
} |
} |
|
BOOL |
SetWindowPos(HWND hwnd, HWND hwndInsertAfter, int x, int y, int cx, int cy, |
UINT fuFlags) |
{ |
int hidden; |
BOOL bMove, bSize, bZorder; |
MWCOORD offx = 0, offy = 0; /* = 0 for bad gcc warning*/ |
WINDOWPOS winpos; |
|
if(!hwnd || hwnd == rootwp || cx < 0 || cy < 0) |
return FALSE; |
|
/* FIXME SWP_NOACTIVATE*/ |
|
if((fuFlags & SWP_SHOWWINDOW)) |
return ShowWindow(hwnd, SW_SHOW); |
|
if((fuFlags & SWP_HIDEWINDOW)) |
return ShowWindow(hwnd, SW_HIDE); |
|
/* move is relative to parent's client rect for child windows*/ |
if(hwnd->style & WS_CHILD) { |
x += hwnd->parent->clirect.left; |
y += hwnd->parent->clirect.top; |
} else { |
x += hwnd->parent->winrect.left; |
y += hwnd->parent->winrect.top; |
} |
|
bMove = !(fuFlags & SWP_NOMOVE) && |
(hwnd->winrect.left != x || hwnd->winrect.top != y); |
bSize = !(fuFlags & SWP_NOSIZE) && |
((hwnd->winrect.right - hwnd->winrect.left) != cx || |
(hwnd->winrect.bottom - hwnd->winrect.top) != cy); |
bZorder = !(fuFlags & SWP_NOZORDER); |
if(!bMove && !bSize && !bZorder) |
return TRUE; |
|
/* could optimize to not require redraw when possible*/ |
hidden = hwnd->unmapcount || (fuFlags & SWP_NOREDRAW); |
|
if(bZorder) { |
switch((int)hwndInsertAfter) { |
case (int)HWND_TOP: |
MwRaiseWindow(hwnd); |
break; |
case (int)HWND_BOTTOM: |
MwLowerWindow(hwnd); |
break; |
default: |
/* FIXME for non top/bottom zorder*/ |
break; |
} |
} else { |
if(!hidden) |
MwHideWindow(hwnd, FALSE, FALSE); |
} |
|
if(bMove) { |
offx = x - hwnd->winrect.left; |
offy = y - hwnd->winrect.top; |
} |
if(bMove || bSize) { |
hwnd->winrect.left = x; |
hwnd->winrect.top = y; |
hwnd->winrect.right = x + cx; |
hwnd->winrect.bottom = y + cy; |
} |
if(bMove) |
MwOffsetChildren(hwnd, offx, offy); |
|
if(bMove || bSize) { |
MwCalcClientRect(hwnd); |
|
/* send windowposchanged message*/ |
/* FIXME: move WM_MOVE, WM_SIZE to defwndproc*/ |
winpos.hwnd = hwnd; |
winpos.hwndInsertAfter = hwndInsertAfter; |
winpos.x = x; |
winpos.y = y; |
winpos.cx = cx; |
winpos.cy = cy; |
winpos.flags = fuFlags; |
SendMessage(hwnd, WM_WINDOWPOSCHANGED, 0, (LPARAM)&winpos); |
|
MwSendSizeMove(hwnd, bSize, bMove); |
} |
|
++mwpaintSerial; /* increment paint serial # for alphablending*/ |
++mwpaintNC; /* increment paint serial # for NC painting*/ |
if(!bZorder && !hidden) |
MwShowWindow(hwnd, FALSE); |
|
return TRUE; |
} |
|
BOOL WINAPI |
MoveWindow(HWND hwnd, int x, int y, int nWidth, int nHeight, BOOL bRepaint) |
{ |
UINT flags = SWP_NOZORDER | SWP_NOACTIVATE; |
|
if(!bRepaint) |
flags |= SWP_NOREDRAW; |
return SetWindowPos(hwnd, 0, x, y, nWidth, nHeight, flags); |
} |
|
void |
MwSendSizeMove(HWND hwnd, BOOL bSize, BOOL bMove) |
{ |
DWORD dwStyle; |
RECT rc; |
|
if(bSize) { |
GetClientRect(hwnd, &rc); |
SendMessage(hwnd, WM_SIZE, SIZE_RESTORED, |
MAKELONG(rc.right, rc.bottom)); |
} |
if(bMove) { |
dwStyle = GetWindowLong(hwnd, GWL_STYLE); |
GetWindowRect(hwnd, &rc); |
/* return parent coords for child windows*/ |
if(dwStyle & WS_CHILD) |
ScreenToClient(hwnd->parent, (LPPOINT)&rc.left); |
SendMessage(hwnd, WM_MOVE, 0, MAKELONG(rc.left, rc.top)); |
} |
} |
|
/* |
* Specify a cursor for a window. |
* This cursor will only be used within that window, and by default |
* for its new children. If the cursor is currently within this |
* window, it will be changed to the new one immediately. |
*/ |
void |
MwSetCursor(HWND wp, PMWCURSOR pcursor) |
{ |
HCURSOR cp; |
int bytes; |
|
if(!wp || !pcursor) |
return; |
|
bytes = MWIMAGE_SIZE(pcursor->width,pcursor->height) |
* sizeof(MWIMAGEBITS); |
|
/* |
* See if the window is using a shared cursor definition. |
* If so, then allocate a new private one, otherwise reuse it. |
*/ |
cp = wp->cursor; |
if (!cp || cp->usecount-- > 1) { |
cp = GdItemNew(struct hcursor); |
if(!cp) |
return; |
} |
|
cp->usecount = 1; |
cp->cursor.width = pcursor->width; |
cp->cursor.height = pcursor->height; |
cp->cursor.hotx = pcursor->hotx; |
cp->cursor.hoty = pcursor->hoty; |
cp->cursor.fgcolor = pcursor->fgcolor; |
cp->cursor.bgcolor = pcursor->bgcolor; |
memcpy(cp->cursor.image, pcursor->image, bytes); |
memcpy(cp->cursor.mask, pcursor->mask, bytes); |
wp->cursor = cp; |
|
/* |
* If this was the current cursor, then draw the new one. |
*/ |
if (cp == curcursor || curcursor == NULL) { |
GdMoveCursor(cursorx - cp->cursor.hotx, |
cursory - cp->cursor.hoty); |
GdSetCursor(&cp->cursor); |
} |
} |
|
BOOL WINAPI |
GetCursorPos(LPPOINT lpPoint) |
{ |
MWCOORD x, y; |
|
if(lpPoint) { |
GdGetCursorPos(&x, &y); |
lpPoint->x = x; |
lpPoint->y = y; |
return TRUE; |
} |
return FALSE; |
} |
|
HWND WINAPI |
GetCapture(VOID) |
{ |
return capturewp; |
} |
|
HWND WINAPI |
SetCapture(HWND hwnd) |
{ |
HWND oldCapture = capturewp; |
|
capturewp = hwnd; |
MwCheckMouseWindow(); |
return oldCapture; |
} |
|
BOOL WINAPI |
ReleaseCapture(VOID) |
{ |
capturewp = NULL; |
MwCheckMouseWindow(); |
return TRUE; |
} |
|
struct timer { /* private timer structure*/ |
HWND hwnd; /* window associated with timer, NULL if none*/ |
UINT idTimer; /* id for timer*/ |
UINT uTimeout; /* timeout value, in msecs*/ |
DWORD dwClockExpires; /* GetTickCount timer expiration value*/ |
TIMERPROC lpTimerFunc; /* callback function*/ |
}; |
|
static struct timer timer; /* single global timer FIXME*/ |
|
UINT WINAPI |
SetTimer(HWND hwnd, UINT idTimer, UINT uTimeout, TIMERPROC lpTimerFunc) |
{ |
static UINT nextID = 0; /* next ID when hwnd is NULL*/ |
|
/* assign timer id based on valid window handle*/ |
timer.hwnd = hwnd; |
timer.idTimer = hwnd? idTimer: ++nextID; |
timer.uTimeout = uTimeout; |
timer.dwClockExpires = GetTickCount() + uTimeout; |
timer.lpTimerFunc = lpTimerFunc; |
|
return timer.idTimer; |
} |
|
BOOL WINAPI |
KillTimer(HWND hwnd, UINT idTimer) |
{ |
if(timer.hwnd == hwnd && timer.idTimer == idTimer) { |
timer.uTimeout = 0; |
return TRUE; |
} |
return FALSE; |
} |
|
/* |
* Return the next timeout value in msecs |
*/ |
UINT |
MwGetNextTimeoutValue(void) |
{ |
int timeout; |
|
if(timer.uTimeout) { |
timeout = timer.dwClockExpires - GetTickCount(); |
if(timeout > 0) |
return timeout; |
} |
return 0; |
} |
|
/* |
* Check if any timers have expired by looking at current system ticks |
*/ |
void |
MwHandleTimers(void) |
{ |
int timeout; |
DWORD dwTime; |
|
/* check if timer running*/ |
if(timer.uTimeout == 0) |
return; |
|
/* determine if timer expired*/ |
dwTime = GetTickCount(); |
timeout = timer.dwClockExpires - dwTime; |
if(timeout > 0) |
return; |
|
/* call timer function or post timer message*/ |
if(timer.lpTimerFunc) |
timer.lpTimerFunc(timer.hwnd, WM_TIMER, timer.idTimer, dwTime); |
else PostMessage(timer.hwnd, WM_TIMER, timer.idTimer, 0); |
|
/* reset timer*/ |
timer.dwClockExpires = dwTime + timer.uTimeout; |
} |
|
int WINAPI |
GetSystemMetrics(int nIndex) |
{ |
switch(nIndex) { |
case SM_CXSCREEN: |
return scrdev.xvirtres; |
case SM_CYSCREEN: |
return scrdev.yvirtres; |
case SM_CXVSCROLL: |
return mwSYSMETRICS_CXVSCROLL; |
case SM_CYHSCROLL: |
return mwSYSMETRICS_CYHSCROLL; |
case SM_CYCAPTION: |
/* + 1 for line under caption*/ |
return mwSYSMETRICS_CYCAPTION + 1; |
case SM_CXBORDER: |
return mwSYSMETRICS_CXBORDER; |
case SM_CYBORDER: |
return mwSYSMETRICS_CYBORDER; |
case SM_CYMENU: |
break; /* FIXME: 19 when menubars work*/ |
case SM_CYVSCROLL: |
return mwSYSMETRICS_CYVSCROLL; |
case SM_CXHSCROLL: |
return mwSYSMETRICS_CXHSCROLL; |
case SM_CXFRAME: |
case SM_CXDLGFRAME: |
return mwSYSMETRICS_CXFRAME; |
case SM_CYFRAME: |
case SM_CYDLGFRAME: |
return mwSYSMETRICS_CYFRAME; |
} |
return 0; |
} |
|
HWND WINAPI |
GetDlgItem(HWND hDlg, int nIDDlgItem) |
{ |
HWND wp; |
|
if(hDlg) { |
for(wp=hDlg->children; wp; wp=wp->siblings) |
if(wp->id == nIDDlgItem) |
return wp; |
} |
return 0; |
} |
/bmp/makefile.conv
0,0 → 1,61
############################################################################## |
# Microwindows template Makefile |
# Copyright (c) 2000 Martin Jolicoeur, Greg Haerr |
############################################################################## |
|
ifndef TOP |
TOP = ../.. |
CONFIG = $(TOP)/config |
endif |
|
include $(CONFIG) |
|
all: $(TOP)/bin/convbmp |
HOSTCC=gcc |
HOSTCFLAGS=-I../../include |
|
######################## Additional Flags section ############################ |
|
# Directories list for header files |
INCLUDEDIRS += |
# Defines for preprocessor |
DEFINES += |
|
# Compilation flags for C files OTHER than include directories |
CFLAGS += |
# Preprocessor flags OTHER than defines |
CPPFLAGS += |
# Linking flags |
LDFLAGS += |
|
############################# targets section ################################ |
|
ifeq ($(MICROWIN), Y) |
|
# If you want to create a library with the objects files, define the name here |
LIBNAME = libmwimages.a |
LIBNAMESO = libmwimages.so |
|
# List of objects to compile |
OBJS = car8.o min4.o max4.o close4.o under4.o\ |
zion208.o cs1.o rle8.o microwin.o penguin.o |
|
all: $(TOP)/bin/convbmp $(TOP)/bin/makebmp default |
|
endif |
|
######################### Makefile.rules section ############################# |
|
#include $(TOP)/Makefile.rules |
|
######################## Tools targets section ############################### |
|
realclean: clean |
$(RM) car8.c min4.c max4.c close4.c under4.c zion208.c cs1.c rle8.c \ |
microwin.c penguin.c |
|
$(TOP)/bin/convbmp: convbmp.c |
$(HOSTCC) $(HOSTCFLAGS) $< -o $@ |
|
$(TOP)/bin/makebmp: makebmp.c |
$(HOSTCC) $(HOSTCFLAGS) $< -o $@ |
/bmp/under4.c
0,0 → 1,59
/* Generated by convbmp*/ |
#include "device.h" |
|
/* MWIMAGEHDR image_under4 converted from under4.bmp*/ |
|
static MWPALENTRY palette[16] = { |
RGBDEF( 0, 0, 0 ), /* pal 0*/ |
RGBDEF( 191, 0, 0 ), /* pal 1*/ |
RGBDEF( 0, 191, 0 ), /* pal 2*/ |
RGBDEF( 191, 191, 0 ), /* pal 3*/ |
RGBDEF( 0, 0, 191 ), /* pal 4*/ |
RGBDEF( 191, 0, 191 ), /* pal 5*/ |
RGBDEF( 0, 191, 191 ), /* pal 6*/ |
RGBDEF( 192, 192, 192 ), /* pal 7*/ |
RGBDEF( 128, 128, 128 ), /* pal 8*/ |
RGBDEF( 255, 0, 0 ), /* pal 9*/ |
RGBDEF( 0, 255, 0 ), /* pal 10*/ |
RGBDEF( 255, 255, 0 ), /* pal 11*/ |
RGBDEF( 0, 0, 255 ), /* pal 12*/ |
RGBDEF( 255, 0, 255 ), /* pal 13*/ |
RGBDEF( 0, 255, 255 ), /* pal 14*/ |
RGBDEF( 255, 255, 255 ), /* pal 15*/ |
}; |
|
static MWUCHAR imagebits[] = { |
0x03,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x33,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0xb3,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x01,0x30,0x3b,0xbb,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x03,0xbb,0xb0,0x00,0x00,0x00,0x33,0x33,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0xb0,0x00,0x00,0x3b,0x30,0x00,0x00,0x00,0x03,0xb3,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x13,0x00,0x3b,0xbb,0xbb,0xbb,0xb3,0x00,0x33,0x03,0x3b,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0xbb,0x30,0x30,0x01,0x30,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x03,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x30,0x00,0x33,0x03,0xbb,0xbb,0xbb,0xbb,0xb3,0x30,0x03,0x30,0x3b,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x0b,0xbb,0xb3,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x0b,0x00,0x3b,0xbb,0xbb,0xb0,0x00,0x00,0xbb,0xbb,0xb3,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xb3,0x00,0xbb,0xbb,0xb3,0x00,0x03,0xbb,0xbb,0xb0,0x00,0x03,0xbb,0xb3,0x00,0x00,0x00,0x33,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x00,0xb3,0x00,0x00,0x3b,0xb3,0x00,0x00,0x00,0x3b,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x3b,0x30,0x03,0xbb,0xbb,0xb3,0x00,0x03,0xb3,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x3b,0xbb,0x30,0x00,0x33,0xb3,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x03,0xb3,0x00,0x00,0x00,0x3b,0xbb,0x30,0x00,0x00,0x33,0x30,0x0b,0xbb,0xbb,0xbb,0x30,0x00,0x3b,0x33,0x00,0x3b,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xb3,0x00,0x03,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x30,0x3b,0xbb,0xbb,0x30,0x0b,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xb3,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x30,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x03,0xbb,0xbb,0x30,0x3b,0xbb,0x30,0x00,0x0b,0xbb,0x30,0x00,0x3b,0xbb,0xb3,0x00,0xbb,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0x30,0x03,0xbb,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x00,0x3b,0xb3,0x00,0x00,0x0b,0xbb,0xb3,0x03,0xbb,0xbb,0xb3,0x00,0x00,0xbb,0xbb,0x30,0x0b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0xbb,0xb0,0x00,0x03,0xbb,0xbb,0x30,0x3b,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xb3,0x0b,0xbb,0xbb,0xb0,0x3b,0xbb,0xbb,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x03,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x0b,0xbb,0x00,0x00,0x0b,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x00,0x00,0x3b,0xbb,0x30,0x0b,0xbb,0xbb,0xb0,0x00,0x0b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x1b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x03,0xbb,0xb3,0x00,0x00,0xbb,0xbb,0x30,0x3b,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xbb,0xb0,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x03,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0xbb,0xbb,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x30,0x3b,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0x33,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x30,0x00,0x03,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0x30,0x3b,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xbb,0x30,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0xb3,0xb3,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x3b,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xbb,0x30,0xbb,0xbb,0x33,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x3b,0xbb,0x30,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xbb,0x00,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xbb,0xb0,0x00,0x00,0x00,0xbb,0xbb,0x33,0xbb,0x33,0x00,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xb3,0x00,0x00,0x00,0x3b,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x0b,0xbb,0x00,0x00,0x00,0xbb,0x00,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xbb,0x30,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x03,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0xb0,0x00,0x00,0x00,0xb3,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x0b,0xbb,0x00,0x00,0x00,0xb3,0x00,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xb0,0x00,0x33,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xbb,0x00,0x00,0x00,0x0b,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x33,0x00,0x03,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0x30,0x00,0x00,0x03,0x33,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0x30,0x00,0x00,0x03,0x33,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x0b,0xbb,0x00,0x00,0x00,0xb0,0x00,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xb3,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xb3,0x00,0x00,0x00,0x33,0x3b,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0x00,0x00,0x00,0x0b,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x3b,0x00,0x00,0x00,0x3b,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xb3,0x00,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0xb0,0x00,0x00,0x03,0xb0,0x3b,0xbb,0x30,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0x33,0x00,0x00,0x00,0x33,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb0,0x33,0x00,0x00,0x00,0x3b,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0xbb,0xbb,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x0b,0xb0,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x03,0x30,0x00,0x00,0x03,0xb0,0x3b,0xbb,0x30,0x00,0x00,0x00,0x03,0xbb,0xbb,0xb3,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xb3,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x33,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xb3,0xbb,0x30,0x00,0x00,0x3b,0xb3,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x03,0xbb,0x30,0xb0,0x00,0x00,0x00,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb3,0x30,0x00,0x00,0x03,0xbb,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0xb3,0xb3,0xbb,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x03,0xbb,0xbb,0xb3,0x03,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0x3b,0xbb,0x33,0x00,0x00,0x00,0x3b,0xb0,0x3b,0xbb,0x30,0x00,0x00,0x33,0xbb,0xb3,0x3b,0xb0,0x3b,0xb3,0x00,0x00,0x03,0xbb,0x30,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x03,0xb3,0x0b,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x00,0x00,0x03,0xbb,0xb3,0x00,0x00,0x0b,0xbb,0x33,0x30,0x00,0x00,0x03,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x0b,0xbb,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x03,0xbb,0xbb,0xb0,0x03,0xb3,0x00,0x00,0x0b,0xbb,0x30,0x00,0x00,0xbb,0xbb,0xb0,0x00,0x00,0x00,0xbb,0xb0,0x3b,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb0,0x3b,0xb0,0x0b,0xb3,0x00,0x00,0x03,0xbb,0x00,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xb3,0x03,0xb3,0x0b,0xb3,0x00,0x00,0x03,0xbb,0x30,0x3b,0x30,0x00,0x00,0x3b,0xbb,0x30,0x00,0x03,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x00,0x0b,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x10,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xbb,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xbb,0x03,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x03,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xbb,0x30,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x30,0x03,0xbb,0x00,0x00,0x0b,0xbb,0x30,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x03,0xbb,0xb0,0x3b,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0x30,0x3b,0xb0,0x0b,0xb3,0x00,0x00,0x03,0xbb,0x00,0xbb,0x30,0x00,0x00,0x3b,0xb0,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0xb0,0x00,0x03,0xbb,0xbb,0xb0,0x03,0xb3,0x03,0xb3,0x00,0x00,0x03,0xbb,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x03,0xbb,0xb3,0x00,0x00,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x3b,0xbb,0xb3,0x00,0xbb,0xbb,0xb0,0x00,0x00,0x00,0xbb,0xb3,0x00,0xbb,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x00,0xbb,0xb3,0x00,0x3b,0xbb,0x00,0x00,0x00,0xbb,0x30,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x03,0xbb,0xb3,0x00,0x03,0xbb,0x30,0x00,0x0b,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0x00,0x00,0x00,0x0b,0xbb,0x30,0x0b,0xbb,0xb0,0x00,0x0b,0xbb,0xb3,0x00,0x3b,0xb0,0x03,0xb3,0x00,0x00,0x03,0xb3,0x00,0xbb,0x30,0x00,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0xb0,0x00,0x00,0x0b,0xbb,0xbb,0x30,0x3b,0xbb,0xb3,0x00,0x00,0xbb,0xbb,0x30,0x03,0xb3,0x00,0xb3,0x00,0x00,0x03,0xb3,0x00,0x3b,0x30,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x00,0xbb,0xb0,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x03,0xbb,0xb3,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x3b,0xbb,0x30,0x00,0x3b,0xb3,0x00,0x00,0x00,0x03,0xbb,0x30,0x00,0x3b,0xb3,0x00,0x00,0x00,0x33,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x00,0xb3,0x00,0x00,0x3b,0xb3,0x00,0x00,0x00,0xb3,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x3b,0x30,0x00,0x03,0xbb,0xb3,0x00,0x03,0xb3,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x00,0x3b,0xb3,0x00,0x03,0xbb,0xbb,0x00,0x03,0xbb,0x30,0x00,0x3b,0xb0,0x00,0x33,0x00,0x00,0x03,0x30,0x00,0xb3,0x00,0x00,0x00,0x33,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x00,0x03,0xbb,0xb3,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0x33,0x00,0x03,0xb3,0x00,0x33,0x00,0x00,0x03,0xb0,0x00,0x33,0x00,0x00,0x00,0x03,0xbb,0xbb,0x30,0x00,0x3b,0x30,0x00,0x3b,0xbb,0xb3,0x00,0x00,0x00,0x0b,0xbb,0x30,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x03,0xbb,0x30,0x00,0x03,0xb3,0x00,0x00,0x00,0x0b,0xbb,0x30,0x00,0x03,0xb0,0x00,0x00,0x00,0x33,0x03,0x3b,0xbb,0xbb,0x30,0x00,0x00,0x00,0xb0,0x00,0x00,0x3b,0x30,0x00,0x00,0x00,0xb0,0x00,0x33,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x30,0x33,0x03,0x33,0x03,0xbb,0xbb,0xb3,0x00,0x31,0x03,0x3b,0xbb,0xbb,0x30,0x00,0x00,0x00,0xbb,0xb3,0x00,0x00,0x3b,0xbb,0xb3,0x00,0x33,0x00,0x30,0x3b,0xb0,0x00,0x33,0x00,0x00,0x03,0x30,0x00,0xb3,0x00,0x00,0x00,0x33,0x00,0x03,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x3b,0xb0,0x00,0x00,0xbb,0xbb,0xbb,0x30,0x03,0x10,0x33,0x03,0xb3,0x00,0x33,0x00,0x00,0x03,0x30,0x00,0x33,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0x30,0x0b,0x00,0x3b,0xbb,0xbb,0xb0,0x00,0x00,0x00,0x3b,0xbb,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x3b,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x00,0x00, |
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x30,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0b,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xbb,0xb0,0x00,0x00, |
}; |
|
MWIMAGEHDR image_under4 = { |
462, 23, /* width, height*/ |
1, 4, /* planes, bpp*/ |
232, 1, /* pitch, bytesperpixel*/ |
1, 16, /* compression, palsize*/ |
-1L, /* transcolor*/ |
palette, |
imagebits, |
}; |
/bmp/tux.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
bmp/tux.gif
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/convbmp.c
===================================================================
--- bmp/convbmp.c (nonexistent)
+++ bmp/convbmp.c (revision 174)
@@ -0,0 +1,508 @@
+/*
+ * Copyright (c) 1999, 2000 Greg Haerr
+ *
+ * Windows BMP to Microwindows image converter
+ *
+ * 6/9/1999 g haerr
+ *
+ * 05/01/2000 Michael Temari
+ * Modified to output .s ACK format for Minix
+ */
+
+#include
+#include
+#include
+#include "device.h"
+
+/* separators for DOS & Unix file systems */
+#define OS_FILE_SEPARATOR "/\\"
+
+#define PIX2BYTES(n) (((n)+7)/8)
+
+#define BI_RGB 0L
+#define BI_RLE8 1L
+#define BI_RLE4 2L
+#define BI_BITFIELDS 3L
+
+typedef unsigned char UCHAR;
+typedef unsigned char BYTE;
+
+#if !_MINIX
+typedef unsigned short WORD;
+typedef unsigned long DWORD;
+typedef long LONG;
+#define CASTWORD
+#define CASTDWORD
+#define CASTLONG
+#else
+/* The Minix ACK compiler cannot pack a structure so we do it the hardway */
+typedef unsigned char WORD[2];
+typedef unsigned char DWORD[4];
+typedef unsigned char LONG[4];
+#define CASTWORD *(unsigned short *)&
+#define CASTDWORD *(unsigned long *)&
+#define CASTLONG *(long *)&
+#endif
+
+#pragma pack(1)
+/* windows style*/
+typedef struct {
+ /* BITMAPFILEHEADER*/
+ BYTE bfType[2];
+ DWORD bfSize;
+ WORD bfReserved1;
+ WORD bfReserved2;
+ DWORD bfOffBits;
+ /* BITMAPINFOHEADER*/
+ DWORD BiSize;
+ LONG BiWidth;
+ LONG BiHeight;
+ WORD BiPlanes;
+ WORD BiBitCount;
+ DWORD BiCompression;
+ DWORD BiSizeImage;
+ LONG BiXpelsPerMeter;
+ LONG BiYpelsPerMeter;
+ DWORD BiClrUsed;
+ DWORD BiClrImportant;
+} BMPHEAD;
+
+/* os/2 style*/
+typedef struct {
+ /* BITMAPFILEHEADER*/
+ BYTE bfType[2];
+ DWORD bfSize;
+ WORD bfReserved1;
+ WORD bfReserved2;
+ DWORD bfOffBits;
+ /* BITMAPCOREHEADER*/
+ DWORD bcSize;
+ WORD bcWidth;
+ WORD bcHeight;
+ WORD bcPlanes;
+ WORD bcBitCount;
+} BMPCOREHEAD;
+#pragma pack()
+
+int ConvBMP(FILE *fp,char *name);
+void outline(UCHAR *linebuffer, int bitdepth, int linesize, int y);
+int DecodeRLE8(UCHAR *buf,FILE *fp);
+int DecodeRLE4(UCHAR *buf,FILE *fp);
+void put4(int b);
+
+int s_flag = 0;
+
+int main(int argc,char *argv[])
+{
+FILE *fp;
+char *p;
+char name[64];
+char oname[64];
+
+ /* skip the program name */
+ argc--;
+ argv++;
+
+ /* check for -s flag */
+ if(argc && strcmp(*argv, "-s") == 0) {
+ s_flag = -1;
+ argc--;
+ argv++;
+ }
+
+ /* need at least one file to convert */
+ if(argc == 0) {
+ fprintf(stderr, "Usage: convbmp [-s] \n");
+ return(-1);
+ }
+
+ /* go back one since the first thing in the loop is to increment */
+ argv--;
+ while(argc--) {
+ argv++;
+ if((p = strrchr(*argv, '.')) != (char *)NULL)
+ *p = '\0';
+ strcpy(name, *argv);
+ strcpy(oname, *argv);
+ if(s_flag)
+ strcat(oname, ".s");
+ else
+ strcat(oname, ".c");
+ if(p != (char *)NULL)
+ *p = '.';
+ if((fp = fopen(*argv, "rb")) == (FILE *)NULL) {
+ fprintf(stderr, "Can't open file: %s\n", *argv);
+ continue;
+ }
+ if(freopen(oname, "w", stdout) == (FILE *)NULL) {
+ fclose(fp);
+ fprintf(stderr, "Could not open output file %s\n", oname);
+ continue;
+ }
+
+ /*
+ let's strip any directory from the path passed in.
+ This prevent problems if this utility is given
+ path is not for the curent directory.
+ */
+ p = name;
+ while( 1 )
+ {
+ char *p1 = p;
+ p1 = strpbrk( p, OS_FILE_SEPARATOR );
+ if( p1 )
+ {
+ p = p1+1;
+ }
+ else
+ {
+ break;
+ }
+ }
+ if(ConvBMP(fp, p)) {
+ fprintf(stderr, "Conversion failed: %s\n", *argv);
+ fclose(fp);
+ continue;
+ }
+ fclose(fp);
+ }
+ return(0);
+}
+
+/* decode a bmp file*/
+int ConvBMP(FILE *fp, char *name)
+{
+BMPHEAD bmp;
+BMPCOREHEAD *bmc;
+int i, palsize;
+UCHAR *linebuffer = NULL;
+unsigned int cx, cy, bitdepth, linesize;
+long compression;
+MWPALENTRY cmap[256];
+long l;
+int g;
+int bytesperpixel;
+UCHAR *p = (UCHAR *)&l;
+
+ /* read BMP header*/
+ if(fread(&bmp, 1, sizeof(BMPHEAD), fp) != sizeof(BMPHEAD)) {
+ fprintf(stderr, "Error reading .bmp file header\n");
+ return(-1);
+ }
+
+ /* might be windows or os/2 header*/
+ if(CASTDWORD bmp.BiSize == 12) {
+ bmc = (BMPCOREHEAD *)&bmp;
+ cx = (int)CASTWORD bmc->bcWidth;
+ cy = (int)CASTWORD bmc->bcHeight;
+ bitdepth = CASTWORD bmc->bcBitCount;
+ palsize = 1 << bitdepth;
+ compression = BI_RGB;
+ fseek(fp, sizeof(BMPCOREHEAD), SEEK_SET);
+ } else {
+ cx = (int)CASTLONG bmp.BiWidth;
+ cy = (int)CASTLONG bmp.BiHeight;
+ bitdepth = CASTWORD bmp.BiBitCount;
+ palsize = (int)CASTDWORD bmp.BiClrUsed;
+ if(palsize == 0)
+ palsize = 1 << bitdepth;
+ compression = CASTDWORD bmp.BiCompression;
+ }
+
+ if(bitdepth > 8)
+ palsize = 0;
+
+ /* currently only 1, 4, 8 and 24 bpp bitmaps*/
+ if(bitdepth > 8 && bitdepth != 24) {
+ fprintf(stderr, "Error: bits per pixel must be 1, 4, 8 or 24\n");
+ return(-1);
+ }
+
+ /* compute image line size and allocate line buffer*/
+ if(bitdepth == 1) {
+ linesize = PIX2BYTES(cx);
+ bytesperpixel = 1;
+ } else if(bitdepth <= 4) {
+ linesize = PIX2BYTES(cx<<2);
+ bytesperpixel = 1;
+ } else if(bitdepth <= 8) {
+ linesize = cx;
+ bytesperpixel = 1;
+ } else if(bitdepth <= 16) {
+ linesize = cx * 2;
+ bytesperpixel = 2;
+ } else if(bitdepth <= 24) {
+ linesize = cx * 3;
+ bytesperpixel = 3;
+ } else {
+ linesize = cx * 4;
+ bytesperpixel = 4;
+ }
+
+ linesize = (linesize+3) & ~3;
+
+ if((linebuffer = malloc(linesize)) == (UCHAR *)NULL) {
+ fprintf(stderr, "Error with malloc(%d)\n", linesize);
+ return(-1);
+ }
+
+ if(!s_flag) {
+ printf("/* Generated by convbmp*/\n");
+ printf("#include \"device.h\"\n\n");
+ printf("/* MWIMAGEHDR image_%s converted from %s.bmp*/\n\n",
+ name, name);
+ }
+
+ /* get colormap*/
+ if(bitdepth <= 8) {
+ for(i=0; i= 0; i--) {
+ if(!DecodeRLE8(linebuffer, fp))
+ break;
+ outline(linebuffer, bitdepth, linesize, i);
+ }
+ } else if(compression == BI_RLE4) {
+ for(i = cy-1; i>= 0; i--) {
+ if(!DecodeRLE4(linebuffer, fp))
+ break;
+ outline(linebuffer, bitdepth, linesize, i);
+ }
+ } else {
+ for(i=0; i> 4) & 0x0f);
+ c1 <<= 4;
+ }
+ continue;
+ }
+ default:
+ c = fgetc(fp);
+ c1 = (c >> 4) & 0x0f;
+ c2 = c & 0x0f;
+ for(c=0; c
bmp/zion208.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/stdpal4.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/stdpal4.bmp
===================================================================
--- bmp/stdpal4.bmp (nonexistent)
+++ bmp/stdpal4.bmp (revision 174)
bmp/stdpal4.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/zion208.c
===================================================================
--- bmp/zion208.c (nonexistent)
+++ bmp/zion208.c (revision 174)
@@ -0,0 +1,476 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_zion208 converted from zion208.bmp*/
+
+static MWPALENTRY palette[256] = {
+ RGBDEF( 8, 8, 16 ), /* pal 0*/
+ RGBDEF( 16, 16, 24 ), /* pal 1*/
+ RGBDEF( 24, 16, 24 ), /* pal 2*/
+ RGBDEF( 74, 16, 24 ), /* pal 3*/
+ RGBDEF( 90, 16, 24 ), /* pal 4*/
+ RGBDEF( 33, 33, 33 ), /* pal 5*/
+ RGBDEF( 41, 24, 33 ), /* pal 6*/
+ RGBDEF( 41, 33, 33 ), /* pal 7*/
+ RGBDEF( 74, 33, 33 ), /* pal 8*/
+ RGBDEF( 24, 24, 41 ), /* pal 9*/
+ RGBDEF( 41, 33, 41 ), /* pal 10*/
+ RGBDEF( 49, 33, 41 ), /* pal 11*/
+ RGBDEF( 49, 49, 41 ), /* pal 12*/
+ RGBDEF( 57, 41, 41 ), /* pal 13*/
+ RGBDEF( 57, 49, 41 ), /* pal 14*/
+ RGBDEF( 74, 41, 41 ), /* pal 15*/
+ RGBDEF( 74, 49, 41 ), /* pal 16*/
+ RGBDEF( 90, 49, 41 ), /* pal 17*/
+ RGBDEF( 107, 49, 41 ), /* pal 18*/
+ RGBDEF( 115, 41, 41 ), /* pal 19*/
+ RGBDEF( 123, 57, 41 ), /* pal 20*/
+ RGBDEF( 57, 49, 49 ), /* pal 21*/
+ RGBDEF( 90, 66, 49 ), /* pal 22*/
+ RGBDEF( 99, 82, 49 ), /* pal 23*/
+ RGBDEF( 115, 66, 49 ), /* pal 24*/
+ RGBDEF( 33, 41, 57 ), /* pal 25*/
+ RGBDEF( 49, 41, 57 ), /* pal 26*/
+ RGBDEF( 49, 49, 57 ), /* pal 27*/
+ RGBDEF( 57, 66, 57 ), /* pal 28*/
+ RGBDEF( 82, 57, 57 ), /* pal 29*/
+ RGBDEF( 90, 66, 57 ), /* pal 30*/
+ RGBDEF( 107, 66, 57 ), /* pal 31*/
+ RGBDEF( 107, 82, 57 ), /* pal 32*/
+ RGBDEF( 123, 74, 57 ), /* pal 33*/
+ RGBDEF( 123, 82, 57 ), /* pal 34*/
+ RGBDEF( 74, 82, 66 ), /* pal 35*/
+ RGBDEF( 99, 82, 66 ), /* pal 36*/
+ RGBDEF( 123, 99, 66 ), /* pal 37*/
+ RGBDEF( 41, 57, 74 ), /* pal 38*/
+ RGBDEF( 57, 49, 74 ), /* pal 39*/
+ RGBDEF( 57, 66, 74 ), /* pal 40*/
+ RGBDEF( 66, 82, 74 ), /* pal 41*/
+ RGBDEF( 90, 66, 74 ), /* pal 42*/
+ RGBDEF( 107, 90, 74 ), /* pal 43*/
+ RGBDEF( 115, 74, 74 ), /* pal 44*/
+ RGBDEF( 115, 99, 74 ), /* pal 45*/
+ RGBDEF( 123, 90, 74 ), /* pal 46*/
+ RGBDEF( 132, 99, 74 ), /* pal 47*/
+ RGBDEF( 132, 115, 74 ), /* pal 48*/
+ RGBDEF( 90, 82, 82 ), /* pal 49*/
+ RGBDEF( 99, 99, 82 ), /* pal 50*/
+ RGBDEF( 41, 66, 90 ), /* pal 51*/
+ RGBDEF( 33, 82, 148 ), /* pal 52*/
+ RGBDEF( 49, 66, 115 ), /* pal 53*/
+ RGBDEF( 49, 66, 123 ), /* pal 54*/
+ RGBDEF( 49, 82, 140 ), /* pal 55*/
+ RGBDEF( 49, 90, 156 ), /* pal 56*/
+ RGBDEF( 57, 82, 107 ), /* pal 57*/
+ RGBDEF( 57, 82, 132 ), /* pal 58*/
+ RGBDEF( 66, 66, 90 ), /* pal 59*/
+ RGBDEF( 66, 74, 90 ), /* pal 60*/
+ RGBDEF( 66, 82, 148 ), /* pal 61*/
+ RGBDEF( 66, 99, 132 ), /* pal 62*/
+ RGBDEF( 66, 99, 148 ), /* pal 63*/
+ RGBDEF( 74, 82, 90 ), /* pal 64*/
+ RGBDEF( 79, 98, 109 ), /* pal 65*/
+ RGBDEF( 107, 90, 107 ), /* pal 66*/
+ RGBDEF( 103, 107, 107 ), /* pal 67*/
+ RGBDEF( 123, 107, 94 ), /* pal 68*/
+ RGBDEF( 115, 107, 123 ), /* pal 69*/
+ RGBDEF( 127, 115, 107 ), /* pal 70*/
+ RGBDEF( 74, 99, 132 ), /* pal 71*/
+ RGBDEF( 82, 107, 132 ), /* pal 72*/
+ RGBDEF( 90, 123, 132 ), /* pal 73*/
+ RGBDEF( 115, 132, 132 ), /* pal 74*/
+ RGBDEF( 107, 123, 148 ), /* pal 75*/
+ RGBDEF( 74, 123, 156 ), /* pal 76*/
+ RGBDEF( 99, 107, 156 ), /* pal 77*/
+ RGBDEF( 123, 140, 156 ), /* pal 78*/
+ RGBDEF( 99, 123, 165 ), /* pal 79*/
+ RGBDEF( 49, 90, 173 ), /* pal 80*/
+ RGBDEF( 57, 99, 173 ), /* pal 81*/
+ RGBDEF( 66, 107, 173 ), /* pal 82*/
+ RGBDEF( 49, 90, 181 ), /* pal 83*/
+ RGBDEF( 66, 107, 181 ), /* pal 84*/
+ RGBDEF( 66, 115, 181 ), /* pal 85*/
+ RGBDEF( 90, 115, 181 ), /* pal 86*/
+ RGBDEF( 107, 140, 181 ), /* pal 87*/
+ RGBDEF( 66, 107, 189 ), /* pal 88*/
+ RGBDEF( 74, 115, 189 ), /* pal 89*/
+ RGBDEF( 74, 123, 198 ), /* pal 90*/
+ RGBDEF( 90, 132, 198 ), /* pal 91*/
+ RGBDEF( 99, 140, 198 ), /* pal 92*/
+ RGBDEF( 115, 148, 198 ), /* pal 93*/
+ RGBDEF( 123, 115, 198 ), /* pal 94*/
+ RGBDEF( 82, 132, 206 ), /* pal 95*/
+ RGBDEF( 99, 148, 206 ), /* pal 96*/
+ RGBDEF( 115, 148, 206 ), /* pal 97*/
+ RGBDEF( 115, 156, 206 ), /* pal 98*/
+ RGBDEF( 57, 107, 214 ), /* pal 99*/
+ RGBDEF( 74, 132, 214 ), /* pal 100*/
+ RGBDEF( 107, 148, 214 ), /* pal 101*/
+ RGBDEF( 99, 148, 222 ), /* pal 102*/
+ RGBDEF( 115, 165, 222 ), /* pal 103*/
+ RGBDEF( 140, 41, 24 ), /* pal 104*/
+ RGBDEF( 140, 49, 41 ), /* pal 105*/
+ RGBDEF( 140, 99, 66 ), /* pal 106*/
+ RGBDEF( 148, 66, 33 ), /* pal 107*/
+ RGBDEF( 148, 66, 49 ), /* pal 108*/
+ RGBDEF( 148, 74, 57 ), /* pal 109*/
+ RGBDEF( 148, 90, 57 ), /* pal 110*/
+ RGBDEF( 156, 82, 57 ), /* pal 111*/
+ RGBDEF( 165, 49, 41 ), /* pal 112*/
+ RGBDEF( 165, 66, 49 ), /* pal 113*/
+ RGBDEF( 165, 90, 57 ), /* pal 114*/
+ RGBDEF( 189, 71, 55 ), /* pal 115*/
+ RGBDEF( 165, 99, 66 ), /* pal 116*/
+ RGBDEF( 148, 115, 74 ), /* pal 117*/
+ RGBDEF( 165, 82, 74 ), /* pal 118*/
+ RGBDEF( 165, 115, 74 ), /* pal 119*/
+ RGBDEF( 156, 111, 82 ), /* pal 120*/
+ RGBDEF( 152, 111, 115 ), /* pal 121*/
+ RGBDEF( 181, 99, 66 ), /* pal 122*/
+ RGBDEF( 181, 115, 74 ), /* pal 123*/
+ RGBDEF( 181, 115, 82 ), /* pal 124*/
+ RGBDEF( 198, 103, 70 ), /* pal 125*/
+ RGBDEF( 198, 123, 74 ), /* pal 126*/
+ RGBDEF( 219, 109, 71 ), /* pal 127*/
+ RGBDEF( 231, 123, 74 ), /* pal 128*/
+ RGBDEF( 145, 134, 87 ), /* pal 129*/
+ RGBDEF( 162, 140, 98 ), /* pal 130*/
+ RGBDEF( 151, 138, 130 ), /* pal 131*/
+ RGBDEF( 181, 123, 82 ), /* pal 132*/
+ RGBDEF( 189, 140, 90 ), /* pal 133*/
+ RGBDEF( 178, 140, 126 ), /* pal 134*/
+ RGBDEF( 189, 156, 82 ), /* pal 135*/
+ RGBDEF( 198, 132, 82 ), /* pal 136*/
+ RGBDEF( 198, 140, 82 ), /* pal 137*/
+ RGBDEF( 214, 140, 82 ), /* pal 138*/
+ RGBDEF( 198, 156, 90 ), /* pal 139*/
+ RGBDEF( 214, 132, 90 ), /* pal 140*/
+ RGBDEF( 201, 155, 112 ), /* pal 141*/
+ RGBDEF( 239, 131, 82 ), /* pal 142*/
+ RGBDEF( 247, 148, 82 ), /* pal 143*/
+ RGBDEF( 231, 148, 90 ), /* pal 144*/
+ RGBDEF( 247, 152, 90 ), /* pal 145*/
+ RGBDEF( 255, 165, 90 ), /* pal 146*/
+ RGBDEF( 232, 156, 109 ), /* pal 147*/
+ RGBDEF( 251, 169, 115 ), /* pal 148*/
+ RGBDEF( 214, 173, 115 ), /* pal 149*/
+ RGBDEF( 247, 178, 101 ), /* pal 150*/
+ RGBDEF( 239, 181, 123 ), /* pal 151*/
+ RGBDEF( 240, 193, 113 ), /* pal 152*/
+ RGBDEF( 255, 198, 123 ), /* pal 153*/
+ RGBDEF( 255, 214, 132 ), /* pal 154*/
+ RGBDEF( 132, 156, 181 ), /* pal 155*/
+ RGBDEF( 132, 173, 206 ), /* pal 156*/
+ RGBDEF( 140, 123, 148 ), /* pal 157*/
+ RGBDEF( 140, 165, 165 ), /* pal 158*/
+ RGBDEF( 140, 173, 198 ), /* pal 159*/
+ RGBDEF( 140, 173, 222 ), /* pal 160*/
+ RGBDEF( 140, 181, 231 ), /* pal 161*/
+ RGBDEF( 148, 181, 222 ), /* pal 162*/
+ RGBDEF( 148, 189, 247 ), /* pal 163*/
+ RGBDEF( 156, 156, 165 ), /* pal 164*/
+ RGBDEF( 156, 165, 165 ), /* pal 165*/
+ RGBDEF( 156, 165, 189 ), /* pal 166*/
+ RGBDEF( 156, 173, 198 ), /* pal 167*/
+ RGBDEF( 156, 189, 222 ), /* pal 168*/
+ RGBDEF( 156, 189, 231 ), /* pal 169*/
+ RGBDEF( 165, 198, 198 ), /* pal 170*/
+ RGBDEF( 165, 198, 222 ), /* pal 171*/
+ RGBDEF( 165, 206, 173 ), /* pal 172*/
+ RGBDEF( 173, 198, 239 ), /* pal 173*/
+ RGBDEF( 173, 206, 247 ), /* pal 174*/
+ RGBDEF( 181, 181, 198 ), /* pal 175*/
+ RGBDEF( 181, 198, 189 ), /* pal 176*/
+ RGBDEF( 181, 198, 239 ), /* pal 177*/
+ RGBDEF( 181, 206, 206 ), /* pal 178*/
+ RGBDEF( 181, 206, 231 ), /* pal 179*/
+ RGBDEF( 189, 173, 148 ), /* pal 180*/
+ RGBDEF( 206, 181, 140 ), /* pal 181*/
+ RGBDEF( 231, 173, 140 ), /* pal 182*/
+ RGBDEF( 247, 198, 140 ), /* pal 183*/
+ RGBDEF( 255, 206, 140 ), /* pal 184*/
+ RGBDEF( 231, 198, 148 ), /* pal 185*/
+ RGBDEF( 255, 222, 148 ), /* pal 186*/
+ RGBDEF( 198, 185, 156 ), /* pal 187*/
+ RGBDEF( 210, 185, 172 ), /* pal 188*/
+ RGBDEF( 222, 181, 189 ), /* pal 189*/
+ RGBDEF( 189, 198, 198 ), /* pal 190*/
+ RGBDEF( 238, 198, 165 ), /* pal 191*/
+ RGBDEF( 222, 206, 201 ), /* pal 192*/
+ RGBDEF( 247, 239, 181 ), /* pal 193*/
+ RGBDEF( 189, 198, 222 ), /* pal 194*/
+ RGBDEF( 198, 214, 222 ), /* pal 195*/
+ RGBDEF( 206, 214, 222 ), /* pal 196*/
+ RGBDEF( 255, 247, 222 ), /* pal 197*/
+ RGBDEF( 198, 214, 231 ), /* pal 198*/
+ RGBDEF( 206, 214, 239 ), /* pal 199*/
+ RGBDEF( 214, 222, 239 ), /* pal 200*/
+ RGBDEF( 231, 231, 239 ), /* pal 201*/
+ RGBDEF( 198, 214, 247 ), /* pal 202*/
+ RGBDEF( 198, 222, 247 ), /* pal 203*/
+ RGBDEF( 214, 231, 247 ), /* pal 204*/
+ RGBDEF( 231, 239, 255 ), /* pal 205*/
+ RGBDEF( 247, 247, 255 ), /* pal 206*/
+ RGBDEF( 0, 0, 0 ), /* pal 207*/
+ RGBDEF( 0, 0, 0 ), /* pal 208*/
+ RGBDEF( 0, 0, 0 ), /* pal 209*/
+ RGBDEF( 0, 0, 0 ), /* pal 210*/
+ RGBDEF( 0, 0, 0 ), /* pal 211*/
+ RGBDEF( 0, 0, 0 ), /* pal 212*/
+ RGBDEF( 0, 0, 0 ), /* pal 213*/
+ RGBDEF( 0, 0, 0 ), /* pal 214*/
+ RGBDEF( 0, 0, 0 ), /* pal 215*/
+ RGBDEF( 0, 0, 0 ), /* pal 216*/
+ RGBDEF( 0, 0, 0 ), /* pal 217*/
+ RGBDEF( 0, 0, 0 ), /* pal 218*/
+ RGBDEF( 0, 0, 0 ), /* pal 219*/
+ RGBDEF( 0, 0, 0 ), /* pal 220*/
+ RGBDEF( 0, 0, 0 ), /* pal 221*/
+ RGBDEF( 0, 0, 0 ), /* pal 222*/
+ RGBDEF( 0, 0, 0 ), /* pal 223*/
+ RGBDEF( 0, 0, 0 ), /* pal 224*/
+ RGBDEF( 0, 0, 0 ), /* pal 225*/
+ RGBDEF( 0, 0, 0 ), /* pal 226*/
+ RGBDEF( 0, 0, 0 ), /* pal 227*/
+ RGBDEF( 0, 0, 0 ), /* pal 228*/
+ RGBDEF( 0, 0, 0 ), /* pal 229*/
+ RGBDEF( 0, 0, 0 ), /* pal 230*/
+ RGBDEF( 0, 0, 0 ), /* pal 231*/
+ RGBDEF( 0, 0, 0 ), /* pal 232*/
+ RGBDEF( 0, 0, 0 ), /* pal 233*/
+ RGBDEF( 0, 0, 0 ), /* pal 234*/
+ RGBDEF( 0, 0, 0 ), /* pal 235*/
+ RGBDEF( 0, 0, 0 ), /* pal 236*/
+ RGBDEF( 0, 0, 0 ), /* pal 237*/
+ RGBDEF( 0, 0, 0 ), /* pal 238*/
+ RGBDEF( 0, 0, 0 ), /* pal 239*/
+ RGBDEF( 0, 0, 0 ), /* pal 240*/
+ RGBDEF( 0, 0, 0 ), /* pal 241*/
+ RGBDEF( 0, 0, 0 ), /* pal 242*/
+ RGBDEF( 0, 0, 0 ), /* pal 243*/
+ RGBDEF( 0, 0, 0 ), /* pal 244*/
+ RGBDEF( 0, 0, 0 ), /* pal 245*/
+ RGBDEF( 0, 0, 0 ), /* pal 246*/
+ RGBDEF( 0, 0, 0 ), /* pal 247*/
+ RGBDEF( 0, 0, 0 ), /* pal 248*/
+ RGBDEF( 0, 0, 0 ), /* pal 249*/
+ RGBDEF( 0, 0, 0 ), /* pal 250*/
+ RGBDEF( 0, 0, 0 ), /* pal 251*/
+ RGBDEF( 0, 0, 0 ), /* pal 252*/
+ RGBDEF( 0, 0, 0 ), /* pal 253*/
+ RGBDEF( 0, 0, 0 ), /* pal 254*/
+ RGBDEF( 0, 0, 0 ), /* pal 255*/
+};
+
+static MWUCHAR imagebits[] = {
+5,5,13,12,22,11,5,2,2,2,5,2,2,2,1,2,5,2,13,7,11,5,2,2,2,5,2,5,2,1,1,1,1,2,5,2,2,2,2,9,1,1,2,14,1,1,1,1,0,1,1,1,0,2,2,2,2,2,1,1,1,0,1,0,1,0,1,0,0,2,0,2,1,0,1,1,1,1,1,1,1,2,0,0,2,0,2,1,0,2,0,1,7,13,0,1,0,2,1,0,1,1,1,1,0,1,2,2,1,2,2,2,1,1,1,1,2,2,1,0,1,5,1,2,1,2,2,1,1,2,16,13,2,2,2,2,2,1,1,1,1,1,0,2,0,2,1,1,1,14,22,133,30,29,11,5,7,6,7,7,15,16,15,13,13,0,2,6,1,14,23,17,16,16,16,30,34,6,34,18,47,13,2,7,5,13,1,2,2,1,2,5,2,1,2,1,1,1,2,1,0,1,1,2,0,1,2,2,1,2,5,1,2,0,2,0,1,1,0,2,1,2,2,5,1,1,1,1,1,1,1,2,5,2,1,1,0,2,1,1,1,1,1,2,6,2,1,2,13,2,1,2,2,2,5,1,6,7,6,2,7,6,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,1,2,2,2,11,2,10,12,2,2,2,5,2,2,2,10,1,1,2,1,2,2,1,1,1,5,2,5,2,1,2,2,9,5,2,2,
+13,2,14,21,13,7,2,2,6,7,12,5,5,6,1,2,2,5,7,11,2,2,1,5,2,11,2,2,2,1,1,2,1,1,2,5,2,5,2,1,2,1,2,2,1,1,1,0,2,1,1,1,1,0,2,0,1,0,2,1,1,0,2,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,0,0,1,1,1,2,1,0,1,1,2,2,2,1,1,5,2,1,0,1,1,2,7,7,6,1,2,5,2,2,5,2,1,1,1,0,2,2,1,1,1,1,1,1,1,2,5,1,1,0,7,7,1,2,22,7,22,6,1,2,1,2,1,0,1,1,2,2,2,23,14,20,14,7,7,13,7,7,5,2,13,34,13,6,0,2,1,5,5,13,14,16,14,13,24,31,11,23,17,22,13,13,2,6,5,2,2,1,1,1,2,2,2,2,1,1,1,2,1,1,6,1,1,0,1,2,1,2,6,2,2,1,2,2,1,0,2,0,2,0,2,1,1,2,1,1,1,1,1,2,1,1,2,2,1,1,1,0,1,1,1,1,2,6,6,1,2,2,7,2,2,2,1,5,2,2,6,6,6,6,2,2,6,6,7,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,5,6,6,6,6,2,2,6,2,2,2,5,6,2,1,1,1,1,2,1,2,5,1,2,9,11,5,2,5,9,12,2,9,0,
+2,2,6,2,5,13,2,5,5,7,2,2,2,2,2,2,5,2,5,1,1,1,1,1,1,5,1,1,1,2,2,5,1,1,1,2,2,2,2,1,1,1,1,0,1,1,0,2,1,1,1,0,1,1,1,0,2,1,0,2,0,2,0,1,2,1,2,1,1,1,1,1,1,1,2,5,14,2,1,1,1,1,1,1,1,0,2,1,1,0,1,0,2,1,0,2,1,1,1,1,2,6,2,1,2,5,2,2,5,2,2,1,1,2,1,0,1,2,1,2,1,2,1,1,1,2,7,1,5,2,1,2,2,6,2,1,2,11,2,6,1,1,1,1,1,0,1,1,1,1,1,1,2,6,2,13,7,7,2,23,13,21,2,1,2,13,2,7,5,2,6,1,2,13,23,17,16,29,14,14,29,1,7,2,6,1,2,1,1,2,2,5,2,1,1,1,1,2,5,5,2,2,1,1,1,1,1,2,2,2,1,2,2,2,0,2,0,2,0,2,0,2,1,2,1,1,1,1,1,1,1,1,2,6,0,1,1,1,1,1,1,1,1,2,7,6,1,2,5,2,6,2,2,2,2,11,6,7,6,2,2,5,6,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,12,5,11,10,7,6,2,2,7,12,1,11,2,1,1,1,1,1,1,1,1,1,2,5,26,6,1,9,9,2,25,2,1,
+13,11,2,2,2,5,6,5,7,7,6,2,2,2,5,2,2,2,2,5,2,5,2,2,2,2,5,2,2,1,1,1,2,5,1,2,6,2,1,2,1,1,1,1,0,2,1,0,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,2,1,2,2,2,2,5,1,1,2,0,1,1,1,1,1,1,1,2,2,1,1,0,2,1,1,1,1,0,1,1,1,2,1,2,1,5,2,2,5,1,2,5,2,2,2,2,1,1,0,0,2,1,2,2,5,2,2,1,0,1,7,7,2,7,2,5,1,1,1,2,2,14,22,16,6,2,2,2,2,1,1,1,1,0,2,2,6,1,2,2,16,11,2,2,2,1,2,1,1,2,13,2,5,5,7,2,5,2,14,14,14,14,7,13,7,2,2,106,16,2,2,5,2,1,2,2,2,1,1,1,1,2,2,2,5,2,6,1,1,1,0,1,1,2,5,1,2,1,1,0,2,0,2,0,2,0,1,1,1,1,1,1,1,2,1,1,1,2,2,1,1,1,2,1,1,1,1,6,1,6,2,2,1,1,2,5,1,2,5,1,11,2,11,6,2,2,2,2,7,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,2,10,11,10,10,13,11,2,2,2,6,2,9,11,1,1,1,1,1,1,1,1,2,2,5,2,5,1,2,2,2,2,5,2,
+21,21,13,2,11,7,11,7,14,13,7,13,5,2,2,5,2,5,16,2,2,1,1,5,2,2,2,6,1,1,1,1,2,2,5,2,2,2,1,2,2,0,1,1,1,1,0,2,1,1,0,2,2,1,1,1,0,2,1,1,1,1,1,5,1,2,2,1,1,2,2,2,1,1,2,0,2,0,2,2,1,2,2,2,1,1,1,0,2,2,1,1,1,1,2,5,2,2,5,0,1,2,5,0,1,1,2,2,2,1,1,1,0,2,1,1,0,2,1,1,1,1,1,1,1,2,5,5,7,7,2,6,1,6,7,6,117,114,18,14,13,2,7,6,6,0,2,1,7,6,2,2,7,6,8,24,32,7,6,5,7,6,1,0,2,32,13,2,6,14,2,2,13,1,2,7,13,1,2,2,1,2,114,122,2,1,2,2,1,2,1,1,1,1,2,1,2,2,6,1,2,2,1,1,1,1,1,1,2,2,1,1,1,1,2,0,2,0,1,1,1,2,2,1,1,1,1,1,1,1,1,1,5,2,1,1,1,1,1,1,1,2,2,7,6,2,1,1,1,1,2,2,2,2,5,2,2,11,7,7,6,6,2,5,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,1,2,10,11,6,2,10,10,2,11,1,2,2,2,7,6,1,1,1,1,1,1,1,1,1,5,26,11,2,1,5,5,10,10,10,1,
+22,13,13,11,13,13,11,5,13,1,2,1,2,5,2,5,1,11,2,2,1,1,2,1,1,5,2,2,5,2,1,5,13,2,2,5,1,1,1,1,1,1,1,1,0,2,1,0,2,1,1,0,2,1,1,0,2,0,2,1,0,2,1,2,2,5,1,1,2,1,2,1,1,2,1,1,0,2,0,0,2,2,2,1,1,0,1,1,1,2,2,1,2,1,2,1,2,6,2,1,2,5,2,5,1,0,2,0,1,1,0,2,1,0,2,1,1,2,2,2,2,1,1,1,2,2,1,1,1,1,1,2,13,1,2,2,7,7,11,6,13,1,2,2,2,1,1,2,24,17,2,5,2,2,119,106,132,17,2,14,22,16,16,119,14,14,6,23,16,16,13,7,2,2,6,1,2,6,16,16,17,119,116,122,1,5,2,1,1,1,1,1,1,0,1,1,2,5,2,2,1,1,1,1,2,1,1,1,1,1,5,0,1,1,1,2,0,1,1,1,1,1,2,1,1,2,1,6,1,1,2,1,2,5,0,2,1,1,1,1,1,1,1,2,7,2,1,1,1,2,1,2,5,2,2,2,11,7,2,2,2,2,6,13,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,5,2,5,12,6,11,2,10,2,5,2,6,2,2,2,1,2,1,1,1,1,5,1,2,2,10,2,2,2,10,10,12,5,9,2,
+13,13,2,13,14,26,7,2,2,2,6,1,2,2,1,2,13,7,2,2,5,1,1,1,2,2,5,2,5,5,2,2,2,2,2,2,2,1,1,1,1,0,1,0,1,1,0,2,0,2,1,1,0,2,1,0,2,1,0,1,1,2,1,2,5,0,1,1,1,2,0,0,2,1,0,1,1,0,2,1,1,2,0,1,1,0,2,1,2,1,0,2,1,1,1,2,5,2,2,2,2,2,7,2,2,2,2,0,1,0,2,0,2,1,0,0,2,2,5,2,5,1,1,1,5,2,1,2,2,1,1,2,7,6,2,5,2,6,5,2,5,7,14,6,6,0,2,5,14,20,1,2,2,7,24,152,16,12,2,7,7,14,13,14,7,7,14,13,13,2,2,6,1,6,0,16,30,33,29,18,24,137,16,2,1,2,2,1,1,1,1,0,1,1,1,1,1,2,1,1,1,1,1,0,1,1,1,1,2,1,2,2,0,1,1,2,1,1,1,1,2,1,6,1,2,1,1,1,1,2,6,1,2,2,1,0,1,1,1,1,1,1,1,6,6,1,1,1,1,1,2,1,2,1,5,2,11,6,6,5,2,2,11,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,7,10,11,2,2,1,2,2,2,11,2,2,1,1,2,1,1,1,2,1,5,9,1,6,25,5,9,5,9,5,1,
+2,5,7,13,2,5,2,5,11,2,2,6,2,2,2,2,2,13,1,2,1,1,2,1,1,1,2,2,2,6,2,2,1,1,0,0,2,1,0,1,1,1,1,1,1,1,1,0,2,0,2,1,1,0,2,1,0,1,1,1,1,2,1,2,2,1,1,0,1,0,2,1,1,1,1,2,1,1,0,2,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,5,2,1,2,2,2,1,2,0,1,1,1,0,2,0,1,0,2,1,0,2,2,1,2,2,1,1,2,1,2,1,2,1,2,6,1,6,2,2,2,7,6,2,5,6,2,6,1,2,1,1,2,2,6,1,7,117,154,123,5,5,5,13,1,1,2,2,5,6,7,2,2,2,5,2,2,2,7,24,22,24,32,22,24,7,1,2,5,2,1,1,0,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,1,1,2,1,2,0,2,0,1,1,0,2,1,1,5,2,1,5,1,2,1,1,1,1,1,2,6,0,1,1,1,1,1,1,1,2,2,7,2,1,2,1,5,2,2,5,2,2,2,11,6,2,2,6,5,13,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,12,2,2,5,2,2,2,1,11,2,2,11,1,1,2,1,1,1,1,1,1,1,2,5,9,1,5,5,9,2,2,1,1,
+11,12,7,12,7,5,13,11,2,5,7,14,13,2,1,12,11,2,1,2,1,5,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,2,0,1,1,1,0,1,0,1,1,1,1,5,2,5,1,1,1,1,1,0,2,1,2,0,0,2,0,2,1,1,1,1,1,1,1,0,1,1,1,0,1,0,2,5,2,2,2,1,1,1,1,1,1,2,0,1,0,2,0,2,1,2,2,0,2,2,2,1,1,1,2,1,1,1,2,1,1,1,1,2,6,2,2,6,2,7,2,6,1,2,7,5,2,6,1,1,2,5,2,23,152,149,34,1,7,2,5,2,2,2,6,5,7,7,7,6,1,2,2,2,6,6,6,23,34,22,6,1,1,2,2,1,2,2,1,1,2,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,2,2,1,1,2,1,2,0,2,1,1,1,1,1,1,1,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,0,2,1,6,1,2,2,2,7,2,1,2,1,2,2,2,2,1,5,2,2,11,2,2,6,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,2,25,2,2,9,7,1,2,5,1,2,11,10,2,2,1,1,1,1,1,1,1,1,2,2,25,10,10,2,5,5,9,2,2,
+2,10,2,2,2,5,12,1,5,2,13,13,2,6,1,1,2,2,5,2,1,2,1,1,1,1,1,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,2,0,1,1,2,2,2,1,1,1,1,0,2,0,0,1,0,0,2,0,2,0,2,1,1,2,1,1,1,1,1,0,2,6,1,1,5,1,1,2,0,1,2,2,5,2,1,1,1,1,1,0,2,0,2,1,0,0,2,1,1,1,1,2,1,1,1,5,2,5,1,2,2,6,13,2,5,2,2,2,7,2,6,1,2,7,1,2,2,1,1,2,2,34,32,22,2,13,1,6,1,5,1,1,2,7,13,7,2,2,1,5,2,5,6,2,2,6,1,5,1,1,2,0,1,2,2,2,2,1,1,1,1,2,1,1,2,2,1,2,1,1,2,0,1,1,2,5,1,1,2,0,2,0,1,1,0,1,1,1,0,2,2,6,2,1,2,1,1,1,1,1,1,1,12,0,0,1,1,2,2,1,2,6,1,13,1,2,1,1,1,1,1,2,5,2,2,5,11,6,6,2,6,7,2,6,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,13,2,2,5,2,5,1,6,2,2,2,1,1,1,1,1,2,5,2,5,10,2,2,2,1,1,1,5,2,2,
+2,2,2,1,2,6,1,1,1,2,14,11,2,2,5,2,5,1,1,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,2,1,1,1,1,1,1,1,2,0,1,1,1,1,2,0,1,1,0,2,0,1,1,1,1,1,1,1,0,1,0,2,2,6,1,1,0,1,2,1,6,1,6,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,0,2,0,1,0,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,1,6,5,7,2,2,2,2,6,7,2,2,6,7,7,2,5,2,1,1,2,2,2,6,2,7,2,6,1,1,2,1,5,2,11,6,6,6,1,2,2,2,2,7,6,6,2,2,2,1,2,0,2,1,1,1,1,1,1,1,1,2,1,2,1,2,5,2,5,1,1,1,1,1,1,2,2,2,0,1,2,2,1,1,1,2,1,1,1,1,1,2,2,2,5,2,1,2,5,1,2,1,2,6,1,1,1,1,2,5,1,2,2,6,7,2,1,2,1,2,1,1,1,2,5,2,2,11,2,11,7,7,12,2,2,6,1,1,1,1,1,1,1,1,0,2,1,1,1,1,1,1,5,1,1,2,12,2,2,6,1,2,6,2,2,2,2,12,11,2,2,1,1,1,1,1,2,2,1,1,5,2,1,5,1,5,1,2,9,12,2,
+2,2,5,5,7,7,13,2,2,5,1,1,5,2,1,1,1,1,2,5,1,2,1,1,1,0,1,2,0,2,0,1,1,1,1,2,5,2,2,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,2,0,1,1,1,1,2,0,2,0,1,1,1,0,1,1,1,1,1,2,0,1,0,0,2,1,1,1,2,2,1,1,1,2,2,13,7,14,2,1,1,2,2,2,5,2,5,2,1,1,1,2,1,0,2,0,1,1,1,1,0,0,2,1,2,2,6,1,5,2,1,13,2,2,5,2,2,2,2,2,2,5,2,7,7,6,6,2,7,6,2,2,2,1,1,1,1,2,2,5,7,6,1,2,1,2,1,2,2,21,7,2,6,1,2,2,6,2,2,7,2,2,6,2,1,1,1,1,0,2,2,1,1,1,1,2,2,2,2,1,6,2,2,1,2,2,1,1,0,1,1,1,1,1,2,2,1,1,1,0,1,0,2,0,2,2,7,2,6,2,1,1,1,1,1,2,6,1,13,0,1,1,1,2,1,1,5,2,2,7,6,1,2,5,1,1,1,1,2,2,2,5,6,6,5,9,7,2,2,1,1,2,1,1,1,2,0,1,2,1,1,1,1,1,1,1,2,2,2,5,2,2,11,2,2,11,2,2,2,2,2,6,1,2,26,2,1,2,1,1,1,5,2,1,6,9,5,9,2,1,2,2,5,11,5,2,
+2,6,2,2,5,21,17,2,5,5,1,2,2,2,2,1,1,2,5,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,2,1,2,1,0,1,2,1,2,1,1,1,1,1,1,1,0,1,1,2,1,1,2,0,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,2,5,1,0,2,13,7,14,7,2,1,1,1,1,2,7,2,2,2,6,2,5,2,2,1,1,1,0,2,0,2,1,1,1,1,2,2,5,2,6,2,1,5,2,2,6,1,2,5,13,7,1,2,2,5,2,7,2,5,7,7,7,1,6,0,1,1,1,1,2,2,2,2,2,2,6,1,1,1,2,2,2,11,7,2,2,1,2,2,5,2,7,2,6,2,2,2,2,0,1,1,2,1,2,1,1,1,1,2,2,1,1,2,2,1,2,1,1,2,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,5,1,1,6,1,2,1,1,1,2,6,2,0,1,2,2,2,2,2,5,2,7,2,2,2,2,2,1,1,2,5,2,5,2,7,6,11,2,2,11,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,9,2,26,5,2,9,11,2,2,2,6,2,1,11,2,2,1,1,2,1,1,1,2,2,2,2,5,5,2,10,5,9,5,10,2,2,0,
+7,2,2,6,2,12,13,11,5,2,2,5,13,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,0,0,1,1,1,1,2,1,1,1,2,5,1,1,1,1,1,1,2,1,0,2,0,1,1,1,1,1,2,2,5,1,2,1,2,0,1,0,2,0,1,2,1,1,1,1,1,2,6,2,2,12,12,13,12,2,2,1,1,2,0,1,2,7,2,2,6,2,2,6,2,2,2,1,0,2,1,0,2,1,1,1,2,2,6,1,2,2,2,2,2,7,2,2,5,2,2,2,5,2,2,6,1,2,13,1,5,1,7,13,1,1,1,0,2,1,1,2,1,6,2,1,1,2,2,2,2,1,12,7,13,6,2,1,1,1,2,2,2,2,6,2,6,2,1,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,6,2,1,2,1,1,1,0,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,1,1,1,2,5,1,2,2,12,2,1,1,1,2,1,5,5,2,2,2,12,0,1,2,1,0,1,1,1,2,1,2,2,12,11,2,2,2,5,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,5,2,2,11,2,2,2,10,11,6,2,1,1,5,1,1,1,2,5,2,5,2,10,10,10,2,2,2,5,5,1,6,1,
+13,13,2,5,2,5,12,1,1,1,1,1,1,2,2,6,2,1,2,5,2,2,1,2,0,1,1,5,1,1,1,2,5,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,1,1,7,1,1,1,2,0,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,2,0,2,0,1,0,2,0,1,2,2,12,14,13,1,14,7,1,1,1,2,0,2,2,2,2,6,2,2,7,6,2,2,2,5,0,2,1,0,1,1,1,0,2,1,2,5,2,6,2,5,2,2,6,6,1,7,2,2,2,5,2,2,6,1,2,6,7,2,6,2,13,2,2,2,1,1,0,2,1,1,1,2,2,5,12,5,2,5,2,1,2,2,2,6,2,1,1,1,1,2,2,5,14,7,2,2,1,1,0,1,0,2,1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,2,1,1,1,2,2,1,1,2,1,1,1,1,2,1,1,1,0,1,1,2,2,2,5,1,2,1,6,1,2,2,13,5,2,1,0,1,1,1,1,1,2,1,1,13,1,1,1,1,1,1,1,1,1,1,2,11,7,2,21,10,10,2,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,5,2,5,5,2,11,2,2,25,2,11,0,1,1,1,1,1,1,2,2,1,2,26,10,2,5,2,5,10,5,10,10,9,1,
+7,6,2,2,5,1,1,2,1,1,5,1,1,2,5,1,2,6,1,2,5,1,1,1,1,1,1,2,2,1,2,5,2,1,1,1,1,1,1,2,2,12,2,2,2,5,2,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,0,1,2,0,1,1,2,1,1,2,7,7,2,7,2,1,1,0,1,1,1,1,1,2,13,6,2,2,7,6,2,6,2,2,2,0,1,1,2,2,1,0,2,1,2,2,7,2,2,2,5,2,2,6,6,6,2,6,1,2,2,1,2,5,2,1,7,1,2,2,2,2,6,1,1,0,2,1,1,2,1,5,2,5,2,2,2,2,2,2,2,2,6,7,6,0,1,1,2,2,2,2,7,2,5,2,1,1,1,1,0,2,1,1,2,1,1,1,1,1,1,2,2,2,2,5,5,14,0,1,1,2,2,1,1,2,2,2,2,2,2,2,2,1,1,1,2,2,6,5,0,2,2,2,2,6,2,14,6,2,1,1,1,0,1,1,1,1,1,1,6,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,6,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,5,2,2,2,2,2,5,2,2,2,2,5,2,1,1,1,1,1,1,5,1,2,2,9,2,2,2,9,2,12,26,10,10,2,1,
+10,7,5,2,2,1,2,5,1,1,2,2,2,1,2,2,5,1,5,2,1,1,1,1,1,0,1,2,6,1,10,5,2,2,1,1,2,1,1,7,13,2,5,2,2,2,1,1,1,2,1,1,0,0,1,1,2,5,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,0,2,1,1,0,0,2,1,1,2,7,5,1,0,1,2,1,2,1,2,2,7,7,6,6,6,6,6,7,13,2,2,1,2,1,0,1,1,0,2,1,2,2,14,7,7,6,1,6,2,2,7,2,13,1,2,7,6,2,1,2,1,2,2,13,1,2,5,2,5,2,1,1,1,0,1,1,1,2,2,2,1,2,5,2,2,5,2,11,2,6,7,2,1,1,1,2,2,1,6,7,7,7,2,1,1,1,1,1,1,0,1,1,2,2,2,5,2,5,14,13,2,2,2,2,1,1,1,0,2,2,1,1,1,0,1,1,1,0,1,1,1,2,1,1,1,2,5,1,1,1,1,1,2,2,1,2,2,1,2,0,1,2,1,1,1,2,5,7,2,1,1,1,2,1,1,1,1,1,2,12,5,11,13,2,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,9,11,2,2,2,26,2,12,2,2,1,1,2,2,1,1,2,1,5,2,11,2,10,6,2,2,25,2,12,5,2,0,
+2,10,11,5,2,2,6,2,1,5,1,11,5,2,1,1,1,1,2,2,5,1,1,1,2,0,1,5,2,2,1,1,2,1,1,1,1,2,1,2,2,1,2,2,2,1,2,1,2,2,1,1,1,2,1,1,1,1,2,5,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,1,1,2,7,2,2,1,2,1,1,2,1,1,1,2,13,7,7,2,13,7,7,13,2,7,2,0,1,1,1,1,1,1,1,2,2,6,2,6,1,1,7,1,2,7,2,13,1,2,13,5,2,2,1,6,2,5,1,2,6,1,2,1,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,5,2,2,7,6,6,1,0,1,1,2,2,6,13,6,2,0,1,1,1,1,0,1,1,2,1,1,1,1,1,1,1,1,2,5,1,1,1,2,1,0,1,1,1,0,2,1,1,1,1,1,1,1,2,0,1,0,2,1,2,2,1,1,1,1,1,1,1,2,2,7,2,0,1,1,1,1,1,2,1,2,2,5,1,1,1,1,1,1,1,1,2,6,2,5,2,2,2,7,5,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,5,1,2,2,5,2,5,1,2,5,2,5,10,10,2,7,2,9,11,0,1,1,1,1,1,2,1,2,2,9,11,13,26,5,2,2,2,9,10,1,2,
+2,5,2,2,6,1,2,1,1,2,5,10,1,1,2,1,2,2,2,5,1,2,1,1,1,2,2,2,1,2,1,0,1,2,1,1,2,2,2,1,2,2,2,5,2,5,1,2,1,2,1,1,1,1,1,1,1,1,2,6,2,1,1,2,1,2,1,1,2,1,1,1,1,0,2,1,2,5,1,1,1,2,7,1,1,1,2,1,1,2,1,2,1,2,2,14,2,7,2,7,6,6,2,7,7,1,1,0,2,0,2,2,1,0,2,5,2,7,2,2,7,6,2,5,2,2,2,6,5,2,2,5,1,1,2,2,1,0,7,2,2,1,2,1,5,2,2,1,1,1,1,2,5,2,2,5,5,2,2,5,6,2,2,11,7,6,2,6,1,0,2,5,1,2,16,1,1,6,2,1,1,1,1,0,0,1,1,1,1,1,1,1,1,2,2,2,2,1,9,5,1,1,1,1,1,0,0,2,2,1,1,1,1,1,0,0,2,1,1,2,2,2,1,1,1,1,1,1,1,2,5,11,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,0,1,1,1,1,1,2,11,11,7,2,9,6,5,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,5,2,2,2,2,2,5,2,2,2,2,2,5,2,9,11,2,2,1,1,1,1,1,1,1,2,5,6,9,2,2,2,2,12,10,11,5,2,1,
+1,2,5,1,2,5,1,1,1,1,1,1,1,5,1,2,1,1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,1,2,1,2,2,1,1,2,2,5,2,2,2,1,2,1,6,1,0,2,1,2,2,2,2,7,7,6,1,1,5,1,1,1,2,6,1,2,2,1,1,1,0,2,7,2,1,2,5,2,2,1,1,1,2,0,2,5,2,6,1,2,6,2,6,6,6,6,7,7,2,2,2,1,1,0,1,1,1,1,1,2,2,2,12,7,6,7,2,2,2,2,6,2,7,2,6,2,2,1,1,2,2,1,1,6,2,1,2,1,1,2,2,1,0,1,1,2,2,6,1,6,2,2,2,5,2,2,11,2,11,7,7,6,1,1,1,1,2,2,7,7,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,5,1,1,2,1,2,2,2,1,0,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,2,5,1,1,1,1,1,1,1,1,1,2,7,1,2,0,2,1,1,2,1,2,2,5,1,1,5,1,1,1,1,1,1,1,7,2,10,2,5,2,2,2,6,9,2,1,1,1,1,1,2,1,1,1,1,1,2,2,1,2,5,2,1,1,1,1,1,2,1,2,5,9,11,6,7,2,13,1,2,5,2,1,1,1,1,2,2,5,9,10,6,2,9,10,10,10,10,40,2,10,2,
+2,2,2,5,5,2,2,1,1,1,1,1,1,2,2,2,1,1,1,2,2,5,1,1,1,2,1,0,1,2,1,1,2,2,2,13,2,6,1,2,1,6,2,2,2,2,2,5,2,7,0,2,1,2,1,2,0,2,7,6,2,2,2,2,1,1,2,5,2,1,1,2,2,6,1,1,5,2,1,1,2,2,2,5,1,2,1,1,1,2,1,2,2,6,1,7,6,7,6,7,6,7,6,2,2,1,1,1,1,1,1,1,1,1,2,6,7,7,5,2,2,6,2,2,5,2,2,2,7,7,2,1,1,1,2,5,1,1,13,1,5,2,1,1,2,5,1,1,2,1,2,1,2,5,2,2,2,1,1,2,5,1,2,7,6,7,2,6,1,1,0,2,2,7,2,2,1,2,2,1,2,2,1,1,1,1,0,2,2,5,2,6,5,2,5,1,1,1,2,5,1,0,1,0,2,1,1,1,0,2,1,1,0,1,1,1,1,1,0,2,2,1,1,1,1,1,1,1,2,1,6,13,2,0,2,1,1,2,5,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,5,2,11,2,2,5,2,2,1,1,1,1,1,1,1,1,1,2,5,1,1,2,5,1,2,2,2,1,1,2,5,2,5,2,2,2,5,2,2,9,2,2,5,2,1,2,5,1,1,1,1,5,2,2,2,2,2,11,9,11,11,11,10,2,11,2,
+2,2,6,2,2,5,2,1,1,1,1,1,1,2,11,1,1,2,1,2,5,2,2,2,1,1,1,1,1,1,1,2,2,11,7,2,11,6,2,2,5,2,2,5,2,2,6,1,7,2,1,1,2,2,1,1,2,2,7,7,2,2,1,1,2,1,6,2,2,1,1,1,7,7,2,5,2,6,1,0,1,2,5,2,1,2,1,2,1,1,1,6,7,2,13,7,7,11,7,7,7,13,6,5,1,1,0,2,1,1,1,1,1,5,2,2,2,2,2,2,5,2,5,2,2,2,13,2,7,7,6,1,1,2,1,2,1,2,5,2,2,1,1,2,2,2,1,1,2,1,1,2,2,2,2,5,2,6,2,2,2,6,2,11,6,11,6,0,1,6,1,2,1,7,7,1,1,2,1,5,2,2,1,1,0,0,1,2,1,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,0,2,1,1,1,0,2,1,1,1,1,1,0,2,1,2,1,1,1,1,1,1,1,1,1,2,12,6,0,1,1,1,2,1,2,2,2,5,2,2,1,1,1,1,1,2,0,1,2,5,2,2,2,12,6,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,5,1,2,1,1,6,1,2,2,2,5,2,2,5,6,2,11,6,10,2,1,2,1,1,1,1,1,2,9,10,5,10,7,5,5,5,7,10,7,2,10,2,
+1,2,2,5,5,2,2,1,1,1,1,1,1,12,7,1,2,1,5,1,2,2,5,2,5,0,1,1,2,2,2,2,6,7,13,11,7,6,2,1,2,2,6,1,2,5,2,2,13,2,1,0,2,1,1,0,1,2,7,2,2,2,1,2,2,2,2,1,1,1,0,1,2,7,2,2,2,2,1,1,2,2,2,2,2,1,1,5,1,2,1,2,2,7,8,13,2,11,14,13,7,6,2,6,1,2,1,1,1,1,0,1,1,2,1,5,2,5,1,1,2,2,2,2,6,1,7,2,7,7,2,1,1,1,1,1,6,2,5,2,2,0,1,1,6,1,1,1,2,5,2,2,5,2,2,2,2,2,6,2,5,1,2,6,7,13,2,1,0,1,6,0,1,13,2,6,2,5,2,2,2,2,2,1,1,1,1,1,2,2,5,5,7,2,1,2,2,1,2,2,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,0,2,2,1,1,1,1,1,1,1,1,1,2,7,13,1,0,1,1,1,1,2,5,2,9,2,1,1,1,1,1,0,1,1,1,1,1,2,5,11,6,2,5,2,2,1,1,1,1,1,1,1,1,0,1,2,1,1,5,2,1,2,2,2,25,1,2,2,2,5,2,5,5,2,2,25,6,5,10,10,2,5,1,1,2,1,1,2,2,5,2,10,2,9,11,1,11,13,10,11,10,11,2,
+1,1,2,5,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,13,1,2,2,2,5,2,2,2,2,2,11,6,2,2,2,5,2,5,2,2,2,5,2,2,1,1,1,1,1,2,1,1,6,13,2,1,1,1,1,1,2,5,2,1,1,1,7,2,6,1,2,5,1,1,2,6,2,5,1,1,2,2,1,1,5,2,6,7,7,7,8,12,6,2,7,7,6,1,1,1,1,0,2,1,2,1,2,2,6,1,2,2,1,1,2,1,6,1,2,2,6,2,7,6,2,5,0,1,2,1,1,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,5,5,5,2,5,2,2,2,6,2,11,6,7,0,2,1,2,2,2,1,7,2,2,2,2,2,2,5,2,2,6,1,0,2,1,1,12,7,6,12,1,2,1,1,2,2,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,14,6,2,1,1,2,2,2,2,6,1,12,2,1,2,6,1,1,1,1,1,1,1,2,7,11,7,13,1,2,5,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,5,1,2,5,2,2,5,5,5,2,7,2,6,10,1,2,5,10,5,1,2,6,2,1,1,1,1,5,2,10,7,9,12,10,10,13,11,7,2,5,10,2,
+1,1,1,1,1,1,1,1,1,1,2,1,2,5,1,1,1,1,1,1,1,1,1,1,1,2,6,2,12,2,2,5,1,1,6,7,11,2,2,1,2,2,2,2,2,6,2,6,2,2,2,1,1,1,2,0,2,2,7,6,2,2,2,1,1,1,2,2,2,1,1,1,2,2,1,2,6,1,2,5,7,2,1,2,2,1,2,5,2,2,0,2,7,14,6,7,14,8,5,7,13,7,2,6,0,1,0,2,0,1,1,1,2,6,1,2,6,1,1,2,1,5,2,6,2,6,1,6,6,1,2,1,1,2,1,1,1,2,13,1,1,1,1,1,2,2,2,0,2,6,2,5,2,2,2,2,2,2,2,5,2,2,2,11,6,7,2,0,1,2,1,1,0,7,6,1,2,5,1,2,2,2,5,1,1,2,0,2,1,2,2,5,2,6,2,1,1,1,5,0,1,0,2,1,0,2,1,1,1,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,5,1,1,2,2,6,2,1,1,2,5,1,1,1,2,13,13,10,2,2,2,5,2,1,1,2,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,6,5,1,5,9,2,2,2,6,5,1,2,12,10,10,10,1,1,1,2,2,1,1,1,1,2,2,10,11,10,10,2,11,10,11,11,12,2,25,0,
+1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,1,1,1,1,1,1,1,1,2,6,1,2,11,2,5,2,1,5,1,2,11,2,1,1,1,1,2,2,6,1,2,7,7,1,0,2,1,1,1,1,2,1,7,7,6,6,2,2,1,6,2,5,2,2,1,0,1,2,5,1,2,6,1,1,7,2,1,1,1,1,2,2,1,2,1,2,14,7,2,7,14,13,6,6,2,5,2,2,1,1,1,1,1,1,1,2,2,7,2,6,1,1,1,1,2,1,2,7,6,2,2,7,2,2,13,1,1,5,2,1,1,2,2,2,1,2,1,2,5,0,2,1,2,2,2,5,2,6,2,5,2,5,2,2,5,1,11,6,6,6,0,2,1,0,1,1,2,6,2,2,1,5,6,2,2,2,2,11,1,2,2,0,1,1,2,5,5,2,2,5,2,2,2,1,1,1,0,1,1,0,1,1,2,5,2,2,2,1,2,1,1,2,1,1,1,6,1,1,1,1,1,2,1,1,2,2,1,2,1,2,2,6,2,5,2,11,1,2,2,6,1,1,1,1,2,1,5,13,10,11,2,12,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,5,2,2,2,25,1,2,2,2,2,2,2,5,1,2,11,5,10,5,5,2,5,2,5,1,6,1,1,1,1,6,5,11,10,7,11,7,10,11,10,10,5,2,2,1,
+1,1,1,1,1,1,1,1,1,2,1,1,2,2,6,1,1,1,1,1,1,2,5,1,1,1,2,6,1,2,2,1,1,2,5,1,2,1,1,1,1,6,2,6,1,6,6,2,2,2,1,0,2,2,2,1,1,2,7,7,6,2,2,1,5,2,2,2,2,6,1,1,2,7,2,2,7,2,2,6,1,1,0,1,1,1,2,2,2,1,2,7,2,2,7,14,8,13,2,2,2,2,2,1,1,1,0,1,1,2,1,2,5,1,2,2,5,2,1,1,2,2,5,2,2,6,6,2,7,13,2,1,2,2,1,2,6,7,2,6,2,2,5,1,2,1,2,1,2,11,2,5,2,2,2,2,2,2,5,2,2,5,2,5,2,11,0,1,1,0,1,0,1,7,1,2,7,2,2,5,2,11,2,6,2,1,2,2,2,1,2,2,5,2,2,2,1,2,6,1,1,1,0,2,1,1,1,1,2,2,2,5,2,2,1,1,0,1,1,2,2,1,2,1,1,1,2,1,2,1,11,6,0,1,2,5,1,2,1,2,1,2,2,5,5,1,2,2,1,2,5,2,13,10,7,2,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,5,2,2,2,6,2,2,5,2,5,2,10,2,26,5,6,2,2,2,2,5,1,2,2,1,1,2,1,1,1,2,26,7,11,10,12,10,10,13,21,1,5,1,2,
+1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,6,1,1,1,1,2,7,1,2,1,2,5,0,2,2,6,2,2,1,2,2,2,2,1,1,1,2,7,7,6,2,7,2,7,2,2,0,1,2,2,2,2,2,7,2,7,2,5,2,2,2,1,6,5,6,0,1,1,2,2,6,1,6,2,2,1,6,1,0,1,1,2,2,1,1,2,2,7,6,13,13,6,7,2,2,5,2,5,0,1,1,1,1,1,1,1,2,2,6,1,2,2,2,6,1,5,2,2,5,2,7,2,7,6,2,2,1,1,1,1,2,13,6,2,2,2,2,2,2,5,2,1,1,6,2,2,2,2,5,2,2,6,2,2,2,6,2,2,2,11,2,2,1,1,1,1,1,2,7,2,6,11,2,2,2,2,5,1,2,2,5,2,2,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,1,1,1,2,1,2,5,2,2,2,1,1,1,1,1,1,1,2,5,2,1,1,1,1,5,5,1,11,11,1,1,2,2,5,1,1,1,1,13,5,6,2,1,1,1,1,1,1,2,13,11,10,5,10,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,6,1,6,1,2,2,2,2,2,5,13,2,2,5,5,2,6,6,10,2,6,2,2,5,1,1,1,2,5,10,10,7,10,10,10,13,10,13,10,2,10,5,5,
+1,1,1,1,1,1,1,1,1,1,2,2,12,6,7,2,2,1,1,2,5,2,1,1,1,2,2,1,2,11,1,2,1,1,1,2,1,0,2,1,1,2,2,7,2,6,6,7,7,0,0,2,1,1,2,1,1,2,6,2,13,2,2,6,1,6,1,2,6,2,1,1,1,0,2,2,6,1,2,12,0,2,1,1,1,0,1,5,1,1,2,2,7,13,6,7,2,14,2,6,2,2,2,1,1,1,1,0,1,1,2,5,2,2,6,7,2,13,1,2,1,2,2,2,5,2,2,13,5,2,5,2,2,1,1,7,7,6,6,2,2,1,2,5,2,2,1,2,2,2,6,2,5,2,2,5,2,2,6,1,2,2,5,2,13,2,1,2,2,1,1,1,2,7,7,2,7,6,2,5,2,2,6,2,5,2,2,5,2,2,1,2,2,1,1,2,2,2,1,1,0,2,1,0,2,1,1,1,2,2,1,2,1,1,1,1,0,2,1,1,1,2,2,1,1,1,1,2,2,6,6,2,1,1,2,2,1,1,1,2,12,1,2,2,2,1,2,1,2,1,2,7,13,11,12,2,7,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,2,1,1,5,2,2,7,2,2,13,1,2,5,9,6,2,5,12,1,11,2,2,9,11,1,2,2,5,0,1,1,1,1,9,10,10,10,10,13,10,26,13,10,13,9,27,26,2,
+1,2,2,1,1,1,1,1,1,1,7,2,13,2,2,2,1,1,2,11,2,1,1,1,1,5,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,7,6,2,7,6,7,13,14,0,2,0,1,1,2,2,1,2,7,2,7,6,2,5,2,2,5,2,6,2,2,1,1,1,1,7,2,6,5,1,1,2,5,1,1,2,2,2,1,2,2,2,14,2,13,6,7,2,2,2,2,6,2,1,2,1,1,1,1,1,2,2,5,2,2,7,6,2,6,1,1,1,2,6,1,2,6,1,2,2,2,1,1,1,2,12,7,6,2,1,1,1,1,2,2,1,2,1,1,1,1,2,2,1,2,2,2,5,2,2,5,2,2,6,7,2,6,2,2,1,1,1,5,13,2,5,14,2,2,2,5,2,2,2,2,5,2,2,5,2,2,27,38,35,1,2,1,2,1,0,1,0,2,1,0,2,1,1,2,2,1,1,1,0,1,0,1,1,1,6,1,2,5,1,2,1,1,5,2,2,2,2,1,1,1,2,1,2,2,2,11,2,5,2,1,1,1,1,1,5,2,11,10,7,2,2,11,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,2,1,1,2,2,2,25,2,7,2,9,11,1,6,1,12,2,2,5,2,5,1,1,1,1,5,10,10,10,10,13,26,13,40,2,26,5,10,10,2,
+2,6,6,1,1,1,1,1,1,2,12,6,2,6,1,1,1,1,2,2,6,1,1,1,1,2,1,1,2,1,2,5,1,1,1,1,1,0,2,1,2,13,7,7,13,7,7,13,6,1,1,2,1,1,2,1,1,6,6,6,6,2,6,2,2,2,1,2,7,2,2,1,1,2,2,6,1,1,2,1,1,2,2,1,1,2,2,2,1,5,1,7,14,2,14,6,6,6,1,2,5,5,1,1,1,1,1,1,6,1,1,1,2,2,5,6,6,2,1,6,1,0,2,5,2,6,1,2,6,7,7,1,1,2,5,10,2,11,2,2,1,6,1,2,5,1,0,0,1,2,7,2,6,2,5,2,5,2,2,5,2,2,2,2,13,2,2,2,6,0,1,2,2,7,1,2,2,2,5,2,2,5,1,2,5,2,2,2,2,2,1,0,1,7,7,1,1,2,1,1,1,1,0,1,1,1,0,2,5,2,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,5,2,7,6,1,1,1,1,5,1,2,5,6,6,2,2,5,2,1,2,1,2,2,5,11,2,2,5,2,2,5,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,5,2,2,2,5,2,2,2,5,6,2,12,2,2,2,2,2,6,2,2,2,1,5,1,2,11,26,21,10,26,26,26,13,21,2,9,13,10,5,1,
+2,13,11,2,2,1,1,1,1,2,13,11,0,1,0,1,1,1,5,2,2,5,2,2,1,6,1,1,1,1,1,2,2,2,2,1,1,1,2,2,2,14,29,13,14,11,6,1,2,1,0,0,1,2,1,1,1,2,6,6,7,6,2,2,5,2,1,6,1,6,2,1,1,2,1,2,2,5,2,1,1,2,2,2,1,2,2,1,2,2,2,7,7,6,7,2,6,2,6,5,13,6,1,1,1,1,1,1,0,1,2,2,5,2,2,6,6,2,2,2,1,2,2,1,2,2,5,2,2,13,5,2,1,2,2,12,2,7,5,2,2,1,1,2,1,0,1,1,6,1,2,6,1,2,2,2,2,2,6,2,5,2,2,11,7,2,2,1,2,1,1,1,2,6,2,12,5,2,2,2,2,2,5,2,2,2,2,5,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,5,0,1,1,1,1,0,1,2,1,2,2,2,5,1,1,1,2,1,11,1,1,2,1,2,2,1,2,2,12,5,2,5,2,5,1,2,5,10,10,11,7,10,10,7,5,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,5,1,2,2,6,2,13,1,2,2,6,9,2,2,5,10,7,2,5,9,5,2,11,7,1,2,2,2,1,1,1,1,2,26,26,21,10,40,11,26,13,10,1,12,26,2,2,1,
+7,7,6,2,1,1,1,1,1,2,13,1,2,5,1,1,1,2,2,2,2,1,1,6,1,1,2,1,2,1,2,2,2,1,1,1,2,1,2,2,7,13,5,6,2,2,2,13,6,1,0,2,1,1,2,2,5,2,7,7,6,6,6,2,2,6,5,2,7,6,2,1,1,1,2,2,6,2,1,1,2,2,2,1,1,1,1,1,1,2,2,7,1,7,2,6,2,6,2,13,13,1,1,2,1,1,2,1,1,1,2,1,2,2,2,14,2,2,1,1,1,0,1,2,6,1,6,1,2,6,1,2,5,2,2,13,2,2,2,2,5,0,1,2,2,2,1,1,2,2,6,1,5,2,6,2,2,5,2,2,2,5,2,2,7,2,1,1,1,1,1,0,7,7,2,2,2,5,1,1,2,2,2,2,5,2,1,1,1,5,0,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,2,5,2,6,2,5,2,6,5,2,13,2,2,9,1,2,2,5,1,10,2,6,2,2,2,2,5,1,1,2,2,13,13,13,10,5,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,6,2,2,6,2,5,5,2,5,9,2,12,11,2,5,2,10,2,11,6,2,2,1,5,1,1,2,6,10,12,21,13,1,10,10,5,13,5,1,10,9,2,6,0,
+6,7,6,1,1,1,1,1,1,2,2,6,2,1,2,2,1,5,2,5,1,1,1,1,1,1,1,2,0,1,1,1,1,1,1,0,1,2,5,11,2,2,2,13,7,6,5,11,1,0,2,0,2,1,1,2,2,2,13,7,2,6,2,2,5,2,2,2,2,2,1,1,1,1,2,6,1,2,1,1,2,5,2,1,1,0,1,1,1,1,2,6,2,6,2,7,13,2,11,7,11,2,1,1,5,1,1,2,1,2,0,5,2,2,6,12,2,2,1,0,1,1,1,2,2,6,2,2,11,2,2,2,2,2,13,2,6,2,2,5,2,2,1,2,1,2,1,1,2,1,2,2,2,2,2,5,2,2,2,2,5,2,5,6,6,6,0,1,1,1,1,1,12,0,6,13,2,2,2,1,5,2,1,1,2,1,2,1,2,2,1,1,0,1,1,1,1,1,1,0,1,1,0,2,1,1,1,1,1,2,1,6,0,1,1,1,2,5,2,1,2,2,2,7,2,2,2,2,2,2,10,2,2,2,1,1,1,1,6,13,2,2,2,5,2,6,2,1,2,5,11,13,13,12,7,2,2,6,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,7,6,5,2,2,2,9,2,2,5,2,10,2,2,25,2,2,2,11,11,2,2,2,1,1,1,2,1,2,26,10,10,10,10,10,13,39,2,2,5,2,6,1,0,
+11,6,2,1,1,0,1,1,1,2,11,1,2,1,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,1,2,11,7,2,2,11,13,14,6,6,2,1,1,0,1,1,1,2,6,2,6,7,7,7,2,2,2,2,1,1,2,6,2,1,1,1,1,1,2,5,1,1,1,2,2,2,1,1,1,2,2,2,1,2,7,2,7,7,7,2,13,21,21,7,2,1,1,2,1,6,1,0,1,2,1,2,5,7,7,6,0,1,2,0,0,1,2,7,2,6,2,7,7,2,2,2,13,7,2,2,2,5,2,2,2,1,5,1,1,0,6,2,5,2,5,2,5,2,2,2,5,11,2,2,2,2,2,11,1,1,1,1,1,1,2,2,5,2,14,1,2,1,2,2,1,2,2,5,2,2,1,2,1,1,1,2,1,1,2,1,1,2,1,1,0,1,0,1,1,1,2,1,1,1,2,1,1,2,2,7,5,5,2,2,2,5,2,2,5,2,5,2,11,7,2,1,2,2,1,1,5,1,13,2,5,2,2,2,2,2,1,5,2,11,13,21,2,11,2,2,2,2,6,1,1,2,1,1,1,1,1,1,1,1,1,2,1,5,2,6,5,11,2,2,11,2,5,2,2,2,12,1,5,2,5,2,2,13,11,0,5,2,2,1,1,1,2,12,10,11,10,40,6,13,12,21,6,2,10,5,1,1,2,
+7,7,5,1,1,1,1,1,1,6,6,2,5,2,1,1,2,5,2,1,1,1,1,2,1,2,5,2,1,2,1,2,2,1,1,1,1,11,6,2,2,6,14,7,7,2,2,7,1,0,0,2,1,2,2,2,2,7,7,14,6,6,2,5,2,2,1,5,2,13,1,0,1,2,1,2,2,1,1,1,2,2,1,1,1,2,2,1,1,2,5,2,2,14,8,7,7,7,14,13,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,7,2,1,1,1,2,1,1,2,2,5,1,2,2,12,1,1,2,21,7,2,6,2,2,2,5,2,1,2,2,1,0,2,2,1,2,2,2,2,2,6,2,2,2,6,2,5,2,6,2,0,2,1,0,2,0,1,2,2,14,2,1,1,2,1,5,2,2,1,2,1,1,2,2,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,6,1,1,5,2,2,2,2,5,2,5,2,2,6,1,1,2,10,2,5,1,2,1,1,1,1,1,10,13,1,2,5,5,2,5,1,2,2,2,10,13,10,2,6,1,6,2,5,1,2,9,2,2,1,1,1,1,0,1,1,2,1,1,2,2,2,11,2,2,2,2,2,2,2,5,2,2,11,2,2,1,11,7,11,2,5,2,2,2,1,1,1,2,26,5,12,11,10,26,10,21,21,2,5,9,2,1,1,0,
+2,2,2,2,1,1,1,1,5,1,2,11,2,2,1,11,2,2,2,1,1,5,2,5,2,2,2,5,2,2,1,2,5,1,1,0,1,2,2,13,7,7,7,13,11,2,13,1,1,1,1,0,2,1,2,5,2,2,6,2,6,2,2,2,2,5,1,2,2,7,1,2,1,1,1,6,1,0,2,2,1,1,1,1,1,1,2,1,2,2,2,6,7,7,7,6,7,13,7,2,5,0,1,1,2,1,2,6,2,1,2,1,13,1,6,1,6,1,5,1,1,1,2,5,2,2,2,2,13,2,2,2,2,12,11,2,1,2,2,6,2,2,5,1,2,1,1,1,2,1,6,2,5,2,5,1,11,2,2,2,2,1,11,7,6,1,0,2,1,0,1,1,2,2,6,1,1,1,1,1,2,1,5,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,0,1,1,1,1,1,1,1,2,5,1,1,1,1,2,2,1,2,6,2,2,2,2,5,1,2,2,6,2,10,7,2,1,2,2,1,1,2,5,7,11,2,6,2,2,2,1,1,5,5,7,26,11,2,5,1,11,1,2,2,2,2,2,2,1,1,1,1,0,1,1,1,2,1,2,6,1,6,7,6,6,2,6,2,6,2,2,2,5,9,10,2,2,10,10,13,2,1,2,6,9,1,1,2,25,1,10,9,26,12,10,13,21,13,2,2,5,2,1,1,2,
+2,6,2,2,2,1,1,2,2,2,5,2,5,1,2,11,2,2,2,6,1,1,2,1,1,2,2,2,5,1,1,1,2,1,1,1,1,2,6,7,7,6,14,29,13,5,7,2,1,1,1,1,0,1,1,1,6,1,6,7,13,2,2,6,2,2,2,2,2,7,2,1,1,1,2,1,1,6,1,1,1,2,1,1,1,1,0,2,1,2,7,2,13,7,7,13,12,6,13,2,2,1,1,1,2,1,1,1,1,2,1,1,2,1,2,5,2,2,2,2,2,1,1,2,2,2,1,11,13,1,1,2,1,14,2,2,5,2,5,2,2,2,2,1,2,1,1,2,2,5,2,2,2,2,2,5,7,2,5,2,5,2,2,13,2,1,1,1,0,2,1,1,2,1,2,1,1,1,1,2,2,2,1,2,2,5,2,2,5,1,2,5,1,1,1,1,1,2,1,1,1,0,1,1,1,1,1,1,2,1,5,2,1,2,6,2,2,2,5,2,2,5,2,2,2,5,2,5,11,5,2,2,1,2,1,1,1,2,10,2,5,9,2,2,5,1,2,10,2,13,7,2,2,2,6,2,5,2,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,5,13,5,2,11,2,6,2,2,6,2,12,1,11,2,5,11,11,13,5,1,2,2,2,1,1,2,1,2,5,5,26,2,12,11,13,13,2,9,12,2,1,1,1,
+11,2,2,6,2,5,2,2,5,6,2,1,1,1,1,11,5,1,7,2,1,2,1,1,1,1,1,6,2,2,1,1,1,1,1,1,2,2,7,7,2,14,16,21,2,2,13,2,1,1,1,1,1,2,2,2,7,14,6,7,7,6,1,2,7,2,2,1,2,13,2,2,1,1,1,2,2,2,1,1,1,1,0,2,1,0,1,1,2,2,6,14,8,14,6,2,6,2,2,7,2,1,1,2,1,2,1,1,2,2,1,6,2,1,1,2,2,2,5,1,2,1,1,1,2,1,2,13,13,2,2,5,2,2,2,5,2,2,2,2,11,2,2,2,2,1,1,2,2,2,2,6,2,6,6,2,5,2,2,2,2,5,7,7,6,1,1,0,1,1,1,1,6,1,2,1,5,1,1,1,5,2,2,6,1,2,2,6,1,1,2,2,5,1,2,5,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,1,2,5,2,2,12,2,2,2,6,2,2,5,5,1,2,2,7,5,1,1,1,1,1,2,5,5,7,11,5,2,6,2,1,5,2,2,5,7,12,10,5,2,2,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,7,6,13,5,2,10,2,2,11,2,6,2,2,2,2,12,1,2,10,10,11,1,5,2,10,2,1,1,1,1,1,2,2,2,2,2,21,11,6,2,6,9,2,1,1,1,
+2,1,2,2,2,1,1,2,2,11,2,6,1,1,1,2,6,2,11,2,2,5,1,2,2,2,11,11,11,2,2,0,2,1,1,1,1,11,13,7,7,13,16,13,2,5,2,2,1,1,1,1,2,2,6,1,6,6,7,7,13,1,6,2,2,6,1,13,2,11,2,2,2,0,2,1,2,1,1,1,0,1,0,1,0,2,1,2,2,2,14,7,7,13,7,6,5,2,13,2,6,1,1,1,2,1,1,0,1,1,2,2,2,1,1,2,6,2,2,2,6,2,2,1,2,13,13,5,2,2,6,2,2,6,2,2,2,5,2,11,6,2,2,6,2,1,1,2,5,2,5,2,2,2,2,6,2,2,1,6,2,2,2,6,7,1,1,1,1,1,1,2,7,14,2,2,1,2,2,2,2,2,5,2,13,2,5,1,1,2,1,5,1,2,2,1,1,1,6,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,2,5,2,2,6,1,2,6,2,5,5,2,2,5,10,7,0,2,1,1,2,5,1,2,13,13,1,2,2,6,2,1,2,2,5,13,13,2,2,5,1,2,6,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,5,2,2,10,11,2,7,2,6,2,11,6,2,5,11,9,2,5,5,10,11,2,5,2,5,2,5,1,1,1,1,1,2,2,13,2,10,11,7,11,0,9,2,5,1,1,2,
+2,1,1,5,1,1,1,2,2,5,2,2,1,1,1,2,1,2,2,11,2,2,6,2,5,2,26,7,2,2,1,1,1,0,1,2,5,2,2,7,13,13,2,2,1,2,2,1,1,1,1,0,1,2,2,6,1,7,7,13,6,2,2,2,7,2,2,2,13,6,2,5,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,14,2,7,7,7,7,2,6,1,2,2,0,1,1,1,1,1,1,1,1,1,2,2,1,2,13,2,2,2,1,0,2,1,2,1,5,7,13,1,5,2,2,2,2,5,2,5,2,2,5,11,11,2,1,2,2,1,1,2,2,2,2,5,2,5,2,2,5,1,2,2,6,2,7,2,0,1,1,0,1,1,2,2,13,2,6,2,1,5,1,5,2,2,2,7,2,2,6,2,5,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,1,6,1,5,1,2,5,5,9,2,1,2,12,2,2,2,11,2,5,1,11,7,5,2,1,1,1,1,2,2,5,13,2,2,5,2,1,2,2,5,5,10,13,10,2,5,2,11,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,11,7,6,2,10,13,2,11,5,11,2,2,10,2,2,2,2,12,11,2,6,1,9,2,2,1,1,1,2,2,2,26,13,2,13,11,6,2,5,5,2,2,1,1,2,
+1,1,1,2,1,1,1,5,2,2,1,1,2,1,1,5,2,2,10,5,2,2,2,2,1,2,5,2,2,6,1,1,1,1,1,1,2,11,7,13,1,6,2,2,6,1,2,0,1,1,1,1,1,2,2,2,12,7,6,2,6,2,2,11,6,13,7,13,7,1,2,2,2,1,0,1,1,1,1,1,2,1,0,2,0,1,2,2,2,7,7,6,7,7,6,2,2,2,13,7,1,1,1,1,1,1,0,1,1,6,1,5,2,2,1,2,2,5,2,5,12,1,0,1,2,13,13,2,2,2,2,5,2,2,2,2,2,5,2,2,5,2,2,6,2,1,1,1,1,2,5,2,2,1,2,5,2,2,6,2,12,2,7,6,13,1,1,1,1,0,1,6,2,7,2,2,2,2,1,2,2,2,6,1,13,1,5,7,2,1,2,6,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,6,1,1,1,1,5,2,2,2,5,5,2,10,2,2,10,10,2,1,1,1,2,5,10,5,10,21,6,2,2,1,1,5,2,6,2,10,12,11,2,2,2,2,11,2,2,5,1,1,1,1,1,1,1,1,0,1,1,5,2,2,2,11,5,10,11,2,11,2,2,7,2,7,2,6,10,6,2,1,5,10,12,2,2,5,11,1,6,1,1,1,2,25,2,2,2,2,13,6,10,2,2,2,25,2,1,2,1,
+1,2,2,5,1,1,2,2,2,1,1,2,2,1,2,2,5,2,2,1,1,1,5,1,2,2,2,2,5,1,1,2,1,1,1,2,13,7,13,2,6,2,6,7,13,2,0,1,1,1,1,0,2,1,1,1,2,2,2,2,13,2,12,6,7,2,13,7,2,6,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,6,7,2,6,14,6,2,2,13,13,11,2,1,1,1,1,1,2,5,2,6,1,2,2,5,2,5,2,2,2,2,6,2,2,1,0,13,11,11,2,6,1,5,1,2,5,2,1,5,1,2,5,2,11,1,2,2,2,1,1,2,2,2,2,5,1,2,2,2,5,1,2,5,7,7,13,2,2,1,2,2,1,1,2,2,6,7,2,2,2,6,1,2,5,2,13,2,6,2,2,1,2,5,2,1,2,2,2,1,2,5,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,2,2,2,5,2,5,2,5,2,2,2,5,10,13,2,2,1,1,1,2,7,2,40,7,2,2,5,1,2,2,2,2,11,13,13,2,2,5,2,11,6,2,6,2,1,1,1,1,1,1,1,0,1,1,1,1,2,5,2,7,5,10,2,12,1,6,2,6,6,2,2,2,12,6,2,6,10,10,11,2,5,2,11,11,2,1,5,2,2,2,2,7,9,11,11,6,10,2,5,9,1,1,1,2,0,
+1,1,2,2,6,1,5,2,1,1,1,5,1,2,1,2,2,6,1,1,2,2,2,5,1,5,13,6,1,2,1,5,1,2,1,2,2,11,2,2,2,2,7,13,14,6,1,0,1,1,1,1,0,1,1,1,2,5,2,2,7,2,6,2,2,2,13,13,2,2,7,6,2,2,0,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,6,14,6,2,6,7,14,13,2,2,1,1,1,1,2,1,2,1,2,1,2,2,1,1,2,2,5,6,2,5,2,2,2,26,13,7,11,6,1,2,6,2,2,2,2,2,2,12,2,2,2,5,2,6,2,1,1,1,1,2,5,2,2,5,2,1,2,1,2,6,2,2,7,6,2,6,2,5,2,1,1,2,12,6,13,1,1,2,1,2,2,2,2,21,1,2,2,5,6,2,2,2,2,5,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,5,2,2,5,2,2,2,2,10,12,2,5,2,5,10,10,13,5,1,1,2,1,2,12,7,14,5,6,2,2,5,2,5,2,2,10,13,13,2,6,2,2,7,6,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,12,6,5,5,2,5,2,2,11,6,2,5,2,11,7,2,2,10,7,6,2,2,10,13,6,1,1,1,2,5,9,2,5,5,11,13,6,10,6,2,5,1,1,2,5,0,
+1,2,6,1,1,2,2,1,1,1,1,1,1,2,5,2,2,2,2,5,11,6,2,2,6,7,21,5,2,5,2,1,1,1,1,2,10,7,11,2,13,14,11,11,13,1,1,1,0,1,1,1,1,0,1,2,1,2,2,6,7,2,2,2,5,2,2,2,2,2,13,1,2,1,1,1,2,1,2,5,1,0,1,1,1,1,1,1,7,2,7,2,6,7,7,7,6,7,13,2,1,2,2,1,1,5,2,1,5,2,5,2,1,2,2,12,11,7,2,2,2,5,11,6,5,13,7,2,2,6,1,2,2,5,1,2,5,2,1,5,2,2,2,2,2,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,5,2,5,2,2,2,1,1,2,5,11,5,1,0,1,1,6,1,7,2,13,7,2,2,5,2,2,2,5,2,1,2,1,6,1,6,2,5,1,1,1,1,1,2,1,0,1,1,1,2,6,2,1,2,2,5,1,5,12,2,2,5,11,13,10,2,10,1,1,1,2,5,2,10,2,21,2,2,2,2,2,2,2,5,13,13,13,7,2,2,2,6,6,6,7,2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,5,5,6,2,7,11,2,2,2,5,6,6,2,2,2,11,6,2,2,12,6,1,2,2,5,11,2,2,1,2,6,9,9,9,5,2,11,11,2,11,2,2,2,1,1,1,2,2,
+2,11,10,2,5,10,1,1,1,2,1,1,2,5,2,2,5,11,2,2,2,5,2,2,2,13,10,1,1,2,1,2,1,1,1,1,6,2,11,7,7,7,13,14,6,1,1,1,1,0,1,1,1,1,1,1,2,2,5,1,13,7,6,2,2,11,11,6,5,5,2,5,2,1,1,0,2,2,2,2,2,1,1,1,1,1,1,1,14,6,7,7,7,13,6,5,2,10,11,2,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,11,13,12,1,5,7,2,12,21,6,7,2,2,5,2,2,5,2,2,2,2,2,2,2,1,2,5,1,2,6,2,1,1,1,5,2,5,2,2,2,2,5,1,1,2,5,2,2,2,2,2,5,1,5,2,2,14,13,6,1,1,0,2,2,2,5,2,12,7,2,2,2,2,5,2,2,2,2,5,2,1,5,7,2,2,1,1,2,1,1,1,1,1,0,1,1,5,1,2,1,5,2,2,5,1,2,2,1,2,12,11,2,11,1,1,1,1,2,2,2,12,2,10,2,6,1,5,2,5,5,2,10,7,13,2,6,2,2,2,6,2,2,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,25,6,5,7,2,6,2,2,6,2,2,1,11,6,11,2,9,10,11,2,2,10,12,11,12,1,1,1,2,6,2,2,2,6,10,10,6,7,2,5,1,1,1,1,5,0,
+2,13,1,5,2,1,1,1,1,2,1,1,5,2,2,1,6,1,5,2,6,2,5,2,1,5,1,1,1,1,1,1,1,1,1,1,5,2,2,11,6,11,7,11,2,2,1,1,1,1,1,1,1,2,1,2,2,10,10,2,21,2,2,2,5,2,10,5,5,2,2,2,5,0,1,1,1,1,2,2,1,1,0,2,1,1,1,1,7,2,14,14,13,7,13,2,13,14,14,2,1,1,1,1,2,1,1,2,6,2,5,2,2,2,12,5,5,2,2,10,11,5,28,7,7,7,6,1,2,5,2,1,2,5,1,2,5,2,1,1,2,2,5,11,1,6,1,1,2,2,2,2,2,13,1,2,2,1,2,2,2,2,6,1,13,1,2,2,2,2,6,7,14,6,6,0,1,2,5,2,13,2,13,1,2,13,1,2,6,1,2,5,5,2,2,2,2,2,13,2,1,1,2,5,2,1,1,1,1,1,1,0,1,1,1,2,5,2,2,6,2,2,1,7,7,13,5,5,1,1,1,1,2,5,2,2,21,11,2,1,2,1,2,2,2,5,10,10,12,2,7,2,11,6,6,2,7,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,11,6,2,2,2,6,2,11,2,6,1,6,6,6,2,2,5,10,11,11,13,11,2,2,5,2,1,2,2,2,25,7,2,13,11,11,10,2,1,1,1,1,2,2,2,
+2,2,6,2,1,1,1,1,1,1,1,2,5,2,1,1,1,2,6,1,2,2,2,2,1,2,6,1,1,5,1,2,2,2,2,2,2,6,7,11,13,7,14,2,2,1,1,1,1,1,2,2,1,2,5,5,5,2,10,2,13,2,2,5,2,2,11,2,2,2,13,2,2,1,1,1,2,1,1,2,2,1,0,2,2,1,0,2,2,12,14,7,13,2,7,2,12,13,11,2,1,1,2,2,5,2,1,1,2,2,2,13,1,1,5,2,5,5,12,13,5,10,11,13,13,6,2,6,2,2,2,2,1,1,1,1,2,1,1,2,5,2,2,5,2,2,2,2,1,2,2,5,5,2,6,2,5,2,5,2,2,6,1,2,2,2,1,1,1,1,2,7,14,6,1,1,6,1,1,2,2,2,21,2,6,2,5,5,2,2,6,1,2,6,1,2,13,2,7,2,2,6,1,2,1,1,1,1,1,1,2,1,1,1,1,2,6,2,5,2,2,2,1,7,12,5,2,2,2,1,1,1,1,2,2,6,5,2,2,1,1,2,1,6,9,10,13,21,2,2,2,11,1,11,2,2,6,2,2,1,1,1,2,1,1,1,1,1,1,1,1,2,5,2,2,11,6,7,6,1,2,7,2,2,2,2,11,6,7,11,2,2,10,2,13,26,1,2,2,1,1,1,5,2,2,2,2,10,13,10,10,2,1,2,1,1,2,1,5,1,
+1,1,2,1,1,1,1,1,1,1,1,1,1,6,1,1,5,2,2,2,5,2,5,2,1,2,2,2,2,2,5,2,2,1,5,2,11,7,11,7,13,13,2,13,2,2,2,1,1,1,2,1,1,2,1,2,2,5,5,13,11,2,6,1,6,1,5,2,6,5,6,1,2,1,1,1,1,1,1,2,1,1,0,2,1,1,1,1,2,16,7,7,11,6,2,2,21,7,6,1,1,1,1,1,1,1,1,1,1,5,2,2,2,13,21,2,2,2,5,2,21,12,13,13,11,2,13,2,2,2,5,1,1,2,2,1,2,1,1,2,2,2,5,2,2,2,5,2,1,2,12,2,5,2,5,2,2,2,2,5,2,13,13,13,2,1,1,1,2,5,2,13,2,2,1,1,2,2,6,2,10,13,2,6,1,2,2,2,1,5,1,2,6,1,5,2,13,2,13,1,1,2,5,1,1,1,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,1,1,10,10,2,2,1,1,1,1,1,1,2,5,6,11,7,5,2,2,5,2,2,11,2,13,2,6,2,7,6,2,6,6,2,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,7,11,7,2,6,2,2,11,2,2,5,6,6,2,2,2,5,10,6,11,1,2,5,2,1,1,2,2,5,2,5,2,10,10,2,12,2,1,1,1,1,2,2,1,2,
+1,1,2,2,2,2,1,1,1,1,1,1,2,2,1,1,2,2,5,2,2,2,2,1,2,13,2,1,2,5,2,5,2,2,2,2,2,13,7,7,5,2,2,2,2,2,1,1,1,1,2,5,1,2,5,5,10,1,6,7,21,1,2,2,7,2,5,2,2,11,7,6,1,0,1,1,1,1,1,1,1,1,1,0,2,1,0,2,2,7,13,7,7,2,11,5,7,7,2,1,2,1,1,1,2,1,2,1,2,2,2,12,2,7,13,2,2,12,7,11,14,2,14,7,13,13,7,2,2,6,2,2,2,1,1,1,2,2,1,2,5,2,2,2,2,5,2,2,2,5,2,2,6,1,5,2,6,1,6,1,2,14,7,7,2,1,2,6,2,1,7,14,2,2,1,1,2,6,1,2,12,11,6,5,2,5,5,2,2,1,1,1,2,2,6,1,2,6,6,6,1,2,2,1,1,2,2,2,1,1,1,1,1,0,1,1,1,2,12,2,5,1,1,5,10,1,1,1,1,1,1,2,2,1,2,2,13,2,2,5,2,2,5,2,2,2,13,2,2,2,2,2,2,11,2,6,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,6,10,11,7,2,2,2,11,6,2,1,2,7,11,6,2,2,2,11,1,12,10,2,2,5,1,1,5,2,2,6,1,2,11,26,6,9,6,1,1,1,1,5,2,2,6,
+1,1,1,1,5,2,5,1,1,1,1,2,5,2,1,2,5,2,2,6,7,5,2,2,11,7,6,2,2,2,1,2,5,1,2,5,2,7,11,7,2,2,6,13,2,1,1,1,1,2,1,1,1,1,2,5,5,5,1,2,2,2,2,6,5,2,2,5,2,13,11,2,1,1,1,0,1,1,1,2,0,1,0,2,1,0,1,1,2,13,1,2,7,13,11,11,10,14,1,0,2,1,1,0,1,6,2,1,2,6,5,7,2,12,6,1,2,2,2,21,2,13,21,14,7,13,2,2,5,2,2,2,2,5,2,2,5,2,1,2,1,2,2,5,2,2,2,2,5,2,1,5,2,2,2,2,2,5,2,2,5,13,5,5,2,1,1,2,1,1,13,2,2,13,0,1,2,5,2,12,7,14,7,1,2,6,2,5,1,2,2,5,2,5,1,2,5,7,7,2,6,1,2,6,1,1,5,2,1,1,1,1,1,1,1,1,1,2,12,1,12,5,5,10,2,1,1,2,1,1,1,5,1,2,2,5,11,2,2,2,5,2,2,2,10,13,5,2,5,2,2,11,2,6,7,6,2,6,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,11,7,6,2,2,5,2,5,1,6,2,11,5,6,2,5,2,12,10,10,2,9,2,2,2,1,1,1,1,2,11,2,21,10,10,10,2,1,1,1,1,1,2,5,1,
+1,2,1,1,2,2,2,1,1,1,1,6,1,2,2,6,2,9,6,1,2,2,11,2,13,13,2,1,2,6,1,1,2,1,2,2,13,26,2,6,2,5,7,2,1,2,1,1,2,2,1,1,1,2,2,2,5,2,5,2,5,2,10,1,2,1,2,11,13,7,2,2,2,1,0,1,2,2,1,5,1,1,1,0,0,2,1,2,7,5,6,5,7,13,21,14,14,13,1,1,1,1,0,1,1,2,1,5,2,1,5,2,6,13,1,1,1,2,7,10,2,5,13,6,2,7,6,1,1,2,5,2,2,2,2,6,2,2,2,1,5,2,5,2,2,5,2,1,2,1,0,1,2,6,1,5,1,2,2,2,13,6,7,7,1,1,1,1,2,2,7,2,5,2,1,1,2,5,2,2,13,12,6,2,5,2,7,2,6,1,6,2,2,2,6,2,2,13,2,6,1,5,2,2,5,1,2,1,2,1,1,1,1,0,1,1,1,2,6,2,5,2,2,2,2,1,1,1,1,1,2,1,2,5,2,12,10,2,6,1,1,2,5,11,11,2,6,2,2,2,11,2,6,7,6,6,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,11,7,11,6,2,2,2,2,2,6,1,2,2,2,11,2,2,2,5,9,10,5,2,2,2,5,1,1,1,2,2,5,1,13,10,11,1,2,1,1,1,1,2,1,2,6,
+1,5,2,1,2,5,1,2,2,1,1,1,2,2,5,2,2,2,1,2,5,11,11,11,11,13,1,1,1,1,1,1,1,2,5,2,2,2,2,7,2,10,10,2,0,1,2,1,2,2,2,1,1,1,2,5,5,2,2,6,2,11,2,5,2,2,12,1,7,13,2,2,2,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,13,7,6,7,14,30,21,14,13,2,6,1,1,1,1,1,1,2,2,2,1,2,13,2,2,13,2,1,2,14,7,6,5,7,7,7,11,13,2,2,2,2,2,2,6,1,2,7,2,2,9,2,2,13,1,13,2,2,2,2,2,2,6,2,5,2,2,2,2,6,2,5,13,6,13,14,1,1,0,2,5,6,6,2,2,2,5,1,2,2,6,1,7,2,2,2,2,5,2,6,1,5,2,2,2,6,1,2,2,7,2,2,2,6,1,2,2,6,2,1,5,1,1,1,1,1,1,2,1,1,2,2,2,6,2,1,2,2,1,2,0,1,1,1,1,2,1,2,12,7,2,2,5,2,2,14,11,2,2,2,6,1,11,6,2,11,5,2,7,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,2,12,10,7,10,11,6,2,2,5,6,2,2,11,6,2,9,2,6,9,2,2,2,2,2,2,5,2,1,1,1,5,2,1,11,12,13,2,5,1,1,1,2,1,1,5,2,2,
+2,2,2,5,6,7,1,2,5,2,2,1,5,2,2,1,5,2,5,2,2,13,12,1,13,26,2,2,1,1,1,2,1,1,1,1,2,13,12,7,5,5,7,6,1,1,1,1,2,2,1,1,0,1,2,2,2,2,5,1,2,2,2,1,2,13,7,2,13,2,2,2,1,2,1,1,2,2,2,6,1,0,2,1,2,2,5,13,2,2,5,14,13,13,17,12,13,1,1,2,1,1,2,1,1,2,5,1,1,2,5,1,5,2,1,1,13,1,12,1,11,2,7,7,7,7,2,5,2,2,12,6,5,2,5,12,2,2,2,2,5,2,13,1,2,5,2,5,2,5,2,1,2,2,6,2,5,2,2,5,14,2,2,13,1,2,1,2,2,13,7,2,2,6,2,2,2,5,2,2,6,1,1,1,6,2,6,1,2,2,1,5,2,5,1,5,13,12,6,1,2,2,1,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,25,28,2,1,1,2,5,1,1,1,1,1,2,1,1,5,2,13,7,2,2,5,2,2,13,13,2,2,6,1,2,6,6,2,11,6,2,2,6,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,7,7,11,2,2,5,2,2,5,2,2,2,11,2,2,2,2,6,7,11,1,6,2,2,2,1,2,1,1,1,2,11,13,10,2,1,1,1,1,1,1,2,1,2,2,
+7,1,1,1,2,10,1,10,10,1,1,1,2,2,1,2,2,2,2,2,10,7,11,2,6,1,2,1,1,1,1,1,1,1,1,1,6,2,2,2,13,13,11,2,2,0,1,1,1,2,1,1,1,1,2,2,5,2,2,2,5,2,6,1,10,11,2,6,2,7,2,6,1,0,1,2,2,2,13,5,0,1,0,1,1,2,5,7,6,13,7,6,14,14,13,6,7,2,2,1,1,1,2,5,1,1,1,1,1,2,2,1,2,1,5,2,5,2,5,6,5,7,11,13,11,13,2,2,2,2,13,6,2,5,13,2,2,2,2,5,2,6,2,2,6,1,1,2,2,1,2,1,2,5,2,2,2,2,6,1,2,6,14,13,1,1,1,1,2,2,6,2,5,2,2,5,2,2,2,1,1,1,1,2,2,7,2,1,5,2,2,2,5,2,1,2,5,6,1,1,5,2,5,2,2,2,1,6,1,1,1,1,2,1,1,2,2,1,65,5,12,1,2,2,2,2,1,5,1,1,1,1,1,2,2,12,10,2,2,2,2,6,11,11,2,2,2,5,2,2,2,2,11,6,13,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,25,7,7,11,10,2,2,6,1,11,2,2,25,6,6,11,2,2,10,2,10,6,2,2,2,5,1,1,2,1,1,1,2,11,13,2,2,1,1,1,2,1,1,5,2,12,2,
+2,5,2,1,5,10,2,10,1,1,1,1,2,5,1,1,2,1,1,1,2,10,2,2,2,2,5,1,1,1,1,1,1,1,1,2,2,2,2,13,13,14,11,2,1,2,0,1,1,2,2,1,0,2,2,2,2,1,5,2,2,2,2,1,5,2,2,5,10,11,2,7,0,2,1,0,2,5,2,6,1,1,1,1,1,6,13,5,13,14,11,16,21,13,7,13,13,0,2,1,1,1,2,1,1,2,1,1,1,13,1,1,2,5,7,2,2,2,5,5,13,28,11,13,13,7,6,1,2,5,7,2,11,7,13,2,2,5,2,2,6,5,1,6,1,2,1,6,1,6,1,1,2,2,2,5,2,5,2,2,6,1,14,13,2,2,6,1,2,13,2,2,2,6,1,2,1,1,1,1,1,2,1,2,5,7,6,2,2,2,6,1,6,1,1,2,13,1,2,2,2,5,2,2,5,2,2,1,2,1,2,38,2,1,1,5,1,1,5,38,1,1,2,5,2,2,1,1,1,1,1,2,1,2,5,7,1,2,5,2,5,2,13,7,6,2,5,2,2,5,2,11,7,7,2,6,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,7,11,10,7,5,2,2,2,6,1,2,2,10,7,2,6,9,6,7,11,5,2,2,6,2,5,1,1,1,1,2,5,26,6,9,5,1,1,1,1,1,2,2,2,10,2,
+2,1,1,1,2,2,5,2,2,1,1,1,2,2,1,1,1,1,5,1,1,2,5,2,2,6,1,1,1,2,1,1,1,2,1,5,7,6,7,12,21,7,12,2,0,2,1,2,1,2,1,2,1,1,1,2,2,1,1,2,5,2,2,2,2,11,5,7,2,5,10,11,0,2,0,1,2,2,2,7,0,1,1,1,2,2,14,11,11,13,16,14,8,2,21,11,2,2,1,1,0,1,1,1,1,1,1,2,5,7,6,5,7,2,2,2,5,2,2,13,7,11,13,13,7,13,2,2,2,2,5,7,7,7,13,2,2,2,2,2,7,2,6,7,2,6,1,2,6,1,5,1,2,6,1,2,2,2,2,5,2,5,13,6,2,6,2,5,7,2,7,2,2,1,2,2,2,1,2,2,1,5,1,2,2,7,1,2,2,6,1,2,2,2,1,2,13,1,6,2,5,2,1,1,6,2,5,2,1,2,2,1,1,2,1,1,1,2,1,0,1,1,1,2,5,2,1,1,1,1,1,1,6,2,12,2,2,2,2,2,2,2,21,6,2,2,2,2,5,2,5,2,11,6,5,7,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,12,1,10,2,2,2,5,6,2,2,5,6,5,2,5,2,2,11,11,7,2,2,6,1,2,2,1,2,1,1,1,5,26,5,9,2,1,1,1,2,1,1,6,9,12,0,
+2,6,1,1,2,5,0,2,5,2,1,1,5,2,1,1,1,2,1,5,2,10,1,5,2,1,2,1,5,2,2,2,1,1,2,2,11,2,5,21,13,13,7,1,1,1,0,1,1,2,1,1,1,2,1,2,5,2,1,1,2,5,2,5,5,2,2,6,5,7,10,2,1,0,2,1,1,2,5,2,1,1,2,2,2,10,11,12,6,14,14,11,7,13,12,7,2,1,1,1,1,1,6,1,1,2,1,1,2,2,1,11,2,2,1,2,2,6,2,7,21,13,15,13,13,7,2,5,2,2,2,13,13,7,7,6,1,1,1,2,13,7,7,2,13,1,2,5,2,2,2,1,2,2,6,2,5,2,2,2,2,13,14,6,2,5,2,2,5,2,7,1,1,1,12,7,2,0,1,1,2,2,2,6,2,5,1,2,5,2,2,12,2,2,6,7,7,13,2,2,2,5,2,2,7,2,2,1,1,1,5,1,1,1,1,1,2,1,0,1,1,1,1,2,2,1,1,1,1,1,2,2,5,2,2,6,1,6,2,5,1,2,13,2,5,1,1,6,2,2,2,2,11,7,11,2,6,5,2,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,7,10,13,2,5,2,2,2,11,2,2,5,11,2,5,2,5,11,11,2,6,1,2,5,2,2,1,1,1,2,5,11,11,2,2,1,1,1,2,1,1,1,1,2,5,2,
+2,2,2,1,6,2,5,1,2,2,5,2,2,5,1,1,1,1,2,2,10,26,5,2,1,2,1,1,2,1,5,2,1,1,5,2,2,2,13,13,13,7,12,1,2,2,1,1,0,2,1,1,0,1,1,2,2,2,1,1,1,2,2,2,2,7,5,7,11,7,13,2,1,1,1,1,1,1,2,2,1,1,2,2,5,21,7,2,29,14,11,7,13,7,7,6,2,1,1,1,0,1,2,1,1,1,2,2,5,2,5,5,2,1,0,1,2,2,6,13,13,7,14,13,13,6,2,2,2,5,5,13,7,13,7,2,2,1,2,5,7,7,6,2,7,2,6,1,2,5,2,1,2,5,2,2,6,2,5,2,5,13,7,6,1,2,2,1,2,7,13,1,2,1,1,0,0,2,0,1,1,2,6,7,2,2,1,1,2,2,12,2,2,6,1,7,5,7,2,2,5,2,5,1,6,2,5,2,1,2,2,1,1,1,1,0,12,2,1,1,1,1,1,1,6,1,2,1,1,1,1,5,7,1,5,2,5,1,2,2,2,5,13,2,2,2,6,1,2,5,2,2,6,2,10,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,9,11,1,5,2,2,2,5,2,2,2,2,6,7,2,10,2,5,2,11,11,2,2,5,2,2,2,5,1,1,2,1,2,26,5,2,25,2,1,1,5,1,2,1,1,9,9,2,
+1,2,5,1,2,2,2,1,5,2,5,2,2,10,5,2,1,6,1,6,1,1,1,5,2,2,5,2,2,2,2,2,10,2,2,11,7,11,2,6,7,13,5,2,6,1,2,5,2,11,2,1,1,1,1,2,5,2,1,1,1,2,5,6,12,11,10,12,13,14,13,2,1,1,1,1,1,1,2,2,1,1,1,7,14,14,22,5,13,7,5,14,7,7,6,2,5,1,1,0,1,1,2,1,1,2,5,5,2,5,7,7,2,1,1,2,5,7,2,21,11,14,13,13,13,6,2,2,5,2,2,21,7,13,12,1,1,1,1,2,7,7,2,7,7,2,1,2,6,2,1,1,2,2,2,5,2,2,2,2,2,21,13,2,2,6,2,6,5,7,6,2,1,1,0,2,1,1,1,1,1,2,5,2,2,5,1,2,6,1,14,2,2,2,5,2,6,7,2,6,2,2,2,13,1,2,2,2,5,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,5,1,1,1,2,2,2,2,2,2,6,1,1,2,1,10,2,1,6,1,2,6,1,6,1,11,6,6,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,7,2,13,2,5,2,2,11,2,6,2,12,6,2,5,2,2,10,11,5,2,2,5,1,2,1,1,1,1,6,7,11,5,1,2,1,1,2,1,1,1,5,2,6,10,2,
+1,1,2,13,10,1,1,5,1,5,9,2,5,5,2,2,2,1,1,1,1,2,1,2,2,2,6,1,1,5,2,2,1,2,2,5,5,7,11,2,2,5,7,1,2,0,1,1,2,7,1,2,0,1,5,2,2,5,1,1,2,1,1,2,11,7,13,7,10,21,6,2,1,1,2,1,1,1,2,2,1,1,1,2,13,21,7,2,13,13,11,5,2,13,13,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,5,2,2,5,1,1,2,2,2,13,13,13,13,13,13,2,2,2,2,2,13,13,13,13,7,2,1,1,2,5,7,13,7,6,7,2,2,5,2,5,1,1,2,2,5,2,2,2,5,2,7,13,2,6,2,2,2,7,7,7,7,2,1,0,2,0,2,1,1,1,1,2,2,2,6,1,1,6,1,7,6,2,5,2,2,7,7,5,2,2,2,6,1,2,6,7,6,2,1,1,1,5,1,1,1,1,1,0,2,1,1,1,1,2,1,1,6,2,1,1,2,7,5,1,2,2,5,1,2,1,2,12,2,2,6,1,2,5,2,2,2,5,10,6,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,10,10,7,2,2,1,6,2,5,2,2,2,2,2,2,2,5,2,13,6,2,2,6,2,5,2,1,6,1,5,1,26,2,2,2,5,0,2,1,1,2,1,2,5,10,2,1,
+1,1,2,13,2,1,1,2,2,5,2,1,1,2,2,5,2,1,1,1,2,5,2,2,5,2,2,2,2,2,5,2,1,2,6,1,11,2,7,2,5,5,10,1,5,1,1,1,2,11,0,1,1,1,2,2,6,2,1,1,1,2,13,2,12,6,5,13,13,21,11,0,2,1,1,2,2,5,1,13,1,2,5,13,7,16,2,12,13,13,6,13,14,13,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,6,2,1,1,2,12,1,6,13,21,13,11,13,13,11,6,2,5,2,2,13,14,11,13,6,1,2,2,6,1,7,7,2,2,7,6,2,2,2,2,2,1,2,6,2,2,2,5,2,2,21,6,7,6,6,6,6,7,6,14,7,0,2,0,2,1,1,1,1,2,1,2,6,2,2,1,1,2,2,13,2,2,1,2,6,7,7,2,5,2,5,2,6,2,7,7,6,6,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,5,1,2,2,2,1,2,2,1,6,1,6,2,2,5,1,2,12,1,1,1,2,5,2,2,5,2,2,13,6,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,5,6,5,1,2,2,2,11,6,2,11,6,5,2,2,2,13,5,2,1,2,2,1,2,1,1,2,1,2,10,2,5,9,2,5,1,1,1,1,1,2,2,5,2,1,
+1,1,5,13,5,1,2,11,9,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,2,2,5,1,1,1,2,1,2,1,2,5,10,11,10,2,10,7,13,1,2,2,1,1,1,5,1,1,1,1,2,5,1,2,2,5,2,5,2,2,13,13,15,13,21,13,2,2,1,2,5,1,5,2,16,5,2,2,14,6,2,13,2,14,7,7,7,13,13,11,2,2,1,2,1,1,1,2,2,2,2,2,1,2,2,6,7,2,6,2,12,5,2,12,14,16,13,13,13,14,11,2,2,2,2,13,13,14,13,7,2,1,1,1,2,5,7,2,7,5,7,1,2,13,2,5,1,1,1,2,2,2,2,2,2,2,16,12,6,6,2,6,13,7,7,8,7,1,0,2,0,0,2,1,1,1,2,7,14,2,5,5,1,2,5,1,2,2,5,2,2,7,2,6,2,2,2,2,2,7,7,6,7,2,6,1,6,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,5,2,5,1,1,2,1,5,2,2,6,2,1,2,10,2,5,1,1,2,2,6,2,5,2,11,2,2,5,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,9,7,5,2,2,2,5,2,6,2,10,11,6,6,6,2,2,6,11,2,2,9,2,5,2,2,9,1,1,6,10,5,2,2,5,9,2,1,1,1,5,1,2,6,9,9,2,
+1,2,21,7,2,1,1,2,1,1,1,2,1,2,5,2,9,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,5,2,10,2,5,6,2,2,5,2,2,1,5,0,1,1,2,1,2,1,1,2,2,5,2,1,1,2,7,2,13,13,13,14,28,13,13,6,1,1,2,2,2,5,2,13,13,6,7,6,7,7,16,6,7,13,7,11,13,12,2,2,1,2,2,2,1,1,1,2,2,2,7,1,2,7,7,14,6,1,7,2,2,13,21,13,21,15,21,14,13,13,2,6,1,6,1,14,13,7,11,2,1,1,1,2,7,5,7,2,7,2,1,5,2,2,2,2,1,1,2,5,2,5,6,5,7,13,2,7,2,2,13,1,6,7,7,6,2,0,2,0,2,0,1,1,1,2,5,2,2,5,2,1,5,6,2,5,2,2,13,7,7,6,2,2,2,5,2,6,7,2,6,6,2,1,5,2,1,1,1,1,1,1,0,2,1,1,1,1,1,1,2,1,1,1,2,1,2,1,1,2,2,5,2,2,2,2,2,1,1,1,2,1,5,1,2,2,2,10,6,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,5,2,5,2,6,2,5,2,2,11,6,2,11,2,2,2,2,26,2,1,6,1,1,2,2,2,1,2,2,5,2,2,6,9,2,2,5,2,1,2,1,5,6,9,5,1,
+1,10,5,5,2,1,2,1,1,1,1,5,1,2,2,2,2,1,1,1,1,1,1,5,1,2,1,2,5,1,2,5,2,2,2,2,5,2,10,2,1,5,10,1,1,2,2,1,1,5,1,1,1,2,2,5,2,5,2,1,5,11,2,7,21,21,21,16,13,13,2,1,1,1,1,1,1,2,12,6,7,7,13,7,13,7,6,7,2,11,14,7,2,1,2,1,1,2,2,2,1,1,2,2,2,13,1,2,21,13,2,2,2,6,2,5,21,13,14,14,21,13,29,14,11,2,2,5,2,5,13,13,7,11,2,1,1,1,2,2,14,7,2,7,6,1,1,2,5,5,1,1,0,1,2,2,2,2,2,13,7,6,7,6,6,7,2,7,7,7,7,2,0,2,1,0,2,2,1,1,2,2,2,6,2,5,1,2,1,2,1,1,2,2,7,7,7,6,2,5,2,2,6,6,7,7,5,6,1,2,2,1,1,1,1,1,0,2,1,1,1,1,1,1,1,2,1,2,2,1,6,1,1,1,2,5,2,2,2,6,1,6,1,2,6,1,1,2,6,2,5,11,6,6,2,6,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,10,2,2,1,2,2,2,6,1,2,11,7,6,2,11,2,10,7,2,1,2,2,1,1,5,2,1,1,5,10,2,5,2,2,6,1,1,1,2,1,2,1,10,2,2,1,
+5,10,2,1,1,1,5,2,2,1,1,1,1,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,5,2,5,2,5,1,1,5,5,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,1,6,2,12,13,10,11,13,7,5,13,6,0,1,2,2,1,1,2,12,2,12,7,2,6,7,14,6,7,13,7,2,2,1,1,5,1,1,1,2,1,0,1,2,5,7,11,2,2,13,13,2,2,5,5,2,7,17,13,21,14,13,13,13,14,2,2,2,2,2,11,13,13,13,11,2,1,1,1,6,2,7,7,6,7,2,1,6,2,7,2,5,1,1,1,2,2,5,2,6,7,2,6,2,2,2,2,13,6,14,7,2,1,1,0,0,2,1,2,5,1,2,7,5,2,2,2,5,2,1,1,1,6,2,7,6,13,1,5,2,2,2,2,7,6,7,6,1,2,2,6,1,1,1,1,1,1,1,1,0,1,1,2,1,1,5,1,6,2,5,1,1,1,2,1,2,2,2,2,5,1,1,2,5,2,1,2,6,9,2,2,2,11,11,2,6,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,12,1,6,1,1,2,5,2,9,5,2,6,11,6,6,2,5,5,10,2,2,2,10,1,1,2,1,1,2,9,5,1,2,5,26,1,1,1,1,2,1,5,9,10,5,5,2,
+2,1,1,1,1,2,1,2,2,2,1,1,2,2,1,2,5,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,10,2,5,2,2,5,1,2,1,1,2,2,1,1,21,1,1,1,1,2,2,5,2,2,2,2,14,15,11,29,14,21,13,11,13,2,2,1,1,1,1,2,2,6,2,13,2,2,13,7,7,13,7,7,11,6,1,1,1,2,1,5,2,5,1,1,1,2,2,7,2,1,11,14,6,2,2,2,2,11,13,29,13,13,8,13,13,13,13,6,2,5,2,5,13,13,7,7,2,2,1,1,1,2,2,7,7,2,2,5,2,2,2,13,2,2,1,2,1,2,1,2,2,5,13,2,6,7,2,12,11,6,6,7,6,2,2,1,1,2,0,2,2,2,1,6,1,2,2,5,2,2,2,5,2,2,1,2,7,2,6,2,2,2,6,1,6,6,13,7,2,2,5,2,2,2,1,1,1,1,1,0,2,1,1,2,2,2,1,1,1,1,2,2,6,1,1,5,1,1,2,2,2,2,5,2,1,1,1,1,1,2,2,2,5,2,11,2,6,2,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,12,1,1,1,2,1,11,2,2,2,25,11,2,2,9,2,13,2,1,5,2,2,1,1,2,1,5,2,5,9,6,2,2,2,1,1,1,2,5,5,9,7,9,2,5,1,
+1,2,1,1,1,1,1,5,2,1,1,2,5,2,2,2,2,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,2,5,2,10,2,10,2,1,2,7,1,1,6,2,1,2,12,2,2,2,1,2,2,5,2,5,2,1,13,21,7,14,29,29,14,13,11,13,2,1,2,1,1,1,1,1,2,2,2,2,13,11,13,7,11,2,11,6,1,1,1,2,1,1,2,2,2,2,1,1,2,6,5,1,1,13,21,6,1,2,2,12,21,11,14,11,14,13,13,13,14,11,2,2,2,2,12,13,13,7,7,6,2,1,2,2,2,13,7,6,2,6,2,2,5,2,2,2,5,1,2,1,2,5,2,2,2,7,6,1,2,2,6,6,2,6,7,7,6,0,1,0,1,0,2,2,5,1,2,5,2,7,2,2,5,2,2,1,6,6,2,7,6,2,2,2,5,2,5,2,7,7,13,6,2,2,5,2,2,2,1,1,1,1,1,0,2,1,1,2,2,1,2,1,1,2,5,1,1,1,2,2,5,2,5,2,5,2,5,2,2,2,6,1,5,2,2,2,5,11,11,2,2,6,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,5,2,9,2,5,1,2,5,2,2,2,5,2,5,2,10,11,2,10,7,2,2,2,5,2,1,2,2,1,2,25,1,2,2,9,11,0,2,1,1,1,2,5,9,2,2,12,2,5,
+1,1,1,5,1,2,2,2,2,1,1,1,2,5,1,2,1,1,1,1,1,1,1,2,6,5,5,2,2,1,1,1,1,2,5,5,2,2,2,5,10,12,1,1,2,2,2,13,2,2,2,1,1,2,5,2,2,2,6,1,11,7,13,13,14,21,14,13,13,14,2,1,5,2,2,1,2,5,2,13,2,14,2,7,7,11,7,7,7,2,2,1,2,1,2,2,2,9,2,2,1,1,2,2,2,2,2,13,14,2,2,6,7,7,11,13,16,11,17,11,6,16,13,13,2,2,1,2,7,13,11,13,2,2,1,2,6,1,7,7,7,2,5,2,2,2,6,1,7,5,2,2,1,2,2,1,2,5,13,7,2,2,7,7,5,2,6,7,7,7,2,2,1,1,1,1,2,7,2,2,2,2,6,2,2,6,2,2,1,2,2,7,2,7,2,2,2,5,2,2,2,2,13,5,7,2,6,2,2,5,2,1,1,1,1,1,0,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,1,2,1,2,2,2,2,2,2,5,2,1,2,2,6,2,5,2,2,11,5,11,2,2,2,6,1,2,1,1,1,1,1,1,1,1,1,1,2,2,7,6,2,2,1,1,2,2,11,2,2,9,11,2,6,1,10,10,11,5,1,2,2,2,1,5,1,2,2,2,6,2,5,2,5,1,1,1,1,1,9,10,9,1,25,1,9,2,
+1,1,2,1,1,5,5,2,5,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,2,1,1,5,2,2,2,1,2,2,11,10,5,2,5,21,2,2,5,2,5,13,1,2,2,2,2,1,2,2,2,5,2,2,2,11,7,14,16,29,16,13,13,2,6,2,1,2,2,2,5,1,2,2,6,7,13,6,13,7,7,2,11,13,6,1,2,1,2,5,1,2,2,2,5,0,2,5,2,2,1,7,13,7,6,2,2,12,6,7,16,11,17,13,8,13,11,7,2,6,2,2,2,13,7,7,2,14,2,1,2,2,2,2,7,2,7,2,2,5,6,1,2,6,2,1,2,5,1,2,2,2,2,5,2,2,6,2,13,6,7,6,14,7,13,2,0,1,1,1,1,2,7,2,5,2,6,2,5,2,5,2,6,1,5,7,7,2,2,5,2,5,2,2,2,6,2,2,13,7,2,2,2,6,2,2,1,1,1,1,1,1,0,0,2,0,1,1,2,1,1,1,1,5,2,2,2,1,1,1,2,6,2,9,2,5,1,2,1,2,5,2,2,2,6,2,7,7,11,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,11,2,2,1,2,1,2,5,2,1,2,5,2,5,11,6,10,11,2,2,2,5,2,6,1,1,1,5,6,2,2,2,2,2,1,5,1,1,1,1,25,2,5,5,5,9,2,2,
+1,1,2,1,1,2,5,2,2,2,1,1,1,1,2,5,1,1,1,0,1,1,1,1,1,5,1,2,2,2,5,1,2,2,5,13,13,2,2,5,2,1,2,1,2,2,2,1,1,6,1,1,2,2,2,5,2,2,5,2,7,13,29,29,16,16,11,6,5,13,1,2,2,5,2,2,2,2,2,13,13,2,6,14,2,7,7,13,13,2,5,1,2,2,1,2,5,2,5,1,1,2,2,5,2,2,13,13,13,1,7,7,13,7,14,16,13,11,11,13,13,17,6,2,6,2,2,5,14,6,6,7,6,2,1,2,1,2,7,7,13,2,6,1,2,2,2,6,1,2,1,6,2,1,5,2,14,2,2,2,5,1,2,7,13,1,7,13,7,7,6,1,0,2,0,1,2,2,7,1,2,2,2,2,2,2,2,1,2,2,7,7,6,2,1,2,2,2,2,5,2,2,13,7,6,6,5,1,2,2,5,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,5,2,2,2,2,2,6,1,2,2,5,2,1,5,2,5,2,10,11,2,2,2,2,1,5,1,1,1,1,1,2,1,1,1,1,1,2,12,6,2,2,5,1,2,1,2,2,1,5,2,10,2,13,5,5,2,5,2,1,2,2,1,1,6,1,2,10,2,25,6,2,2,1,2,1,1,2,2,2,25,1,5,2,2,6,1,
+1,1,1,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,2,1,2,5,2,2,1,5,2,5,11,5,2,13,5,1,1,1,1,6,7,11,0,1,2,1,1,1,2,7,2,5,2,2,6,13,29,16,17,29,13,11,6,11,6,2,2,2,2,2,2,5,1,11,13,7,6,7,7,6,7,13,14,16,2,2,2,2,1,5,2,2,6,2,1,5,1,5,2,5,5,21,11,2,2,12,2,11,7,29,16,13,11,17,11,17,13,17,2,2,2,6,7,13,7,7,8,6,2,1,1,1,2,13,7,2,7,2,6,1,5,2,2,2,13,1,2,1,2,2,2,13,1,13,2,2,6,7,13,2,6,6,7,6,7,6,6,0,1,1,0,2,5,2,2,2,5,2,5,2,1,1,2,2,2,6,6,2,2,1,6,1,6,1,5,2,2,11,6,2,7,13,2,5,2,2,1,1,1,1,1,1,0,2,1,1,1,1,2,1,1,2,1,2,2,5,1,1,2,2,2,5,2,5,2,2,1,5,2,2,2,2,2,2,2,6,10,2,7,6,2,1,1,2,2,5,1,1,1,1,1,1,1,1,1,2,2,7,2,13,2,1,2,2,5,1,2,2,2,6,2,13,2,11,2,2,1,2,5,2,1,1,2,1,5,7,6,1,2,6,2,5,2,1,1,1,2,5,9,2,2,25,2,2,2,
+1,1,1,1,1,1,5,2,5,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,11,7,11,14,5,0,1,2,5,1,13,2,1,5,2,1,0,1,2,2,6,2,5,2,7,21,14,29,14,30,13,13,22,16,12,2,2,11,2,2,2,2,6,28,14,8,2,11,13,14,13,14,16,17,2,2,5,2,2,2,2,7,2,2,2,1,2,2,2,2,13,13,7,6,7,6,7,13,7,16,29,7,13,13,14,13,11,11,6,2,6,2,7,6,7,7,6,7,2,2,1,1,2,7,6,6,2,2,2,6,2,5,2,5,7,2,2,2,2,13,13,1,6,2,2,5,2,6,2,2,5,6,7,7,13,2,2,2,1,1,1,2,2,2,5,1,2,2,2,2,2,1,2,5,1,2,7,6,1,2,1,5,2,6,7,2,12,7,7,6,6,2,2,2,2,6,1,1,1,0,2,1,1,0,2,1,1,1,1,1,1,1,1,2,1,2,1,6,2,6,1,2,2,1,2,1,2,1,5,2,2,6,5,1,11,1,2,13,11,2,6,1,6,2,5,2,2,1,1,1,1,1,1,1,1,2,12,6,6,2,2,1,5,2,2,1,6,1,6,2,10,11,10,10,2,1,1,5,2,2,1,1,2,5,10,10,1,9,11,1,2,1,2,1,2,5,2,9,5,1,9,2,2,9,2,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,5,13,2,16,2,1,1,2,2,5,5,5,2,2,2,1,1,1,6,2,2,2,1,2,13,13,21,14,21,29,14,14,30,30,13,2,2,13,12,6,2,5,2,36,14,7,7,13,13,14,13,14,29,13,2,2,2,2,2,2,2,7,2,2,2,2,2,5,2,6,21,6,7,2,2,2,13,6,16,29,14,11,13,7,13,13,17,11,6,2,6,2,14,6,6,6,7,6,2,1,1,1,2,7,7,6,6,6,6,2,2,2,2,1,2,5,2,6,5,7,2,6,5,2,2,2,2,11,5,13,1,11,2,13,7,6,6,0,1,1,1,1,2,5,2,2,2,1,0,1,1,1,1,2,2,7,7,2,1,2,2,2,2,2,7,2,11,11,6,2,6,5,1,2,5,2,1,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,6,2,6,1,6,9,2,2,2,2,2,6,7,7,2,6,2,6,1,2,2,2,6,1,5,1,1,1,1,1,1,1,2,10,5,2,2,1,2,2,1,2,2,11,2,6,7,13,11,5,1,1,1,2,2,2,1,2,5,1,11,1,6,6,10,7,2,1,1,1,1,2,2,10,2,2,25,2,2,25,2,
+1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,5,2,2,2,1,13,13,7,2,13,2,1,1,1,1,2,10,2,1,1,1,2,5,1,5,7,5,2,2,6,13,21,17,21,12,29,14,29,24,13,2,2,2,5,2,2,6,5,13,16,13,14,13,14,14,15,13,13,16,13,1,2,2,5,2,2,5,2,2,1,2,2,5,1,2,14,13,2,7,2,2,21,7,6,17,14,11,7,13,29,11,8,7,11,11,2,2,2,7,6,13,7,7,13,2,1,1,1,13,14,2,7,7,2,2,2,2,6,2,5,2,2,2,6,13,7,2,2,2,2,5,2,11,7,6,2,5,13,2,14,13,6,2,6,0,1,1,1,2,2,2,2,2,1,1,1,1,2,2,2,5,13,7,1,2,5,2,5,2,13,10,13,13,2,6,6,6,6,1,2,5,2,1,1,2,1,1,0,2,1,1,1,1,1,1,1,6,1,1,1,1,1,2,5,2,2,5,2,6,1,2,1,2,2,2,2,2,5,2,5,5,2,13,6,6,6,6,6,2,6,1,6,1,2,2,1,1,1,1,1,1,5,6,2,2,12,2,1,5,2,1,1,5,6,6,6,7,13,5,2,6,1,1,2,5,2,1,1,9,10,2,5,1,11,9,2,5,1,1,1,5,2,5,10,9,5,2,9,2,2,1,
+2,1,1,1,1,1,1,1,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,2,6,9,2,5,2,2,5,2,5,6,21,13,11,11,14,6,1,1,1,2,12,12,1,1,0,2,2,2,2,2,2,2,5,1,2,21,21,23,15,30,36,30,36,17,14,6,2,2,2,2,5,2,13,21,7,14,29,29,29,14,13,13,13,16,13,0,2,2,2,1,6,2,2,2,5,2,5,2,5,5,21,2,5,11,6,2,13,6,6,22,13,11,7,17,15,13,13,13,11,13,6,2,13,7,7,11,7,6,8,6,1,1,2,7,7,6,14,7,6,2,2,6,1,2,2,2,2,13,2,7,2,6,2,13,2,2,2,5,7,7,2,2,14,2,13,6,7,6,6,2,2,1,1,2,2,2,1,1,1,0,2,1,2,1,2,7,13,6,2,1,2,2,2,2,2,2,2,11,7,6,6,7,2,6,2,6,2,1,1,0,0,2,1,0,1,1,1,1,1,2,1,1,1,5,2,1,1,1,2,2,5,2,2,2,1,5,2,2,6,5,1,2,2,10,2,2,2,10,11,6,6,6,6,1,2,5,2,5,2,2,2,2,1,1,1,1,2,10,2,6,2,2,2,2,1,1,2,1,26,11,11,7,7,2,5,1,1,1,2,2,6,5,2,2,2,1,1,6,13,5,2,1,1,1,1,2,2,10,12,1,2,2,2,5,2,1,
+1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,11,11,5,13,13,2,2,2,2,12,13,21,2,0,2,2,2,2,2,2,2,6,2,5,11,13,16,29,14,30,29,21,29,22,14,2,6,1,2,2,2,2,5,13,13,36,29,16,16,14,14,16,13,13,11,0,1,2,1,5,2,2,2,6,2,2,2,2,2,21,13,2,2,12,2,13,2,7,7,29,13,13,12,13,11,8,11,8,7,7,6,2,6,7,8,7,7,7,7,2,2,1,1,14,7,7,6,7,2,6,6,7,6,2,1,1,6,5,7,13,2,2,2,7,2,6,2,2,7,2,6,13,2,2,7,7,6,2,13,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,1,2,7,2,2,1,5,2,2,5,7,2,7,11,7,6,7,6,2,1,2,2,1,1,0,2,1,1,0,1,2,1,1,1,2,2,1,2,1,2,1,1,1,2,5,1,2,2,5,2,2,1,2,1,2,1,2,5,2,2,5,2,5,11,6,6,6,2,6,6,2,2,2,2,1,1,1,1,2,1,1,1,2,10,7,7,2,1,6,5,1,1,2,2,13,11,7,10,11,2,2,6,1,2,5,9,2,1,1,1,1,1,2,2,10,2,6,1,1,1,1,2,11,9,6,5,10,10,10,2,2,1,
+2,1,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,6,5,2,1,2,1,5,13,13,7,11,0,1,2,2,13,2,21,2,1,5,6,5,2,1,2,11,2,2,2,13,13,21,21,29,22,13,22,43,14,14,6,1,2,6,2,2,2,11,6,16,23,16,16,13,29,14,13,16,13,6,2,1,1,2,2,2,5,7,2,2,2,5,2,9,14,2,12,7,2,11,2,2,21,13,16,13,13,16,11,8,13,8,13,11,11,6,2,6,7,7,13,7,6,6,2,1,1,2,7,6,1,7,14,2,2,7,16,7,2,6,1,2,2,2,2,5,2,2,5,2,2,6,1,13,2,2,13,6,13,13,7,6,2,7,1,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,7,6,2,5,2,2,2,5,2,13,2,12,2,11,6,7,2,2,5,2,1,1,1,1,1,1,1,1,1,1,0,2,1,2,1,1,5,1,1,1,1,1,2,2,2,5,2,2,2,5,2,5,2,2,2,6,1,2,11,6,6,2,11,5,6,6,7,6,1,2,1,1,2,1,2,2,1,1,1,1,1,5,10,10,10,9,2,2,2,1,1,5,2,2,26,6,10,2,5,2,2,1,2,2,5,1,2,1,1,1,2,5,27,21,2,1,2,1,1,1,5,1,9,10,6,10,10,11,5,11,0,
+2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,6,1,2,2,2,2,2,1,5,2,7,13,11,7,5,6,5,5,5,10,10,13,2,2,12,5,13,1,1,5,2,2,5,5,13,2,13,11,13,17,21,29,16,6,7,2,6,2,5,2,12,11,14,14,29,16,16,16,21,14,13,14,29,13,6,2,1,1,1,1,5,5,2,5,1,2,1,2,10,7,2,13,2,1,11,2,2,6,13,16,13,13,15,13,13,11,13,8,11,13,6,2,7,7,7,13,6,7,13,2,6,1,2,7,11,6,14,6,6,6,7,35,7,13,2,2,5,2,5,2,2,5,2,2,2,2,2,13,7,2,13,7,13,7,8,11,2,5,2,1,1,1,0,2,1,1,1,1,1,2,1,1,1,1,6,1,2,2,2,2,6,2,2,2,2,5,2,11,13,6,13,25,2,1,1,1,0,1,0,2,1,1,1,1,0,1,1,1,6,2,1,1,1,1,2,1,1,2,2,5,1,5,2,2,2,1,2,1,5,2,9,6,2,5,10,7,11,7,2,7,7,6,2,5,2,25,2,5,2,1,2,1,1,1,1,1,2,11,9,5,2,5,2,1,1,1,2,2,10,11,10,10,10,2,2,1,2,5,2,2,6,2,1,1,1,1,2,13,10,2,1,1,1,1,1,6,9,6,6,10,6,6,6,2,10,2,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,5,2,5,2,2,1,5,21,11,13,5,2,2,13,2,6,5,12,0,2,5,2,5,2,1,2,2,5,2,13,7,2,13,7,14,23,30,36,22,29,16,11,7,13,13,13,13,11,14,29,13,16,29,13,29,13,14,14,17,13,2,2,2,1,2,2,2,2,6,2,2,2,2,2,13,5,2,10,2,12,2,10,7,11,16,29,17,13,16,13,17,13,8,11,11,6,6,6,14,8,6,7,7,6,2,7,1,1,2,14,2,2,14,6,2,6,2,14,7,2,2,2,6,2,2,2,5,2,2,13,2,5,2,14,7,2,7,7,7,2,14,6,6,2,1,1,1,1,1,1,1,0,2,1,0,1,0,1,1,1,2,2,6,2,5,5,7,2,5,13,11,11,11,11,11,7,7,2,2,1,1,1,1,1,1,0,2,1,0,2,1,1,1,1,2,1,1,1,1,1,1,1,1,2,10,2,2,2,6,9,1,2,1,2,1,2,1,2,2,2,11,2,11,2,2,2,7,6,6,6,2,2,2,2,2,2,1,1,5,2,2,6,1,6,5,2,1,2,2,1,2,2,2,5,10,10,9,13,1,5,2,2,1,2,2,2,2,2,5,1,1,1,11,10,5,2,1,1,2,1,2,2,2,11,6,6,10,6,6,5,11,2,
+1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,2,5,2,2,2,2,2,6,1,10,21,13,13,2,1,6,13,21,11,2,2,0,1,11,2,2,5,1,2,2,5,11,6,5,5,11,7,30,23,34,68,11,22,17,13,11,7,6,2,21,13,11,11,14,17,21,14,36,13,21,29,14,11,2,6,1,1,2,6,1,6,1,2,2,2,5,6,5,2,13,2,14,13,12,2,2,7,16,21,14,13,11,13,13,16,13,11,13,6,6,2,7,7,13,6,7,7,6,7,1,1,7,14,2,2,14,2,2,6,2,14,13,2,5,1,2,2,2,5,2,6,5,2,2,2,2,21,13,5,7,7,2,7,6,13,2,2,2,1,1,1,0,2,0,2,0,1,1,1,1,1,2,6,1,5,2,2,2,2,5,1,2,2,2,5,2,2,13,5,2,2,1,0,1,1,0,1,0,2,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,2,5,2,2,2,1,1,5,2,2,1,2,2,5,2,7,11,6,2,6,6,5,13,6,2,2,6,2,1,2,1,1,1,2,1,6,1,1,2,1,5,2,2,5,1,1,2,2,10,10,10,10,2,5,2,1,1,2,5,2,25,2,5,2,1,1,5,10,10,2,1,2,1,1,1,2,5,9,11,6,6,6,10,6,10,11,2,
+1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,6,1,1,1,1,5,2,1,1,1,1,1,1,1,5,2,2,2,21,13,10,11,5,2,21,16,14,10,1,1,1,1,5,2,12,2,5,2,5,2,5,2,2,2,2,21,29,43,47,18,12,31,29,13,13,13,13,13,15,2,14,22,21,30,15,29,30,13,16,13,13,13,6,1,1,2,5,5,5,2,2,6,2,2,2,12,6,5,21,5,6,6,1,1,2,13,6,2,13,6,6,1,7,15,8,11,8,7,6,2,6,7,11,13,6,8,7,7,2,1,7,7,1,6,7,2,6,6,2,14,6,2,1,2,5,2,6,1,2,2,5,7,6,6,7,7,2,2,6,2,7,13,7,7,6,2,2,1,1,0,1,1,1,0,1,1,1,0,2,1,2,2,2,2,5,2,5,2,2,2,5,1,1,1,2,2,13,13,2,1,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,5,2,2,2,6,1,1,2,1,5,2,2,5,2,2,5,9,7,11,2,2,13,7,7,2,2,5,2,2,5,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,5,2,10,12,10,1,10,5,2,1,1,1,2,9,2,2,2,2,1,6,1,5,2,1,5,2,1,1,1,1,1,10,6,6,6,7,6,10,6,10,2,
+2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,5,2,2,5,2,2,6,1,2,6,2,2,2,5,10,11,13,5,5,14,21,14,26,2,2,1,1,2,13,5,2,2,1,1,2,2,2,5,1,2,11,14,30,37,34,29,11,34,14,17,21,21,16,21,21,14,22,29,16,22,21,36,22,14,15,13,14,13,6,1,2,5,2,2,2,2,5,2,5,1,5,7,11,7,13,1,5,7,2,2,2,2,7,8,11,2,2,2,13,17,11,15,11,6,2,6,13,8,11,11,7,7,7,7,1,1,7,5,2,13,2,2,7,6,1,13,2,2,1,1,2,2,7,2,13,2,2,2,2,7,2,13,2,5,2,7,13,7,7,6,2,6,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,13,5,2,2,2,2,2,2,5,1,6,2,5,2,2,13,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,1,1,1,1,1,1,2,10,2,1,1,1,1,2,1,2,2,2,6,1,6,6,7,7,2,5,11,6,13,2,2,2,5,2,2,5,1,1,1,1,5,2,2,1,1,2,2,1,2,5,1,1,2,1,25,2,2,12,6,2,5,1,1,2,2,5,2,11,6,11,2,2,10,5,2,2,1,1,2,1,1,2,2,1,11,6,6,6,6,6,5,6,2,
+2,1,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,2,2,2,5,1,2,5,2,2,11,7,10,10,10,5,2,5,11,1,1,2,2,1,5,2,2,1,2,6,2,13,2,2,6,6,21,30,45,49,34,47,13,37,21,13,21,13,7,7,16,13,14,14,29,16,29,30,13,21,14,14,14,14,2,6,2,5,2,2,5,2,2,2,2,2,13,12,1,27,2,6,7,5,2,1,1,2,2,21,6,2,6,13,17,15,15,13,11,11,6,7,11,7,14,7,13,2,5,2,6,1,2,2,2,2,5,2,2,6,2,6,2,1,1,6,2,6,13,2,2,2,2,13,1,6,7,2,2,2,2,2,7,8,7,6,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,6,1,7,13,2,2,5,1,1,2,1,2,2,2,11,13,13,1,1,2,1,1,1,1,2,0,1,1,1,1,1,1,1,1,1,2,1,2,5,1,1,1,1,1,1,1,5,2,2,2,10,1,1,6,1,1,5,2,5,2,2,2,5,11,13,1,2,10,11,6,2,6,2,2,2,6,2,5,1,2,1,2,5,1,1,2,1,1,2,5,2,1,1,2,2,2,5,2,10,10,2,2,1,1,5,11,2,10,2,11,11,5,11,10,2,2,1,2,1,5,1,1,1,5,9,6,6,2,10,11,9,6,6,2,
+2,5,2,5,5,5,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,2,5,2,7,5,5,2,2,11,5,12,13,2,2,5,2,5,2,13,1,1,5,1,5,2,2,7,2,13,22,49,45,16,45,47,21,32,2,13,11,13,13,13,21,11,29,22,30,43,29,22,12,21,14,11,13,29,1,2,2,2,5,2,1,2,5,2,5,2,13,1,12,2,5,5,2,2,2,5,1,2,11,11,13,6,2,11,17,15,15,15,7,11,6,6,11,7,7,2,6,5,2,2,1,1,2,1,2,2,2,2,6,2,2,7,2,2,1,1,2,7,6,2,5,5,13,2,2,2,6,1,6,1,6,6,14,7,6,7,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,5,2,2,2,2,2,6,2,5,1,13,11,13,13,13,2,1,0,2,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,1,1,1,1,2,2,5,2,1,1,6,1,2,6,1,2,2,2,5,2,10,7,2,5,6,7,13,11,2,2,12,2,2,2,2,2,1,1,1,6,2,1,5,1,2,1,1,2,2,2,1,5,2,12,11,2,5,6,2,5,1,1,2,2,2,5,10,10,10,6,10,5,1,2,1,2,1,1,1,1,2,1,2,11,9,6,5,2,11,6,6,2,
+10,2,5,5,9,2,1,1,1,1,1,1,1,2,1,1,5,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,10,13,10,5,5,10,10,10,1,2,6,2,2,2,5,2,5,1,2,2,5,2,11,2,2,14,30,30,29,35,45,21,43,16,5,5,30,14,13,14,14,21,37,22,34,30,29,16,21,29,14,13,16,7,2,2,2,6,2,1,2,2,2,2,2,2,7,1,2,2,2,2,2,5,2,2,2,2,7,11,13,11,6,7,17,8,15,13,7,8,6,6,6,6,6,6,2,6,7,2,1,1,1,1,1,1,6,6,2,6,2,5,2,2,1,2,5,5,7,2,2,2,12,2,6,1,7,5,2,2,7,7,6,7,13,7,6,1,1,1,0,2,1,1,1,1,0,1,1,1,1,1,2,5,2,2,2,5,2,5,1,2,2,5,2,2,2,13,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,6,1,2,1,2,2,6,1,2,2,5,2,10,1,7,11,2,6,13,7,11,6,6,6,7,12,11,2,1,2,1,1,2,2,2,6,1,2,5,2,2,5,2,10,2,2,9,25,2,13,7,10,6,2,1,1,2,26,2,2,10,11,6,13,2,2,1,5,1,1,1,1,1,2,1,2,5,9,6,6,6,6,6,6,11,2,
+2,1,1,2,5,2,5,2,2,1,1,1,1,1,1,1,1,2,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,5,10,10,1,5,5,1,2,12,1,9,2,2,5,2,5,7,2,2,2,5,2,2,5,2,6,29,22,30,30,117,36,29,30,13,7,13,22,5,14,29,16,21,30,23,43,15,21,16,17,22,11,5,13,7,6,2,5,1,2,6,6,2,2,6,2,2,6,6,2,5,2,5,2,1,2,2,5,1,2,21,13,16,11,7,22,15,29,11,6,11,6,6,6,13,6,7,13,5,7,6,0,1,1,0,2,2,7,7,6,1,2,2,5,2,1,2,2,2,13,2,2,13,7,2,2,5,6,1,2,5,7,2,14,7,11,13,1,1,2,1,1,1,1,1,1,1,1,1,0,1,0,2,2,2,2,5,2,1,2,2,6,2,1,2,5,2,11,11,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,5,2,2,2,5,1,2,5,2,2,5,2,2,2,2,6,10,6,5,2,13,6,11,7,2,11,11,2,2,2,5,1,1,2,2,5,2,2,1,1,1,2,2,2,6,13,2,5,6,2,9,1,13,9,2,2,1,6,2,9,2,2,11,2,9,2,2,6,1,2,5,2,2,1,1,5,1,2,2,2,11,6,6,5,9,7,2,5,
+1,6,5,5,10,5,2,5,10,2,1,1,1,1,1,1,1,1,5,1,1,2,5,1,2,1,2,1,1,2,1,1,2,2,5,5,1,2,2,6,5,10,2,2,10,2,2,2,5,2,2,1,2,2,2,2,2,2,7,16,47,23,70,120,22,15,7,7,6,2,16,13,13,16,22,29,16,32,22,17,16,30,29,13,6,7,7,2,2,2,2,6,2,2,11,2,6,2,1,5,6,1,2,2,2,2,2,2,2,2,1,2,2,30,13,17,7,7,18,15,13,8,11,7,11,7,13,11,11,7,2,2,5,2,1,1,1,1,2,6,6,6,2,2,2,6,2,2,6,1,6,13,2,2,26,7,2,5,2,2,2,6,2,2,6,7,6,7,8,2,2,1,1,1,0,2,1,1,1,1,1,0,1,2,1,2,14,2,6,2,2,2,1,1,2,1,6,1,2,5,7,6,1,1,1,1,1,1,1,0,2,0,1,1,1,1,1,0,1,2,1,1,1,1,1,1,5,2,1,1,1,1,2,5,2,2,2,1,2,2,2,2,6,2,5,2,2,7,5,11,2,2,11,7,6,7,2,5,6,2,2,5,2,1,2,1,6,2,2,1,2,6,1,1,6,1,7,10,7,2,2,6,5,5,10,2,5,2,1,1,2,5,2,25,6,2,2,6,1,2,1,2,1,2,1,1,1,2,1,2,6,9,6,6,9,6,2,2,7,2,
+2,2,1,2,6,1,2,6,1,2,1,1,1,1,1,1,2,1,2,1,1,1,2,5,1,2,5,1,1,1,1,1,1,1,5,2,2,10,2,5,2,5,2,12,7,13,13,2,2,13,2,1,1,5,2,12,6,2,11,29,48,120,32,16,13,7,14,11,13,13,14,15,21,22,32,13,29,30,32,29,14,21,14,13,2,21,13,1,2,5,2,1,2,2,11,2,6,2,2,2,2,2,6,1,5,2,5,2,5,2,1,2,7,29,17,21,11,13,18,13,8,7,11,7,7,13,8,11,8,11,7,6,7,1,1,1,1,1,2,7,6,2,7,6,6,13,2,1,2,7,2,21,7,1,5,2,1,6,1,5,7,6,2,6,7,7,7,6,7,2,2,1,1,1,1,1,1,0,2,1,1,1,1,2,2,5,21,2,2,2,2,6,2,5,1,2,1,1,2,2,11,11,2,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,2,1,1,2,5,2,6,1,5,2,5,2,1,2,2,6,5,6,6,2,2,13,7,11,8,6,2,2,2,5,2,2,2,1,5,1,2,2,2,5,2,1,1,2,1,5,10,11,11,2,10,2,2,2,10,2,2,2,6,5,2,6,1,2,2,2,9,7,5,1,2,5,2,1,1,1,1,6,1,5,1,11,6,9,11,1,6,2,9,2,
+1,2,5,2,2,5,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,1,1,1,1,1,1,1,5,10,7,5,12,7,2,2,2,5,5,2,2,5,2,2,2,2,2,2,2,6,5,5,7,13,14,13,13,13,13,6,13,29,13,13,7,7,7,14,36,23,22,37,47,22,14,13,13,21,13,2,7,2,6,1,2,2,5,2,5,6,6,6,6,2,5,2,5,1,6,2,1,2,2,2,1,2,5,2,29,16,16,11,16,17,15,11,8,6,6,11,8,11,13,6,6,6,6,6,1,1,1,1,1,2,7,2,2,2,2,2,7,2,2,2,6,5,11,2,2,12,2,1,2,2,7,7,5,2,1,2,7,6,7,13,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,1,5,2,5,2,2,2,5,2,1,1,11,7,13,12,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,5,2,1,5,2,2,1,2,2,2,2,2,2,1,6,5,2,5,1,2,11,2,2,2,11,11,7,6,2,1,2,5,2,2,5,2,1,1,5,2,5,2,6,1,2,1,1,2,6,11,2,13,6,2,2,5,5,6,1,11,2,2,2,2,2,9,5,2,25,2,2,2,6,1,2,1,1,2,1,2,2,2,6,2,25,9,7,2,9,2,2,11,2,
+2,5,2,1,2,2,1,5,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,2,1,2,2,12,2,2,13,2,5,2,2,5,2,9,2,2,2,5,2,2,1,5,5,2,5,7,21,21,14,14,15,7,14,13,29,14,14,21,15,21,29,16,32,18,30,47,36,29,13,21,22,17,2,13,21,2,2,2,13,2,2,2,2,11,2,2,2,2,2,2,2,6,1,2,2,2,5,2,5,1,2,2,16,29,29,14,16,23,15,11,11,6,7,7,7,7,11,6,6,7,7,2,2,1,1,1,1,2,2,2,6,2,6,7,12,2,1,2,2,7,7,2,6,1,2,1,2,6,7,2,2,2,5,6,14,7,8,13,2,2,1,1,1,1,1,1,1,1,1,1,1,0,12,0,21,2,1,2,2,2,2,2,5,2,2,2,5,11,10,13,2,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,5,2,2,1,1,2,1,10,2,10,1,10,5,2,2,2,2,2,2,6,5,1,11,2,5,6,6,7,2,6,1,2,2,2,5,2,5,1,2,1,2,2,2,2,2,5,1,1,1,2,2,10,2,2,25,2,9,2,6,9,5,2,2,2,5,2,5,2,2,2,9,2,6,1,1,5,2,1,1,5,1,2,5,2,2,2,2,2,9,5,2,10,11,11,
+2,1,1,2,5,1,1,2,1,2,1,1,1,2,1,1,1,1,2,5,1,1,1,1,1,1,2,5,1,1,2,2,2,5,5,2,2,5,2,10,2,1,1,1,2,5,1,1,1,1,1,1,1,2,2,2,14,43,13,7,13,14,29,29,14,16,13,5,7,13,13,13,21,22,29,23,32,16,29,21,16,29,14,11,7,2,6,2,7,2,2,5,2,7,2,6,6,6,1,6,2,5,2,2,6,1,6,2,2,2,2,2,13,13,16,13,6,29,17,17,8,11,8,13,6,8,7,11,7,6,7,2,6,1,1,1,1,1,2,2,6,2,6,11,6,5,6,1,2,2,21,7,6,1,6,1,1,2,2,7,7,7,6,1,7,7,13,7,13,2,0,1,2,1,1,1,1,1,1,1,1,1,1,1,1,38,2,1,6,2,5,2,1,1,2,5,2,2,10,13,11,2,2,1,1,1,1,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,2,1,5,1,2,2,2,2,5,2,5,2,2,2,2,13,5,6,7,11,6,6,2,2,2,5,10,2,2,2,2,1,1,5,2,2,5,2,2,2,1,2,5,2,5,1,5,2,2,5,2,2,2,2,5,1,9,2,1,2,2,6,10,7,2,1,1,6,1,6,1,2,1,2,2,2,1,2,25,2,9,7,2,13,13,6,36,
+2,2,5,2,1,1,1,5,5,2,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,5,2,5,2,2,5,5,13,11,2,6,13,13,5,2,2,5,2,2,2,9,2,2,2,2,1,1,2,2,11,13,36,13,5,2,14,29,22,16,29,16,29,13,14,13,16,16,13,21,29,30,29,17,16,30,13,21,11,7,6,2,2,7,11,2,2,6,2,2,6,6,6,2,6,1,2,2,2,5,2,5,2,2,2,5,2,5,7,6,13,11,11,13,22,16,11,11,7,11,6,7,6,8,11,13,6,5,2,1,0,1,1,1,2,5,2,7,7,11,6,1,2,5,2,2,2,11,2,2,2,1,2,2,5,5,7,7,2,1,7,14,6,13,7,5,60,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,1,2,5,1,2,11,10,2,13,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,5,2,2,1,2,5,2,2,6,1,2,2,2,5,2,2,5,12,6,6,11,7,11,2,2,2,6,2,2,6,1,1,1,1,1,2,5,2,2,5,2,5,2,1,2,2,11,10,2,2,2,1,2,1,5,2,2,5,2,5,2,2,11,5,10,11,1,1,2,1,1,2,1,2,6,1,1,1,5,2,2,2,5,9,2,10,11,43,74,
+5,5,2,5,5,1,1,5,5,5,1,1,1,1,1,1,1,2,6,2,2,5,1,2,1,2,11,2,2,2,6,5,14,11,13,7,16,26,15,1,2,2,2,5,2,2,1,2,2,2,1,2,1,2,13,30,16,13,6,13,30,32,43,34,29,30,30,22,29,29,22,13,30,13,21,37,45,43,14,21,14,21,11,11,8,2,2,6,6,2,2,2,5,2,6,6,6,7,2,6,2,2,6,1,2,2,2,6,1,2,1,2,7,6,7,11,11,11,18,13,15,13,6,11,6,6,13,6,6,6,6,6,1,2,1,1,1,2,6,2,2,6,6,6,2,6,2,2,2,12,11,6,2,5,1,0,1,2,2,5,13,2,6,1,7,14,7,13,11,1,0,2,1,1,1,1,1,2,1,1,0,2,1,1,1,1,1,2,5,2,1,2,2,1,1,2,5,2,2,11,13,2,1,1,1,1,1,1,2,1,1,1,0,1,2,1,1,1,2,1,1,2,1,1,1,1,5,1,1,1,1,2,1,5,2,1,2,2,5,1,1,5,2,2,1,2,6,2,2,5,12,2,9,11,6,2,2,2,6,1,2,5,2,1,5,1,1,2,2,6,2,2,1,1,2,5,5,13,2,2,5,1,5,2,2,2,2,1,2,2,2,2,5,9,6,1,9,5,1,1,1,2,1,1,1,2,5,2,2,2,5,2,9,2,2,10,6,70,205,131,
+2,5,9,2,1,1,1,2,5,2,5,2,2,1,1,1,2,14,11,2,2,2,6,1,5,5,26,2,6,10,21,7,13,13,13,21,21,14,2,1,2,6,2,2,2,2,5,1,2,2,1,1,2,11,7,30,2,13,13,11,14,36,46,30,30,30,16,29,14,29,14,13,36,2,30,36,46,30,21,13,13,16,8,21,22,2,2,7,2,6,1,2,2,6,6,7,6,6,2,2,2,5,2,5,5,2,5,2,5,2,2,5,2,2,7,7,11,8,16,13,13,11,6,13,6,7,11,11,11,6,2,6,2,2,1,0,1,2,2,2,6,7,11,6,2,2,2,6,2,5,12,2,2,1,1,1,1,2,7,7,13,7,2,2,13,13,6,7,13,6,1,0,1,0,2,1,0,0,2,1,1,1,1,1,1,1,1,2,2,2,5,2,1,1,5,1,2,5,7,6,2,2,0,1,0,1,1,1,1,1,1,0,1,0,2,1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,6,1,2,6,1,1,2,6,2,2,2,2,13,2,2,2,5,6,2,2,6,1,2,2,2,2,1,2,2,5,1,1,6,1,2,5,1,2,6,2,11,13,2,5,2,2,1,5,1,2,1,1,25,6,2,5,9,2,2,25,6,2,1,5,2,2,5,2,2,2,2,5,2,9,2,2,6,5,10,5,131,201,201,74,
+2,2,2,6,2,2,1,1,6,2,2,2,2,5,2,2,5,13,26,2,5,2,2,2,2,5,2,5,7,21,10,13,16,15,13,14,13,27,2,2,5,2,2,5,2,2,2,6,12,2,2,6,2,7,29,10,2,11,17,11,22,34,32,30,16,29,13,13,14,14,13,21,29,2,21,43,22,13,21,29,16,29,13,17,15,1,6,17,2,2,7,6,2,7,6,13,6,6,2,6,2,2,2,2,2,5,2,2,2,2,2,2,2,6,6,6,7,7,13,13,8,11,6,11,13,8,11,7,6,6,6,2,2,2,1,0,1,5,2,5,7,11,13,7,11,2,2,2,2,6,5,2,2,2,1,1,1,2,2,2,5,7,6,2,2,14,2,13,13,2,2,1,1,1,1,1,57,38,0,2,1,1,1,1,1,1,0,2,2,5,2,1,2,2,1,2,5,2,2,5,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,9,5,2,2,2,6,2,2,6,2,2,2,7,2,6,2,2,13,11,1,2,5,9,11,2,6,1,2,2,2,1,1,1,2,6,2,5,2,2,2,11,5,2,9,2,6,2,1,1,5,1,2,2,2,5,2,6,10,10,7,11,2,2,2,2,2,2,25,2,5,2,2,2,6,1,9,11,11,16,192,205,201,200,74,
+2,6,5,1,2,1,1,5,2,5,2,2,6,2,2,5,2,13,12,5,2,5,2,5,2,6,2,5,21,16,11,2,30,16,14,21,16,2,2,2,2,2,6,2,2,2,21,2,28,13,22,15,6,7,17,9,2,11,22,30,22,34,43,30,22,29,14,29,14,15,13,21,17,29,16,30,30,17,17,17,17,16,13,15,8,2,14,11,2,2,6,2,2,2,7,7,7,6,2,2,2,5,5,2,6,1,2,13,2,5,2,5,13,7,2,6,7,13,6,2,17,7,2,11,7,11,8,13,11,6,2,2,6,1,1,1,1,2,1,2,2,2,2,6,2,7,2,11,5,13,7,2,5,2,1,1,1,7,5,13,1,5,1,2,2,14,6,14,8,2,2,1,1,1,1,1,1,1,1,1,2,1,0,2,0,2,1,1,2,2,2,1,1,1,2,5,2,2,6,2,11,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,6,1,6,1,11,7,6,2,6,2,2,10,2,2,11,11,2,6,2,2,5,6,2,2,1,1,2,1,5,1,1,5,1,2,9,2,5,9,6,2,2,6,1,2,2,6,2,1,2,2,2,11,6,2,11,10,6,10,2,1,5,2,2,25,2,2,2,9,2,25,1,2,6,11,13,165,205,201,201,204,201,131,
+2,2,2,6,1,1,1,2,1,2,11,7,2,2,2,10,2,13,10,10,2,5,2,1,2,2,5,11,14,21,15,21,22,29,13,14,11,6,2,5,2,5,1,2,2,2,13,5,21,22,117,29,2,30,17,2,6,14,20,15,22,31,32,33,29,29,21,13,14,13,14,16,47,106,31,16,24,17,33,29,29,15,13,29,11,0,29,11,2,6,6,2,6,6,7,7,13,7,0,6,2,2,5,6,1,5,6,1,2,2,2,6,5,7,6,2,7,7,7,7,16,6,7,8,11,11,13,11,17,6,6,2,2,1,1,1,1,2,2,2,5,2,5,2,2,2,13,5,12,7,2,6,2,2,1,1,1,2,7,5,2,2,1,2,13,13,7,17,13,2,2,2,1,1,5,2,1,1,9,40,2,5,2,1,1,1,1,1,2,2,1,2,5,1,2,2,5,1,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,1,2,2,2,2,11,11,6,6,6,2,6,5,11,2,7,13,12,1,1,2,5,1,9,7,7,1,2,2,21,1,1,2,1,2,6,2,5,2,5,2,2,5,1,6,2,5,1,1,2,6,2,11,2,5,11,10,5,10,6,1,2,2,5,2,2,2,5,2,2,5,2,2,9,11,13,13,205,201,201,204,201,201,74,
+2,5,1,1,6,2,1,5,2,7,13,11,2,5,7,29,14,15,13,21,13,5,5,2,6,1,2,5,7,21,21,29,22,22,13,29,7,2,2,2,2,2,6,2,2,12,7,21,12,29,130,18,15,120,6,6,1,14,22,18,22,122,37,29,16,16,13,14,13,15,47,106,43,18,15,24,24,29,33,18,30,22,11,8,8,1,16,7,1,11,2,2,2,7,6,7,13,2,2,2,5,2,2,2,12,7,2,13,2,5,7,2,13,7,6,6,7,13,8,6,16,6,13,17,13,11,11,11,11,11,6,6,2,0,1,1,1,1,1,5,2,2,2,2,6,1,14,6,2,2,1,2,2,6,1,1,2,7,7,2,2,13,1,5,13,14,7,7,13,2,2,7,5,5,65,7,2,2,1,9,9,51,9,10,59,1,2,1,2,1,5,2,1,2,5,2,2,5,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,5,2,5,2,11,2,10,6,6,7,11,6,2,2,7,11,11,10,2,2,2,5,2,6,2,10,5,2,2,25,51,11,1,1,5,2,2,5,2,12,2,5,2,2,6,1,2,2,6,1,6,1,2,25,2,11,6,2,9,11,5,2,2,26,38,64,10,5,2,5,2,2,9,5,6,26,8,130,205,204,201,201,200,201,74,
+2,1,1,6,1,1,1,2,5,10,7,12,5,2,12,21,14,14,14,13,13,10,10,12,1,5,6,5,12,21,13,16,29,22,13,29,2,2,2,5,2,2,14,14,13,2,12,16,29,36,47,37,106,33,11,2,2,21,22,30,18,132,24,33,30,22,29,13,29,47,46,17,109,33,22,33,33,17,33,33,30,17,13,15,11,6,16,11,2,2,2,6,2,13,7,13,7,2,2,2,5,2,5,2,6,7,2,2,2,2,13,1,7,6,2,7,13,7,11,13,6,6,7,11,11,17,13,8,8,11,11,2,6,1,1,2,1,2,2,2,2,2,2,7,2,13,2,2,2,1,1,2,2,2,1,1,2,2,6,1,6,2,2,13,13,6,6,13,7,2,12,2,2,1,71,72,40,1,1,2,2,2,5,57,27,1,1,2,6,2,2,2,5,2,2,6,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,11,2,11,6,8,11,6,2,6,6,5,12,1,6,1,2,2,2,10,2,13,11,1,2,2,5,2,5,2,2,2,5,2,5,2,2,5,2,5,2,2,5,2,2,2,2,5,2,2,9,2,11,1,10,2,2,5,2,9,2,2,2,9,2,9,2,5,10,2,12,8,166,206,200,201,204,204,201,201,69,
+2,6,1,2,1,1,1,2,13,13,13,5,2,2,16,29,26,2,21,15,12,10,5,12,10,5,2,12,21,29,13,13,16,22,29,13,1,6,2,2,2,13,13,2,2,2,13,21,13,23,43,31,31,11,8,6,6,6,16,21,29,47,46,24,31,21,22,11,34,47,31,31,46,105,29,46,18,31,33,18,30,17,11,17,8,2,14,11,2,6,6,1,7,6,11,13,7,6,6,1,2,2,2,2,5,2,5,6,2,6,2,2,2,6,6,6,7,11,11,13,13,11,7,11,17,11,11,8,7,7,6,2,6,2,1,2,1,2,2,2,2,12,6,7,2,2,2,6,2,1,0,2,2,5,1,1,2,5,2,6,1,2,1,2,6,6,7,7,13,2,1,2,1,64,40,5,9,1,1,1,40,25,38,6,1,0,1,1,2,1,2,6,2,2,5,2,5,1,2,1,5,1,2,2,5,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,5,2,1,5,2,6,6,6,7,11,11,13,7,6,6,2,11,2,6,1,2,2,2,5,1,13,11,2,2,2,6,2,2,1,2,5,2,2,2,2,5,12,7,2,12,1,5,2,5,2,5,2,2,2,11,2,11,10,9,10,5,2,2,2,6,1,5,2,2,6,2,5,2,9,9,21,176,205,201,201,201,201,201,201,204,131,
+2,2,1,5,1,2,2,10,13,14,13,2,2,13,21,12,12,2,14,21,6,2,7,10,5,13,7,16,13,14,13,13,16,24,16,13,6,1,5,2,2,2,7,2,13,7,11,14,21,36,30,18,13,6,11,2,2,11,16,22,30,34,109,110,109,31,8,32,123,31,24,18,31,33,33,113,44,8,33,18,31,30,13,15,11,2,29,2,2,2,7,13,5,2,7,11,13,2,2,2,2,6,1,6,1,6,2,6,2,7,6,6,12,2,11,7,6,13,11,11,29,7,13,11,17,11,11,11,11,11,6,7,2,2,6,2,1,5,1,2,7,13,11,5,1,1,1,2,7,2,1,1,2,2,1,1,2,2,2,1,1,5,2,13,7,6,7,7,7,6,1,6,25,9,2,2,1,1,1,5,27,60,1,1,1,1,1,1,1,2,1,2,2,9,51,2,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,6,2,11,2,2,7,6,11,8,11,6,10,11,7,6,2,2,5,1,2,5,2,11,11,7,6,6,5,2,2,1,6,2,9,2,5,9,25,9,1,2,13,10,6,2,2,2,1,2,5,2,5,2,2,10,12,10,2,2,2,13,26,2,6,2,5,0,2,2,2,9,13,2,121,205,198,204,201,198,201,204,201,198,74,
+2,5,2,2,1,2,6,7,13,11,11,7,5,5,10,13,12,2,13,11,2,7,7,6,2,13,13,7,11,6,7,13,13,17,29,6,2,2,6,2,5,2,11,2,13,16,10,12,16,13,36,17,11,11,6,11,29,22,17,13,13,22,34,110,114,24,30,34,20,24,20,18,106,33,33,33,18,13,109,24,33,18,11,15,6,11,14,2,6,6,7,6,6,7,13,13,7,2,2,2,5,1,5,7,11,7,7,7,2,11,2,7,11,2,13,2,11,11,11,8,8,11,11,13,21,28,17,13,7,13,11,6,2,6,1,2,2,2,2,5,7,7,7,2,1,1,2,7,2,2,1,1,2,6,1,1,2,5,2,2,1,2,7,6,13,6,7,7,13,1,5,2,2,2,1,2,2,1,1,2,1,27,40,2,1,1,1,1,1,2,6,1,6,1,2,2,1,1,1,1,2,2,2,5,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,1,1,2,2,6,1,2,2,11,6,6,11,13,8,11,6,2,12,11,7,6,1,2,2,2,2,2,13,11,11,1,9,2,5,2,5,1,9,2,25,7,2,2,5,9,10,10,5,2,5,2,5,1,1,1,1,2,2,11,2,2,6,1,2,5,10,1,2,2,51,76,91,40,2,2,9,2,29,206,201,200,201,198,204,201,204,204,201,74,
+2,1,2,6,1,6,1,10,11,13,7,13,5,2,5,13,2,2,21,13,6,6,7,11,6,7,6,2,2,6,7,6,14,36,11,6,6,2,2,2,2,2,7,7,21,16,2,7,12,30,130,8,13,6,16,21,13,29,14,29,14,30,34,109,122,22,17,46,33,33,18,33,33,24,24,24,17,11,110,24,24,18,13,15,13,16,13,11,2,6,7,7,7,6,7,7,2,6,2,2,6,2,5,5,2,7,7,6,6,7,11,13,6,2,2,2,11,13,11,7,13,6,13,16,13,29,29,13,17,11,11,6,6,2,5,2,5,1,2,2,5,6,1,1,1,1,2,6,13,1,1,2,5,2,1,1,2,1,1,1,1,1,2,7,11,7,6,6,2,2,2,2,2,1,2,26,5,1,1,1,1,5,9,0,1,1,1,1,1,1,1,7,2,5,1,2,2,1,1,1,1,1,2,2,2,9,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,2,1,2,1,10,1,2,5,2,6,11,2,7,11,6,11,11,2,11,7,11,11,6,6,2,2,2,10,11,13,11,6,2,5,9,2,1,2,5,5,5,9,5,9,2,5,2,25,2,11,2,2,9,2,2,2,5,2,2,9,11,2,2,2,5,2,2,9,11,5,2,2,12,2,6,10,12,35,67,192,204,204,200,198,204,201,198,200,200,201,74,
+2,6,1,2,6,1,5,11,5,10,13,13,11,11,5,2,2,13,13,13,11,11,13,8,7,7,2,6,6,2,6,13,16,16,21,7,2,2,5,2,5,2,2,13,16,30,30,17,29,22,47,17,8,13,116,16,21,22,14,30,11,16,43,110,132,18,43,108,18,24,24,33,24,109,33,24,11,11,114,33,24,44,7,18,22,17,11,2,2,11,6,6,2,13,7,13,6,2,7,2,2,2,2,2,5,6,1,2,2,5,2,13,2,2,6,12,11,14,11,13,17,1,13,22,13,30,16,7,21,13,11,7,2,2,1,2,2,1,2,14,35,1,0,1,1,1,2,7,2,2,1,2,2,2,1,0,1,1,2,1,1,2,2,13,6,2,7,2,6,2,6,2,2,5,2,2,1,1,1,1,2,1,1,1,1,1,1,60,131,13,13,2,2,2,2,2,1,1,1,1,1,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,1,5,1,2,1,1,2,1,1,1,1,1,1,2,5,2,1,2,2,6,1,2,13,11,2,11,13,11,8,11,7,7,11,10,11,2,6,2,2,13,11,5,2,2,11,10,2,2,5,1,2,9,5,2,5,9,2,25,2,2,2,5,2,6,2,2,2,5,1,2,5,5,6,1,2,2,6,1,5,2,5,9,2,25,2,2,2,2,11,192,206,204,200,200,200,199,199,200,198,200,200,195,200,74,
+2,2,5,2,2,2,5,10,7,13,7,13,17,21,11,2,2,2,21,11,11,13,6,11,6,8,2,6,7,13,13,14,17,30,13,6,6,2,2,2,2,2,12,13,30,47,47,34,36,119,114,8,13,20,20,13,13,11,16,13,14,29,16,24,20,15,22,108,20,33,18,111,109,109,20,31,13,6,109,24,33,18,11,29,18,14,13,2,7,7,7,13,7,7,13,7,2,13,2,2,6,2,13,5,7,12,12,13,2,2,2,11,2,2,2,2,11,15,13,13,11,2,16,16,13,16,29,6,16,8,7,6,6,2,2,6,1,1,2,16,12,1,1,1,1,0,2,7,6,1,0,1,5,2,2,1,1,1,1,1,1,1,2,7,7,13,6,6,1,2,2,2,5,2,2,1,1,1,1,2,6,0,1,1,1,1,2,9,11,1,2,2,6,2,1,1,1,1,1,1,1,1,2,2,5,2,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,2,5,2,9,6,6,7,2,6,11,11,7,7,7,11,2,10,2,13,2,2,2,1,2,2,6,2,11,5,7,5,9,2,5,9,9,5,9,2,5,2,2,5,2,9,5,10,1,2,6,2,2,6,9,2,5,5,78,7,11,1,2,6,2,9,2,5,11,51,7,2,11,166,201,198,200,198,196,199,199,199,199,196,199,195,196,199,131,
+2,5,2,2,5,2,2,10,21,11,7,13,13,21,6,1,5,13,13,7,7,11,7,11,17,6,2,13,13,14,13,13,22,16,11,6,2,2,5,2,2,5,14,45,117,119,119,32,47,47,125,29,11,24,114,26,6,7,13,7,22,16,16,45,122,18,22,111,33,109,24,114,111,109,31,18,11,11,114,24,37,18,11,33,33,11,13,2,11,7,13,7,6,13,21,11,2,7,2,7,2,2,2,13,11,13,2,2,2,5,2,5,2,5,2,7,17,11,11,7,13,1,13,17,11,21,17,6,17,11,11,6,2,1,2,2,1,1,2,10,7,2,2,1,1,1,2,7,2,2,1,1,2,2,1,1,1,1,1,2,1,1,2,2,6,7,7,2,2,12,1,26,10,1,1,1,1,1,1,1,25,26,2,1,1,2,1,1,5,2,2,11,2,2,2,9,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,5,2,1,2,1,2,2,2,2,10,6,2,11,11,6,11,8,11,13,11,6,7,7,2,11,1,1,1,11,2,2,5,9,2,2,5,2,2,9,2,2,2,2,2,6,2,2,2,2,10,2,11,2,2,2,2,2,2,1,12,69,200,65,74,70,5,1,9,2,10,13,60,35,64,78,188,204,204,200,200,200,198,200,196,195,200,199,199,198,199,200,74,
+2,1,5,2,2,5,5,13,11,13,5,7,13,7,2,2,13,12,7,13,13,11,8,8,7,11,2,13,6,11,13,22,31,17,11,6,6,2,2,2,2,2,29,106,32,30,34,30,117,140,123,19,8,34,105,1,11,6,29,29,30,24,30,45,34,11,22,106,33,33,24,118,114,109,33,18,13,11,114,108,109,16,13,46,18,11,21,2,6,11,7,7,13,17,16,2,11,2,2,13,17,6,5,26,2,5,2,6,2,2,7,2,2,2,11,13,13,13,7,13,6,1,7,13,16,13,16,11,13,11,13,2,6,2,2,5,1,1,2,22,7,6,0,1,1,1,2,7,6,2,1,2,1,1,1,1,1,1,2,1,1,1,2,7,6,6,6,2,2,2,1,21,1,1,1,1,1,1,0,1,2,1,1,1,1,5,2,2,2,2,5,2,2,5,2,2,1,1,1,1,1,2,1,1,1,2,2,5,1,1,1,1,1,1,2,1,1,2,1,1,1,2,1,1,1,1,1,1,2,1,5,2,2,5,2,2,6,6,6,6,6,7,7,7,11,11,13,11,5,2,12,10,2,1,1,5,1,9,9,2,5,2,5,2,2,6,2,5,11,2,2,2,2,2,2,6,6,2,2,11,2,2,11,2,6,6,134,204,200,204,196,190,134,1,13,29,5,11,192,131,200,204,204,204,198,201,198,200,203,199,196,179,200,179,200,179,199,198,179,74,
+2,1,2,5,10,2,10,10,7,13,10,7,21,11,2,6,5,13,6,11,13,13,11,13,11,17,2,7,7,7,29,24,24,16,11,13,2,2,2,6,2,11,22,29,22,30,47,36,45,147,125,31,8,136,33,11,2,6,11,13,16,16,13,33,106,32,43,110,33,33,24,111,114,111,24,15,11,15,118,33,110,11,29,34,109,13,2,2,11,11,11,13,14,22,13,7,6,2,6,21,29,13,13,2,2,2,5,2,5,2,6,2,5,2,11,13,13,11,11,13,2,1,11,13,16,21,29,7,11,11,11,6,2,2,6,1,1,1,12,14,6,2,1,1,1,1,2,6,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,6,7,2,2,6,1,26,10,12,10,1,1,1,1,1,1,5,2,1,1,2,2,2,2,6,1,2,2,2,10,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,1,2,1,2,1,6,1,5,2,2,11,11,6,6,6,6,6,7,13,11,7,6,10,10,2,2,1,1,2,9,5,5,2,6,9,2,9,2,2,2,2,2,11,2,6,43,67,155,78,28,13,167,67,16,7,13,22,50,198,200,200,199,199,195,200,204,178,204,201,30,175,204,201,198,204,199,200,200,200,200,200,200,198,198,199,194,198,179,198,202,194,198,157,
+2,2,6,2,2,2,2,5,12,11,13,13,13,11,5,2,5,2,6,11,13,11,7,13,11,11,2,7,11,17,29,30,24,11,7,7,6,2,2,2,7,23,16,16,22,36,45,30,116,145,109,18,16,18,24,11,2,2,13,29,13,22,30,47,119,32,36,34,33,109,109,114,111,109,32,17,13,13,111,20,110,13,18,109,20,11,2,1,11,15,15,10,16,24,13,13,6,2,6,13,16,21,14,2,6,12,2,2,2,5,1,2,2,2,13,13,7,11,14,17,2,1,7,15,17,16,13,11,11,11,11,11,2,6,1,2,1,1,14,11,2,5,0,1,1,1,2,2,2,2,41,2,2,6,1,1,2,1,1,1,1,1,1,2,11,7,35,40,2,60,67,2,10,2,1,1,2,1,1,1,1,2,2,1,2,6,9,2,2,11,6,2,2,2,2,2,0,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,2,2,6,1,2,2,2,11,6,6,11,8,11,11,13,2,2,10,11,2,2,1,1,2,5,2,5,2,2,2,5,5,2,2,5,6,65,78,65,167,199,179,177,199,194,170,202,198,195,176,195,199,203,179,198,179,200,198,179,200,195,199,200,200,200,204,196,200,200,198,200,198,204,200,200,198,200,199,199,198,198,194,198,198,198,198,179,74,
+1,1,2,2,5,2,6,5,13,14,13,10,11,13,2,2,11,2,11,7,11,7,13,11,13,13,2,11,11,14,32,33,29,110,105,15,2,2,6,7,16,29,16,17,22,22,22,34,126,146,114,18,8,8,24,8,11,6,6,14,29,16,13,34,34,46,17,34,33,24,33,118,114,108,109,15,2,7,122,111,111,11,22,22,24,11,6,0,13,11,15,15,22,22,13,6,2,2,13,13,13,29,7,2,2,2,5,6,2,2,5,2,2,13,7,7,29,17,29,21,2,2,13,16,16,14,13,13,8,13,13,11,2,1,2,6,1,1,13,7,2,2,1,1,1,1,2,13,6,0,2,1,6,1,2,0,2,0,2,2,2,2,2,11,2,21,38,6,1,40,51,6,2,1,1,1,1,1,1,1,2,1,1,2,1,2,2,6,1,5,6,11,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,5,1,1,1,1,1,1,1,1,1,1,1,2,2,2,6,2,5,2,2,5,2,6,6,6,7,11,11,11,8,2,11,11,13,2,11,2,1,5,2,2,2,2,2,2,29,175,7,66,190,75,2,169,179,194,169,171,194,173,171,194,194,194,173,179,194,173,179,194,179,179,198,198,179,198,198,179,196,199,199,199,200,198,200,199,200,200,203,200,198,200,202,196,198,179,198,179,198,198,179,198,177,179,131,
+1,1,5,2,2,5,11,6,7,13,7,11,7,10,6,5,7,2,2,11,7,7,13,13,7,7,2,13,11,16,34,36,46,119,116,11,6,2,6,29,16,30,16,22,11,106,110,114,126,150,115,8,8,22,19,31,31,2,16,30,30,32,22,22,37,109,14,33,31,33,109,111,111,109,111,11,11,29,111,122,109,6,6,110,111,11,0,2,11,16,15,22,30,13,21,11,6,6,7,14,22,30,2,5,5,5,7,2,2,2,6,2,5,13,13,14,17,29,29,14,5,1,2,13,13,29,14,13,15,13,11,6,6,2,6,1,1,1,14,13,1,1,1,1,1,2,6,5,2,6,2,2,2,64,76,1,1,1,1,1,1,1,2,11,2,12,2,2,72,12,9,1,2,1,1,1,1,1,1,1,1,9,5,2,2,5,2,2,6,6,7,2,5,2,2,5,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,2,2,2,6,1,6,6,11,6,6,11,6,7,7,2,6,8,11,13,6,2,2,2,2,2,6,2,6,21,168,179,168,173,179,158,66,177,173,171,171,177,169,194,177,179,179,177,194,173,194,179,179,179,194,179,198,179,202,195,179,200,198,199,179,199,199,200,199,196,198,200,200,196,199,199,195,198,198,198,198,198,202,179,198,179,198,179,74,
+1,1,2,2,6,1,11,6,13,13,13,11,7,7,2,10,11,6,2,13,13,13,13,11,13,7,2,7,14,18,37,22,110,132,120,11,2,13,16,34,18,37,29,23,106,138,106,136,138,146,113,6,13,20,15,24,122,6,22,18,29,29,22,29,34,33,14,17,31,34,114,114,116,106,111,29,3,29,109,125,109,6,14,126,117,13,2,0,11,17,22,16,11,7,11,2,2,2,13,16,30,30,2,2,5,5,5,12,2,5,2,2,13,11,7,14,23,29,16,2,2,5,2,13,15,14,17,13,17,5,11,13,7,6,1,2,1,2,13,1,2,1,1,1,2,2,2,13,6,2,2,2,5,1,1,1,2,1,1,1,1,1,7,13,2,6,2,2,5,1,2,5,1,5,1,1,1,1,1,1,1,1,2,5,2,2,2,1,2,10,10,13,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,6,1,2,1,1,1,1,1,1,2,6,1,5,2,5,2,2,2,2,11,11,11,6,11,6,11,6,6,7,6,2,6,5,2,2,1,6,5,2,11,2,155,171,162,194,171,168,177,177,171,169,194,168,168,171,177,169,194,171,177,194,194,177,194,194,173,179,198,194,195,179,198,198,179,196,198,199,198,179,198,199,200,199,199,200,198,200,196,199,195,198,198,179,198,179,199,179,198,179,194,74,
+1,2,2,5,2,2,10,6,13,11,10,5,11,5,2,13,13,2,11,13,7,13,7,14,21,7,2,13,16,22,46,16,46,126,106,6,2,7,7,29,16,32,15,132,119,126,124,144,140,152,19,6,8,19,22,18,21,2,29,22,22,30,17,14,30,24,13,17,110,109,109,111,109,109,109,15,11,13,108,132,116,6,110,126,122,13,2,11,14,22,45,2,5,13,2,13,2,7,13,29,32,21,1,2,6,2,2,2,2,2,2,2,21,7,13,29,16,23,2,1,2,2,2,13,13,13,14,11,11,8,13,13,6,2,2,6,2,2,2,5,6,1,1,1,2,5,2,13,7,6,1,2,7,6,2,5,5,1,1,1,1,2,13,11,2,2,2,2,1,1,2,9,2,1,1,1,1,1,1,1,1,2,1,2,10,5,5,2,2,10,7,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,5,1,2,1,1,1,1,5,2,1,2,2,6,1,2,5,2,5,2,6,2,13,6,11,13,11,11,11,2,2,13,2,2,2,6,6,2,2,11,66,171,194,162,168,169,194,171,171,171,177,168,171,171,171,175,171,169,194,168,173,168,171,179,194,194,179,198,179,194,198,179,202,195,194,198,198,179,198,202,179,198,200,199,199,199,199,199,199,198,199,179,202,198,198,179,198,202,179,179,74,
+1,5,2,2,1,2,5,5,10,11,7,10,7,5,5,21,11,2,5,13,13,13,14,13,13,7,6,13,14,32,43,17,48,106,33,11,6,13,11,30,29,16,8,106,132,138,149,140,138,153,19,6,8,126,114,33,11,2,7,16,36,17,29,22,34,15,22,22,34,33,109,114,119,33,24,8,6,13,109,109,44,2,119,123,114,17,29,2,21,30,11,1,2,7,6,7,7,12,13,21,32,11,2,2,2,2,6,2,11,2,6,5,7,7,7,29,22,16,0,2,2,2,11,13,13,17,13,8,6,14,11,13,6,1,6,1,7,2,13,2,2,1,1,1,2,2,2,14,7,2,1,2,13,1,1,2,6,2,5,2,1,1,11,7,11,6,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,2,5,2,2,5,2,11,6,2,2,6,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,6,1,5,2,2,2,6,2,2,2,2,11,7,7,7,6,14,11,6,6,2,6,1,2,6,11,11,6,6,6,42,194,169,168,162,171,162,168,162,168,171,173,169,171,168,171,171,162,168,168,171,194,168,194,168,169,179,177,179,179,198,198,179,198,179,195,179,179,198,195,194,179,195,179,202,195,202,179,200,195,198,198,198,179,199,179,198,198,179,179,179,69,
+1,2,2,5,1,1,2,5,12,11,7,10,13,2,5,13,11,11,2,14,13,13,13,13,7,5,2,13,29,36,22,16,18,119,120,11,7,7,7,34,11,17,29,119,123,125,140,138,140,148,4,13,15,126,33,13,13,29,14,29,32,29,13,13,32,11,13,24,110,106,106,114,116,110,18,13,6,15,111,132,18,11,116,119,111,15,29,6,6,13,11,2,2,2,2,5,13,7,11,30,30,2,12,2,5,5,1,2,21,2,2,2,13,13,14,30,30,29,1,1,1,2,12,11,8,13,11,13,13,13,11,13,2,2,2,5,2,13,6,2,2,2,1,1,2,5,5,6,7,6,2,2,2,2,6,1,2,7,7,6,1,2,5,11,2,2,6,1,1,1,1,1,1,1,1,2,5,1,1,1,1,2,1,2,2,2,5,2,2,9,6,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,2,6,1,2,1,5,1,5,2,2,11,2,11,2,10,10,13,10,7,11,1,2,2,6,11,11,11,11,2,69,169,162,162,167,169,169,168,171,175,169,171,168,168,171,171,162,169,168,168,168,168,169,168,171,194,177,175,171,177,179,179,195,202,179,198,179,179,179,198,179,179,198,198,198,179,198,198,198,177,198,194,179,179,198,179,198,198,179,198,179,194,74,
+1,2,6,6,1,6,5,10,2,2,5,11,5,2,13,13,13,11,6,13,14,14,16,16,13,29,7,16,16,33,13,13,22,106,119,15,7,11,13,22,7,17,22,133,116,116,137,144,139,150,8,13,16,122,29,11,13,16,16,16,16,13,5,6,109,6,7,34,110,116,34,123,106,111,24,11,6,15,111,141,8,13,122,122,116,22,18,2,6,13,6,2,2,5,2,5,2,10,16,43,6,7,6,2,2,2,6,2,12,2,6,5,14,7,16,30,23,13,2,1,2,1,2,13,11,11,16,6,13,13,11,13,6,1,2,2,2,5,2,7,1,1,2,6,2,2,11,6,2,2,5,2,11,2,1,13,5,11,13,6,2,6,2,21,36,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,5,5,11,2,2,2,10,6,7,2,1,1,1,1,1,1,1,1,26,5,1,1,1,1,1,1,1,1,5,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,2,5,2,2,6,2,2,5,2,10,10,5,11,13,13,6,5,10,2,11,11,11,15,11,2,6,66,169,166,162,169,162,168,162,169,162,162,162,171,171,168,168,169,168,168,168,177,162,168,168,177,162,171,171,169,177,194,194,177,177,179,202,179,179,179,179,177,198,202,179,177,199,179,198,179,179,179,179,179,179,179,173,195,179,195,202,179,179,177,74,
+1,2,2,11,5,1,2,7,2,5,2,5,2,5,21,13,13,13,13,11,13,13,13,13,11,13,6,14,22,32,8,11,22,106,114,15,13,2,16,22,11,15,119,141,110,106,144,138,128,150,4,11,24,24,6,16,16,29,13,13,13,6,6,7,114,2,29,37,110,106,106,123,116,46,8,13,6,17,118,138,6,13,122,122,120,20,15,2,2,13,6,2,2,2,2,2,2,13,6,11,13,6,2,2,2,5,2,2,13,2,2,2,14,7,14,29,30,13,2,1,2,2,2,21,13,29,16,13,14,8,7,13,2,2,2,6,5,2,13,1,1,1,1,2,2,2,12,2,11,2,2,12,2,2,5,11,2,12,11,7,6,2,2,35,30,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,5,2,2,2,11,2,12,2,11,6,7,2,6,1,1,1,1,1,1,2,1,2,6,9,2,1,1,1,1,1,1,2,2,1,2,5,1,1,1,1,1,1,1,1,1,1,5,2,1,6,1,1,2,2,6,5,7,6,2,6,7,17,13,2,9,2,7,10,13,13,11,6,66,159,169,162,169,162,162,162,162,162,162,162,169,168,168,168,169,168,168,168,169,162,168,168,168,168,168,169,168,168,194,162,171,171,194,179,194,179,179,194,173,198,194,173,194,179,198,194,194,179,194,179,179,202,179,177,194,179,173,179,179,202,194,179,171,74,
+1,2,5,2,2,2,6,5,5,2,1,2,10,12,11,11,13,13,17,11,11,11,13,13,6,11,2,29,16,33,13,13,33,116,116,31,17,6,22,16,7,37,144,139,110,117,141,127,138,150,4,6,17,24,11,22,16,7,13,13,7,6,2,14,111,2,34,109,47,122,33,47,116,22,17,6,2,22,116,126,1,22,122,122,116,33,7,11,2,6,6,2,6,2,2,6,2,13,13,13,13,2,7,2,5,2,2,2,13,2,2,6,2,6,7,13,22,11,6,1,2,1,2,15,13,11,7,6,13,13,13,11,2,2,5,1,2,2,13,2,1,1,2,5,2,5,2,6,2,6,7,6,2,2,6,5,6,7,13,13,7,7,13,7,2,2,5,2,1,1,1,1,1,1,1,5,2,1,1,1,1,2,2,2,6,2,5,2,7,6,7,6,11,6,6,0,6,1,1,1,1,1,1,1,2,51,2,1,1,1,1,1,5,2,5,2,1,2,2,2,1,2,1,1,1,1,1,2,1,2,2,2,2,6,1,5,1,2,2,2,6,6,21,16,11,10,5,9,11,1,13,10,13,42,168,162,162,162,167,169,168,162,167,169,169,167,168,162,162,162,168,162,168,162,171,162,171,162,168,168,162,162,171,171,162,168,171,171,177,171,177,194,194,177,194,179,179,194,173,179,177,179,179,173,194,179,194,177,194,173,179,177,179,179,179,194,179,169,173,74,
+1,1,2,2,5,2,2,5,2,2,6,1,2,2,2,5,11,13,22,11,6,8,11,8,11,13,7,29,16,30,11,15,44,122,122,106,17,7,46,17,16,133,139,149,106,132,144,138,138,153,113,19,22,44,17,21,13,13,13,13,6,2,2,13,110,2,36,22,106,34,33,31,114,11,6,6,6,18,106,106,2,114,126,126,122,108,6,2,2,2,7,6,2,2,2,2,11,7,14,14,13,2,6,2,2,2,2,5,7,13,1,7,6,14,13,17,22,7,2,2,2,5,7,6,6,2,6,11,13,11,13,7,1,2,2,13,1,7,7,6,1,1,2,2,6,11,11,6,2,7,5,2,5,1,5,7,2,11,13,13,7,13,6,7,6,2,2,1,2,2,1,1,1,1,2,2,1,1,1,1,2,5,2,2,5,2,10,11,6,7,8,11,11,6,2,2,2,1,5,2,2,1,1,1,1,1,1,2,1,1,1,1,2,1,2,2,2,5,2,2,5,1,2,1,1,1,1,1,2,5,2,5,2,2,2,6,2,5,11,2,6,11,14,15,13,2,5,11,11,5,15,13,15,69,162,162,162,162,162,169,162,162,162,162,171,162,168,162,168,162,162,168,162,162,162,168,162,168,168,162,162,171,162,171,169,194,160,171,162,194,171,177,171,194,169,179,194,177,179,194,194,173,173,194,179,179,171,179,171,179,177,194,173,179,179,179,173,171,171,74,
+2,5,2,5,10,27,21,7,2,5,2,6,2,5,2,2,13,11,16,11,6,13,13,13,13,11,6,17,16,22,13,17,34,119,120,111,17,6,109,18,30,130,144,133,119,132,144,149,142,150,115,147,113,13,13,13,13,16,29,14,7,6,6,22,8,13,116,24,116,110,46,139,108,8,13,2,15,18,46,6,11,123,138,132,123,109,11,6,6,6,11,6,2,6,6,2,11,7,17,15,13,2,2,6,2,13,2,2,7,6,6,2,6,7,7,22,32,6,2,2,1,2,2,7,2,6,11,13,11,7,13,6,1,2,6,2,5,11,7,2,1,2,2,2,13,13,14,8,2,7,6,2,2,2,5,2,13,13,11,13,11,11,14,2,5,2,2,5,2,5,1,1,2,1,1,1,1,1,2,1,2,1,5,2,2,7,13,11,11,13,11,11,17,6,2,6,1,1,1,0,2,1,6,0,1,1,2,51,2,0,1,1,2,6,1,5,1,1,1,2,2,5,1,2,1,1,1,1,1,2,2,2,2,5,2,2,2,2,9,13,6,14,13,21,26,10,27,11,11,6,11,49,166,169,162,159,162,162,162,162,162,168,169,162,168,168,160,175,169,162,168,162,162,168,162,168,162,169,162,168,168,162,171,162,194,162,194,171,177,162,168,171,169,194,171,173,177,171,177,171,179,179,177,194,179,179,194,179,177,179,179,194,173,179,173,171,177,171,162,74,
+2,2,5,2,5,5,1,5,5,11,1,1,2,2,6,2,11,13,29,15,11,15,15,13,11,11,6,16,29,16,8,22,36,116,123,122,8,11,119,122,37,133,149,137,133,132,132,136,149,150,113,150,115,6,11,11,17,16,13,7,6,1,6,18,2,32,111,46,119,138,34,133,105,13,18,6,29,24,15,2,14,144,136,116,126,111,15,6,11,1,13,11,2,2,11,7,13,11,23,17,11,2,2,2,7,2,2,2,13,7,6,7,2,7,13,22,17,6,2,2,1,2,7,2,2,13,7,13,13,11,13,2,2,2,13,2,2,13,6,2,2,2,2,6,7,13,6,14,7,6,2,2,2,2,5,6,7,13,13,11,11,7,11,2,2,6,2,2,1,2,1,1,1,2,1,1,1,1,1,1,1,2,2,5,11,11,11,11,6,11,13,11,8,11,2,2,2,2,72,72,73,27,38,10,1,1,2,27,25,10,1,1,1,2,2,2,6,2,5,2,6,1,1,1,1,1,1,1,2,6,1,5,2,2,2,11,11,10,11,2,21,7,13,7,10,5,10,11,40,155,168,168,162,159,162,162,169,159,162,162,168,162,168,168,168,162,171,169,162,162,168,169,162,162,168,168,168,168,168,168,162,171,162,168,162,168,169,169,162,171,162,167,168,168,168,171,168,168,171,169,171,179,177,194,173,169,179,173,194,169,173,179,194,179,194,173,194,173,162,74,
+5,1,1,2,5,2,6,10,7,13,2,1,5,2,2,2,2,13,17,22,6,11,15,13,11,11,6,16,17,17,6,33,109,132,116,125,17,6,123,122,116,132,130,133,126,126,133,144,150,153,115,150,114,2,6,6,7,7,6,2,6,6,2,7,2,106,22,114,132,123,34,122,114,33,33,2,33,109,15,2,22,138,140,150,126,29,8,2,2,2,11,11,2,2,5,11,13,13,21,2,2,2,6,2,7,2,6,2,1,11,2,6,5,7,13,22,11,11,6,1,2,2,6,7,12,2,6,13,13,13,13,6,6,7,5,2,2,2,12,2,1,2,7,7,7,6,13,7,7,13,2,5,1,1,12,6,7,11,13,7,6,11,6,2,5,2,2,5,2,2,5,2,1,1,1,1,1,1,1,1,2,5,2,2,2,13,11,11,6,13,11,17,15,11,6,2,5,1,9,25,9,38,51,38,51,10,1,9,25,9,1,5,2,2,1,5,2,2,2,2,2,2,1,1,2,1,1,2,5,2,2,2,5,2,2,11,10,7,11,2,11,13,10,10,28,11,17,43,169,162,160,162,162,162,162,162,160,169,162,162,162,162,167,169,169,162,162,162,168,168,169,169,169,169,169,169,168,168,168,168,162,169,162,162,169,162,167,169,169,162,171,162,162,162,168,169,162,168,169,173,162,173,179,177,194,194,171,177,171,177,194,169,179,173,179,171,173,171,168,74,
+2,6,2,5,5,1,2,5,5,2,1,2,2,5,2,5,6,13,22,15,11,17,8,7,13,11,16,43,17,29,13,34,34,119,110,132,18,11,117,119,34,130,132,133,150,123,133,144,150,152,143,148,105,6,6,6,6,6,6,6,2,6,6,6,16,123,18,132,114,123,144,125,114,34,106,6,34,114,15,2,34,148,144,124,114,8,11,2,2,6,16,6,2,6,7,13,11,7,2,6,7,6,1,7,6,2,13,6,13,7,5,7,6,13,12,8,13,6,2,6,2,1,7,2,2,2,11,13,13,16,7,13,6,2,7,6,2,2,13,1,2,2,13,11,6,8,7,7,7,7,2,2,2,1,5,7,7,10,7,11,11,11,6,2,2,2,5,2,2,6,2,5,1,1,1,1,2,1,1,2,5,2,2,5,2,11,11,6,13,8,13,8,17,8,2,2,2,2,1,2,27,10,1,1,1,1,1,10,1,1,2,2,5,2,2,2,2,2,5,2,2,5,2,2,5,2,1,2,2,2,1,6,2,5,2,6,10,9,11,6,13,10,21,13,14,11,22,169,160,160,162,160,162,169,167,160,167,160,168,162,162,171,162,168,162,168,168,169,169,162,168,168,168,169,162,168,168,171,162,168,162,162,162,162,162,162,162,162,171,169,162,162,162,162,167,171,162,171,162,171,171,173,171,169,177,194,179,177,171,169,177,173,194,173,173,194,171,173,169,74,
+2,1,2,6,2,2,5,2,5,2,1,5,2,6,1,2,7,13,17,15,5,13,15,8,13,13,36,109,32,16,16,47,46,106,110,126,31,13,106,132,129,123,136,130,136,119,130,139,146,153,143,143,113,11,17,8,11,6,6,6,6,2,6,2,110,116,31,123,126,140,144,136,126,116,108,7,32,110,31,2,106,138,138,122,110,17,2,6,2,21,17,11,1,2,11,16,13,11,6,7,7,2,2,2,7,7,7,2,6,2,13,1,7,13,8,13,7,11,6,2,6,6,2,2,13,7,13,14,11,8,6,14,6,1,12,1,2,13,6,7,2,5,7,13,7,13,13,8,6,2,2,2,2,2,2,2,12,11,6,13,8,17,6,2,2,5,2,2,6,1,1,2,2,1,1,1,1,1,1,1,2,2,5,2,5,11,13,15,13,17,11,13,17,11,6,1,2,5,2,1,1,1,5,1,2,2,1,1,1,2,5,2,2,2,1,6,5,1,2,2,5,2,5,2,2,2,1,2,6,1,1,2,2,2,2,5,2,2,5,11,10,6,21,28,15,64,155,162,169,166,162,162,162,167,169,162,168,162,162,169,162,162,168,162,168,162,169,169,171,168,168,171,162,169,171,168,171,168,168,162,162,171,162,162,162,162,162,168,169,162,171,162,167,169,162,162,167,162,168,162,175,169,171,171,177,194,169,173,171,173,171,177,171,173,171,169,177,194,162,74,
+1,2,1,2,2,5,5,1,6,2,1,2,2,2,2,6,13,11,15,33,8,14,14,13,13,16,109,33,31,13,29,34,34,126,31,126,109,15,46,132,119,137,137,141,120,132,117,133,153,150,150,142,113,17,122,17,6,6,7,6,2,2,7,6,123,122,106,126,116,139,138,122,122,119,111,16,109,132,109,6,126,138,138,126,114,24,19,15,18,24,18,2,6,7,13,13,13,2,2,7,2,2,6,2,6,11,7,6,7,2,2,13,6,7,11,13,7,13,6,2,2,13,1,6,2,7,11,13,13,11,11,2,2,2,13,2,5,11,7,13,17,11,13,11,6,7,7,7,6,6,2,1,2,2,2,13,11,13,13,11,7,17,7,2,6,2,2,5,1,1,1,1,1,2,9,2,1,1,1,5,1,6,1,6,2,10,11,15,17,15,8,17,17,15,2,2,2,2,2,60,5,2,1,9,38,25,1,6,1,1,2,6,2,5,1,2,2,2,5,2,6,5,2,10,2,13,11,2,2,6,2,2,5,2,5,2,5,2,2,13,15,157,168,169,162,169,160,162,160,169,162,168,162,162,162,162,162,162,162,162,167,162,162,168,168,168,171,171,171,162,169,177,162,194,162,168,168,162,168,169,162,162,162,168,167,169,162,167,162,162,162,162,168,162,168,168,162,171,162,171,162,168,168,171,171,169,194,177,173,171,171,169,179,173,171,171,177,169,168,74,
+1,1,5,2,6,2,2,5,1,2,1,2,5,2,5,2,13,13,32,46,17,21,13,13,7,22,32,22,17,13,14,34,106,124,22,123,111,8,120,110,106,151,114,139,144,132,132,132,148,153,150,115,114,17,114,13,6,6,7,2,6,2,2,12,140,108,116,132,144,151,150,144,137,119,110,16,36,106,18,13,137,138,138,126,110,18,22,6,17,22,11,13,15,13,13,2,2,2,11,6,2,6,2,2,7,7,11,2,6,2,11,7,7,7,16,11,7,11,6,6,2,2,13,1,5,13,7,6,6,6,1,6,1,2,7,2,2,13,11,14,11,13,13,7,6,7,13,7,7,5,2,1,1,2,6,13,7,11,13,7,17,8,7,2,2,5,2,2,5,2,1,1,1,2,2,1,2,1,1,1,1,2,5,2,2,10,13,15,18,29,11,15,17,15,6,2,2,5,2,2,1,2,1,2,2,0,1,1,1,6,5,1,2,2,6,2,5,2,1,2,5,2,10,11,7,13,13,11,6,2,2,25,2,2,2,2,9,2,11,78,162,161,160,162,162,162,160,167,169,162,162,162,167,169,162,162,167,169,162,162,162,162,168,162,162,171,171,168,169,169,168,171,171,169,168,168,169,168,171,167,169,162,162,162,162,162,159,169,162,162,162,162,167,162,162,162,168,162,162,171,162,168,169,168,194,169,177,171,169,179,173,194,168,177,171,173,168,171,168,74,
+2,1,2,1,2,2,6,2,2,1,1,1,2,2,2,2,11,13,20,36,33,10,11,11,13,22,33,36,32,13,30,24,37,123,8,119,114,33,119,34,119,145,114,122,137,136,133,139,153,146,142,127,18,33,18,6,2,6,2,2,2,6,2,34,24,129,138,144,149,146,153,138,119,120,8,36,15,33,8,22,144,138,147,126,114,6,18,13,13,16,13,117,29,11,13,11,2,13,7,7,6,2,7,14,7,7,13,1,12,6,10,13,10,11,13,13,11,11,13,7,7,2,2,2,13,13,7,7,2,6,13,1,5,10,13,1,10,7,13,13,13,7,11,7,2,7,2,13,2,2,6,1,1,1,12,7,7,7,7,13,13,17,2,6,2,2,2,5,2,1,1,1,1,2,2,5,1,1,1,1,1,7,2,2,5,11,11,17,15,8,13,17,31,15,2,2,2,2,5,51,11,1,1,1,1,1,1,1,2,2,2,2,5,2,2,2,2,6,1,2,10,7,13,13,11,13,13,21,13,6,2,2,2,2,6,10,5,10,11,87,160,159,162,160,159,162,162,162,162,167,169,162,162,162,162,168,162,168,168,169,169,169,162,162,162,162,168,168,168,169,162,168,168,168,162,167,168,162,162,162,162,167,169,162,162,162,162,162,167,171,162,168,162,162,175,162,162,162,162,162,168,168,162,168,169,171,171,169,194,173,194,171,177,171,173,173,171,173,168,74,
+1,2,1,2,1,6,1,2,5,2,1,5,2,2,5,2,11,13,22,18,110,6,13,16,11,32,37,34,36,13,30,16,123,125,29,37,34,43,136,149,151,138,144,132,138,139,132,133,149,152,143,143,113,18,18,11,6,2,6,6,2,7,6,37,24,144,144,138,150,152,150,136,137,116,5,126,11,13,2,106,146,153,144,123,8,13,13,17,17,22,11,14,6,2,13,2,6,6,11,11,7,6,7,29,13,7,2,6,5,2,12,13,11,7,13,17,7,7,2,2,6,6,12,2,12,11,13,6,2,13,2,1,2,10,2,2,12,13,13,13,11,13,7,6,7,7,16,16,11,2,2,1,2,1,7,11,13,13,13,7,11,8,2,2,2,5,2,2,2,1,5,1,1,1,2,1,1,1,1,5,1,5,2,6,1,5,13,13,15,15,15,30,29,6,6,2,2,1,9,12,10,1,1,1,1,1,1,1,2,5,1,6,2,2,5,2,5,1,12,1,5,10,7,11,7,11,21,24,111,46,131,131,11,2,2,9,11,6,29,163,162,162,162,162,162,162,162,162,162,162,162,162,162,167,169,162,162,171,167,168,168,169,169,162,168,162,171,168,168,168,168,168,169,168,168,162,162,162,162,162,162,168,162,162,167,169,162,162,162,162,162,168,162,162,162,162,162,162,162,162,168,169,168,173,171,173,173,194,169,194,177,171,173,171,173,171,169,177,169,74,
+2,5,1,2,1,2,2,10,2,1,2,2,2,6,2,12,1,14,36,114,119,6,21,29,14,29,34,45,17,29,23,45,132,122,33,31,44,132,122,132,183,138,149,123,147,132,132,138,154,145,150,146,127,20,31,6,6,2,2,2,6,1,2,33,24,144,144,149,149,144,147,139,137,116,16,31,8,8,11,136,144,144,123,122,11,14,14,29,22,16,11,2,2,2,2,40,41,41,40,27,40,73,73,49,2,2,2,2,6,2,11,7,13,13,11,6,11,6,2,2,2,5,2,2,13,13,7,7,5,2,2,2,2,5,2,2,13,13,13,13,11,6,7,13,6,7,15,6,6,2,2,2,1,2,7,11,13,13,6,6,11,17,2,2,6,2,2,5,1,2,2,9,2,2,2,1,1,1,1,2,1,2,5,1,2,5,11,8,17,15,18,30,30,11,2,38,6,1,1,1,1,1,5,2,2,1,1,2,2,2,6,1,2,5,2,2,2,6,10,2,5,9,13,13,26,29,120,45,180,173,198,202,30,2,5,2,2,42,156,162,162,161,168,168,162,162,168,168,169,162,169,162,168,162,168,168,162,162,162,162,167,169,169,162,162,162,162,162,168,169,168,162,168,162,162,169,162,162,167,162,162,162,162,162,162,162,167,169,162,162,162,162,168,162,162,162,162,168,162,169,171,171,162,177,171,171,177,171,177,177,173,171,177,173,171,173,171,171,171,74,
+2,2,5,2,1,5,5,25,2,1,2,5,2,2,11,7,13,30,34,46,109,13,16,22,15,22,46,34,22,29,32,30,106,140,33,110,18,126,114,151,153,126,126,48,150,140,119,139,184,146,154,146,145,24,114,19,7,6,6,2,6,2,2,32,109,139,144,149,144,150,150,137,139,109,22,33,21,117,6,126,126,138,136,114,30,11,7,13,30,16,7,11,2,5,2,2,6,1,6,2,2,1,2,5,2,2,5,2,2,2,2,11,13,13,11,13,8,2,2,6,2,2,6,2,12,13,11,2,7,2,2,2,2,5,2,2,12,7,7,2,7,11,13,13,6,11,7,6,6,2,6,1,2,13,7,13,13,13,15,29,16,29,7,2,2,2,2,6,2,1,2,1,1,1,2,2,1,1,5,2,1,2,10,2,5,11,6,17,15,17,33,17,36,2,2,2,2,2,6,1,1,2,6,57,21,5,1,2,5,2,2,2,5,2,5,2,5,10,2,5,10,10,12,14,7,117,132,129,194,179,171,179,159,2,65,41,159,162,160,171,160,162,168,162,162,169,168,169,168,168,162,168,169,162,162,167,162,162,168,168,162,171,162,168,168,162,169,162,171,160,162,162,162,162,162,167,162,160,162,162,168,162,167,171,169,162,168,162,169,168,169,162,162,168,168,162,168,169,171,171,171,173,171,173,169,171,179,173,171,171,194,171,173,171,173,171,171,173,162,74,
+2,5,2,2,1,2,2,2,1,1,2,2,5,2,7,13,21,29,22,34,33,8,29,32,16,36,117,46,29,22,17,22,120,132,114,116,120,110,144,153,183,144,120,117,153,144,106,133,150,153,153,146,150,115,33,8,6,2,2,6,6,6,2,117,126,133,147,150,149,144,147,139,144,31,22,34,18,109,1,126,126,128,125,126,109,24,29,6,2,6,11,13,2,2,1,2,2,6,1,2,6,2,2,2,1,1,2,1,5,2,5,11,11,11,8,15,13,6,2,2,2,2,7,2,13,11,7,7,7,13,1,1,2,10,2,2,21,11,11,6,13,13,14,11,11,13,11,11,8,2,6,2,2,11,7,13,13,11,18,29,18,20,11,6,2,5,2,2,2,6,1,1,1,1,1,2,2,1,2,1,5,2,2,5,2,2,11,8,15,29,31,24,17,6,2,6,6,2,2,1,1,1,2,1,1,1,1,2,2,5,2,6,2,2,2,2,2,21,2,6,5,1,21,164,18,119,141,176,179,179,173,173,171,194,173,173,169,171,162,162,162,162,162,171,169,171,169,162,168,169,168,168,162,162,162,168,162,162,162,168,162,168,168,168,168,162,171,162,167,169,168,162,169,160,162,162,160,167,169,169,171,169,171,162,171,177,168,177,171,162,168,171,162,173,162,171,171,173,194,171,194,179,171,179,194,177,171,177,194,173,179,194,173,173,171,177,171,171,169,74,
+2,2,2,5,1,2,5,1,1,1,5,2,2,2,13,13,13,16,30,43,17,13,16,46,17,29,23,45,16,30,46,106,110,126,126,132,109,106,149,183,144,144,126,45,152,149,106,144,153,183,153,152,142,19,108,8,11,6,2,6,2,2,6,37,110,138,144,149,151,150,146,123,136,15,29,24,24,109,13,144,122,127,125,122,24,22,11,2,2,2,8,13,2,6,2,5,7,2,11,2,2,2,6,1,1,2,5,1,2,2,2,6,13,8,15,22,15,2,6,2,2,13,10,13,13,7,6,6,7,2,1,1,2,13,2,2,13,11,2,11,14,15,11,7,8,17,11,11,13,2,6,2,2,13,5,11,11,13,24,31,108,109,6,2,2,2,2,5,1,1,2,2,12,1,2,2,5,5,2,2,6,1,5,2,5,2,11,15,15,17,33,24,34,15,6,6,2,11,6,2,2,1,1,2,1,6,1,2,6,1,2,2,2,2,5,2,2,21,13,7,6,68,202,198,176,176,179,179,179,179,179,169,173,171,171,168,171,162,162,162,168,169,162,162,171,162,169,162,171,162,168,168,169,168,168,168,162,162,168,171,162,168,169,169,162,171,162,162,168,162,162,168,162,160,169,162,162,162,168,168,168,171,168,169,194,168,171,171,173,173,171,179,171,171,171,173,194,173,179,179,179,173,194,173,179,179,179,194,173,194,173,179,179,179,194,169,179,173,169,74,
+2,6,5,1,2,1,6,2,1,1,2,2,6,2,21,13,13,14,31,34,29,7,33,37,22,17,29,32,22,106,120,116,122,126,132,138,126,119,153,184,141,144,140,36,154,144,117,149,153,154,153,154,127,34,20,15,11,6,6,6,6,2,2,29,24,150,151,144,139,146,138,138,122,11,16,24,18,24,22,145,142,122,140,20,31,17,13,2,5,2,15,17,2,2,2,2,5,2,7,11,2,2,2,1,1,1,1,1,2,5,2,7,15,13,15,17,13,6,6,2,2,10,7,11,13,10,13,5,11,6,2,0,2,13,2,11,11,13,13,11,7,13,13,11,14,11,8,13,11,6,2,6,2,13,13,21,17,13,18,24,33,24,2,2,2,6,2,2,5,1,2,9,9,1,1,1,1,2,2,1,2,2,6,1,2,11,13,17,22,30,109,24,15,36,11,7,13,110,16,22,2,1,2,2,6,1,2,6,1,11,2,2,6,2,2,6,5,29,30,21,78,198,198,179,179,202,179,171,179,171,179,173,171,173,168,194,162,168,168,168,168,169,162,171,171,169,171,177,162,171,162,169,168,168,168,162,162,167,171,162,168,168,162,168,162,171,162,169,168,162,162,168,168,162,162,162,162,162,168,168,169,173,162,171,171,173,171,173,171,179,179,194,173,179,179,194,179,177,179,179,179,179,202,179,179,179,194,179,202,179,179,179,194,179,179,179,179,171,169,74,
+2,2,6,2,6,1,2,1,2,5,2,5,1,2,14,16,16,32,46,30,16,7,117,130,114,11,16,109,24,106,33,106,126,126,122,141,126,147,153,151,139,149,128,23,154,151,153,150,154,153,152,152,143,17,24,105,26,6,2,11,2,2,6,7,24,149,144,144,144,144,126,138,34,6,17,17,22,6,24,138,143,128,126,46,33,29,11,6,2,11,8,17,11,2,6,2,2,2,13,6,2,2,5,1,1,1,1,2,6,2,13,16,17,15,15,13,6,2,2,2,7,13,6,14,13,8,2,13,13,2,6,1,1,13,2,13,11,11,2,11,13,14,14,13,13,11,17,15,15,13,2,2,15,21,13,21,29,22,29,18,109,17,11,6,2,2,2,12,9,2,2,1,1,1,1,2,5,2,1,2,5,2,2,2,6,5,13,29,33,109,109,31,13,30,109,33,127,106,114,22,1,2,12,5,21,36,2,2,2,11,6,2,2,2,2,2,12,11,30,196,198,179,179,198,179,179,179,194,179,179,171,179,171,173,171,169,171,162,168,168,168,162,194,162,169,171,171,171,171,171,171,162,168,168,168,168,162,162,168,168,171,162,171,169,162,168,168,168,168,168,168,162,169,168,162,167,169,169,162,171,194,171,173,171,171,171,194,169,179,179,179,198,179,195,179,179,177,179,179,194,179,179,195,202,195,173,179,198,179,198,198,173,198,198,173,198,173,179,179,74,
+2,7,32,17,8,2,5,2,1,2,2,2,6,7,29,13,36,45,22,36,24,12,117,132,29,2,22,34,34,110,31,122,126,138,122,123,149,133,139,139,141,144,140,36,153,150,154,186,153,153,152,150,143,20,20,127,18,11,2,2,11,6,2,13,22,123,122,138,144,145,141,126,18,11,11,22,24,3,110,151,144,128,123,32,31,11,2,2,2,13,15,17,6,2,1,2,13,2,7,2,5,2,2,1,1,1,2,1,2,2,15,8,13,15,13,6,11,6,7,6,6,13,7,16,16,13,11,13,11,2,2,1,6,13,13,6,13,7,2,21,21,29,13,11,11,15,17,15,29,11,7,13,14,15,13,13,13,18,22,34,33,6,6,2,6,6,2,2,5,1,1,1,1,1,2,5,2,5,2,1,2,2,5,2,2,2,13,13,34,44,108,18,13,119,19,114,115,47,136,133,11,6,9,11,29,18,11,11,2,11,2,6,2,6,2,2,15,24,200,179,179,179,179,179,179,179,179,179,179,179,179,179,171,179,171,173,171,171,171,171,171,171,171,169,177,168,173,168,194,168,194,168,168,169,169,162,168,169,168,162,171,168,169,168,169,171,171,171,162,169,162,171,169,162,162,162,168,162,168,171,171,169,179,179,177,179,194,173,194,179,194,179,195,198,179,179,179,198,202,194,198,198,179,198,198,198,179,179,179,179,198,195,198,202,198,198,198,179,179,69,
+2,13,22,114,33,15,16,11,2,6,9,2,2,12,36,30,47,16,21,33,29,18,47,46,11,6,29,17,18,36,24,122,138,144,109,130,110,136,149,122,123,132,148,24,154,183,186,154,183,153,153,153,142,18,24,127,108,6,1,6,6,2,2,6,114,126,122,136,144,138,144,132,17,6,6,17,110,8,137,150,140,139,33,30,33,6,2,2,5,15,11,6,6,2,2,2,2,2,12,2,2,2,5,1,1,2,5,2,5,2,21,16,29,17,11,11,17,6,8,7,13,13,11,13,16,7,11,13,13,7,1,1,7,21,21,29,17,7,10,13,13,13,11,29,32,32,15,22,15,11,11,13,14,7,13,21,29,17,33,116,116,36,34,34,13,22,2,2,2,1,2,1,1,1,1,2,2,1,1,5,2,5,2,2,5,10,13,13,33,109,33,15,13,109,32,46,33,46,117,133,11,5,10,1,11,11,119,109,1,2,2,11,6,2,29,29,16,179,179,179,179,179,179,194,179,179,179,194,179,179,179,179,179,173,171,171,171,173,168,171,173,173,171,171,169,171,194,171,171,171,168,168,168,169,171,168,169,162,169,168,169,171,162,168,168,169,162,171,171,194,162,171,162,168,162,162,167,171,162,168,171,179,173,179,179,179,179,195,179,198,179,199,198,195,198,179,198,198,179,195,199,196,198,195,198,195,198,196,198,198,198,203,203,198,200,203,195,198,179,74,
+1,2,29,34,34,22,17,22,2,2,2,6,1,7,29,30,49,2,14,34,22,18,21,22,8,13,21,22,22,16,33,116,144,144,18,116,106,149,123,146,140,149,154,24,183,153,183,154,153,153,153,153,128,10,18,114,142,11,2,2,11,2,6,6,110,116,126,145,145,150,138,124,6,11,6,30,123,8,138,137,138,119,33,16,13,2,5,2,13,33,11,2,11,6,2,2,6,1,15,11,6,2,2,1,2,5,2,2,2,2,12,16,13,17,11,7,6,6,7,6,7,16,11,13,30,11,13,16,21,11,1,1,13,16,29,29,16,11,2,13,14,29,14,22,30,16,22,16,11,11,13,13,13,13,14,14,14,33,132,125,120,34,13,126,122,138,2,2,2,1,1,2,5,1,1,2,5,2,2,1,2,2,5,2,2,6,13,21,110,20,33,8,17,117,109,116,32,45,47,133,114,10,121,119,10,26,132,70,11,6,2,6,11,8,32,30,194,195,179,179,179,194,202,179,194,198,179,179,179,169,179,173,179,171,171,173,173,171,173,171,171,173,171,169,171,162,171,162,168,168,168,162,162,162,162,168,168,168,169,162,194,161,173,171,171,169,177,162,194,168,169,194,171,169,168,168,162,162,162,194,171,169,194,194,179,179,198,179,198,199,196,199,199,199,199,198,199,199,196,199,199,196,199,199,199,199,198,198,203,200,198,204,201,200,204,200,195,198,198,131,
+2,6,21,36,21,6,18,109,15,2,6,1,12,12,13,16,13,11,6,16,18,30,33,17,13,13,11,16,16,13,34,149,138,34,122,149,116,138,138,186,141,186,183,110,185,151,153,153,154,153,153,146,142,8,122,150,125,2,2,11,6,6,11,8,110,144,150,143,146,146,122,24,2,11,11,24,114,22,119,149,123,106,33,18,5,2,2,11,8,110,15,29,106,6,2,2,2,11,13,14,13,6,2,6,2,2,2,6,2,7,22,13,18,29,6,6,6,7,7,13,6,16,11,13,18,1,21,17,13,6,2,1,13,16,29,16,17,7,14,21,29,16,21,29,18,22,22,17,33,8,13,13,13,13,14,29,29,30,125,111,15,11,20,145,126,136,2,2,2,2,5,2,2,2,1,6,1,2,6,1,6,2,2,5,2,2,21,29,117,37,22,11,16,29,36,33,43,22,109,124,21,2,132,37,6,2,182,204,74,11,6,11,20,180,198,203,198,198,179,179,179,179,179,179,179,179,179,194,179,194,169,179,179,194,173,194,169,173,173,171,194,169,173,173,171,171,169,171,168,162,168,162,160,162,168,162,175,169,169,171,171,169,194,168,173,171,169,171,173,171,173,171,169,171,168,168,169,194,169,171,162,194,173,179,179,179,195,179,198,198,196,199,199,200,199,199,195,199,203,203,199,203,199,196,199,200,200,200,200,204,200,198,204,204,200,204,198,203,196,74,
+2,2,10,11,1,13,122,114,33,11,2,1,2,6,36,16,13,14,13,7,29,24,22,43,17,13,11,17,16,13,37,140,126,149,149,138,119,149,123,153,152,153,150,24,130,149,153,152,153,153,152,150,142,116,125,128,16,2,2,2,2,6,6,6,116,150,150,143,143,125,136,17,2,11,22,33,18,15,129,144,123,116,33,11,2,6,2,7,13,110,18,13,15,11,16,12,6,7,13,14,14,17,1,1,2,2,11,2,2,29,16,16,22,11,6,7,13,11,13,6,13,22,11,22,17,1,21,29,17,6,2,1,13,29,17,33,29,13,13,16,29,30,21,29,16,30,15,29,17,11,17,14,13,14,29,16,21,18,116,114,3,6,138,127,126,110,6,2,5,1,2,2,5,2,2,2,2,6,1,2,2,2,2,2,2,5,10,29,106,114,106,2,21,68,29,50,106,46,133,188,6,7,29,16,117,130,203,203,172,7,30,130,180,199,198,198,179,198,195,179,179,179,179,179,179,179,179,179,171,171,194,171,173,171,194,179,171,171,173,194,194,179,171,169,173,171,168,162,171,162,162,171,162,162,171,162,171,162,171,168,171,173,173,171,173,168,171,173,173,171,173,171,171,171,169,168,168,171,169,168,171,171,177,179,179,194,173,195,179,196,199,199,199,199,199,199,199,199,199,199,199,200,198,200,200,203,198,204,198,196,204,200,204,204,201,200,200,195,199,74,
+2,5,0,2,1,12,106,111,109,29,2,5,2,7,16,11,13,11,13,11,22,33,22,29,13,10,22,46,13,17,36,119,129,149,140,139,138,149,132,149,153,150,147,16,47,133,153,154,152,153,153,153,125,115,122,109,2,6,2,2,11,6,6,6,34,144,128,128,142,138,125,6,13,24,116,120,125,8,22,22,123,125,8,6,2,2,2,13,2,22,29,3,22,16,17,2,6,7,14,29,13,17,6,6,2,2,2,2,6,30,14,17,22,11,7,11,13,13,13,13,13,20,29,32,13,1,13,22,17,17,2,2,21,22,32,30,31,11,13,29,22,16,30,16,16,29,15,17,11,2,21,21,11,13,16,16,16,24,33,125,6,113,145,126,147,119,2,2,2,2,6,2,2,5,2,13,13,2,5,11,2,6,2,2,6,2,12,29,32,122,125,6,16,66,116,141,29,21,106,6,15,43,15,47,47,195,198,202,198,131,47,141,176,198,179,200,202,198,179,198,198,179,202,179,179,179,179,179,171,171,171,171,173,171,171,171,194,171,179,179,179,179,179,173,171,173,162,168,168,162,162,162,162,162,162,162,168,162,168,171,171,194,169,173,194,177,171,177,171,179,177,173,171,173,171,171,171,171,171,179,177,179,194,179,179,179,179,179,173,198,195,195,195,199,195,199,199,198,198,199,196,200,198,204,200,200,200,204,201,200,204,204,204,195,204,204,204,204,196,74,
+2,2,5,1,2,7,34,109,108,108,11,2,2,5,11,1,6,2,7,13,16,37,31,13,12,16,29,13,33,106,141,122,120,149,18,106,119,147,129,152,183,152,144,8,22,183,153,154,153,153,153,150,125,138,111,11,2,2,2,2,7,6,6,11,34,143,128,138,128,126,125,17,22,119,122,138,126,11,6,7,136,111,11,6,2,2,2,13,11,18,18,22,11,15,11,2,7,11,13,13,13,6,7,21,11,2,2,11,7,18,15,24,30,2,13,7,11,13,13,11,13,16,30,37,11,1,2,22,18,15,6,2,16,30,22,32,31,11,7,13,17,29,18,29,16,17,30,22,13,11,21,17,6,21,29,29,29,17,34,111,120,140,127,149,144,144,8,2,6,2,2,6,2,2,2,15,11,2,34,37,36,7,13,11,2,2,11,36,34,120,123,121,170,48,124,141,106,4,15,106,11,17,18,106,200,202,195,179,198,179,8,175,198,199,198,179,200,179,198,198,179,179,198,179,198,179,179,179,179,171,171,173,169,179,173,179,174,179,179,179,169,179,173,171,177,171,171,171,162,168,168,162,166,161,162,162,162,171,160,168,168,171,169,194,169,171,177,169,194,179,179,194,179,169,179,169,171,173,173,168,171,194,179,179,194,179,175,179,194,173,198,199,199,200,199,199,195,200,200,198,200,198,204,200,204,201,200,200,204,201,201,195,204,204,200,201,204,201,204,131,
+2,5,2,1,1,12,32,37,111,109,18,2,6,26,2,5,1,5,13,15,16,31,31,16,12,16,11,23,130,117,150,148,37,30,8,47,141,132,37,123,144,154,153,8,36,150,147,153,154,184,150,147,125,125,8,11,2,6,2,2,6,6,6,6,138,143,125,127,126,114,122,6,36,132,139,122,24,2,11,11,126,19,6,11,6,2,11,16,11,16,24,16,15,11,2,2,21,13,21,16,22,6,17,6,13,2,2,12,16,32,30,46,13,2,12,11,6,11,7,21,22,17,29,33,1,1,1,13,24,2,13,11,13,31,32,34,31,7,13,16,22,30,17,30,15,17,15,31,15,2,14,29,11,16,30,22,22,46,110,18,114,119,140,140,144,151,116,2,2,1,2,2,2,6,2,11,6,29,46,36,32,13,10,21,10,5,13,36,68,108,123,137,19,6,24,109,106,154,110,43,16,45,190,202,198,198,179,199,195,198,203,203,200,179,198,203,203,199,198,179,198,198,179,179,198,179,179,179,171,171,169,179,171,173,179,169,179,171,173,179,171,171,171,194,169,177,171,177,162,169,168,169,169,169,168,169,168,162,168,162,162,168,169,162,194,171,173,171,171,194,179,177,194,177,179,194,169,173,171,177,173,171,179,194,171,171,173,171,177,194,173,199,199,199,199,204,200,200,200,203,200,203,200,198,200,204,204,204,201,204,201,201,204,205,201,205,201,205,204,74,
+2,2,2,1,2,16,30,30,33,37,109,22,0,1,2,2,6,2,2,13,32,2,43,122,16,17,21,22,37,130,137,151,119,123,24,47,149,114,32,133,153,153,152,8,130,147,154,184,153,150,150,143,126,127,8,6,6,2,6,2,11,6,11,14,128,128,128,128,138,114,138,145,109,109,128,136,18,6,6,13,116,11,15,11,2,2,34,15,22,29,22,22,33,18,6,2,17,29,30,33,30,13,36,11,17,2,2,29,16,30,30,32,2,6,2,11,7,7,13,16,29,16,22,29,2,1,2,21,11,17,44,7,10,32,46,24,33,5,10,29,18,33,16,29,16,20,29,111,18,1,13,18,14,30,30,30,22,109,110,109,18,144,132,147,153,150,143,6,2,2,6,2,11,6,6,6,22,23,43,34,34,29,13,1,10,10,13,17,124,142,125,142,140,109,44,30,47,121,165,194,190,200,179,202,198,179,198,179,198,198,179,198,179,198,199,198,198,199,179,203,198,179,198,198,179,179,179,179,179,179,179,179,179,179,179,179,179,179,173,171,179,171,173,173,171,171,171,169,171,168,168,169,171,171,171,162,169,162,162,171,162,168,169,168,168,168,171,171,171,169,179,177,171,194,177,179,194,169,179,179,179,194,179,171,173,173,171,171,171,177,179,194,199,199,200,200,204,204,200,201,200,201,203,200,200,200,204,201,204,201,201,204,201,201,205,201,205,204,201,74,
+2,2,2,9,1,7,32,46,36,34,24,29,2,2,5,2,2,2,11,106,20,21,129,130,14,21,16,22,34,119,181,149,106,22,15,130,120,119,110,183,153,153,150,8,152,152,150,150,153,148,147,139,114,127,8,11,2,2,2,2,6,6,6,33,143,150,138,143,128,47,139,148,112,126,138,140,17,11,6,17,116,6,13,8,2,11,119,6,30,30,16,37,17,46,8,11,11,23,30,10,21,21,13,21,13,2,6,16,21,30,30,13,2,2,7,13,21,14,21,34,30,15,30,18,1,1,2,13,15,29,16,2,21,24,46,33,33,11,7,16,29,14,22,17,29,34,114,109,22,2,21,29,8,18,15,13,29,110,116,132,106,126,139,153,150,147,136,10,6,16,11,8,8,8,13,11,30,49,36,29,36,29,17,21,50,172,15,130,114,116,133,129,70,166,130,33,134,177,194,177,194,173,194,179,202,198,194,198,202,179,203,198,198,195,198,199,198,199,195,200,195,198,198,198,171,198,179,179,179,198,179,202,179,179,173,179,179,179,179,179,173,179,169,179,177,171,177,171,169,169,171,169,194,169,173,179,168,162,162,160,162,168,162,162,168,168,171,162,179,171,194,179,177,179,177,171,173,171,179,179,179,179,173,179,194,169,171,173,194,171,173,179,198,199,199,204,204,201,200,200,204,200,200,204,200,200,204,201,205,204,201,201,205,206,204,201,206,201,201,69,
+9,1,2,2,9,5,30,109,116,120,109,10,2,6,2,2,5,13,45,130,106,13,14,15,11,45,141,34,47,117,132,144,18,119,109,45,32,120,36,133,153,153,147,24,138,138,150,153,148,126,149,122,123,128,3,11,6,6,2,2,11,6,8,132,149,146,144,149,128,116,144,145,138,126,136,151,116,29,36,48,29,6,11,15,17,16,123,6,16,36,30,36,29,29,18,21,14,30,7,7,11,21,6,7,13,13,21,7,7,30,47,6,2,7,13,17,21,7,17,29,29,16,24,17,2,1,1,11,13,16,5,10,29,34,43,33,44,6,15,16,29,29,43,36,22,46,109,32,31,2,7,15,22,29,11,6,16,132,120,116,110,149,153,150,148,144,140,8,21,17,11,17,18,20,17,2,29,21,29,14,33,132,29,30,46,3,13,106,123,46,11,35,163,162,168,169,171,169,171,194,177,198,179,194,202,179,179,198,202,202,198,203,179,200,179,200,199,195,198,196,203,203,198,198,198,198,179,202,198,179,179,198,198,202,198,202,179,179,179,179,179,179,178,169,171,171,171,171,173,171,177,171,179,194,179,177,179,168,162,162,156,162,162,171,162,162,168,162,168,171,169,194,179,194,194,173,194,179,179,179,179,194,179,194,171,171,173,177,194,173,194,198,179,198,200,200,204,204,204,204,201,204,200,204,204,204,201,204,201,201,201,201,205,201,206,205,201,206,205,74,
+2,6,1,2,1,2,29,34,123,111,109,33,116,119,16,6,6,32,130,120,32,21,16,26,2,36,132,132,149,151,140,149,8,126,111,15,106,124,32,117,144,144,106,15,137,144,149,150,144,144,144,111,125,140,17,6,6,2,2,2,11,6,22,133,147,150,145,136,144,140,138,127,126,122,141,141,14,24,19,22,6,6,2,13,13,36,122,1,17,22,30,16,48,31,119,30,30,13,29,16,12,47,2,29,36,29,29,1,30,32,10,2,5,11,13,13,13,14,23,22,16,30,17,24,2,1,2,11,2,16,2,11,22,30,33,32,46,34,31,13,13,21,28,29,22,30,33,33,18,1,12,17,15,7,13,18,33,119,106,116,147,152,150,150,148,140,146,115,109,11,6,6,17,6,2,6,2,13,43,13,30,119,106,106,30,13,32,126,22,159,166,162,162,160,162,162,168,171,171,171,194,169,194,179,202,179,198,179,198,179,200,199,199,195,198,199,199,199,195,196,198,198,200,198,200,203,198,198,179,198,198,179,198,179,179,198,179,202,179,179,179,179,179,179,179,168,173,173,171,171,171,169,194,179,177,179,179,179,168,162,162,162,162,162,162,162,168,168,168,171,171,194,179,179,179,179,173,195,179,179,179,179,173,194,171,194,171,169,179,194,179,179,195,179,200,195,204,200,201,204,200,204,201,201,204,204,201,201,204,201,204,204,201,206,206,201,205,206,201,74,
+2,1,2,2,1,5,30,47,126,122,116,46,149,152,34,43,106,132,119,130,15,14,21,12,6,14,22,152,151,120,133,132,15,116,33,13,24,123,133,133,123,145,109,16,137,138,149,153,153,115,47,106,115,142,15,6,6,11,2,6,6,6,34,144,144,144,136,138,138,123,113,126,47,13,122,110,6,16,33,17,8,2,30,32,129,133,130,6,36,30,36,117,120,6,32,32,43,11,45,21,21,50,14,36,29,21,13,33,47,29,1,2,11,2,13,8,13,29,17,30,29,32,46,20,2,1,2,13,13,13,11,11,29,32,31,120,140,46,17,13,17,15,21,13,15,33,109,32,17,6,2,16,11,11,16,30,46,106,106,140,152,148,153,152,150,136,149,113,20,6,2,11,6,18,8,15,11,10,11,11,36,120,119,147,128,108,109,118,141,161,162,160,162,160,171,169,162,171,171,162,171,171,171,169,194,194,177,179,194,198,198,202,200,199,199,198,199,196,203,198,200,203,203,195,198,203,198,198,198,198,179,198,198,198,203,195,203,195,198,202,202,179,179,179,171,173,171,179,171,173,171,173,171,179,179,198,179,179,179,168,162,162,156,161,156,162,162,168,162,173,171,171,169,194,179,179,194,179,179,198,179,179,179,194,179,171,177,194,173,194,179,198,194,198,199,199,200,201,200,204,204,201,204,201,200,204,201,201,204,201,201,205,201,205,201,206,206,201,206,131,
+2,2,1,1,2,2,16,36,122,126,116,46,122,116,33,36,139,133,70,15,6,7,7,2,13,13,43,153,147,120,120,4,29,126,109,40,133,137,20,22,33,145,105,31,147,136,153,154,145,125,31,31,18,140,8,6,6,2,2,2,7,6,117,138,144,138,128,137,126,114,109,22,6,22,138,15,6,16,24,18,44,34,29,30,120,18,32,2,29,23,30,117,29,13,30,43,29,29,17,22,15,6,21,29,34,6,36,21,17,10,1,2,5,2,11,15,13,22,22,30,29,34,31,24,2,1,2,14,17,1,5,13,45,47,117,129,120,106,34,106,17,21,11,15,37,31,33,33,20,2,2,29,22,16,17,29,106,110,116,124,152,148,146,142,144,139,139,136,15,6,6,6,6,8,17,15,17,6,2,36,16,119,132,142,125,109,116,149,169,162,162,162,168,167,162,167,171,169,171,169,171,162,168,194,168,177,171,173,194,202,179,199,199,199,203,199,199,199,198,203,200,198,196,203,200,195,198,200,203,198,198,203,179,200,198,203,199,203,199,179,198,198,173,179,179,194,179,169,173,171,171,171,179,179,194,179,198,198,179,179,171,168,168,162,168,162,168,168,171,194,171,177,171,171,177,194,179,179,179,179,179,194,194,179,179,179,179,179,179,179,179,179,198,198,179,200,195,195,200,199,204,200,200,204,204,204,201,204,201,201,205,201,205,201,206,206,201,206,205,74,
+82,10,2,2,1,5,16,33,106,126,144,139,136,44,7,132,185,132,46,1,5,1,1,2,16,139,148,153,144,124,17,13,24,153,18,29,34,109,106,24,29,138,114,146,126,147,153,144,150,142,105,15,8,126,4,5,2,2,5,2,11,11,133,149,150,149,126,146,125,126,14,2,6,22,114,5,7,16,13,114,111,115,18,33,29,6,11,2,29,32,17,32,16,33,32,34,47,123,122,31,22,13,13,43,32,2,34,34,29,12,1,2,2,2,13,109,15,31,18,29,17,106,33,17,2,1,2,21,22,6,0,29,45,106,46,109,46,109,34,106,24,5,11,14,24,33,33,29,24,6,6,16,29,16,29,8,47,46,114,142,145,139,150,153,149,147,123,126,2,11,6,6,6,11,18,22,17,13,29,10,29,106,33,140,125,114,131,160,168,168,162,162,162,162,162,162,168,169,171,177,171,169,168,168,171,173,171,169,194,179,179,195,198,198,200,199,196,204,200,200,200,200,200,200,204,203,203,198,196,198,198,199,199,179,195,179,200,179,198,198,179,198,179,179,171,179,179,179,171,194,171,179,173,194,179,198,199,199,179,179,179,179,171,171,168,168,173,171,168,171,171,171,173,194,179,173,179,179,179,194,179,179,179,179,202,179,171,194,179,198,179,198,179,198,179,198,196,199,203,200,200,200,204,201,201,200,204,201,201,205,201,204,201,205,206,201,206,201,201,74,
+95,53,6,0,1,2,29,29,47,133,130,136,126,118,21,149,132,141,13,2,2,1,2,13,22,149,138,146,136,46,11,17,109,143,20,16,46,116,148,24,32,154,127,126,144,146,145,128,144,142,105,8,46,128,6,17,13,2,2,2,11,16,133,141,147,144,150,122,113,111,13,6,6,22,109,2,11,13,18,114,33,111,115,31,8,17,6,6,13,16,22,22,30,106,46,37,119,129,120,47,106,31,2,47,43,14,22,15,17,2,2,5,2,11,11,106,11,20,31,15,15,116,110,15,1,1,2,29,18,2,2,21,30,22,17,43,34,111,37,110,30,9,2,34,31,31,24,24,15,1,11,33,30,22,36,29,110,106,127,138,146,145,153,154,147,145,124,144,6,2,2,6,6,13,20,17,17,8,49,39,129,106,106,111,115,164,162,169,168,162,171,169,169,162,168,168,168,171,171,169,168,168,168,168,171,194,171,173,171,177,194,202,203,195,198,204,199,200,200,198,204,204,200,200,204,200,200,203,198,203,198,198,202,199,203,199,203,195,179,198,198,179,198,202,179,179,179,179,194,169,173,179,168,179,179,198,199,199,196,203,198,195,179,179,179,179,168,171,174,173,171,171,171,169,173,194,173,194,179,194,179,179,195,179,194,198,202,179,179,198,179,198,198,198,198,179,198,198,179,200,195,200,204,204,204,201,201,200,201,201,205,201,205,201,206,201,206,206,206,131,
+89,84,38,5,2,2,13,21,32,34,139,147,149,130,117,133,149,136,6,2,2,6,2,7,29,110,153,150,111,6,8,114,144,152,4,14,46,24,24,13,16,137,128,3,114,142,150,150,115,142,114,11,109,115,31,110,7,6,2,2,11,16,110,122,145,140,115,137,154,123,6,6,2,47,20,2,6,7,16,109,119,108,126,8,15,17,17,2,21,31,30,16,30,47,34,68,110,48,132,31,46,24,15,34,24,13,16,30,13,2,2,7,2,7,13,18,21,24,31,15,43,20,109,8,2,1,5,11,22,6,2,13,30,32,30,24,106,46,47,32,33,6,2,18,30,36,16,117,6,2,30,37,43,22,30,45,106,132,125,144,153,153,153,153,151,151,149,126,11,2,2,6,6,6,18,31,33,14,13,8,49,47,8,111,164,169,169,169,162,168,162,168,168,169,171,168,171,169,171,168,168,169,168,162,194,169,179,171,171,194,179,179,196,199,200,203,204,199,198,200,200,198,204,198,201,200,199,199,199,199,198,198,179,202,195,203,196,179,198,198,179,202,179,198,179,179,179,179,171,179,171,177,179,179,194,179,199,199,199,199,196,203,195,198,198,179,179,179,179,169,173,174,194,171,179,179,194,169,179,179,179,179,179,198,179,198,194,179,179,198,198,179,198,199,179,198,203,198,198,198,195,203,198,204,201,200,204,201,204,201,205,205,201,201,205,206,201,206,201,74,
+89,90,91,90,71,2,7,22,47,119,139,182,149,140,106,132,150,132,11,2,2,2,6,7,16,119,154,151,17,13,29,152,150,140,2,14,119,110,29,1,7,117,33,126,147,128,150,150,105,138,127,6,109,109,128,37,7,2,2,5,6,14,123,144,126,127,128,153,152,125,8,6,6,119,19,5,6,14,34,122,109,111,47,19,13,13,11,6,16,13,13,22,34,106,32,36,106,33,34,18,33,18,31,29,18,13,29,11,2,2,6,2,2,2,12,11,17,108,33,24,109,31,122,6,2,1,2,13,22,8,6,16,34,33,16,46,106,120,116,132,144,109,5,121,16,22,129,122,2,5,36,30,29,29,22,47,36,132,127,139,151,153,153,148,151,137,149,34,2,6,2,11,17,22,21,17,22,109,157,166,171,78,157,166,169,169,169,171,168,168,169,169,169,162,168,168,168,168,168,169,162,168,169,171,171,173,173,171,171,179,202,179,203,200,198,203,200,199,200,198,204,196,204,196,198,196,199,203,199,198,198,203,179,198,179,198,198,203,195,179,198,198,198,179,179,198,173,179,179,194,194,177,179,179,179,198,179,198,199,200,196,203,199,199,198,198,198,202,179,179,198,194,202,179,179,179,179,179,179,173,179,179,198,179,198,179,198,179,198,179,179,198,199,198,198,198,195,198,198,203,195,200,200,203,200,204,201,200,201,205,201,201,205,205,201,201,205,201,206,74,
+90,90,91,90,90,38,11,129,130,47,120,133,133,123,29,149,147,125,16,7,11,6,2,11,22,130,146,136,11,6,33,150,137,144,111,24,33,43,114,22,132,119,109,106,8,8,138,148,8,146,125,11,114,18,46,18,2,2,2,2,2,29,116,114,126,145,153,152,144,128,16,6,6,137,20,6,6,6,11,20,109,18,114,22,6,13,11,11,6,6,30,30,29,106,30,30,46,17,36,17,30,24,15,30,15,4,7,6,2,2,2,6,6,2,6,13,1,16,11,8,33,32,136,2,1,2,6,12,17,11,6,30,34,34,46,109,116,124,141,140,141,136,126,8,32,134,149,17,1,2,43,30,16,21,36,133,43,120,125,144,150,183,150,149,146,147,129,6,6,11,8,17,34,17,31,21,24,78,168,162,160,168,162,162,167,171,171,169,168,168,168,168,169,169,168,169,162,169,171,168,168,168,171,171,177,179,179,179,194,179,198,202,199,199,203,198,198,203,199,196,196,199,203,199,199,203,195,199,198,179,198,198,198,198,198,203,179,198,203,195,203,198,196,198,179,179,194,179,179,179,194,179,194,179,179,198,198,198,199,199,199,203,198,198,179,198,179,199,203,196,196,199,179,198,179,179,198,178,173,198,195,198,198,198,198,195,199,198,198,195,179,198,198,198,198,200,203,199,196,198,199,199,196,198,199,203,200,201,204,201,201,205,206,201,205,206,201,206,205,131,
+82,90,89,90,91,82,38,30,32,34,132,139,138,133,119,147,137,140,11,13,11,11,13,13,32,124,153,19,11,30,132,126,144,145,115,119,122,21,22,22,17,29,8,6,17,106,143,105,114,150,111,6,33,114,17,34,2,6,2,2,11,16,123,138,126,153,143,143,115,140,8,6,6,135,111,6,6,7,7,24,24,24,114,19,11,13,13,22,2,11,4,16,30,46,17,30,116,22,14,17,16,30,16,45,32,164,2,7,6,7,2,10,9,11,7,14,6,13,24,119,15,34,132,1,1,2,2,11,30,11,7,29,37,24,119,149,149,141,139,144,139,133,136,109,47,130,136,109,5,2,36,30,29,43,120,130,106,120,139,147,148,145,147,141,140,33,6,10,13,16,36,16,21,29,16,68,169,162,156,156,160,162,162,162,168,168,194,162,194,162,168,160,162,168,168,168,169,169,162,168,169,171,173,171,179,179,198,179,179,202,199,179,200,195,196,198,203,200,200,199,198,198,199,198,195,199,203,179,198,179,202,179,194,198,179,179,202,198,179,196,199,199,203,195,198,202,179,179,179,179,198,179,179,202,179,179,198,179,198,199,203,199,198,179,198,203,196,200,199,199,203,196,199,203,198,195,179,198,198,198,179,196,203,198,199,199,199,195,199,198,198,198,199,203,200,195,198,204,198,198,195,200,195,198,199,196,203,198,204,204,201,201,205,205,205,201,205,201,205,74,
+89,86,89,89,89,90,86,7,21,116,140,144,139,147,120,144,151,108,13,11,13,13,13,18,43,119,141,11,17,144,138,133,144,128,24,137,125,116,31,13,16,33,17,15,24,24,31,20,142,150,18,29,123,146,144,31,6,11,2,2,7,7,106,137,136,148,138,146,108,136,6,6,13,147,122,6,13,1,7,22,34,17,109,111,13,15,15,18,15,33,44,23,22,33,13,34,47,106,43,22,47,31,35,29,46,40,2,29,13,13,2,1,5,21,13,11,2,119,133,116,15,130,22,2,1,2,2,35,28,2,13,30,119,132,149,183,133,141,133,133,141,132,130,33,132,130,117,43,2,7,21,36,37,47,47,47,120,118,120,138,147,148,146,142,116,13,13,15,30,11,21,28,66,165,29,159,162,162,162,160,162,162,160,169,162,168,162,168,162,162,162,162,160,162,168,162,162,169,169,168,168,169,194,173,194,173,179,202,198,196,179,200,202,199,199,200,198,204,198,204,199,199,199,195,203,195,179,198,198,202,179,198,179,179,179,198,179,198,199,203,199,199,199,203,198,202,198,179,198,198,203,198,179,198,198,198,198,198,179,199,198,203,198,199,195,179,196,198,179,198,198,198,179,199,195,202,203,199,199,199,195,179,199,199,199,203,198,200,200,196,199,200,195,200,203,200,200,198,200,203,199,199,199,195,199,199,199,199,198,201,204,204,201,206,201,205,201,205,200,74,
+84,85,85,86,85,89,89,7,32,36,132,130,144,132,139,144,140,19,17,13,13,13,34,111,22,34,142,11,114,144,147,149,144,125,125,140,32,32,31,44,119,114,21,34,109,114,151,18,150,140,6,135,152,144,122,17,30,34,11,2,5,11,133,135,32,138,146,151,108,125,6,6,24,139,109,2,6,13,13,32,34,34,136,31,8,17,17,18,33,46,22,29,34,22,11,106,132,34,118,119,18,120,14,48,46,2,5,5,1,5,2,5,1,2,5,1,11,117,110,33,18,132,11,2,1,2,5,29,13,2,21,130,134,130,141,149,149,133,133,139,133,119,117,46,141,110,47,1,5,5,28,30,110,31,117,106,116,106,109,116,142,142,20,140,32,16,36,15,120,164,162,173,169,171,166,171,194,162,169,168,168,162,171,160,168,162,162,162,160,161,162,169,160,160,98,160,160,160,162,162,168,171,169,171,179,179,198,177,198,203,195,198,199,204,198,200,200,198,200,200,200,199,198,199,203,199,195,179,198,198,179,179,179,179,179,179,179,179,198,195,199,199,198,199,198,179,195,198,198,179,198,199,195,198,179,199,179,198,202,198,179,196,200,203,203,199,178,203,198,195,198,198,203,198,203,198,200,198,200,195,200,195,198,198,198,196,203,203,198,204,200,203,200,204,198,204,200,200,200,200,195,203,200,198,199,199,198,199,199,198,204,201,204,201,201,201,205,201,201,131,
+89,89,89,89,90,90,95,26,13,32,132,139,182,138,140,128,125,125,20,11,11,13,17,116,33,130,144,11,116,122,111,109,115,114,111,110,16,29,16,130,109,44,13,34,106,119,126,126,144,132,133,144,144,122,139,109,29,106,13,2,31,21,48,47,16,126,149,146,138,133,16,13,119,116,17,6,6,11,13,22,24,116,120,11,17,46,17,17,24,15,17,36,119,130,6,106,119,132,149,122,130,24,11,37,20,1,2,5,7,2,2,2,5,2,2,6,21,34,34,120,116,15,6,1,2,2,2,30,3,6,30,33,132,46,129,180,133,133,141,132,119,129,120,141,139,149,31,1,2,11,29,22,33,116,119,116,116,129,132,122,145,125,110,18,16,22,16,74,179,169,169,162,171,169,194,169,171,169,175,169,171,169,168,162,160,162,156,159,160,160,169,159,160,160,156,159,160,160,168,162,162,168,173,194,177,179,179,198,179,200,195,179,196,200,204,200,204,204,199,204,199,196,199,198,199,195,203,198,179,202,198,179,179,179,179,202,198,198,179,200,203,179,200,198,198,198,202,179,196,203,196,203,199,195,199,199,195,179,179,198,202,179,199,196,203,195,199,195,203,199,196,198,198,203,200,198,200,200,195,203,203,195,200,199,199,196,198,200,200,204,198,201,201,200,203,198,201,200,204,198,201,199,199,203,199,198,199,199,198,195,200,200,200,204,204,205,201,204,201,74,
+89,90,89,90,85,91,90,27,32,119,139,136,137,136,126,127,143,145,109,11,11,14,16,106,126,132,106,17,119,140,18,108,125,114,114,106,24,16,22,119,16,110,21,46,43,110,151,145,33,116,149,126,150,126,138,20,13,13,2,2,5,33,11,6,7,140,151,127,126,34,109,70,34,11,6,6,6,7,14,34,109,119,24,2,44,106,126,43,33,30,30,47,123,11,29,106,147,137,149,136,124,132,11,132,24,1,2,2,5,13,1,2,2,5,2,2,23,46,32,132,132,21,2,5,2,2,2,70,68,16,21,130,133,120,133,117,182,133,133,119,130,120,120,149,133,141,24,1,2,13,21,43,125,118,109,116,132,119,114,124,144,140,36,17,66,168,167,168,168,168,194,171,173,171,171,173,171,171,173,162,194,160,168,160,162,160,160,162,162,162,156,159,160,160,97,156,160,160,162,167,169,171,171,179,177,179,199,179,199,203,199,199,203,195,198,204,200,199,204,199,200,203,203,195,203,179,179,198,202,198,179,179,179,202,179,179,198,179,198,198,199,202,198,198,179,198,198,202,198,203,198,204,199,195,199,195,199,199,195,179,198,202,198,198,199,203,199,199,198,200,199,198,200,198,200,200,200,198,200,198,198,200,198,198,198,203,198,196,198,204,200,200,198,204,200,204,200,204,198,204,198,204,200,198,195,198,200,199,199,199,199,198,200,200,204,200,204,204,200,74,
+89,90,91,90,91,90,91,71,133,120,130,114,109,114,119,128,150,146,33,11,13,21,22,46,110,37,24,46,138,126,8,46,144,149,126,34,17,22,30,22,34,22,16,31,34,123,149,126,18,148,108,138,138,126,139,116,2,2,11,6,11,14,2,11,11,123,130,19,148,125,115,15,11,7,7,2,6,7,29,132,133,106,123,6,36,106,120,34,33,15,46,126,116,11,34,183,149,151,139,132,129,124,11,37,13,2,6,10,5,2,2,2,5,2,2,7,43,110,110,133,130,2,2,2,2,9,13,13,2,6,21,130,144,149,145,133,47,139,147,125,132,132,129,141,133,132,33,1,2,35,11,117,120,109,44,114,120,124,118,106,149,31,69,14,78,168,168,168,171,169,171,169,177,194,169,173,171,177,173,173,171,169,162,160,160,159,160,162,160,160,160,159,159,160,156,160,162,160,162,168,168,171,173,194,179,198,179,202,199,196,195,179,196,203,203,204,199,196,203,204,196,199,196,200,203,195,202,198,179,194,179,179,179,177,179,198,198,202,198,179,195,198,198,179,198,198,177,198,199,198,203,198,200,199,203,196,203,203,203,195,179,198,179,198,199,196,203,199,198,196,198,200,200,195,200,195,200,198,204,195,200,195,198,198,200,198,195,198,203,200,204,204,200,201,200,204,201,200,200,203,200,198,204,198,196,196,198,198,200,203,199,198,199,204,200,196,200,200,204,131,
+89,89,89,89,89,90,85,71,6,17,125,138,139,137,136,147,150,139,86,60,29,16,22,67,101,92,96,46,126,114,15,116,126,144,132,34,22,120,22,30,47,13,16,129,106,132,144,115,32,150,136,123,144,126,144,18,11,22,123,13,47,13,2,11,24,122,18,139,138,126,143,19,6,6,6,6,2,13,8,116,18,36,110,16,16,106,132,123,33,36,136,181,109,37,120,181,136,141,138,120,33,22,10,30,2,2,2,5,2,11,2,1,2,2,6,5,45,33,120,119,33,1,2,2,2,1,11,21,6,2,30,133,124,47,151,147,31,132,144,149,126,119,132,144,126,144,34,1,11,21,29,117,120,109,109,118,116,124,128,43,45,163,162,98,173,162,168,171,169,169,175,171,169,173,173,169,177,171,177,171,168,162,162,162,162,160,160,162,169,167,169,160,162,159,160,156,169,162,162,168,171,173,194,202,198,198,203,198,199,203,203,195,198,200,200,195,203,198,199,198,204,203,203,198,179,198,179,179,198,179,179,198,198,198,202,179,198,179,198,198,179,198,179,198,177,198,198,179,203,199,199,203,198,199,199,198,200,198,195,203,195,179,198,198,203,196,200,198,204,200,200,198,196,204,195,204,200,204,198,204,204,198,200,204,195,204,204,200,204,198,195,204,201,204,201,201,203,201,203,200,200,204,200,200,203,199,199,203,199,198,200,198,198,200,199,204,198,201,200,74,
+89,89,89,85,90,91,89,90,6,13,123,144,140,136,119,140,148,79,89,90,79,75,75,90,92,91,96,59,13,33,138,144,149,182,96,53,22,32,30,34,20,31,26,23,132,144,149,114,22,150,136,122,136,133,150,8,29,114,126,8,119,13,7,2,132,105,119,144,34,16,150,20,11,6,6,2,2,6,29,115,32,114,136,8,22,132,130,133,132,130,141,126,33,130,119,151,110,130,133,138,109,16,14,6,2,5,6,2,10,2,6,1,1,2,7,6,30,123,109,109,15,6,1,2,5,2,2,2,11,1,36,151,123,34,149,144,106,133,141,133,132,116,144,144,145,147,17,2,2,22,31,36,36,116,109,116,122,113,148,169,162,171,169,171,162,171,171,169,171,177,177,168,177,175,171,171,168,169,194,171,169,162,160,162,162,159,169,162,162,162,162,160,162,160,162,160,167,162,162,168,171,202,194,202,179,198,179,196,196,200,199,203,198,200,198,199,198,200,200,203,198,200,198,179,198,198,198,179,179,179,179,179,202,179,198,198,179,198,179,198,199,198,198,198,179,179,198,199,196,198,199,199,199,204,200,198,200,198,200,198,199,198,198,179,198,199,198,205,203,198,200,200,204,198,204,204,204,195,201,204,195,201,195,204,195,204,195,204,195,200,200,198,204,204,201,200,201,200,201,200,203,200,200,204,200,200,198,200,199,196,199,199,196,198,199,203,199,198,200,131,
+89,86,89,90,86,88,91,100,6,6,33,126,142,138,122,106,48,90,89,90,86,90,90,91,91,90,92,59,106,116,119,117,48,87,96,96,49,11,32,29,7,33,33,21,47,36,29,11,114,150,144,123,106,138,151,105,34,114,120,29,129,119,123,104,114,18,137,132,11,24,153,19,2,11,6,6,2,7,17,123,106,106,135,20,36,130,110,132,132,120,130,24,24,139,133,130,120,106,136,123,130,116,2,2,2,2,2,11,2,2,2,2,1,2,2,2,34,109,111,33,2,2,6,2,2,5,2,5,7,11,29,136,122,36,133,149,24,141,145,136,136,133,140,141,133,126,8,2,21,36,13,46,109,109,118,118,125,127,140,194,160,171,168,168,168,168,167,168,169,171,171,177,171,171,177,175,173,171,162,168,162,162,162,161,162,169,162,162,168,162,162,162,162,168,162,162,168,162,171,171,194,173,179,198,179,198,203,199,199,196,198,200,196,198,200,203,199,199,198,196,198,203,198,199,195,179,179,179,194,198,179,198,202,179,179,179,202,179,202,179,198,179,198,179,198,179,198,179,199,200,200,203,198,200,198,204,198,200,200,203,203,195,179,198,199,199,200,198,201,203,200,204,195,201,201,204,201,204,200,204,201,204,201,201,201,204,201,201,204,195,204,201,204,204,204,204,204,201,200,200,204,201,203,198,200,200,198,204,199,198,200,199,199,199,195,196,199,203,195,74,
+85,85,85,85,89,89,86,90,58,11,126,128,128,132,134,77,95,89,91,90,90,91,86,90,86,91,92,71,66,68,77,100,91,92,91,96,96,62,34,16,30,123,18,13,32,8,11,16,149,150,147,33,106,128,146,144,120,133,31,34,110,133,149,154,148,22,122,105,11,24,145,8,11,7,2,2,7,6,37,125,45,47,106,106,30,117,106,129,136,46,29,24,110,144,109,34,136,120,137,124,126,116,0,6,1,11,2,2,6,6,2,6,1,1,6,2,46,138,125,15,6,2,2,2,6,1,2,2,31,31,30,144,137,117,37,133,30,153,149,145,133,119,138,122,119,124,11,2,2,8,43,111,126,33,33,111,125,115,145,198,168,162,169,168,168,162,168,162,168,168,162,171,169,162,171,171,171,171,168,168,162,168,162,160,168,168,162,168,168,169,162,162,171,162,168,168,162,168,171,173,179,198,198,202,194,198,195,203,199,203,195,198,204,203,196,203,200,199,200,199,198,179,199,198,203,179,198,179,179,179,202,179,179,179,198,179,198,198,198,198,202,179,198,198,202,173,195,199,198,195,198,201,200,198,204,200,200,203,198,200,200,200,203,196,198,199,200,204,204,201,205,201,204,201,204,201,204,201,204,201,204,204,204,201,204,201,201,200,204,201,195,204,204,200,201,204,200,204,204,204,199,200,200,195,200,200,200,198,204,200,203,198,199,203,203,199,198,199,195,74,
+89,89,89,85,85,89,89,85,90,61,36,123,121,78,84,89,82,85,85,90,76,90,91,89,91,90,86,90,91,85,91,90,91,91,91,91,92,102,39,11,17,138,17,13,30,7,2,29,123,149,126,20,139,152,151,138,136,125,10,130,147,153,153,144,147,126,144,114,17,106,145,11,7,7,6,2,6,6,119,116,34,106,47,106,33,47,34,47,126,11,8,109,141,143,29,132,116,119,141,144,151,24,2,1,2,11,2,6,2,7,13,2,2,6,1,2,129,122,132,22,2,2,2,5,1,5,2,6,36,129,116,129,141,122,120,132,30,126,133,133,136,140,132,132,110,125,11,2,13,46,110,126,146,127,29,24,150,128,147,169,169,169,168,162,162,162,168,162,168,162,169,169,162,168,171,173,171,169,168,168,168,169,162,162,162,162,162,168,169,162,171,169,162,162,160,162,171,171,171,194,179,202,179,198,198,203,199,198,204,200,200,200,203,198,200,195,198,204,198,196,200,198,203,195,196,198,202,179,179,179,194,202,179,179,202,179,195,179,198,179,198,179,198,179,198,198,179,203,199,203,200,195,204,204,200,198,200,200,204,199,198,196,198,199,204,200,201,201,204,201,201,204,205,201,201,204,201,201,204,201,204,201,201,204,201,204,201,204,204,204,201,200,201,204,204,201,204,204,204,200,199,200,200,200,198,199,202,200,198,200,199,199,200,200,195,200,200,198,200,131,
+85,85,86,88,85,89,84,84,89,89,89,82,84,84,82,84,89,85,90,91,90,90,85,89,91,85,90,90,89,90,89,91,89,86,91,91,92,96,62,30,46,122,16,32,30,13,2,24,144,152,148,20,149,144,142,124,106,110,15,120,153,151,144,111,149,139,128,127,8,138,144,6,7,6,2,2,13,7,132,33,106,128,127,108,29,22,116,44,123,8,11,116,136,136,16,124,132,114,153,141,68,11,2,2,5,1,11,2,11,13,21,6,2,2,2,6,117,149,132,13,2,2,5,25,1,2,6,7,47,120,120,120,124,151,105,31,18,132,120,132,133,124,123,110,47,117,6,2,11,33,116,136,140,138,104,113,141,126,130,169,169,168,162,171,169,160,168,168,171,171,171,177,168,171,194,169,177,171,169,162,171,168,169,169,169,169,162,162,169,169,162,168,160,160,159,160,162,171,171,194,173,198,179,202,179,200,198,200,203,199,200,199,200,200,200,200,203,198,200,179,196,199,196,203,179,179,179,179,202,179,198,179,198,198,179,195,179,203,178,202,195,179,196,199,198,179,200,198,198,198,200,200,203,200,198,200,200,204,196,200,204,200,200,200,195,204,201,201,201,206,201,205,201,205,206,201,204,201,204,201,201,201,204,201,201,205,201,204,201,201,204,201,200,200,201,200,201,203,200,204,199,199,202,199,199,199,198,199,203,198,200,202,199,198,198,199,199,202,179,74,
+89,89,85,89,82,84,84,82,84,82,84,84,84,84,89,85,86,89,85,85,91,89,90,91,82,91,85,91,88,91,90,90,89,91,90,86,90,86,92,75,130,43,30,29,11,11,7,141,152,151,144,151,138,143,150,128,119,8,43,110,148,147,143,145,115,109,132,126,15,153,128,6,7,14,29,16,11,13,136,15,30,138,143,20,11,34,124,24,132,31,36,133,124,132,34,119,149,119,144,124,6,2,5,2,2,6,6,2,14,47,22,21,13,6,2,2,68,125,33,2,6,10,2,1,2,5,1,13,119,119,15,32,133,116,130,133,33,106,120,110,130,132,139,120,110,6,2,6,13,106,132,119,132,127,140,126,18,69,156,162,162,168,169,169,162,171,169,171,169,171,171,162,194,162,171,171,162,194,168,194,162,171,171,162,171,169,162,169,162,160,162,156,156,156,156,156,160,169,168,171,194,179,179,179,198,198,202,179,200,202,199,199,199,200,200,200,199,200,199,198,199,203,199,200,198,198,179,173,198,198,179,202,179,198,198,203,195,179,202,194,198,203,199,203,199,198,198,199,203,200,200,203,198,198,204,198,200,195,204,204,198,200,204,204,200,201,204,205,205,206,206,201,206,201,206,205,201,201,205,201,204,201,201,201,204,201,201,204,201,200,204,201,204,204,204,204,200,204,204,195,202,194,198,199,198,177,198,179,198,179,179,198,198,179,198,179,198,177,179,74,
+89,84,84,85,84,84,84,84,82,84,84,84,84,82,84,84,84,85,89,85,85,90,89,85,91,90,91,89,89,89,89,90,91,90,85,91,90,90,91,91,95,13,13,2,16,17,6,120,151,137,141,144,150,142,142,138,17,13,33,37,153,152,146,145,142,115,110,111,122,124,13,6,7,36,110,114,109,22,47,2,29,129,150,20,23,34,116,47,123,116,117,133,149,126,68,133,141,130,149,125,2,2,2,1,2,2,2,11,106,36,47,22,46,29,31,18,117,139,136,2,2,2,6,2,2,5,2,13,116,29,18,17,36,109,43,116,29,29,119,106,130,123,106,106,132,24,2,2,11,119,110,120,132,144,140,45,159,161,156,162,161,168,162,169,169,162,171,171,171,173,171,171,171,162,169,169,169,171,171,169,171,168,168,171,162,169,162,160,160,156,98,103,98,103,103,156,156,160,162,168,171,171,171,177,179,177,198,177,194,202,179,198,196,199,204,204,204,199,195,198,198,202,198,179,200,179,198,198,179,179,198,198,202,179,195,179,198,198,198,179,199,179,198,203,200,203,199,200,200,200,198,200,200,203,200,195,200,204,200,204,200,204,201,200,203,204,201,204,201,205,201,205,206,206,201,205,205,204,201,205,201,204,201,204,201,201,204,201,204,204,204,201,204,201,200,200,200,198,199,199,198,198,198,179,198,177,194,179,202,179,194,173,179,199,194,173,194,171,171,74,
+84,84,84,84,84,84,84,84,82,84,82,84,84,84,84,88,85,85,89,89,89,91,85,90,85,85,85,89,89,89,89,91,90,89,91,90,90,89,90,90,95,12,11,6,22,24,7,130,149,148,145,138,150,143,150,106,15,24,13,47,147,149,127,143,115,17,18,17,132,29,2,11,7,24,109,125,149,106,30,6,16,34,132,15,16,34,138,117,133,140,139,182,186,22,120,149,136,151,37,132,3,5,2,2,2,6,5,6,106,114,48,16,15,22,136,119,181,24,130,6,2,5,2,2,2,2,2,21,116,124,29,34,120,33,110,46,18,29,30,119,120,130,119,47,47,32,6,2,13,43,119,132,133,124,17,87,160,160,156,156,160,162,162,169,162,169,168,168,168,168,168,169,162,160,159,160,162,162,168,168,162,162,162,162,161,160,160,156,103,98,98,98,98,98,98,98,98,98,160,161,168,169,168,171,171,171,171,177,179,179,194,179,179,199,203,199,199,198,198,203,199,179,198,203,198,198,202,179,198,198,198,179,200,199,203,199,179,198,179,198,179,198,198,199,199,200,200,203,196,200,203,200,200,200,200,200,200,200,198,204,200,201,200,204,201,204,200,201,201,204,201,201,206,201,206,201,205,201,201,201,204,201,201,201,204,201,204,201,205,204,201,203,200,198,204,200,203,199,198,194,177,179,179,177,194,194,179,177,194,173,173,194,194,177,179,173,169,160,162,69,
+82,84,82,82,84,82,82,82,82,84,82,84,84,84,84,88,89,85,86,89,89,89,86,88,90,85,86,82,85,89,89,85,85,89,89,89,89,89,89,89,95,61,14,129,129,29,34,116,141,149,144,138,145,150,115,4,22,122,15,117,140,127,149,143,150,111,18,192,18,7,2,6,13,13,24,128,126,110,15,2,21,110,126,6,22,130,141,45,133,153,151,144,116,6,181,132,47,120,34,106,20,2,5,11,6,2,6,7,123,122,109,11,22,17,110,123,141,14,20,2,11,6,2,12,2,5,2,13,106,120,30,32,46,106,46,36,106,43,47,120,132,120,120,45,106,24,15,11,29,31,47,149,120,97,87,98,103,159,160,161,156,160,169,162,160,169,156,160,162,168,162,161,160,156,160,156,156,162,168,169,168,162,156,160,156,160,103,98,98,96,102,92,92,92,98,98,98,103,93,159,161,162,162,156,168,162,169,160,173,171,171,173,194,202,194,203,203,200,195,199,199,203,199,179,200,198,198,198,179,198,200,199,202,196,198,200,203,198,199,203,198,179,198,179,196,204,200,204,200,200,200,200,198,200,199,199,199,199,203,200,200,204,200,200,204,204,204,201,200,201,205,204,201,201,205,205,201,206,205,204,201,201,201,205,201,201,201,204,204,200,200,198,199,200,179,198,179,177,179,179,169,194,162,168,177,177,169,194,169,162,171,177,171,173,171,194,162,171,169,74,
+84,84,82,82,82,82,84,84,84,82,84,82,82,82,84,85,89,85,85,85,85,85,88,85,85,85,85,88,84,84,84,88,89,84,89,85,86,89,89,89,90,61,14,23,29,29,22,119,106,122,47,34,149,146,146,114,18,46,17,139,150,145,153,152,125,153,114,27,2,11,2,7,7,13,34,146,149,124,6,2,47,153,153,8,45,141,110,106,47,150,148,138,6,120,119,132,22,119,45,47,111,2,31,125,33,13,11,11,117,24,109,15,13,13,106,147,125,36,126,2,21,16,2,1,1,2,11,13,116,47,17,36,43,43,31,43,116,43,43,46,46,47,119,46,133,106,24,34,33,116,132,164,92,97,103,98,98,103,160,160,160,161,160,156,162,160,160,162,168,162,160,156,159,160,156,160,156,162,162,160,161,160,160,161,156,160,98,92,92,92,96,92,96,101,92,92,98,98,98,98,98,103,98,160,156,160,159,160,169,167,169,171,171,171,173,194,179,198,179,199,195,198,202,199,199,198,179,179,198,198,179,200,198,199,200,200,200,195,199,198,179,200,198,203,195,200,200,198,204,204,204,199,203,200,198,199,179,200,179,200,199,199,199,199,204,204,201,204,200,204,204,201,205,205,205,201,205,204,197,205,201,204,204,204,205,201,204,205,200,200,199,179,202,179,199,194,173,194,177,171,169,169,169,169,171,171,177,169,162,168,171,171,168,168,162,168,162,169,162,69,
+84,82,81,82,84,81,88,84,82,82,82,84,82,84,84,84,84,84,82,85,89,84,85,84,88,84,84,82,84,82,84,85,85,85,90,85,90,85,89,95,91,82,0,2,11,106,11,106,36,46,22,22,153,145,148,127,17,29,8,149,149,142,153,154,144,153,20,5,2,11,7,6,7,13,34,126,138,32,16,5,36,147,149,8,129,136,31,16,132,146,140,11,33,123,147,141,15,47,29,43,114,4,123,105,182,185,3,13,30,110,33,24,20,126,147,124,136,129,147,2,7,13,2,5,2,2,11,47,130,29,29,47,116,116,124,114,33,31,138,116,136,132,138,114,186,144,120,46,23,35,71,96,96,93,98,98,98,98,160,159,160,156,160,156,160,156,160,156,162,156,160,156,103,156,160,156,162,169,160,160,162,160,160,160,161,98,96,102,92,92,92,92,91,92,92,92,92,96,101,98,98,98,98,98,98,98,103,159,160,160,160,162,162,168,169,168,173,194,179,179,198,179,179,179,179,198,179,194,179,179,198,203,198,198,198,199,204,204,202,196,199,199,179,199,203,195,203,200,200,203,198,203,198,179,179,179,179,198,179,198,179,202,179,198,179,199,199,199,200,200,204,201,204,201,201,205,206,201,204,201,200,201,204,200,201,204,200,200,203,199,198,198,202,194,169,177,171,171,177,168,162,162,162,169,169,169,171,168,168,169,169,169,168,160,162,162,160,162,160,73,
+82,82,84,82,84,84,81,82,82,82,81,85,81,84,82,82,84,82,84,84,82,90,89,88,84,84,88,84,84,84,84,85,88,85,88,89,85,90,90,88,89,95,40,2,14,133,2,45,30,47,11,29,150,146,142,142,33,11,43,144,152,151,126,140,123,152,109,2,5,6,6,7,6,11,13,110,109,17,30,2,21,144,133,11,20,114,109,36,133,149,128,22,138,141,144,122,30,33,33,23,116,144,128,130,136,136,6,11,33,106,120,123,109,141,146,123,129,119,116,0,5,72,64,2,2,6,7,37,22,7,117,120,130,120,129,120,120,43,119,130,132,130,31,138,154,149,111,120,77,95,95,91,97,102,98,98,98,98,103,160,159,103,97,160,156,160,156,161,160,160,156,160,160,156,160,160,162,162,156,169,169,160,156,160,156,98,98,96,92,91,91,91,91,91,91,91,92,92,91,92,92,92,98,92,98,98,98,98,156,156,156,160,156,160,160,162,162,169,171,168,168,168,169,168,173,179,179,179,179,171,179,199,198,179,198,198,198,179,200,202,203,198,203,200,203,203,200,199,204,202,200,199,198,179,169,171,173,173,171,177,179,194,177,194,173,198,198,198,198,199,200,204,200,201,201,204,201,205,201,201,204,201,201,201,204,203,199,198,179,198,177,177,179,177,162,162,168,168,168,162,168,162,167,168,162,162,160,169,162,171,162,162,162,162,160,160,160,159,159,73,
+84,84,82,84,82,82,84,84,84,81,85,83,85,81,82,84,82,84,82,84,88,85,85,82,84,84,84,84,84,84,84,88,84,89,88,88,89,88,85,90,90,88,54,7,43,33,6,5,33,20,13,16,148,150,143,148,122,16,47,144,120,122,15,106,46,138,33,2,2,11,6,6,6,7,13,31,33,14,30,5,7,119,124,11,37,106,120,36,151,153,127,111,124,138,132,33,30,30,22,43,114,186,140,147,132,17,6,21,118,30,116,137,132,136,130,110,36,139,120,2,5,6,2,38,2,11,11,43,2,11,119,37,120,36,120,47,124,110,47,47,132,31,46,144,154,119,46,85,89,89,90,85,92,87,98,98,98,103,98,156,103,159,103,156,160,156,156,160,162,160,156,160,156,160,160,160,162,161,156,160,156,160,160,98,103,98,96,92,92,91,101,91,90,91,91,91,92,91,92,92,92,101,92,93,98,98,103,98,103,98,98,98,98,103,156,160,103,156,156,160,156,98,103,159,156,169,171,173,179,179,179,194,179,179,179,194,179,198,198,179,198,179,179,198,179,199,200,200,199,203,199,199,198,179,168,168,162,162,169,168,162,169,169,171,168,171,177,198,179,202,200,204,201,203,201,205,204,201,201,204,201,201,203,204,200,202,179,198,177,194,173,171,169,171,162,162,168,162,162,162,162,162,162,162,160,168,162,162,162,160,162,160,162,160,156,160,156,156,156,71,
+81,84,81,84,81,81,84,82,81,81,85,81,81,82,81,84,81,88,84,84,84,84,88,85,84,84,84,82,84,84,84,88,85,85,88,88,85,88,88,88,85,85,85,7,5,2,2,6,29,17,17,138,153,152,150,144,125,112,24,132,119,20,109,34,120,127,13,2,11,2,7,6,6,11,17,46,33,16,116,1,2,130,126,3,45,130,114,106,151,148,127,125,126,125,128,31,109,18,36,116,151,183,153,132,46,13,115,125,136,33,47,130,141,150,120,8,119,133,17,1,6,2,2,25,1,2,12,1,6,37,132,47,120,118,106,132,141,109,29,106,20,113,140,124,120,130,65,90,89,90,86,90,91,91,92,98,98,98,98,103,98,98,103,160,156,160,160,160,156,160,156,161,160,156,160,160,156,160,161,156,160,160,98,103,98,98,98,96,92,91,90,91,91,91,91,102,91,92,96,91,102,91,96,102,92,101,98,98,92,101,96,96,91,96,96,98,98,98,102,96,92,92,92,92,98,98,160,169,169,173,171,173,173,173,171,171,171,169,173,179,173,173,171,173,179,198,202,179,179,198,202,179,179,173,169,160,160,156,159,160,156,160,162,160,160,169,171,179,194,203,198,204,201,200,204,204,204,204,204,204,200,204,200,179,198,198,177,171,168,169,169,168,162,160,162,161,162,162,162,162,162,169,169,162,162,162,162,160,162,162,162,160,160,160,160,103,98,103,98,72,
+81,81,84,84,81,81,85,81,81,81,81,81,82,84,82,84,82,84,84,84,82,84,84,82,82,84,82,84,81,84,84,84,84,84,88,85,84,84,84,88,88,88,95,51,2,2,5,2,13,22,109,150,153,150,128,125,139,153,122,132,132,31,18,110,132,15,5,2,2,11,2,7,14,123,126,116,37,11,106,2,6,106,144,22,30,116,110,34,145,144,132,127,125,151,151,24,106,33,45,141,149,142,153,122,15,21,138,153,142,132,114,147,114,132,138,130,138,110,6,2,2,9,2,2,2,6,5,2,2,130,130,44,130,117,47,47,123,33,33,136,153,124,149,30,65,86,90,86,84,88,90,91,90,91,91,87,97,96,98,98,98,103,98,159,103,159,160,161,160,160,160,98,103,160,161,161,160,161,156,160,156,98,103,98,92,96,98,101,92,92,91,92,91,101,92,102,92,91,92,92,92,91,91,92,92,92,92,91,91,92,91,91,90,79,92,91,92,92,87,92,91,90,91,92,92,87,98,98,159,97,160,161,168,162,160,168,162,162,156,169,173,162,169,169,171,173,194,202,194,179,179,194,162,167,156,156,98,98,98,160,156,98,98,97,159,156,173,194,202,179,198,199,198,200,202,200,200,200,200,200,200,199,199,202,194,169,171,162,162,162,160,156,162,156,160,156,162,156,160,162,162,160,169,160,156,160,160,160,161,160,156,161,156,103,98,156,98,98,98,72,
+81,81,81,56,84,81,81,81,81,85,80,81,85,84,81,82,81,81,82,82,84,84,84,81,88,84,82,81,84,84,84,84,84,88,84,84,84,88,85,88,85,88,90,84,1,5,2,2,13,34,123,152,150,145,152,126,126,153,142,114,51,11,18,33,18,2,2,5,6,2,10,6,106,124,126,24,34,8,31,11,2,47,116,15,30,110,15,47,138,137,114,126,183,183,125,46,34,33,36,144,137,128,154,145,15,11,133,136,124,126,141,148,183,116,151,136,140,149,164,75,11,2,2,6,1,6,2,2,2,47,109,106,119,46,114,116,114,13,141,137,140,43,87,82,91,85,90,84,84,86,90,91,85,90,90,90,91,92,96,92,103,98,103,98,159,156,160,156,161,160,98,160,103,160,156,160,160,161,160,161,156,103,103,97,96,92,102,92,96,91,91,91,92,101,101,92,96,91,91,92,91,91,91,91,91,92,91,91,90,86,92,91,91,90,90,91,90,91,90,89,91,90,91,91,91,92,92,92,97,101,98,98,98,156,98,98,159,160,98,156,160,160,156,162,162,160,171,179,173,169,177,169,162,160,98,98,97,92,98,98,103,98,98,98,156,162,169,194,179,198,202,179,198,198,202,179,199,203,203,196,198,179,198,179,177,169,162,162,162,160,162,160,160,160,156,160,160,160,162,156,162,160,156,160,160,156,160,160,160,156,160,156,98,98,98,98,101,101,92,71,
+81,81,81,81,56,81,81,81,81,85,83,81,81,85,81,81,85,84,81,82,82,81,82,84,81,84,81,84,81,84,84,84,84,84,84,84,84,88,88,81,88,88,89,100,5,2,2,5,21,120,126,150,144,145,141,35,144,153,145,125,110,17,24,32,6,6,1,2,11,6,7,11,22,122,124,7,12,29,23,11,2,36,109,8,16,22,18,110,138,128,142,145,149,153,19,34,43,22,29,130,153,143,153,110,111,151,8,130,144,133,153,153,151,137,37,117,45,67,62,38,9,2,5,25,5,11,11,2,2,47,124,120,126,111,46,142,140,17,120,132,183,131,90,90,85,85,85,82,85,89,90,90,85,90,85,91,91,92,92,98,103,98,103,160,160,160,156,98,103,98,103,103,98,98,98,101,98,103,98,160,98,98,102,98,96,91,92,92,91,92,92,91,92,102,92,101,91,91,91,91,91,95,92,91,91,90,91,91,91,89,86,90,86,95,90,90,89,90,85,90,91,89,90,82,91,91,91,91,92,92,98,98,101,96,101,92,98,98,98,98,96,98,98,160,156,160,168,162,171,171,171,168,160,98,96,92,92,96,96,98,93,98,98,160,160,161,162,177,173,173,179,198,179,202,179,202,202,179,202,179,202,179,171,171,168,168,160,160,160,160,156,160,160,156,160,161,160,156,160,156,160,160,160,160,156,160,160,159,103,98,103,98,98,93,102,92,96,92,92,62,
+81,81,81,81,81,81,56,81,81,83,85,81,81,81,56,85,81,81,85,81,81,84,81,84,84,84,84,81,84,82,84,84,84,81,84,84,84,84,84,84,88,88,89,100,25,2,5,2,2,106,144,124,144,148,3,22,185,148,122,188,197,121,11,6,5,2,1,7,7,10,2,2,29,126,125,6,21,22,106,11,2,48,136,11,22,114,132,123,153,186,186,154,151,143,125,22,31,21,13,136,154,153,138,45,46,46,116,144,132,110,183,133,123,132,29,46,60,85,82,58,12,9,1,10,5,5,29,11,2,30,46,47,114,111,20,133,15,46,130,184,185,86,89,85,90,86,90,85,88,85,86,88,88,85,89,91,91,91,101,92,98,103,98,103,98,98,98,98,98,96,91,92,97,96,91,91,92,98,98,96,101,98,87,91,91,95,90,91,91,91,91,91,91,91,87,91,91,91,91,86,95,91,91,91,91,91,90,89,85,91,90,91,90,89,76,91,85,90,89,90,89,89,90,91,91,90,91,91,92,96,92,92,92,92,92,92,101,92,97,92,91,92,98,156,103,162,162,162,168,168,162,161,97,97,92,92,92,92,96,101,101,98,98,160,159,162,169,171,171,171,179,173,194,179,179,194,173,194,173,194,177,171,171,169,162,160,160,156,156,156,103,156,156,159,160,159,160,103,156,98,160,162,156,160,156,98,98,98,98,98,101,101,97,102,92,92,96,96,90,58,
+56,81,56,81,81,56,84,81,81,56,81,81,81,85,81,81,81,88,81,81,85,81,81,81,81,81,81,88,81,84,84,84,84,81,88,84,84,84,84,84,84,85,88,90,53,2,2,2,5,31,127,144,150,140,8,14,132,138,11,36,138,8,1,6,11,2,1,10,12,11,11,5,119,151,29,13,37,17,117,2,2,130,136,6,37,137,132,151,186,186,153,186,145,150,142,8,11,6,17,139,144,149,114,14,47,46,141,147,126,134,153,19,24,131,29,81,90,88,88,90,40,58,28,5,10,2,26,9,21,134,182,182,191,120,67,34,46,47,141,191,87,90,86,90,90,89,91,85,85,90,85,86,89,90,86,90,91,91,91,92,96,93,98,98,98,98,98,96,101,91,91,91,91,92,85,91,91,91,91,89,91,91,90,90,90,86,90,91,91,91,91,92,91,91,90,91,91,91,91,91,86,91,90,91,92,91,91,90,92,90,92,91,85,91,89,90,91,85,86,89,89,89,90,91,90,91,90,91,91,87,101,92,92,91,92,92,91,91,91,91,91,87,101,98,98,160,156,103,156,160,169,156,102,92,92,92,96,92,92,96,98,98,103,93,156,156,156,169,169,169,169,173,173,171,171,173,171,177,173,171,168,169,168,168,162,162,156,160,160,103,97,98,98,98,98,156,103,159,103,160,156,160,156,103,97,98,97,101,98,97,97,101,98,97,97,92,92,97,96,58,
+81,81,81,81,81,81,81,81,81,81,56,81,81,81,56,88,81,81,56,85,81,81,81,85,81,82,82,81,84,84,84,84,84,84,81,84,88,85,84,84,88,84,88,85,85,26,2,5,2,30,144,151,146,153,148,34,132,10,2,5,1,2,1,5,2,2,1,13,1,10,12,8,187,45,2,21,50,2,126,11,2,133,32,2,30,119,132,149,186,153,153,144,141,138,151,6,6,6,6,148,119,148,45,30,46,106,145,140,30,136,130,115,136,44,59,71,89,84,88,90,63,95,61,13,5,5,5,14,148,180,180,45,151,141,144,181,31,149,193,158,90,91,89,91,91,90,90,85,85,91,85,90,90,90,85,89,90,90,85,91,90,90,92,92,91,92,92,91,91,95,90,91,90,89,91,90,90,91,89,91,90,90,85,85,86,90,85,90,91,91,92,91,90,91,91,91,91,91,91,91,91,91,91,92,92,91,90,90,86,91,90,92,90,90,90,91,85,89,85,85,89,89,91,89,90,79,91,91,90,91,91,91,89,91,90,92,91,91,91,91,90,91,92,98,98,92,98,101,103,156,160,160,97,92,96,92,92,96,98,98,98,98,98,98,103,98,156,160,156,162,169,169,169,162,169,173,171,177,171,169,162,168,162,162,168,162,160,160,156,98,98,98,98,98,98,98,103,98,98,98,103,156,98,103,98,98,97,93,102,92,98,98,98,98,96,93,102,91,92,71,
+81,80,82,81,81,81,56,82,81,81,81,81,81,80,81,81,81,81,81,81,81,81,81,81,81,85,81,84,81,82,84,84,81,84,85,84,81,81,88,84,84,84,88,88,85,99,2,2,12,30,132,144,148,150,122,141,5,6,2,2,5,1,2,2,12,2,1,2,5,6,2,14,140,110,2,21,29,2,137,17,2,130,20,2,43,106,147,153,186,154,144,136,108,139,116,2,13,11,11,151,132,144,8,29,119,133,124,109,30,119,132,149,93,96,95,90,85,88,88,88,88,89,100,40,5,11,26,40,197,182,141,119,185,130,182,154,187,149,158,85,91,85,90,89,91,91,91,90,91,89,91,89,85,88,89,89,91,85,90,86,90,89,91,88,91,91,91,95,90,89,89,90,89,91,90,89,91,89,91,90,85,86,85,91,90,82,86,90,91,91,91,91,91,96,92,91,91,91,90,90,91,91,92,92,91,91,91,91,91,89,91,90,86,90,91,89,85,89,89,89,85,86,90,91,90,85,91,89,92,91,91,90,91,91,91,91,91,91,91,85,91,91,91,92,91,91,92,92,97,98,160,156,98,96,102,92,92,92,96,97,98,97,92,96,96,96,98,98,98,156,161,162,168,169,169,171,173,171,173,169,169,168,162,162,160,161,156,160,156,98,98,98,98,98,103,93,156,98,97,101,98,98,101,97,97,101,98,101,92,96,97,92,97,97,101,102,93,93,101,71,
+81,81,56,82,82,81,81,81,83,56,81,81,83,85,81,81,81,81,81,56,81,81,81,85,81,81,81,85,84,84,84,84,84,84,83,85,85,81,88,85,84,85,84,88,85,83,21,26,13,16,106,151,142,143,94,26,9,2,5,2,1,2,1,2,10,2,1,6,10,12,6,106,151,114,2,10,13,5,130,8,2,37,114,2,21,48,153,154,153,145,125,138,132,116,124,7,145,114,17,124,130,148,13,34,124,136,136,30,24,132,134,91,91,91,89,91,89,85,85,84,84,84,84,99,71,72,13,13,181,186,191,121,117,147,149,141,70,87,90,86,90,90,91,91,91,90,92,89,89,90,85,89,89,84,89,88,85,88,90,90,90,89,89,88,89,89,89,85,91,89,88,91,85,91,85,91,85,95,90,85,89,90,90,90,89,85,90,91,91,91,91,90,91,92,91,92,91,91,91,90,91,92,96,92,92,91,91,90,86,92,91,91,90,89,85,89,88,85,85,89,89,89,90,90,91,90,90,90,91,90,91,92,92,91,91,91,92,91,91,91,90,90,91,91,90,79,91,91,92,98,103,98,103,92,92,92,91,92,96,92,96,92,92,92,92,92,92,96,98,98,161,156,162,162,169,169,168,168,168,162,162,162,162,160,159,156,98,98,98,98,98,98,97,97,98,98,103,98,97,97,98,97,97,102,92,101,92,97,101,92,101,102,93,92,97,93,101,102,93,71,
+81,81,80,81,81,56,84,82,81,81,81,56,81,81,56,81,81,81,56,84,56,81,81,81,82,81,81,81,82,84,82,82,85,81,85,81,81,81,85,81,81,83,85,81,88,85,59,21,22,32,153,93,71,69,85,6,2,2,2,9,5,1,2,11,2,2,1,2,5,9,21,141,132,21,6,1,2,2,36,113,2,47,37,2,36,120,154,153,145,146,150,31,106,116,15,11,144,145,115,140,133,31,13,36,34,141,22,15,36,69,95,90,91,90,90,85,85,88,88,84,84,84,84,88,90,85,63,64,40,130,180,185,147,67,130,192,90,88,85,91,90,91,89,90,86,91,90,89,91,85,95,89,89,85,89,85,84,88,89,88,89,82,84,84,88,85,89,89,84,89,91,85,90,89,91,90,90,86,85,91,85,91,95,85,86,90,91,91,90,90,89,92,91,96,96,91,91,91,91,91,91,92,92,96,102,91,90,89,91,90,90,85,85,89,89,85,86,89,84,89,84,90,86,89,90,90,89,89,91,91,90,89,86,90,92,91,92,90,91,88,90,86,88,90,89,90,91,91,97,98,98,98,98,96,91,91,92,91,91,92,92,91,91,92,91,91,91,92,98,98,98,98,156,160,169,169,168,162,160,156,160,162,160,98,156,98,97,98,102,93,98,98,97,98,98,97,98,97,98,103,98,97,97,92,92,92,92,92,101,97,97,101,92,97,102,93,97,98,97,71,
+81,56,81,81,56,81,81,81,56,82,56,81,56,81,81,81,80,81,81,81,81,85,83,85,85,82,81,85,81,85,84,81,81,81,88,81,88,81,81,81,85,90,81,81,88,88,63,50,85,85,86,84,84,84,80,6,7,2,6,2,2,2,5,1,11,1,2,2,6,10,37,133,181,8,2,6,6,7,43,130,11,45,30,5,30,130,136,136,148,144,140,6,32,124,11,13,136,146,147,116,147,24,34,33,132,29,36,65,64,58,89,89,85,90,89,85,89,88,85,84,84,84,85,90,85,90,86,100,57,11,129,131,77,76,86,86,89,89,90,90,91,85,91,90,91,91,91,89,90,91,85,89,89,89,85,88,84,89,90,85,86,88,88,84,85,86,89,88,89,89,85,91,89,95,89,86,90,90,85,90,89,85,85,91,85,91,85,91,85,91,91,91,91,92,92,91,91,91,91,91,97,96,101,91,91,91,91,90,86,95,91,89,89,89,89,85,85,85,85,88,85,90,85,86,90,86,88,91,85,91,90,90,90,91,85,92,90,86,89,89,85,89,88,90,89,85,91,92,92,92,96,101,92,91,91,91,91,91,91,91,91,91,91,89,90,76,96,91,92,98,98,103,156,156,161,162,160,160,159,103,156,156,103,98,98,97,92,92,92,101,98,98,97,92,96,101,101,97,98,98,98,98,91,91,91,91,91,91,92,101,91,92,92,101,91,92,101,97,92,72,
+56,81,82,81,56,81,56,56,81,80,81,81,81,81,56,81,81,84,56,81,81,81,81,81,83,56,85,81,81,85,80,85,81,88,81,81,81,88,81,81,81,81,83,85,81,81,81,88,81,88,85,85,88,85,90,6,2,2,7,2,2,5,2,5,21,34,2,5,1,21,132,140,148,18,22,11,11,10,21,132,11,27,39,10,16,116,136,138,144,122,148,29,29,22,2,30,146,140,136,136,144,130,141,34,151,44,40,95,84,88,90,89,89,89,88,88,88,88,85,88,85,84,88,85,90,91,90,85,91,82,85,85,90,90,85,89,89,89,88,95,90,90,88,91,90,91,90,90,91,85,91,85,84,85,89,85,89,90,85,89,84,89,85,89,85,90,85,89,90,85,90,90,91,89,91,90,85,91,85,91,90,90,91,90,85,89,91,85,91,90,89,92,92,92,92,91,92,92,91,91,91,92,92,91,91,91,91,89,91,85,85,89,84,84,88,88,84,88,82,84,88,85,90,85,85,85,90,90,90,85,89,89,89,89,90,90,90,85,89,89,89,85,86,89,89,90,91,91,91,87,96,91,92,92,85,90,91,91,91,91,91,91,89,79,95,89,86,92,92,92,98,98,103,98,98,98,98,103,98,98,97,98,92,92,92,92,91,91,91,92,96,98,92,96,96,96,96,92,101,92,97,101,97,91,91,91,91,92,91,91,91,92,92,92,92,101,92,97,97,72,
+81,81,80,81,81,84,81,81,56,81,81,56,81,56,84,56,82,81,81,81,81,84,81,81,81,83,85,83,81,83,85,81,81,81,83,85,83,81,81,81,81,81,81,81,81,83,85,88,81,81,88,81,88,81,83,11,2,2,9,5,2,2,2,2,5,29,2,2,6,22,139,120,17,124,114,16,11,2,123,190,2,12,9,2,29,106,106,106,136,144,43,29,119,29,11,123,125,142,133,133,116,133,138,110,22,21,58,88,84,84,88,84,88,88,85,84,84,85,88,84,88,89,89,88,89,90,90,82,89,85,88,88,89,88,85,89,90,82,88,88,88,85,90,90,85,90,86,95,90,90,90,85,85,88,88,88,89,90,90,91,85,89,85,90,85,86,90,84,88,90,86,95,89,90,85,91,88,85,91,85,91,91,85,85,89,90,89,89,86,85,90,91,92,91,90,91,91,85,92,91,91,92,96,91,90,91,92,90,89,91,85,86,88,84,84,84,84,84,84,84,82,84,88,90,82,88,88,89,89,85,88,90,89,90,91,85,89,89,88,89,89,85,90,86,89,88,90,90,90,90,86,91,90,89,91,79,90,91,91,91,92,90,92,90,90,90,92,91,91,92,92,96,97,98,101,92,96,92,92,92,101,92,92,91,91,91,86,91,91,91,92,98,96,92,92,92,92,92,91,92,91,92,101,92,92,91,91,91,91,91,91,91,91,91,91,92,92,91,92,71,
+56,81,56,81,56,81,56,81,84,81,56,81,81,81,81,81,81,56,82,81,81,81,81,81,81,81,81,81,81,56,81,83,81,81,81,81,81,81,81,56,85,81,81,81,81,81,81,81,83,81,83,81,83,81,99,10,25,6,2,2,2,6,2,2,2,30,2,6,1,36,144,136,132,116,11,15,6,11,16,11,11,11,2,2,11,13,31,46,125,17,33,47,180,43,134,108,109,132,114,149,123,147,46,66,75,57,84,82,84,81,85,84,84,88,84,84,88,88,85,88,88,89,89,85,88,85,88,88,85,88,89,85,90,90,88,85,88,88,85,84,84,88,90,83,90,90,90,88,91,90,89,89,85,88,84,84,88,90,89,85,90,90,85,91,90,90,85,89,90,88,90,90,85,89,88,84,89,90,91,90,89,85,91,90,86,89,90,90,90,90,91,91,92,92,90,92,90,91,90,91,92,92,101,91,91,91,90,86,90,90,90,82,85,84,84,84,84,84,84,82,82,84,84,88,84,84,84,84,88,84,84,88,90,86,90,89,89,89,89,84,85,88,85,89,89,89,90,85,91,90,90,85,91,90,90,91,90,90,92,90,92,85,91,85,91,89,79,90,91,91,92,97,92,92,92,92,91,91,92,92,92,92,91,91,91,91,91,91,91,91,92,96,92,92,91,91,91,91,91,91,91,91,92,92,86,91,86,91,91,92,92,91,91,91,91,91,91,91,91,62,
+81,56,82,56,81,56,81,56,56,81,81,80,56,82,56,82,84,81,56,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,83,84,81,81,83,81,81,81,81,81,81,81,90,1,2,9,2,5,9,2,2,2,12,119,17,2,5,117,147,116,122,8,15,24,17,13,29,10,2,12,9,5,21,17,29,47,110,14,134,24,34,138,46,29,33,151,144,144,119,116,35,91,82,56,81,81,88,81,81,83,84,81,88,84,81,88,84,84,88,84,88,84,84,84,84,88,88,88,88,88,89,89,85,89,89,88,84,85,81,90,81,88,85,90,81,88,85,90,85,88,85,88,85,85,90,89,90,88,89,89,90,90,86,85,88,90,81,88,88,89,85,84,85,84,84,88,90,85,91,90,89,85,90,90,90,85,86,88,91,85,90,86,91,91,90,91,85,90,86,92,96,91,90,86,90,90,90,85,85,85,88,82,84,88,85,82,84,85,84,84,84,88,85,84,84,84,84,84,84,84,89,85,90,90,86,89,89,89,89,89,84,89,89,89,89,85,86,89,89,89,85,89,85,90,86,91,82,91,89,95,89,91,89,95,89,91,91,91,92,92,91,91,91,91,91,91,87,92,91,91,91,91,91,91,91,91,91,91,96,96,92,91,91,90,91,91,91,91,91,91,92,92,91,91,91,91,92,92,91,91,91,91,92,91,92,91,91,58,
+56,81,80,82,81,81,56,84,81,56,81,81,81,81,81,81,56,84,82,84,81,81,81,81,81,81,56,84,81,81,81,81,81,81,81,81,81,81,80,81,81,81,81,81,81,81,81,81,81,81,81,81,83,81,83,2,5,9,2,2,2,21,6,6,2,43,126,3,2,30,17,34,29,2,15,127,127,125,109,10,13,2,2,2,7,106,140,133,21,21,106,142,146,151,109,10,37,151,140,36,48,74,57,83,81,80,81,84,81,81,81,81,81,81,81,88,88,84,81,81,88,85,85,88,85,88,84,84,84,84,84,84,88,89,90,88,88,85,84,88,85,81,88,81,85,81,88,85,88,88,88,81,88,85,81,88,88,85,88,85,88,90,88,90,90,88,85,81,88,85,88,85,88,81,84,84,88,91,85,91,90,89,91,90,85,88,85,85,89,88,90,90,91,90,90,91,85,89,89,90,90,90,96,90,92,91,85,91,90,89,89,88,88,85,84,81,88,81,85,81,88,81,84,82,84,84,84,84,84,84,84,88,90,89,86,89,85,89,89,89,90,89,89,89,89,89,86,88,85,85,89,89,85,86,90,90,85,91,91,90,90,86,95,85,91,89,92,85,91,91,91,91,91,91,89,91,91,91,91,91,91,91,91,91,91,92,91,92,96,92,92,92,92,92,91,79,89,91,91,91,91,86,91,91,91,91,91,92,91,91,91,91,92,91,91,87,91,91,91,58,
+81,81,81,81,56,56,81,56,56,84,56,81,84,56,81,81,56,81,81,56,81,81,80,81,81,56,81,56,81,81,81,81,81,80,82,81,81,81,81,81,81,81,81,81,84,56,81,81,81,80,81,81,81,81,88,26,9,9,5,2,10,21,11,2,2,22,138,15,10,30,129,6,2,2,24,125,128,124,126,109,106,106,6,6,48,149,138,130,30,21,109,122,181,182,8,5,119,136,33,50,63,81,81,81,80,81,81,81,81,81,81,81,81,81,89,81,81,81,83,88,88,81,81,81,81,85,81,84,85,88,85,84,84,88,88,84,84,85,83,85,88,85,88,85,85,88,81,81,88,85,88,85,83,85,81,81,81,83,88,88,85,83,85,88,81,81,81,81,81,81,81,88,81,88,85,85,84,88,90,89,90,90,84,84,85,88,90,81,84,84,89,89,89,90,86,85,90,89,90,85,90,91,88,91,89,90,91,85,86,89,84,84,84,84,84,81,81,81,83,85,80,85,84,84,84,84,84,84,84,84,84,84,89,88,85,90,89,89,90,89,88,85,89,89,89,90,85,91,90,91,85,89,85,90,86,91,90,89,92,85,86,90,90,91,90,89,85,89,91,91,91,91,79,90,79,90,90,91,91,91,91,91,86,92,92,92,92,92,91,92,92,92,91,91,91,91,91,91,92,91,91,91,86,91,91,91,91,91,92,92,92,91,91,91,91,91,91,91,86,58,
+56,81,56,82,81,84,81,56,81,81,56,81,56,81,80,82,81,81,56,56,84,81,81,81,84,81,56,82,81,81,82,81,81,81,56,81,56,56,81,81,81,81,81,81,81,81,80,81,80,81,80,81,81,81,56,81,6,10,7,9,12,7,9,11,2,12,21,10,12,21,13,11,5,11,116,132,145,115,123,46,130,109,21,119,116,116,43,46,26,21,130,137,184,118,2,6,106,132,60,81,81,81,81,81,80,81,81,83,81,81,81,81,81,81,81,81,81,84,81,81,81,81,88,81,81,88,81,85,83,82,84,81,85,84,84,82,88,88,85,81,81,81,81,85,83,81,81,81,81,81,81,81,88,81,81,81,81,81,83,81,81,81,90,80,81,81,81,81,81,81,81,81,81,81,88,81,88,85,85,88,85,88,85,84,84,84,81,85,84,81,88,89,89,90,90,89,84,88,85,89,91,88,89,85,91,90,85,90,85,89,89,88,84,84,81,88,81,81,81,81,88,84,84,84,85,84,81,82,84,82,84,84,84,89,89,88,85,86,88,89,86,89,86,89,90,85,85,89,90,86,91,89,90,90,91,91,86,91,82,91,90,91,85,91,91,90,90,85,90,90,91,91,90,90,90,91,91,91,91,91,91,91,91,86,91,91,92,91,92,92,91,91,91,91,91,91,91,82,91,86,91,91,91,91,91,91,91,91,91,92,91,91,91,91,91,91,86,86,95,57,
+81,81,84,56,81,56,84,81,81,56,81,56,81,56,81,81,56,81,81,56,81,81,56,56,81,56,81,81,80,80,56,81,81,81,81,80,82,80,82,56,81,81,80,80,80,61,81,81,81,81,81,81,80,81,80,99,10,2,10,2,2,29,32,2,6,9,27,10,2,5,10,13,10,11,119,116,122,116,111,21,47,18,110,120,106,181,144,45,39,26,30,181,138,8,2,21,149,66,58,81,81,80,81,81,81,81,81,84,80,81,80,81,81,81,81,81,83,81,81,81,83,81,81,88,81,81,88,81,81,90,84,83,81,85,88,85,81,81,81,88,81,88,88,81,83,85,88,80,81,81,81,81,81,81,83,80,56,81,81,81,81,83,81,81,81,83,80,81,81,85,81,81,83,81,81,83,85,83,89,88,88,89,85,84,84,88,81,85,88,85,84,88,88,88,85,88,85,88,85,88,84,88,85,84,88,91,88,88,85,88,85,84,84,81,84,85,81,81,81,81,85,81,84,84,84,85,85,84,84,84,82,84,84,88,82,90,89,89,85,91,85,85,90,90,89,86,91,91,91,91,90,79,91,91,91,90,91,90,89,91,90,86,92,91,91,91,90,90,86,91,91,91,91,91,91,90,90,91,91,91,86,91,91,91,91,91,92,92,92,92,91,91,91,91,91,86,91,91,86,91,91,91,91,91,91,91,92,91,92,86,91,91,86,90,91,91,92,90,89,58,
+81,56,56,81,56,81,81,81,56,82,56,56,56,81,81,61,81,56,84,56,81,56,81,56,81,81,81,56,81,81,81,81,81,81,80,56,56,61,83,82,56,82,80,80,82,56,56,80,82,80,81,80,81,80,81,81,54,2,2,9,10,17,106,17,2,6,5,5,2,62,40,15,11,9,6,46,138,147,109,11,141,32,138,46,141,132,119,46,11,2,29,132,141,11,2,22,77,81,81,80,81,81,80,80,81,80,80,61,81,81,81,80,81,80,81,81,80,84,81,81,81,81,81,90,83,81,81,81,81,81,81,81,81,84,81,81,81,88,81,88,85,88,81,81,81,81,83,85,83,85,81,81,81,81,81,81,81,81,80,81,81,81,83,81,81,83,81,81,83,81,83,85,81,81,81,81,81,81,81,88,88,85,88,85,88,81,81,81,85,81,88,84,84,84,84,88,85,84,84,81,84,84,84,84,89,90,89,85,84,84,84,84,84,84,84,80,81,88,81,81,81,88,84,82,88,82,88,85,89,89,84,84,84,84,89,88,89,85,91,85,92,91,90,91,86,90,91,91,91,91,91,91,91,91,91,86,90,86,91,91,91,92,91,101,96,92,92,92,92,92,92,92,91,91,91,86,91,86,90,79,90,91,91,86,92,91,91,91,92,91,91,91,91,91,91,91,91,91,91,91,91,91,92,92,91,91,91,91,91,91,90,89,86,91,90,86,86,86,91,58,
+56,84,82,81,82,81,56,81,56,80,81,56,82,56,56,80,61,80,56,81,81,56,82,81,56,80,56,82,56,81,56,81,56,80,56,80,80,80,56,80,80,80,81,80,80,80,80,81,80,80,61,81,81,81,81,81,81,6,9,5,5,43,130,136,6,53,26,54,2,2,2,18,22,2,6,36,136,126,118,13,141,34,120,43,136,136,134,30,26,2,141,119,29,2,117,187,80,80,61,81,80,81,81,81,81,81,81,80,80,81,81,80,80,61,83,81,81,81,81,81,81,81,81,81,81,81,81,81,88,81,88,81,81,81,81,81,81,81,90,80,81,81,81,81,81,81,81,83,81,81,83,85,81,81,81,80,81,81,80,80,81,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,88,85,88,81,88,81,81,85,83,81,81,85,88,84,84,84,84,88,85,84,88,82,84,84,84,85,90,89,84,84,84,84,84,84,81,84,81,81,81,88,81,84,81,84,82,84,88,85,85,84,89,84,85,84,84,84,89,89,90,90,86,90,91,89,92,91,91,91,91,91,91,92,91,91,91,91,91,91,92,91,91,92,92,92,92,96,92,92,92,91,92,92,91,91,91,91,91,91,91,90,90,90,86,91,91,91,90,86,91,91,91,91,91,91,91,91,91,91,91,91,91,92,92,91,91,91,91,91,91,89,91,90,91,86,90,89,91,89,90,85,62,
+56,81,81,80,56,56,56,81,56,61,56,80,56,56,82,56,81,56,56,63,80,80,56,56,63,80,56,61,63,81,80,61,80,80,61,80,56,80,61,81,80,80,61,81,80,56,80,61,81,80,80,56,80,61,81,80,81,51,2,2,9,46,123,136,42,88,82,83,2,6,2,29,111,112,16,116,133,182,111,29,132,119,130,139,46,43,48,197,147,122,49,120,32,26,78,80,56,81,80,56,80,81,61,83,56,80,82,80,56,83,80,80,83,80,61,56,81,81,81,81,81,81,81,81,81,80,80,81,81,81,81,84,81,81,83,81,81,81,83,88,83,81,81,85,81,81,85,81,83,81,81,81,81,83,81,80,81,81,81,56,80,81,56,81,81,81,81,81,81,83,81,81,81,81,56,81,81,81,81,81,81,88,81,81,81,81,83,81,88,82,84,84,84,85,84,84,88,84,81,84,81,84,84,84,88,85,84,84,82,84,82,81,81,84,81,81,56,81,81,85,81,84,84,84,84,84,88,88,85,85,84,84,85,89,85,85,91,90,91,82,91,90,91,90,90,91,90,91,91,91,86,91,90,91,91,91,92,91,92,91,92,92,92,92,92,91,91,92,92,92,101,92,96,93,92,92,96,91,91,86,91,90,90,92,86,79,91,95,90,91,91,90,86,91,91,91,91,91,87,92,91,92,91,92,91,91,91,91,91,90,79,89,85,86,91,86,89,91,85,58,
+81,56,56,56,82,56,81,56,81,56,80,56,82,56,56,80,82,56,61,56,56,63,80,56,61,80,56,80,80,56,56,81,80,56,80,80,80,56,80,80,56,80,56,80,80,80,56,56,80,80,56,80,80,56,80,80,61,83,26,2,2,129,124,132,77,80,80,85,26,1,2,5,29,18,132,32,110,141,114,47,138,32,70,138,120,44,193,134,176,180,17,130,82,81,80,80,80,56,80,82,80,56,80,80,80,80,80,80,80,81,56,81,83,80,80,81,83,81,81,80,81,81,81,81,81,81,80,81,80,81,81,56,84,81,81,81,81,81,83,81,90,83,81,83,81,83,81,81,83,81,81,81,81,81,83,81,81,81,81,83,81,56,84,81,80,81,81,81,81,81,81,80,56,82,81,80,81,81,81,88,81,84,81,56,81,81,81,81,84,84,84,84,88,88,84,84,84,84,84,81,88,85,84,84,84,84,88,84,81,84,81,84,82,81,84,81,81,81,83,81,85,84,84,84,82,84,84,84,84,84,88,84,85,82,89,89,89,89,85,90,85,85,89,85,89,89,90,91,90,90,89,91,91,92,90,91,86,86,92,91,91,91,91,91,91,79,91,91,91,92,92,92,97,96,92,97,92,92,91,91,89,86,92,90,90,85,85,90,85,86,85,90,90,91,85,91,91,91,91,91,92,91,91,91,86,91,91,79,91,90,90,91,91,89,91,89,92,90,85,58,
+81,82,81,81,81,56,56,56,56,84,56,80,56,81,56,56,56,56,56,80,56,56,56,80,80,56,56,56,81,80,80,56,56,80,80,56,81,80,80,56,80,80,80,80,56,81,80,80,56,80,80,81,80,80,80,56,80,80,81,11,5,119,133,157,80,80,81,81,54,29,1,12,2,43,123,120,120,126,29,119,69,61,29,192,188,130,132,129,120,43,58,56,80,81,80,80,56,80,80,80,81,80,81,80,56,81,80,80,56,56,81,80,80,81,81,81,81,81,80,81,81,80,81,81,80,81,80,81,81,80,81,83,81,81,84,81,81,81,81,81,83,81,81,81,81,81,81,81,83,81,83,80,81,81,81,81,56,81,81,81,80,83,81,80,81,81,81,81,81,81,81,81,81,80,81,81,80,81,82,80,81,81,81,81,81,81,81,81,81,88,84,84,84,84,82,84,84,84,88,81,81,81,88,84,84,84,81,82,81,84,81,81,81,81,84,81,81,81,81,81,81,84,81,81,84,84,84,84,84,85,84,84,88,88,89,84,84,88,89,88,84,85,84,88,82,89,89,85,90,89,90,91,90,86,91,91,90,86,86,92,91,90,91,91,91,91,90,91,91,91,92,92,92,96,96,96,96,91,91,91,91,90,85,86,89,89,90,91,90,82,91,85,86,86,90,91,91,91,91,91,91,87,92,91,91,91,86,95,90,90,79,89,90,90,90,91,89,91,82,57,
+82,82,81,84,82,56,82,81,81,56,56,56,56,56,81,56,80,56,56,56,56,56,80,56,56,80,56,56,56,56,56,80,56,80,56,80,56,80,56,80,56,56,80,56,80,56,80,56,80,56,80,56,56,80,56,80,56,80,56,56,38,67,72,56,80,56,56,81,56,35,141,33,2,10,45,132,144,141,64,82,80,56,80,52,38,65,65,85,58,80,56,80,56,80,56,81,80,56,80,56,80,56,80,56,80,56,80,56,80,56,80,56,81,80,80,81,80,83,80,81,81,81,81,81,81,80,81,80,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,80,81,81,81,81,81,80,81,81,80,81,81,80,81,81,81,83,80,80,81,80,81,81,81,81,80,81,80,81,81,81,81,88,84,81,81,88,81,82,81,84,82,82,81,81,81,81,81,88,84,84,82,84,81,84,81,81,81,81,81,81,81,81,81,81,81,81,88,81,84,81,88,84,84,84,84,84,84,84,88,84,84,84,88,85,84,84,84,84,84,84,84,89,84,89,89,85,90,90,90,85,91,90,91,89,92,79,90,91,91,91,91,91,91,91,91,92,92,92,92,92,91,91,91,91,90,86,85,89,85,86,85,86,91,89,85,90,85,90,91,82,86,91,90,91,91,91,91,91,91,91,91,91,79,91,90,91,79,90,91,79,90,91,89,58,
+82,81,82,81,81,56,81,56,56,56,81,56,81,56,56,56,56,80,80,80,56,80,56,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,56,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,6,14,28,39,133,149,157,80,80,80,56,80,80,81,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,81,80,81,83,80,80,56,80,80,81,83,56,81,80,81,80,81,81,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,80,80,80,81,81,80,81,81,81,56,83,80,56,80,83,56,83,81,80,80,81,81,81,83,81,80,81,81,81,81,81,80,81,81,81,81,81,81,84,81,81,84,84,81,84,84,84,81,81,81,81,81,84,84,84,84,81,84,81,84,81,81,82,81,81,81,81,56,81,81,81,81,81,81,84,81,84,81,82,81,82,84,84,81,81,84,82,84,84,84,84,84,84,84,84,84,84,84,84,84,89,89,90,89,89,85,89,90,90,90,90,90,91,90,91,90,90,91,91,92,92,92,91,92,91,91,91,90,90,90,90,90,85,90,89,89,90,85,89,89,85,89,85,89,90,90,85,91,90,86,90,90,86,90,85,86,90,85,85,90,90,90,90,86,90,90,90,90,58,
+};
+
+MWIMAGEHDR image_zion208 = {
+ 320, 200, /* width, height*/
+ 1, 8, /* planes, bpp*/
+ 320, 1, /* pitch, bytesperpixel*/
+ 1, 256, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/makebmp.c
===================================================================
--- bmp/makebmp.c (nonexistent)
+++ bmp/makebmp.c (revision 174)
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 1999 Greg Haerr
+ *
+ * Framebuffer data to .bmp file converter
+ *
+ * 10/4/1999 g haerr
+ */
+#include
+#include
+
+#define BI_RGB 0L
+#define BI_RLE8 1L
+#define BI_RLE4 2L
+#define BI_BITFIELDS 3L
+
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef unsigned long DWORD;
+typedef long LONG;
+
+#pragma pack(1)
+/* windows style*/
+typedef struct {
+ /* BITMAPFILEHEADER*/
+ BYTE bfType[2];
+ DWORD bfSize;
+ WORD bfReserved1;
+ WORD bfReserved2;
+ DWORD bfOffBits;
+ /* BITMAPINFOHEADER*/
+ DWORD BiSize;
+ LONG BiWidth;
+ LONG BiHeight;
+ WORD BiPlanes;
+ WORD BiBitCount;
+ DWORD BiCompression;
+ DWORD BiSizeImage;
+ LONG BiXpelsPerMeter;
+ LONG BiYpelsPerMeter;
+ DWORD BiClrUsed;
+ DWORD BiClrImportant;
+} BMPHEAD;
+#pragma pack()
+
+int MakeBMP(FILE *ifp,FILE *ofp);
+
+int
+main(int ac,char **av)
+{
+ FILE *ifp;
+ FILE *ofp;
+
+ if(ac < 3) {
+ fprintf(stderr, "Usage: makebmp \n");
+ exit(1);
+ }
+ ifp = fopen(av[1], "rb");
+ if(!ifp) {
+ fprintf(stderr, "Can't open file: %s\n", av[1]);
+ exit(1);
+ }
+ ofp = fopen(av[2], "wb");
+ if(!ofp) {
+ fprintf(stderr, "Can't create file: %s\n", av[2]);
+ exit(1);
+ }
+ if(!MakeBMP(ifp, ofp)) {
+ fprintf(stderr, "Conversion failed: %s\n", av[2]);
+ fclose(ofp);
+ unlink(av[2]);
+ exit(1);
+ }
+ fclose(ifp);
+ fclose(ofp);
+ return 0;
+}
+
+/* create a bmp file*/
+int
+MakeBMP(FILE *ifp, FILE *ofp)
+{
+ BMPHEAD bmp;
+ int i, j;
+ int cx, cy, extra, bitdepth, ncolors;
+
+ cx = 640;
+ cy = 480;
+ extra = (cx + 3) & 3;
+ bitdepth = 8;
+ if(bitdepth <= 8)
+ ncolors = 1<0; --i) {
+ long base = sizeof(bmp) + ncolors*4 + (long)i*cx;
+ fseek(ofp, base, SEEK_SET);
+ for(j=0; j
bmp/pngtest.png
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/car8.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/car8.bmp
===================================================================
--- bmp/car8.bmp (nonexistent)
+++ bmp/car8.bmp (revision 174)
bmp/car8.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/Makefile
===================================================================
--- bmp/Makefile (nonexistent)
+++ bmp/Makefile (revision 174)
@@ -0,0 +1,64 @@
+##############################################################################
+# Microwindows template Makefile
+# Copyright (c) 2000 Martin Jolicoeur, Greg Haerr
+##############################################################################
+
+ifndef TOP
+TOP = ../..
+CONFIG = $(TOP)/config
+endif
+
+include $(CONFIG)
+
+#all: $(TOP)/bin/convbmp
+#HOSTCC=gcc
+#HOSTCFLAGS=-I../../include
+
+######################## Additional Flags section ############################
+
+# Directories list for header files
+INCLUDEDIRS +=
+# Defines for preprocessor
+DEFINES +=
+
+# Compilation flags for C files OTHER than include directories
+CFLAGS +=
+# Preprocessor flags OTHER than defines
+CPPFLAGS +=
+# Linking flags
+LDFLAGS +=
+
+############################# targets section ################################
+
+ifeq ($(MICROWIN), Y)
+
+# If you want to create a library with the objects files, define the name here
+LIBNAME = libmwimages.a
+LIBNAMESO = libmwimages.so
+
+# List of objects to compile
+OBJS = car8.o min4.o max4.o close4.o under4.o\
+ zion208.o cs1.o rle8.o microwin.o penguin.o
+
+all: $(TOP)/bin/convbmp $(TOP)/bin/makebmp default
+
+convbmp: convbmp.c
+ $(HOSTCC) $(HOSTCFLAGS) $< -o $@
+
+endif
+
+######################### Makefile.rules section #############################
+
+include $(TOP)/Makefile.rules
+
+######################## Tools targets section ###############################
+
+realclean: clean
+ $(RM) car8.c min4.c max4.c close4.c under4.c zion208.c cs1.c rle8.c \
+ microwin.c penguin.c
+
+$(TOP)/bin/convbmp: convbmp.c
+ $(HOSTCC) $(HOSTCFLAGS) $< -o $@
+
+$(TOP)/bin/makebmp: makebmp.c
+ $(HOSTCC) $(HOSTCFLAGS) $< -o $@
Index: bmp/layout
===================================================================
--- bmp/layout (nonexistent)
+++ bmp/layout (revision 174)
@@ -0,0 +1,21 @@
+0000000 4d42 00e6 0000 0000 0000 0076 0000 0028
+ [BM] [fbSize ] [r1] [r2] [bfOffbi] [biS
+0000020 0000 0010 0000 000e 0000 0001 0004 0000
+ ize] [biWidth] [Biheigh] plan bpp comp
+0000040 0000 0070 0000 0000 0000 0000 0000 0010
+ ress imagesize xpelsperm ypelsperm colo
+0000060 0000 0010 0000 0000 0000 0000 00bf bf00
+ ruse clrimport
+0000100 0000 bf00 00bf 00bf 0000 00bf 00bf bfbf
+0000120 0000 c0c0 00c0 8080 0080 0000 00ff ff00
+0000140 0000 ff00 00ff 00ff 0000 00ff 00ff ffff
+0000160 0000 ffff 00ff 0000 0000 0000 0000 88f8
+ bitmap->
+0000200 8888 8888 8088 77f7 7777 7777 8077 70f7
+0000220 0000 0000 8077 70f7 7777 7077 8077 70f7
+0000240 7777 7077 8077 70f7 7777 7077 8077 70f7
+*
+0000300 7777 7077 8077 70f7 0000 0000 8077 70f7
+0000320 0000 0000 8077 77f7 7777 7777 8077 ffff
+0000340 ffff ffff f0ff
+0000346
Index: bmp/car8.c
===================================================================
--- bmp/car8.c (nonexistent)
+++ bmp/car8.c (revision 174)
@@ -0,0 +1,438 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_car8 converted from car8.bmp*/
+
+static MWPALENTRY palette[256] = {
+ RGBDEF( 0, 0, 0 ), /* pal 0*/
+ RGBDEF( 165, 0, 0 ), /* pal 1*/
+ RGBDEF( 132, 0, 8 ), /* pal 2*/
+ RGBDEF( 140, 0, 8 ), /* pal 3*/
+ RGBDEF( 16, 16, 16 ), /* pal 4*/
+ RGBDEF( 24, 16, 16 ), /* pal 5*/
+ RGBDEF( 41, 16, 16 ), /* pal 6*/
+ RGBDEF( 49, 0, 16 ), /* pal 7*/
+ RGBDEF( 66, 8, 16 ), /* pal 8*/
+ RGBDEF( 90, 8, 16 ), /* pal 9*/
+ RGBDEF( 16, 16, 24 ), /* pal 10*/
+ RGBDEF( 16, 24, 24 ), /* pal 11*/
+ RGBDEF( 24, 24, 24 ), /* pal 12*/
+ RGBDEF( 49, 16, 24 ), /* pal 13*/
+ RGBDEF( 74, 24, 24 ), /* pal 14*/
+ RGBDEF( 99, 24, 24 ), /* pal 15*/
+ RGBDEF( 132, 8, 24 ), /* pal 16*/
+ RGBDEF( 16, 24, 33 ), /* pal 17*/
+ RGBDEF( 41, 41, 33 ), /* pal 18*/
+ RGBDEF( 49, 33, 33 ), /* pal 19*/
+ RGBDEF( 74, 33, 33 ), /* pal 20*/
+ RGBDEF( 99, 107, 33 ), /* pal 21*/
+ RGBDEF( 107, 24, 33 ), /* pal 22*/
+ RGBDEF( 115, 33, 33 ), /* pal 23*/
+ RGBDEF( 132, 24, 33 ), /* pal 24*/
+ RGBDEF( 140, 16, 33 ), /* pal 25*/
+ RGBDEF( 156, 8, 33 ), /* pal 26*/
+ RGBDEF( 156, 16, 33 ), /* pal 27*/
+ RGBDEF( 33, 33, 41 ), /* pal 28*/
+ RGBDEF( 41, 41, 41 ), /* pal 29*/
+ RGBDEF( 107, 41, 41 ), /* pal 30*/
+ RGBDEF( 140, 33, 41 ), /* pal 31*/
+ RGBDEF( 33, 41, 49 ), /* pal 32*/
+ RGBDEF( 33, 49, 49 ), /* pal 33*/
+ RGBDEF( 41, 49, 49 ), /* pal 34*/
+ RGBDEF( 74, 49, 49 ), /* pal 35*/
+ RGBDEF( 140, 49, 49 ), /* pal 36*/
+ RGBDEF( 148, 140, 49 ), /* pal 37*/
+ RGBDEF( 148, 148, 49 ), /* pal 38*/
+ RGBDEF( 49, 57, 57 ), /* pal 39*/
+ RGBDEF( 49, 66, 57 ), /* pal 40*/
+ RGBDEF( 90, 99, 57 ), /* pal 41*/
+ RGBDEF( 107, 115, 57 ), /* pal 42*/
+ RGBDEF( 132, 107, 57 ), /* pal 43*/
+ RGBDEF( 49, 66, 66 ), /* pal 44*/
+ RGBDEF( 57, 66, 66 ), /* pal 45*/
+ RGBDEF( 90, 66, 66 ), /* pal 46*/
+ RGBDEF( 123, 66, 66 ), /* pal 47*/
+ RGBDEF( 140, 66, 66 ), /* pal 48*/
+ RGBDEF( 66, 74, 74 ), /* pal 49*/
+ RGBDEF( 74, 82, 74 ), /* pal 50*/
+ RGBDEF( 90, 74, 74 ), /* pal 51*/
+ RGBDEF( 140, 148, 74 ), /* pal 52*/
+ RGBDEF( 156, 165, 74 ), /* pal 53*/
+ RGBDEF( 74, 82, 82 ), /* pal 54*/
+ RGBDEF( 74, 90, 82 ), /* pal 55*/
+ RGBDEF( 115, 99, 82 ), /* pal 56*/
+ RGBDEF( 123, 82, 82 ), /* pal 57*/
+ RGBDEF( 140, 74, 82 ), /* pal 58*/
+ RGBDEF( 57, 82, 90 ), /* pal 59*/
+ RGBDEF( 66, 82, 90 ), /* pal 60*/
+ RGBDEF( 66, 90, 90 ), /* pal 61*/
+ RGBDEF( 66, 90, 107 ), /* pal 62*/
+ RGBDEF( 66, 99, 115 ), /* pal 63*/
+ RGBDEF( 66, 107, 123 ), /* pal 64*/
+ RGBDEF( 74, 90, 90 ), /* pal 65*/
+ RGBDEF( 82, 107, 115 ), /* pal 66*/
+ RGBDEF( 82, 107, 123 ), /* pal 67*/
+ RGBDEF( 82, 115, 123 ), /* pal 68*/
+ RGBDEF( 82, 115, 140 ), /* pal 69*/
+ RGBDEF( 90, 107, 107 ), /* pal 70*/
+ RGBDEF( 90, 107, 115 ), /* pal 71*/
+ RGBDEF( 90, 115, 123 ), /* pal 72*/
+ RGBDEF( 99, 82, 90 ), /* pal 73*/
+ RGBDEF( 99, 115, 107 ), /* pal 74*/
+ RGBDEF( 99, 115, 115 ), /* pal 75*/
+ RGBDEF( 107, 90, 90 ), /* pal 76*/
+ RGBDEF( 107, 107, 115 ), /* pal 77*/
+ RGBDEF( 115, 123, 115 ), /* pal 78*/
+ RGBDEF( 131, 102, 94 ), /* pal 79*/
+ RGBDEF( 123, 107, 123 ), /* pal 80*/
+ RGBDEF( 156, 115, 123 ), /* pal 81*/
+ RGBDEF( 99, 123, 132 ), /* pal 82*/
+ RGBDEF( 99, 123, 140 ), /* pal 83*/
+ RGBDEF( 107, 132, 132 ), /* pal 84*/
+ RGBDEF( 123, 132, 132 ), /* pal 85*/
+ RGBDEF( 139, 152, 111 ), /* pal 86*/
+ RGBDEF( 148, 165, 132 ), /* pal 87*/
+ RGBDEF( 123, 148, 140 ), /* pal 88*/
+ RGBDEF( 156, 140, 140 ), /* pal 89*/
+ RGBDEF( 82, 123, 148 ), /* pal 90*/
+ RGBDEF( 99, 140, 148 ), /* pal 91*/
+ RGBDEF( 107, 132, 148 ), /* pal 92*/
+ RGBDEF( 107, 140, 148 ), /* pal 93*/
+ RGBDEF( 132, 148, 148 ), /* pal 94*/
+ RGBDEF( 82, 123, 156 ), /* pal 95*/
+ RGBDEF( 99, 132, 156 ), /* pal 96*/
+ RGBDEF( 107, 140, 156 ), /* pal 97*/
+ RGBDEF( 132, 156, 156 ), /* pal 98*/
+ RGBDEF( 123, 156, 165 ), /* pal 99*/
+ RGBDEF( 148, 165, 165 ), /* pal 100*/
+ RGBDEF( 99, 140, 173 ), /* pal 101*/
+ RGBDEF( 115, 148, 173 ), /* pal 102*/
+ RGBDEF( 123, 156, 181 ), /* pal 103*/
+ RGBDEF( 132, 165, 181 ), /* pal 104*/
+ RGBDEF( 148, 173, 181 ), /* pal 105*/
+ RGBDEF( 107, 148, 189 ), /* pal 106*/
+ RGBDEF( 115, 156, 189 ), /* pal 107*/
+ RGBDEF( 132, 173, 189 ), /* pal 108*/
+ RGBDEF( 123, 173, 198 ), /* pal 109*/
+ RGBDEF( 140, 181, 198 ), /* pal 110*/
+ RGBDEF( 123, 189, 206 ), /* pal 111*/
+ RGBDEF( 132, 173, 206 ), /* pal 112*/
+ RGBDEF( 156, 189, 206 ), /* pal 113*/
+ RGBDEF( 140, 189, 214 ), /* pal 114*/
+ RGBDEF( 123, 156, 222 ), /* pal 115*/
+ RGBDEF( 123, 173, 222 ), /* pal 116*/
+ RGBDEF( 140, 198, 231 ), /* pal 117*/
+ RGBDEF( 156, 206, 231 ), /* pal 118*/
+ RGBDEF( 156, 206, 239 ), /* pal 119*/
+ RGBDEF( 165, 0, 24 ), /* pal 120*/
+ RGBDEF( 198, 0, 24 ), /* pal 121*/
+ RGBDEF( 173, 0, 33 ), /* pal 122*/
+ RGBDEF( 181, 0, 33 ), /* pal 123*/
+ RGBDEF( 206, 0, 33 ), /* pal 124*/
+ RGBDEF( 214, 0, 41 ), /* pal 125*/
+ RGBDEF( 222, 0, 41 ), /* pal 126*/
+ RGBDEF( 231, 0, 41 ), /* pal 127*/
+ RGBDEF( 231, 0, 49 ), /* pal 128*/
+ RGBDEF( 165, 8, 24 ), /* pal 129*/
+ RGBDEF( 173, 8, 33 ), /* pal 130*/
+ RGBDEF( 198, 8, 41 ), /* pal 131*/
+ RGBDEF( 214, 8, 41 ), /* pal 132*/
+ RGBDEF( 222, 8, 41 ), /* pal 133*/
+ RGBDEF( 222, 8, 49 ), /* pal 134*/
+ RGBDEF( 239, 8, 49 ), /* pal 135*/
+ RGBDEF( 173, 16, 0 ), /* pal 136*/
+ RGBDEF( 173, 16, 33 ), /* pal 137*/
+ RGBDEF( 165, 16, 41 ), /* pal 138*/
+ RGBDEF( 206, 16, 41 ), /* pal 139*/
+ RGBDEF( 222, 16, 41 ), /* pal 140*/
+ RGBDEF( 231, 16, 41 ), /* pal 141*/
+ RGBDEF( 181, 24, 33 ), /* pal 142*/
+ RGBDEF( 165, 24, 41 ), /* pal 143*/
+ RGBDEF( 206, 24, 41 ), /* pal 144*/
+ RGBDEF( 247, 24, 41 ), /* pal 145*/
+ RGBDEF( 189, 24, 49 ), /* pal 146*/
+ RGBDEF( 222, 24, 49 ), /* pal 147*/
+ RGBDEF( 206, 33, 41 ), /* pal 148*/
+ RGBDEF( 239, 33, 41 ), /* pal 149*/
+ RGBDEF( 181, 41, 33 ), /* pal 150*/
+ RGBDEF( 165, 41, 49 ), /* pal 151*/
+ RGBDEF( 214, 41, 57 ), /* pal 152*/
+ RGBDEF( 189, 49, 49 ), /* pal 153*/
+ RGBDEF( 165, 66, 66 ), /* pal 154*/
+ RGBDEF( 206, 66, 66 ), /* pal 155*/
+ RGBDEF( 189, 74, 66 ), /* pal 156*/
+ RGBDEF( 181, 99, 37 ), /* pal 157*/
+ RGBDEF( 173, 90, 66 ), /* pal 158*/
+ RGBDEF( 189, 99, 74 ), /* pal 159*/
+ RGBDEF( 214, 74, 74 ), /* pal 160*/
+ RGBDEF( 222, 74, 74 ), /* pal 161*/
+ RGBDEF( 206, 90, 82 ), /* pal 162*/
+ RGBDEF( 165, 107, 99 ), /* pal 163*/
+ RGBDEF( 181, 107, 99 ), /* pal 164*/
+ RGBDEF( 222, 90, 82 ), /* pal 165*/
+ RGBDEF( 222, 99, 74 ), /* pal 166*/
+ RGBDEF( 222, 99, 90 ), /* pal 167*/
+ RGBDEF( 231, 66, 66 ), /* pal 168*/
+ RGBDEF( 239, 41, 57 ), /* pal 169*/
+ RGBDEF( 239, 90, 82 ), /* pal 170*/
+ RGBDEF( 247, 66, 74 ), /* pal 171*/
+ RGBDEF( 247, 90, 90 ), /* pal 172*/
+ RGBDEF( 255, 41, 66 ), /* pal 173*/
+ RGBDEF( 255, 57, 74 ), /* pal 174*/
+ RGBDEF( 255, 74, 82 ), /* pal 175*/
+ RGBDEF( 255, 90, 82 ), /* pal 176*/
+ RGBDEF( 255, 90, 90 ), /* pal 177*/
+ RGBDEF( 255, 99, 82 ), /* pal 178*/
+ RGBDEF( 255, 99, 99 ), /* pal 179*/
+ RGBDEF( 181, 139, 78 ), /* pal 180*/
+ RGBDEF( 198, 107, 107 ), /* pal 181*/
+ RGBDEF( 222, 123, 123 ), /* pal 182*/
+ RGBDEF( 222, 132, 115 ), /* pal 183*/
+ RGBDEF( 247, 107, 99 ), /* pal 184*/
+ RGBDEF( 247, 132, 115 ), /* pal 185*/
+ RGBDEF( 255, 107, 107 ), /* pal 186*/
+ RGBDEF( 255, 132, 115 ), /* pal 187*/
+ RGBDEF( 255, 140, 123 ), /* pal 188*/
+ RGBDEF( 222, 156, 132 ), /* pal 189*/
+ RGBDEF( 239, 140, 132 ), /* pal 190*/
+ RGBDEF( 255, 148, 140 ), /* pal 191*/
+ RGBDEF( 255, 165, 140 ), /* pal 192*/
+ RGBDEF( 198, 148, 148 ), /* pal 193*/
+ RGBDEF( 173, 140, 156 ), /* pal 194*/
+ RGBDEF( 193, 181, 65 ), /* pal 195*/
+ RGBDEF( 189, 185, 90 ), /* pal 196*/
+ RGBDEF( 208, 208, 90 ), /* pal 197*/
+ RGBDEF( 230, 226, 82 ), /* pal 198*/
+ RGBDEF( 243, 251, 82 ), /* pal 199*/
+ RGBDEF( 255, 255, 107 ), /* pal 200*/
+ RGBDEF( 255, 255, 115 ), /* pal 201*/
+ RGBDEF( 231, 222, 123 ), /* pal 202*/
+ RGBDEF( 247, 255, 123 ), /* pal 203*/
+ RGBDEF( 247, 173, 148 ), /* pal 204*/
+ RGBDEF( 255, 173, 148 ), /* pal 205*/
+ RGBDEF( 255, 189, 148 ), /* pal 206*/
+ RGBDEF( 165, 173, 156 ), /* pal 207*/
+ RGBDEF( 181, 198, 156 ), /* pal 208*/
+ RGBDEF( 247, 181, 156 ), /* pal 209*/
+ RGBDEF( 192, 186, 170 ), /* pal 210*/
+ RGBDEF( 185, 185, 197 ), /* pal 211*/
+ RGBDEF( 173, 206, 222 ), /* pal 212*/
+ RGBDEF( 198, 214, 214 ), /* pal 213*/
+ RGBDEF( 222, 181, 181 ), /* pal 214*/
+ RGBDEF( 231, 206, 206 ), /* pal 215*/
+ RGBDEF( 255, 181, 156 ), /* pal 216*/
+ RGBDEF( 255, 231, 156 ), /* pal 217*/
+ RGBDEF( 255, 181, 165 ), /* pal 218*/
+ RGBDEF( 255, 181, 173 ), /* pal 219*/
+ RGBDEF( 255, 189, 173 ), /* pal 220*/
+ RGBDEF( 255, 206, 181 ), /* pal 221*/
+ RGBDEF( 255, 214, 198 ), /* pal 222*/
+ RGBDEF( 255, 222, 202 ), /* pal 223*/
+ RGBDEF( 255, 231, 214 ), /* pal 224*/
+ RGBDEF( 255, 247, 222 ), /* pal 225*/
+ RGBDEF( 165, 206, 231 ), /* pal 226*/
+ RGBDEF( 165, 214, 239 ), /* pal 227*/
+ RGBDEF( 181, 222, 239 ), /* pal 228*/
+ RGBDEF( 206, 222, 239 ), /* pal 229*/
+ RGBDEF( 222, 231, 239 ), /* pal 230*/
+ RGBDEF( 255, 247, 239 ), /* pal 231*/
+ RGBDEF( 231, 239, 247 ), /* pal 232*/
+ RGBDEF( 165, 247, 255 ), /* pal 233*/
+ RGBDEF( 173, 222, 255 ), /* pal 234*/
+ RGBDEF( 189, 239, 255 ), /* pal 235*/
+ RGBDEF( 206, 239, 255 ), /* pal 236*/
+ RGBDEF( 222, 247, 255 ), /* pal 237*/
+ RGBDEF( 247, 255, 255 ), /* pal 238*/
+ RGBDEF( 255, 255, 255 ), /* pal 239*/
+ RGBDEF( 0, 0, 0 ), /* pal 240*/
+ RGBDEF( 191, 0, 0 ), /* pal 241*/
+ RGBDEF( 0, 191, 0 ), /* pal 242*/
+ RGBDEF( 191, 191, 0 ), /* pal 243*/
+ RGBDEF( 0, 0, 191 ), /* pal 244*/
+ RGBDEF( 191, 0, 191 ), /* pal 245*/
+ RGBDEF( 0, 191, 191 ), /* pal 246*/
+ RGBDEF( 192, 192, 192 ), /* pal 247*/
+ RGBDEF( 128, 128, 128 ), /* pal 248*/
+ RGBDEF( 255, 0, 0 ), /* pal 249*/
+ RGBDEF( 0, 255, 0 ), /* pal 250*/
+ RGBDEF( 255, 255, 0 ), /* pal 251*/
+ RGBDEF( 0, 0, 255 ), /* pal 252*/
+ RGBDEF( 255, 0, 255 ), /* pal 253*/
+ RGBDEF( 0, 255, 255 ), /* pal 254*/
+ RGBDEF( 255, 255, 255 ), /* pal 255*/
+};
+
+static MWUCHAR imagebits[] = {
+54,54,54,55,54,54,54,54,54,55,54,55,54,55,54,55,54,54,54,55,55,54,54,55,54,54,54,49,55,54,54,54,54,54,54,54,54,54,54,55,54,55,54,54,55,54,55,54,54,54,54,54,54,54,54,49,55,54,54,54,54,55,54,54,54,55,54,55,55,54,54,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,55,54,54,54,55,54,54,54,54,55,55,54,54,54,55,54,55,55,55,54,55,60,54,55,54,54,54,54,54,54,54,54,55,54,54,54,49,54,54,54,54,50,55,54,49,54,54,54,50,54,55,54,50,54,49,55,54,49,54,54,55,55,54,54,54,49,55,54,55,54,55,54,54,54,54,50,54,54,54,54,49,50,54,49,54,49,54,54,49,54,49,54,49,54,54,49,54,54,49,49,54,54,54,54,49,54,49,49,49,54,49,49,54,49,49,49,54,49,54,49,54,49,54,54,54,49,54,54,49,54,54,49,49,54,54,49,54,54,54,49,54,54,49,59,49,59,49,49,49,54,49,49,54,54,49,49,49,59,49,54,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,49,49,49,49,44,49,45,49,45,49,49,49,45,49,49,45,45,49,49,45,
+54,54,54,54,55,54,54,54,55,54,54,54,55,54,55,54,54,55,54,54,49,55,54,54,54,54,54,54,54,54,54,54,54,55,55,54,54,54,55,54,54,54,54,54,54,54,55,54,55,54,55,49,55,54,54,54,59,54,54,54,54,54,54,54,54,54,54,54,49,55,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,55,54,54,54,54,49,54,55,54,54,54,54,49,55,54,54,54,54,54,54,54,54,54,54,54,54,49,50,55,54,54,54,54,54,50,54,49,49,54,54,54,54,49,54,49,54,54,54,49,54,49,54,54,55,49,49,49,54,49,54,49,54,49,54,49,49,54,54,54,49,54,49,54,49,54,54,49,54,54,49,50,49,54,49,54,49,54,49,54,49,54,49,54,49,49,54,54,49,54,49,54,54,54,54,49,54,49,54,54,54,49,54,49,54,54,49,54,54,49,54,49,54,49,54,54,49,54,54,49,49,49,49,49,54,59,49,54,54,49,54,49,59,49,49,49,59,49,49,49,54,49,49,59,49,49,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,45,49,49,49,49,49,44,49,49,49,45,49,49,49,45,49,49,49,45,49,45,49,45,45,45,49,45,45,45,
+54,54,55,55,54,55,54,55,54,54,55,54,54,54,54,54,55,54,54,55,54,55,54,54,54,55,54,54,54,55,54,54,55,49,55,55,54,54,54,55,54,55,54,54,55,54,54,54,55,49,59,54,54,55,54,54,55,49,54,54,54,54,54,55,54,54,55,49,59,54,54,55,54,55,54,54,54,54,54,55,54,54,54,54,54,54,54,54,54,54,54,55,54,54,54,54,55,49,54,55,54,55,54,55,55,54,54,54,54,55,54,54,54,54,55,49,54,54,54,54,54,49,54,54,49,54,49,54,54,54,54,55,50,54,55,54,54,54,49,54,55,49,54,54,54,49,49,54,54,54,55,54,54,54,54,54,54,54,54,54,54,49,54,49,54,54,49,54,49,50,49,50,49,54,49,49,54,49,54,49,54,54,49,54,54,49,54,54,50,49,54,49,54,49,49,49,49,49,54,54,49,49,49,54,49,54,49,49,54,49,54,54,49,54,49,49,50,49,49,49,49,49,54,54,54,49,49,49,54,49,49,49,49,49,49,54,49,49,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,45,49,45,49,45,49,49,49,45,49,49,49,49,49,45,45,49,45,45,49,45,45,45,49,45,49,45,45,45,49,45,45,49,49,45,
+55,54,54,54,54,54,55,54,54,54,54,54,55,54,54,54,54,54,54,54,54,54,54,55,54,54,54,54,55,54,54,54,54,54,49,54,54,54,54,54,54,54,55,49,54,54,54,54,54,54,54,54,54,49,54,54,54,55,49,54,49,55,54,54,55,54,54,54,55,54,54,54,55,49,59,54,55,55,49,59,54,55,54,59,54,55,55,54,54,55,49,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,55,54,55,54,54,54,54,54,54,54,49,49,54,54,54,54,54,54,54,54,49,54,49,54,49,50,49,49,54,50,55,50,54,49,54,50,49,55,49,54,49,54,49,49,54,49,54,49,54,49,54,54,54,54,49,54,49,54,49,54,50,49,49,54,49,49,49,54,49,49,54,49,54,49,54,54,49,54,54,49,54,49,49,49,54,49,54,49,54,49,54,49,54,49,54,49,54,49,49,54,54,49,54,49,54,49,54,49,54,49,54,49,54,49,54,49,49,54,54,49,54,54,49,54,59,49,59,54,49,59,49,49,49,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,45,49,49,49,45,49,45,49,45,49,45,49,49,45,49,45,49,49,45,49,45,49,45,45,49,45,49,45,45,49,45,49,45,45,49,45,45,45,45,
+54,54,54,54,54,54,54,54,55,54,55,55,54,54,55,54,54,55,54,54,55,54,54,49,55,54,54,55,54,54,55,54,49,55,54,54,54,54,54,55,54,54,54,54,54,54,55,54,54,54,54,55,54,55,54,49,55,55,54,54,59,49,54,54,54,54,54,54,54,54,54,54,54,54,55,54,49,54,54,54,54,54,54,54,54,54,49,55,54,54,54,54,54,49,55,54,55,54,54,55,49,55,54,54,54,55,54,54,54,54,54,55,54,54,55,54,54,54,54,54,54,49,50,54,54,54,49,54,54,54,54,50,54,50,54,54,54,49,54,49,54,54,54,54,49,54,54,54,54,54,54,54,54,54,49,54,54,49,54,54,54,49,54,49,49,54,49,49,49,54,50,49,54,54,54,54,49,49,54,49,49,49,54,54,49,49,54,49,50,54,54,49,54,49,54,54,49,54,49,54,49,54,54,49,54,49,54,49,49,54,49,54,54,49,54,49,54,49,49,54,49,49,49,49,49,49,54,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,45,49,45,49,49,45,49,45,49,45,49,45,49,45,49,45,49,45,45,45,49,45,45,49,45,49,45,45,45,49,45,45,45,45,45,45,
+54,55,54,54,55,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,49,55,54,54,54,49,55,49,55,54,54,54,55,54,54,54,54,55,54,54,54,54,49,55,54,54,54,54,49,54,54,54,54,49,54,54,54,49,49,55,54,54,54,54,54,54,54,54,54,59,54,49,55,54,54,55,54,54,54,54,54,54,54,54,54,54,54,59,54,55,54,49,55,54,54,49,54,54,54,49,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,49,54,54,54,54,54,50,54,54,50,54,50,54,54,54,49,54,50,49,54,54,54,50,54,49,54,49,54,49,49,54,50,54,50,54,49,54,49,54,54,49,54,54,49,54,49,54,49,54,54,49,50,50,50,49,49,54,54,49,50,49,49,54,50,49,49,54,49,50,49,54,49,49,54,49,49,54,49,54,49,49,54,49,54,49,54,49,50,49,54,49,54,49,54,49,54,49,49,54,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,59,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,45,49,49,49,49,49,49,49,45,49,49,45,45,49,49,45,49,45,45,49,45,49,45,45,45,45,45,49,45,45,49,45,45,45,45,45,45,45,45,49,45,45,45,45,45,45,45,
+54,49,55,54,54,54,49,55,54,54,54,54,55,54,54,54,54,54,54,55,54,54,54,54,54,55,49,54,54,55,54,54,54,54,54,55,54,49,54,54,54,54,54,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,49,54,49,54,54,55,54,54,54,54,54,54,54,54,54,54,54,55,49,54,55,54,54,55,49,54,54,54,55,49,54,54,54,54,54,54,54,54,54,55,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,49,54,54,54,49,54,54,49,54,54,54,49,54,55,49,54,54,50,50,54,54,54,49,54,54,49,54,54,49,54,54,49,54,49,54,54,54,50,50,54,49,54,49,54,49,54,49,49,50,49,49,49,50,49,49,49,49,49,49,50,49,49,50,50,49,49,49,54,49,54,49,49,50,49,49,49,49,49,54,49,49,49,49,49,49,49,54,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,45,45,45,49,45,45,49,45,49,45,45,49,45,49,45,45,45,49,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,
+55,49,54,54,54,55,49,54,55,54,54,54,54,55,55,54,50,55,50,49,55,54,54,55,54,54,54,50,49,54,54,54,54,50,54,54,54,55,49,54,54,55,55,54,54,54,54,54,55,54,54,54,54,54,55,49,54,55,49,54,54,54,55,54,54,54,55,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,55,55,49,54,55,54,55,49,54,54,49,54,49,54,54,54,54,54,55,49,54,50,54,49,54,54,54,54,49,54,54,50,49,54,50,49,54,54,54,54,49,54,50,54,55,49,50,54,54,49,54,50,54,50,49,54,49,54,54,49,54,50,49,54,54,50,49,54,49,54,49,49,50,49,50,50,50,49,49,49,50,49,50,49,50,50,49,50,49,49,49,50,49,49,50,49,49,50,49,50,50,49,50,49,50,49,54,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,49,45,45,49,49,49,49,49,49,49,45,49,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,49,45,45,45,45,45,45,45,45,45,
+49,55,54,54,54,54,55,54,54,54,50,55,50,49,49,55,50,54,49,54,49,55,54,49,54,50,54,54,54,54,54,49,50,54,49,55,54,54,54,54,54,54,54,50,54,55,54,54,54,49,55,50,54,54,54,54,54,49,55,55,54,54,49,54,54,54,54,55,54,55,54,59,49,55,54,54,54,55,54,54,54,54,54,54,54,54,54,54,49,49,49,49,49,55,49,54,54,54,54,55,54,54,54,54,54,54,50,54,50,54,50,55,54,54,54,50,54,54,54,54,49,54,54,54,54,49,54,49,54,49,54,49,49,54,49,49,54,49,54,54,49,54,54,49,54,49,49,54,49,54,49,50,50,49,49,50,50,49,54,49,50,49,49,49,49,49,50,49,49,50,49,50,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,50,49,50,49,49,50,49,49,49,49,49,50,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,45,45,49,49,49,45,49,45,49,45,49,49,49,45,49,45,49,49,49,49,49,49,45,49,49,49,45,49,45,49,49,49,49,49,45,45,45,45,45,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,
+54,54,55,54,55,55,49,55,54,54,49,55,49,55,54,49,55,54,55,54,54,54,49,55,49,55,54,54,55,50,54,54,54,54,54,49,55,54,55,54,54,54,50,54,50,49,55,54,54,54,55,49,54,54,55,49,55,55,49,50,49,55,54,54,55,54,54,49,54,54,54,54,54,54,49,54,54,49,55,49,55,54,54,49,49,55,49,54,54,54,55,54,54,54,54,54,54,54,49,54,49,55,54,54,49,54,54,49,54,49,54,49,50,54,50,49,50,50,50,54,50,54,54,54,50,50,49,50,54,54,54,54,54,50,50,54,54,54,49,50,50,50,49,50,50,50,50,50,50,50,49,50,49,50,49,50,49,50,50,50,49,50,50,50,49,50,49,49,50,49,50,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,50,49,45,50,49,45,50,49,49,49,50,45,50,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,45,49,49,45,49,49,45,45,49,49,49,49,49,45,49,45,49,49,45,49,45,49,49,45,45,49,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,39,45,45,45,
+54,54,49,55,49,49,54,54,54,55,55,49,55,49,55,49,55,49,54,55,49,55,49,49,55,50,49,50,49,55,50,55,50,50,49,55,49,50,49,54,55,50,55,49,54,54,49,54,55,49,49,54,55,49,49,55,49,49,55,49,49,54,55,54,49,54,54,54,54,55,54,55,54,55,54,55,49,54,49,54,54,54,55,54,54,54,54,54,55,49,49,54,49,54,55,55,54,54,54,55,49,50,54,55,54,50,54,54,54,54,50,54,50,50,54,50,54,54,50,50,49,50,49,50,49,50,50,49,50,50,50,49,50,49,50,49,50,49,50,50,49,49,50,49,49,50,49,50,45,50,50,49,50,50,49,50,49,49,49,49,49,50,45,49,49,49,50,49,45,49,49,49,49,49,49,49,49,50,45,49,49,49,49,49,49,50,50,45,49,49,49,49,49,45,50,45,49,49,45,49,45,50,45,50,45,50,45,49,49,45,49,45,49,45,45,49,45,45,45,45,49,45,45,45,49,45,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,
+55,55,54,55,55,55,55,55,55,49,55,49,54,54,55,49,55,49,55,49,55,49,55,49,49,49,54,55,55,49,50,50,49,55,49,54,49,54,50,50,49,49,50,54,49,54,54,49,54,54,54,54,49,55,55,49,54,55,49,55,54,49,49,54,54,54,54,55,49,54,49,54,54,49,54,54,54,55,54,55,49,55,49,55,49,55,49,54,49,55,49,54,55,49,49,49,54,54,49,49,50,49,50,49,49,49,50,50,49,50,50,49,49,49,49,50,49,49,49,50,50,50,50,50,50,49,50,49,50,49,50,49,50,50,50,50,49,49,49,50,50,50,50,50,50,49,50,50,50,49,50,49,49,49,50,45,50,49,49,49,50,49,50,49,50,45,50,50,50,45,50,45,49,49,49,45,45,45,49,49,45,49,45,49,45,45,45,50,45,45,45,45,49,45,49,45,45,50,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,45,45,39,39,39,45,39,
+49,49,55,49,55,49,55,49,55,50,49,49,55,55,49,55,49,49,55,49,49,50,49,50,55,49,54,49,49,54,49,49,55,49,54,50,54,49,54,54,50,49,54,49,55,50,49,55,54,49,54,49,55,49,49,55,49,55,49,49,54,54,55,55,54,54,49,49,55,55,54,49,55,54,54,49,55,54,49,49,55,49,49,49,49,49,49,49,54,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,50,50,50,49,50,49,49,49,49,49,45,50,49,49,49,50,45,50,45,50,50,45,50,45,50,50,50,45,45,50,45,50,45,50,45,50,45,50,45,46,49,49,45,50,45,45,50,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,40,45,45,45,45,45,45,45,40,45,45,40,45,45,45,45,45,45,45,45,45,45,45,40,45,45,39,45,39,45,39,45,45,45,45,45,45,45,45,45,45,45,45,45,39,45,45,45,45,40,45,45,45,45,45,45,45,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,44,45,45,45,45,45,45,45,44,45,45,45,44,45,45,39,45,45,45,44,39,44,39,45,44,39,45,39,45,44,45,45,39,39,45,45,45,44,45,44,
+49,49,55,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,55,49,49,55,50,54,54,49,50,49,50,49,50,49,50,50,54,49,54,49,54,49,49,54,49,49,54,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,55,49,55,49,49,49,54,54,49,49,55,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,45,49,49,49,49,45,49,49,49,45,45,49,45,50,45,49,49,45,50,45,50,45,49,49,45,50,45,49,49,45,40,50,40,50,45,45,45,50,40,45,45,45,45,45,40,45,45,45,40,45,45,45,45,45,45,45,45,40,45,45,40,45,40,40,39,45,45,45,45,45,40,45,40,45,45,45,39,45,39,39,45,45,39,45,39,40,45,45,39,45,39,39,45,45,39,40,39,45,45,39,45,45,45,45,45,39,45,45,45,39,45,39,45,45,45,45,45,39,45,45,39,45,45,39,39,39,45,39,45,39,45,44,44,44,45,45,45,45,44,45,45,45,45,45,45,45,44,45,44,45,45,45,44,45,45,39,39,45,45,45,44,45,39,39,45,44,45,45,44,45,45,44,39,45,39,39,39,45,45,39,44,44,39,39,44,39,44,39,44,39,44,39,44,39,44,45,39,39,44,44,39,39,39,39,39,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,50,49,50,49,50,50,50,49,50,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,55,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,49,49,45,49,49,45,45,49,49,45,45,49,40,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,40,49,45,45,45,45,45,45,45,45,45,40,45,45,45,45,40,45,45,45,39,45,45,45,40,45,45,45,45,39,45,45,45,45,45,45,40,40,40,39,45,45,40,45,45,39,45,39,45,45,40,39,45,45,45,40,39,45,45,39,45,45,45,39,45,45,39,45,39,45,39,45,39,45,39,44,45,45,45,39,45,45,39,45,39,45,39,39,45,39,39,45,45,39,45,45,39,39,45,39,45,45,45,45,45,44,45,45,45,45,44,45,45,45,45,45,45,45,45,45,45,44,45,45,45,44,45,44,39,44,44,45,39,44,44,45,39,44,45,39,44,39,39,44,39,44,44,44,44,39,39,39,39,39,39,44,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,44,39,39,39,39,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,50,50,49,50,49,50,49,50,49,49,49,49,49,50,49,50,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,49,49,49,49,45,49,45,45,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,40,45,45,45,45,45,45,45,45,45,45,40,39,45,45,40,45,45,45,45,45,40,45,45,45,45,45,40,39,45,45,45,39,45,40,40,45,45,40,40,40,39,45,39,40,39,40,40,45,39,40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,45,39,39,39,45,39,39,39,39,39,39,39,45,39,44,45,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,45,39,44,45,39,44,44,44,45,44,39,45,44,44,44,44,44,44,45,44,44,44,39,44,45,44,39,44,45,39,44,39,44,39,44,39,39,39,44,39,44,39,39,34,39,44,34,44,44,44,44,39,44,44,34,39,39,44,44,44,39,44,39,44,44,44,44,39,44,34,39,39,44,34,34,
+49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,49,49,49,49,49,49,49,49,49,49,49,49,50,50,49,50,50,49,49,49,49,49,49,50,49,50,50,49,49,49,49,49,49,49,49,49,45,49,49,49,49,49,45,49,49,49,45,49,45,49,45,45,49,45,45,45,49,45,45,45,49,45,45,45,45,45,49,45,45,45,45,45,45,45,45,45,45,45,39,40,39,45,40,45,40,40,40,40,39,40,39,40,45,44,45,39,45,40,45,39,40,40,45,39,39,40,39,45,39,39,39,40,45,45,40,45,39,39,40,39,40,39,39,45,39,39,45,39,40,45,39,39,40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,44,39,39,44,45,39,44,44,44,44,39,44,44,44,44,44,39,39,44,39,39,44,39,44,39,45,39,39,44,44,39,44,44,44,44,44,44,39,39,34,44,44,39,44,34,44,34,34,34,34,34,34,34,44,34,44,34,34,34,44,34,34,34,34,34,34,39,34,34,34,34,34,34,34,
+49,45,49,49,45,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,50,40,50,49,40,45,50,45,50,45,50,45,45,45,45,45,49,45,49,45,45,45,45,45,49,45,45,45,45,45,45,45,49,45,45,45,45,45,45,49,45,45,45,45,45,45,45,45,40,45,45,45,39,45,40,40,40,45,39,39,40,39,39,39,39,39,40,39,40,39,39,39,40,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,34,39,39,34,39,39,39,34,39,34,39,34,39,39,39,39,44,34,39,39,39,39,39,39,34,39,39,39,39,39,44,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,34,34,39,34,39,39,39,39,44,39,39,39,44,39,39,39,44,44,44,44,44,39,44,44,44,45,45,39,45,39,44,39,44,39,44,39,39,39,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,
+49,49,45,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,40,49,49,49,49,40,49,49,40,49,49,49,45,40,50,45,45,45,50,40,45,40,40,45,40,40,45,40,39,40,39,40,40,40,40,40,39,40,40,40,40,40,45,45,45,40,45,45,45,45,45,45,40,40,45,44,45,45,40,45,45,44,45,40,40,40,39,39,39,39,39,39,39,39,39,39,39,39,34,39,39,34,39,39,39,34,39,39,39,39,39,39,39,39,39,39,39,34,39,39,39,39,34,39,34,39,39,39,39,34,39,39,39,34,39,39,39,39,39,39,34,39,34,39,34,39,34,39,39,39,34,39,39,39,39,39,34,39,39,34,39,34,39,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,39,34,34,34,34,34,34,34,34,34,39,34,34,34,34,39,39,39,34,34,34,34,34,34,34,34,34,34,39,34,39,34,34,39,39,34,34,34,34,34,34,39,34,34,34,34,34,34,34,39,34,34,39,34,39,39,39,39,39,39,39,34,44,34,39,39,39,39,34,34,34,39,34,39,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,32,34,34,32,34,34,34,34,34,34,34,32,34,34,34,32,34,34,34,34,34,34,34,34,34,
+49,45,49,45,45,49,45,49,45,45,49,49,40,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,45,45,45,45,45,39,40,39,39,39,39,39,39,34,34,34,34,34,34,34,29,34,29,29,28,34,29,33,28,28,28,33,28,28,28,28,28,28,28,28,28,28,28,33,28,28,28,28,28,28,28,28,28,28,28,28,32,34,28,28,32,28,28,32,28,28,32,32,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,18,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,18,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,17,28,17,28,17,28,17,28,17,17,17,28,17,28,17,17,17,28,17,17,17,28,17,17,17,17,17,12,28,17,12,28,17,12,28,17,17,17,17,12,17,12,17,17,12,17,17,12,28,17,17,17,17,28,17,12,28,17,17,28,17,17,17,17,17,11,11,10,12,11,10,10,12,10,10,10,12,12,12,12,17,12,12,12,10,12,11,11,10,11,10,12,11,12,12,17,17,17,28,17,28,28,17,28,17,28,28,28,28,28,28,28,28,28,28,29,29,32,32,34,34,28,34,34,32,29,32,32,34,32,29,28,34,
+49,49,45,49,49,49,49,49,49,49,49,49,49,49,49,45,40,39,39,34,34,34,29,29,28,28,28,28,12,17,17,12,12,12,12,11,11,10,10,11,10,4,11,10,12,10,4,11,12,10,11,10,10,4,10,4,10,4,10,4,10,4,10,4,10,4,11,10,12,11,12,11,17,12,11,17,12,17,12,12,17,11,4,10,4,10,10,4,11,10,4,10,11,10,4,11,10,4,11,10,4,11,10,10,4,11,10,10,10,4,10,4,11,4,10,10,4,10,10,10,4,4,10,4,10,10,4,10,11,4,10,10,4,10,10,10,4,10,4,10,4,4,10,4,10,4,10,4,12,10,4,10,4,10,4,12,4,10,10,10,4,10,4,10,4,10,4,10,4,10,10,4,10,10,4,10,4,10,4,10,10,4,10,4,12,10,4,4,10,4,10,4,10,4,10,4,10,4,4,11,4,10,10,4,4,10,4,4,10,10,4,10,11,4,10,10,12,4,10,4,11,4,10,5,10,4,11,11,10,4,10,10,4,10,4,11,10,10,4,10,4,10,12,17,10,10,12,17,12,17,11,17,17,17,17,17,17,17,17,17,12,10,10,10,10,10,11,10,4,10,10,10,11,4,10,10,10,10,5,10,11,10,10,11,10,10,10,10,10,10,17,17,17,13,28,17,29,29,28,28,28,28,28,32,29,28,34,28,
+45,45,49,45,40,40,40,40,39,29,29,28,17,12,10,4,10,4,10,4,4,4,4,4,4,4,4,4,10,4,4,10,4,10,4,10,4,10,11,4,10,11,10,10,4,10,11,4,10,11,4,10,4,11,10,11,4,10,4,11,10,11,10,11,10,11,11,17,17,12,17,12,12,17,12,11,17,12,17,17,12,18,17,12,11,10,11,10,10,10,10,11,10,4,11,10,11,10,10,11,10,10,4,10,11,10,4,11,4,10,11,10,10,11,10,4,10,10,4,10,4,10,10,10,12,10,10,10,5,10,10,4,12,10,4,10,12,10,10,10,12,10,10,10,12,10,10,10,10,10,12,10,10,5,10,10,10,12,4,12,10,12,10,10,10,12,10,12,10,4,10,12,10,4,12,10,10,10,10,12,4,10,10,10,4,10,10,12,10,12,4,11,10,12,10,10,10,11,10,10,10,11,4,10,10,10,10,11,10,11,10,5,10,10,4,10,10,11,12,11,10,4,11,10,11,10,10,10,4,11,10,10,11,10,10,10,10,10,10,4,28,32,17,17,12,17,17,11,17,12,12,12,12,12,12,17,17,12,17,17,17,17,12,11,10,11,10,10,11,12,10,11,10,10,11,4,12,10,10,11,10,4,11,10,4,11,10,12,10,12,12,12,12,17,17,18,17,17,29,28,28,28,28,28,28,28,28,32,
+45,45,40,35,40,40,29,29,33,18,17,12,12,12,10,12,10,10,4,10,10,10,11,10,10,12,11,10,4,11,10,10,11,4,11,4,11,4,10,11,4,10,11,4,10,11,4,10,11,4,10,11,11,4,10,4,10,11,10,10,11,10,10,11,17,28,17,17,11,17,17,17,17,12,11,11,17,17,17,17,17,17,12,17,28,11,12,10,11,10,11,10,10,11,10,12,4,10,11,4,10,11,10,11,10,10,10,4,11,10,10,12,10,4,10,10,10,10,12,10,12,4,12,10,4,10,12,10,10,10,12,10,10,12,10,10,10,12,10,10,4,10,10,4,10,10,12,10,12,10,12,10,12,10,12,10,12,10,12,10,5,10,12,12,10,10,4,10,12,10,12,10,10,12,10,4,12,12,4,10,12,10,12,10,12,10,12,10,4,10,10,10,4,10,10,4,10,10,10,10,10,10,12,10,10,12,10,10,10,5,10,10,10,10,12,10,10,10,10,10,10,12,10,11,4,10,11,10,10,10,11,10,10,11,10,12,4,4,10,44,45,32,10,17,17,11,17,12,17,17,17,17,17,17,17,17,17,17,12,17,12,12,28,17,12,12,11,11,10,11,10,4,11,10,11,10,11,10,11,4,10,10,5,10,10,10,10,10,12,12,12,17,18,17,17,17,28,17,17,28,28,28,28,28,28,28,28,28,
+40,40,40,40,39,40,29,29,29,29,18,17,12,12,12,10,12,4,10,12,4,10,10,4,12,10,10,10,10,10,12,4,10,10,10,10,5,11,4,10,10,11,10,10,11,10,10,11,5,10,4,10,10,10,11,10,4,10,4,11,5,11,11,28,17,11,11,11,11,240,240,240,11,11,33,33,12,4,240,240,240,11,11,11,12,28,17,12,11,11,10,11,10,4,10,10,11,11,10,10,11,4,10,10,4,10,12,10,10,12,10,10,10,12,10,12,10,12,10,5,10,12,10,12,10,12,10,5,10,12,10,12,10,12,12,12,12,5,12,12,12,12,12,12,10,12,4,12,10,12,12,10,12,12,10,12,10,12,10,10,12,10,10,12,10,12,10,12,12,10,10,12,10,5,10,12,10,10,12,10,12,10,10,12,10,12,10,10,12,10,12,10,12,10,10,12,10,10,10,12,10,4,10,12,4,10,5,10,12,10,12,10,4,12,10,10,12,4,12,11,4,10,10,10,11,10,4,11,11,11,10,11,4,10,10,240,17,44,59,45,12,10,12,17,12,12,17,11,4,240,240,240,240,240,240,240,240,4,17,17,17,17,12,17,17,17,10,10,11,10,11,10,10,11,10,11,10,10,10,10,10,10,10,10,10,12,12,12,12,17,17,17,17,17,28,17,28,28,17,28,17,28,28,28,28,28,28,28,
+40,40,35,40,39,39,39,29,29,29,33,18,28,12,12,12,12,12,12,10,10,12,10,10,10,10,4,12,10,12,4,10,10,5,10,4,10,4,10,10,4,12,10,10,5,10,10,4,10,11,10,11,5,11,4,10,11,10,11,10,11,17,28,12,11,11,4,4,11,49,94,113,212,229,235,228,228,212,105,78,44,10,4,4,11,17,28,17,17,10,11,10,11,10,11,11,10,10,10,12,10,10,12,10,12,10,10,10,5,10,12,4,12,10,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,10,12,12,12,12,12,10,12,10,12,10,12,12,4,12,12,12,4,12,12,12,10,5,10,12,10,12,4,12,12,10,5,10,12,12,10,10,12,12,10,10,4,10,12,10,12,10,10,12,10,12,10,10,12,10,12,4,10,10,10,10,4,10,4,10,11,4,11,44,49,60,34,10,17,12,17,12,17,11,4,4,17,49,74,85,94,94,89,78,65,33,4,240,11,17,17,12,12,28,17,12,10,11,10,12,10,10,10,4,10,10,10,10,10,12,12,12,12,12,17,12,17,17,13,17,17,17,29,17,29,17,28,28,28,17,28,28,28,28,28,28,
+39,40,39,39,39,39,19,39,18,29,29,29,28,28,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,5,12,10,12,12,10,12,12,5,12,10,4,10,10,5,10,10,10,10,10,4,11,10,10,11,4,11,10,4,28,17,11,17,4,4,49,103,255,236,229,118,107,97,96,96,102,109,228,229,237,236,93,33,4,12,11,17,34,28,11,11,10,11,10,4,10,12,11,11,12,10,10,12,10,12,12,12,12,12,12,12,12,5,12,12,12,5,12,12,12,12,12,5,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,5,12,12,12,12,10,12,12,12,12,10,12,5,12,10,12,5,12,12,5,12,12,4,12,10,12,4,10,12,10,4,10,12,10,10,4,10,10,11,10,11,4,10,54,49,17,10,10,12,12,17,12,11,4,17,66,113,237,236,233,227,227,227,227,235,255,255,230,74,28,4,4,17,17,17,12,28,17,12,11,11,10,10,12,10,12,12,12,12,12,12,17,17,17,17,17,17,17,17,17,17,13,28,17,29,17,29,28,17,28,28,28,28,28,28,28,28,
+40,39,40,39,39,39,39,29,39,19,29,29,29,28,28,13,12,12,12,12,5,12,5,10,10,10,10,5,10,5,4,10,5,5,12,4,5,5,5,10,4,10,10,4,4,4,4,10,4,5,4,10,10,4,11,4,10,4,12,28,17,11,18,4,33,83,237,229,114,63,44,39,39,33,33,28,28,33,33,44,90,235,235,212,62,4,11,17,11,34,17,10,11,11,11,12,11,4,10,5,10,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,12,5,5,12,10,12,10,4,12,10,4,10,10,4,4,11,34,28,12,12,12,17,11,17,17,4,12,49,102,235,234,116,106,101,101,101,101,106,106,116,119,229,238,230,74,33,4,12,17,17,12,17,17,4,10,12,12,12,12,12,12,12,12,17,17,17,18,17,13,18,17,28,28,29,17,17,17,17,18,28,17,28,28,28,28,28,28,17,28,28,28,
+39,40,39,39,39,39,39,39,39,39,29,29,18,18,12,12,5,12,7,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,8,20,8,9,20,14,20,9,14,14,12,10,12,4,11,4,10,10,11,17,28,11,11,240,44,110,255,228,106,63,4,240,11,11,11,11,11,11,11,4,240,44,64,109,235,237,96,4,11,17,12,28,28,5,10,10,10,10,10,12,12,12,4,12,4,5,5,5,5,5,12,5,5,5,5,5,5,5,12,5,5,5,5,5,5,5,5,12,5,5,5,5,5,5,5,5,5,5,5,5,12,5,12,5,12,5,12,12,5,12,12,5,12,12,5,12,12,5,5,12,5,5,12,12,5,5,12,5,12,12,5,12,12,12,12,5,12,5,12,12,10,12,5,12,5,12,5,12,4,12,5,12,5,12,12,12,12,5,12,5,5,12,5,5,12,4,5,12,5,5,12,5,12,5,12,12,12,5,12,12,10,5,5,12,12,10,12,12,10,12,10,11,10,11,12,10,10,17,10,12,12,17,240,33,64,119,119,106,64,59,59,49,44,44,49,59,65,69,95,115,117,235,255,105,39,11,12,17,12,17,28,17,12,17,12,17,17,12,17,17,18,12,18,17,17,17,17,17,18,28,13,17,18,29,29,17,17,28,28,28,29,28,28,28,28,28,17,28,28,
+39,40,39,40,39,39,40,19,6,20,20,20,20,22,22,22,22,22,23,23,24,24,24,24,24,24,31,31,25,31,138,24,31,31,138,31,138,31,138,31,138,31,31,31,31,143,31,31,143,24,12,4,4,11,10,4,11,12,28,11,11,4,49,226,235,109,119,64,90,103,59,240,4,18,12,18,11,4,28,68,68,59,234,101,111,255,68,240,12,17,17,34,17,12,12,12,12,12,12,5,12,13,13,13,13,13,13,13,19,12,13,13,13,13,13,13,13,13,13,13,13,13,19,13,13,19,6,13,19,13,19,13,19,13,13,19,13,19,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,12,13,13,13,13,13,12,13,13,13,12,13,12,13,13,13,13,12,13,13,12,13,13,13,12,6,12,13,12,13,12,13,12,13,12,12,13,12,12,13,12,5,13,12,12,12,5,12,5,5,12,12,5,5,12,4,10,5,5,5,4,10,10,4,10,4,11,10,4,10,12,17,12,17,17,4,44,96,227,117,117,64,55,240,4,12,5,12,12,12,5,240,44,212,237,226,117,236,230,49,12,12,17,12,17,28,12,12,17,17,17,17,17,28,17,17,17,17,18,28,17,28,17,17,17,29,17,17,17,28,28,28,28,17,17,17,28,28,17,28,28,28,28,
+39,40,39,39,39,40,20,164,164,2,3,129,137,142,138,138,131,131,130,131,131,122,131,122,130,123,123,122,122,122,138,122,122,130,138,122,138,122,138,130,138,138,130,130,130,130,138,26,138,31,9,10,10,10,4,11,10,17,12,12,4,11,228,237,113,90,212,96,61,49,68,97,29,5,40,18,12,61,66,40,44,101,82,64,106,118,227,60,240,11,11,28,28,17,17,17,12,12,5,13,20,23,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,15,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,15,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,22,23,23,23,23,23,23,23,22,22,23,22,23,22,23,22,23,22,23,22,23,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,20,13,5,12,10,10,10,4,10,4,12,12,11,17,11,240,45,96,116,112,95,235,44,44,91,28,4,17,18,17,5,240,65,102,59,63,236,116,114,237,237,44,4,12,17,12,17,28,28,17,18,28,28,28,28,17,29,29,28,29,17,29,18,29,28,28,28,17,29,28,29,28,28,28,28,28,29,28,28,28,28,18,17,28,
+39,39,40,39,40,35,24,185,231,223,187,179,187,186,171,169,126,147,134,144,134,134,146,134,131,131,131,131,131,131,131,146,123,123,123,123,123,123,123,122,123,123,123,123,123,123,123,130,25,25,22,10,4,11,10,4,12,12,11,12,240,93,237,212,235,82,4,240,99,93,11,55,93,65,18,44,66,59,11,70,118,33,240,49,116,229,233,227,39,4,17,12,17,12,4,10,12,4,12,22,24,25,31,138,138,138,138,130,131,138,142,146,146,138,146,142,138,138,138,138,137,138,26,122,27,26,27,27,130,129,26,26,129,120,120,120,120,120,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,3,3,3,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,16,16,16,16,16,16,16,16,16,24,16,16,24,23,24,24,24,24,24,16,16,16,24,16,24,24,24,24,16,24,24,24,24,24,24,24,16,16,24,24,24,24,24,23,24,24,24,24,24,24,24,24,13,4,12,10,10,10,12,10,17,10,10,12,4,33,90,116,116,212,62,44,211,66,33,93,49,240,4,240,34,99,97,44,62,119,96,102,255,228,237,229,44,4,17,12,12,17,28,28,17,28,28,28,28,29,17,28,17,28,28,18,17,17,18,18,17,29,17,29,17,29,17,28,28,28,17,28,17,28,17,17,28,17,
+39,39,39,39,40,35,151,1,160,255,168,124,147,132,131,123,131,131,123,131,131,123,123,122,123,123,123,122,123,122,122,122,130,122,122,130,122,138,130,122,122,130,130,130,130,130,130,138,25,31,9,4,11,5,11,10,17,11,12,240,44,234,101,117,237,65,39,29,4,105,229,59,44,70,82,65,59,49,113,237,18,18,44,44,114,235,95,117,109,11,4,12,17,17,12,10,10,4,13,31,25,138,26,130,131,131,132,134,147,147,169,168,174,175,170,177,179,179,186,186,187,186,187,188,188,187,188,190,191,191,191,191,191,218,219,219,220,219,219,222,221,221,221,221,221,221,220,220,220,220,219,218,219,219,216,204,205,204,209,191,191,190,191,190,190,185,185,185,183,186,183,186,167,167,167,161,167,161,161,161,161,160,155,152,155,152,152,152,144,146,146,146,131,146,146,146,130,146,130,131,123,138,122,138,130,122,138,26,122,138,138,26,26,138,26,26,26,26,26,26,25,16,24,25,25,31,24,5,12,4,5,10,4,12,10,12,12,17,10,68,106,117,237,107,59,18,61,255,211,90,102,59,45,82,108,103,97,229,230,11,63,59,232,232,227,237,105,39,4,10,11,17,28,28,18,28,29,28,28,28,28,29,29,29,28,28,28,29,17,28,29,17,29,17,17,28,28,28,28,28,28,28,28,28,28,28,17,28,
+39,39,39,39,39,19,30,27,137,255,129,129,26,122,122,138,138,138,138,138,26,26,26,26,26,26,26,138,25,26,138,26,26,138,26,26,26,138,138,138,26,138,26,138,26,138,138,25,24,143,9,4,10,4,4,12,11,12,12,11,114,235,49,33,114,75,55,40,18,240,93,237,103,90,69,97,103,236,255,240,5,29,70,59,114,33,44,106,119,66,240,11,12,28,12,10,12,10,13,27,143,138,138,123,131,131,131,132,131,131,131,132,131,131,124,124,124,124,124,124,132,132,132,139,134,132,134,147,147,147,152,169,168,168,161,168,168,172,172,172,172,186,186,186,186,185,186,185,185,188,188,188,188,188,188,191,191,191,191,205,205,205,205,216,216,218,218,218,220,223,223,221,216,191,188,188,188,188,188,186,187,188,187,187,187,187,187,186,186,184,186,179,184,184,172,172,175,175,171,171,175,171,171,169,169,169,147,134,134,132,139,132,132,139,139,132,132,132,131,131,132,139,131,26,138,25,25,12,5,12,10,10,10,17,12,12,17,240,49,101,116,106,227,227,95,65,240,59,255,255,237,113,108,212,237,255,255,231,240,18,82,69,238,118,116,118,238,72,12,11,12,17,28,29,28,28,12,12,12,12,12,12,17,18,29,19,34,34,29,34,29,34,29,29,34,29,34,28,28,28,28,28,28,28,28,28,28,28,
+34,39,39,39,39,39,39,23,179,155,9,25,138,25,25,24,16,24,16,16,24,16,24,24,24,24,16,24,16,24,16,24,24,24,16,24,24,16,24,16,24,16,24,24,25,16,25,24,24,143,13,10,4,10,10,12,12,12,240,62,228,102,18,240,66,93,72,74,5,18,240,66,255,228,228,119,237,255,240,4,40,45,82,82,103,240,12,59,117,119,18,4,11,17,17,5,12,4,13,143,138,138,122,122,122,123,131,131,131,134,131,144,131,131,131,139,139,139,134,131,139,139,132,139,132,131,132,132,132,132,131,124,131,124,124,124,124,124,124,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,124,140,169,175,177,175,168,135,126,124,124,124,121,121,121,121,121,121,121,121,121,121,121,121,124,123,124,123,124,123,124,123,123,124,131,131,131,131,132,131,131,132,131,131,131,132,131,131,131,131,131,131,132,134,122,26,138,25,12,10,10,4,4,12,17,12,17,12,17,91,107,83,17,64,235,106,96,5,4,63,237,237,255,255,255,238,255,88,240,5,67,97,102,212,59,95,116,119,212,49,4,12,10,28,17,4,10,10,10,4,4,13,14,13,13,18,17,12,13,18,29,34,34,34,39,39,34,34,32,34,32,32,32,32,32,28,32,28,28,
+29,34,34,34,39,40,29,8,192,161,16,24,24,24,24,24,23,16,23,24,16,23,16,16,24,16,23,24,16,16,23,24,16,16,23,24,16,23,24,24,24,24,24,16,24,24,16,24,24,143,8,4,10,12,12,17,11,12,4,108,234,49,4,4,33,110,93,99,29,240,5,59,235,237,229,232,255,113,34,4,4,70,101,102,68,240,17,34,63,112,72,240,11,12,17,12,5,12,12,143,138,122,138,122,123,123,123,123,123,123,131,131,131,131,131,131,131,131,144,131,139,139,139,131,139,139,139,139,139,139,139,131,139,139,139,139,139,139,139,139,139,146,134,139,139,139,139,139,139,139,139,139,131,134,139,139,139,131,131,131,131,131,139,131,131,131,131,131,131,131,131,123,123,123,134,152,168,171,171,171,169,168,147,152,132,131,123,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,123,131,123,131,123,131,131,123,131,123,123,123,123,123,122,122,123,122,122,131,123,26,138,31,7,5,10,12,10,12,17,12,12,240,60,102,103,17,240,17,236,235,117,4,240,97,238,229,232,232,255,255,55,240,12,12,112,227,117,70,11,63,106,115,234,92,12,10,12,17,28,10,11,4,10,10,13,30,24,24,23,24,22,22,20,20,13,13,13,13,12,29,39,39,34,34,34,34,34,34,32,34,32,32,32,
+34,34,29,29,34,29,29,19,183,36,31,25,24,24,24,24,24,23,16,23,23,23,23,23,23,23,16,23,23,23,24,23,23,24,24,23,24,24,24,24,24,16,24,24,24,24,24,24,25,25,13,4,11,5,17,12,12,240,49,119,91,33,4,11,4,99,107,110,55,33,99,98,69,255,255,255,212,63,110,72,34,107,106,114,39,4,12,17,44,106,114,4,11,12,28,17,10,12,5,143,130,138,138,122,122,122,122,123,123,123,123,123,123,123,122,123,123,123,123,123,123,123,123,131,123,131,123,131,123,131,131,131,131,131,131,131,131,131,131,131,131,144,146,139,131,139,131,139,146,131,131,131,131,131,146,131,123,131,131,123,131,123,123,131,123,123,123,123,131,123,123,123,131,123,123,123,122,122,122,122,131,144,152,169,169,168,169,152,134,131,124,131,123,123,122,122,123,122,123,122,123,122,123,122,122,122,122,122,122,122,122,122,138,138,138,138,138,26,138,26,26,26,138,26,138,138,25,5,12,5,4,12,17,17,12,10,10,83,101,65,4,17,240,110,255,237,28,39,83,229,230,237,238,228,114,68,18,240,33,237,238,235,4,10,54,66,107,116,110,45,4,17,10,32,10,10,11,10,10,13,24,24,23,24,16,16,23,24,23,16,23,22,22,14,13,12,39,39,34,39,34,34,34,34,34,34,34,32,
+29,29,29,29,29,29,29,20,15,48,167,3,31,24,24,24,23,24,23,24,24,24,24,24,24,24,24,24,24,24,16,24,24,24,24,24,24,16,24,24,24,24,24,24,24,24,24,24,24,138,13,4,5,4,17,12,12,240,93,109,59,18,11,18,240,55,114,109,97,65,99,102,110,105,88,105,99,111,103,82,62,117,112,102,4,11,17,12,28,63,112,49,240,12,28,12,12,5,12,31,138,138,130,130,122,122,122,123,122,123,122,122,123,123,123,123,123,123,123,123,123,123,123,122,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,122,123,123,122,123,123,123,123,123,123,122,122,122,122,138,122,122,122,122,123,122,123,122,123,122,123,122,123,123,122,123,122,122,122,122,138,122,26,138,146,152,152,169,152,152,144,144,131,131,122,122,138,122,138,122,138,122,138,122,122,122,138,122,138,138,138,31,24,24,24,24,24,24,24,138,138,25,138,138,24,4,5,12,10,12,17,17,12,4,34,102,97,17,5,17,240,90,255,235,96,97,97,109,255,232,237,237,110,96,102,70,92,255,255,105,240,12,28,59,69,101,116,67,4,12,12,28,12,10,4,12,4,13,24,24,24,24,23,23,16,23,16,23,23,23,23,22,22,14,19,45,39,39,39,39,34,34,34,34,34,34,
+33,29,29,29,29,29,18,35,15,79,255,1,16,31,24,24,24,24,24,24,24,24,24,16,24,24,24,24,24,24,24,24,16,24,24,16,24,24,24,24,24,24,24,25,24,24,24,24,138,31,7,10,10,12,17,12,5,11,114,96,29,12,12,12,4,33,93,103,117,70,64,228,34,240,5,240,12,63,111,59,111,111,106,49,29,40,11,17,17,32,107,84,240,17,17,28,5,12,12,25,138,130,138,122,122,122,122,123,146,142,146,152,146,153,146,146,153,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,131,142,131,131,138,131,123,131,122,123,131,130,123,130,122,122,122,122,122,122,122,122,122,26,122,122,138,122,130,122,130,122,122,122,122,122,138,122,122,122,122,138,26,26,26,138,24,16,16,23,23,16,24,143,153,168,171,148,131,122,122,122,122,26,138,138,138,138,138,138,138,26,26,138,138,138,24,25,31,25,138,25,138,25,138,138,16,10,12,10,5,12,17,12,12,4,66,92,49,240,17,17,4,44,236,115,67,97,234,65,240,4,10,55,232,229,83,62,212,255,238,33,4,17,11,28,59,69,107,102,29,10,12,17,17,5,10,10,4,13,24,23,16,23,16,24,23,16,23,16,23,23,23,22,22,15,19,45,44,44,44,44,39,34,34,34,34,34,
+28,29,28,29,29,29,18,29,24,9,255,210,3,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,25,24,24,24,24,24,24,25,25,138,13,4,4,12,12,12,4,39,112,68,28,11,11,18,5,44,93,102,101,109,97,40,18,39,52,41,41,18,49,102,106,103,103,70,40,28,10,11,17,18,101,104,240,12,12,28,12,12,5,31,138,130,122,122,122,122,130,138,143,143,25,138,27,25,143,143,27,138,27,31,138,143,27,143,143,138,138,138,143,143,143,143,143,143,143,143,151,146,151,146,151,143,151,151,146,151,146,146,151,146,146,146,146,146,146,153,153,153,155,153,153,152,146,152,146,146,142,138,138,26,122,138,138,130,138,122,138,122,138,26,26,26,138,138,25,138,25,25,24,24,24,23,22,15,22,14,15,151,152,173,152,146,122,122,138,138,26,138,26,26,26,138,26,26,26,138,138,138,25,138,25,138,25,25,26,138,23,4,5,12,12,17,17,12,17,240,96,101,39,4,17,10,12,44,64,101,83,97,34,5,39,17,17,4,10,229,104,72,235,234,103,11,10,17,17,28,45,67,101,107,39,4,17,17,17,12,10,4,10,13,24,24,23,24,23,16,23,16,23,23,23,16,23,22,22,22,13,45,45,44,44,44,39,44,39,39,34,39,
+28,34,29,29,29,29,29,18,20,2,214,255,3,16,31,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,24,25,25,25,25,25,24,25,138,6,4,12,12,17,12,240,49,103,61,18,12,12,5,44,71,68,64,108,237,88,4,39,53,197,198,41,44,34,113,229,103,69,82,65,39,4,11,11,11,90,108,4,5,12,28,12,12,10,24,138,130,130,122,122,122,26,25,25,138,27,138,138,138,27,138,138,138,27,138,26,138,138,26,138,27,26,27,26,138,138,26,138,27,138,27,138,27,138,27,138,25,138,25,27,25,25,25,138,25,25,25,25,138,25,25,138,138,143,143,138,151,143,151,146,151,143,31,143,143,143,138,138,26,26,138,26,26,138,138,138,25,138,25,138,25,24,24,24,24,23,22,22,20,14,14,19,5,6,14,36,152,173,152,123,26,138,26,26,138,26,138,26,25,138,25,138,138,26,25,138,25,138,138,26,138,23,4,12,5,12,12,17,12,11,10,96,97,28,12,17,12,44,62,101,96,72,40,18,50,33,52,196,28,39,44,112,109,112,116,83,49,18,11,12,17,34,63,96,106,60,5,12,12,17,10,4,12,4,13,24,24,24,16,16,23,16,23,16,23,23,23,23,23,22,22,14,35,45,44,44,44,45,44,44,44,39,39,
+28,29,28,28,29,29,29,18,20,2,164,255,36,16,25,24,25,24,24,25,24,31,24,25,24,25,24,25,25,24,24,25,24,25,25,24,25,31,25,25,25,25,25,31,25,24,25,24,138,25,13,4,5,17,17,12,4,49,99,59,5,11,17,49,70,68,113,255,238,255,70,40,50,197,21,196,52,55,33,108,255,237,237,113,63,65,39,4,4,11,67,109,11,11,12,28,12,12,5,25,138,130,130,122,122,138,25,138,138,25,138,27,138,26,138,27,26,138,138,138,138,26,25,138,26,138,138,138,138,27,130,138,27,138,27,138,27,138,27,138,138,27,138,27,138,138,138,138,138,27,138,138,138,27,138,138,27,27,27,27,138,27,26,27,27,138,25,138,25,25,25,138,138,26,138,138,138,138,25,138,25,138,31,25,24,24,24,24,23,23,22,22,14,20,14,14,14,14,19,6,4,240,20,31,152,173,146,130,26,26,138,25,26,138,138,138,25,26,25,31,138,24,25,26,138,138,16,10,5,12,12,17,29,10,11,11,103,108,11,11,17,44,59,115,101,95,113,12,39,39,53,198,53,197,17,18,62,255,114,106,96,65,54,28,11,12,32,65,95,101,65,240,17,12,17,5,10,10,4,13,24,24,16,23,23,24,23,24,23,16,23,23,16,22,22,22,20,13,4,39,49,44,45,44,44,44,45,44,
+28,29,28,18,29,29,29,29,35,2,36,231,158,3,25,31,25,25,25,25,25,25,25,31,25,24,25,31,24,25,25,25,31,24,25,31,25,25,25,31,25,31,25,25,25,138,25,138,25,143,13,10,4,12,17,12,4,49,102,49,5,12,45,49,105,229,211,238,99,69,65,40,88,52,196,197,73,75,18,66,69,114,228,104,236,104,44,33,11,11,68,110,4,5,17,18,12,5,10,24,138,123,122,130,130,138,24,138,138,138,138,138,25,31,138,138,138,25,138,25,138,138,138,138,138,26,138,25,26,138,25,138,138,138,138,138,138,138,138,138,25,138,138,138,138,27,26,138,25,138,138,138,138,25,138,27,138,138,138,138,138,27,138,138,27,138,138,26,138,31,138,24,25,138,138,25,138,25,138,24,25,24,24,24,24,24,22,23,22,14,20,20,14,14,14,19,8,19,6,13,6,5,6,4,5,14,151,169,152,138,26,138,25,138,25,25,138,25,31,138,25,138,138,26,26,138,23,4,12,5,12,17,17,12,12,4,103,113,17,12,49,33,119,227,107,114,114,4,55,40,198,37,38,203,49,18,59,212,255,114,112,102,44,49,33,10,17,60,90,96,65,5,17,17,18,10,10,12,4,20,24,24,23,24,16,16,23,16,23,23,16,23,23,23,23,15,15,20,4,4,49,45,44,44,45,44,44,44,
+28,29,29,33,29,28,18,29,12,159,181,89,255,159,154,151,151,153,151,143,31,31,31,25,25,25,24,25,24,25,31,25,25,25,25,25,25,31,25,25,25,25,31,25,25,25,25,25,138,143,8,4,5,12,12,12,4,44,102,61,29,33,70,213,255,40,240,68,102,97,94,40,61,211,208,213,255,18,40,108,102,111,40,240,44,255,213,49,33,29,69,108,4,12,17,28,12,12,12,25,138,130,130,26,138,25,16,138,25,138,138,25,138,25,138,25,25,138,31,138,25,138,25,138,25,138,31,138,31,138,31,138,25,138,25,138,25,138,25,138,138,27,31,25,138,31,25,138,138,138,138,25,138,138,31,138,138,138,138,25,138,138,138,25,138,25,138,25,25,138,25,138,16,24,138,25,31,24,24,24,24,24,24,23,22,22,22,20,15,15,20,14,20,14,14,14,19,8,12,6,6,5,13,5,5,10,240,7,23,169,146,26,26,26,138,138,25,138,25,25,25,25,25,138,26,138,24,10,5,12,12,17,28,12,11,4,103,109,59,39,44,114,255,33,82,115,112,28,39,74,42,196,196,53,39,18,59,62,99,84,44,119,211,65,44,39,44,49,69,96,62,240,17,12,17,12,4,10,10,8,24,24,24,16,23,23,23,24,23,16,23,16,23,23,23,22,22,14,14,40,33,49,49,44,44,45,45,45,
+33,28,18,28,29,29,29,29,5,81,213,80,105,49,6,6,13,13,20,22,31,31,31,143,143,151,143,25,138,25,25,25,25,25,24,25,25,25,25,25,25,138,25,25,24,138,25,25,26,138,13,4,12,12,17,12,4,18,104,61,32,72,232,87,240,4,18,33,110,103,93,45,4,70,237,213,12,55,70,91,102,99,240,12,240,240,213,213,66,33,96,99,240,12,12,28,12,5,12,31,130,122,26,138,138,16,23,25,25,25,25,25,25,24,25,24,25,24,25,24,24,24,25,24,25,24,25,25,25,24,25,31,25,31,25,31,25,24,31,24,25,31,25,31,24,138,31,31,25,31,25,31,25,25,25,31,25,25,25,31,25,25,138,31,31,138,31,138,31,138,25,31,24,24,24,24,24,24,24,24,23,23,22,22,22,20,15,20,14,20,14,14,14,14,14,14,19,13,13,5,13,5,13,12,13,5,12,5,4,7,151,173,138,26,25,138,31,138,25,138,24,138,25,138,26,138,25,5,5,5,12,17,28,12,12,4,96,113,83,82,211,229,240,240,240,96,212,105,18,105,208,87,87,65,11,28,72,92,66,240,4,4,93,237,113,32,33,61,67,96,65,240,12,17,17,10,12,10,5,20,24,24,23,16,24,24,24,16,23,16,23,23,16,23,23,22,15,6,211,255,231,4,49,49,44,44,45,44,
+28,28,28,29,28,28,29,29,18,20,24,154,222,23,2,30,20,14,13,13,8,7,7,7,13,9,22,24,31,143,143,146,143,31,138,138,25,25,138,25,25,25,25,25,138,25,25,138,27,143,9,10,4,12,18,12,12,11,110,66,88,229,240,240,18,18,18,18,70,33,34,49,84,55,33,11,70,88,40,29,40,55,5,11,4,240,240,55,237,66,96,72,240,12,28,29,12,12,5,31,131,138,138,26,24,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,24,23,23,23,23,23,23,23,23,24,23,24,23,24,23,24,23,24,24,24,24,24,24,24,24,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,24,25,25,25,24,24,24,24,23,22,22,22,22,22,22,22,20,22,14,15,14,20,14,20,14,20,14,14,14,19,6,19,6,6,13,5,12,5,5,12,5,12,6,5,5,4,7,152,146,26,25,138,25,25,31,138,25,138,25,138,138,25,12,5,12,12,17,29,12,12,240,64,228,113,255,50,240,4,240,240,66,109,108,49,18,55,74,49,4,18,49,72,72,72,240,12,5,240,11,237,230,44,60,67,96,45,4,17,17,17,12,10,5,4,20,24,24,16,24,23,16,23,16,24,23,16,16,23,23,23,22,22,9,20,100,235,49,44,49,45,59,45,45,
+18,28,18,29,28,29,29,29,29,20,137,136,215,221,1,129,137,143,143,143,25,31,23,22,14,13,7,7,7,7,13,13,9,22,24,31,143,146,143,143,138,138,138,26,25,25,26,138,27,146,15,4,10,12,17,12,12,240,93,83,70,49,33,59,65,66,66,70,65,65,65,55,61,97,83,91,82,44,55,70,65,62,82,90,90,83,83,33,44,49,106,49,240,12,17,18,12,5,12,27,138,122,130,138,31,23,22,24,23,23,22,22,22,22,22,22,22,15,22,22,15,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,24,23,23,23,24,23,24,23,23,23,23,22,23,22,22,15,22,22,15,20,14,20,14,14,20,14,20,14,20,14,20,14,14,19,8,19,6,6,13,5,5,12,5,13,12,12,12,5,12,12,6,5,4,4,138,138,138,25,25,25,138,25,25,25,138,138,138,31,7,4,12,12,12,28,17,17,5,49,237,88,4,240,39,65,85,88,71,44,54,84,65,240,240,240,19,54,65,62,70,66,29,29,28,12,240,240,100,100,62,72,97,17,12,17,18,17,4,12,12,5,22,24,24,24,24,24,23,16,23,23,16,23,23,23,23,16,23,22,22,8,19,49,49,59,49,44,45,45,45,
+28,28,28,28,29,29,29,18,18,19,150,192,238,238,255,150,129,142,138,138,138,138,143,138,143,143,138,31,24,22,9,8,13,7,8,7,7,7,9,22,24,143,31,146,146,146,138,138,138,131,24,4,5,12,12,17,12,240,59,98,40,62,235,255,238,237,234,212,102,66,65,61,61,90,91,101,66,55,65,61,90,212,234,236,255,255,255,119,59,63,114,4,10,12,29,17,12,12,13,143,122,122,130,130,138,25,25,138,138,138,143,143,138,143,138,31,138,31,31,25,31,24,24,24,23,23,24,22,22,22,22,22,15,22,15,22,22,22,22,15,22,15,15,20,22,22,22,22,15,15,22,22,15,22,15,22,15,22,22,20,22,22,22,22,15,22,22,22,22,15,22,14,22,14,20,14,20,20,14,14,14,14,20,14,14,14,14,14,19,14,14,14,14,19,13,6,13,5,13,5,12,5,12,12,5,5,12,5,12,5,5,6,5,4,138,138,25,138,25,25,25,138,25,138,26,26,138,13,10,5,12,12,28,28,12,12,17,119,212,229,237,235,236,255,255,255,226,97,61,232,229,90,99,97,65,70,62,65,54,54,60,61,64,69,67,40,45,72,67,92,12,17,17,17,12,5,10,5,12,22,24,24,16,24,24,24,24,16,16,23,24,16,16,23,23,23,22,22,20,20,60,49,45,45,59,45,59,44,
+28,28,18,28,28,29,28,28,18,19,24,142,225,255,238,225,1,123,137,138,130,130,138,138,138,138,27,138,138,138,138,143,138,31,25,23,22,20,13,7,13,7,7,7,8,9,24,31,143,146,146,5,5,5,17,28,12,5,4,110,66,108,228,237,255,255,255,255,237,236,84,65,49,97,212,228,66,55,63,101,237,255,255,237,232,213,114,235,82,96,93,240,12,17,34,12,5,10,13,143,131,122,122,122,130,25,138,122,130,122,122,130,122,130,122,130,138,130,130,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,143,143,143,25,31,143,31,31,25,25,24,24,24,24,24,23,23,23,22,22,22,22,22,15,22,22,22,20,22,14,22,14,20,14,20,20,20,20,14,20,14,14,14,14,14,14,14,14,14,14,19,14,14,14,14,14,13,19,13,13,13,6,13,5,5,5,12,12,12,12,12,12,12,5,12,12,12,12,12,4,9,31,25,31,138,25,25,25,138,25,138,26,143,8,4,5,12,10,28,28,12,12,240,101,236,228,255,255,255,255,255,255,255,229,83,113,229,117,235,90,70,65,61,33,61,97,212,237,236,237,117,83,60,67,83,65,240,17,17,28,11,10,12,10,13,23,24,24,24,16,24,16,24,23,24,16,23,24,23,24,16,23,23,22,15,14,49,59,49,44,49,44,45,49,
+28,28,28,28,18,28,29,18,29,18,19,27,136,216,255,255,185,121,147,123,131,130,130,122,130,138,138,138,138,138,138,138,138,138,138,146,138,143,143,143,138,24,22,22,8,8,13,7,8,14,8,12,4,12,12,29,12,12,240,72,107,103,105,240,240,34,34,40,49,237,212,68,49,88,207,210,59,65,90,230,210,11,4,240,18,240,28,90,90,114,28,4,12,28,29,12,12,4,20,131,122,123,122,123,130,25,138,122,122,122,122,122,122,122,122,122,122,130,122,138,122,130,122,130,138,122,130,138,138,138,130,138,138,138,138,138,138,138,138,130,138,138,138,138,138,138,138,138,138,138,138,138,138,138,143,138,138,138,138,143,138,143,31,138,31,25,31,24,24,24,23,23,22,22,22,22,20,22,14,20,20,20,14,13,14,13,13,13,13,12,13,13,13,13,12,12,10,10,4,10,4,4,4,4,4,4,4,10,4,5,5,5,4,4,20,31,25,25,25,25,138,25,25,138,25,138,143,9,4,12,5,12,12,28,28,17,6,44,235,236,96,33,55,75,94,99,255,236,97,92,255,235,227,72,65,60,34,113,229,255,232,229,210,101,228,61,66,67,102,17,12,17,17,28,10,10,5,10,13,24,24,24,24,24,24,24,24,16,24,24,24,16,24,24,23,23,23,22,22,13,50,49,49,49,49,59,44,44,
+28,18,28,28,28,28,18,29,18,18,28,19,25,144,144,156,162,184,185,132,1,123,131,123,122,122,138,122,130,130,130,138,138,130,130,130,130,138,130,130,138,138,146,131,146,138,138,142,138,25,25,23,5,5,12,17,17,12,5,240,99,97,44,5,5,5,19,18,4,240,101,119,112,18,240,240,49,106,227,99,240,5,18,12,11,4,34,59,116,55,240,12,17,29,12,12,12,4,22,144,123,123,122,123,130,26,138,123,122,122,122,122,122,122,122,122,122,122,122,123,122,122,122,122,122,122,122,122,130,122,130,122,130,130,130,138,130,130,138,130,138,130,138,130,138,130,130,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,130,138,130,130,138,122,130,130,130,130,130,130,138,26,138,138,130,138,138,138,138,138,138,138,31,26,138,31,25,25,24,24,24,24,24,23,23,22,22,22,22,20,20,20,14,14,13,13,13,14,23,25,138,25,138,25,138,25,138,138,26,138,138,143,24,10,5,12,12,17,32,28,17,17,5,69,237,105,4,240,240,240,240,11,72,83,103,63,240,18,71,65,32,236,213,240,240,240,240,240,17,67,69,66,96,60,240,17,17,28,17,5,12,10,5,9,24,25,24,24,24,24,24,16,24,24,24,16,24,24,16,23,24,23,23,22,14,35,49,49,59,49,49,49,49,
+28,28,28,29,18,18,28,28,18,18,29,18,20,31,27,120,120,120,160,187,185,121,1,123,131,123,131,123,122,122,122,131,130,130,122,130,130,130,130,122,130,130,123,130,122,131,130,130,131,138,144,146,13,4,12,12,29,28,12,5,11,114,71,49,12,11,11,18,40,18,28,235,233,66,5,4,101,233,238,4,18,39,28,17,11,12,59,102,99,240,12,12,34,34,12,12,12,6,151,149,139,131,131,123,123,25,138,123,123,122,123,123,122,123,123,123,122,122,122,122,123,122,122,122,123,122,122,122,122,122,122,130,122,130,130,122,122,122,122,122,122,130,130,130,122,122,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,122,138,138,138,138,122,138,138,122,138,138,138,138,138,138,25,138,138,122,122,138,122,138,138,130,122,138,122,122,138,122,130,122,122,122,130,130,122,122,146,130,130,131,130,130,138,138,138,138,138,138,138,26,26,26,26,26,138,138,26,26,26,138,26,138,143,7,12,5,12,12,28,32,28,17,17,4,114,234,93,28,4,12,12,4,39,97,96,114,240,12,34,62,114,238,240,240,12,12,11,12,45,72,67,67,92,240,12,17,28,28,4,10,10,5,12,23,24,24,16,25,16,24,24,24,24,24,24,24,24,24,24,24,16,23,23,22,15,29,65,59,49,49,44,49,44,
+28,28,28,12,28,28,18,28,18,28,18,17,18,19,23,31,142,137,120,123,188,190,184,121,1,123,123,123,131,130,122,122,122,122,123,123,122,122,122,122,130,122,122,122,123,130,130,131,130,131,123,131,22,4,4,12,17,34,12,12,240,62,97,61,40,12,18,11,18,40,4,113,237,105,240,11,228,255,213,240,18,17,12,11,12,39,106,212,240,5,12,17,29,17,5,12,5,12,31,151,151,153,148,152,169,143,148,147,148,144,131,131,131,123,123,123,123,122,122,123,122,122,122,122,122,122,123,122,122,122,123,122,122,122,122,130,122,122,123,123,122,122,122,122,123,122,122,122,122,122,123,122,122,122,130,122,122,122,122,122,122,130,130,130,130,122,130,130,130,130,130,122,130,130,122,122,138,26,26,122,138,138,122,138,122,138,138,138,138,138,122,138,138,138,138,138,138,138,138,138,138,122,138,138,138,138,138,138,138,138,138,122,138,138,26,138,26,26,26,26,26,26,26,138,26,138,26,146,9,4,12,12,12,12,34,32,17,17,5,32,234,234,72,12,18,28,12,4,83,106,237,78,240,32,96,255,210,240,17,12,12,12,44,69,72,64,108,12,4,17,17,28,17,10,12,12,4,13,24,24,25,24,24,25,16,24,24,16,16,16,24,16,24,24,16,24,16,23,22,22,14,60,49,59,49,49,49,49,
+28,28,28,28,28,28,18,28,28,28,18,18,18,18,18,20,31,143,138,26,1,131,205,221,186,1,123,131,123,123,131,123,131,123,123,123,123,123,123,123,122,123,123,123,123,123,123,123,122,123,123,142,27,7,10,5,12,28,28,17,12,240,114,102,59,29,55,12,11,12,240,63,255,232,240,49,238,255,65,240,12,17,17,18,40,64,117,11,4,12,17,34,28,5,12,12,5,5,13,8,13,13,13,12,13,13,20,22,22,31,31,31,151,146,151,146,146,147,144,146,139,134,131,131,131,123,123,123,122,122,122,122,122,122,122,123,122,122,138,122,122,122,123,123,122,122,123,122,123,122,122,122,122,123,122,122,123,122,122,122,122,122,122,122,122,122,123,122,122,122,122,122,122,122,122,122,130,138,26,138,122,122,122,122,122,122,122,122,122,138,122,122,122,138,122,138,122,138,122,138,122,138,138,122,138,122,138,138,138,122,138,138,138,26,138,26,26,138,26,26,138,26,26,138,26,138,26,138,24,12,5,12,5,12,17,34,28,12,17,240,60,235,117,49,84,29,4,4,32,119,227,211,240,32,235,255,5,4,12,17,17,45,82,63,63,109,34,240,12,28,17,17,12,4,12,10,4,22,24,25,25,25,24,24,24,25,25,31,24,24,16,24,16,24,24,24,16,23,23,22,14,49,49,59,49,59,45,49,
+28,28,28,28,28,28,28,28,28,28,28,18,29,18,18,17,20,146,148,153,143,129,3,164,220,209,144,1,1,123,131,142,123,123,131,123,123,123,123,123,123,123,123,123,123,123,123,123,131,123,123,131,146,14,4,5,12,10,34,28,12,4,240,110,99,61,12,5,5,12,5,240,236,255,240,98,255,238,240,5,12,17,12,33,90,119,39,240,12,17,39,34,12,12,5,12,4,22,143,31,25,31,24,22,22,13,8,13,13,13,14,8,8,13,13,13,13,13,20,22,22,22,24,31,138,146,153,146,147,148,152,132,144,139,131,123,131,123,131,122,123,123,122,122,123,122,123,122,122,122,122,123,123,122,123,123,122,123,122,123,123,122,122,123,123,122,122,122,122,122,122,122,122,122,122,122,122,130,26,138,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,138,122,122,122,122,122,122,122,138,138,122,138,138,122,138,138,122,26,138,122,26,138,26,26,26,26,26,138,143,7,12,5,12,5,28,34,34,32,17,17,240,61,235,116,59,34,12,12,4,90,234,230,240,67,234,62,240,12,12,28,60,83,62,67,109,44,240,17,28,17,28,17,5,10,12,5,6,23,25,25,25,16,25,25,25,25,25,25,25,25,24,24,24,24,24,16,24,23,23,22,14,49,54,49,49,44,45,49,
+28,28,28,28,28,28,28,28,28,28,18,17,29,29,18,18,18,13,184,147,152,148,151,36,23,204,225,255,209,150,1,120,123,142,142,131,123,131,123,123,131,123,123,123,123,131,123,123,137,143,123,123,131,25,11,12,5,12,28,34,29,12,4,240,93,108,91,18,4,4,12,4,44,255,40,213,255,33,4,12,4,4,44,112,233,59,240,12,17,34,29,12,12,12,12,5,13,31,138,137,138,138,143,142,131,31,143,142,146,143,143,31,31,24,24,22,22,9,20,8,8,13,8,14,14,13,7,13,13,8,20,22,23,31,31,151,146,146,148,147,152,147,134,152,144,144,131,131,131,123,131,123,123,123,122,123,123,122,123,123,123,123,123,122,123,123,123,123,123,123,122,123,123,122,122,123,123,122,138,26,123,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,138,138,138,138,138,138,138,138,138,138,138,122,122,138,122,138,26,130,23,4,12,12,12,17,34,34,34,28,12,17,240,59,234,116,64,39,29,34,34,102,114,28,104,101,17,5,17,34,63,67,62,69,109,44,240,10,28,17,28,32,4,12,12,12,4,20,25,25,26,25,25,25,25,25,25,25,25,25,25,25,25,25,25,24,24,24,16,23,22,22,35,60,49,59,49,59,45,
+28,28,28,28,28,28,28,18,28,28,28,29,17,18,18,18,18,11,56,188,132,124,132,138,36,24,24,210,255,255,222,166,148,121,129,142,142,123,131,123,123,123,131,124,123,123,131,142,23,24,138,131,123,146,9,4,12,5,12,17,32,28,12,5,240,40,212,103,93,40,4,4,12,44,18,33,33,5,4,17,59,112,110,104,4,240,12,17,39,39,12,12,5,12,12,5,22,143,137,137,157,138,130,142,138,27,138,122,122,130,130,123,138,131,138,138,131,138,142,138,138,143,27,25,25,24,24,22,22,9,20,13,13,13,14,8,14,8,13,13,8,20,22,22,31,36,36,151,146,153,153,152,144,148,147,146,134,131,131,131,131,123,131,131,123,122,122,122,122,123,123,123,122,131,123,123,123,123,122,26,122,123,123,123,123,123,123,123,123,123,123,122,123,122,123,122,122,123,122,123,122,122,122,122,122,122,123,122,122,122,122,138,138,138,122,138,138,122,138,138,122,138,138,138,138,138,138,138,26,143,7,4,12,5,12,17,34,34,32,28,17,17,240,17,110,112,95,44,45,44,44,45,44,44,45,59,44,49,60,60,67,106,97,17,240,17,28,17,17,28,12,10,4,12,4,12,23,31,25,24,138,25,24,138,25,25,25,25,26,25,25,25,25,25,25,24,24,24,16,22,14,35,60,49,45,49,49,49,
+28,28,28,28,28,28,28,17,28,28,28,18,28,28,17,29,18,18,240,40,205,175,124,132,134,153,36,2,30,193,255,255,231,185,149,121,137,142,131,138,131,131,123,123,123,123,123,123,158,159,130,123,131,131,138,4,4,12,12,4,28,34,28,17,12,240,240,59,110,110,112,99,68,59,49,59,59,83,109,110,119,105,33,240,4,12,28,39,39,12,12,5,12,5,4,14,31,142,138,195,199,157,129,130,138,26,137,123,122,122,122,122,123,122,122,123,123,123,123,123,142,131,131,144,144,144,144,148,144,148,148,144,146,146,143,143,143,25,24,23,9,20,14,13,13,13,8,14,14,14,8,13,19,20,20,22,30,36,36,36,151,153,153,153,153,152,147,147,147,139,139,131,131,123,123,123,123,123,123,138,122,123,122,122,122,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,122,123,122,123,122,122,122,122,122,122,122,122,122,130,122,138,138,122,138,122,138,138,138,138,131,24,10,5,12,5,12,17,34,44,34,32,10,12,5,240,65,227,102,95,59,44,34,39,39,45,44,45,59,69,101,99,45,240,5,17,28,28,28,32,17,10,12,12,12,4,20,24,138,25,138,25,25,138,25,138,25,138,25,25,25,26,25,26,25,25,25,24,24,23,151,153,35,54,59,59,49,49,49,
+17,29,28,28,28,28,28,28,28,28,18,17,29,18,18,29,18,29,19,4,12,47,143,135,126,132,131,152,151,2,15,163,255,231,255,204,140,142,129,121,144,131,123,131,131,123,131,123,131,131,123,131,123,123,144,24,10,4,12,5,10,28,34,32,17,12,12,240,240,28,66,104,113,212,114,114,119,113,98,65,11,240,4,12,12,34,34,29,17,5,12,12,12,5,13,24,142,123,158,199,38,199,157,123,139,26,138,123,131,131,123,131,138,131,146,131,138,146,131,131,146,131,131,131,146,131,131,131,144,131,131,139,139,139,126,134,147,147,147,147,147,147,147,147,144,146,148,138,143,31,25,23,22,22,20,20,13,13,13,20,14,14,20,20,20,20,20,22,30,36,36,151,151,152,152,147,152,147,147,144,138,152,139,134,131,131,131,123,123,123,123,123,122,122,123,123,122,122,123,123,123,123,123,123,123,123,123,123,122,122,122,122,122,122,122,122,122,122,122,122,122,122,130,138,122,138,122,122,138,138,138,9,4,11,12,12,12,28,32,34,34,32,28,17,12,240,12,84,211,114,99,102,97,97,96,96,97,112,102,44,4,240,12,17,28,17,32,34,17,12,4,12,12,4,13,24,138,138,26,26,138,138,26,138,25,26,25,138,25,138,25,25,25,25,25,25,25,25,151,155,30,51,49,49,49,49,45,49,
+28,17,28,28,28,28,28,28,28,29,17,28,18,17,28,17,18,17,29,19,17,17,19,23,144,135,132,169,205,153,24,2,9,47,215,255,255,188,168,150,1,131,131,123,131,131,123,131,123,123,131,123,131,131,131,144,9,10,11,12,5,12,10,44,44,32,28,12,10,4,240,240,240,11,11,17,11,240,240,240,5,12,12,32,39,44,34,4,12,12,12,5,5,12,23,146,138,122,195,199,20,37,198,123,146,131,138,146,144,144,146,131,144,146,131,142,131,131,138,131,131,138,142,131,131,142,131,131,131,131,144,146,139,139,125,146,144,134,139,134,134,139,134,139,134,134,134,147,134,141,147,141,134,147,144,134,144,144,146,142,138,138,31,24,22,22,20,20,13,13,14,20,15,20,13,20,20,20,20,30,22,31,36,36,154,153,153,155,168,168,152,169,169,147,152,144,134,131,131,131,123,123,123,123,122,122,123,123,122,123,122,122,122,122,123,123,122,122,122,122,122,122,122,122,122,122,122,138,122,138,131,143,13,4,12,12,12,12,17,28,34,44,32,28,17,17,17,240,240,28,54,75,84,82,82,70,49,28,240,240,17,17,17,17,28,32,34,17,4,10,12,12,12,5,22,143,26,26,26,26,26,26,26,26,26,138,26,26,26,26,25,138,25,26,25,25,25,36,36,35,54,54,49,59,49,45,59,44,
+28,29,17,28,29,29,17,29,17,18,29,17,28,28,29,28,28,18,29,29,18,18,18,17,20,142,140,124,171,192,166,143,31,15,9,15,210,255,255,255,189,136,121,124,123,131,131,123,131,131,131,131,123,124,123,131,146,8,4,12,12,12,5,17,34,39,34,34,32,28,12,17,12,12,12,10,12,17,12,17,17,34,44,34,34,34,5,5,12,5,12,5,10,22,143,131,146,138,199,14,43,201,199,153,144,138,138,144,131,131,131,144,131,131,138,131,142,142,131,142,131,131,131,142,131,131,142,131,131,131,139,139,131,139,131,126,139,139,131,139,131,134,139,134,139,134,139,139,134,139,132,139,134,134,134,139,134,134,139,134,132,134,141,134,133,147,134,147,134,144,146,142,138,138,31,24,22,22,22,20,20,20,8,20,9,14,14,13,13,19,20,20,30,30,36,36,154,153,153,155,152,168,168,169,169,169,152,134,152,131,131,123,131,123,123,122,122,122,122,122,122,122,122,138,122,122,122,122,122,122,122,138,25,12,4,12,12,5,12,17,34,34,44,44,32,32,17,10,17,12,4,4,240,240,4,240,240,12,12,17,28,32,32,34,44,34,4,4,12,5,12,4,4,20,138,138,26,26,26,26,26,26,26,26,26,26,26,26,26,138,26,138,26,25,138,25,25,154,45,54,54,59,49,49,59,45,49,49,
+28,17,28,28,17,17,28,28,28,17,17,18,28,28,17,19,29,17,29,17,29,18,19,18,17,19,22,146,121,127,179,179,184,155,143,15,2,14,210,255,255,238,183,149,126,121,131,124,131,123,131,124,131,131,131,131,124,142,6,4,4,12,12,4,4,17,29,32,44,39,34,34,32,32,32,32,32,34,34,39,44,45,34,28,5,10,12,12,12,5,4,10,22,142,144,144,147,142,199,201,14,201,200,150,139,131,138,139,139,131,131,131,131,131,131,123,131,131,123,131,138,123,123,131,123,131,131,131,131,131,131,139,132,139,139,134,139,134,134,134,134,134,139,134,134,139,134,134,139,134,134,134,139,132,134,134,134,139,132,134,134,134,139,139,134,134,139,132,139,134,134,134,134,134,134,134,147,134,147,147,144,138,148,146,142,138,138,25,24,22,22,8,13,13,7,7,8,8,8,7,13,7,13,20,22,22,23,36,36,151,153,152,155,152,169,169,169,169,152,147,152,131,146,131,131,131,123,123,122,122,122,122,131,24,10,12,5,12,5,12,4,28,32,34,44,34,34,28,28,32,17,17,28,28,17,17,17,17,17,32,34,32,34,32,28,4,4,12,10,10,12,4,20,138,26,26,138,26,26,26,26,26,26,26,138,26,26,26,26,26,26,26,26,26,26,138,31,46,54,54,54,49,49,59,49,59,44,49,
+17,28,28,28,28,28,28,28,17,29,28,28,29,18,28,17,17,29,17,29,29,18,17,29,18,18,17,13,22,31,121,124,175,186,172,184,162,24,14,2,163,215,255,221,187,176,149,133,124,124,131,131,131,123,131,124,131,132,138,22,4,4,12,12,5,12,4,17,28,32,34,28,34,34,34,34,34,34,34,17,34,17,12,12,5,12,5,12,4,4,13,24,144,147,131,144,139,146,202,203,196,203,202,153,139,131,122,144,139,131,131,123,123,123,123,123,122,123,138,123,123,123,131,123,131,123,124,124,131,131,124,132,139,132,132,139,132,132,132,132,134,132,134,134,134,132,134,132,134,134,132,132,134,132,132,132,132,134,134,134,132,132,132,134,134,132,134,132,134,134,132,132,132,132,134,132,132,132,134,134,134,123,131,134,134,134,134,134,134,134,134,147,134,144,146,146,131,138,138,25,16,23,22,9,20,8,13,8,8,8,9,9,9,9,20,20,20,22,22,23,31,151,143,146,151,146,146,139,144,147,152,152,147,169,24,12,12,12,12,12,12,12,5,32,34,44,44,44,34,34,34,32,34,32,34,32,34,34,44,34,34,34,32,4,4,12,12,5,12,4,4,20,138,138,26,138,26,138,138,26,138,26,138,26,138,26,138,26,138,26,26,26,26,26,26,25,47,54,59,49,59,59,49,59,44,49,49,49,
+28,17,28,17,28,17,18,17,18,17,29,17,17,17,29,28,18,28,18,18,17,28,18,18,28,18,29,18,17,17,18,22,16,123,132,141,172,192,191,183,154,31,2,36,192,191,188,192,179,174,141,124,124,132,131,131,131,131,132,133,143,13,10,12,12,12,12,5,12,10,5,5,12,5,12,5,12,5,12,12,4,12,12,5,12,12,12,4,13,23,148,133,144,134,134,134,139,147,131,156,181,142,123,132,132,131,123,141,140,141,141,169,147,152,168,165,168,146,131,131,123,131,129,120,171,174,171,174,174,174,174,174,173,171,173,173,173,145,173,145,145,169,149,135,141,141,128,128,126,126,128,126,134,126,134,134,134,132,132,134,134,132,132,132,132,132,132,132,134,132,132,132,132,132,132,132,132,132,132,132,134,131,131,132,132,132,132,132,132,132,132,132,132,132,132,132,132,126,134,126,134,128,128,128,127,133,128,132,134,147,131,146,138,138,138,25,24,22,22,9,20,14,14,14,9,14,14,14,13,13,7,7,7,20,9,12,5,5,12,5,12,12,12,12,5,4,28,34,34,34,34,45,45,44,34,45,44,34,34,17,4,10,5,10,12,5,12,5,4,13,24,131,122,122,122,138,122,138,26,138,138,138,138,138,138,26,26,26,26,26,26,138,26,26,26,138,47,54,54,59,49,49,49,49,49,49,49,45,
+28,17,28,28,28,28,17,17,29,17,28,18,28,28,17,29,17,29,17,29,28,18,17,28,28,18,18,18,18,18,19,17,18,20,24,143,121,126,173,188,206,216,189,36,154,123,147,187,206,187,179,177,171,147,124,124,131,132,131,124,132,146,9,5,4,5,5,12,12,12,12,12,12,12,12,12,5,12,12,12,12,12,12,12,5,4,5,20,143,147,134,134,132,139,132,132,132,132,132,126,132,141,145,169,174,171,152,188,186,188,191,216,218,221,205,168,131,122,122,122,120,1,121,187,206,192,192,191,191,191,188,191,188,188,188,188,188,188,187,187,186,186,186,179,179,179,177,177,177,177,175,175,174,174,173,173,169,173,145,135,135,128,134,126,134,126,132,134,132,132,134,134,132,132,132,132,132,132,132,132,132,132,123,146,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,132,132,132,132,126,134,126,126,127,133,134,132,132,146,142,146,138,138,25,25,23,22,22,9,8,14,13,13,10,4,12,12,12,12,12,5,12,5,12,12,17,17,17,12,12,12,12,12,5,12,12,12,12,5,12,12,12,12,20,146,146,146,146,146,146,146,122,130,131,130,122,130,122,122,122,122,122,26,122,138,138,26,138,26,26,26,151,54,60,49,59,49,49,49,59,45,49,45,
+17,29,17,28,17,28,17,28,17,29,17,28,17,13,28,17,28,17,18,17,19,29,28,29,13,29,17,29,18,29,29,18,18,18,17,20,22,143,123,121,127,174,188,206,187,165,144,124,121,186,192,187,186,179,179,175,147,124,124,131,132,124,131,143,22,13,4,10,5,12,5,12,5,12,5,12,12,5,12,12,12,4,4,4,5,13,25,144,140,139,132,132,132,132,132,132,126,126,127,169,175,177,186,187,191,223,184,209,205,218,221,221,225,218,1,120,122,130,122,123,168,191,221,221,216,221,218,218,205,206,216,216,205,216,205,205,205,216,205,205,216,216,216,216,192,205,205,205,205,191,191,188,188,187,187,186,186,186,186,179,179,177,175,175,174,174,173,169,135,135,128,127,126,134,132,126,132,132,134,132,132,132,139,134,132,132,132,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,132,131,131,131,132,131,132,131,132,131,132,132,132,132,132,134,132,126,126,140,134,144,147,144,138,22,13,10,4,12,5,12,12,12,12,12,12,5,12,12,5,12,12,12,12,12,12,12,12,5,12,12,5,5,5,8,20,9,20,22,22,24,36,151,146,151,146,146,146,146,146,146,146,146,131,146,138,138,122,138,26,138,138,146,51,59,49,49,49,49,49,45,45,49,45,
+17,17,28,17,17,18,13,28,17,28,28,29,17,18,17,29,29,29,17,29,17,17,29,17,18,17,18,29,17,29,17,29,18,18,18,18,17,19,20,24,138,123,121,127,171,187,186,172,152,124,124,168,187,188,186,186,179,187,172,169,134,124,124,124,131,143,24,9,13,5,12,10,10,10,10,10,10,10,10,4,5,7,13,22,24,146,134,139,124,132,124,121,121,127,149,171,184,188,216,221,216,218,221,221,221,221,184,178,186,179,177,177,175,121,130,131,131,123,169,175,179,186,177,175,175,176,177,177,177,177,179,186,187,188,188,191,191,192,205,205,216,216,218,216,218,221,221,220,218,218,216,218,216,218,216,216,216,205,205,205,191,188,188,188,187,187,186,186,179,177,177,177,175,173,173,173,169,135,128,127,134,128,132,168,128,132,134,132,132,134,132,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,131,132,131,132,131,132,131,132,131,132,132,131,132,131,131,26,122,134,142,22,7,10,10,12,12,12,12,5,12,12,12,12,12,12,12,12,12,12,12,5,12,10,12,7,13,13,13,13,5,5,7,7,7,7,7,5,12,10,10,12,7,13,20,20,20,22,22,24,24,31,151,151,146,138,130,146,51,49,49,49,59,49,49,45,59,45,45,
+28,17,17,29,17,17,17,17,29,17,17,17,28,17,29,17,17,17,18,17,28,18,17,18,17,18,17,18,28,18,18,29,29,29,19,29,29,18,18,18,19,20,24,27,123,121,132,174,172,175,168,139,121,132,170,186,186,179,179,186,186,186,170,169,134,132,124,131,123,25,16,15,9,9,14,8,9,9,15,23,24,143,146,144,131,124,121,121,126,147,175,186,205,218,221,218,221,223,216,188,186,175,171,145,145,127,127,132,169,145,141,129,16,22,23,143,174,173,173,169,173,145,169,169,169,173,169,173,169,173,173,145,145,145,135,135,135,145,145,145,169,169,169,174,175,177,177,186,187,188,191,205,205,216,218,220,220,220,218,220,220,218,218,216,218,216,216,205,205,191,191,188,188,187,186,186,179,177,177,177,175,175,169,147,172,135,128,128,126,126,134,132,134,132,134,132,134,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,131,132,131,131,132,131,131,122,131,139,132,139,133,146,24,8,5,10,10,12,12,12,12,12,12,5,12,5,5,5,12,4,12,13,9,24,142,131,138,138,138,138,138,25,16,16,23,22,22,9,20,9,8,8,7,7,12,7,7,12,7,7,7,7,7,7,4,14,146,51,49,60,45,49,49,45,49,45,45,45,
+17,28,17,17,28,17,28,17,17,28,28,17,28,28,17,28,29,17,28,18,17,29,28,28,29,17,29,17,18,17,17,19,17,18,17,18,18,29,29,18,18,18,18,19,20,24,25,26,123,132,173,173,152,131,123,121,147,175,179,177,177,177,177,179,179,179,179,179,174,174,173,169,169,147,144,147,132,134,133,126,126,126,126,141,169,171,184,191,206,205,192,205,205,186,175,169,145,127,127,145,145,169,173,173,174,174,176,171,171,177,175,15,20,22,15,148,177,176,176,178,178,176,176,177,176,176,175,176,176,175,176,176,175,175,175,175,174,174,174,173,173,173,173,169,173,169,173,145,135,135,127,145,135,145,145,169,174,171,175,177,186,188,188,205,216,218,220,221,221,221,221,218,218,216,216,216,216,205,191,188,188,187,188,169,186,186,179,177,175,174,173,173,145,135,135,128,128,126,126,134,134,132,134,134,134,132,132,134,132,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,131,131,122,131,132,131,131,132,131,132,134,131,138,23,8,7,5,7,12,10,10,12,10,4,5,6,13,22,25,138,139,132,131,124,123,131,124,123,131,131,131,131,132,123,131,131,131,138,131,138,138,143,138,138,138,138,138,24,24,23,22,22,20,16,168,49,49,49,60,45,60,45,59,45,45,45,
+28,17,17,28,17,28,28,17,28,17,13,17,28,17,29,17,18,17,18,17,29,17,17,18,18,28,18,17,29,28,29,17,29,28,28,28,18,28,18,18,29,29,18,29,18,18,19,20,22,31,26,130,144,132,124,124,123,121,123,134,168,175,177,175,175,175,175,177,177,179,179,179,186,179,186,186,187,187,186,187,187,188,188,188,188,188,188,186,172,169,145,127,145,135,174,171,174,171,171,171,175,175,175,176,176,176,175,174,169,146,173,155,9,14,31,177,174,175,174,174,174,174,173,173,173,174,174,174,174,174,174,174,175,174,175,175,175,176,175,176,176,176,178,176,176,176,176,175,175,175,174,174,173,173,173,173,169,173,169,145,135,145,127,145,145,141,145,173,174,177,177,186,191,205,216,220,221,221,221,218,218,218,220,188,172,218,188,188,188,187,186,186,179,177,177,175,175,174,174,169,145,135,135,128,128,128,134,126,126,134,134,134,134,134,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,139,131,122,131,132,131,132,132,131,132,132,131,132,132,132,139,146,138,31,25,24,24,16,25,138,138,138,131,132,132,132,123,131,123,123,131,123,131,131,124,123,123,123,123,123,131,123,131,123,123,122,123,123,123,123,122,123,123,123,123,131,123,131,26,160,161,44,49,49,49,45,45,45,45,45,45,45,
+17,28,17,28,17,28,17,17,17,29,17,29,17,29,17,17,28,17,17,18,17,13,28,17,17,18,17,29,17,18,17,29,17,29,13,28,17,29,28,29,18,29,18,29,18,29,18,18,18,19,20,30,23,31,143,138,131,131,123,123,123,123,132,169,171,175,175,175,174,171,174,173,173,173,171,171,171,171,171,171,171,171,169,169,135,169,135,173,169,173,174,171,169,169,141,135,149,169,175,179,179,177,178,175,168,152,153,153,154,159,30,160,31,9,23,36,36,31,24,31,31,31,36,31,30,30,9,15,15,24,24,31,151,151,151,153,155,152,168,169,174,174,174,175,175,175,176,176,177,176,177,178,176,178,178,178,176,178,178,175,175,175,174,174,173,173,173,169,169,145,135,135,127,127,127,145,149,173,171,172,186,188,216,221,184,223,223,223,220,218,218,220,216,216,191,188,187,186,186,179,179,177,177,177,177,175,174,174,174,169,145,135,128,128,126,126,134,126,134,126,134,134,132,132,132,132,132,132,132,132,144,138,131,131,132,132,131,132,131,132,131,132,131,132,131,132,131,132,132,132,132,126,132,132,132,132,132,132,131,124,131,131,131,124,131,131,131,123,131,123,123,131,131,131,123,131,123,124,123,123,131,131,123,123,123,123,131,123,123,123,123,123,123,122,122,138,48,49,45,45,59,45,59,45,45,44,45,45,
+17,28,17,17,28,17,17,29,17,17,17,17,17,17,17,28,17,28,28,17,17,28,29,17,28,28,17,28,18,17,18,17,29,17,18,28,29,29,29,17,29,28,29,18,29,29,29,29,18,29,18,18,19,29,20,30,30,24,27,142,138,137,123,123,123,123,131,144,169,171,171,175,175,175,175,174,175,174,175,171,175,174,175,171,169,169,147,126,126,121,121,133,147,172,187,192,191,187,185,162,154,47,35,35,35,39,40,34,40,44,59,44,193,2,23,30,22,22,22,14,14,14,20,14,8,78,106,83,82,82,71,74,76,55,51,46,35,35,29,19,19,14,14,15,15,2,24,143,153,155,152,168,171,171,175,178,178,177,177,179,179,177,177,177,177,177,176,178,175,176,176,175,175,174,174,173,173,169,173,145,127,127,127,135,141,135,169,171,186,188,192,218,221,223,224,223,220,219,219,218,218,216,191,188,187,187,187,186,186,179,177,178,175,174,174,173,169,169,135,128,126,126,132,134,134,126,134,132,134,147,131,131,132,132,132,132,132,131,132,132,132,131,132,131,132,131,132,132,132,131,132,131,132,131,132,131,131,131,131,131,131,132,123,131,124,131,124,131,123,131,131,123,124,123,131,124,131,123,131,123,123,123,123,123,131,123,123,123,123,123,123,123,123,123,131,31,49,49,49,49,49,45,49,45,45,45,45,39,
+17,28,17,28,17,28,17,17,28,17,28,28,17,28,28,28,17,17,28,28,17,18,17,28,13,17,28,18,17,18,17,18,17,29,17,29,17,29,29,28,28,18,17,28,28,29,29,29,29,29,29,29,29,29,29,29,29,35,35,20,30,24,31,25,143,27,130,130,123,120,123,123,123,123,131,144,139,132,146,134,139,131,132,169,171,171,178,187,192,192,187,205,204,185,164,78,56,41,40,33,40,49,55,70,70,68,82,65,45,45,55,59,92,181,136,25,23,23,22,22,22,22,22,15,8,80,236,235,233,235,235,235,235,236,235,235,234,227,226,118,113,114,108,102,96,91,84,74,73,51,46,35,35,14,14,9,15,2,31,150,160,161,176,177,177,179,179,179,179,177,179,177,178,175,175,177,177,177,175,174,174,171,173,174,169,169,173,135,135,127,127,127,127,141,169,171,172,188,192,219,221,222,223,223,221,221,220,219,221,221,220,219,216,205,188,187,186,179,175,175,174,173,145,135,128,134,127,147,147,146,131,134,134,132,132,139,134,132,132,132,132,132,131,132,132,132,131,131,132,131,132,131,132,131,131,132,131,131,132,131,131,131,132,131,131,131,131,124,131,124,131,131,131,131,123,131,123,131,123,131,123,131,124,123,123,124,123,123,131,123,123,123,123,123,123,31,49,44,54,45,49,45,45,45,45,45,45,45,
+17,17,28,17,29,28,17,28,17,28,17,17,17,17,17,13,28,17,13,17,17,17,17,18,17,18,28,17,18,28,17,28,17,29,17,18,17,28,17,19,29,29,29,18,28,29,18,17,18,29,29,29,29,29,29,29,29,29,29,39,29,35,35,30,30,30,36,31,143,143,27,138,130,130,123,123,131,144,124,131,131,131,146,152,152,160,159,154,36,89,211,88,73,54,70,97,103,111,108,93,82,71,70,70,70,70,66,82,54,44,54,65,62,194,193,3,16,25,24,31,24,31,24,27,129,36,63,99,114,119,227,235,235,235,233,235,234,234,234,228,234,228,234,234,235,235,235,233,235,235,235,233,233,233,119,118,114,103,98,83,70,76,46,47,36,154,156,156,161,172,177,176,175,173,173,135,175,217,135,134,134,128,128,128,134,135,173,169,173,173,174,174,174,173,169,173,135,127,127,127,127,145,145,171,171,184,185,205,218,221,223,224,225,225,223,222,220,220,221,220,218,188,179,176,175,175,171,147,123,126,127,126,134,134,134,134,134,132,132,132,132,132,132,132,132,132,132,132,132,132,131,132,131,132,131,131,131,132,131,131,132,131,131,131,131,131,124,131,123,131,124,123,131,123,131,123,131,123,124,123,124,123,123,131,123,123,123,131,123,123,123,123,123,123,131,143,50,49,44,49,45,49,45,45,45,44,45,44,
+17,17,18,17,17,17,17,17,17,17,18,28,28,28,17,17,28,17,17,18,28,28,17,17,17,28,17,28,17,18,29,13,28,17,29,17,18,29,29,17,29,17,29,17,29,18,17,29,28,28,18,28,29,28,29,29,29,29,29,34,39,39,39,39,39,35,35,35,35,35,30,36,30,36,31,31,31,31,36,30,22,30,30,12,12,12,12,18,11,33,93,235,236,233,114,103,108,108,109,103,93,82,71,70,70,70,66,66,72,70,40,49,65,68,81,225,2,3,120,26,122,120,121,168,175,143,33,39,29,44,59,63,68,83,96,97,102,103,103,109,109,109,109,111,112,109,111,111,112,114,114,113,119,113,113,212,211,212,110,113,105,71,40,39,49,44,34,39,34,34,35,35,48,156,152,145,135,127,135,135,128,135,128,134,134,128,134,128,128,128,128,128,128,169,173,169,171,175,171,173,169,169,169,173,169,173,135,169,169,169,169,169,169,174,170,172,186,191,191,219,221,223,221,220,218,186,165,161,186,176,174,173,169,145,169,135,135,141,141,134,134,134,134,134,132,132,134,132,132,132,134,132,132,132,132,132,132,132,131,132,131,132,131,131,132,131,131,131,132,131,131,131,131,132,124,124,131,131,123,131,123,131,131,123,123,123,123,123,123,123,123,131,123,123,123,130,40,49,49,44,45,45,45,45,45,45,44,45,
+17,17,17,17,17,29,17,17,18,17,17,17,17,17,29,17,28,17,28,17,17,28,13,29,17,18,17,13,17,17,17,17,29,18,17,29,29,17,17,29,17,18,17,29,17,28,28,28,28,28,28,28,18,29,28,29,28,29,29,29,34,34,34,39,39,39,39,40,40,40,45,40,45,45,49,50,49,50,59,54,40,29,50,50,49,40,19,29,19,39,18,4,44,113,238,228,114,102,99,103,103,103,97,82,82,71,71,70,70,72,65,39,40,60,65,182,218,155,165,168,171,177,179,191,205,163,40,70,65,65,54,49,49,40,49,40,40,40,44,40,44,44,44,44,44,44,39,34,34,28,18,12,5,4,4,4,240,4,4,5,6,5,6,12,19,39,19,17,18,18,34,34,17,34,45,46,152,135,135,135,135,128,128,141,128,135,135,135,128,135,128,135,135,128,128,128,128,128,134,128,128,128,128,128,141,171,173,169,169,171,175,172,177,172,176,175,175,171,169,149,145,135,149,184,134,183,223,223,222,223,224,220,205,188,186,186,179,177,175,175,174,173,173,145,169,135,134,134,134,134,134,134,134,134,132,134,132,132,134,132,132,139,132,132,131,132,132,131,131,131,131,132,131,131,131,131,131,124,131,124,131,124,123,124,123,131,124,123,131,124,123,123,123,123,131,123,46,45,49,45,45,45,45,45,45,45,45,44,
+17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,18,17,17,29,17,17,17,17,17,17,17,18,17,29,17,18,17,17,28,17,17,28,29,17,28,28,28,28,18,29,28,18,28,28,29,28,28,28,28,28,29,29,28,29,29,34,29,34,34,39,39,39,39,39,40,39,45,40,45,40,49,49,49,49,54,54,49,40,40,49,50,40,39,29,29,29,40,18,240,44,212,238,228,111,99,99,102,103,102,93,68,71,71,70,66,72,39,39,40,61,58,188,220,221,188,175,174,173,127,181,114,5,65,65,65,61,65,61,60,55,60,61,61,60,61,55,54,60,61,60,60,61,61,61,65,65,65,65,65,65,65,65,54,54,50,50,39,18,18,18,39,34,13,18,34,39,45,18,12,45,44,46,168,145,135,135,135,135,128,135,128,128,135,135,135,135,128,128,128,135,135,135,169,173,169,135,169,128,128,128,173,135,134,128,128,134,128,128,128,128,128,169,169,173,171,171,176,172,169,169,171,145,169,175,188,218,225,225,221,222,219,205,191,188,187,186,179,177,175,175,175,173,173,173,145,135,169,147,128,141,134,134,134,134,134,134,134,134,134,132,132,132,134,132,132,132,131,132,131,132,131,131,131,132,131,131,131,131,131,124,123,131,131,123,131,131,123,131,124,123,123,36,45,49,45,45,45,45,45,45,44,45,44,
+17,17,17,17,17,17,17,18,17,17,17,17,13,17,17,17,17,28,17,17,28,28,28,17,18,17,17,17,17,17,17,17,29,17,13,28,17,29,17,29,29,17,29,17,17,29,17,29,29,17,29,28,28,18,28,28,28,29,28,28,28,34,34,29,34,34,39,39,39,39,40,40,45,39,45,49,45,49,49,49,49,54,54,49,39,39,29,39,39,29,29,29,39,29,5,240,61,228,235,118,106,99,99,102,102,99,91,82,71,71,71,71,29,40,44,65,79,162,179,177,171,173,145,181,93,114,39,65,65,65,65,65,65,65,65,65,65,65,61,65,65,65,65,65,61,65,65,61,65,61,65,61,65,61,65,65,65,65,65,65,65,70,49,12,18,39,34,18,18,45,45,45,19,19,45,39,45,36,174,174,174,174,169,174,173,145,173,135,135,135,135,135,135,135,135,135,128,128,135,135,173,135,135,135,135,135,135,135,135,135,135,135,135,135,128,135,128,128,134,128,128,128,134,134,169,135,171,173,169,135,135,149,171,188,221,231,225,221,222,221,218,191,191,187,186,186,177,177,177,177,175,174,174,174,173,173,173,173,169,135,169,128,147,134,134,134,134,134,134,132,132,134,132,132,132,131,132,131,131,131,131,132,131,131,131,131,124,123,124,123,131,123,124,123,123,131,31,45,45,49,45,45,45,45,44,45,44,45,
+17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,28,17,13,17,17,18,17,17,17,17,17,18,17,28,17,18,28,17,28,17,28,17,18,28,17,17,28,28,28,29,28,17,29,17,29,28,28,28,18,28,28,28,29,32,29,34,34,28,34,34,34,34,34,39,39,39,39,39,40,45,40,45,45,45,45,49,45,49,49,54,49,44,40,40,44,45,29,34,29,39,40,5,240,91,238,227,114,103,96,98,98,97,97,83,82,72,82,71,28,39,49,61,75,77,163,164,164,89,100,69,108,66,45,65,65,65,65,61,65,65,65,65,65,65,65,61,65,61,55,55,61,61,60,55,61,54,55,54,54,54,55,55,55,54,54,54,65,50,28,34,45,44,29,17,39,45,45,17,18,45,39,45,35,171,175,175,174,173,175,175,174,175,174,174,174,174,174,173,174,173,173,173,173,145,173,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,173,135,173,169,173,147,147,173,173,169,173,135,173,173,173,173,173,145,145,169,184,205,222,224,225,222,221,221,218,205,191,188,187,186,186,186,179,179,179,179,175,175,175,174,174,174,173,173,173,173,169,135,141,141,134,134,134,134,134,134,134,132,132,132,132,131,131,131,131,131,131,131,131,131,131,123,131,123,131,124,138,45,45,45,45,45,45,45,45,44,45,44,
+12,17,17,17,28,17,17,17,17,18,17,17,17,17,17,18,17,17,18,17,17,17,17,28,17,17,17,28,13,17,17,29,17,28,28,28,28,17,28,28,28,18,17,29,17,29,28,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,34,28,33,34,34,34,34,34,39,39,39,39,39,39,39,45,45,45,45,45,49,45,49,49,54,54,54,54,55,49,39,34,34,29,39,40,240,39,113,237,227,111,101,91,93,97,98,93,66,55,70,49,29,34,44,70,68,68,66,59,64,101,83,97,103,18,65,65,65,65,61,61,61,55,61,54,61,61,59,60,55,59,54,59,55,54,54,54,54,54,60,59,54,59,49,59,59,59,59,55,49,12,29,44,45,34,17,44,44,45,18,19,39,39,39,39,155,175,175,174,174,175,174,174,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,174,173,173,173,173,145,173,145,135,135,173,135,135,135,135,135,135,134,147,135,145,135,173,145,173,173,173,173,174,174,175,174,173,145,145,171,179,192,222,225,225,222,221,218,216,205,191,191,187,188,188,186,186,186,175,179,177,175,175,175,175,175,174,174,174,173,173,173,147,141,134,134,134,132,134,132,134,134,134,132,132,132,131,132,131,124,131,131,131,131,123,132,142,35,45,45,45,45,45,45,44,45,44,44,
+17,17,17,17,13,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,28,13,17,13,17,17,17,17,18,17,17,18,17,17,28,28,17,28,28,28,29,17,28,17,29,17,28,28,18,28,28,28,28,28,28,28,28,28,29,28,28,29,28,29,34,33,34,34,34,34,39,39,39,39,45,39,45,45,45,45,45,45,45,49,45,49,49,49,59,54,55,49,40,29,29,39,40,29,240,44,212,237,118,111,101,91,91,97,97,60,45,49,40,28,34,45,66,68,68,70,61,91,83,82,112,18,54,65,61,54,55,61,60,61,55,60,54,54,54,54,54,59,55,49,59,49,59,59,59,59,49,59,49,49,59,49,49,49,49,49,49,28,34,44,45,29,28,34,45,45,12,18,39,35,39,39,158,175,174,174,174,174,173,173,173,173,173,173,173,173,173,145,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,145,173,135,173,145,135,135,147,141,135,128,135,135,128,135,128,135,128,128,135,128,135,147,135,169,135,135,141,145,175,187,218,223,224,221,220,218,218,216,192,192,191,188,188,188,186,186,186,179,179,175,179,175,175,175,175,175,174,174,174,173,173,173,173,147,169,147,134,134,134,134,134,152,132,134,134,132,132,131,132,131,131,131,35,40,39,45,45,45,45,45,44,39,44,
+17,17,17,17,17,17,17,28,17,17,17,13,17,17,12,17,17,17,17,17,13,17,17,17,17,17,17,18,28,17,17,17,18,17,17,18,17,28,28,28,17,29,17,29,29,28,28,17,29,28,17,29,28,28,28,28,28,28,28,29,28,29,28,32,28,34,32,29,34,33,34,34,34,34,39,39,39,39,45,39,45,40,45,39,45,45,45,45,49,49,49,49,59,54,54,49,44,39,39,40,40,18,240,59,228,236,226,109,91,82,88,97,66,49,49,39,18,29,49,62,66,70,61,82,83,68,109,49,45,65,54,54,54,54,55,54,54,60,54,59,59,59,59,59,49,59,49,59,49,49,49,49,49,49,49,49,44,49,49,49,49,49,49,28,28,44,45,34,18,34,45,45,19,20,20,19,35,39,58,174,145,173,174,173,145,173,145,173,145,173,135,145,173,135,169,145,145,145,135,145,173,135,169,135,145,135,145,135,135,135,135,135,135,135,135,135,135,135,135,135,135,134,134,128,128,135,128,128,128,128,128,135,128,128,128,128,128,135,141,128,141,135,135,135,127,127,173,184,191,221,223,221,220,220,218,218,216,216,205,188,188,188,187,186,186,186,186,186,186,186,175,179,175,175,175,175,175,175,174,174,173,173,173,169,141,141,133,141,134,134,134,134,134,144,131,131,139,36,39,39,39,45,45,45,44,39,39,39,
+12,17,17,17,17,17,17,13,17,17,17,17,17,17,17,18,17,13,17,17,17,17,17,18,17,28,17,17,17,13,28,17,17,17,18,17,18,28,17,17,29,17,29,28,17,17,18,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,33,28,28,28,29,29,32,34,34,34,34,34,34,39,39,39,39,39,39,39,45,45,45,45,45,45,45,45,45,45,49,49,49,59,54,45,40,34,39,40,39,5,240,70,235,236,119,103,91,82,93,71,55,55,40,28,39,49,62,62,62,66,82,63,103,59,44,60,60,54,54,59,54,49,59,49,59,59,49,49,49,49,49,49,49,49,49,49,49,44,49,44,45,45,45,45,45,45,45,45,45,29,34,45,45,34,17,45,44,44,34,31,31,22,30,46,48,146,134,152,152,134,147,152,134,134,134,144,134,134,134,134,134,134,134,134,134,132,134,134,134,134,134,134,134,134,134,134,134,134,134,134,128,134,128,134,134,134,134,144,134,128,128,128,128,128,128,128,128,128,128,128,135,128,135,128,128,128,128,127,127,135,135,173,171,174,175,175,175,190,220,221,220,218,216,205,205,216,216,216,191,191,191,188,188,186,186,186,186,186,186,186,179,175,179,175,175,175,175,175,175,174,174,173,173,169,135,147,147,128,134,134,134,134,134,31,39,39,39,39,39,39,44,44,39,39,
+17,17,12,18,17,17,17,17,17,13,17,17,18,17,17,17,17,17,18,17,18,17,17,17,17,13,17,18,17,17,17,28,13,17,17,17,17,17,28,28,17,29,17,28,28,29,17,28,28,28,29,28,28,28,28,28,28,28,28,29,28,28,28,29,28,33,28,33,29,29,32,34,34,34,34,34,34,34,39,39,39,39,39,40,39,39,39,39,45,45,45,45,49,45,45,49,49,59,49,45,40,34,34,40,29,4,240,68,236,233,117,101,82,91,72,65,55,40,28,34,49,61,61,59,66,82,60,45,45,60,49,59,59,49,59,59,49,49,49,49,49,49,49,49,49,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,34,34,44,45,34,28,45,49,49,20,153,174,23,23,15,159,188,173,175,175,171,173,135,169,169,135,169,147,147,147,147,147,141,147,147,134,134,134,134,134,134,147,134,134,134,141,134,134,133,134,134,132,134,134,134,134,134,134,139,134,134,128,134,128,134,128,128,141,128,128,128,127,127,135,135,173,174,175,172,179,179,179,179,172,162,160,151,120,121,140,174,187,205,218,220,218,216,216,205,216,205,191,191,191,188,188,188,188,188,186,186,186,186,186,186,186,179,179,175,175,175,175,175,175,174,174,173,173,169,169,134,134,141,147,146,34,39,39,39,39,39,39,39,39,39,
+12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,29,17,17,17,28,28,17,17,28,13,18,17,17,28,17,18,17,28,17,29,17,29,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,28,28,29,34,32,32,34,29,34,34,34,34,34,39,39,39,39,39,39,39,39,39,45,45,40,45,45,45,45,45,45,49,59,49,44,34,34,34,34,28,4,4,83,237,119,111,96,83,72,65,65,40,18,44,49,59,59,59,66,60,45,44,45,59,49,49,49,49,49,59,49,49,49,49,45,45,45,44,45,45,45,45,44,45,45,44,45,44,39,45,44,44,44,45,39,45,39,34,45,44,39,34,45,49,44,29,153,173,27,23,23,153,187,127,135,135,135,135,135,135,128,135,135,135,128,128,135,128,135,128,135,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,134,128,134,134,128,144,134,128,134,134,128,127,127,127,135,169,173,171,172,179,179,179,179,167,167,160,153,151,16,16,16,16,22,23,24,23,23,16,129,148,174,186,188,216,218,216,205,191,205,191,191,205,191,191,191,188,188,188,188,188,186,186,186,186,186,186,186,179,175,175,175,175,175,175,174,174,171,173,173,147,173,146,35,39,39,39,39,39,44,34,39,39,
+17,12,17,17,17,17,12,17,17,17,12,17,17,17,17,18,17,12,17,17,17,17,17,17,18,17,17,17,28,17,17,29,17,17,13,28,28,28,17,17,28,28,18,28,28,17,18,28,17,29,28,28,28,17,28,28,18,28,28,28,28,28,28,28,28,28,32,28,32,32,28,29,34,34,34,34,34,33,34,34,34,34,39,34,39,39,39,39,44,39,39,44,40,45,45,45,45,44,45,45,49,49,49,44,34,34,33,29,18,240,33,228,237,227,109,96,71,61,65,45,29,40,49,59,59,49,59,45,44,45,49,49,49,49,49,49,44,45,45,44,45,45,45,45,45,45,44,44,44,45,44,39,44,44,44,44,44,44,39,39,44,39,44,39,39,44,44,39,39,49,50,45,35,155,173,138,31,23,143,186,127,135,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,134,128,128,134,128,128,135,128,134,131,126,128,141,173,174,175,179,179,179,179,179,179,171,138,25,16,16,16,16,16,16,25,25,31,31,24,24,24,24,24,23,23,22,15,15,16,144,175,179,188,205,205,191,191,205,191,191,191,205,191,191,191,188,188,188,188,188,186,186,186,186,186,186,179,179,179,175,175,175,175,174,174,174,173,173,168,35,34,39,39,39,39,34,44,39,34,
+12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,13,17,17,17,17,17,17,17,13,28,17,17,17,18,17,17,28,17,17,28,28,17,17,17,18,28,17,17,29,17,28,17,29,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,33,28,28,34,28,29,34,34,34,34,34,34,34,34,39,39,39,39,40,39,39,44,44,44,44,45,45,45,45,45,45,45,49,44,39,29,32,28,5,240,59,228,237,119,111,68,55,55,40,18,45,49,49,59,44,44,44,44,59,45,49,44,45,45,44,45,45,45,45,44,44,44,44,44,44,44,44,34,44,44,44,39,44,34,44,34,44,44,34,44,39,44,44,44,45,45,39,35,35,47,22,152,147,131,23,23,143,179,135,128,127,128,128,128,128,128,128,128,128,128,128,134,127,128,128,128,128,128,134,128,128,128,134,128,134,134,134,128,134,134,126,127,128,135,135,135,135,145,173,168,177,177,184,167,163,79,57,46,45,45,35,47,154,168,147,130,26,138,25,25,31,24,31,24,24,24,24,24,24,23,24,22,22,22,20,14,14,15,27,148,174,179,187,191,205,191,205,205,191,205,191,205,191,191,191,191,191,191,188,188,188,186,186,186,179,175,175,179,175,175,175,175,175,174,174,175,30,33,39,39,34,39,34,34,34,34,
+17,17,17,17,17,17,17,13,17,17,17,17,13,17,17,17,17,18,17,17,17,17,13,17,17,17,18,17,17,17,17,28,17,17,17,28,13,17,17,28,17,28,28,18,17,17,28,29,17,28,28,29,17,28,28,28,28,28,28,28,29,28,28,28,28,28,28,28,28,28,33,28,28,32,29,32,34,28,34,32,32,34,34,34,34,34,34,34,34,34,34,39,39,39,39,39,39,39,44,44,44,44,45,44,45,45,45,44,44,39,33,28,4,240,40,83,235,228,118,90,65,49,40,45,49,44,44,44,34,44,45,45,44,45,45,45,45,45,44,45,44,44,44,44,44,44,39,44,39,44,44,34,44,34,34,44,34,44,34,39,34,34,34,34,34,39,39,39,39,39,30,24,23,146,173,134,143,23,25,177,135,128,134,128,128,128,128,128,128,128,128,128,128,128,128,128,134,128,134,128,128,128,134,128,128,127,128,128,128,135,173,173,171,171,161,160,155,158,154,58,57,51,50,45,34,34,33,33,33,44,44,45,44,44,44,46,46,48,154,153,152,151,138,26,25,24,24,24,24,24,23,23,22,22,22,20,15,20,20,14,19,14,14,15,25,144,171,177,179,187,188,191,191,191,191,191,191,205,205,191,216,191,191,191,191,191,191,191,188,186,186,186,179,179,175,175,174,179,36,33,34,34,39,34,34,34,34,34,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,18,17,17,17,18,17,17,28,17,17,28,17,17,28,28,17,28,18,17,17,18,17,18,17,17,17,29,17,28,18,17,28,29,17,28,17,28,28,17,28,28,28,28,28,28,28,28,28,32,28,33,28,34,28,34,34,29,32,34,34,32,34,34,34,34,34,34,34,34,34,34,39,39,39,39,39,39,44,39,39,44,44,44,45,45,45,44,34,28,28,28,240,240,69,237,228,117,66,49,29,49,49,44,44,44,44,44,44,45,44,44,44,44,45,44,39,44,44,39,44,34,44,34,44,34,44,34,44,34,44,34,34,34,34,34,34,34,34,33,34,34,34,34,39,34,39,20,24,23,151,145,135,144,23,24,175,135,128,128,128,128,128,128,128,128,128,128,128,128,127,135,128,128,128,128,141,135,145,145,169,173,171,171,168,161,156,158,48,47,46,35,44,33,33,33,33,33,34,44,44,45,44,44,45,45,45,45,45,45,45,45,44,44,44,44,45,46,48,155,153,151,143,16,23,22,22,22,22,22,20,15,14,20,14,14,20,14,20,14,14,13,19,8,15,148,169,174,177,186,187,188,191,188,191,191,191,205,205,205,216,216,216,216,216,216,216,216,191,191,191,191,191,186,188,154,28,34,34,34,34,34,34,34,32,
+17,17,17,12,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,13,28,17,17,17,29,17,17,18,17,17,17,29,17,17,17,28,28,28,17,17,28,17,28,28,17,17,29,28,17,29,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,32,34,28,34,32,34,28,34,28,34,34,33,34,34,34,34,34,39,39,39,44,34,44,44,39,44,44,44,44,39,45,45,39,34,33,33,28,240,240,97,237,228,102,49,18,49,49,39,33,44,44,34,44,44,44,39,44,39,44,44,44,34,44,34,44,34,44,34,44,34,34,34,34,34,34,34,33,32,34,34,33,34,34,34,34,34,34,34,34,34,29,31,22,153,173,133,146,23,25,175,127,127,135,127,135,135,135,135,135,135,145,135,145,173,169,169,169,168,168,155,155,154,154,48,47,46,35,35,39,34,33,33,34,44,45,45,45,45,45,39,44,45,44,44,44,45,45,45,44,44,44,45,45,45,45,45,45,45,45,45,44,34,44,46,47,154,153,151,138,23,22,9,20,22,20,20,15,14,20,14,20,14,20,20,20,14,20,18,12,14,23,155,174,174,173,173,174,177,177,179,177,177,177,177,175,177,175,179,175,186,186,187,188,191,216,218,191,219,182,4,34,34,34,34,34,34,34,34,
+12,17,17,17,12,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,28,17,17,13,17,17,18,17,17,17,13,28,17,17,18,17,17,29,17,29,17,17,18,17,28,17,29,28,17,29,17,28,28,28,28,28,17,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,32,28,34,28,32,28,33,28,33,34,33,34,32,34,34,33,34,33,34,33,34,34,34,34,44,34,39,44,34,44,39,44,44,39,44,44,39,34,32,34,28,240,4,104,238,226,61,12,49,49,33,44,44,44,39,44,39,44,44,44,44,44,34,44,44,34,44,34,34,34,34,33,34,34,34,34,33,34,32,34,34,33,34,33,34,33,34,32,34,34,34,29,29,30,24,146,177,134,36,15,9,175,173,173,174,168,171,174,168,168,168,155,153,154,154,36,47,47,46,35,35,39,39,33,33,33,34,34,44,39,45,45,44,45,45,45,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,45,44,45,45,45,45,45,45,45,44,34,34,46,47,154,156,36,31,23,9,14,14,20,20,20,20,20,14,20,14,14,14,14,14,14,14,12,35,46,154,168,174,169,135,135,135,127,127,127,135,128,128,141,141,141,141,147,135,135,135,135,173,172,188,167,28,34,34,34,32,34,32,34,32,
+17,17,17,17,17,12,17,17,17,17,17,13,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,29,17,17,17,28,17,17,17,17,28,17,17,29,17,28,17,28,17,17,28,17,28,17,17,28,28,28,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,32,28,28,32,32,28,32,34,34,29,32,34,32,34,32,34,32,32,34,34,34,34,34,39,34,39,39,39,39,44,39,39,44,44,44,34,32,34,17,240,17,229,228,102,33,49,49,39,32,59,61,44,39,44,34,34,34,34,44,34,34,34,34,34,34,33,34,34,32,34,32,34,34,33,32,32,32,32,33,34,34,28,34,34,34,34,34,34,34,29,23,142,168,24,18,105,47,142,169,151,30,236,78,6,35,34,34,34,34,32,33,33,33,33,34,39,39,39,39,44,39,39,44,39,44,44,39,44,39,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,39,44,44,44,44,44,45,45,45,45,44,34,34,35,36,154,155,154,31,22,22,20,22,20,14,20,20,20,20,20,30,20,20,20,20,29,35,39,34,47,160,175,177,169,135,135,135,135,171,177,186,186,187,187,186,186,179,171,171,141,141,141,152,29,34,34,34,34,34,34,32,32,
+17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,12,17,17,17,17,17,17,17,18,17,17,17,18,17,17,28,17,28,17,17,28,17,28,28,28,17,28,28,17,29,18,17,28,17,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,32,34,34,29,32,29,32,34,34,34,33,34,33,34,34,34,34,34,34,39,34,34,44,34,39,39,39,44,44,34,34,28,5,240,78,212,109,102,62,18,39,59,65,34,39,34,44,34,44,34,34,34,33,34,33,33,34,34,32,34,32,34,32,32,32,29,34,34,32,34,32,32,34,32,28,34,32,34,34,29,34,28,20,20,20,5,17,235,229,6,8,240,59,235,82,4,34,34,34,39,39,39,39,34,39,39,34,39,44,44,39,44,44,39,44,39,34,44,44,44,44,44,34,44,34,44,34,44,34,44,44,34,34,44,44,44,34,44,44,34,44,34,44,44,44,44,44,44,44,44,39,44,39,44,44,39,44,44,44,44,34,34,34,46,47,31,31,24,23,23,23,22,22,22,22,23,23,23,23,23,31,36,30,36,30,30,22,31,167,188,188,191,191,191,204,190,183,181,162,154,153,156,155,167,184,187,186,186,186,20,28,34,34,34,32,34,34,32,
+17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,18,17,17,17,17,17,28,17,17,28,17,17,17,28,17,17,28,17,28,17,28,28,17,18,28,17,18,28,17,17,28,17,29,28,28,28,17,28,28,28,28,28,28,28,17,28,28,28,28,28,28,28,28,28,32,28,28,28,28,32,32,32,32,32,28,33,32,32,32,32,32,32,29,28,32,34,32,34,33,34,32,34,32,34,34,34,34,34,44,34,39,44,44,44,34,28,240,240,44,97,97,62,44,49,59,34,34,34,34,34,34,34,34,34,34,34,34,34,34,32,34,34,32,34,34,34,34,32,32,32,32,28,28,34,28,34,29,34,29,29,28,29,32,34,28,33,19,5,44,234,118,4,18,5,64,228,72,4,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,39,34,44,34,44,44,44,44,34,44,34,44,34,44,34,34,34,34,34,34,44,34,44,34,34,44,34,34,34,44,34,34,34,44,44,34,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,34,33,44,35,35,23,31,31,31,24,24,24,24,23,23,24,24,24,24,24,24,24,31,31,138,16,16,31,151,36,15,2,9,9,9,15,15,23,23,23,16,16,120,151,167,190,20,32,34,32,34,32,32,32,32,
+17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,18,17,28,17,18,28,17,29,17,29,17,28,17,17,17,29,17,17,17,17,29,28,28,17,28,28,17,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,32,28,28,28,32,32,32,32,32,28,32,32,32,32,32,32,32,32,32,34,32,34,34,32,34,34,34,33,34,34,34,34,34,44,34,32,17,240,240,62,65,39,34,32,34,33,33,34,34,34,34,34,32,32,34,32,34,32,34,34,32,32,34,32,33,32,32,28,32,28,33,28,33,32,28,32,32,32,28,28,32,34,34,29,29,29,240,62,234,102,4,12,240,106,235,71,5,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,44,34,34,44,34,34,34,34,34,34,44,34,34,34,44,34,34,34,34,34,34,34,34,44,34,44,34,44,34,34,44,44,34,44,44,44,44,34,44,44,44,44,34,44,34,44,44,44,34,44,44,34,44,44,35,35,35,30,30,30,31,31,24,24,23,24,24,24,31,24,23,22,30,22,22,20,20,30,30,22,22,22,22,23,23,24,24,24,24,24,23,20,12,28,34,28,34,32,32,32,32,32,
+12,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,18,17,17,17,17,17,17,28,13,17,18,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,18,17,17,28,28,28,17,17,28,17,28,28,28,28,17,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,28,28,28,32,32,28,28,28,32,32,32,32,28,32,32,32,32,32,32,32,32,32,34,32,32,34,33,34,34,34,34,34,32,34,34,33,39,34,34,39,39,17,32,39,32,34,34,34,34,32,34,32,32,34,34,34,29,34,32,34,33,32,32,32,32,32,28,28,32,28,32,28,28,32,28,28,28,28,28,32,32,28,28,28,28,32,34,29,34,83,90,49,29,29,17,112,116,65,12,34,28,34,34,32,34,32,34,34,34,32,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,33,34,34,34,34,34,34,34,34,34,34,34,34,44,34,34,34,34,44,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,33,34,34,34,39,39,45,35,39,35,39,39,39,35,34,39,34,39,39,35,20,20,20,20,30,22,30,22,22,20,22,20,20,29,28,29,34,34,34,32,28,32,28,28,32,
+17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,17,17,17,28,28,17,28,17,29,17,29,17,17,17,28,29,17,28,28,17,28,17,28,28,28,18,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,28,32,32,28,28,32,28,28,32,28,32,32,32,32,32,32,32,28,32,32,32,32,34,32,34,32,34,32,34,44,34,28,34,34,34,33,32,32,32,34,34,34,32,32,32,33,33,28,32,28,28,32,28,32,32,32,32,28,28,32,32,28,28,32,28,28,28,28,28,32,32,28,28,28,28,28,28,32,4,70,61,55,28,29,34,97,34,49,28,34,34,28,34,29,34,34,32,28,34,34,32,32,32,34,34,34,32,34,34,34,34,33,34,34,34,34,34,34,34,34,32,34,34,34,34,34,34,34,34,34,34,34,32,34,33,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,33,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,19,34,34,34,34,29,34,29,29,29,29,29,29,32,29,29,29,32,34,32,32,32,32,32,32,32,28,
+17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,12,17,28,10,17,17,17,17,17,28,17,17,17,17,28,17,28,17,28,17,17,17,17,28,17,17,17,17,28,28,17,17,17,28,17,28,28,28,17,18,17,17,17,28,28,28,17,28,28,28,28,28,28,28,17,28,28,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,28,32,32,28,28,32,32,28,32,28,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,32,32,32,32,32,32,34,32,32,28,28,32,28,32,32,32,28,32,28,28,32,28,32,28,28,28,28,28,32,28,28,28,28,28,28,28,32,28,28,28,28,28,28,32,61,44,28,28,17,70,66,44,28,32,32,32,28,32,32,32,34,32,32,28,34,34,34,34,32,32,34,34,32,34,32,34,32,34,32,34,32,34,32,32,34,32,32,32,34,32,34,32,34,32,34,34,34,34,34,34,34,34,34,34,34,32,34,34,34,34,34,32,34,32,34,34,34,34,34,32,34,34,34,32,34,34,32,34,32,34,32,34,32,34,34,34,34,34,34,34,34,32,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,29,34,34,34,32,32,28,32,32,32,28,28,28,28,28,32,
+10,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,12,12,17,17,13,28,17,17,28,17,17,17,18,17,18,17,13,17,17,18,17,29,17,29,17,17,28,17,29,28,28,17,28,17,17,18,17,28,17,18,17,17,28,17,28,28,28,17,28,28,17,28,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,28,32,32,28,32,28,32,28,32,32,32,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,28,28,32,32,28,32,32,32,32,32,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,32,28,28,28,28,28,28,28,32,28,28,33,28,32,28,32,28,32,28,32,32,32,32,28,32,32,32,32,32,32,34,34,32,34,32,34,32,34,32,34,32,34,32,34,34,34,32,34,34,32,34,32,34,32,32,34,32,34,32,34,32,34,32,34,34,32,34,34,34,34,34,32,34,34,34,34,34,32,34,32,34,32,34,32,32,34,32,34,34,34,34,34,34,34,34,32,34,34,34,32,34,32,34,34,34,32,34,34,34,32,34,32,32,32,32,28,32,28,34,28,32,32,28,32,28,28,32,32,32,28,28,28,32,28,28,28,
+17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,28,28,17,17,28,17,28,17,28,17,28,28,17,28,17,28,17,28,28,28,17,17,28,28,28,28,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,32,17,28,28,28,28,28,28,28,28,32,32,28,28,32,28,32,32,32,28,28,28,28,28,32,28,32,28,32,32,32,32,32,32,28,28,32,32,32,28,28,32,32,32,32,32,32,32,32,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,28,28,28,28,28,17,28,28,28,28,28,28,28,32,28,32,28,28,28,32,28,32,32,32,28,28,28,32,28,32,32,32,32,32,28,32,32,32,32,34,32,34,32,34,34,32,34,32,34,32,32,32,32,32,32,34,32,34,32,34,32,34,32,32,34,32,32,32,32,32,32,34,32,32,34,32,34,32,34,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,34,32,34,34,32,34,32,34,32,34,32,32,32,32,32,32,32,32,32,28,32,28,32,28,28,32,28,28,32,32,32,28,32,28,32,28,28,32,32,28,28,32,28,32,
+12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,28,17,17,29,17,28,17,17,28,17,28,17,28,17,17,17,28,17,28,28,17,17,28,28,28,28,17,17,28,28,28,29,17,17,28,28,28,28,28,17,28,28,28,28,28,17,28,28,28,28,28,17,28,28,28,28,17,28,28,28,17,28,28,32,28,28,32,17,32,17,28,32,32,28,28,28,32,28,32,32,32,32,28,32,28,32,32,28,28,32,32,32,32,28,28,32,28,32,28,28,32,32,32,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,17,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,32,28,28,28,28,32,32,28,28,32,32,28,28,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,28,32,32,28,32,32,28,28,28,32,32,28,17,32,32,32,17,28,32,28,17,28,28,
+17,17,12,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,18,17,17,28,17,17,17,29,17,17,17,17,17,18,28,28,17,17,28,28,28,28,17,28,17,28,28,17,28,28,17,17,28,17,28,28,17,28,28,17,28,28,17,28,28,28,17,28,28,28,28,28,28,28,28,28,17,28,28,28,28,28,28,28,28,17,32,28,28,17,28,17,32,28,28,28,28,28,17,28,17,32,28,28,28,32,28,28,28,17,32,32,32,28,28,32,28,28,32,28,32,28,28,32,32,28,28,28,28,32,32,32,32,28,28,28,28,28,17,28,28,28,28,28,28,17,28,28,28,28,32,17,28,17,28,17,28,28,28,28,28,28,28,28,28,32,28,32,28,28,28,28,32,28,28,32,28,32,32,28,28,32,32,28,32,32,32,32,32,28,32,32,32,32,32,32,28,32,32,32,28,32,32,32,28,32,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,28,32,32,32,32,32,28,28,32,32,32,32,28,32,28,28,28,28,17,32,28,28,17,32,28,32,28,17,32,28,28,17,32,28,28,17,
+17,12,17,17,17,17,17,17,12,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,18,17,17,17,17,28,17,28,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,28,17,17,28,17,17,28,17,28,28,28,17,28,17,28,28,17,28,28,28,28,28,17,28,17,28,28,17,28,28,28,28,17,28,28,28,28,17,28,17,28,17,17,28,28,17,28,28,28,28,28,17,28,17,32,28,28,28,28,28,17,17,32,28,17,28,32,28,32,28,17,32,28,28,28,28,28,28,28,28,28,32,28,28,32,28,28,32,17,32,28,28,28,28,28,17,28,28,28,28,17,28,17,28,28,28,17,28,17,28,28,28,28,28,28,28,28,17,28,28,17,32,28,28,28,28,28,32,28,32,28,28,28,28,28,28,28,32,28,28,28,32,32,28,32,32,28,32,32,32,32,32,28,32,32,32,28,28,28,32,28,32,32,32,32,28,32,32,32,28,32,28,32,32,32,32,32,32,32,32,32,32,32,28,32,32,28,32,32,32,32,32,32,32,28,32,32,32,32,32,28,32,28,28,32,32,32,28,32,28,32,32,32,28,28,28,28,32,32,32,28,28,17,32,28,32,28,28,32,32,28,17,32,28,32,28,17,32,28,28,28,17,28,28,32,17,32,
+17,17,12,17,17,17,12,17,17,17,17,17,17,12,17,17,12,17,17,17,12,17,17,12,18,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,28,17,17,28,17,17,28,17,28,17,28,17,28,28,17,28,28,17,17,28,17,28,17,28,17,28,17,28,28,17,28,28,28,28,28,28,28,17,28,17,28,28,28,28,17,28,28,17,28,28,28,28,17,28,17,28,17,32,17,28,28,28,32,17,17,32,17,32,17,28,28,32,28,28,32,17,28,17,28,28,17,28,32,28,28,17,28,32,28,28,28,32,28,28,32,17,28,28,17,28,32,28,32,28,28,17,28,17,28,28,28,28,28,17,28,28,28,28,28,17,28,17,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,17,28,28,28,28,28,28,28,32,32,17,32,28,28,28,28,32,32,28,32,28,28,32,32,28,32,28,28,28,28,32,32,32,28,28,32,32,28,32,32,32,28,32,32,32,32,32,32,28,32,32,32,32,32,32,32,32,32,32,32,32,28,32,32,32,32,17,32,32,32,32,32,28,32,28,32,32,32,32,32,32,28,32,32,32,32,32,32,32,17,32,32,32,32,28,32,17,32,17,17,17,32,28,17,28,17,28,32,17,32,17,28,28,28,17,28,28,28,
+17,17,17,12,17,12,17,10,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,28,13,17,29,17,17,17,18,17,28,28,17,17,28,17,17,28,17,28,17,28,17,17,28,17,28,28,17,28,28,28,28,17,28,28,17,28,17,28,17,28,28,28,28,28,17,28,17,28,28,17,28,28,17,17,17,28,28,17,28,17,28,17,32,17,32,17,28,28,28,17,28,17,28,17,28,17,32,17,28,28,28,32,17,28,28,28,17,28,28,28,28,17,28,17,28,32,28,17,28,28,28,28,28,28,17,28,17,28,28,28,28,28,17,28,17,28,28,28,28,17,28,17,28,28,28,28,28,28,28,17,28,28,17,28,17,28,17,28,17,28,28,28,28,28,28,17,32,28,32,28,17,28,28,28,28,32,28,32,28,32,28,32,32,28,28,28,28,17,28,32,28,28,17,28,32,32,32,28,28,32,17,28,28,32,32,17,28,32,32,32,32,32,28,28,32,28,32,32,17,28,32,17,32,32,32,17,32,32,32,32,17,32,28,28,32,28,28,28,32,17,28,32,32,32,17,32,17,32,32,17,32,32,28,32,17,32,17,28,28,28,28,32,17,17,32,17,28,17,32,17,28,17,32,17,28,17,32,17,17,17,
+17,12,17,17,17,17,17,12,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,18,17,17,17,17,13,28,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,28,17,17,28,28,17,17,28,17,28,17,17,28,17,17,17,17,28,17,17,28,17,28,28,28,28,17,28,17,28,28,28,17,28,17,28,28,17,28,28,28,17,28,17,28,28,17,28,17,28,17,28,17,28,17,32,17,28,17,28,17,28,28,17,28,17,32,17,28,28,17,28,28,17,28,17,28,28,28,28,28,17,28,28,28,28,32,28,28,28,28,28,28,28,28,17,17,28,28,28,28,28,17,28,17,28,17,28,28,17,28,17,28,17,28,28,28,17,28,28,28,28,28,28,28,28,28,28,28,28,28,28,32,17,32,28,28,28,28,17,32,17,28,28,28,28,32,28,17,28,17,32,28,28,28,28,17,32,28,32,32,17,32,17,32,32,28,32,17,32,28,28,32,32,28,28,17,32,32,28,17,28,32,17,28,32,32,28,28,17,32,28,28,17,32,28,32,28,32,32,17,28,28,32,32,28,28,28,17,32,32,32,28,32,17,28,32,17,32,17,32,28,32,32,17,32,17,17,32,28,17,17,28,17,17,17,32,17,17,28,17,28,17,28,28,28,
+17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,18,17,17,18,28,17,17,17,17,28,17,28,17,17,28,17,17,28,17,29,17,28,17,28,28,28,17,17,18,28,28,17,28,28,28,28,28,28,17,28,28,28,28,28,17,28,28,28,17,28,17,28,17,17,28,17,28,28,17,17,28,17,28,28,17,28,17,28,17,28,28,17,28,17,28,17,28,17,28,17,28,28,17,28,17,28,28,28,28,28,28,17,28,17,28,28,28,17,28,17,28,28,28,17,28,17,28,17,28,28,28,17,28,28,17,28,17,28,28,28,28,17,28,28,28,17,28,28,28,17,28,17,28,17,28,28,17,28,17,28,17,28,17,28,17,28,28,28,17,28,17,28,28,28,28,28,28,17,28,17,28,32,28,28,28,28,28,17,28,28,28,17,28,17,28,28,28,28,17,28,17,32,28,32,17,32,17,32,28,32,32,17,32,28,32,32,28,32,32,17,17,32,32,32,28,17,32,28,32,17,32,17,28,28,32,32,32,17,32,28,32,32,28,28,17,32,17,32,32,17,28,17,32,17,17,28,17,32,17,28,28,17,17,17,28,17,28,17,28,17,17,28,28,17,17,17,28,17,17,
+17,12,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,18,17,17,17,17,18,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,18,17,17,28,28,17,28,17,18,17,17,29,17,28,28,28,17,29,17,17,17,28,28,28,17,28,17,17,17,28,17,28,17,28,17,28,28,17,28,28,17,28,17,28,28,17,28,17,17,28,28,17,28,17,17,28,17,28,17,28,17,17,28,17,28,17,28,17,28,17,28,17,17,28,17,28,28,17,28,28,17,28,28,28,28,28,17,28,28,28,28,17,28,28,28,28,17,28,28,28,17,28,28,28,17,28,17,28,17,17,17,28,28,17,28,17,28,28,17,17,28,28,28,28,17,28,17,28,28,28,28,28,28,28,28,28,28,17,28,28,28,28,17,28,28,17,28,17,28,17,28,28,28,17,28,17,28,28,32,17,17,28,17,28,28,32,17,28,17,28,17,28,28,17,28,32,17,28,17,32,17,32,28,17,32,17,17,32,17,28,28,28,17,28,17,28,32,17,32,17,28,32,32,32,17,28,17,28,32,17,32,17,32,17,32,17,28,32,17,17,32,28,28,17,32,32,17,28,17,28,17,17,28,17,28,17,17,28,17,17,28,28,17,17,28,28,17,28,17,28,
+17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,18,17,17,17,17,17,28,18,17,17,17,17,17,17,28,28,17,28,17,17,29,17,28,17,17,28,17,28,28,28,28,17,28,28,17,28,17,28,17,17,28,17,28,17,28,17,28,28,17,28,28,17,28,17,28,28,17,28,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,28,28,17,28,17,17,28,17,28,28,17,28,17,28,28,28,17,28,17,28,32,17,28,17,28,28,17,28,17,28,17,17,28,28,28,17,28,28,28,28,17,28,17,28,28,17,28,28,28,17,17,28,28,28,17,28,17,28,17,28,17,28,17,17,28,28,28,17,28,17,28,28,17,28,17,28,17,28,28,17,32,17,28,28,28,17,17,28,28,17,28,17,17,17,17,28,17,32,17,28,17,32,17,28,17,28,17,32,17,32,17,32,17,28,32,32,17,28,17,28,32,17,28,32,17,28,32,17,32,17,17,28,17,32,17,32,17,28,32,28,28,17,28,28,32,17,28,32,17,17,17,28,17,17,28,17,28,17,17,28,17,17,28,17,17,28,17,28,17,17,17,28,17,17,17,28,17,28,17,
+12,17,17,12,17,17,12,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,13,17,17,18,17,17,18,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,28,17,17,17,17,28,17,28,28,17,28,17,17,28,17,28,17,28,28,28,28,17,28,17,28,17,17,28,17,28,17,28,17,28,17,17,28,17,28,17,17,28,17,28,17,28,28,17,28,17,28,28,28,17,28,17,17,17,28,17,28,28,17,28,17,28,28,17,28,28,17,28,28,28,28,28,17,28,28,28,17,28,28,17,28,28,17,28,17,17,28,28,28,17,17,28,28,28,28,28,17,28,17,17,17,28,28,17,28,17,28,28,28,17,28,17,28,17,28,17,28,28,17,28,28,28,17,28,28,17,28,28,28,17,28,28,17,28,28,17,17,28,28,17,28,28,28,28,28,28,28,17,28,17,28,17,28,17,17,28,28,17,28,28,17,28,17,28,17,28,17,17,28,17,28,28,17,28,28,17,28,17,28,28,17,28,28,17,28,17,28,28,17,28,17,17,28,28,17,32,17,28,17,17,28,28,28,28,17,28,17,28,17,17,28,17,28,28,17,28,17,17,28,17,17,28,28,28,17,28,17,28,17,28,17,
+17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,28,17,17,18,17,17,28,17,17,28,28,17,28,17,29,17,18,28,17,17,28,28,17,17,28,17,17,17,18,28,17,17,28,28,28,17,28,17,28,17,17,28,17,28,28,17,17,17,28,17,28,17,17,28,17,28,17,28,17,28,17,28,28,17,17,28,17,28,17,17,17,28,28,17,28,28,17,17,28,17,17,28,17,28,17,28,17,17,28,17,28,17,28,17,28,28,17,28,17,28,17,28,28,17,17,28,17,28,28,17,17,28,17,28,17,17,28,17,28,17,28,28,28,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,17,28,17,28,17,28,28,17,28,28,17,17,28,17,17,17,32,17,17,28,28,17,28,17,28,17,28,17,17,17,28,17,28,17,17,28,17,28,17,17,17,28,17,17,28,17,28,17,28,17,28,28,17,28,17,28,17,17,28,17,32,17,17,17,28,17,17,28,17,28,17,28,17,28,28,28,17,17,28,17,28,17,28,28,17,17,17,28,28,17,28,17,28,17,28,17,17,17,17,28,17,17,28,28,17,17,17,17,17,17,17,28,17,28,
+17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,18,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,28,28,18,17,18,17,17,17,28,29,17,17,17,28,17,17,17,28,17,28,17,17,28,17,17,28,17,17,28,17,17,17,28,17,28,28,28,17,17,28,17,28,17,28,17,28,17,28,28,17,28,28,28,17,17,28,28,17,28,17,28,17,28,28,17,28,17,28,17,28,28,17,28,28,17,28,28,28,17,28,28,28,17,28,17,28,28,28,17,28,17,17,17,17,28,28,17,28,28,17,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,17,28,28,28,28,17,28,28,17,28,17,17,28,17,28,28,28,28,17,28,28,17,28,28,28,17,28,17,17,28,28,17,17,28,17,28,28,17,17,28,17,28,28,17,28,28,17,17,28,17,17,28,17,17,17,28,17,28,28,28,17,28,17,28,28,17,28,17,28,17,28,17,28,28,17,17,17,17,28,28,17,28,17,28,17,17,28,28,28,17,17,28,28,17,28,28,17,28,28,17,28,17,28,28,17,17,28,17,28,17,28,17,17,28,17,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,29,17,17,17,17,17,17,17,17,18,17,17,17,17,29,17,17,17,17,28,28,17,28,17,17,17,17,17,17,17,17,17,28,29,17,17,17,17,17,17,28,17,28,17,28,28,28,28,28,17,28,17,28,28,17,17,17,28,17,28,17,17,17,17,28,17,28,28,17,28,17,28,17,17,17,17,28,17,17,17,28,17,17,17,17,17,28,17,28,17,17,28,17,28,17,28,17,28,28,17,28,28,17,17,28,28,17,28,17,28,17,28,17,17,17,28,28,28,17,28,17,17,17,28,17,28,28,17,28,28,17,28,17,28,28,28,17,28,17,28,17,28,17,28,17,28,17,28,17,17,17,28,17,28,17,28,28,17,28,17,28,17,17,17,28,17,17,28,17,17,17,17,28,17,28,17,17,28,28,17,28,17,17,17,28,17,17,17,17,28,17,17,17,28,17,17,28,28,17,28,17,28,17,28,17,17,28,28,17,28,17,17,28,17,28,17,28,17,28,17,28,28,28,28,17,17,17,28,17,17,28,28,29,17,17,28,28,28,17,17,28,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,12,17,17,17,17,17,17,17,13,28,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,18,17,28,28,17,28,28,28,17,28,17,28,17,17,28,28,17,17,17,29,17,17,17,17,17,28,28,28,17,28,17,17,28,28,17,28,17,17,17,28,17,28,28,28,17,17,28,28,28,28,17,28,17,28,28,17,17,28,28,17,28,28,17,28,17,17,28,28,28,17,28,17,28,17,28,17,28,28,28,17,17,17,28,17,28,17,28,17,17,28,17,17,28,17,28,17,28,17,17,17,28,17,28,17,28,17,28,17,28,17,28,17,28,28,17,28,28,28,17,28,17,28,17,17,17,28,17,28,17,28,28,17,17,17,17,28,17,17,17,17,17,17,17,28,17,17,17,28,17,28,17,28,17,17,17,17,17,28,17,28,17,17,28,17,28,17,28,28,17,28,17,17,17,17,28,28,17,17,28,17,17,28,17,17,17,17,17,17,28,17,28,17,28,17,28,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,28,17,17,17,28,17,28,17,17,28,17,17,17,28,17,17,18,17,17,17,18,17,17,17,17,17,28,28,17,17,28,28,28,17,17,17,17,17,17,17,17,28,17,28,17,17,17,28,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,28,17,17,17,17,28,17,28,28,28,17,17,28,17,28,17,17,28,17,17,28,28,28,17,28,17,28,17,28,17,28,17,17,17,17,28,28,28,17,17,17,17,28,17,28,17,17,28,17,17,17,28,17,28,28,28,17,17,28,17,28,17,28,17,28,17,28,17,17,28,17,17,17,17,17,17,17,28,17,28,17,28,28,17,28,17,17,28,17,17,17,17,17,17,17,17,28,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,28,17,17,28,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,28,17,28,17,28,17,17,17,17,17,28,17,17,28,28,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,17,18,17,17,17,28,28,13,17,17,28,28,17,17,28,17,17,17,17,17,17,17,17,28,17,17,28,17,17,28,28,17,18,17,17,17,28,17,17,17,28,17,17,28,17,28,28,17,17,28,17,28,28,17,17,17,28,28,28,28,28,28,28,17,17,28,17,17,17,17,28,28,17,17,28,28,17,28,28,28,17,17,17,28,17,17,17,28,28,28,17,28,17,28,17,17,28,28,17,17,17,17,17,17,17,17,28,17,28,28,28,17,28,17,28,17,28,28,17,17,28,28,17,28,17,17,17,28,17,28,17,28,28,17,28,28,17,17,17,28,17,17,17,28,17,28,17,28,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,28,17,28,28,28,28,17,17,28,17,28,28,17,17,28,17,17,28,17,17,17,17,17,28,17,17,17,17,28,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,
+17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,28,13,17,17,17,17,17,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,18,17,17,17,17,17,28,17,29,17,17,17,17,17,28,28,17,17,28,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,28,17,28,17,28,17,17,17,17,17,17,17,28,17,17,28,17,17,17,28,28,28,17,17,17,28,17,17,28,17,17,17,28,28,28,17,28,17,28,13,17,17,17,28,17,28,28,28,28,17,28,17,17,17,17,17,28,28,17,17,17,17,28,17,28,13,17,17,28,17,28,17,28,17,17,28,17,28,17,17,28,17,28,17,17,28,17,17,17,17,17,28,17,17,17,17,17,17,17,17,28,28,17,28,17,17,17,28,28,17,17,17,17,28,17,17,17,28,17,28,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,
+17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,28,17,17,17,17,17,13,28,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,28,28,17,17,28,17,17,17,17,17,17,17,17,18,17,17,17,17,17,13,17,17,17,28,17,17,17,17,28,17,17,17,28,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,28,28,17,17,17,17,17,28,17,17,17,28,28,28,28,17,17,17,13,17,28,28,28,17,17,17,17,13,28,17,17,28,17,28,17,17,17,17,17,28,17,28,28,17,28,17,28,17,17,28,17,28,17,17,28,17,17,28,17,17,17,17,17,28,17,17,28,28,28,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,13,28,17,17,17,13,17,17,17,17,17,18,17,28,28,17,28,17,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,17,28,17,17,17,17,17,28,28,17,17,28,17,17,28,28,17,17,17,17,17,17,17,17,28,17,17,28,17,17,28,17,17,28,17,17,17,28,17,17,28,17,17,17,28,17,28,17,28,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,28,28,17,28,17,28,17,28,17,17,28,17,28,17,17,28,17,28,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,13,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,28,13,17,18,17,18,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,28,17,17,28,17,17,17,17,17,17,17,28,28,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,28,17,17,17,28,17,17,28,17,28,17,28,17,17,28,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,10,17,12,17,10,17,17,17,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,13,17,17,17,17,17,17,17,17,28,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,13,17,17,17,17,17,17,17,17,18,17,17,28,17,17,28,28,17,17,17,17,17,28,17,17,28,28,17,17,17,17,17,28,29,17,17,17,17,17,17,28,28,28,17,17,28,17,17,17,28,17,17,17,17,17,17,17,17,17,28,13,17,17,28,17,17,17,28,28,17,28,17,28,28,17,17,28,28,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,10,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,17,17,10,17,17,12,17,10,
+17,12,17,17,12,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,28,17,17,17,17,17,17,17,17,28,17,17,17,18,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,17,17,17,29,17,28,17,17,17,17,17,17,28,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,28,17,28,17,17,28,28,28,17,28,17,17,17,17,17,17,28,17,28,17,17,17,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,13,28,17,17,13,28,17,28,17,28,17,13,28,17,28,28,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,10,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,12,17,17,17,17,17,17,12,17,12,17,12,17,17,12,17,17,17,17,17,10,17,12,17,17,17,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,28,17,17,13,17,17,18,17,17,17,17,17,17,17,17,17,17,17,18,17,28,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,13,28,17,17,17,17,17,17,17,17,29,17,17,13,17,17,28,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,28,17,17,17,17,28,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,10,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,12,17,12,10,17,17,12,17,10,17,17,17,12,17,
+17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,17,17,17,17,28,17,28,17,29,17,17,17,29,17,17,17,17,29,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,10,17,17,17,17,17,17,17,17,10,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,13,17,17,17,28,13,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,28,17,17,17,17,17,17,28,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,17,10,17,10,17,10,10,17,17,17,
+17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,28,17,17,17,17,28,17,28,17,17,17,17,13,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,12,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,10,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,17,12,17,10,17,17,12,17,17,12,17,17,17,17,17,17,17,17,12,17,17,10,17,17,17,17,10,17,17,17,17,12,17,17,17,12,17,17,17,17,12,17,10,17,17,12,17,17,10,10,
+17,17,10,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,10,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,28,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,13,17,17,17,17,13,28,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,12,17,12,17,17,17,12,17,17,17,17,17,17,12,17,10,17,17,17,12,17,17,12,17,17,12,17,17,12,17,10,17,17,12,17,17,10,17,12,17,17,12,10,17,17,17,17,17,17,12,17,12,17,17,17,17,12,17,10,17,10,17,12,17,17,17,10,17,10,17,17,10,17,12,10,17,17,10,17,17,
+10,17,17,12,17,17,10,10,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,12,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,10,12,17,12,17,17,17,12,17,17,17,17,12,17,17,12,17,17,12,17,17,12,17,17,10,17,17,12,17,17,17,10,17,17,17,17,12,17,17,10,17,17,17,17,17,17,12,10,17,17,17,12,17,17,17,17,12,17,17,12,17,10,17,12,17,17,10,17,10,17,10,10,
+17,10,17,10,17,10,17,17,10,17,17,17,12,17,17,17,10,17,17,12,17,17,17,17,17,17,17,12,17,17,17,10,17,17,10,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,12,12,17,17,17,17,17,17,17,17,17,12,17,10,17,17,17,17,17,17,17,12,17,12,17,17,17,12,17,17,17,12,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,12,17,17,17,17,17,17,12,17,17,17,17,17,17,17,10,17,17,17,12,17,17,17,17,17,10,17,17,17,17,12,17,17,17,17,17,17,17,17,17,17,12,17,17,10,17,12,17,10,10,12,17,10,12,17,17,12,17,17,10,17,17,12,17,12,17,17,10,17,17,17,12,17,10,17,17,10,17,17,12,17,17,17,17,17,17,10,17,17,10,10,17,10,17,
+17,10,10,17,17,17,10,11,17,10,17,10,17,17,17,17,12,17,17,17,17,12,17,10,17,12,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,12,17,17,10,17,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,12,17,17,12,17,17,17,12,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,12,17,12,17,17,12,17,17,17,17,12,17,17,17,12,17,17,12,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,12,17,12,17,12,17,17,10,17,17,12,10,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,12,17,17,12,17,17,17,12,17,17,12,17,17,12,17,12,17,17,17,17,12,17,17,17,17,17,12,10,17,10,17,12,17,12,17,17,17,17,12,17,17,12,17,12,17,10,17,17,17,17,12,17,17,12,17,17,17,17,17,10,12,17,17,17,17,12,17,10,17,17,17,17,17,12,17,12,17,10,17,10,17,12,17,10,17,10,17,17,12,10,17,17,10,10,17,17,17,10,11,
+10,10,17,10,17,10,17,17,11,17,17,17,10,17,17,12,17,17,12,17,10,17,17,17,10,17,17,10,17,10,17,12,17,17,17,12,10,17,17,17,10,17,12,17,17,12,17,17,17,17,17,12,17,12,17,17,12,10,17,10,17,17,17,17,17,17,12,17,17,12,17,17,12,17,12,17,17,17,12,17,17,17,12,10,17,17,12,17,10,17,17,17,12,17,17,17,17,17,17,12,17,17,17,12,17,17,17,12,17,17,12,10,17,17,17,17,12,17,17,12,17,12,17,17,17,17,17,17,12,17,12,17,12,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,17,12,17,12,17,17,17,12,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,12,17,10,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,12,17,17,17,17,17,12,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,17,12,17,17,17,17,17,17,17,17,12,17,17,10,17,17,17,12,17,17,10,17,17,12,17,10,17,17,12,10,17,17,17,17,12,17,17,17,12,17,17,17,10,17,12,10,10,11,17,17,17,10,17,12,17,17,17,10,10,17,12,10,17,10,17,17,12,10,17,10,17,10,17,17,10,10,10,17,10,10,17,10,17,17,10,10,17,10,
+17,17,10,17,10,10,10,10,10,17,10,10,17,12,17,10,17,17,10,17,10,17,10,12,17,17,10,17,10,17,17,17,17,12,17,17,12,17,17,12,17,17,17,12,17,17,17,17,12,17,10,17,17,17,17,12,17,17,10,17,10,17,10,17,12,17,17,10,17,17,12,17,10,17,17,17,17,17,17,17,12,10,17,17,10,17,17,12,17,10,12,17,17,12,17,17,12,17,12,17,17,12,17,17,17,17,12,17,17,17,17,12,17,17,12,17,17,17,17,17,17,12,17,17,17,17,12,17,17,17,17,17,17,17,12,17,12,17,17,12,17,17,12,17,12,17,17,17,12,17,12,17,17,17,17,12,10,12,17,10,17,12,17,12,17,10,12,17,12,17,17,17,17,17,10,17,12,17,17,17,12,10,17,17,12,17,12,17,12,17,17,17,12,17,17,12,17,17,12,17,17,12,17,17,17,12,17,17,17,17,17,12,17,17,17,17,10,17,17,17,10,17,10,17,17,17,17,10,12,17,17,10,17,12,10,17,10,17,10,12,17,12,17,17,10,12,10,17,17,10,12,10,17,12,17,12,17,10,10,10,17,12,17,10,10,17,10,17,10,17,12,17,17,17,10,17,10,17,12,17,17,10,12,17,10,10,17,10,17,12,17,10,12,17,17,17,10,17,17,17,10,17,11,10,10,17,10,10,
+10,17,17,10,17,17,17,10,17,10,17,10,17,17,17,10,10,10,17,10,17,10,17,11,10,17,17,10,17,12,17,12,17,17,10,17,17,12,17,10,17,12,17,17,10,17,17,10,17,10,10,12,17,10,17,17,10,10,17,11,10,17,10,17,17,10,17,17,12,17,17,17,17,12,17,17,10,17,12,17,17,10,12,17,12,10,12,17,17,17,17,12,17,17,12,17,17,17,10,10,17,17,10,12,17,17,17,10,17,10,17,17,10,17,17,10,10,12,17,17,12,17,10,17,12,17,17,12,17,17,12,17,17,17,17,17,17,17,17,17,17,17,17,17,17,10,12,17,17,17,17,17,10,12,17,17,17,17,10,17,17,17,10,17,10,10,17,10,17,10,10,12,17,10,17,10,17,12,17,17,17,12,17,12,17,17,17,17,17,17,12,12,17,17,17,17,12,17,17,17,12,17,12,17,12,17,12,17,10,12,17,17,12,12,12,17,12,10,17,17,17,12,17,12,17,12,17,17,17,10,17,17,17,17,17,10,12,17,17,10,17,17,10,17,17,10,17,17,10,17,10,17,12,17,10,17,10,12,17,10,10,17,11,17,11,10,17,10,10,10,17,10,12,17,10,17,12,17,10,10,17,17,10,17,17,17,10,17,10,17,10,17,10,10,10,10,17,10,10,17,10,17,10,17,17,10,17,10,
+10,11,17,10,11,10,11,17,10,10,17,11,10,10,17,10,17,17,10,17,17,10,10,17,17,11,17,10,10,17,17,17,11,10,11,10,11,17,17,10,10,17,10,10,10,10,11,17,10,17,17,17,10,17,17,11,17,17,10,17,17,10,17,17,10,17,10,11,17,17,10,17,10,17,17,12,17,10,17,17,10,17,10,11,17,17,17,12,17,17,12,17,12,10,17,10,10,10,17,12,17,10,17,10,17,17,12,17,12,17,10,17,12,17,10,12,17,17,17,12,17,10,17,12,10,17,17,17,12,17,17,17,12,17,10,17,12,17,12,10,12,17,17,17,12,17,17,10,12,17,12,10,17,17,10,17,10,10,17,10,10,10,10,17,12,17,10,10,11,12,17,17,17,17,12,10,17,17,17,17,10,17,17,17,12,17,17,12,17,12,17,17,12,12,10,17,17,12,17,12,17,17,10,17,12,12,17,12,17,17,17,12,17,17,17,17,17,17,12,10,17,17,10,17,10,17,17,12,10,17,12,10,10,10,11,17,10,17,12,10,10,17,10,12,17,17,17,12,17,17,10,11,17,10,17,12,10,17,17,12,17,17,10,10,10,17,10,10,17,12,10,17,17,10,10,17,10,10,17,17,10,10,17,10,17,10,10,10,10,10,10,17,17,17,10,17,10,10,17,10,17,10,17,10,17,10,10,10,
+10,10,11,10,10,17,17,10,11,17,10,10,10,17,11,10,17,10,17,17,10,17,17,10,10,10,11,10,17,10,17,10,10,17,10,17,17,10,11,17,10,17,10,17,17,17,10,10,17,17,10,10,17,17,10,10,17,10,17,10,11,10,17,10,17,10,17,10,17,12,10,12,10,17,10,17,10,17,10,11,10,12,17,10,11,10,11,17,12,10,17,17,10,10,17,12,17,17,17,10,12,10,12,10,10,11,17,12,17,12,11,17,17,10,10,17,17,12,10,17,12,12,10,17,12,17,17,12,17,17,12,17,17,12,17,17,17,17,17,10,17,17,12,10,17,17,10,10,17,10,17,12,17,12,17,12,10,17,12,10,17,17,12,17,10,10,11,17,10,11,17,10,17,10,17,17,12,17,12,10,17,12,17,10,17,17,12,17,17,17,17,12,17,17,12,10,10,17,17,17,17,17,12,17,17,17,17,17,17,12,17,17,17,12,12,17,10,10,17,17,12,17,12,17,10,17,12,10,17,10,17,17,17,10,17,10,17,10,17,17,17,10,10,17,10,17,10,17,17,10,10,10,12,17,10,11,17,10,10,17,10,10,17,10,12,17,10,10,17,10,17,12,17,10,17,17,10,10,17,11,10,17,10,10,17,10,11,17,10,10,17,10,10,10,11,10,10,17,11,17,10,10,17,10,10,11,17,17,
+10,17,10,17,17,10,10,11,10,10,11,17,11,10,10,17,10,10,10,10,17,11,11,10,17,17,10,17,10,17,10,17,10,17,10,10,10,17,10,17,11,10,17,10,10,11,10,17,11,10,17,10,11,10,17,17,17,10,10,17,10,17,17,10,17,10,10,17,10,17,17,11,17,10,17,10,17,10,17,10,17,17,10,10,17,11,17,10,17,12,17,10,12,17,10,17,10,12,10,17,17,17,10,17,10,11,10,17,17,10,10,17,10,17,12,17,10,17,17,10,17,10,10,17,10,10,17,12,17,10,17,10,10,17,10,12,17,10,12,17,10,17,17,17,10,10,17,12,17,10,17,17,17,17,12,17,17,10,17,17,10,17,10,17,11,10,10,11,10,12,11,10,12,10,12,17,10,10,17,12,10,17,12,17,12,17,17,10,17,10,17,17,12,17,17,10,12,17,10,17,12,10,17,12,10,17,10,12,17,17,12,17,17,17,17,10,12,17,11,10,17,10,17,10,12,17,17,10,17,11,10,10,10,17,10,17,10,11,17,11,10,17,11,10,10,12,17,11,10,17,12,17,10,10,17,10,17,17,11,10,17,10,10,17,11,12,17,10,17,11,17,10,10,11,17,10,17,11,10,10,17,11,17,10,10,17,10,10,11,11,11,10,17,17,10,17,11,10,10,10,17,10,11,10,11,10,11,10,
+17,11,10,10,10,17,10,10,17,10,10,10,17,11,10,11,10,17,11,10,17,10,17,10,11,10,17,10,10,11,10,10,17,10,17,10,17,10,17,17,10,11,10,17,10,17,11,10,10,17,11,17,10,11,10,11,11,17,11,11,17,10,17,10,17,10,17,11,17,11,10,10,11,10,10,17,12,17,10,17,12,17,10,11,10,10,17,11,11,17,10,10,11,10,17,12,17,11,10,12,17,10,12,11,17,10,12,10,17,17,10,10,17,12,17,10,10,10,12,17,10,17,17,12,17,12,17,11,10,12,17,17,10,12,17,10,17,17,17,17,12,10,17,10,17,12,17,10,17,12,17,10,10,17,17,10,12,17,10,10,10,12,10,17,10,17,12,10,17,10,17,10,17,10,17,10,17,17,11,10,10,10,17,10,17,10,12,17,17,12,17,10,17,17,10,10,17,10,17,12,17,10,17,17,12,17,17,17,10,12,17,10,10,10,17,17,17,10,10,17,10,10,10,17,10,10,10,10,17,10,17,10,17,10,17,11,17,10,11,10,11,10,10,17,11,10,17,10,10,17,10,10,17,10,10,17,11,10,17,11,10,17,11,10,17,10,10,17,11,10,17,10,17,10,10,11,11,10,11,10,10,10,10,10,17,10,11,10,10,10,17,10,10,11,10,11,10,17,11,10,10,17,10,17,10,17,10,10,
+10,10,11,17,10,10,17,10,11,10,11,11,10,10,17,10,10,11,10,17,11,10,11,11,10,11,10,11,10,17,10,17,10,10,11,11,17,10,11,10,17,10,10,11,10,17,10,11,17,11,10,10,10,17,10,10,10,11,10,17,10,10,11,17,10,11,17,10,10,10,17,10,17,11,17,12,17,10,11,10,17,11,17,11,10,11,10,10,10,10,17,10,17,10,17,10,17,10,17,10,11,10,11,10,10,12,10,17,12,10,17,10,10,11,17,10,17,12,10,17,12,10,12,10,11,17,10,17,10,11,10,12,17,10,10,17,12,10,12,10,10,17,12,17,10,17,17,10,11,10,17,12,17,10,10,17,10,10,17,10,17,10,17,12,10,10,11,10,11,10,11,10,10,10,10,11,11,11,10,17,10,12,17,12,10,17,17,17,12,10,11,17,12,10,17,12,17,10,12,10,10,12,11,10,17,10,10,10,17,10,11,17,12,17,12,10,10,11,12,10,10,12,17,10,17,12,17,10,11,10,17,10,10,10,11,10,11,10,10,10,10,11,10,17,10,11,17,11,10,10,10,17,10,11,17,10,10,11,10,10,11,10,10,11,10,11,10,11,17,10,10,17,10,11,10,10,11,10,11,11,10,17,10,11,10,17,10,11,10,17,10,10,17,10,10,17,10,11,10,11,17,10,10,10,11,10,10,11,
+10,17,10,11,10,11,10,11,10,11,10,10,10,11,10,10,17,10,10,11,10,10,10,10,10,10,17,10,11,10,11,10,11,17,10,10,11,10,10,10,11,10,17,10,17,10,11,10,10,10,11,10,17,10,17,10,11,10,10,10,10,17,10,10,11,10,10,11,10,17,10,17,10,10,10,10,11,10,11,10,11,10,10,10,11,10,11,17,10,11,10,11,10,11,10,11,10,10,11,11,10,17,10,10,11,10,11,17,10,17,10,12,17,10,10,17,11,10,11,10,11,10,11,17,10,10,10,11,10,11,10,17,10,11,17,10,17,10,17,17,17,10,11,10,17,10,11,17,10,10,17,10,10,11,17,10,10,17,10,12,10,10,17,10,10,11,10,10,10,11,10,17,10,17,17,10,10,10,12,11,12,10,11,17,12,17,10,10,10,17,10,17,10,17,10,10,11,17,10,11,17,10,10,10,12,10,11,17,10,17,10,11,10,11,10,17,10,11,10,17,10,11,10,11,10,10,11,10,11,10,10,11,11,17,10,10,10,11,10,17,17,10,11,10,17,10,10,10,17,10,11,17,10,10,10,10,11,10,11,17,10,11,17,10,10,10,10,10,11,10,10,11,10,10,11,11,10,10,10,10,11,10,17,10,11,10,10,10,10,11,10,11,10,17,10,11,10,17,10,10,10,10,11,11,10,10,17,10,
+10,11,11,10,10,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,17,10,11,10,11,11,11,10,11,10,10,10,17,11,10,11,10,17,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,10,11,10,11,10,11,10,11,10,17,11,10,10,11,10,11,10,17,10,11,17,11,11,10,11,10,10,10,11,10,11,10,11,10,11,11,10,10,10,11,10,10,10,10,11,10,10,10,11,11,11,10,10,11,10,17,10,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,12,17,11,10,10,17,11,10,17,10,11,11,17,10,10,11,10,10,10,11,10,10,11,10,17,11,17,10,11,10,17,11,17,10,10,17,11,10,11,10,10,11,10,11,10,10,11,10,11,10,17,10,11,10,10,10,11,10,10,17,10,17,10,11,11,10,10,10,11,10,11,10,12,10,11,11,10,12,17,11,10,12,10,10,12,17,10,12,10,11,10,11,10,10,10,17,10,11,10,11,11,10,17,10,11,10,11,10,11,10,17,11,10,10,11,10,10,17,11,10,11,17,11,10,17,10,11,10,17,11,17,10,17,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,11,11,17,10,10,10,11,11,10,10,11,10,11,10,11,10,17,10,11,10,11,10,10,17,11,10,10,10,10,10,11,10,
+10,10,10,11,10,11,10,11,10,17,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,10,11,10,11,11,10,10,11,10,11,10,10,11,10,10,17,11,10,11,11,10,11,10,11,10,11,10,10,11,11,11,10,11,11,10,11,10,11,11,11,10,10,10,17,11,10,17,11,10,10,10,11,10,11,10,17,11,10,10,11,10,10,11,10,11,10,10,11,11,10,10,11,10,11,10,10,11,10,11,10,17,11,10,11,10,11,10,10,11,10,10,11,10,11,11,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,10,10,11,11,10,10,11,10,11,10,10,17,10,10,10,11,10,10,17,10,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,17,10,17,10,11,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,10,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,10,11,10,10,11,10,11,10,10,10,11,10,10,11,10,10,10,10,10,11,10,11,10,11,10,11,10,11,10,10,10,11,10,10,
+10,11,10,10,10,10,11,10,11,10,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,11,11,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,11,10,10,11,10,10,10,11,10,10,11,11,10,10,11,10,10,11,10,10,11,11,11,10,10,11,10,11,10,11,10,10,11,10,10,11,11,10,10,11,10,11,10,10,10,10,11,10,11,10,10,11,10,4,10,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,10,11,10,11,10,11,10,11,10,11,10,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,11,11,10,10,11,10,10,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,10,11,17,10,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,12,10,11,10,10,11,10,10,11,10,17,10,11,10,10,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,10,11,10,11,10,11,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,10,10,10,11,10,10,10,11,10,10,11,10,11,10,10,10,10,11,10,11,10,10,11,10,11,10,11,11,10,10,11,10,10,10,10,10,10,10,10,11,10,10,10,11,
+10,10,11,10,11,10,10,10,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,11,10,10,10,4,11,10,10,10,4,10,10,10,10,10,11,11,10,10,10,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,11,10,10,10,4,11,10,10,10,11,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,11,11,10,10,11,10,11,10,11,10,11,10,10,11,10,11,10,10,10,11,10,10,11,10,11,10,11,10,10,11,10,11,10,10,11,10,11,10,10,10,10,11,10,11,10,11,10,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,10,11,10,10,10,11,10,10,10,10,11,10,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,17,10,10,11,10,11,10,11,10,10,11,10,10,11,10,11,10,4,11,10,10,11,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,10,11,10,11,10,10,10,10,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,10,
+10,11,10,11,10,11,10,10,11,10,11,10,10,11,10,11,4,10,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,10,10,11,10,11,10,10,4,11,10,10,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,10,10,11,4,11,10,10,11,10,11,4,10,10,11,10,11,10,10,11,10,11,10,10,11,10,10,11,10,4,10,10,4,10,11,10,10,11,10,10,10,11,11,10,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,11,10,11,10,11,11,10,10,10,11,10,11,10,11,10,11,10,11,10,10,11,10,10,11,10,10,11,10,11,4,10,10,10,11,10,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,10,10,10,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,10,4,10,10,10,11,4,10,11,10,
+11,10,10,10,10,10,10,11,4,10,10,11,10,10,10,10,10,11,10,10,11,10,10,11,10,10,11,10,10,10,10,10,10,11,10,4,10,11,10,11,10,10,10,10,11,10,11,10,11,10,11,10,10,11,10,10,10,11,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,10,11,10,10,11,10,10,11,10,10,11,10,11,10,10,4,10,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,11,10,10,11,10,10,11,10,10,10,10,10,11,10,10,10,10,10,11,10,4,10,11,10,10,11,10,10,10,11,10,10,11,10,10,10,11,10,11,10,10,10,11,10,10,10,11,10,10,11,11,10,10,11,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,10,10,10,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,10,10,10,10,11,10,10,10,10,11,10,10,11,10,10,11,10,10,10,
+10,10,11,10,11,10,10,10,10,10,11,10,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,11,11,11,11,10,11,10,4,10,11,10,11,10,11,10,11,10,10,10,10,11,10,10,10,10,4,10,10,10,11,10,10,10,11,10,11,10,10,10,10,10,10,11,10,10,10,11,10,10,11,4,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,11,10,10,10,11,4,10,10,10,11,10,11,10,11,10,11,10,10,10,11,10,10,10,10,11,10,11,10,10,11,10,10,11,10,11,10,10,11,11,10,11,10,11,10,11,10,11,10,11,10,11,4,11,10,11,10,10,11,10,10,11,10,10,11,10,10,11,10,10,10,10,10,11,10,11,10,11,10,11,10,11,4,10,10,11,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,11,10,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,10,11,10,10,10,10,11,10,10,11,10,10,10,10,11,10,10,10,10,11,4,11,10,11,10,10,10,11,10,11,10,11,10,11,10,11,10,4,11,10,11,10,10,10,10,10,10,10,11,10,10,
+10,10,11,10,10,10,11,10,10,11,10,10,10,10,11,10,10,11,10,10,11,10,10,11,10,4,10,10,4,10,10,4,11,10,10,11,10,10,10,10,10,4,10,4,10,11,10,10,10,11,4,11,10,11,10,11,10,10,11,10,10,10,10,4,11,10,11,4,11,10,11,10,11,4,11,10,10,11,10,4,10,10,11,10,11,10,4,11,10,11,10,10,4,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,10,11,10,11,10,10,11,10,10,11,10,11,10,11,10,10,10,11,10,11,10,10,10,11,10,10,11,10,11,10,10,4,11,10,11,4,10,11,10,10,10,11,10,11,10,11,10,10,10,11,10,11,10,11,10,10,10,10,11,10,11,10,10,10,11,10,10,11,10,10,11,10,10,11,11,10,10,11,10,11,10,10,11,10,11,10,11,10,11,10,10,11,10,11,10,10,10,10,11,10,11,10,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,11,10,10,11,10,11,10,11,10,11,10,10,10,10,11,10,11,4,10,11,10,10,11,10,10,11,10,11,10,11,10,4,11,10,10,10,10,10,11,10,11,10,11,10,10,11,10,10,11,11,10,11,10,11,10,10,11,10,11,10,11,10,10,11,10,
+10,10,10,10,11,10,4,10,11,10,10,10,11,4,10,10,11,10,10,10,10,10,11,4,10,10,11,10,10,11,10,10,10,4,11,4,10,10,4,11,10,11,10,11,10,10,10,11,4,10,10,10,10,10,10,4,11,10,4,10,11,4,10,11,10,10,10,11,10,4,10,11,10,10,10,11,10,10,10,11,10,11,10,11,4,10,11,10,10,4,11,10,10,11,10,11,4,10,10,4,10,11,10,4,10,10,10,10,11,11,10,10,4,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,11,10,10,11,10,10,11,10,10,11,10,4,10,11,10,10,10,10,10,11,11,10,10,11,10,4,10,10,10,11,10,10,10,11,10,10,11,10,11,10,10,4,10,4,11,10,11,10,10,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,11,10,11,10,10,11,10,4,10,10,11,10,10,4,10,11,10,11,10,10,10,10,10,10,11,10,11,10,10,11,10,11,10,10,10,10,10,11,4,10,10,10,11,10,4,11,10,4,11,10,10,10,11,10,10,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,11,10,10,11,10,10,10,10,11,10,10,11,10,10,11,4,10,11,10,10,10,11,10,11,10,10,10,10,10,4,10,11,10,4,10,10,11,10,10,10,10,10,
+10,11,10,4,10,10,10,11,4,10,10,11,10,10,10,4,10,10,11,10,10,11,10,10,11,10,10,10,10,10,4,11,10,10,10,11,10,10,11,10,4,10,10,4,10,11,4,10,10,10,10,11,10,11,4,10,10,10,11,10,10,10,11,10,10,11,10,10,11,10,10,10,4,11,10,4,10,10,11,10,10,10,10,10,10,10,10,11,10,10,10,11,10,10,10,10,11,10,11,10,10,4,11,10,10,11,10,10,10,10,10,11,10,10,11,10,10,11,10,10,11,10,11,10,10,11,10,11,4,10,10,10,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,10,11,10,10,11,10,10,4,11,10,4,11,10,10,10,10,10,11,10,10,10,11,10,10,10,11,10,11,10,11,10,10,11,11,10,10,4,11,10,10,11,10,10,11,10,10,10,11,10,10,11,10,11,10,10,10,11,10,11,10,10,10,10,11,10,11,10,11,10,10,4,11,10,10,11,10,10,11,11,10,10,10,11,10,10,11,10,10,11,10,10,11,10,10,11,10,4,11,10,10,10,11,10,10,11,10,10,11,4,11,10,10,11,4,10,11,4,10,10,4,11,10,11,10,11,10,10,4,11,10,10,11,10,11,10,10,11,10,11,10,10,10,11,4,10,11,10,11,10,10,10,11,10,10,4,10,11,10,10,4,
+10,10,4,11,10,4,11,10,10,11,10,10,10,11,10,11,10,4,10,10,11,4,10,10,10,4,11,4,10,11,10,10,4,10,11,4,10,4,10,10,11,10,11,10,10,10,11,4,10,4,11,10,10,4,11,4,10,10,10,4,11,10,10,10,10,10,4,11,10,4,11,10,10,10,10,11,10,11,4,11,10,11,10,11,10,11,10,4,11,10,11,10,4,11,10,4,10,11,10,4,11,10,10,11,10,10,11,10,4,11,10,10,10,11,4,11,10,4,10,11,10,4,10,11,10,10,10,10,11,10,10,11,4,11,10,10,11,4,10,11,10,10,10,4,11,10,11,10,10,4,11,10,4,10,10,11,10,10,11,10,4,11,10,11,4,10,10,4,11,10,10,11,10,10,4,10,10,10,11,10,10,4,11,10,11,10,11,10,4,10,11,4,11,10,10,10,11,10,4,10,10,4,11,10,4,10,10,11,10,4,11,10,11,10,10,10,11,10,11,10,10,11,10,11,10,10,4,11,10,10,10,4,11,10,11,10,10,11,10,10,10,11,10,10,11,10,10,11,10,10,11,10,4,11,10,10,10,10,11,10,10,11,10,4,10,11,10,10,10,10,4,10,10,10,11,10,10,10,11,10,10,10,11,4,10,10,4,11,10,4,10,11,10,10,10,10,11,10,11,10,10,11,10,10,10,4,11,10,
+10,10,10,10,11,10,10,10,10,10,11,10,10,10,4,10,10,10,11,4,10,10,11,4,10,10,10,11,4,10,4,10,11,10,4,10,11,10,11,10,4,10,4,11,10,4,10,11,10,10,10,10,11,10,10,11,10,4,11,10,10,11,4,10,11,10,11,10,4,10,10,10,10,11,10,10,4,10,10,10,10,10,4,10,4,10,10,11,10,10,4,11,10,10,10,10,11,4,10,10,4,10,10,4,11,10,10,11,10,10,4,11,10,10,10,10,11,10,10,10,10,10,11,10,11,10,10,11,10,11,4,10,10,10,11,10,10,10,10,10,11,10,11,10,10,10,4,11,10,10,10,11,10,11,10,10,10,10,10,4,11,10,4,10,10,10,11,10,10,4,11,10,10,11,10,10,4,11,10,11,10,10,10,4,10,10,4,11,10,11,10,10,10,11,10,11,10,11,10,10,11,10,10,10,11,10,10,4,10,10,10,10,10,4,11,10,10,4,10,11,4,10,10,4,11,10,10,10,4,11,10,10,10,4,10,10,10,10,4,11,10,10,10,11,10,11,10,10,10,4,11,10,10,10,11,4,11,10,4,10,10,10,10,10,11,10,10,11,4,11,10,11,10,10,4,11,10,11,10,4,11,10,10,10,11,10,10,10,11,10,11,10,11,4,11,10,10,10,10,11,4,10,10,11,4,10,10,11,
+4,10,11,4,10,10,11,4,11,10,10,4,11,10,10,10,11,10,4,10,11,10,4,11,10,11,10,4,10,10,11,10,4,10,11,10,4,10,4,10,11,10,10,4,10,11,4,10,10,11,4,10,4,11,4,10,10,10,10,10,4,10,11,10,4,10,10,10,11,10,4,11,10,10,4,11,10,4,11,10,11,4,10,11,10,11,10,10,4,11,10,10,10,4,11,10,4,10,11,4,10,11,4,10,4,10,4,10,10,10,11,10,10,4,11,10,10,10,11,4,11,10,4,10,10,11,4,10,10,10,10,10,11,4,10,10,11,10,11,4,10,10,10,4,11,10,10,10,10,11,10,4,10,10,10,10,11,4,11,10,10,10,10,4,11,10,4,10,11,10,10,4,10,10,11,10,11,10,4,10,4,11,10,10,11,10,10,10,10,10,10,11,10,4,11,10,10,4,10,11,10,10,11,4,10,11,10,11,10,11,4,10,11,10,10,11,10,11,10,10,10,10,11,10,10,11,10,10,10,10,4,11,10,11,10,11,10,11,10,10,4,11,4,10,10,4,10,10,11,10,10,10,11,10,10,11,10,11,10,10,11,10,11,10,4,10,11,4,10,10,10,4,11,10,10,4,10,10,10,10,10,11,4,10,4,11,10,10,10,10,4,10,4,10,10,4,10,11,4,10,10,11,4,10,10,11,10,10,
+10,11,10,10,10,4,10,10,10,4,10,11,10,10,10,11,10,10,11,4,10,10,10,4,10,10,10,11,10,4,10,4,11,4,10,4,10,11,10,4,10,4,11,10,10,10,10,11,4,10,10,11,10,10,10,10,4,11,10,4,11,4,10,11,10,10,11,10,10,10,11,4,10,10,11,4,10,11,4,10,10,10,4,10,10,4,11,10,10,10,10,11,10,10,10,10,10,11,10,10,4,10,11,10,11,10,10,11,4,10,10,10,11,10,4,10,11,4,10,10,10,10,11,10,10,4,10,10,11,4,11,10,10,10,11,10,4,10,4,10,10,11,10,10,10,4,11,10,11,4,10,11,10,10,11,4,10,10,10,10,11,4,10,11,10,10,10,11,4,10,11,10,11,4,10,4,10,10,11,10,10,10,4,11,10,4,11,10,4,11,4,10,10,10,10,10,11,10,4,10,10,11,4,10,10,4,10,10,4,10,11,10,4,10,4,10,10,10,4,11,10,11,10,10,4,10,10,10,11,4,10,10,4,10,10,4,10,4,10,11,10,10,10,10,11,10,10,11,10,11,10,10,10,11,4,10,10,10,11,4,10,10,4,10,11,10,4,10,4,11,10,10,10,10,11,10,10,4,11,10,10,10,10,11,10,10,4,11,10,11,10,11,10,11,10,10,11,4,10,10,11,10,10,4,11,10,10,4,
+10,10,4,11,10,10,10,11,4,11,10,4,10,11,4,10,10,10,4,10,10,11,4,10,4,11,4,10,10,11,10,10,10,4,10,10,11,4,10,11,10,11,10,4,11,4,10,4,10,4,11,10,10,11,4,10,11,10,4,11,10,10,10,4,10,10,4,10,4,11,10,11,4,11,10,10,10,10,10,4,11,10,10,10,11,10,10,4,11,10,4,10,4,11,10,4,11,10,4,11,10,10,4,10,10,4,11,4,10,4,11,10,10,10,11,4,10,10,10,11,10,10,10,4,11,10,11,10,4,10,10,4,11,10,10,10,11,10,11,10,10,4,10,11,10,10,10,10,10,10,10,10,4,11,10,10,10,11,4,10,10,11,10,10,4,11,10,10,10,11,10,10,10,11,10,11,10,4,10,4,11,10,10,10,10,10,10,10,11,10,10,4,11,10,10,4,10,4,11,10,4,10,10,4,11,10,11,4,10,10,4,10,10,11,10,10,11,4,10,10,4,10,4,11,10,10,4,11,10,10,11,10,10,10,11,10,10,11,10,4,10,11,10,4,10,10,11,10,10,10,11,10,10,10,10,10,11,10,10,10,10,10,11,10,10,10,11,10,10,4,10,11,10,11,10,10,10,11,10,11,4,10,11,4,10,11,10,10,4,10,10,4,10,4,11,10,4,10,11,10,10,10,11,10,10,10,11,10,
+4,10,10,4,11,10,4,10,10,10,4,10,11,10,10,10,11,4,10,10,4,10,11,10,10,10,11,4,10,4,11,10,4,10,4,11,10,4,10,4,10,10,4,10,10,10,10,11,4,10,4,10,4,10,11,4,10,4,10,4,10,10,11,10,11,10,11,10,10,10,4,10,10,10,4,10,11,4,10,10,4,11,10,4,10,11,4,10,10,10,10,11,10,4,11,10,10,10,10,4,10,4,10,11,10,10,10,4,10,11,10,4,11,4,10,10,11,10,4,10,11,4,10,10,10,10,4,10,10,11,10,10,10,11,4,10,10,4,10,4,11,10,10,4,11,10,4,11,10,11,4,10,10,4,10,11,4,10,10,11,4,10,4,11,10,10,10,11,10,4,10,11,10,10,10,10,4,11,10,10,10,4,10,11,4,10,11,4,10,4,10,10,10,11,4,10,11,10,10,4,10,11,4,10,10,10,4,11,4,10,10,11,4,10,4,10,10,11,4,10,11,10,10,10,11,4,10,10,4,10,10,11,10,4,10,4,11,10,4,11,10,4,10,10,11,10,4,10,11,10,10,10,11,10,10,11,10,10,10,11,10,11,10,4,11,10,4,10,11,10,11,4,10,10,11,4,10,10,10,10,11,10,10,10,11,10,4,10,11,10,10,10,11,10,10,10,11,10,10,4,11,10,4,11,10,10,10,11,
+10,11,4,10,10,11,10,10,11,4,10,4,10,10,11,4,10,11,4,10,11,10,10,4,11,4,10,4,11,10,4,11,10,10,11,4,10,10,11,10,11,4,10,11,4,11,10,4,10,11,10,10,11,4,10,10,10,11,4,10,11,4,10,10,4,10,4,11,10,4,10,11,10,10,11,4,10,11,10,10,10,4,10,11,4,10,11,10,10,11,4,10,4,11,10,4,4,11,10,10,10,11,4,10,4,11,10,11,10,4,10,10,10,10,11,10,4,11,10,4,10,10,11,10,11,4,10,11,10,4,10,11,4,10,11,10,4,11,10,10,10,11,10,10,10,11,10,10,4,10,11,10,4,11,4,10,10,11,10,10,10,11,10,10,4,11,10,4,10,11,10,4,10,10,4,11,10,10,10,4,10,11,10,10,11,4,10,10,10,11,10,11,4,10,10,10,10,4,10,11,10,4,10,4,11,4,10,10,11,10,10,4,11,10,10,11,4,10,10,10,4,10,11,4,10,11,10,10,10,11,4,10,4,10,11,10,10,10,10,4,10,10,11,10,10,10,11,10,4,10,11,4,10,11,10,4,10,11,10,10,4,10,11,10,10,10,11,10,4,10,10,10,11,10,10,11,10,10,11,4,10,11,10,10,4,10,11,10,10,11,4,10,10,10,11,4,10,10,11,10,4,10,10,10,10,11,4,10,
+10,4,11,4,10,4,10,11,4,10,10,11,10,10,4,10,4,10,11,10,10,4,10,11,10,10,10,11,4,4,10,4,10,11,10,10,4,11,4,10,4,10,4,10,10,10,10,11,4,10,11,4,10,10,4,11,4,10,10,4,10,10,4,11,10,4,10,10,4,11,4,10,11,4,10,10,4,10,4,11,10,11,4,10,10,4,10,11,4,10,10,11,4,10,4,11,4,10,4,10,11,10,10,4,10,4,4,10,11,10,4,10,4,11,10,4,10,10,10,11,4,10,10,10,10,11,4,10,10,10,11,4,10,4,10,10,10,4,10,11,4,10,10,11,4,10,10,10,11,4,10,10,10,10,10,11,4,10,10,11,4,10,11,10,10,10,4,11,4,10,11,10,10,4,11,10,4,11,10,10,11,10,10,10,10,10,10,11,4,10,10,10,10,11,4,11,10,11,10,4,4,11,10,11,4,10,11,4,10,10,11,10,4,10,4,10,10,4,11,10,11,4,10,10,10,4,10,11,4,10,10,10,10,11,4,10,4,11,10,11,10,10,10,10,11,4,10,10,10,11,10,10,10,4,10,11,10,4,10,11,10,10,4,10,11,4,10,11,10,10,4,11,10,4,10,10,4,11,10,10,10,4,10,11,10,10,10,10,10,10,10,11,4,11,10,10,10,4,10,10,11,10,11,4,10,10,10,4,
+10,10,10,10,11,10,10,4,10,11,4,10,4,11,10,10,11,10,10,4,11,10,4,10,4,11,4,10,4,11,10,10,4,10,4,11,10,10,4,10,11,10,10,4,11,4,10,4,10,10,4,10,11,10,11,4,10,4,11,10,4,10,11,10,4,11,10,4,10,10,10,4,4,10,11,4,11,10,10,10,4,10,10,11,4,10,10,4,10,11,4,10,10,10,10,4,10,10,11,4,10,4,11,10,4,10,10,10,4,10,10,11,10,10,10,11,10,4,10,10,10,11,4,10,4,10,10,11,4,10,10,10,10,11,10,11,10,10,10,4,10,11,4,10,10,10,4,11,10,10,10,11,4,10,10,4,10,11,4,10,10,4,10,4,11,4,10,10,10,10,4,10,11,10,10,4,10,10,4,10,10,4,11,4,10,11,10,4,10,4,11,4,10,4,10,10,4,10,4,11,10,10,10,4,10,10,4,10,11,4,10,10,11,10,10,11,10,10,10,4,10,10,4,11,10,10,10,4,10,11,4,11,10,10,10,10,11,10,4,10,10,11,4,10,10,10,10,11,10,10,10,11,10,11,10,10,4,11,10,10,4,11,10,10,10,10,10,4,10,10,11,10,4,11,10,4,10,10,4,11,10,10,10,4,10,11,10,4,11,10,10,10,4,10,10,11,10,10,11,10,10,10,4,10,4,11,10,10,
+10,4,11,4,10,4,4,11,4,10,11,10,10,10,11,4,10,4,11,10,10,4,11,10,4,10,11,4,10,4,11,4,10,11,10,4,4,10,11,10,4,11,4,10,4,11,4,10,11,4,10,11,4,10,4,11,4,4,10,4,11,10,10,4,10,4,11,10,10,11,4,10,11,10,4,11,10,4,11,10,10,11,4,10,11,10,4,11,4,10,11,4,10,11,4,10,11,4,4,4,11,10,4,11,10,4,11,4,10,11,10,4,4,11,4,10,11,10,10,11,4,10,11,10,10,11,4,10,11,10,4,11,10,10,4,4,11,10,10,11,10,4,11,10,4,11,10,10,4,11,4,10,11,10,4,11,10,4,11,10,4,11,10,10,4,11,10,4,11,4,10,11,10,4,11,10,11,10,11,4,11,10,10,11,10,10,4,11,10,10,4,11,10,10,11,4,10,11,10,10,4,11,4,10,11,4,11,4,10,11,10,11,4,11,10,10,4,11,10,10,11,10,10,4,11,10,4,11,10,4,10,10,4,11,4,10,10,4,10,11,4,10,11,10,10,11,4,10,4,11,10,4,11,10,4,11,10,10,4,11,10,4,11,10,4,11,4,10,11,10,10,4,10,4,11,10,10,11,10,10,11,4,10,11,10,4,11,10,10,4,11,4,10,11,4,10,11,4,10,4,11,4,10,11,10,10,4,11,
+4,10,4,10,10,4,10,4,10,10,10,10,11,10,4,10,10,10,10,10,4,10,10,4,10,10,4,10,10,10,10,10,10,4,10,4,10,10,10,10,10,4,10,4,10,10,10,4,10,10,10,4,10,10,10,10,10,10,4,10,10,4,10,10,4,10,10,4,10,4,10,4,10,4,10,4,10,10,10,10,10,4,10,10,10,4,10,10,10,4,10,10,10,10,10,4,4,10,10,10,4,10,10,4,10,10,10,10,10,4,10,10,10,10,10,10,10,10,4,10,10,10,10,10,10,10,10,10,10,10,10,10,4,10,10,10,10,4,10,10,4,10,10,4,10,10,10,10,10,10,10,4,10,10,10,4,10,10,10,10,10,10,4,10,10,10,4,10,10,10,4,10,4,10,4,10,10,4,10,10,10,4,10,10,10,10,10,10,10,4,10,10,10,4,10,10,10,4,10,10,10,10,10,10,4,10,10,10,4,10,4,10,10,10,10,10,10,10,4,10,10,4,10,10,10,10,10,10,10,4,10,10,10,10,11,10,10,11,10,10,10,10,10,4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,4,10,10,4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
+10,4,10,4,4,4,4,10,4,4,10,4,4,10,4,4,4,4,10,4,10,4,4,10,4,4,10,4,4,10,4,10,4,4,4,10,4,4,4,4,10,4,4,10,4,10,4,4,4,4,10,4,4,4,10,4,4,4,10,4,4,10,4,4,10,4,4,10,4,10,4,10,4,10,4,10,4,10,4,10,4,4,10,4,10,4,10,4,4,10,4,4,4,10,4,4,10,4,4,10,4,10,4,10,4,4,10,4,4,10,4,4,10,4,10,4,10,4,10,4,10,4,10,4,10,4,10,10,10,4,10,4,10,4,4,10,4,10,4,10,4,10,4,10,4,4,10,4,10,4,4,10,4,4,4,10,4,10,10,4,10,4,10,4,4,4,10,4,4,10,4,10,10,10,4,10,4,10,4,10,4,10,10,4,10,4,10,4,4,10,4,10,4,10,4,10,4,10,10,4,10,10,4,10,4,10,4,4,10,4,10,4,10,4,4,10,10,4,10,4,4,10,4,4,4,10,4,10,4,10,4,4,10,4,10,4,10,10,4,10,4,10,10,10,10,4,10,10,10,4,10,10,4,10,10,4,10,4,10,4,10,10,4,10,4,10,4,10,10,4,10,10,4,10,10,4,10,10,4,10,4,10,4,10,4,10,4,10,4,10,4,10,10,4,10,10,4,10,4,10,4,10,4,10,10,4,10,4,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
+};
+
+MWIMAGEHDR image_car8 = {
+ 308, 162, /* width, height*/
+ 1, 8, /* planes, bpp*/
+ 308, 1, /* pitch, bytesperpixel*/
+ 1, 256, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/earth.jpg
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/earth.jpg
===================================================================
--- bmp/earth.jpg (nonexistent)
+++ bmp/earth.jpg (revision 174)
bmp/earth.jpg
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/penguin.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/penguin.bmp
===================================================================
--- bmp/penguin.bmp (nonexistent)
+++ bmp/penguin.bmp (revision 174)
bmp/penguin.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/min4.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/min4.bmp
===================================================================
--- bmp/min4.bmp (nonexistent)
+++ bmp/min4.bmp (revision 174)
bmp/min4.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/penguin.c
===================================================================
--- bmp/penguin.c (nonexistent)
+++ bmp/penguin.c (revision 174)
@@ -0,0 +1,427 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_penguin converted from penguin.bmp*/
+
+static MWPALENTRY palette[256] = {
+ RGBDEF( 0, 0, 0 ), /* pal 0*/
+ RGBDEF( 8, 0, 0 ), /* pal 1*/
+ RGBDEF( 8, 8, 0 ), /* pal 2*/
+ RGBDEF( 8, 8, 8 ), /* pal 3*/
+ RGBDEF( 18, 10, 0 ), /* pal 4*/
+ RGBDEF( 33, 0, 0 ), /* pal 5*/
+ RGBDEF( 16, 16, 16 ), /* pal 6*/
+ RGBDEF( 24, 24, 24 ), /* pal 7*/
+ RGBDEF( 39, 27, 4 ), /* pal 8*/
+ RGBDEF( 63, 41, 2 ), /* pal 9*/
+ RGBDEF( 66, 49, 0 ), /* pal 10*/
+ RGBDEF( 74, 41, 0 ), /* pal 11*/
+ RGBDEF( 74, 49, 0 ), /* pal 12*/
+ RGBDEF( 78, 52, 3 ), /* pal 13*/
+ RGBDEF( 90, 60, 2 ), /* pal 14*/
+ RGBDEF( 99, 70, 4 ), /* pal 15*/
+ RGBDEF( 33, 33, 33 ), /* pal 16*/
+ RGBDEF( 41, 41, 41 ), /* pal 17*/
+ RGBDEF( 41, 41, 66 ), /* pal 18*/
+ RGBDEF( 49, 49, 49 ), /* pal 19*/
+ RGBDEF( 63, 63, 60 ), /* pal 20*/
+ RGBDEF( 82, 57, 41 ), /* pal 21*/
+ RGBDEF( 74, 74, 66 ), /* pal 22*/
+ RGBDEF( 74, 74, 74 ), /* pal 23*/
+ RGBDEF( 74, 74, 82 ), /* pal 24*/
+ RGBDEF( 82, 82, 82 ), /* pal 25*/
+ RGBDEF( 90, 90, 90 ), /* pal 26*/
+ RGBDEF( 99, 99, 90 ), /* pal 27*/
+ RGBDEF( 90, 90, 99 ), /* pal 28*/
+ RGBDEF( 99, 99, 99 ), /* pal 29*/
+ RGBDEF( 99, 99, 107 ), /* pal 30*/
+ RGBDEF( 0, 0, 255 ), /* pal 31*/
+ RGBDEF( 141, 96, 1 ), /* pal 32*/
+ RGBDEF( 158, 111, 24 ), /* pal 33*/
+ RGBDEF( 196, 135, 9 ), /* pal 34*/
+ RGBDEF( 211, 154, 5 ), /* pal 35*/
+ RGBDEF( 226, 165, 4 ), /* pal 36*/
+ RGBDEF( 229, 177, 1 ), /* pal 37*/
+ RGBDEF( 237, 179, 8 ), /* pal 38*/
+ RGBDEF( 237, 174, 16 ), /* pal 39*/
+ RGBDEF( 233, 195, 8 ), /* pal 40*/
+ RGBDEF( 247, 193, 12 ), /* pal 41*/
+ RGBDEF( 243, 207, 10 ), /* pal 42*/
+ RGBDEF( 255, 214, 8 ), /* pal 43*/
+ RGBDEF( 255, 189, 16 ), /* pal 44*/
+ RGBDEF( 247, 218, 16 ), /* pal 45*/
+ RGBDEF( 247, 212, 24 ), /* pal 46*/
+ RGBDEF( 249, 216, 47 ), /* pal 47*/
+ RGBDEF( 117, 117, 120 ), /* pal 48*/
+ RGBDEF( 142, 139, 139 ), /* pal 49*/
+ RGBDEF( 181, 164, 145 ), /* pal 50*/
+ RGBDEF( 173, 173, 177 ), /* pal 51*/
+ RGBDEF( 189, 189, 189 ), /* pal 52*/
+ RGBDEF( 202, 202, 202 ), /* pal 53*/
+ RGBDEF( 198, 198, 231 ), /* pal 54*/
+ RGBDEF( 218, 218, 218 ), /* pal 55*/
+ RGBDEF( 231, 214, 140 ), /* pal 56*/
+ RGBDEF( 231, 231, 222 ), /* pal 57*/
+ RGBDEF( 222, 222, 239 ), /* pal 58*/
+ RGBDEF( 239, 236, 236 ), /* pal 59*/
+ RGBDEF( 247, 247, 239 ), /* pal 60*/
+ RGBDEF( 239, 239, 247 ), /* pal 61*/
+ RGBDEF( 247, 247, 247 ), /* pal 62*/
+ RGBDEF( 255, 255, 255 ), /* pal 63*/
+ RGBDEF( 0, 0, 0 ), /* pal 64*/
+ RGBDEF( 191, 0, 0 ), /* pal 65*/
+ RGBDEF( 0, 191, 0 ), /* pal 66*/
+ RGBDEF( 191, 191, 0 ), /* pal 67*/
+ RGBDEF( 0, 0, 191 ), /* pal 68*/
+ RGBDEF( 191, 0, 191 ), /* pal 69*/
+ RGBDEF( 0, 191, 191 ), /* pal 70*/
+ RGBDEF( 192, 192, 192 ), /* pal 71*/
+ RGBDEF( 128, 128, 128 ), /* pal 72*/
+ RGBDEF( 255, 0, 0 ), /* pal 73*/
+ RGBDEF( 0, 255, 0 ), /* pal 74*/
+ RGBDEF( 255, 255, 0 ), /* pal 75*/
+ RGBDEF( 0, 0, 255 ), /* pal 76*/
+ RGBDEF( 255, 0, 255 ), /* pal 77*/
+ RGBDEF( 0, 255, 255 ), /* pal 78*/
+ RGBDEF( 255, 255, 255 ), /* pal 79*/
+ RGBDEF( 0, 0, 0 ), /* pal 80*/
+ RGBDEF( 0, 0, 0 ), /* pal 81*/
+ RGBDEF( 0, 0, 0 ), /* pal 82*/
+ RGBDEF( 0, 0, 0 ), /* pal 83*/
+ RGBDEF( 0, 0, 0 ), /* pal 84*/
+ RGBDEF( 0, 0, 0 ), /* pal 85*/
+ RGBDEF( 0, 0, 0 ), /* pal 86*/
+ RGBDEF( 0, 0, 0 ), /* pal 87*/
+ RGBDEF( 0, 0, 0 ), /* pal 88*/
+ RGBDEF( 0, 0, 0 ), /* pal 89*/
+ RGBDEF( 0, 0, 0 ), /* pal 90*/
+ RGBDEF( 0, 0, 0 ), /* pal 91*/
+ RGBDEF( 0, 0, 0 ), /* pal 92*/
+ RGBDEF( 0, 0, 0 ), /* pal 93*/
+ RGBDEF( 0, 0, 0 ), /* pal 94*/
+ RGBDEF( 0, 0, 0 ), /* pal 95*/
+ RGBDEF( 0, 0, 0 ), /* pal 96*/
+ RGBDEF( 0, 0, 0 ), /* pal 97*/
+ RGBDEF( 0, 0, 0 ), /* pal 98*/
+ RGBDEF( 0, 0, 0 ), /* pal 99*/
+ RGBDEF( 0, 0, 0 ), /* pal 100*/
+ RGBDEF( 0, 0, 0 ), /* pal 101*/
+ RGBDEF( 0, 0, 0 ), /* pal 102*/
+ RGBDEF( 0, 0, 0 ), /* pal 103*/
+ RGBDEF( 0, 0, 0 ), /* pal 104*/
+ RGBDEF( 0, 0, 0 ), /* pal 105*/
+ RGBDEF( 0, 0, 0 ), /* pal 106*/
+ RGBDEF( 0, 0, 0 ), /* pal 107*/
+ RGBDEF( 0, 0, 0 ), /* pal 108*/
+ RGBDEF( 0, 0, 0 ), /* pal 109*/
+ RGBDEF( 0, 0, 0 ), /* pal 110*/
+ RGBDEF( 0, 0, 0 ), /* pal 111*/
+ RGBDEF( 0, 0, 0 ), /* pal 112*/
+ RGBDEF( 0, 0, 0 ), /* pal 113*/
+ RGBDEF( 0, 0, 0 ), /* pal 114*/
+ RGBDEF( 0, 0, 0 ), /* pal 115*/
+ RGBDEF( 0, 0, 0 ), /* pal 116*/
+ RGBDEF( 0, 0, 0 ), /* pal 117*/
+ RGBDEF( 0, 0, 0 ), /* pal 118*/
+ RGBDEF( 0, 0, 0 ), /* pal 119*/
+ RGBDEF( 0, 0, 0 ), /* pal 120*/
+ RGBDEF( 0, 0, 0 ), /* pal 121*/
+ RGBDEF( 0, 0, 0 ), /* pal 122*/
+ RGBDEF( 0, 0, 0 ), /* pal 123*/
+ RGBDEF( 0, 0, 0 ), /* pal 124*/
+ RGBDEF( 0, 0, 0 ), /* pal 125*/
+ RGBDEF( 0, 0, 0 ), /* pal 126*/
+ RGBDEF( 0, 0, 0 ), /* pal 127*/
+ RGBDEF( 0, 0, 0 ), /* pal 128*/
+ RGBDEF( 0, 0, 0 ), /* pal 129*/
+ RGBDEF( 0, 0, 0 ), /* pal 130*/
+ RGBDEF( 0, 0, 0 ), /* pal 131*/
+ RGBDEF( 0, 0, 0 ), /* pal 132*/
+ RGBDEF( 0, 0, 0 ), /* pal 133*/
+ RGBDEF( 0, 0, 0 ), /* pal 134*/
+ RGBDEF( 0, 0, 0 ), /* pal 135*/
+ RGBDEF( 0, 0, 0 ), /* pal 136*/
+ RGBDEF( 0, 0, 0 ), /* pal 137*/
+ RGBDEF( 0, 0, 0 ), /* pal 138*/
+ RGBDEF( 0, 0, 0 ), /* pal 139*/
+ RGBDEF( 0, 0, 0 ), /* pal 140*/
+ RGBDEF( 0, 0, 0 ), /* pal 141*/
+ RGBDEF( 0, 0, 0 ), /* pal 142*/
+ RGBDEF( 0, 0, 0 ), /* pal 143*/
+ RGBDEF( 0, 0, 0 ), /* pal 144*/
+ RGBDEF( 0, 0, 0 ), /* pal 145*/
+ RGBDEF( 0, 0, 0 ), /* pal 146*/
+ RGBDEF( 0, 0, 0 ), /* pal 147*/
+ RGBDEF( 0, 0, 0 ), /* pal 148*/
+ RGBDEF( 0, 0, 0 ), /* pal 149*/
+ RGBDEF( 0, 0, 0 ), /* pal 150*/
+ RGBDEF( 0, 0, 0 ), /* pal 151*/
+ RGBDEF( 0, 0, 0 ), /* pal 152*/
+ RGBDEF( 0, 0, 0 ), /* pal 153*/
+ RGBDEF( 0, 0, 0 ), /* pal 154*/
+ RGBDEF( 0, 0, 0 ), /* pal 155*/
+ RGBDEF( 0, 0, 0 ), /* pal 156*/
+ RGBDEF( 0, 0, 0 ), /* pal 157*/
+ RGBDEF( 0, 0, 0 ), /* pal 158*/
+ RGBDEF( 0, 0, 0 ), /* pal 159*/
+ RGBDEF( 0, 0, 0 ), /* pal 160*/
+ RGBDEF( 0, 0, 0 ), /* pal 161*/
+ RGBDEF( 0, 0, 0 ), /* pal 162*/
+ RGBDEF( 0, 0, 0 ), /* pal 163*/
+ RGBDEF( 0, 0, 0 ), /* pal 164*/
+ RGBDEF( 0, 0, 0 ), /* pal 165*/
+ RGBDEF( 0, 0, 0 ), /* pal 166*/
+ RGBDEF( 0, 0, 0 ), /* pal 167*/
+ RGBDEF( 0, 0, 0 ), /* pal 168*/
+ RGBDEF( 0, 0, 0 ), /* pal 169*/
+ RGBDEF( 0, 0, 0 ), /* pal 170*/
+ RGBDEF( 0, 0, 0 ), /* pal 171*/
+ RGBDEF( 0, 0, 0 ), /* pal 172*/
+ RGBDEF( 0, 0, 0 ), /* pal 173*/
+ RGBDEF( 0, 0, 0 ), /* pal 174*/
+ RGBDEF( 0, 0, 0 ), /* pal 175*/
+ RGBDEF( 0, 0, 0 ), /* pal 176*/
+ RGBDEF( 0, 0, 0 ), /* pal 177*/
+ RGBDEF( 0, 0, 0 ), /* pal 178*/
+ RGBDEF( 0, 0, 0 ), /* pal 179*/
+ RGBDEF( 0, 0, 0 ), /* pal 180*/
+ RGBDEF( 0, 0, 0 ), /* pal 181*/
+ RGBDEF( 0, 0, 0 ), /* pal 182*/
+ RGBDEF( 0, 0, 0 ), /* pal 183*/
+ RGBDEF( 0, 0, 0 ), /* pal 184*/
+ RGBDEF( 0, 0, 0 ), /* pal 185*/
+ RGBDEF( 0, 0, 0 ), /* pal 186*/
+ RGBDEF( 0, 0, 0 ), /* pal 187*/
+ RGBDEF( 0, 0, 0 ), /* pal 188*/
+ RGBDEF( 0, 0, 0 ), /* pal 189*/
+ RGBDEF( 0, 0, 0 ), /* pal 190*/
+ RGBDEF( 0, 0, 0 ), /* pal 191*/
+ RGBDEF( 0, 0, 0 ), /* pal 192*/
+ RGBDEF( 0, 0, 0 ), /* pal 193*/
+ RGBDEF( 0, 0, 0 ), /* pal 194*/
+ RGBDEF( 0, 0, 0 ), /* pal 195*/
+ RGBDEF( 0, 0, 0 ), /* pal 196*/
+ RGBDEF( 0, 0, 0 ), /* pal 197*/
+ RGBDEF( 0, 0, 0 ), /* pal 198*/
+ RGBDEF( 0, 0, 0 ), /* pal 199*/
+ RGBDEF( 0, 0, 0 ), /* pal 200*/
+ RGBDEF( 0, 0, 0 ), /* pal 201*/
+ RGBDEF( 0, 0, 0 ), /* pal 202*/
+ RGBDEF( 0, 0, 0 ), /* pal 203*/
+ RGBDEF( 0, 0, 0 ), /* pal 204*/
+ RGBDEF( 0, 0, 0 ), /* pal 205*/
+ RGBDEF( 0, 0, 0 ), /* pal 206*/
+ RGBDEF( 0, 0, 0 ), /* pal 207*/
+ RGBDEF( 0, 0, 0 ), /* pal 208*/
+ RGBDEF( 0, 0, 0 ), /* pal 209*/
+ RGBDEF( 0, 0, 0 ), /* pal 210*/
+ RGBDEF( 0, 0, 0 ), /* pal 211*/
+ RGBDEF( 0, 0, 0 ), /* pal 212*/
+ RGBDEF( 0, 0, 0 ), /* pal 213*/
+ RGBDEF( 0, 0, 0 ), /* pal 214*/
+ RGBDEF( 0, 0, 0 ), /* pal 215*/
+ RGBDEF( 0, 0, 0 ), /* pal 216*/
+ RGBDEF( 0, 0, 0 ), /* pal 217*/
+ RGBDEF( 0, 0, 0 ), /* pal 218*/
+ RGBDEF( 0, 0, 0 ), /* pal 219*/
+ RGBDEF( 0, 0, 0 ), /* pal 220*/
+ RGBDEF( 0, 0, 0 ), /* pal 221*/
+ RGBDEF( 0, 0, 0 ), /* pal 222*/
+ RGBDEF( 0, 0, 0 ), /* pal 223*/
+ RGBDEF( 0, 0, 0 ), /* pal 224*/
+ RGBDEF( 0, 0, 0 ), /* pal 225*/
+ RGBDEF( 0, 0, 0 ), /* pal 226*/
+ RGBDEF( 0, 0, 0 ), /* pal 227*/
+ RGBDEF( 0, 0, 0 ), /* pal 228*/
+ RGBDEF( 0, 0, 0 ), /* pal 229*/
+ RGBDEF( 0, 0, 0 ), /* pal 230*/
+ RGBDEF( 0, 0, 0 ), /* pal 231*/
+ RGBDEF( 0, 0, 0 ), /* pal 232*/
+ RGBDEF( 0, 0, 0 ), /* pal 233*/
+ RGBDEF( 0, 0, 0 ), /* pal 234*/
+ RGBDEF( 0, 0, 0 ), /* pal 235*/
+ RGBDEF( 0, 0, 0 ), /* pal 236*/
+ RGBDEF( 0, 0, 0 ), /* pal 237*/
+ RGBDEF( 0, 0, 0 ), /* pal 238*/
+ RGBDEF( 0, 0, 0 ), /* pal 239*/
+ RGBDEF( 0, 0, 0 ), /* pal 240*/
+ RGBDEF( 0, 0, 0 ), /* pal 241*/
+ RGBDEF( 0, 0, 0 ), /* pal 242*/
+ RGBDEF( 0, 0, 0 ), /* pal 243*/
+ RGBDEF( 0, 0, 0 ), /* pal 244*/
+ RGBDEF( 0, 0, 0 ), /* pal 245*/
+ RGBDEF( 0, 0, 0 ), /* pal 246*/
+ RGBDEF( 0, 0, 0 ), /* pal 247*/
+ RGBDEF( 0, 0, 0 ), /* pal 248*/
+ RGBDEF( 0, 0, 0 ), /* pal 249*/
+ RGBDEF( 0, 0, 0 ), /* pal 250*/
+ RGBDEF( 0, 0, 0 ), /* pal 251*/
+ RGBDEF( 0, 0, 0 ), /* pal 252*/
+ RGBDEF( 0, 0, 0 ), /* pal 253*/
+ RGBDEF( 0, 0, 0 ), /* pal 254*/
+ RGBDEF( 0, 0, 0 ), /* pal 255*/
+};
+
+static MWUCHAR imagebits[] = {
+76,76,76,76,76,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,11,13,14,15,15,15,15,11,11,11,21,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,76,76,76,76,76,31,31,31,76,76,76,76,76,76,76,76,76,76,76,76,76,12,11,11,10,11,14,14,15,14,11,14,11,11,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,76,31,31,31,31,31,76,76,
+76,76,76,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,76,76,76,31,31,31,76,76,76,76,76,9,11,14,15,15,32,15,32,15,15,15,15,15,11,11,76,76,76,76,31,31,31,31,76,76,76,76,76,31,31,31,31,31,31,31,76,76,76,76,76,76,31,31,76,31,31,31,31,76,76,76,76,76,76,76,76,12,9,11,14,15,65,32,32,32,32,32,32,15,15,15,11,11,76,76,76,76,31,76,76,31,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,76,76,
+76,76,76,31,31,31,76,31,76,76,76,76,76,76,76,76,31,31,31,31,31,31,76,76,76,76,76,76,13,15,32,32,32,32,32,32,32,32,32,32,32,15,15,15,11,11,76,76,76,31,31,31,31,31,76,76,76,76,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,76,76,76,76,31,31,31,31,31,31,76,76,12,9,11,14,15,32,32,33,33,33,33,34,32,34,32,32,32,15,21,76,76,76,76,76,76,31,31,31,31,31,31,31,76,76,76,76,76,76,76,31,31,31,76,
+76,76,76,31,31,31,76,31,31,76,76,76,76,31,31,31,76,76,76,76,76,76,76,76,76,11,13,15,32,32,33,32,33,32,34,32,33,32,33,33,32,32,32,15,15,14,11,76,76,76,76,76,31,31,31,76,76,31,31,76,76,76,31,31,31,31,76,31,31,76,31,76,76,76,76,76,76,76,76,76,31,31,31,76,76,12,11,15,32,32,32,32,34,33,34,33,33,34,32,33,33,32,32,15,21,76,76,76,76,31,76,76,31,31,31,31,31,31,31,76,76,76,76,76,31,31,31,76,
+76,76,76,31,76,31,31,76,31,31,31,31,31,31,31,31,76,76,76,76,76,13,13,15,32,32,32,32,33,32,33,33,34,33,34,33,34,33,33,33,33,32,32,32,15,15,14,11,3,255,76,76,76,76,31,76,76,76,76,76,31,76,76,31,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,12,9,14,32,32,33,34,33,34,32,34,34,34,34,34,34,33,34,33,32,32,20,76,76,76,76,76,76,31,76,31,31,31,31,31,76,76,31,76,31,31,31,31,76,
+76,76,31,31,76,76,31,76,31,31,76,76,76,76,76,76,76,15,15,32,32,32,32,32,33,33,32,34,33,34,34,33,34,34,34,34,34,34,34,33,33,34,32,32,32,32,14,11,8,255,255,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,10,13,32,32,32,33,33,33,34,34,34,34,34,34,35,34,34,34,33,34,32,32,9,76,76,76,76,76,31,76,76,31,76,31,31,76,76,31,76,76,31,31,76,76,
+76,76,31,76,76,76,76,76,76,76,76,76,76,13,15,32,32,32,33,33,33,33,33,34,33,33,34,34,34,34,34,35,35,35,35,35,35,34,35,34,34,33,33,33,32,32,15,15,9,3,255,255,255,255,255,255,255,255,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,255,255,255,255,9,14,15,32,33,34,34,34,34,34,34,35,35,35,34,35,35,34,34,34,33,34,32,13,76,76,76,76,76,76,76,31,76,31,76,31,76,31,76,76,31,31,76,76,
+76,76,76,76,76,76,76,76,76,76,32,32,33,33,33,33,34,33,33,33,34,33,34,34,34,34,34,35,34,36,36,36,36,36,37,36,36,35,35,35,34,34,34,33,32,32,32,15,13,9,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,9,14,32,32,34,33,34,34,34,35,35,35,35,35,36,35,35,35,35,34,34,34,33,33,32,9,76,76,76,76,76,31,76,31,76,31,76,31,31,76,76,31,31,76,
+76,76,76,76,76,32,32,32,33,33,33,33,34,34,34,34,34,34,34,34,34,34,34,34,35,35,35,35,39,39,40,41,41,41,38,44,38,38,36,36,35,35,34,34,33,32,32,32,13,11,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,12,15,32,32,34,34,34,34,36,35,36,36,40,36,35,36,36,36,35,35,35,34,35,34,33,33,9,76,76,76,76,76,76,31,76,31,31,76,31,31,76,31,31,76,
+76,76,33,32,33,33,33,34,33,34,34,34,34,34,34,35,35,34,35,35,35,35,35,35,35,36,36,39,39,41,41,41,46,38,47,38,44,39,39,39,38,35,35,34,34,33,32,32,15,9,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,12,15,32,34,34,34,35,35,36,36,39,37,39,39,46,38,39,37,39,36,36,36,35,34,35,34,34,21,76,76,76,76,76,76,76,76,31,76,76,31,76,31,31,76,
+76,34,34,34,34,34,34,34,34,34,34,35,35,35,35,34,35,36,35,35,35,39,39,38,38,38,39,44,39,41,36,44,44,40,41,41,41,46,39,44,37,39,35,35,34,33,34,32,15,11,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,32,32,34,34,34,35,36,37,41,39,39,46,39,44,39,44,39,44,39,39,39,39,36,35,35,35,34,33,11,76,76,76,76,76,76,31,76,76,31,76,31,76,76,
+76,34,35,34,35,34,34,39,34,35,35,35,35,36,36,36,39,35,38,36,38,36,40,39,41,44,41,40,44,41,35,46,41,47,47,38,46,40,44,35,44,39,36,35,34,34,33,32,15,9,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,15,33,34,35,35,35,36,40,39,44,46,39,44,40,39,41,36,44,39,44,39,39,39,39,39,39,35,35,34,33,76,76,76,76,76,31,76,76,31,31,31,76,76,
+31,35,35,35,34,39,35,35,39,36,36,39,36,39,37,39,36,39,41,38,44,44,39,41,46,40,40,46,46,35,44,40,41,39,41,36,41,46,41,41,35,39,39,36,35,34,33,32,13,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,32,33,34,34,35,38,38,39,39,46,46,40,47,38,44,35,39,44,40,47,35,44,44,44,39,44,38,39,35,35,33,33,76,76,76,76,76,76,76,31,76,31,76,
+31,34,39,34,39,35,36,39,36,39,37,37,39,39,39,41,41,47,38,36,39,46,40,47,38,41,46,41,39,40,47,38,41,41,35,44,36,39,41,36,41,40,39,35,35,34,34,32,9,255,255,255,255,255,255,3,255,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,13,32,32,35,35,35,38,36,41,41,46,38,44,40,46,35,44,47,40,47,39,41,35,44,35,44,39,47,39,47,47,35,35,35,35,76,76,76,76,76,76,76,31,76,
+31,39,35,35,35,39,39,39,40,39,44,47,38,46,40,41,47,39,38,47,46,46,39,46,41,39,41,41,41,47,38,47,40,41,44,35,41,46,41,41,41,36,36,35,35,34,33,32,9,255,255,255,25,62,62,62,62,62,62,62,62,62,53,20,255,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,9,15,33,34,35,36,36,39,40,39,46,44,40,47,41,44,35,44,44,35,44,44,41,46,40,41,47,40,41,35,46,46,39,36,36,35,35,76,76,76,76,76,76,76,
+31,35,34,39,39,39,39,39,44,44,40,39,44,47,41,36,44,41,47,35,44,41,41,44,35,44,46,39,41,41,44,35,41,41,46,40,41,41,38,41,38,39,39,35,35,35,33,15,9,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,49,19,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,15,33,34,35,35,36,37,41,41,46,39,41,47,41,36,44,35,41,44,35,44,46,39,47,35,44,41,39,47,41,36,44,39,46,36,36,35,35,76,76,76,76,76,
+76,35,39,34,39,39,46,41,46,40,44,36,44,35,39,46,41,44,41,44,40,40,47,35,44,35,44,46,35,44,41,46,47,38,46,41,39,36,44,41,37,39,37,67,35,34,32,9,52,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,255,255,8,15,32,34,35,35,36,39,38,41,36,46,40,35,44,40,41,41,41,41,44,35,41,44,35,36,44,41,46,44,35,44,36,46,38,41,36,44,35,34,76,76,76,76,
+76,35,34,39,35,39,41,40,39,39,36,39,46,41,47,39,41,39,41,39,44,41,41,41,46,46,39,41,36,41,41,39,46,41,41,40,46,46,39,38,40,37,40,39,35,34,15,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,6,15,32,34,35,35,36,37,40,41,41,41,41,41,41,47,39,46,44,40,36,39,41,41,41,36,44,35,41,46,39,46,47,39,41,35,39,46,44,44,35,35,76,76,
+76,35,39,34,39,39,39,47,40,46,44,44,41,35,41,47,40,41,46,40,44,35,41,36,41,39,41,47,38,41,47,35,46,39,47,35,39,36,44,40,39,40,40,37,34,33,33,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,3,255,255,255,255,255,255,255,14,32,34,34,36,36,37,41,41,39,36,44,39,46,39,38,46,41,36,41,46,44,40,41,35,39,42,46,41,36,41,41,41,41,47,35,44,40,35,44,35,36,76,
+76,35,35,34,39,47,39,41,35,46,39,41,44,44,47,39,41,36,46,41,36,41,46,38,36,41,46,44,36,44,41,47,38,41,44,47,41,39,41,39,40,40,40,39,34,32,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,13,32,33,35,36,36,39,39,41,41,46,40,47,46,44,47,35,41,41,47,39,46,44,47,38,47,38,47,40,40,44,47,40,39,36,44,41,47,40,44,35,35,35,
+76,35,34,39,34,39,39,46,47,38,41,46,35,44,35,44,40,47,39,35,41,36,38,47,38,47,39,36,39,41,41,41,47,40,44,40,41,41,41,39,40,42,40,35,34,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,3,255,255,255,3,13,32,34,34,35,36,37,40,41,41,41,41,35,44,35,39,47,38,47,40,47,39,44,41,47,39,47,40,44,47,38,41,41,41,44,40,41,47,44,41,47,35,41,
+76,34,34,39,35,47,39,39,46,46,39,44,35,44,40,39,44,39,46,44,46,39,47,40,47,41,41,41,41,46,41,46,40,41,36,46,36,39,41,41,40,40,39,35,33,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,12,32,34,34,35,36,37,41,39,41,46,40,47,44,47,40,44,39,46,41,41,41,35,46,44,44,40,44,35,44,41,44,40,47,41,36,47,38,36,41,41,47,41,
+76,34,34,35,39,39,39,44,40,44,46,44,40,47,40,39,36,41,41,36,40,44,36,35,44,40,41,46,38,36,44,40,41,47,38,41,36,39,41,38,42,40,35,35,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,255,12,32,33,35,35,36,38,38,38,41,42,47,40,40,40,47,40,47,39,40,47,40,41,41,44,40,46,41,41,41,35,44,47,46,39,44,39,40,46,44,40,41,40,
+76,34,34,39,35,39,40,47,39,39,36,36,39,46,39,44,47,44,40,41,47,40,41,41,47,39,36,39,46,39,36,44,46,47,39,47,38,41,40,40,42,36,35,6,17,20,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,12,32,34,34,35,36,36,41,39,41,41,41,40,46,47,35,46,46,39,47,40,41,46,39,40,39,46,38,46,36,44,46,41,40,40,40,44,47,40,36,41,44,44,
+76,34,34,39,39,39,46,41,41,46,47,40,44,40,46,47,40,46,39,46,44,35,44,36,41,36,41,46,41,47,38,36,39,38,41,46,47,38,41,42,40,35,3,255,255,255,255,25,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,255,8,32,33,34,35,35,38,38,40,41,41,44,41,44,41,44,39,41,46,40,47,40,44,46,44,47,38,41,36,39,41,41,41,36,44,46,40,47,40,41,46,40,41,
+76,34,35,39,39,46,41,39,36,44,40,47,35,41,36,39,36,41,46,38,36,39,36,44,41,40,47,39,36,44,35,44,41,47,38,46,38,41,41,46,39,34,3,255,255,255,255,255,29,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,53,6,32,34,34,35,35,36,38,41,39,39,41,40,39,41,40,44,41,41,39,41,41,40,41,46,40,47,35,46,41,46,44,35,44,41,46,41,41,36,41,41,76,76,
+76,34,35,39,39,39,39,47,40,44,47,35,44,41,44,44,46,41,41,47,39,47,38,46,39,46,39,36,44,40,44,46,39,41,46,39,41,40,46,36,35,3,255,255,255,255,255,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,53,32,33,34,34,36,37,38,37,40,44,39,39,39,39,39,39,39,39,40,44,38,40,46,41,40,40,47,39,36,41,46,44,35,41,39,41,36,38,41,76,76,76,
+76,34,47,35,39,44,36,44,41,46,39,46,36,39,46,35,41,41,46,41,44,38,36,41,47,41,36,44,35,44,36,44,46,41,44,35,41,42,40,35,3,255,255,255,255,255,255,255,255,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,71,33,33,34,35,35,38,36,39,37,40,38,38,39,36,36,39,38,38,39,40,44,41,38,46,41,46,44,35,41,44,39,41,41,46,39,46,41,76,76,76,31,31,
+76,34,35,39,41,39,47,35,44,41,44,40,41,47,40,41,41,39,41,41,41,47,39,35,41,41,39,46,40,35,46,35,41,41,44,41,40,40,36,35,255,255,255,255,255,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,53,53,33,33,34,35,36,36,38,36,38,36,38,36,39,36,39,36,39,38,36,40,38,39,47,47,35,44,46,41,41,39,46,47,40,41,47,39,76,76,76,31,76,31,
+76,34,39,39,40,39,40,46,41,36,35,44,47,40,39,41,47,41,47,41,41,47,40,47,40,47,40,41,47,41,41,41,46,38,41,40,46,36,35,3,255,255,255,255,255,255,255,255,22,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,71,53,53,72,34,34,35,38,36,36,36,38,36,36,36,35,36,35,36,36,36,36,39,40,39,46,40,39,41,46,41,41,47,35,41,44,41,40,76,76,76,31,31,31,31,
+76,35,35,39,40,40,41,41,39,41,41,41,39,41,47,46,40,36,44,35,46,44,47,39,41,41,36,44,44,40,41,47,41,47,40,40,40,36,6,255,255,255,255,3,255,255,255,6,48,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,53,71,53,33,34,34,36,37,38,36,37,35,36,35,35,35,35,35,35,35,36,36,36,37,39,41,46,40,47,38,46,41,41,41,41,36,41,76,76,76,76,31,76,31,76,
+76,34,35,39,39,39,39,39,46,37,39,46,44,46,39,44,39,39,41,36,44,35,44,40,47,39,46,35,46,39,41,41,41,39,41,46,36,35,255,255,255,255,255,255,255,255,255,30,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,52,53,53,34,34,36,39,38,36,36,36,35,35,35,35,34,35,34,34,34,35,35,35,37,39,40,41,36,41,36,38,41,41,41,46,40,76,76,76,31,31,31,76,31,76,
+76,36,35,36,36,39,39,37,39,39,39,40,39,39,39,39,46,44,40,44,35,44,41,40,47,40,47,40,40,47,38,46,41,41,41,40,35,3,255,255,255,255,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,71,53,50,35,36,39,38,39,36,35,35,35,34,34,34,34,34,34,34,34,34,35,35,36,40,39,41,41,41,41,41,41,40,41,44,76,76,76,31,31,31,76,31,76,
+76,76,32,36,39,37,39,39,39,39,39,39,39,39,39,39,39,46,44,39,36,41,44,41,46,38,41,41,47,40,41,41,41,41,40,39,3,255,255,255,255,255,255,255,20,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,71,53,50,36,35,39,37,39,36,35,34,34,34,34,33,34,34,33,34,33,34,34,34,35,37,39,40,39,41,41,44,41,41,41,76,76,76,76,31,31,31,31,31,76,
+76,76,76,33,34,37,39,36,35,35,34,35,35,39,39,39,39,39,44,35,44,44,35,41,41,47,38,47,40,41,41,41,41,45,40,35,3,255,255,255,255,255,255,16,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,71,53,53,50,35,44,39,38,35,36,34,34,34,33,34,32,33,32,32,33,34,33,34,33,34,35,36,39,40,39,41,40,46,41,76,31,76,76,31,31,31,31,76,31,76,
+76,76,76,31,76,76,76,34,33,34,34,34,34,35,39,35,39,39,39,39,39,36,41,44,39,41,40,41,46,44,35,41,41,38,40,255,255,255,255,255,255,6,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,53,53,53,34,39,35,44,39,38,35,34,34,34,33,15,9,255,255,255,255,255,8,14,33,34,34,36,38,37,38,41,41,38,38,76,76,76,76,31,31,31,31,76,31,76,
+76,76,76,31,76,31,76,76,76,76,76,33,34,34,35,35,39,39,39,44,41,47,44,35,44,46,39,46,40,41,41,41,41,40,35,255,255,255,3,255,3,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,52,53,33,47,44,44,39,38,35,34,33,32,15,8,255,255,255,255,255,255,255,255,9,32,34,35,40,40,41,39,41,41,38,76,76,76,76,76,76,31,31,76,31,76,
+76,76,76,76,76,76,76,76,76,76,76,76,34,33,34,35,35,39,39,39,39,46,41,46,35,44,44,41,41,40,41,41,41,39,255,255,255,255,255,16,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,53,34,36,36,39,41,38,35,34,33,12,255,255,255,255,255,255,255,255,255,255,255,255,33,35,39,46,40,40,41,40,39,76,76,76,31,76,76,31,31,76,31,31,
+76,76,31,76,76,76,76,76,31,76,76,31,76,76,34,35,35,35,39,39,47,39,46,41,46,35,41,39,46,47,38,46,37,255,255,255,255,3,20,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,50,35,39,39,39,39,37,34,15,255,255,255,255,255,255,255,255,255,255,255,255,255,255,32,35,46,40,45,46,40,46,76,76,76,76,76,76,76,76,76,76,31,
+76,76,31,76,31,76,76,76,31,76,76,76,76,76,76,34,34,35,39,35,39,44,39,46,39,36,44,46,39,41,41,46,36,255,255,255,6,25,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,34,39,40,44,41,46,40,33,15,255,255,255,255,255,255,255,255,255,255,255,255,6,255,255,34,40,40,40,67,47,40,76,76,76,76,31,31,31,31,31,76,31,
+76,76,31,31,31,31,76,76,31,31,76,76,76,76,76,34,34,35,35,39,35,44,36,41,46,40,36,44,40,41,46,39,255,255,255,16,50,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,39,35,39,46,46,67,42,39,51,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,45,46,67,46,47,40,76,76,31,31,31,31,31,31,31,31,31,
+76,76,31,31,76,31,76,76,31,31,31,31,76,76,31,76,35,35,35,35,47,35,46,38,41,46,38,41,46,41,38,255,255,255,19,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,35,39,39,46,40,47,40,67,33,3,3,255,255,255,255,255,255,255,255,255,255,255,7,3,6,8,40,47,40,40,46,76,76,31,31,31,31,31,31,31,31,31,
+76,76,31,76,76,31,31,76,76,76,31,31,76,76,76,76,76,35,35,39,41,46,39,46,46,39,36,41,38,41,255,255,255,25,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,39,39,47,67,40,67,40,40,33,3,255,255,255,255,255,255,255,255,255,255,255,255,3,16,6,255,33,42,38,41,76,76,31,31,31,31,31,31,31,31,31,31,
+76,76,31,76,76,31,31,31,76,76,31,76,76,76,76,76,76,35,35,44,39,46,41,47,38,46,41,41,41,255,255,255,23,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,35,40,40,47,39,47,41,15,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,16,16,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,76,31,76,31,31,31,31,31,31,76,76,31,76,35,35,46,36,41,41,46,41,41,41,255,255,3,52,52,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,39,35,35,39,35,34,20,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,19,19,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,76,31,31,31,76,76,76,31,76,76,76,76,35,39,36,41,36,39,39,41,255,255,255,51,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,16,3,255,255,255,255,255,255,255,255,255,255,255,255,255,16,29,22,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,76,31,31,76,76,31,31,76,76,255,255,255,44,35,46,41,36,255,255,255,19,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,255,16,6,255,255,255,255,255,255,255,255,255,255,255,6,27,29,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,76,76,31,31,76,76,31,76,76,255,255,255,255,44,41,255,255,255,255,30,51,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,255,255,19,16,255,255,255,255,255,255,3,16,19,18,19,16,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,255,255,255,255,255,255,255,255,255,16,53,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,25,26,16,3,19,19,19,16,6,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,76,31,31,76,76,76,76,76,255,255,255,255,255,255,255,255,3,48,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,20,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,76,76,255,255,255,255,255,255,255,255,20,51,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,255,255,255,18,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,76,31,76,76,31,31,31,76,76,255,255,255,255,255,255,16,19,25,255,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,6,19,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,76,31,31,76,76,76,76,76,76,76,255,255,255,255,255,6,16,22,24,255,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,76,
+31,31,31,31,31,31,31,31,76,31,31,76,76,31,76,76,76,76,255,255,255,255,255,255,6,19,23,255,255,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,255,255,255,255,26,16,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,76,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,255,6,48,255,255,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,6,16,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,16,48,255,255,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,25,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,255,255,6,29,255,255,255,71,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,3,3,255,255,255,25,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,16,23,255,255,255,49,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,23,3,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,76,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,6,23,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,18,3,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,18,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,71,255,255,255,255,255,255,255,255,19,6,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,76,255,255,255,255,17,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,255,255,255,255,255,255,255,255,255,19,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,255,255,255,6,255,255,255,255,51,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,20,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,4,255,25,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,3,255,255,255,255,255,255,255,255,255,19,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,255,19,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,19,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,3,16,16,255,255,255,49,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,6,18,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,31,255,255,255,3,19,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,29,6,255,255,255,255,255,255,255,255,255,255,76,31,76,76,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,255,255,255,19,255,255,255,255,49,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,26,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,6,27,255,255,255,19,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,53,3,6,6,3,255,255,255,255,16,24,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,18,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,22,7,16,19,19,16,3,3,255,25,16,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,255,255,255,16,26,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,16,6,16,20,23,19,16,6,2,22,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,30,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,52,255,255,16,18,24,20,16,255,19,16,255,255,255,255,255,255,255,255,255,255,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,16,19,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,55,62,19,255,255,3,19,20,19,16,255,19,3,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,20,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,71,53,62,255,255,255,6,16,16,6,3,18,6,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,76,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,31,255,255,255,255,16,19,255,255,255,255,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,61,55,71,53,62,20,255,255,255,255,3,3,255,18,19,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,48,255,255,255,255,71,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,53,71,59,62,255,255,255,255,255,255,255,7,16,3,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,3,23,6,255,255,24,71,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,53,71,71,55,62,20,255,255,255,255,255,3,255,20,16,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,255,3,19,255,255,255,51,52,55,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,55,52,53,53,62,62,255,255,255,255,255,3,2,22,16,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,30,51,52,55,62,62,62,62,62,62,62,62,62,62,62,62,62,59,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,57,53,53,71,71,53,57,62,20,255,255,255,255,255,18,19,6,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,255,255,255,255,255,255,255,255,255,6,49,51,51,55,57,62,62,62,62,62,62,62,62,62,62,62,57,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,61,59,55,55,53,71,53,71,53,71,55,62,62,255,255,255,255,29,23,16,3,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,255,255,255,255,255,255,255,255,255,3,51,49,51,51,55,55,57,61,62,62,62,62,62,62,62,62,59,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,55,53,55,71,71,71,53,71,71,71,71,53,59,62,20,255,255,255,28,24,6,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,255,255,255,255,255,30,51,49,51,56,53,55,58,57,62,62,62,62,62,62,62,57,55,55,62,62,62,62,62,62,62,62,62,62,62,62,55,55,55,71,71,71,53,52,71,71,53,71,71,53,59,62,62,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,255,255,255,255,255,22,49,51,51,53,57,59,62,62,62,62,62,62,62,62,55,55,57,55,55,55,57,62,62,62,62,62,62,62,62,62,59,57,55,55,55,55,53,55,53,53,71,71,53,57,62,61,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,76,255,255,255,255,255,255,255,255,6,51,50,53,61,62,62,62,62,62,62,62,62,62,62,62,62,62,59,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,59,57,55,55,59,59,61,55,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,255,255,255,255,255,255,255,255,49,52,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,59,30,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,3,255,255,255,255,255,255,30,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,57,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,31,255,255,255,255,255,255,255,53,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,55,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,255,255,255,255,255,255,51,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,29,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,76,76,76,255,255,255,255,255,255,255,57,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,16,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,76,76,255,255,255,255,255,255,49,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,58,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,255,255,255,255,255,255,255,52,62,62,62,62,62,62,62,62,62,62,62,62,57,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,18,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,31,76,76,31,255,255,255,255,255,255,51,55,62,62,62,62,62,62,62,62,62,62,53,52,53,52,53,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,16,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,255,255,255,3,3,255,55,59,62,62,62,62,62,62,62,52,51,52,53,51,52,52,52,53,59,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,51,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,76,76,2,6,16,3,3,255,71,62,62,62,62,62,62,62,71,53,71,52,52,52,53,51,71,71,55,59,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,25,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,4,7,16,6,3,255,255,57,62,62,62,62,62,71,71,71,52,52,51,52,51,71,53,52,51,55,57,59,59,62,62,62,62,62,62,62,62,62,62,62,62,62,51,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,4,3,3,255,255,255,71,62,62,61,59,53,71,53,51,51,51,51,53,71,53,52,51,53,52,53,55,59,59,62,62,62,62,62,62,62,62,62,62,62,62,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,4,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,62,62,59,55,71,52,51,52,51,71,51,54,53,52,52,52,53,51,53,53,53,55,59,62,62,62,62,62,62,62,62,62,62,52,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,71,59,57,53,71,71,51,51,52,48,33,33,33,49,56,51,50,53,51,56,53,71,53,60,62,62,62,62,62,62,62,62,58,19,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,76,31,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,255,255,255,255,255,56,53,53,71,51,52,50,50,32,33,32,32,33,32,33,32,33,50,50,53,52,50,71,53,60,62,62,62,62,62,62,55,53,255,255,255,255,255,255,255,255,255,255,255,255,255,255,8,76,76,31,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,71,71,71,53,54,51,33,32,32,33,34,34,33,34,33,33,33,33,34,50,52,52,71,53,53,62,62,62,62,62,62,55,23,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,71,52,52,51,52,33,32,32,34,34,35,35,35,35,34,34,34,34,33,34,72,52,51,52,52,52,62,62,62,71,52,51,255,255,255,255,255,20,20,72,20,255,255,255,255,255,255,76,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,51,53,71,52,32,33,32,34,35,67,38,35,35,35,35,35,35,34,35,34,34,33,52,71,71,71,55,53,55,52,53,71,255,255,255,255,255,49,48,49,48,6,255,255,255,255,255,76,76,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,6,51,71,71,32,33,32,34,34,40,40,37,67,35,35,36,35,35,35,35,35,34,34,34,33,55,55,55,53,71,71,71,255,255,255,255,255,49,48,49,48,49,18,255,255,255,255,76,76,76,31,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,76,255,255,16,51,52,33,32,32,13,32,33,33,32,21,13,21,13,33,34,35,35,35,35,35,35,35,34,33,50,53,51,71,71,53,255,255,255,255,255,72,48,72,48,17,255,255,3,255,255,76,76,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,51,33,32,12,32,38,41,40,46,47,47,67,39,40,33,15,10,33,34,35,35,35,37,35,39,34,33,34,56,53,3,255,255,255,255,49,48,49,49,49,16,255,255,255,255,76,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,255,10,32,9,33,42,41,41,41,47,47,47,47,47,67,40,47,67,34,17,15,35,35,36,36,36,36,35,34,33,7,255,255,255,255,255,48,49,28,255,255,255,255,255,255,76,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,3,12,14,35,39,39,41,41,41,46,40,46,40,67,47,67,40,40,67,40,67,15,33,67,36,36,36,36,35,35,32,3,255,255,255,255,49,25,255,255,255,255,255,255,255,76,76,31,31,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,76,255,255,255,15,32,34,39,35,39,41,36,41,41,42,45,46,47,51,46,67,47,40,40,47,67,33,33,67,35,36,35,35,35,47,7,255,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,76,255,255,255,34,34,34,36,36,39,41,41,39,41,46,41,45,47,47,47,40,40,67,40,67,40,47,40,34,67,34,37,36,35,67,9,3,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,76,255,255,255,34,33,35,35,35,39,41,40,41,40,46,42,42,46,67,47,50,47,39,47,67,46,40,67,46,42,67,33,35,36,39,9,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,31,31,76,255,255,255,33,34,34,35,39,39,39,40,41,38,42,40,45,46,47,47,47,47,47,67,40,40,67,42,40,67,42,33,15,40,39,15,3,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,76,255,255,255,9,33,33,34,36,39,38,40,39,41,40,41,40,42,67,47,47,50,47,40,47,67,47,40,67,47,67,46,46,47,40,15,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,255,255,255,255,8,34,34,35,39,39,41,41,41,40,41,46,42,46,67,47,47,56,47,67,40,40,67,47,46,46,67,47,42,35,6,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,76,255,255,255,255,255,4,33,34,36,39,39,41,39,46,40,40,42,45,47,47,67,56,47,47,47,67,40,40,67,45,40,36,33,8,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,255,255,255,255,255,62,62,34,34,39,41,46,41,39,41,46,40,45,46,47,47,47,67,46,40,40,40,40,34,34,32,62,62,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,31,76,76,255,255,255,255,49,62,62,255,34,33,38,39,46,41,40,41,40,40,40,40,67,47,40,46,40,34,15,27,53,62,62,62,62,255,3,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,31,31,76,255,255,255,255,52,62,26,255,255,15,36,34,34,40,44,40,40,40,34,32,33,46,46,45,36,255,255,255,255,255,62,62,62,62,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,76,255,255,255,255,55,62,255,255,2,255,8,39,40,40,41,40,67,67,45,45,45,35,15,8,255,255,255,255,255,255,255,62,62,62,71,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,76,255,255,255,255,53,19,255,255,255,255,255,62,34,32,34,34,33,34,33,32,9,56,62,255,255,255,255,255,255,255,255,71,62,62,71,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,31,31,31,76,76,255,255,255,53,62,16,255,255,3,49,3,57,62,26,255,4,255,255,255,3,48,71,62,255,255,255,255,255,255,255,255,71,62,62,71,255,255,255,255,255,255,255,255,255,255,255,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,255,255,255,53,62,255,255,255,16,49,255,59,62,48,3,3,255,255,20,255,55,55,62,255,255,255,255,255,3,255,255,71,62,62,71,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,255,255,255,55,62,255,255,255,72,49,255,62,62,48,6,16,22,25,19,255,71,62,62,255,255,255,255,255,20,20,3,62,62,62,53,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,76,76,255,255,255,49,62,255,255,3,49,25,255,62,62,48,6,6,6,16,255,255,53,62,62,62,255,255,255,6,50,72,255,62,62,62,30,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,49,62,7,255,3,25,17,62,62,62,48,255,255,255,6,255,255,56,59,62,62,3,255,255,49,49,6,61,62,62,62,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,30,62,62,30,22,23,62,62,62,62,255,255,255,255,3,255,255,71,55,62,62,62,72,16,255,25,62,62,62,62,49,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,30,51,71,62,62,62,62,62,62,22,255,255,255,255,255,255,255,49,55,61,62,62,62,62,62,62,62,62,71,49,49,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,19,49,51,52,53,52,55,56,51,19,255,255,255,255,255,255,255,23,49,51,57,62,62,62,62,62,55,52,49,49,3,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,255,255,255,255,3,30,51,51,53,53,52,49,72,255,7,255,255,255,255,3,255,255,49,49,51,51,52,52,53,53,55,52,50,72,255,255,6,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,16,30,49,52,51,49,72,255,255,19,255,255,255,255,255,255,255,255,49,49,49,51,51,51,52,53,52,51,255,255,16,255,255,255,255,255,255,255,255,255,255,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,6,30,49,49,48,255,6,27,6,255,255,255,255,255,3,255,255,255,49,49,49,49,51,49,51,51,255,255,30,6,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,76,255,255,255,255,255,3,255,255,255,255,3,255,26,16,255,255,255,255,255,255,255,255,255,255,255,16,49,48,48,48,16,255,255,26,17,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,3,6,3,255,3,16,18,16,255,255,255,255,255,255,255,255,255,3,255,255,255,255,255,255,255,255,255,48,26,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,255,6,6,16,6,6,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,16,18,18,7,255,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,5,76,76,31,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,6,6,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,31,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,16,19,6,3,3,255,255,255,255,255,255,255,255,255,76,76,76,31,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,20,23,20,19,16,7,7,6,3,255,255,255,255,4,76,76,31,31,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,20,30,30,26,20,20,16,16,6,3,255,255,255,76,76,76,31,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,20,48,48,48,26,20,20,17,6,255,255,255,255,76,76,76,31,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,18,30,49,49,30,22,17,6,255,255,255,255,76,76,76,76,31,76,76,31,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,6,20,26,48,30,25,19,7,3,255,255,255,255,76,76,31,31,31,31,76,31,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,16,19,23,26,25,19,16,255,255,255,255,255,76,76,76,76,76,76,76,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,6,16,18,19,16,3,255,255,255,255,255,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,31,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,6,3,255,255,255,255,255,76,76,31,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,31,76,76,76,5,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,76,76,76,76,76,4,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,31,31,31,31,31,76,76,31,31,76,31,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,31,76,76,31,31,76,31,31,31,31,76,76,31,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,76,76,31,31,31,76,76,76,76,31,31,76,76,76,76,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,76,76,76,76,76,31,76,76,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,76,76,76,31,31,31,31,31,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,255,255,255,255,255,255,255,255,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,
+};
+
+MWIMAGEHDR image_penguin = {
+ 128, 151, /* width, height*/
+ 1, 8, /* planes, bpp*/
+ 128, 1, /* pitch, bytesperpixel*/
+ 1, 256, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/max4.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/max4.bmp
===================================================================
--- bmp/max4.bmp (nonexistent)
+++ bmp/max4.bmp (revision 174)
bmp/max4.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/rle8.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/rle8.bmp
===================================================================
--- bmp/rle8.bmp (nonexistent)
+++ bmp/rle8.bmp (revision 174)
bmp/rle8.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/min4.c
===================================================================
--- bmp/min4.c (nonexistent)
+++ bmp/min4.c (revision 174)
@@ -0,0 +1,50 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_min4 converted from min4.bmp*/
+
+static MWPALENTRY palette[16] = {
+ RGBDEF( 0, 0, 0 ), /* pal 0*/
+ RGBDEF( 191, 0, 0 ), /* pal 1*/
+ RGBDEF( 0, 191, 0 ), /* pal 2*/
+ RGBDEF( 191, 191, 0 ), /* pal 3*/
+ RGBDEF( 0, 0, 191 ), /* pal 4*/
+ RGBDEF( 191, 0, 191 ), /* pal 5*/
+ RGBDEF( 0, 191, 191 ), /* pal 6*/
+ RGBDEF( 192, 192, 192 ), /* pal 7*/
+ RGBDEF( 128, 128, 128 ), /* pal 8*/
+ RGBDEF( 255, 0, 0 ), /* pal 9*/
+ RGBDEF( 0, 255, 0 ), /* pal 10*/
+ RGBDEF( 255, 255, 0 ), /* pal 11*/
+ RGBDEF( 0, 0, 255 ), /* pal 12*/
+ RGBDEF( 255, 0, 255 ), /* pal 13*/
+ RGBDEF( 0, 255, 255 ), /* pal 14*/
+ RGBDEF( 255, 255, 255 ), /* pal 15*/
+};
+
+static MWUCHAR imagebits[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x77,0x00,0x00,0x00,0x77,0x77,0x80,
+0xf7,0x77,0x00,0x00,0x00,0x77,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,
+};
+
+MWIMAGEHDR image_min4 = {
+ 16, 14, /* width, height*/
+ 1, 4, /* planes, bpp*/
+ 8, 1, /* pitch, bytesperpixel*/
+ 1, 16, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/max4.c
===================================================================
--- bmp/max4.c (nonexistent)
+++ bmp/max4.c (revision 174)
@@ -0,0 +1,50 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_max4 converted from max4.bmp*/
+
+static MWPALENTRY palette[16] = {
+ RGBDEF( 0, 0, 0 ), /* pal 0*/
+ RGBDEF( 191, 0, 0 ), /* pal 1*/
+ RGBDEF( 0, 191, 0 ), /* pal 2*/
+ RGBDEF( 191, 191, 0 ), /* pal 3*/
+ RGBDEF( 0, 0, 191 ), /* pal 4*/
+ RGBDEF( 191, 0, 191 ), /* pal 5*/
+ RGBDEF( 0, 191, 191 ), /* pal 6*/
+ RGBDEF( 192, 192, 192 ), /* pal 7*/
+ RGBDEF( 128, 128, 128 ), /* pal 8*/
+ RGBDEF( 255, 0, 0 ), /* pal 9*/
+ RGBDEF( 0, 255, 0 ), /* pal 10*/
+ RGBDEF( 255, 255, 0 ), /* pal 11*/
+ RGBDEF( 0, 0, 255 ), /* pal 12*/
+ RGBDEF( 255, 0, 255 ), /* pal 13*/
+ RGBDEF( 0, 255, 255 ), /* pal 14*/
+ RGBDEF( 255, 255, 255 ), /* pal 15*/
+};
+
+static MWUCHAR imagebits[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xf7,0x70,0x00,0x00,0x00,0x00,0x77,0x80,
+0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80,
+0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80,
+0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80,
+0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80,
+0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80,
+0xf7,0x70,0x77,0x77,0x77,0x70,0x77,0x80,
+0xf7,0x70,0x00,0x00,0x00,0x00,0x77,0x80,
+0xf7,0x70,0x00,0x00,0x00,0x00,0x77,0x80,
+0xf7,0x77,0x77,0x77,0x77,0x77,0x77,0x80,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,
+};
+
+MWIMAGEHDR image_max4 = {
+ 16, 14, /* width, height*/
+ 1, 4, /* planes, bpp*/
+ 8, 1, /* pitch, bytesperpixel*/
+ 1, 16, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/rle8.c
===================================================================
--- bmp/rle8.c (nonexistent)
+++ bmp/rle8.c (revision 174)
@@ -0,0 +1,476 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_rle8 converted from rle8.bmp*/
+
+static MWPALENTRY palette[256] = {
+ RGBDEF( 8, 8, 16 ), /* pal 0*/
+ RGBDEF( 16, 16, 24 ), /* pal 1*/
+ RGBDEF( 24, 16, 24 ), /* pal 2*/
+ RGBDEF( 74, 16, 24 ), /* pal 3*/
+ RGBDEF( 90, 16, 24 ), /* pal 4*/
+ RGBDEF( 33, 33, 33 ), /* pal 5*/
+ RGBDEF( 41, 24, 33 ), /* pal 6*/
+ RGBDEF( 41, 33, 33 ), /* pal 7*/
+ RGBDEF( 74, 33, 33 ), /* pal 8*/
+ RGBDEF( 24, 24, 41 ), /* pal 9*/
+ RGBDEF( 41, 33, 41 ), /* pal 10*/
+ RGBDEF( 49, 33, 41 ), /* pal 11*/
+ RGBDEF( 49, 49, 41 ), /* pal 12*/
+ RGBDEF( 57, 41, 41 ), /* pal 13*/
+ RGBDEF( 57, 49, 41 ), /* pal 14*/
+ RGBDEF( 74, 41, 41 ), /* pal 15*/
+ RGBDEF( 74, 49, 41 ), /* pal 16*/
+ RGBDEF( 90, 49, 41 ), /* pal 17*/
+ RGBDEF( 107, 49, 41 ), /* pal 18*/
+ RGBDEF( 115, 41, 41 ), /* pal 19*/
+ RGBDEF( 123, 57, 41 ), /* pal 20*/
+ RGBDEF( 57, 49, 49 ), /* pal 21*/
+ RGBDEF( 90, 66, 49 ), /* pal 22*/
+ RGBDEF( 99, 82, 49 ), /* pal 23*/
+ RGBDEF( 115, 66, 49 ), /* pal 24*/
+ RGBDEF( 33, 41, 57 ), /* pal 25*/
+ RGBDEF( 49, 41, 57 ), /* pal 26*/
+ RGBDEF( 49, 49, 57 ), /* pal 27*/
+ RGBDEF( 57, 66, 57 ), /* pal 28*/
+ RGBDEF( 82, 57, 57 ), /* pal 29*/
+ RGBDEF( 90, 66, 57 ), /* pal 30*/
+ RGBDEF( 107, 66, 57 ), /* pal 31*/
+ RGBDEF( 107, 82, 57 ), /* pal 32*/
+ RGBDEF( 123, 74, 57 ), /* pal 33*/
+ RGBDEF( 123, 82, 57 ), /* pal 34*/
+ RGBDEF( 74, 82, 66 ), /* pal 35*/
+ RGBDEF( 99, 82, 66 ), /* pal 36*/
+ RGBDEF( 123, 99, 66 ), /* pal 37*/
+ RGBDEF( 41, 57, 74 ), /* pal 38*/
+ RGBDEF( 57, 49, 74 ), /* pal 39*/
+ RGBDEF( 57, 66, 74 ), /* pal 40*/
+ RGBDEF( 66, 82, 74 ), /* pal 41*/
+ RGBDEF( 90, 66, 74 ), /* pal 42*/
+ RGBDEF( 107, 90, 74 ), /* pal 43*/
+ RGBDEF( 115, 74, 74 ), /* pal 44*/
+ RGBDEF( 115, 99, 74 ), /* pal 45*/
+ RGBDEF( 123, 90, 74 ), /* pal 46*/
+ RGBDEF( 132, 99, 74 ), /* pal 47*/
+ RGBDEF( 132, 115, 74 ), /* pal 48*/
+ RGBDEF( 90, 82, 82 ), /* pal 49*/
+ RGBDEF( 99, 99, 82 ), /* pal 50*/
+ RGBDEF( 41, 66, 90 ), /* pal 51*/
+ RGBDEF( 33, 82, 148 ), /* pal 52*/
+ RGBDEF( 49, 66, 115 ), /* pal 53*/
+ RGBDEF( 49, 66, 123 ), /* pal 54*/
+ RGBDEF( 49, 82, 140 ), /* pal 55*/
+ RGBDEF( 49, 90, 156 ), /* pal 56*/
+ RGBDEF( 57, 82, 107 ), /* pal 57*/
+ RGBDEF( 57, 82, 132 ), /* pal 58*/
+ RGBDEF( 66, 66, 90 ), /* pal 59*/
+ RGBDEF( 66, 74, 90 ), /* pal 60*/
+ RGBDEF( 66, 82, 148 ), /* pal 61*/
+ RGBDEF( 66, 99, 132 ), /* pal 62*/
+ RGBDEF( 66, 99, 148 ), /* pal 63*/
+ RGBDEF( 74, 82, 90 ), /* pal 64*/
+ RGBDEF( 79, 98, 109 ), /* pal 65*/
+ RGBDEF( 107, 90, 107 ), /* pal 66*/
+ RGBDEF( 103, 107, 107 ), /* pal 67*/
+ RGBDEF( 123, 107, 94 ), /* pal 68*/
+ RGBDEF( 115, 107, 123 ), /* pal 69*/
+ RGBDEF( 127, 115, 107 ), /* pal 70*/
+ RGBDEF( 74, 99, 132 ), /* pal 71*/
+ RGBDEF( 82, 107, 132 ), /* pal 72*/
+ RGBDEF( 90, 123, 132 ), /* pal 73*/
+ RGBDEF( 115, 132, 132 ), /* pal 74*/
+ RGBDEF( 107, 123, 148 ), /* pal 75*/
+ RGBDEF( 74, 123, 156 ), /* pal 76*/
+ RGBDEF( 99, 107, 156 ), /* pal 77*/
+ RGBDEF( 123, 140, 156 ), /* pal 78*/
+ RGBDEF( 99, 123, 165 ), /* pal 79*/
+ RGBDEF( 49, 90, 173 ), /* pal 80*/
+ RGBDEF( 57, 99, 173 ), /* pal 81*/
+ RGBDEF( 66, 107, 173 ), /* pal 82*/
+ RGBDEF( 49, 90, 181 ), /* pal 83*/
+ RGBDEF( 66, 107, 181 ), /* pal 84*/
+ RGBDEF( 66, 115, 181 ), /* pal 85*/
+ RGBDEF( 90, 115, 181 ), /* pal 86*/
+ RGBDEF( 107, 140, 181 ), /* pal 87*/
+ RGBDEF( 66, 107, 189 ), /* pal 88*/
+ RGBDEF( 74, 115, 189 ), /* pal 89*/
+ RGBDEF( 74, 123, 198 ), /* pal 90*/
+ RGBDEF( 90, 132, 198 ), /* pal 91*/
+ RGBDEF( 99, 140, 198 ), /* pal 92*/
+ RGBDEF( 115, 148, 198 ), /* pal 93*/
+ RGBDEF( 123, 115, 198 ), /* pal 94*/
+ RGBDEF( 82, 132, 206 ), /* pal 95*/
+ RGBDEF( 99, 148, 206 ), /* pal 96*/
+ RGBDEF( 115, 148, 206 ), /* pal 97*/
+ RGBDEF( 115, 156, 206 ), /* pal 98*/
+ RGBDEF( 57, 107, 214 ), /* pal 99*/
+ RGBDEF( 74, 132, 214 ), /* pal 100*/
+ RGBDEF( 107, 148, 214 ), /* pal 101*/
+ RGBDEF( 99, 148, 222 ), /* pal 102*/
+ RGBDEF( 115, 165, 222 ), /* pal 103*/
+ RGBDEF( 140, 41, 24 ), /* pal 104*/
+ RGBDEF( 140, 49, 41 ), /* pal 105*/
+ RGBDEF( 140, 99, 66 ), /* pal 106*/
+ RGBDEF( 148, 66, 33 ), /* pal 107*/
+ RGBDEF( 148, 66, 49 ), /* pal 108*/
+ RGBDEF( 148, 74, 57 ), /* pal 109*/
+ RGBDEF( 148, 90, 57 ), /* pal 110*/
+ RGBDEF( 156, 82, 57 ), /* pal 111*/
+ RGBDEF( 165, 49, 41 ), /* pal 112*/
+ RGBDEF( 165, 66, 49 ), /* pal 113*/
+ RGBDEF( 165, 90, 57 ), /* pal 114*/
+ RGBDEF( 189, 71, 55 ), /* pal 115*/
+ RGBDEF( 165, 99, 66 ), /* pal 116*/
+ RGBDEF( 148, 115, 74 ), /* pal 117*/
+ RGBDEF( 165, 82, 74 ), /* pal 118*/
+ RGBDEF( 165, 115, 74 ), /* pal 119*/
+ RGBDEF( 156, 111, 82 ), /* pal 120*/
+ RGBDEF( 152, 111, 115 ), /* pal 121*/
+ RGBDEF( 181, 99, 66 ), /* pal 122*/
+ RGBDEF( 181, 115, 74 ), /* pal 123*/
+ RGBDEF( 181, 115, 82 ), /* pal 124*/
+ RGBDEF( 198, 103, 70 ), /* pal 125*/
+ RGBDEF( 198, 123, 74 ), /* pal 126*/
+ RGBDEF( 219, 109, 71 ), /* pal 127*/
+ RGBDEF( 231, 123, 74 ), /* pal 128*/
+ RGBDEF( 145, 134, 87 ), /* pal 129*/
+ RGBDEF( 162, 140, 98 ), /* pal 130*/
+ RGBDEF( 151, 138, 130 ), /* pal 131*/
+ RGBDEF( 181, 123, 82 ), /* pal 132*/
+ RGBDEF( 189, 140, 90 ), /* pal 133*/
+ RGBDEF( 178, 140, 126 ), /* pal 134*/
+ RGBDEF( 189, 156, 82 ), /* pal 135*/
+ RGBDEF( 198, 132, 82 ), /* pal 136*/
+ RGBDEF( 198, 140, 82 ), /* pal 137*/
+ RGBDEF( 214, 140, 82 ), /* pal 138*/
+ RGBDEF( 198, 156, 90 ), /* pal 139*/
+ RGBDEF( 214, 132, 90 ), /* pal 140*/
+ RGBDEF( 201, 155, 112 ), /* pal 141*/
+ RGBDEF( 239, 131, 82 ), /* pal 142*/
+ RGBDEF( 247, 148, 82 ), /* pal 143*/
+ RGBDEF( 231, 148, 90 ), /* pal 144*/
+ RGBDEF( 247, 152, 90 ), /* pal 145*/
+ RGBDEF( 255, 165, 90 ), /* pal 146*/
+ RGBDEF( 232, 156, 109 ), /* pal 147*/
+ RGBDEF( 251, 169, 115 ), /* pal 148*/
+ RGBDEF( 214, 173, 115 ), /* pal 149*/
+ RGBDEF( 247, 178, 101 ), /* pal 150*/
+ RGBDEF( 239, 181, 123 ), /* pal 151*/
+ RGBDEF( 240, 193, 113 ), /* pal 152*/
+ RGBDEF( 255, 198, 123 ), /* pal 153*/
+ RGBDEF( 255, 214, 132 ), /* pal 154*/
+ RGBDEF( 132, 156, 181 ), /* pal 155*/
+ RGBDEF( 132, 173, 206 ), /* pal 156*/
+ RGBDEF( 140, 123, 148 ), /* pal 157*/
+ RGBDEF( 140, 165, 165 ), /* pal 158*/
+ RGBDEF( 140, 173, 198 ), /* pal 159*/
+ RGBDEF( 140, 173, 222 ), /* pal 160*/
+ RGBDEF( 140, 181, 231 ), /* pal 161*/
+ RGBDEF( 148, 181, 222 ), /* pal 162*/
+ RGBDEF( 148, 189, 247 ), /* pal 163*/
+ RGBDEF( 156, 156, 165 ), /* pal 164*/
+ RGBDEF( 156, 165, 165 ), /* pal 165*/
+ RGBDEF( 156, 165, 189 ), /* pal 166*/
+ RGBDEF( 156, 173, 198 ), /* pal 167*/
+ RGBDEF( 156, 189, 222 ), /* pal 168*/
+ RGBDEF( 156, 189, 231 ), /* pal 169*/
+ RGBDEF( 165, 198, 198 ), /* pal 170*/
+ RGBDEF( 165, 198, 222 ), /* pal 171*/
+ RGBDEF( 165, 206, 173 ), /* pal 172*/
+ RGBDEF( 173, 198, 239 ), /* pal 173*/
+ RGBDEF( 173, 206, 247 ), /* pal 174*/
+ RGBDEF( 181, 181, 198 ), /* pal 175*/
+ RGBDEF( 181, 198, 189 ), /* pal 176*/
+ RGBDEF( 181, 198, 239 ), /* pal 177*/
+ RGBDEF( 181, 206, 206 ), /* pal 178*/
+ RGBDEF( 181, 206, 231 ), /* pal 179*/
+ RGBDEF( 189, 173, 148 ), /* pal 180*/
+ RGBDEF( 206, 181, 140 ), /* pal 181*/
+ RGBDEF( 231, 173, 140 ), /* pal 182*/
+ RGBDEF( 247, 198, 140 ), /* pal 183*/
+ RGBDEF( 255, 206, 140 ), /* pal 184*/
+ RGBDEF( 231, 198, 148 ), /* pal 185*/
+ RGBDEF( 255, 222, 148 ), /* pal 186*/
+ RGBDEF( 198, 185, 156 ), /* pal 187*/
+ RGBDEF( 210, 185, 172 ), /* pal 188*/
+ RGBDEF( 222, 181, 189 ), /* pal 189*/
+ RGBDEF( 189, 198, 198 ), /* pal 190*/
+ RGBDEF( 238, 198, 165 ), /* pal 191*/
+ RGBDEF( 222, 206, 201 ), /* pal 192*/
+ RGBDEF( 247, 239, 181 ), /* pal 193*/
+ RGBDEF( 189, 198, 222 ), /* pal 194*/
+ RGBDEF( 198, 214, 222 ), /* pal 195*/
+ RGBDEF( 206, 214, 222 ), /* pal 196*/
+ RGBDEF( 255, 247, 222 ), /* pal 197*/
+ RGBDEF( 198, 214, 231 ), /* pal 198*/
+ RGBDEF( 206, 214, 239 ), /* pal 199*/
+ RGBDEF( 214, 222, 239 ), /* pal 200*/
+ RGBDEF( 231, 231, 239 ), /* pal 201*/
+ RGBDEF( 198, 214, 247 ), /* pal 202*/
+ RGBDEF( 198, 222, 247 ), /* pal 203*/
+ RGBDEF( 214, 231, 247 ), /* pal 204*/
+ RGBDEF( 231, 239, 255 ), /* pal 205*/
+ RGBDEF( 247, 247, 255 ), /* pal 206*/
+ RGBDEF( 0, 0, 0 ), /* pal 207*/
+ RGBDEF( 0, 0, 0 ), /* pal 208*/
+ RGBDEF( 0, 0, 0 ), /* pal 209*/
+ RGBDEF( 0, 0, 0 ), /* pal 210*/
+ RGBDEF( 0, 0, 0 ), /* pal 211*/
+ RGBDEF( 0, 0, 0 ), /* pal 212*/
+ RGBDEF( 0, 0, 0 ), /* pal 213*/
+ RGBDEF( 0, 0, 0 ), /* pal 214*/
+ RGBDEF( 0, 0, 0 ), /* pal 215*/
+ RGBDEF( 0, 0, 0 ), /* pal 216*/
+ RGBDEF( 0, 0, 0 ), /* pal 217*/
+ RGBDEF( 0, 0, 0 ), /* pal 218*/
+ RGBDEF( 0, 0, 0 ), /* pal 219*/
+ RGBDEF( 0, 0, 0 ), /* pal 220*/
+ RGBDEF( 0, 0, 0 ), /* pal 221*/
+ RGBDEF( 0, 0, 0 ), /* pal 222*/
+ RGBDEF( 0, 0, 0 ), /* pal 223*/
+ RGBDEF( 0, 0, 0 ), /* pal 224*/
+ RGBDEF( 0, 0, 0 ), /* pal 225*/
+ RGBDEF( 0, 0, 0 ), /* pal 226*/
+ RGBDEF( 0, 0, 0 ), /* pal 227*/
+ RGBDEF( 0, 0, 0 ), /* pal 228*/
+ RGBDEF( 0, 0, 0 ), /* pal 229*/
+ RGBDEF( 0, 0, 0 ), /* pal 230*/
+ RGBDEF( 0, 0, 0 ), /* pal 231*/
+ RGBDEF( 0, 0, 0 ), /* pal 232*/
+ RGBDEF( 0, 0, 0 ), /* pal 233*/
+ RGBDEF( 0, 0, 0 ), /* pal 234*/
+ RGBDEF( 0, 0, 0 ), /* pal 235*/
+ RGBDEF( 0, 0, 0 ), /* pal 236*/
+ RGBDEF( 0, 0, 0 ), /* pal 237*/
+ RGBDEF( 0, 0, 0 ), /* pal 238*/
+ RGBDEF( 0, 0, 0 ), /* pal 239*/
+ RGBDEF( 0, 0, 0 ), /* pal 240*/
+ RGBDEF( 0, 0, 0 ), /* pal 241*/
+ RGBDEF( 0, 0, 0 ), /* pal 242*/
+ RGBDEF( 0, 0, 0 ), /* pal 243*/
+ RGBDEF( 0, 0, 0 ), /* pal 244*/
+ RGBDEF( 0, 0, 0 ), /* pal 245*/
+ RGBDEF( 0, 0, 0 ), /* pal 246*/
+ RGBDEF( 0, 0, 0 ), /* pal 247*/
+ RGBDEF( 0, 0, 0 ), /* pal 248*/
+ RGBDEF( 0, 0, 0 ), /* pal 249*/
+ RGBDEF( 0, 0, 0 ), /* pal 250*/
+ RGBDEF( 0, 0, 0 ), /* pal 251*/
+ RGBDEF( 0, 0, 0 ), /* pal 252*/
+ RGBDEF( 0, 0, 0 ), /* pal 253*/
+ RGBDEF( 0, 0, 0 ), /* pal 254*/
+ RGBDEF( 0, 0, 0 ), /* pal 255*/
+};
+
+static MWUCHAR imagebits[] = {
+5,5,13,12,22,11,5,2,2,2,5,2,2,2,1,2,5,2,13,7,11,5,2,2,2,5,2,5,2,1,1,1,1,2,5,2,2,2,2,9,1,1,2,14,1,1,1,1,0,1,1,1,0,2,2,2,2,2,1,1,1,0,1,0,1,0,1,0,0,2,0,2,1,0,1,1,1,1,1,1,1,2,0,0,2,0,2,1,0,2,0,1,7,13,0,1,0,2,1,0,1,1,1,1,0,1,2,2,1,2,2,2,1,1,1,1,2,2,1,0,1,5,1,2,1,2,2,1,1,2,16,13,2,2,2,2,2,1,1,1,1,1,0,2,0,2,1,1,1,14,22,133,30,29,11,5,7,6,7,7,15,16,15,13,13,0,2,6,1,14,23,17,16,16,16,30,34,6,34,18,47,13,2,7,5,13,1,2,2,1,2,5,2,1,2,1,1,1,2,1,0,1,1,2,0,1,2,2,1,2,5,1,2,0,2,0,1,1,0,2,1,2,2,5,1,1,1,1,1,1,1,2,5,2,1,1,0,2,1,1,1,1,1,2,6,2,1,2,13,2,1,2,2,2,5,1,6,7,6,2,7,6,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,1,2,2,2,11,2,10,12,2,2,2,5,2,2,2,10,1,1,2,1,2,2,1,1,1,5,2,5,2,1,2,2,9,5,2,2,
+13,2,14,21,13,7,2,2,6,7,12,5,5,6,1,2,2,5,7,11,2,2,1,5,2,11,2,2,2,1,1,2,1,1,2,5,2,5,2,1,2,1,2,2,1,1,1,0,2,1,1,1,1,0,2,0,1,0,2,1,1,0,2,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,0,0,1,1,1,2,1,0,1,1,2,2,2,1,1,5,2,1,0,1,1,2,7,7,6,1,2,5,2,2,5,2,1,1,1,0,2,2,1,1,1,1,1,1,1,2,5,1,1,0,7,7,1,2,22,7,22,6,1,2,1,2,1,0,1,1,2,2,2,23,14,20,14,7,7,13,7,7,5,2,13,34,13,6,0,2,1,5,5,13,14,16,14,13,24,31,11,23,17,22,13,13,2,6,5,2,2,1,1,1,2,2,2,2,1,1,1,2,1,1,6,1,1,0,1,2,1,2,6,2,2,1,2,2,1,0,2,0,2,0,2,1,1,2,1,1,1,1,1,2,1,1,2,2,1,1,1,0,1,1,1,1,2,6,6,1,2,2,7,2,2,2,1,5,2,2,6,6,6,6,2,2,6,6,7,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,5,6,6,6,6,2,2,6,2,2,2,5,6,2,1,1,1,1,2,1,2,5,1,2,9,11,5,2,5,9,12,2,9,0,
+2,2,6,2,5,13,2,5,5,7,2,2,2,2,2,2,5,2,5,1,1,1,1,1,1,5,1,1,1,2,2,5,1,1,1,2,2,2,2,1,1,1,1,0,1,1,0,2,1,1,1,0,1,1,1,0,2,1,0,2,0,2,0,1,2,1,2,1,1,1,1,1,1,1,2,5,14,2,1,1,1,1,1,1,1,0,2,1,1,0,1,0,2,1,0,2,1,1,1,1,2,6,2,1,2,5,2,2,5,2,2,1,1,2,1,0,1,2,1,2,1,2,1,1,1,2,7,1,5,2,1,2,2,6,2,1,2,11,2,6,1,1,1,1,1,0,1,1,1,1,1,1,2,6,2,13,7,7,2,23,13,21,2,1,2,13,2,7,5,2,6,1,2,13,23,17,16,29,14,14,29,1,7,2,6,1,2,1,1,2,2,5,2,1,1,1,1,2,5,5,2,2,1,1,1,1,1,2,2,2,1,2,2,2,0,2,0,2,0,2,0,2,1,2,1,1,1,1,1,1,1,1,2,6,0,1,1,1,1,1,1,1,1,2,7,6,1,2,5,2,6,2,2,2,2,11,6,7,6,2,2,5,6,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,12,5,11,10,7,6,2,2,7,12,1,11,2,1,1,1,1,1,1,1,1,1,2,5,26,6,1,9,9,2,25,2,1,
+13,11,2,2,2,5,6,5,7,7,6,2,2,2,5,2,2,2,2,5,2,5,2,2,2,2,5,2,2,1,1,1,2,5,1,2,6,2,1,2,1,1,1,1,0,2,1,0,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,2,1,2,2,2,2,5,1,1,2,0,1,1,1,1,1,1,1,2,2,1,1,0,2,1,1,1,1,0,1,1,1,2,1,2,1,5,2,2,5,1,2,5,2,2,2,2,1,1,0,0,2,1,2,2,5,2,2,1,0,1,7,7,2,7,2,5,1,1,1,2,2,14,22,16,6,2,2,2,2,1,1,1,1,0,2,2,6,1,2,2,16,11,2,2,2,1,2,1,1,2,13,2,5,5,7,2,5,2,14,14,14,14,7,13,7,2,2,106,16,2,2,5,2,1,2,2,2,1,1,1,1,2,2,2,5,2,6,1,1,1,0,1,1,2,5,1,2,1,1,0,2,0,2,0,2,0,1,1,1,1,1,1,1,2,1,1,1,2,2,1,1,1,2,1,1,1,1,6,1,6,2,2,1,1,2,5,1,2,5,1,11,2,11,6,2,2,2,2,7,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,2,10,11,10,10,13,11,2,2,2,6,2,9,11,1,1,1,1,1,1,1,1,2,2,5,2,5,1,2,2,2,2,5,2,
+21,21,13,2,11,7,11,7,14,13,7,13,5,2,2,5,2,5,16,2,2,1,1,5,2,2,2,6,1,1,1,1,2,2,5,2,2,2,1,2,2,0,1,1,1,1,0,2,1,1,0,2,2,1,1,1,0,2,1,1,1,1,1,5,1,2,2,1,1,2,2,2,1,1,2,0,2,0,2,2,1,2,2,2,1,1,1,0,2,2,1,1,1,1,2,5,2,2,5,0,1,2,5,0,1,1,2,2,2,1,1,1,0,2,1,1,0,2,1,1,1,1,1,1,1,2,5,5,7,7,2,6,1,6,7,6,117,114,18,14,13,2,7,6,6,0,2,1,7,6,2,2,7,6,8,24,32,7,6,5,7,6,1,0,2,32,13,2,6,14,2,2,13,1,2,7,13,1,2,2,1,2,114,122,2,1,2,2,1,2,1,1,1,1,2,1,2,2,6,1,2,2,1,1,1,1,1,1,2,2,1,1,1,1,2,0,2,0,1,1,1,2,2,1,1,1,1,1,1,1,1,1,5,2,1,1,1,1,1,1,1,2,2,7,6,2,1,1,1,1,2,2,2,2,5,2,2,11,7,7,6,6,2,5,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,1,2,10,11,6,2,10,10,2,11,1,2,2,2,7,6,1,1,1,1,1,1,1,1,1,5,26,11,2,1,5,5,10,10,10,1,
+22,13,13,11,13,13,11,5,13,1,2,1,2,5,2,5,1,11,2,2,1,1,2,1,1,5,2,2,5,2,1,5,13,2,2,5,1,1,1,1,1,1,1,1,0,2,1,0,2,1,1,0,2,1,1,0,2,0,2,1,0,2,1,2,2,5,1,1,2,1,2,1,1,2,1,1,0,2,0,0,2,2,2,1,1,0,1,1,1,2,2,1,2,1,2,1,2,6,2,1,2,5,2,5,1,0,2,0,1,1,0,2,1,0,2,1,1,2,2,2,2,1,1,1,2,2,1,1,1,1,1,2,13,1,2,2,7,7,11,6,13,1,2,2,2,1,1,2,24,17,2,5,2,2,119,106,132,17,2,14,22,16,16,119,14,14,6,23,16,16,13,7,2,2,6,1,2,6,16,16,17,119,116,122,1,5,2,1,1,1,1,1,1,0,1,1,2,5,2,2,1,1,1,1,2,1,1,1,1,1,5,0,1,1,1,2,0,1,1,1,1,1,2,1,1,2,1,6,1,1,2,1,2,5,0,2,1,1,1,1,1,1,1,2,7,2,1,1,1,2,1,2,5,2,2,2,11,7,2,2,2,2,6,13,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,5,2,5,12,6,11,2,10,2,5,2,6,2,2,2,1,2,1,1,1,1,5,1,2,2,10,2,2,2,10,10,12,5,9,2,
+13,13,2,13,14,26,7,2,2,2,6,1,2,2,1,2,13,7,2,2,5,1,1,1,2,2,5,2,5,5,2,2,2,2,2,2,2,1,1,1,1,0,1,0,1,1,0,2,0,2,1,1,0,2,1,0,2,1,0,1,1,2,1,2,5,0,1,1,1,2,0,0,2,1,0,1,1,0,2,1,1,2,0,1,1,0,2,1,2,1,0,2,1,1,1,2,5,2,2,2,2,2,7,2,2,2,2,0,1,0,2,0,2,1,0,0,2,2,5,2,5,1,1,1,5,2,1,2,2,1,1,2,7,6,2,5,2,6,5,2,5,7,14,6,6,0,2,5,14,20,1,2,2,7,24,152,16,12,2,7,7,14,13,14,7,7,14,13,13,2,2,6,1,6,0,16,30,33,29,18,24,137,16,2,1,2,2,1,1,1,1,0,1,1,1,1,1,2,1,1,1,1,1,0,1,1,1,1,2,1,2,2,0,1,1,2,1,1,1,1,2,1,6,1,2,1,1,1,1,2,6,1,2,2,1,0,1,1,1,1,1,1,1,6,6,1,1,1,1,1,2,1,2,1,5,2,11,6,6,5,2,2,11,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,7,10,11,2,2,1,2,2,2,11,2,2,1,1,2,1,1,1,2,1,5,9,1,6,25,5,9,5,9,5,1,
+2,5,7,13,2,5,2,5,11,2,2,6,2,2,2,2,2,13,1,2,1,1,2,1,1,1,2,2,2,6,2,2,1,1,0,0,2,1,0,1,1,1,1,1,1,1,1,0,2,0,2,1,1,0,2,1,0,1,1,1,1,2,1,2,2,1,1,0,1,0,2,1,1,1,1,2,1,1,0,2,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,5,2,1,2,2,2,1,2,0,1,1,1,0,2,0,1,0,2,1,0,2,2,1,2,2,1,1,2,1,2,1,2,1,2,6,1,6,2,2,2,7,6,2,5,6,2,6,1,2,1,1,2,2,6,1,7,117,154,123,5,5,5,13,1,1,2,2,5,6,7,2,2,2,5,2,2,2,7,24,22,24,32,22,24,7,1,2,5,2,1,1,0,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,1,1,2,1,2,0,2,0,1,1,0,2,1,1,5,2,1,5,1,2,1,1,1,1,1,2,6,0,1,1,1,1,1,1,1,2,2,7,2,1,2,1,5,2,2,5,2,2,2,11,6,2,2,6,5,13,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,12,2,2,5,2,2,2,1,11,2,2,11,1,1,2,1,1,1,1,1,1,1,2,5,9,1,5,5,9,2,2,1,1,
+11,12,7,12,7,5,13,11,2,5,7,14,13,2,1,12,11,2,1,2,1,5,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,2,0,1,1,1,0,1,0,1,1,1,1,5,2,5,1,1,1,1,1,0,2,1,2,0,0,2,0,2,1,1,1,1,1,1,1,0,1,1,1,0,1,0,2,5,2,2,2,1,1,1,1,1,1,2,0,1,0,2,0,2,1,2,2,0,2,2,2,1,1,1,2,1,1,1,2,1,1,1,1,2,6,2,2,6,2,7,2,6,1,2,7,5,2,6,1,1,2,5,2,23,152,149,34,1,7,2,5,2,2,2,6,5,7,7,7,6,1,2,2,2,6,6,6,23,34,22,6,1,1,2,2,1,2,2,1,1,2,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,2,2,1,1,2,1,2,0,2,1,1,1,1,1,1,1,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,0,2,1,6,1,2,2,2,7,2,1,2,1,2,2,2,2,1,5,2,2,11,2,2,6,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,2,25,2,2,9,7,1,2,5,1,2,11,10,2,2,1,1,1,1,1,1,1,1,2,2,25,10,10,2,5,5,9,2,2,
+2,10,2,2,2,5,12,1,5,2,13,13,2,6,1,1,2,2,5,2,1,2,1,1,1,1,1,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,2,0,1,1,2,2,2,1,1,1,1,0,2,0,0,1,0,0,2,0,2,0,2,1,1,2,1,1,1,1,1,0,2,6,1,1,5,1,1,2,0,1,2,2,5,2,1,1,1,1,1,0,2,0,2,1,0,0,2,1,1,1,1,2,1,1,1,5,2,5,1,2,2,6,13,2,5,2,2,2,7,2,6,1,2,7,1,2,2,1,1,2,2,34,32,22,2,13,1,6,1,5,1,1,2,7,13,7,2,2,1,5,2,5,6,2,2,6,1,5,1,1,2,0,1,2,2,2,2,1,1,1,1,2,1,1,2,2,1,2,1,1,2,0,1,1,2,5,1,1,2,0,2,0,1,1,0,1,1,1,0,2,2,6,2,1,2,1,1,1,1,1,1,1,12,0,0,1,1,2,2,1,2,6,1,13,1,2,1,1,1,1,1,2,5,2,2,5,11,6,6,2,6,7,2,6,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,13,2,2,5,2,5,1,6,2,2,2,1,1,1,1,1,2,5,2,5,10,2,2,2,1,1,1,5,2,2,
+2,2,2,1,2,6,1,1,1,2,14,11,2,2,5,2,5,1,1,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,2,1,1,1,1,1,1,1,2,0,1,1,1,1,2,0,1,1,0,2,0,1,1,1,1,1,1,1,0,1,0,2,2,6,1,1,0,1,2,1,6,1,6,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,0,2,0,1,0,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,1,6,5,7,2,2,2,2,6,7,2,2,6,7,7,2,5,2,1,1,2,2,2,6,2,7,2,6,1,1,2,1,5,2,11,6,6,6,1,2,2,2,2,7,6,6,2,2,2,1,2,0,2,1,1,1,1,1,1,1,1,2,1,2,1,2,5,2,5,1,1,1,1,1,1,2,2,2,0,1,2,2,1,1,1,2,1,1,1,1,1,2,2,2,5,2,1,2,5,1,2,1,2,6,1,1,1,1,2,5,1,2,2,6,7,2,1,2,1,2,1,1,1,2,5,2,2,11,2,11,7,7,12,2,2,6,1,1,1,1,1,1,1,1,0,2,1,1,1,1,1,1,5,1,1,2,12,2,2,6,1,2,6,2,2,2,2,12,11,2,2,1,1,1,1,1,2,2,1,1,5,2,1,5,1,5,1,2,9,12,2,
+2,2,5,5,7,7,13,2,2,5,1,1,5,2,1,1,1,1,2,5,1,2,1,1,1,0,1,2,0,2,0,1,1,1,1,2,5,2,2,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,2,0,1,1,1,1,2,0,2,0,1,1,1,0,1,1,1,1,1,2,0,1,0,0,2,1,1,1,2,2,1,1,1,2,2,13,7,14,2,1,1,2,2,2,5,2,5,2,1,1,1,2,1,0,2,0,1,1,1,1,0,0,2,1,2,2,6,1,5,2,1,13,2,2,5,2,2,2,2,2,2,5,2,7,7,6,6,2,7,6,2,2,2,1,1,1,1,2,2,5,7,6,1,2,1,2,1,2,2,21,7,2,6,1,2,2,6,2,2,7,2,2,6,2,1,1,1,1,0,2,2,1,1,1,1,2,2,2,2,1,6,2,2,1,2,2,1,1,0,1,1,1,1,1,2,2,1,1,1,0,1,0,2,0,2,2,7,2,6,2,1,1,1,1,1,2,6,1,13,0,1,1,1,2,1,1,5,2,2,7,6,1,2,5,1,1,1,1,2,2,2,5,6,6,5,9,7,2,2,1,1,2,1,1,1,2,0,1,2,1,1,1,1,1,1,1,2,2,2,5,2,2,11,2,2,11,2,2,2,2,2,6,1,2,26,2,1,2,1,1,1,5,2,1,6,9,5,9,2,1,2,2,5,11,5,2,
+2,6,2,2,5,21,17,2,5,5,1,2,2,2,2,1,1,2,5,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,2,1,2,1,0,1,2,1,2,1,1,1,1,1,1,1,0,1,1,2,1,1,2,0,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,2,5,1,0,2,13,7,14,7,2,1,1,1,1,2,7,2,2,2,6,2,5,2,2,1,1,1,0,2,0,2,1,1,1,1,2,2,5,2,6,2,1,5,2,2,6,1,2,5,13,7,1,2,2,5,2,7,2,5,7,7,7,1,6,0,1,1,1,1,2,2,2,2,2,2,6,1,1,1,2,2,2,11,7,2,2,1,2,2,5,2,7,2,6,2,2,2,2,0,1,1,2,1,2,1,1,1,1,2,2,1,1,2,2,1,2,1,1,2,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,5,1,1,6,1,2,1,1,1,2,6,2,0,1,2,2,2,2,2,5,2,7,2,2,2,2,2,1,1,2,5,2,5,2,7,6,11,2,2,11,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,9,2,26,5,2,9,11,2,2,2,6,2,1,11,2,2,1,1,2,1,1,1,2,2,2,2,5,5,2,10,5,9,5,10,2,2,0,
+7,2,2,6,2,12,13,11,5,2,2,5,13,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,0,0,1,1,1,1,2,1,1,1,2,5,1,1,1,1,1,1,2,1,0,2,0,1,1,1,1,1,2,2,5,1,2,1,2,0,1,0,2,0,1,2,1,1,1,1,1,2,6,2,2,12,12,13,12,2,2,1,1,2,0,1,2,7,2,2,6,2,2,6,2,2,2,1,0,2,1,0,2,1,1,1,2,2,6,1,2,2,2,2,2,7,2,2,5,2,2,2,5,2,2,6,1,2,13,1,5,1,7,13,1,1,1,0,2,1,1,2,1,6,2,1,1,2,2,2,2,1,12,7,13,6,2,1,1,1,2,2,2,2,6,2,6,2,1,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,6,2,1,2,1,1,1,0,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,1,1,1,2,5,1,2,2,12,2,1,1,1,2,1,5,5,2,2,2,12,0,1,2,1,0,1,1,1,2,1,2,2,12,11,2,2,2,5,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,5,2,2,11,2,2,2,10,11,6,2,1,1,5,1,1,1,2,5,2,5,2,10,10,10,2,2,2,5,5,1,6,1,
+13,13,2,5,2,5,12,1,1,1,1,1,1,2,2,6,2,1,2,5,2,2,1,2,0,1,1,5,1,1,1,2,5,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,1,1,7,1,1,1,2,0,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,2,0,2,0,1,0,2,0,1,2,2,12,14,13,1,14,7,1,1,1,2,0,2,2,2,2,6,2,2,7,6,2,2,2,5,0,2,1,0,1,1,1,0,2,1,2,5,2,6,2,5,2,2,6,6,1,7,2,2,2,5,2,2,6,1,2,6,7,2,6,2,13,2,2,2,1,1,0,2,1,1,1,2,2,5,12,5,2,5,2,1,2,2,2,6,2,1,1,1,1,2,2,5,14,7,2,2,1,1,0,1,0,2,1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,2,1,1,1,2,2,1,1,2,1,1,1,1,2,1,1,1,0,1,1,2,2,2,5,1,2,1,6,1,2,2,13,5,2,1,0,1,1,1,1,1,2,1,1,13,1,1,1,1,1,1,1,1,1,1,2,11,7,2,21,10,10,2,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,5,2,5,5,2,11,2,2,25,2,11,0,1,1,1,1,1,1,2,2,1,2,26,10,2,5,2,5,10,5,10,10,9,1,
+7,6,2,2,5,1,1,2,1,1,5,1,1,2,5,1,2,6,1,2,5,1,1,1,1,1,1,2,2,1,2,5,2,1,1,1,1,1,1,2,2,12,2,2,2,5,2,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,0,1,2,0,1,1,2,1,1,2,7,7,2,7,2,1,1,0,1,1,1,1,1,2,13,6,2,2,7,6,2,6,2,2,2,0,1,1,2,2,1,0,2,1,2,2,7,2,2,2,5,2,2,6,6,6,2,6,1,2,2,1,2,5,2,1,7,1,2,2,2,2,6,1,1,0,2,1,1,2,1,5,2,5,2,2,2,2,2,2,2,2,6,7,6,0,1,1,2,2,2,2,7,2,5,2,1,1,1,1,0,2,1,1,2,1,1,1,1,1,1,2,2,2,2,5,5,14,0,1,1,2,2,1,1,2,2,2,2,2,2,2,2,1,1,1,2,2,6,5,0,2,2,2,2,6,2,14,6,2,1,1,1,0,1,1,1,1,1,1,6,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,6,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,5,2,2,2,2,2,5,2,2,2,2,5,2,1,1,1,1,1,1,5,1,2,2,9,2,2,2,9,2,12,26,10,10,2,1,
+10,7,5,2,2,1,2,5,1,1,2,2,2,1,2,2,5,1,5,2,1,1,1,1,1,0,1,2,6,1,10,5,2,2,1,1,2,1,1,7,13,2,5,2,2,2,1,1,1,2,1,1,0,0,1,1,2,5,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,0,2,1,1,0,0,2,1,1,2,7,5,1,0,1,2,1,2,1,2,2,7,7,6,6,6,6,6,7,13,2,2,1,2,1,0,1,1,0,2,1,2,2,14,7,7,6,1,6,2,2,7,2,13,1,2,7,6,2,1,2,1,2,2,13,1,2,5,2,5,2,1,1,1,0,1,1,1,2,2,2,1,2,5,2,2,5,2,11,2,6,7,2,1,1,1,2,2,1,6,7,7,7,2,1,1,1,1,1,1,0,1,1,2,2,2,5,2,5,14,13,2,2,2,2,1,1,1,0,2,2,1,1,1,0,1,1,1,0,1,1,1,2,1,1,1,2,5,1,1,1,1,1,2,2,1,2,2,1,2,0,1,2,1,1,1,2,5,7,2,1,1,1,2,1,1,1,1,1,2,12,5,11,13,2,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,9,11,2,2,2,26,2,12,2,2,1,1,2,2,1,1,2,1,5,2,11,2,10,6,2,2,25,2,12,5,2,0,
+2,10,11,5,2,2,6,2,1,5,1,11,5,2,1,1,1,1,2,2,5,1,1,1,2,0,1,5,2,2,1,1,2,1,1,1,1,2,1,2,2,1,2,2,2,1,2,1,2,2,1,1,1,2,1,1,1,1,2,5,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,1,1,2,7,2,2,1,2,1,1,2,1,1,1,2,13,7,7,2,13,7,7,13,2,7,2,0,1,1,1,1,1,1,1,2,2,6,2,6,1,1,7,1,2,7,2,13,1,2,13,5,2,2,1,6,2,5,1,2,6,1,2,1,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,5,2,2,7,6,6,1,0,1,1,2,2,6,13,6,2,0,1,1,1,1,0,1,1,2,1,1,1,1,1,1,1,1,2,5,1,1,1,2,1,0,1,1,1,0,2,1,1,1,1,1,1,1,2,0,1,0,2,1,2,2,1,1,1,1,1,1,1,2,2,7,2,0,1,1,1,1,1,2,1,2,2,5,1,1,1,1,1,1,1,1,2,6,2,5,2,2,2,7,5,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,5,1,2,2,5,2,5,1,2,5,2,5,10,10,2,7,2,9,11,0,1,1,1,1,1,2,1,2,2,9,11,13,26,5,2,2,2,9,10,1,2,
+2,5,2,2,6,1,2,1,1,2,5,10,1,1,2,1,2,2,2,5,1,2,1,1,1,2,2,2,1,2,1,0,1,2,1,1,2,2,2,1,2,2,2,5,2,5,1,2,1,2,1,1,1,1,1,1,1,1,2,6,2,1,1,2,1,2,1,1,2,1,1,1,1,0,2,1,2,5,1,1,1,2,7,1,1,1,2,1,1,2,1,2,1,2,2,14,2,7,2,7,6,6,2,7,7,1,1,0,2,0,2,2,1,0,2,5,2,7,2,2,7,6,2,5,2,2,2,6,5,2,2,5,1,1,2,2,1,0,7,2,2,1,2,1,5,2,2,1,1,1,1,2,5,2,2,5,5,2,2,5,6,2,2,11,7,6,2,6,1,0,2,5,1,2,16,1,1,6,2,1,1,1,1,0,0,1,1,1,1,1,1,1,1,2,2,2,2,1,9,5,1,1,1,1,1,0,0,2,2,1,1,1,1,1,0,0,2,1,1,2,2,2,1,1,1,1,1,1,1,2,5,11,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,0,1,1,1,1,1,2,11,11,7,2,9,6,5,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,5,2,2,2,2,2,5,2,2,2,2,2,5,2,9,11,2,2,1,1,1,1,1,1,1,2,5,6,9,2,2,2,2,12,10,11,5,2,1,
+1,2,5,1,2,5,1,1,1,1,1,1,1,5,1,2,1,1,2,1,1,1,2,1,1,1,2,1,1,1,1,2,1,1,2,1,2,2,1,1,2,2,5,2,2,2,1,2,1,6,1,0,2,1,2,2,2,2,7,7,6,1,1,5,1,1,1,2,6,1,2,2,1,1,1,0,2,7,2,1,2,5,2,2,1,1,1,2,0,2,5,2,6,1,2,6,2,6,6,6,6,7,7,2,2,2,1,1,0,1,1,1,1,1,2,2,2,12,7,6,7,2,2,2,2,6,2,7,2,6,2,2,1,1,2,2,1,1,6,2,1,2,1,1,2,2,1,0,1,1,2,2,6,1,6,2,2,2,5,2,2,11,2,11,7,7,6,1,1,1,1,2,2,7,7,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,5,1,1,2,1,2,2,2,1,0,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,2,5,1,1,1,1,1,1,1,1,1,2,7,1,2,0,2,1,1,2,1,2,2,5,1,1,5,1,1,1,1,1,1,1,7,2,10,2,5,2,2,2,6,9,2,1,1,1,1,1,2,1,1,1,1,1,2,2,1,2,5,2,1,1,1,1,1,2,1,2,5,9,11,6,7,2,13,1,2,5,2,1,1,1,1,2,2,5,9,10,6,2,9,10,10,10,10,40,2,10,2,
+2,2,2,5,5,2,2,1,1,1,1,1,1,2,2,2,1,1,1,2,2,5,1,1,1,2,1,0,1,2,1,1,2,2,2,13,2,6,1,2,1,6,2,2,2,2,2,5,2,7,0,2,1,2,1,2,0,2,7,6,2,2,2,2,1,1,2,5,2,1,1,2,2,6,1,1,5,2,1,1,2,2,2,5,1,2,1,1,1,2,1,2,2,6,1,7,6,7,6,7,6,7,6,2,2,1,1,1,1,1,1,1,1,1,2,6,7,7,5,2,2,6,2,2,5,2,2,2,7,7,2,1,1,1,2,5,1,1,13,1,5,2,1,1,2,5,1,1,2,1,2,1,2,5,2,2,2,1,1,2,5,1,2,7,6,7,2,6,1,1,0,2,2,7,2,2,1,2,2,1,2,2,1,1,1,1,0,2,2,5,2,6,5,2,5,1,1,1,2,5,1,0,1,0,2,1,1,1,0,2,1,1,0,1,1,1,1,1,0,2,2,1,1,1,1,1,1,1,2,1,6,13,2,0,2,1,1,2,5,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,5,2,11,2,2,5,2,2,1,1,1,1,1,1,1,1,1,2,5,1,1,2,5,1,2,2,2,1,1,2,5,2,5,2,2,2,5,2,2,9,2,2,5,2,1,2,5,1,1,1,1,5,2,2,2,2,2,11,9,11,11,11,10,2,11,2,
+2,2,6,2,2,5,2,1,1,1,1,1,1,2,11,1,1,2,1,2,5,2,2,2,1,1,1,1,1,1,1,2,2,11,7,2,11,6,2,2,5,2,2,5,2,2,6,1,7,2,1,1,2,2,1,1,2,2,7,7,2,2,1,1,2,1,6,2,2,1,1,1,7,7,2,5,2,6,1,0,1,2,5,2,1,2,1,2,1,1,1,6,7,2,13,7,7,11,7,7,7,13,6,5,1,1,0,2,1,1,1,1,1,5,2,2,2,2,2,2,5,2,5,2,2,2,13,2,7,7,6,1,1,2,1,2,1,2,5,2,2,1,1,2,2,2,1,1,2,1,1,2,2,2,2,5,2,6,2,2,2,6,2,11,6,11,6,0,1,6,1,2,1,7,7,1,1,2,1,5,2,2,1,1,0,0,1,2,1,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,0,2,1,1,1,0,2,1,1,1,1,1,0,2,1,2,1,1,1,1,1,1,1,1,1,2,12,6,0,1,1,1,2,1,2,2,2,5,2,2,1,1,1,1,1,2,0,1,2,5,2,2,2,12,6,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,5,1,2,1,1,6,1,2,2,2,5,2,2,5,6,2,11,6,10,2,1,2,1,1,1,1,1,2,9,10,5,10,7,5,5,5,7,10,7,2,10,2,
+1,2,2,5,5,2,2,1,1,1,1,1,1,12,7,1,2,1,5,1,2,2,5,2,5,0,1,1,2,2,2,2,6,7,13,11,7,6,2,1,2,2,6,1,2,5,2,2,13,2,1,0,2,1,1,0,1,2,7,2,2,2,1,2,2,2,2,1,1,1,0,1,2,7,2,2,2,2,1,1,2,2,2,2,2,1,1,5,1,2,1,2,2,7,8,13,2,11,14,13,7,6,2,6,1,2,1,1,1,1,0,1,1,2,1,5,2,5,1,1,2,2,2,2,6,1,7,2,7,7,2,1,1,1,1,1,6,2,5,2,2,0,1,1,6,1,1,1,2,5,2,2,5,2,2,2,2,2,6,2,5,1,2,6,7,13,2,1,0,1,6,0,1,13,2,6,2,5,2,2,2,2,2,1,1,1,1,1,2,2,5,5,7,2,1,2,2,1,2,2,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,0,2,2,1,1,1,1,1,1,1,1,1,2,7,13,1,0,1,1,1,1,2,5,2,9,2,1,1,1,1,1,0,1,1,1,1,1,2,5,11,6,2,5,2,2,1,1,1,1,1,1,1,1,0,1,2,1,1,5,2,1,2,2,2,25,1,2,2,2,5,2,5,5,2,2,25,6,5,10,10,2,5,1,1,2,1,1,2,2,5,2,10,2,9,11,1,11,13,10,11,10,11,2,
+1,1,2,5,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,13,1,2,2,2,5,2,2,2,2,2,11,6,2,2,2,5,2,5,2,2,2,5,2,2,1,1,1,1,1,2,1,1,6,13,2,1,1,1,1,1,2,5,2,1,1,1,7,2,6,1,2,5,1,1,2,6,2,5,1,1,2,2,1,1,5,2,6,7,7,7,8,12,6,2,7,7,6,1,1,1,1,0,2,1,2,1,2,2,6,1,2,2,1,1,2,1,6,1,2,2,6,2,7,6,2,5,0,1,2,1,1,2,2,1,1,1,1,1,2,2,1,2,2,2,2,2,2,5,5,5,2,5,2,2,2,6,2,11,6,7,0,2,1,2,2,2,1,7,2,2,2,2,2,2,5,2,2,6,1,0,2,1,1,12,7,6,12,1,2,1,1,2,2,1,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,14,6,2,1,1,2,2,2,2,6,1,12,2,1,2,6,1,1,1,1,1,1,1,2,7,11,7,13,1,2,5,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,5,1,2,5,2,2,5,5,5,2,7,2,6,10,1,2,5,10,5,1,2,6,2,1,1,1,1,5,2,10,7,9,12,10,10,13,11,7,2,5,10,2,
+1,1,1,1,1,1,1,1,1,1,2,1,2,5,1,1,1,1,1,1,1,1,1,1,1,2,6,2,12,2,2,5,1,1,6,7,11,2,2,1,2,2,2,2,2,6,2,6,2,2,2,1,1,1,2,0,2,2,7,6,2,2,2,1,1,1,2,2,2,1,1,1,2,2,1,2,6,1,2,5,7,2,1,2,2,1,2,5,2,2,0,2,7,14,6,7,14,8,5,7,13,7,2,6,0,1,0,2,0,1,1,1,2,6,1,2,6,1,1,2,1,5,2,6,2,6,1,6,6,1,2,1,1,2,1,1,1,2,13,1,1,1,1,1,2,2,2,0,2,6,2,5,2,2,2,2,2,2,2,5,2,2,2,11,6,7,2,0,1,2,1,1,0,7,6,1,2,5,1,2,2,2,5,1,1,2,0,2,1,2,2,5,2,6,2,1,1,1,5,0,1,0,2,1,0,2,1,1,1,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,5,1,1,2,2,6,2,1,1,2,5,1,1,1,2,13,13,10,2,2,2,5,2,1,1,2,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,6,5,1,5,9,2,2,2,6,5,1,2,12,10,10,10,1,1,1,2,2,1,1,1,1,2,2,10,11,10,10,2,11,10,11,11,12,2,25,0,
+1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,1,1,1,1,1,1,1,1,2,6,1,2,11,2,5,2,1,5,1,2,11,2,1,1,1,1,2,2,6,1,2,7,7,1,0,2,1,1,1,1,2,1,7,7,6,6,2,2,1,6,2,5,2,2,1,0,1,2,5,1,2,6,1,1,7,2,1,1,1,1,2,2,1,2,1,2,14,7,2,7,14,13,6,6,2,5,2,2,1,1,1,1,1,1,1,2,2,7,2,6,1,1,1,1,2,1,2,7,6,2,2,7,2,2,13,1,1,5,2,1,1,2,2,2,1,2,1,2,5,0,2,1,2,2,2,5,2,6,2,5,2,5,2,2,5,1,11,6,6,6,0,2,1,0,1,1,2,6,2,2,1,5,6,2,2,2,2,11,1,2,2,0,1,1,2,5,5,2,2,5,2,2,2,1,1,1,0,1,1,0,1,1,2,5,2,2,2,1,2,1,1,2,1,1,1,6,1,1,1,1,1,2,1,1,2,2,1,2,1,2,2,6,2,5,2,11,1,2,2,6,1,1,1,1,2,1,5,13,10,11,2,12,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,5,2,2,2,25,1,2,2,2,2,2,2,5,1,2,11,5,10,5,5,2,5,2,5,1,6,1,1,1,1,6,5,11,10,7,11,7,10,11,10,10,5,2,2,1,
+1,1,1,1,1,1,1,1,1,2,1,1,2,2,6,1,1,1,1,1,1,2,5,1,1,1,2,6,1,2,2,1,1,2,5,1,2,1,1,1,1,6,2,6,1,6,6,2,2,2,1,0,2,2,2,1,1,2,7,7,6,2,2,1,5,2,2,2,2,6,1,1,2,7,2,2,7,2,2,6,1,1,0,1,1,1,2,2,2,1,2,7,2,2,7,14,8,13,2,2,2,2,2,1,1,1,0,1,1,2,1,2,5,1,2,2,5,2,1,1,2,2,5,2,2,6,6,2,7,13,2,1,2,2,1,2,6,7,2,6,2,2,5,1,2,1,2,1,2,11,2,5,2,2,2,2,2,2,5,2,2,5,2,5,2,11,0,1,1,0,1,0,1,7,1,2,7,2,2,5,2,11,2,6,2,1,2,2,2,1,2,2,5,2,2,2,1,2,6,1,1,1,0,2,1,1,1,1,2,2,2,5,2,2,1,1,0,1,1,2,2,1,2,1,1,1,2,1,2,1,11,6,0,1,2,5,1,2,1,2,1,2,2,5,5,1,2,2,1,2,5,2,13,10,7,2,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,5,2,2,2,6,2,2,5,2,5,2,10,2,26,5,6,2,2,2,2,5,1,2,2,1,1,2,1,1,1,2,26,7,11,10,12,10,10,13,21,1,5,1,2,
+1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,6,1,1,1,1,2,7,1,2,1,2,5,0,2,2,6,2,2,1,2,2,2,2,1,1,1,2,7,7,6,2,7,2,7,2,2,0,1,2,2,2,2,2,7,2,7,2,5,2,2,2,1,6,5,6,0,1,1,2,2,6,1,6,2,2,1,6,1,0,1,1,2,2,1,1,2,2,7,6,13,13,6,7,2,2,5,2,5,0,1,1,1,1,1,1,1,2,2,6,1,2,2,2,6,1,5,2,2,5,2,7,2,7,6,2,2,1,1,1,1,2,13,6,2,2,2,2,2,2,5,2,1,1,6,2,2,2,2,5,2,2,6,2,2,2,6,2,2,2,11,2,2,1,1,1,1,1,2,7,2,6,11,2,2,2,2,5,1,2,2,5,2,2,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,1,1,1,2,1,2,5,2,2,2,1,1,1,1,1,1,1,2,5,2,1,1,1,1,5,5,1,11,11,1,1,2,2,5,1,1,1,1,13,5,6,2,1,1,1,1,1,1,2,13,11,10,5,10,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,6,1,6,1,2,2,2,2,2,5,13,2,2,5,5,2,6,6,10,2,6,2,2,5,1,1,1,2,5,10,10,7,10,10,10,13,10,13,10,2,10,5,5,
+1,1,1,1,1,1,1,1,1,1,2,2,12,6,7,2,2,1,1,2,5,2,1,1,1,2,2,1,2,11,1,2,1,1,1,2,1,0,2,1,1,2,2,7,2,6,6,7,7,0,0,2,1,1,2,1,1,2,6,2,13,2,2,6,1,6,1,2,6,2,1,1,1,0,2,2,6,1,2,12,0,2,1,1,1,0,1,5,1,1,2,2,7,13,6,7,2,14,2,6,2,2,2,1,1,1,1,0,1,1,2,5,2,2,6,7,2,13,1,2,1,2,2,2,5,2,2,13,5,2,5,2,2,1,1,7,7,6,6,2,2,1,2,5,2,2,1,2,2,2,6,2,5,2,2,5,2,2,6,1,2,2,5,2,13,2,1,2,2,1,1,1,2,7,7,2,7,6,2,5,2,2,6,2,5,2,2,5,2,2,1,2,2,1,1,2,2,2,1,1,0,2,1,0,2,1,1,1,2,2,1,2,1,1,1,1,0,2,1,1,1,2,2,1,1,1,1,2,2,6,6,2,1,1,2,2,1,1,1,2,12,1,2,2,2,1,2,1,2,1,2,7,13,11,12,2,7,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,2,1,1,5,2,2,7,2,2,13,1,2,5,9,6,2,5,12,1,11,2,2,9,11,1,2,2,5,0,1,1,1,1,9,10,10,10,10,13,10,26,13,10,13,9,27,26,2,
+1,2,2,1,1,1,1,1,1,1,7,2,13,2,2,2,1,1,2,11,2,1,1,1,1,5,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,7,6,2,7,6,7,13,14,0,2,0,1,1,2,2,1,2,7,2,7,6,2,5,2,2,5,2,6,2,2,1,1,1,1,7,2,6,5,1,1,2,5,1,1,2,2,2,1,2,2,2,14,2,13,6,7,2,2,2,2,6,2,1,2,1,1,1,1,1,2,2,5,2,2,7,6,2,6,1,1,1,2,6,1,2,6,1,2,2,2,1,1,1,2,12,7,6,2,1,1,1,1,2,2,1,2,1,1,1,1,2,2,1,2,2,2,5,2,2,5,2,2,6,7,2,6,2,2,1,1,1,5,13,2,5,14,2,2,2,5,2,2,2,2,5,2,2,5,2,2,27,38,35,1,2,1,2,1,0,1,0,2,1,0,2,1,1,2,2,1,1,1,0,1,0,1,1,1,6,1,2,5,1,2,1,1,5,2,2,2,2,1,1,1,2,1,2,2,2,11,2,5,2,1,1,1,1,1,5,2,11,10,7,2,2,11,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,2,1,1,2,2,2,25,2,7,2,9,11,1,6,1,12,2,2,5,2,5,1,1,1,1,5,10,10,10,10,13,26,13,40,2,26,5,10,10,2,
+2,6,6,1,1,1,1,1,1,2,12,6,2,6,1,1,1,1,2,2,6,1,1,1,1,2,1,1,2,1,2,5,1,1,1,1,1,0,2,1,2,13,7,7,13,7,7,13,6,1,1,2,1,1,2,1,1,6,6,6,6,2,6,2,2,2,1,2,7,2,2,1,1,2,2,6,1,1,2,1,1,2,2,1,1,2,2,2,1,5,1,7,14,2,14,6,6,6,1,2,5,5,1,1,1,1,1,1,6,1,1,1,2,2,5,6,6,2,1,6,1,0,2,5,2,6,1,2,6,7,7,1,1,2,5,10,2,11,2,2,1,6,1,2,5,1,0,0,1,2,7,2,6,2,5,2,5,2,2,5,2,2,2,2,13,2,2,2,6,0,1,2,2,7,1,2,2,2,5,2,2,5,1,2,5,2,2,2,2,2,1,0,1,7,7,1,1,2,1,1,1,1,0,1,1,1,0,2,5,2,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,5,2,7,6,1,1,1,1,5,1,2,5,6,6,2,2,5,2,1,2,1,2,2,5,11,2,2,5,2,2,5,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,5,2,2,2,5,2,2,2,5,6,2,12,2,2,2,2,2,6,2,2,2,1,5,1,2,11,26,21,10,26,26,26,13,21,2,9,13,10,5,1,
+2,13,11,2,2,1,1,1,1,2,13,11,0,1,0,1,1,1,5,2,2,5,2,2,1,6,1,1,1,1,1,2,2,2,2,1,1,1,2,2,2,14,29,13,14,11,6,1,2,1,0,0,1,2,1,1,1,2,6,6,7,6,2,2,5,2,1,6,1,6,2,1,1,2,1,2,2,5,2,1,1,2,2,2,1,2,2,1,2,2,2,7,7,6,7,2,6,2,6,5,13,6,1,1,1,1,1,1,0,1,2,2,5,2,2,6,6,2,2,2,1,2,2,1,2,2,5,2,2,13,5,2,1,2,2,12,2,7,5,2,2,1,1,2,1,0,1,1,6,1,2,6,1,2,2,2,2,2,6,2,5,2,2,11,7,2,2,1,2,1,1,1,2,6,2,12,5,2,2,2,2,2,5,2,2,2,2,5,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,5,0,1,1,1,1,0,1,2,1,2,2,2,5,1,1,1,2,1,11,1,1,2,1,2,2,1,2,2,12,5,2,5,2,5,1,2,5,10,10,11,7,10,10,7,5,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,5,1,2,2,6,2,13,1,2,2,6,9,2,2,5,10,7,2,5,9,5,2,11,7,1,2,2,2,1,1,1,1,2,26,26,21,10,40,11,26,13,10,1,12,26,2,2,1,
+7,7,6,2,1,1,1,1,1,2,13,1,2,5,1,1,1,2,2,2,2,1,1,6,1,1,2,1,2,1,2,2,2,1,1,1,2,1,2,2,7,13,5,6,2,2,2,13,6,1,0,2,1,1,2,2,5,2,7,7,6,6,6,2,2,6,5,2,7,6,2,1,1,1,2,2,6,2,1,1,2,2,2,1,1,1,1,1,1,2,2,7,1,7,2,6,2,6,2,13,13,1,1,2,1,1,2,1,1,1,2,1,2,2,2,14,2,2,1,1,1,0,1,2,6,1,6,1,2,6,1,2,5,2,2,13,2,2,2,2,5,0,1,2,2,2,1,1,2,2,6,1,5,2,6,2,2,5,2,2,2,5,2,2,7,2,1,1,1,1,1,0,7,7,2,2,2,5,1,1,2,2,2,2,5,2,1,1,1,5,0,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,2,5,2,6,2,5,2,6,5,2,13,2,2,9,1,2,2,5,1,10,2,6,2,2,2,2,5,1,1,2,2,13,13,13,10,5,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,6,2,2,6,2,5,5,2,5,9,2,12,11,2,5,2,10,2,11,6,2,2,1,5,1,1,2,6,10,12,21,13,1,10,10,5,13,5,1,10,9,2,6,0,
+6,7,6,1,1,1,1,1,1,2,2,6,2,1,2,2,1,5,2,5,1,1,1,1,1,1,1,2,0,1,1,1,1,1,1,0,1,2,5,11,2,2,2,13,7,6,5,11,1,0,2,0,2,1,1,2,2,2,13,7,2,6,2,2,5,2,2,2,2,2,1,1,1,1,2,6,1,2,1,1,2,5,2,1,1,0,1,1,1,1,2,6,2,6,2,7,13,2,11,7,11,2,1,1,5,1,1,2,1,2,0,5,2,2,6,12,2,2,1,0,1,1,1,2,2,6,2,2,11,2,2,2,2,2,13,2,6,2,2,5,2,2,1,2,1,2,1,1,2,1,2,2,2,2,2,5,2,2,2,2,5,2,5,6,6,6,0,1,1,1,1,1,12,0,6,13,2,2,2,1,5,2,1,1,2,1,2,1,2,2,1,1,0,1,1,1,1,1,1,0,1,1,0,2,1,1,1,1,1,2,1,6,0,1,1,1,2,5,2,1,2,2,2,7,2,2,2,2,2,2,10,2,2,2,1,1,1,1,6,13,2,2,2,5,2,6,2,1,2,5,11,13,13,12,7,2,2,6,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,7,6,5,2,2,2,9,2,2,5,2,10,2,2,25,2,2,2,11,11,2,2,2,1,1,1,2,1,2,26,10,10,10,10,10,13,39,2,2,5,2,6,1,0,
+11,6,2,1,1,0,1,1,1,2,11,1,2,1,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,1,2,11,7,2,2,11,13,14,6,6,2,1,1,0,1,1,1,2,6,2,6,7,7,7,2,2,2,2,1,1,2,6,2,1,1,1,1,1,2,5,1,1,1,2,2,2,1,1,1,2,2,2,1,2,7,2,7,7,7,2,13,21,21,7,2,1,1,2,1,6,1,0,1,2,1,2,5,7,7,6,0,1,2,0,0,1,2,7,2,6,2,7,7,2,2,2,13,7,2,2,2,5,2,2,2,1,5,1,1,0,6,2,5,2,5,2,5,2,2,2,5,11,2,2,2,2,2,11,1,1,1,1,1,1,2,2,5,2,14,1,2,1,2,2,1,2,2,5,2,2,1,2,1,1,1,2,1,1,2,1,1,2,1,1,0,1,0,1,1,1,2,1,1,1,2,1,1,2,2,7,5,5,2,2,2,5,2,2,5,2,5,2,11,7,2,1,2,2,1,1,5,1,13,2,5,2,2,2,2,2,1,5,2,11,13,21,2,11,2,2,2,2,6,1,1,2,1,1,1,1,1,1,1,1,1,2,1,5,2,6,5,11,2,2,11,2,5,2,2,2,12,1,5,2,5,2,2,13,11,0,5,2,2,1,1,1,2,12,10,11,10,40,6,13,12,21,6,2,10,5,1,1,2,
+7,7,5,1,1,1,1,1,1,6,6,2,5,2,1,1,2,5,2,1,1,1,1,2,1,2,5,2,1,2,1,2,2,1,1,1,1,11,6,2,2,6,14,7,7,2,2,7,1,0,0,2,1,2,2,2,2,7,7,14,6,6,2,5,2,2,1,5,2,13,1,0,1,2,1,2,2,1,1,1,2,2,1,1,1,2,2,1,1,2,5,2,2,14,8,7,7,7,14,13,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,7,2,1,1,1,2,1,1,2,2,5,1,2,2,12,1,1,2,21,7,2,6,2,2,2,5,2,1,2,2,1,0,2,2,1,2,2,2,2,2,6,2,2,2,6,2,5,2,6,2,0,2,1,0,2,0,1,2,2,14,2,1,1,2,1,5,2,2,1,2,1,1,2,2,1,1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,6,1,1,5,2,2,2,2,5,2,5,2,2,6,1,1,2,10,2,5,1,2,1,1,1,1,1,10,13,1,2,5,5,2,5,1,2,2,2,10,13,10,2,6,1,6,2,5,1,2,9,2,2,1,1,1,1,0,1,1,2,1,1,2,2,2,11,2,2,2,2,2,2,2,5,2,2,11,2,2,1,11,7,11,2,5,2,2,2,1,1,1,2,26,5,12,11,10,26,10,21,21,2,5,9,2,1,1,0,
+2,2,2,2,1,1,1,1,5,1,2,11,2,2,1,11,2,2,2,1,1,5,2,5,2,2,2,5,2,2,1,2,5,1,1,0,1,2,2,13,7,7,7,13,11,2,13,1,1,1,1,0,2,1,2,5,2,2,6,2,6,2,2,2,2,5,1,2,2,7,1,2,1,1,1,6,1,0,2,2,1,1,1,1,1,1,2,1,2,2,2,6,7,7,7,6,7,13,7,2,5,0,1,1,2,1,2,6,2,1,2,1,13,1,6,1,6,1,5,1,1,1,2,5,2,2,2,2,13,2,2,2,2,12,11,2,1,2,2,6,2,2,5,1,2,1,1,1,2,1,6,2,5,2,5,1,11,2,2,2,2,1,11,7,6,1,0,2,1,0,1,1,2,2,6,1,1,1,1,1,2,1,5,2,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,0,1,1,1,1,1,1,1,2,5,1,1,1,1,2,2,1,2,6,2,2,2,2,5,1,2,2,6,2,10,7,2,1,2,2,1,1,2,5,7,11,2,6,2,2,2,1,1,5,5,7,26,11,2,5,1,11,1,2,2,2,2,2,2,1,1,1,1,0,1,1,1,2,1,2,6,1,6,7,6,6,2,6,2,6,2,2,2,5,9,10,2,2,10,10,13,2,1,2,6,9,1,1,2,25,1,10,9,26,12,10,13,21,13,2,2,5,2,1,1,2,
+2,6,2,2,2,1,1,2,2,2,5,2,5,1,2,11,2,2,2,6,1,1,2,1,1,2,2,2,5,1,1,1,2,1,1,1,1,2,6,7,7,6,14,29,13,5,7,2,1,1,1,1,0,1,1,1,6,1,6,7,13,2,2,6,2,2,2,2,2,7,2,1,1,1,2,1,1,6,1,1,1,2,1,1,1,1,0,2,1,2,7,2,13,7,7,13,12,6,13,2,2,1,1,1,2,1,1,1,1,2,1,1,2,1,2,5,2,2,2,2,2,1,1,2,2,2,1,11,13,1,1,2,1,14,2,2,5,2,5,2,2,2,2,1,2,1,1,2,2,5,2,2,2,2,2,5,7,2,5,2,5,2,2,13,2,1,1,1,0,2,1,1,2,1,2,1,1,1,1,2,2,2,1,2,2,5,2,2,5,1,2,5,1,1,1,1,1,2,1,1,1,0,1,1,1,1,1,1,2,1,5,2,1,2,6,2,2,2,5,2,2,5,2,2,2,5,2,5,11,5,2,2,1,2,1,1,1,2,10,2,5,9,2,2,5,1,2,10,2,13,7,2,2,2,6,2,5,2,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,5,13,5,2,11,2,6,2,2,6,2,12,1,11,2,5,11,11,13,5,1,2,2,2,1,1,2,1,2,5,5,26,2,12,11,13,13,2,9,12,2,1,1,1,
+11,2,2,6,2,5,2,2,5,6,2,1,1,1,1,11,5,1,7,2,1,2,1,1,1,1,1,6,2,2,1,1,1,1,1,1,2,2,7,7,2,14,16,21,2,2,13,2,1,1,1,1,1,2,2,2,7,14,6,7,7,6,1,2,7,2,2,1,2,13,2,2,1,1,1,2,2,2,1,1,1,1,0,2,1,0,1,1,2,2,6,14,8,14,6,2,6,2,2,7,2,1,1,2,1,2,1,1,2,2,1,6,2,1,1,2,2,2,5,1,2,1,1,1,2,1,2,13,13,2,2,5,2,2,2,5,2,2,2,2,11,2,2,2,2,1,1,2,2,2,2,6,2,6,6,2,5,2,2,2,2,5,7,7,6,1,1,0,1,1,1,1,6,1,2,1,5,1,1,1,5,2,2,6,1,2,2,6,1,1,2,2,5,1,2,5,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,1,2,5,2,2,12,2,2,2,6,2,2,5,5,1,2,2,7,5,1,1,1,1,1,2,5,5,7,11,5,2,6,2,1,5,2,2,5,7,12,10,5,2,2,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,7,6,13,5,2,10,2,2,11,2,6,2,2,2,2,12,1,2,10,10,11,1,5,2,10,2,1,1,1,1,1,2,2,2,2,2,21,11,6,2,6,9,2,1,1,1,
+2,1,2,2,2,1,1,2,2,11,2,6,1,1,1,2,6,2,11,2,2,5,1,2,2,2,11,11,11,2,2,0,2,1,1,1,1,11,13,7,7,13,16,13,2,5,2,2,1,1,1,1,2,2,6,1,6,6,7,7,13,1,6,2,2,6,1,13,2,11,2,2,2,0,2,1,2,1,1,1,0,1,0,1,0,2,1,2,2,2,14,7,7,13,7,6,5,2,13,2,6,1,1,1,2,1,1,0,1,1,2,2,2,1,1,2,6,2,2,2,6,2,2,1,2,13,13,5,2,2,6,2,2,6,2,2,2,5,2,11,6,2,2,6,2,1,1,2,5,2,5,2,2,2,2,6,2,2,1,6,2,2,2,6,7,1,1,1,1,1,1,2,7,14,2,2,1,2,2,2,2,2,5,2,13,2,5,1,1,2,1,5,1,2,2,1,1,1,6,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,2,5,2,2,6,1,2,6,2,5,5,2,2,5,10,7,0,2,1,1,2,5,1,2,13,13,1,2,2,6,2,1,2,2,5,13,13,2,2,5,1,2,6,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,5,2,2,10,11,2,7,2,6,2,11,6,2,5,11,9,2,5,5,10,11,2,5,2,5,2,5,1,1,1,1,1,2,2,13,2,10,11,7,11,0,9,2,5,1,1,2,
+2,1,1,5,1,1,1,2,2,5,2,2,1,1,1,2,1,2,2,11,2,2,6,2,5,2,26,7,2,2,1,1,1,0,1,2,5,2,2,7,13,13,2,2,1,2,2,1,1,1,1,0,1,2,2,6,1,7,7,13,6,2,2,2,7,2,2,2,13,6,2,5,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,14,2,7,7,7,7,2,6,1,2,2,0,1,1,1,1,1,1,1,1,1,2,2,1,2,13,2,2,2,1,0,2,1,2,1,5,7,13,1,5,2,2,2,2,5,2,5,2,2,5,11,11,2,1,2,2,1,1,2,2,2,2,5,2,5,2,2,5,1,2,2,6,2,7,2,0,1,1,0,1,1,2,2,13,2,6,2,1,5,1,5,2,2,2,7,2,2,6,2,5,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,1,6,1,5,1,2,5,5,9,2,1,2,12,2,2,2,11,2,5,1,11,7,5,2,1,1,1,1,2,2,5,13,2,2,5,2,1,2,2,5,5,10,13,10,2,5,2,11,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,11,7,6,2,10,13,2,11,5,11,2,2,10,2,2,2,2,12,11,2,6,1,9,2,2,1,1,1,2,2,2,26,13,2,13,11,6,2,5,5,2,2,1,1,2,
+1,1,1,2,1,1,1,5,2,2,1,1,2,1,1,5,2,2,10,5,2,2,2,2,1,2,5,2,2,6,1,1,1,1,1,1,2,11,7,13,1,6,2,2,6,1,2,0,1,1,1,1,1,2,2,2,12,7,6,2,6,2,2,11,6,13,7,13,7,1,2,2,2,1,0,1,1,1,1,1,2,1,0,2,0,1,2,2,2,7,7,6,7,7,6,2,2,2,13,7,1,1,1,1,1,1,0,1,1,6,1,5,2,2,1,2,2,5,2,5,12,1,0,1,2,13,13,2,2,2,2,5,2,2,2,2,2,5,2,2,5,2,2,6,2,1,1,1,1,2,5,2,2,1,2,5,2,2,6,2,12,2,7,6,13,1,1,1,1,0,1,6,2,7,2,2,2,2,1,2,2,2,6,1,13,1,5,7,2,1,2,6,1,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,6,1,1,1,1,5,2,2,2,5,5,2,10,2,2,10,10,2,1,1,1,2,5,10,5,10,21,6,2,2,1,1,5,2,6,2,10,12,11,2,2,2,2,11,2,2,5,1,1,1,1,1,1,1,1,0,1,1,5,2,2,2,11,5,10,11,2,11,2,2,7,2,7,2,6,10,6,2,1,5,10,12,2,2,5,11,1,6,1,1,1,2,25,2,2,2,2,13,6,10,2,2,2,25,2,1,2,1,
+1,2,2,5,1,1,2,2,2,1,1,2,2,1,2,2,5,2,2,1,1,1,5,1,2,2,2,2,5,1,1,2,1,1,1,2,13,7,13,2,6,2,6,7,13,2,0,1,1,1,1,0,2,1,1,1,2,2,2,2,13,2,12,6,7,2,13,7,2,6,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,6,7,2,6,14,6,2,2,13,13,11,2,1,1,1,1,1,2,5,2,6,1,2,2,5,2,5,2,2,2,2,6,2,2,1,0,13,11,11,2,6,1,5,1,2,5,2,1,5,1,2,5,2,11,1,2,2,2,1,1,2,2,2,2,5,1,2,2,2,5,1,2,5,7,7,13,2,2,1,2,2,1,1,2,2,6,7,2,2,2,6,1,2,5,2,13,2,6,2,2,1,2,5,2,1,2,2,2,1,2,5,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,2,2,2,5,2,5,2,5,2,2,2,5,10,13,2,2,1,1,1,2,7,2,40,7,2,2,5,1,2,2,2,2,11,13,13,2,2,5,2,11,6,2,6,2,1,1,1,1,1,1,1,0,1,1,1,1,2,5,2,7,5,10,2,12,1,6,2,6,6,2,2,2,12,6,2,6,10,10,11,2,5,2,11,11,2,1,5,2,2,2,2,7,9,11,11,6,10,2,5,9,1,1,1,2,0,
+1,1,2,2,6,1,5,2,1,1,1,5,1,2,1,2,2,6,1,1,2,2,2,5,1,5,13,6,1,2,1,5,1,2,1,2,2,11,2,2,2,2,7,13,14,6,1,0,1,1,1,1,0,1,1,1,2,5,2,2,7,2,6,2,2,2,13,13,2,2,7,6,2,2,0,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,6,14,6,2,6,7,14,13,2,2,1,1,1,1,2,1,2,1,2,1,2,2,1,1,2,2,5,6,2,5,2,2,2,26,13,7,11,6,1,2,6,2,2,2,2,2,2,12,2,2,2,5,2,6,2,1,1,1,1,2,5,2,2,5,2,1,2,1,2,6,2,2,7,6,2,6,2,5,2,1,1,2,12,6,13,1,1,2,1,2,2,2,2,21,1,2,2,5,6,2,2,2,2,5,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,5,2,2,5,2,2,2,2,10,12,2,5,2,5,10,10,13,5,1,1,2,1,2,12,7,14,5,6,2,2,5,2,5,2,2,10,13,13,2,6,2,2,7,6,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,12,6,5,5,2,5,2,2,11,6,2,5,2,11,7,2,2,10,7,6,2,2,10,13,6,1,1,1,2,5,9,2,5,5,11,13,6,10,6,2,5,1,1,2,5,0,
+1,2,6,1,1,2,2,1,1,1,1,1,1,2,5,2,2,2,2,5,11,6,2,2,6,7,21,5,2,5,2,1,1,1,1,2,10,7,11,2,13,14,11,11,13,1,1,1,0,1,1,1,1,0,1,2,1,2,2,6,7,2,2,2,5,2,2,2,2,2,13,1,2,1,1,1,2,1,2,5,1,0,1,1,1,1,1,1,7,2,7,2,6,7,7,7,6,7,13,2,1,2,2,1,1,5,2,1,5,2,5,2,1,2,2,12,11,7,2,2,2,5,11,6,5,13,7,2,2,6,1,2,2,5,1,2,5,2,1,5,2,2,2,2,2,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,5,2,5,2,2,2,1,1,2,5,11,5,1,0,1,1,6,1,7,2,13,7,2,2,5,2,2,2,5,2,1,2,1,6,1,6,2,5,1,1,1,1,1,2,1,0,1,1,1,2,6,2,1,2,2,5,1,5,12,2,2,5,11,13,10,2,10,1,1,1,2,5,2,10,2,21,2,2,2,2,2,2,2,5,13,13,13,7,2,2,2,6,6,6,7,2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,5,5,6,2,7,11,2,2,2,5,6,6,2,2,2,11,6,2,2,12,6,1,2,2,5,11,2,2,1,2,6,9,9,9,5,2,11,11,2,11,2,2,2,1,1,1,2,2,
+2,11,10,2,5,10,1,1,1,2,1,1,2,5,2,2,5,11,2,2,2,5,2,2,2,13,10,1,1,2,1,2,1,1,1,1,6,2,11,7,7,7,13,14,6,1,1,1,1,0,1,1,1,1,1,1,2,2,5,1,13,7,6,2,2,11,11,6,5,5,2,5,2,1,1,0,2,2,2,2,2,1,1,1,1,1,1,1,14,6,7,7,7,13,6,5,2,10,11,2,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,11,13,12,1,5,7,2,12,21,6,7,2,2,5,2,2,5,2,2,2,2,2,2,2,1,2,5,1,2,6,2,1,1,1,5,2,5,2,2,2,2,5,1,1,2,5,2,2,2,2,2,5,1,5,2,2,14,13,6,1,1,0,2,2,2,5,2,12,7,2,2,2,2,5,2,2,2,2,5,2,1,5,7,2,2,1,1,2,1,1,1,1,1,0,1,1,5,1,2,1,5,2,2,5,1,2,2,1,2,12,11,2,11,1,1,1,1,2,2,2,12,2,10,2,6,1,5,2,5,5,2,10,7,13,2,6,2,2,2,6,2,2,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,25,6,5,7,2,6,2,2,6,2,2,1,11,6,11,2,9,10,11,2,2,10,12,11,12,1,1,1,2,6,2,2,2,6,10,10,6,7,2,5,1,1,1,1,5,0,
+2,13,1,5,2,1,1,1,1,2,1,1,5,2,2,1,6,1,5,2,6,2,5,2,1,5,1,1,1,1,1,1,1,1,1,1,5,2,2,11,6,11,7,11,2,2,1,1,1,1,1,1,1,2,1,2,2,10,10,2,21,2,2,2,5,2,10,5,5,2,2,2,5,0,1,1,1,1,2,2,1,1,0,2,1,1,1,1,7,2,14,14,13,7,13,2,13,14,14,2,1,1,1,1,2,1,1,2,6,2,5,2,2,2,12,5,5,2,2,10,11,5,28,7,7,7,6,1,2,5,2,1,2,5,1,2,5,2,1,1,2,2,5,11,1,6,1,1,2,2,2,2,2,13,1,2,2,1,2,2,2,2,6,1,13,1,2,2,2,2,6,7,14,6,6,0,1,2,5,2,13,2,13,1,2,13,1,2,6,1,2,5,5,2,2,2,2,2,13,2,1,1,2,5,2,1,1,1,1,1,1,0,1,1,1,2,5,2,2,6,2,2,1,7,7,13,5,5,1,1,1,1,2,5,2,2,21,11,2,1,2,1,2,2,2,5,10,10,12,2,7,2,11,6,6,2,7,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,11,6,2,2,2,6,2,11,2,6,1,6,6,6,2,2,5,10,11,11,13,11,2,2,5,2,1,2,2,2,25,7,2,13,11,11,10,2,1,1,1,1,2,2,2,
+2,2,6,2,1,1,1,1,1,1,1,2,5,2,1,1,1,2,6,1,2,2,2,2,1,2,6,1,1,5,1,2,2,2,2,2,2,6,7,11,13,7,14,2,2,1,1,1,1,1,2,2,1,2,5,5,5,2,10,2,13,2,2,5,2,2,11,2,2,2,13,2,2,1,1,1,2,1,1,2,2,1,0,2,2,1,0,2,2,12,14,7,13,2,7,2,12,13,11,2,1,1,2,2,5,2,1,1,2,2,2,13,1,1,5,2,5,5,12,13,5,10,11,13,13,6,2,6,2,2,2,2,1,1,1,1,2,1,1,2,5,2,2,5,2,2,2,2,1,2,2,5,5,2,6,2,5,2,5,2,2,6,1,2,2,2,1,1,1,1,2,7,14,6,1,1,6,1,1,2,2,2,21,2,6,2,5,5,2,2,6,1,2,6,1,2,13,2,7,2,2,6,1,2,1,1,1,1,1,1,2,1,1,1,1,2,6,2,5,2,2,2,1,7,12,5,2,2,2,1,1,1,1,2,2,6,5,2,2,1,1,2,1,6,9,10,13,21,2,2,2,11,1,11,2,2,6,2,2,1,1,1,2,1,1,1,1,1,1,1,1,2,5,2,2,11,6,7,6,1,2,7,2,2,2,2,11,6,7,11,2,2,10,2,13,26,1,2,2,1,1,1,5,2,2,2,2,10,13,10,10,2,1,2,1,1,2,1,5,1,
+1,1,2,1,1,1,1,1,1,1,1,1,1,6,1,1,5,2,2,2,5,2,5,2,1,2,2,2,2,2,5,2,2,1,5,2,11,7,11,7,13,13,2,13,2,2,2,1,1,1,2,1,1,2,1,2,2,5,5,13,11,2,6,1,6,1,5,2,6,5,6,1,2,1,1,1,1,1,1,2,1,1,0,2,1,1,1,1,2,16,7,7,11,6,2,2,21,7,6,1,1,1,1,1,1,1,1,1,1,5,2,2,2,13,21,2,2,2,5,2,21,12,13,13,11,2,13,2,2,2,5,1,1,2,2,1,2,1,1,2,2,2,5,2,2,2,5,2,1,2,12,2,5,2,5,2,2,2,2,5,2,13,13,13,2,1,1,1,2,5,2,13,2,2,1,1,2,2,6,2,10,13,2,6,1,2,2,2,1,5,1,2,6,1,5,2,13,2,13,1,1,2,5,1,1,1,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,1,1,10,10,2,2,1,1,1,1,1,1,2,5,6,11,7,5,2,2,5,2,2,11,2,13,2,6,2,7,6,2,6,6,2,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,7,11,7,2,6,2,2,11,2,2,5,6,6,2,2,2,5,10,6,11,1,2,5,2,1,1,2,2,5,2,5,2,10,10,2,12,2,1,1,1,1,2,2,1,2,
+1,1,2,2,2,2,1,1,1,1,1,1,2,2,1,1,2,2,5,2,2,2,2,1,2,13,2,1,2,5,2,5,2,2,2,2,2,13,7,7,5,2,2,2,2,2,1,1,1,1,2,5,1,2,5,5,10,1,6,7,21,1,2,2,7,2,5,2,2,11,7,6,1,0,1,1,1,1,1,1,1,1,1,0,2,1,0,2,2,7,13,7,7,2,11,5,7,7,2,1,2,1,1,1,2,1,2,1,2,2,2,12,2,7,13,2,2,12,7,11,14,2,14,7,13,13,7,2,2,6,2,2,2,1,1,1,2,2,1,2,5,2,2,2,2,5,2,2,2,5,2,2,6,1,5,2,6,1,6,1,2,14,7,7,2,1,2,6,2,1,7,14,2,2,1,1,2,6,1,2,12,11,6,5,2,5,5,2,2,1,1,1,2,2,6,1,2,6,6,6,1,2,2,1,1,2,2,2,1,1,1,1,1,0,1,1,1,2,12,2,5,1,1,5,10,1,1,1,1,1,1,2,2,1,2,2,13,2,2,5,2,2,5,2,2,2,13,2,2,2,2,2,2,11,2,6,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,6,10,11,7,2,2,2,11,6,2,1,2,7,11,6,2,2,2,11,1,12,10,2,2,5,1,1,5,2,2,6,1,2,11,26,6,9,6,1,1,1,1,5,2,2,6,
+1,1,1,1,5,2,5,1,1,1,1,2,5,2,1,2,5,2,2,6,7,5,2,2,11,7,6,2,2,2,1,2,5,1,2,5,2,7,11,7,2,2,6,13,2,1,1,1,1,2,1,1,1,1,2,5,5,5,1,2,2,2,2,6,5,2,2,5,2,13,11,2,1,1,1,0,1,1,1,2,0,1,0,2,1,0,1,1,2,13,1,2,7,13,11,11,10,14,1,0,2,1,1,0,1,6,2,1,2,6,5,7,2,12,6,1,2,2,2,21,2,13,21,14,7,13,2,2,5,2,2,2,2,5,2,2,5,2,1,2,1,2,2,5,2,2,2,2,5,2,1,5,2,2,2,2,2,5,2,2,5,13,5,5,2,1,1,2,1,1,13,2,2,13,0,1,2,5,2,12,7,14,7,1,2,6,2,5,1,2,2,5,2,5,1,2,5,7,7,2,6,1,2,6,1,1,5,2,1,1,1,1,1,1,1,1,1,2,12,1,12,5,5,10,2,1,1,2,1,1,1,5,1,2,2,5,11,2,2,2,5,2,2,2,10,13,5,2,5,2,2,11,2,6,7,6,2,6,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,11,7,6,2,2,5,2,5,1,6,2,11,5,6,2,5,2,12,10,10,2,9,2,2,2,1,1,1,1,2,11,2,21,10,10,10,2,1,1,1,1,1,2,5,1,
+1,2,1,1,2,2,2,1,1,1,1,6,1,2,2,6,2,9,6,1,2,2,11,2,13,13,2,1,2,6,1,1,2,1,2,2,13,26,2,6,2,5,7,2,1,2,1,1,2,2,1,1,1,2,2,2,5,2,5,2,5,2,10,1,2,1,2,11,13,7,2,2,2,1,0,1,2,2,1,5,1,1,1,0,0,2,1,2,7,5,6,5,7,13,21,14,14,13,1,1,1,1,0,1,1,2,1,5,2,1,5,2,6,13,1,1,1,2,7,10,2,5,13,6,2,7,6,1,1,2,5,2,2,2,2,6,2,2,2,1,5,2,5,2,2,5,2,1,2,1,0,1,2,6,1,5,1,2,2,2,13,6,7,7,1,1,1,1,2,2,7,2,5,2,1,1,2,5,2,2,13,12,6,2,5,2,7,2,6,1,6,2,2,2,6,2,2,13,2,6,1,5,2,2,5,1,2,1,2,1,1,1,1,0,1,1,1,2,6,2,5,2,2,2,2,1,1,1,1,1,2,1,2,5,2,12,10,2,6,1,1,2,5,11,11,2,6,2,2,2,11,2,6,7,6,6,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,11,7,11,6,2,2,2,2,2,6,1,2,2,2,11,2,2,2,5,9,10,5,2,2,2,5,1,1,1,2,2,5,1,13,10,11,1,2,1,1,1,1,2,1,2,6,
+1,5,2,1,2,5,1,2,2,1,1,1,2,2,5,2,2,2,1,2,5,11,11,11,11,13,1,1,1,1,1,1,1,2,5,2,2,2,2,7,2,10,10,2,0,1,2,1,2,2,2,1,1,1,2,5,5,2,2,6,2,11,2,5,2,2,12,1,7,13,2,2,2,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,13,7,6,7,14,30,21,14,13,2,6,1,1,1,1,1,1,2,2,2,1,2,13,2,2,13,2,1,2,14,7,6,5,7,7,7,11,13,2,2,2,2,2,2,6,1,2,7,2,2,9,2,2,13,1,13,2,2,2,2,2,2,6,2,5,2,2,2,2,6,2,5,13,6,13,14,1,1,0,2,5,6,6,2,2,2,5,1,2,2,6,1,7,2,2,2,2,5,2,6,1,5,2,2,2,6,1,2,2,7,2,2,2,6,1,2,2,6,2,1,5,1,1,1,1,1,1,2,1,1,2,2,2,6,2,1,2,2,1,2,0,1,1,1,1,2,1,2,12,7,2,2,5,2,2,14,11,2,2,2,6,1,11,6,2,11,5,2,7,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,2,12,10,7,10,11,6,2,2,5,6,2,2,11,6,2,9,2,6,9,2,2,2,2,2,2,5,2,1,1,1,5,2,1,11,12,13,2,5,1,1,1,2,1,1,5,2,2,
+2,2,2,5,6,7,1,2,5,2,2,1,5,2,2,1,5,2,5,2,2,13,12,1,13,26,2,2,1,1,1,2,1,1,1,1,2,13,12,7,5,5,7,6,1,1,1,1,2,2,1,1,0,1,2,2,2,2,5,1,2,2,2,1,2,13,7,2,13,2,2,2,1,2,1,1,2,2,2,6,1,0,2,1,2,2,5,13,2,2,5,14,13,13,17,12,13,1,1,2,1,1,2,1,1,2,5,1,1,2,5,1,5,2,1,1,13,1,12,1,11,2,7,7,7,7,2,5,2,2,12,6,5,2,5,12,2,2,2,2,5,2,13,1,2,5,2,5,2,5,2,1,2,2,6,2,5,2,2,5,14,2,2,13,1,2,1,2,2,13,7,2,2,6,2,2,2,5,2,2,6,1,1,1,6,2,6,1,2,2,1,5,2,5,1,5,13,12,6,1,2,2,1,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,25,28,2,1,1,2,5,1,1,1,1,1,2,1,1,5,2,13,7,2,2,5,2,2,13,13,2,2,6,1,2,6,6,2,11,6,2,2,6,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,11,7,7,11,2,2,5,2,2,5,2,2,2,11,2,2,2,2,6,7,11,1,6,2,2,2,1,2,1,1,1,2,11,13,10,2,1,1,1,1,1,1,2,1,2,2,
+7,1,1,1,2,10,1,10,10,1,1,1,2,2,1,2,2,2,2,2,10,7,11,2,6,1,2,1,1,1,1,1,1,1,1,1,6,2,2,2,13,13,11,2,2,0,1,1,1,2,1,1,1,1,2,2,5,2,2,2,5,2,6,1,10,11,2,6,2,7,2,6,1,0,1,2,2,2,13,5,0,1,0,1,1,2,5,7,6,13,7,6,14,14,13,6,7,2,2,1,1,1,2,5,1,1,1,1,1,2,2,1,2,1,5,2,5,2,5,6,5,7,11,13,11,13,2,2,2,2,13,6,2,5,13,2,2,2,2,5,2,6,2,2,6,1,1,2,2,1,2,1,2,5,2,2,2,2,6,1,2,6,14,13,1,1,1,1,2,2,6,2,5,2,2,5,2,2,2,1,1,1,1,2,2,7,2,1,5,2,2,2,5,2,1,2,5,6,1,1,5,2,5,2,2,2,1,6,1,1,1,1,2,1,1,2,2,1,65,5,12,1,2,2,2,2,1,5,1,1,1,1,1,2,2,12,10,2,2,2,2,6,11,11,2,2,2,5,2,2,2,2,11,6,13,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,25,7,7,11,10,2,2,6,1,11,2,2,25,6,6,11,2,2,10,2,10,6,2,2,2,5,1,1,2,1,1,1,2,11,13,2,2,1,1,1,2,1,1,5,2,12,2,
+2,5,2,1,5,10,2,10,1,1,1,1,2,5,1,1,2,1,1,1,2,10,2,2,2,2,5,1,1,1,1,1,1,1,1,2,2,2,2,13,13,14,11,2,1,2,0,1,1,2,2,1,0,2,2,2,2,1,5,2,2,2,2,1,5,2,2,5,10,11,2,7,0,2,1,0,2,5,2,6,1,1,1,1,1,6,13,5,13,14,11,16,21,13,7,13,13,0,2,1,1,1,2,1,1,2,1,1,1,13,1,1,2,5,7,2,2,2,5,5,13,28,11,13,13,7,6,1,2,5,7,2,11,7,13,2,2,5,2,2,6,5,1,6,1,2,1,6,1,6,1,1,2,2,2,5,2,5,2,2,6,1,14,13,2,2,6,1,2,13,2,2,2,6,1,2,1,1,1,1,1,2,1,2,5,7,6,2,2,2,6,1,6,1,1,2,13,1,2,2,2,5,2,2,5,2,2,1,2,1,2,38,2,1,1,5,1,1,5,38,1,1,2,5,2,2,1,1,1,1,1,2,1,2,5,7,1,2,5,2,5,2,13,7,6,2,5,2,2,5,2,11,7,7,2,6,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,7,11,10,7,5,2,2,2,6,1,2,2,10,7,2,6,9,6,7,11,5,2,2,6,2,5,1,1,1,1,2,5,26,6,9,5,1,1,1,1,1,2,2,2,10,2,
+2,1,1,1,2,2,5,2,2,1,1,1,2,2,1,1,1,1,5,1,1,2,5,2,2,6,1,1,1,2,1,1,1,2,1,5,7,6,7,12,21,7,12,2,0,2,1,2,1,2,1,2,1,1,1,2,2,1,1,2,5,2,2,2,2,11,5,7,2,5,10,11,0,2,0,1,2,2,2,7,0,1,1,1,2,2,14,11,11,13,16,14,8,2,21,11,2,2,1,1,0,1,1,1,1,1,1,2,5,7,6,5,7,2,2,2,5,2,2,13,7,11,13,13,7,13,2,2,2,2,5,7,7,7,13,2,2,2,2,2,7,2,6,7,2,6,1,2,6,1,5,1,2,6,1,2,2,2,2,5,2,5,13,6,2,6,2,5,7,2,7,2,2,1,2,2,2,1,2,2,1,5,1,2,2,7,1,2,2,6,1,2,2,2,1,2,13,1,6,2,5,2,1,1,6,2,5,2,1,2,2,1,1,2,1,1,1,2,1,0,1,1,1,2,5,2,1,1,1,1,1,1,6,2,12,2,2,2,2,2,2,2,21,6,2,2,2,2,5,2,5,2,11,6,5,7,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,12,1,10,2,2,2,5,6,2,2,5,6,5,2,5,2,2,11,11,7,2,2,6,1,2,2,1,2,1,1,1,5,26,5,9,2,1,1,1,2,1,1,6,9,12,0,
+2,6,1,1,2,5,0,2,5,2,1,1,5,2,1,1,1,2,1,5,2,10,1,5,2,1,2,1,5,2,2,2,1,1,2,2,11,2,5,21,13,13,7,1,1,1,0,1,1,2,1,1,1,2,1,2,5,2,1,1,2,5,2,5,5,2,2,6,5,7,10,2,1,0,2,1,1,2,5,2,1,1,2,2,2,10,11,12,6,14,14,11,7,13,12,7,2,1,1,1,1,1,6,1,1,2,1,1,2,2,1,11,2,2,1,2,2,6,2,7,21,13,15,13,13,7,2,5,2,2,2,13,13,7,7,6,1,1,1,2,13,7,7,2,13,1,2,5,2,2,2,1,2,2,6,2,5,2,2,2,2,13,14,6,2,5,2,2,5,2,7,1,1,1,12,7,2,0,1,1,2,2,2,6,2,5,1,2,5,2,2,12,2,2,6,7,7,13,2,2,2,5,2,2,7,2,2,1,1,1,5,1,1,1,1,1,2,1,0,1,1,1,1,2,2,1,1,1,1,1,2,2,5,2,2,6,1,6,2,5,1,2,13,2,5,1,1,6,2,2,2,2,11,7,11,2,6,5,2,1,1,1,1,1,1,1,1,1,1,1,1,5,2,5,7,10,13,2,5,2,2,2,11,2,2,5,11,2,5,2,5,11,11,2,6,1,2,5,2,2,1,1,1,2,5,11,11,2,2,1,1,1,2,1,1,1,1,2,5,2,
+2,2,2,1,6,2,5,1,2,2,5,2,2,5,1,1,1,1,2,2,10,26,5,2,1,2,1,1,2,1,5,2,1,1,5,2,2,2,13,13,13,7,12,1,2,2,1,1,0,2,1,1,0,1,1,2,2,2,1,1,1,2,2,2,2,7,5,7,11,7,13,2,1,1,1,1,1,1,2,2,1,1,2,2,5,21,7,2,29,14,11,7,13,7,7,6,2,1,1,1,0,1,2,1,1,1,2,2,5,2,5,5,2,1,0,1,2,2,6,13,13,7,14,13,13,6,2,2,2,5,5,13,7,13,7,2,2,1,2,5,7,7,6,2,7,2,6,1,2,5,2,1,2,5,2,2,6,2,5,2,5,13,7,6,1,2,2,1,2,7,13,1,2,1,1,0,0,2,0,1,1,2,6,7,2,2,1,1,2,2,12,2,2,6,1,7,5,7,2,2,5,2,5,1,6,2,5,2,1,2,2,1,1,1,1,0,12,2,1,1,1,1,1,1,6,1,2,1,1,1,1,5,7,1,5,2,5,1,2,2,2,5,13,2,2,2,6,1,2,5,2,2,6,2,10,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,9,11,1,5,2,2,2,5,2,2,2,2,6,7,2,10,2,5,2,11,11,2,2,5,2,2,2,5,1,1,2,1,2,26,5,2,25,2,1,1,5,1,2,1,1,9,9,2,
+1,2,5,1,2,2,2,1,5,2,5,2,2,10,5,2,1,6,1,6,1,1,1,5,2,2,5,2,2,2,2,2,10,2,2,11,7,11,2,6,7,13,5,2,6,1,2,5,2,11,2,1,1,1,1,2,5,2,1,1,1,2,5,6,12,11,10,12,13,14,13,2,1,1,1,1,1,1,2,2,1,1,1,7,14,14,22,5,13,7,5,14,7,7,6,2,5,1,1,0,1,1,2,1,1,2,5,5,2,5,7,7,2,1,1,2,5,7,2,21,11,14,13,13,13,6,2,2,5,2,2,21,7,13,12,1,1,1,1,2,7,7,2,7,7,2,1,2,6,2,1,1,2,2,2,5,2,2,2,2,2,21,13,2,2,6,2,6,5,7,6,2,1,1,0,2,1,1,1,1,1,2,5,2,2,5,1,2,6,1,14,2,2,2,5,2,6,7,2,6,2,2,2,13,1,2,2,2,5,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,5,1,1,1,2,2,2,2,2,2,6,1,1,2,1,10,2,1,6,1,2,6,1,6,1,11,6,6,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,7,2,13,2,5,2,2,11,2,6,2,12,6,2,5,2,2,10,11,5,2,2,5,1,2,1,1,1,1,6,7,11,5,1,2,1,1,2,1,1,1,5,2,6,10,2,
+1,1,2,13,10,1,1,5,1,5,9,2,5,5,2,2,2,1,1,1,1,2,1,2,2,2,6,1,1,5,2,2,1,2,2,5,5,7,11,2,2,5,7,1,2,0,1,1,2,7,1,2,0,1,5,2,2,5,1,1,2,1,1,2,11,7,13,7,10,21,6,2,1,1,2,1,1,1,2,2,1,1,1,2,13,21,7,2,13,13,11,5,2,13,13,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,5,2,2,5,1,1,2,2,2,13,13,13,13,13,13,2,2,2,2,2,13,13,13,13,7,2,1,1,2,5,7,13,7,6,7,2,2,5,2,5,1,1,2,2,5,2,2,2,5,2,7,13,2,6,2,2,2,7,7,7,7,2,1,0,2,0,2,1,1,1,1,2,2,2,6,1,1,6,1,7,6,2,5,2,2,7,7,5,2,2,2,6,1,2,6,7,6,2,1,1,1,5,1,1,1,1,1,0,2,1,1,1,1,2,1,1,6,2,1,1,2,7,5,1,2,2,5,1,2,1,2,12,2,2,6,1,2,5,2,2,2,5,10,6,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,10,10,7,2,2,1,6,2,5,2,2,2,2,2,2,2,5,2,13,6,2,2,6,2,5,2,1,6,1,5,1,26,2,2,2,5,0,2,1,1,2,1,2,5,10,2,1,
+1,1,2,13,2,1,1,2,2,5,2,1,1,2,2,5,2,1,1,1,2,5,2,2,5,2,2,2,2,2,5,2,1,2,6,1,11,2,7,2,5,5,10,1,5,1,1,1,2,11,0,1,1,1,2,2,6,2,1,1,1,2,13,2,12,6,5,13,13,21,11,0,2,1,1,2,2,5,1,13,1,2,5,13,7,16,2,12,13,13,6,13,14,13,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,6,2,1,1,2,12,1,6,13,21,13,11,13,13,11,6,2,5,2,2,13,14,11,13,6,1,2,2,6,1,7,7,2,2,7,6,2,2,2,2,2,1,2,6,2,2,2,5,2,2,21,6,7,6,6,6,6,7,6,14,7,0,2,0,2,1,1,1,1,2,1,2,6,2,2,1,1,2,2,13,2,2,1,2,6,7,7,2,5,2,5,2,6,2,7,7,6,6,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,5,1,2,2,2,1,2,2,1,6,1,6,2,2,5,1,2,12,1,1,1,2,5,2,2,5,2,2,13,6,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,5,6,5,1,2,2,2,11,6,2,11,6,5,2,2,2,13,5,2,1,2,2,1,2,1,1,2,1,2,10,2,5,9,2,5,1,1,1,1,1,2,2,5,2,1,
+1,1,5,13,5,1,2,11,9,2,1,1,1,2,1,1,2,1,2,1,1,1,1,1,2,2,5,1,1,1,2,1,2,1,2,5,10,11,10,2,10,7,13,1,2,2,1,1,1,5,1,1,1,1,2,5,1,2,2,5,2,5,2,2,13,13,15,13,21,13,2,2,1,2,5,1,5,2,16,5,2,2,14,6,2,13,2,14,7,7,7,13,13,11,2,2,1,2,1,1,1,2,2,2,2,2,1,2,2,6,7,2,6,2,12,5,2,12,14,16,13,13,13,14,11,2,2,2,2,13,13,14,13,7,2,1,1,1,2,5,7,2,7,5,7,1,2,13,2,5,1,1,1,2,2,2,2,2,2,2,16,12,6,6,2,6,13,7,7,8,7,1,0,2,0,0,2,1,1,1,2,7,14,2,5,5,1,2,5,1,2,2,5,2,2,7,2,6,2,2,2,2,2,7,7,6,7,2,6,1,6,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,5,2,5,1,1,2,1,5,2,2,6,2,1,2,10,2,5,1,1,2,2,6,2,5,2,11,2,2,5,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,9,7,5,2,2,2,5,2,6,2,10,11,6,6,6,2,2,6,11,2,2,9,2,5,2,2,9,1,1,6,10,5,2,2,5,9,2,1,1,1,5,1,2,6,9,9,2,
+1,2,21,7,2,1,1,2,1,1,1,2,1,2,5,2,9,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,5,2,10,2,5,6,2,2,5,2,2,1,5,0,1,1,2,1,2,1,1,2,2,5,2,1,1,2,7,2,13,13,13,14,28,13,13,6,1,1,2,2,2,5,2,13,13,6,7,6,7,7,16,6,7,13,7,11,13,12,2,2,1,2,2,2,1,1,1,2,2,2,7,1,2,7,7,14,6,1,7,2,2,13,21,13,21,15,21,14,13,13,2,6,1,6,1,14,13,7,11,2,1,1,1,2,7,5,7,2,7,2,1,5,2,2,2,2,1,1,2,5,2,5,6,5,7,13,2,7,2,2,13,1,6,7,7,6,2,0,2,0,2,0,1,1,1,2,5,2,2,5,2,1,5,6,2,5,2,2,13,7,7,6,2,2,2,5,2,6,7,2,6,6,2,1,5,2,1,1,1,1,1,1,0,2,1,1,1,1,1,1,2,1,1,1,2,1,2,1,1,2,2,5,2,2,2,2,2,1,1,1,2,1,5,1,2,2,2,10,6,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,5,5,2,5,2,6,2,5,2,2,11,6,2,11,2,2,2,2,26,2,1,6,1,1,2,2,2,1,2,2,5,2,2,6,9,2,2,5,2,1,2,1,5,6,9,5,1,
+1,10,5,5,2,1,2,1,1,1,1,5,1,2,2,2,2,1,1,1,1,1,1,5,1,2,1,2,5,1,2,5,2,2,2,2,5,2,10,2,1,5,10,1,1,2,2,1,1,5,1,1,1,2,2,5,2,5,2,1,5,11,2,7,21,21,21,16,13,13,2,1,1,1,1,1,1,2,12,6,7,7,13,7,13,7,6,7,2,11,14,7,2,1,2,1,1,2,2,2,1,1,2,2,2,13,1,2,21,13,2,2,2,6,2,5,21,13,14,14,21,13,29,14,11,2,2,5,2,5,13,13,7,11,2,1,1,1,2,2,14,7,2,7,6,1,1,2,5,5,1,1,0,1,2,2,2,2,2,13,7,6,7,6,6,7,2,7,7,7,7,2,0,2,1,0,2,2,1,1,2,2,2,6,2,5,1,2,1,2,1,1,2,2,7,7,7,6,2,5,2,2,6,6,7,7,5,6,1,2,2,1,1,1,1,1,0,2,1,1,1,1,1,1,1,2,1,2,2,1,6,1,1,1,2,5,2,2,2,6,1,6,1,2,6,1,1,2,6,2,5,11,6,6,2,6,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,12,10,2,2,1,2,2,2,6,1,2,11,7,6,2,11,2,10,7,2,1,2,2,1,1,5,2,1,1,5,10,2,5,2,2,6,1,1,1,2,1,2,1,10,2,2,1,
+5,10,2,1,1,1,5,2,2,1,1,1,1,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,5,2,5,2,5,1,1,5,5,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,1,6,2,12,13,10,11,13,7,5,13,6,0,1,2,2,1,1,2,12,2,12,7,2,6,7,14,6,7,13,7,2,2,1,1,5,1,1,1,2,1,0,1,2,5,7,11,2,2,13,13,2,2,5,5,2,7,17,13,21,14,13,13,13,14,2,2,2,2,2,11,13,13,13,11,2,1,1,1,6,2,7,7,6,7,2,1,6,2,7,2,5,1,1,1,2,2,5,2,6,7,2,6,2,2,2,2,13,6,14,7,2,1,1,0,0,2,1,2,5,1,2,7,5,2,2,2,5,2,1,1,1,6,2,7,6,13,1,5,2,2,2,2,7,6,7,6,1,2,2,6,1,1,1,1,1,1,1,1,0,1,1,2,1,1,5,1,6,2,5,1,1,1,2,1,2,2,2,2,5,1,1,2,5,2,1,2,6,9,2,2,2,11,11,2,6,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,12,1,6,1,1,2,5,2,9,5,2,6,11,6,6,2,5,5,10,2,2,2,10,1,1,2,1,1,2,9,5,1,2,5,26,1,1,1,1,2,1,5,9,10,5,5,2,
+2,1,1,1,1,2,1,2,2,2,1,1,2,2,1,2,5,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,10,2,5,2,2,5,1,2,1,1,2,2,1,1,21,1,1,1,1,2,2,5,2,2,2,2,14,15,11,29,14,21,13,11,13,2,2,1,1,1,1,2,2,6,2,13,2,2,13,7,7,13,7,7,11,6,1,1,1,2,1,5,2,5,1,1,1,2,2,7,2,1,11,14,6,2,2,2,2,11,13,29,13,13,8,13,13,13,13,6,2,5,2,5,13,13,7,7,2,2,1,1,1,2,2,7,7,2,2,5,2,2,2,13,2,2,1,2,1,2,1,2,2,5,13,2,6,7,2,12,11,6,6,7,6,2,2,1,1,2,0,2,2,2,1,6,1,2,2,5,2,2,2,5,2,2,1,2,7,2,6,2,2,2,6,1,6,6,13,7,2,2,5,2,2,2,1,1,1,1,1,0,2,1,1,2,2,2,1,1,1,1,2,2,6,1,1,5,1,1,2,2,2,2,5,2,1,1,1,1,1,2,2,2,5,2,11,2,6,2,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,12,1,1,1,2,1,11,2,2,2,25,11,2,2,9,2,13,2,1,5,2,2,1,1,2,1,5,2,5,9,6,2,2,2,1,1,1,2,5,5,9,7,9,2,5,1,
+1,2,1,1,1,1,1,5,2,1,1,2,5,2,2,2,2,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,2,5,2,10,2,10,2,1,2,7,1,1,6,2,1,2,12,2,2,2,1,2,2,5,2,5,2,1,13,21,7,14,29,29,14,13,11,13,2,1,2,1,1,1,1,1,2,2,2,2,13,11,13,7,11,2,11,6,1,1,1,2,1,1,2,2,2,2,1,1,2,6,5,1,1,13,21,6,1,2,2,12,21,11,14,11,14,13,13,13,14,11,2,2,2,2,12,13,13,7,7,6,2,1,2,2,2,13,7,6,2,6,2,2,5,2,2,2,5,1,2,1,2,5,2,2,2,7,6,1,2,2,6,6,2,6,7,7,6,0,1,0,1,0,2,2,5,1,2,5,2,7,2,2,5,2,2,1,6,6,2,7,6,2,2,2,5,2,5,2,7,7,13,6,2,2,5,2,2,2,1,1,1,1,1,0,2,1,1,2,2,1,2,1,1,2,5,1,1,1,2,2,5,2,5,2,5,2,5,2,2,2,6,1,5,2,2,2,5,11,11,2,2,6,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,5,2,9,2,5,1,2,5,2,2,2,5,2,5,2,10,11,2,10,7,2,2,2,5,2,1,2,2,1,2,25,1,2,2,9,11,0,2,1,1,1,2,5,9,2,2,12,2,5,
+1,1,1,5,1,2,2,2,2,1,1,1,2,5,1,2,1,1,1,1,1,1,1,2,6,5,5,2,2,1,1,1,1,2,5,5,2,2,2,5,10,12,1,1,2,2,2,13,2,2,2,1,1,2,5,2,2,2,6,1,11,7,13,13,14,21,14,13,13,14,2,1,5,2,2,1,2,5,2,13,2,14,2,7,7,11,7,7,7,2,2,1,2,1,2,2,2,9,2,2,1,1,2,2,2,2,2,13,14,2,2,6,7,7,11,13,16,11,17,11,6,16,13,13,2,2,1,2,7,13,11,13,2,2,1,2,6,1,7,7,7,2,5,2,2,2,6,1,7,5,2,2,1,2,2,1,2,5,13,7,2,2,7,7,5,2,6,7,7,7,2,2,1,1,1,1,2,7,2,2,2,2,6,2,2,6,2,2,1,2,2,7,2,7,2,2,2,5,2,2,2,2,13,5,7,2,6,2,2,5,2,1,1,1,1,1,0,2,1,1,1,1,2,2,1,1,1,1,2,2,1,1,1,2,1,2,2,2,2,2,2,5,2,1,2,2,6,2,5,2,2,11,5,11,2,2,2,6,1,2,1,1,1,1,1,1,1,1,1,1,2,2,7,6,2,2,1,1,2,2,11,2,2,9,11,2,6,1,10,10,11,5,1,2,2,2,1,5,1,2,2,2,6,2,5,2,5,1,1,1,1,1,9,10,9,1,25,1,9,2,
+1,1,2,1,1,5,5,2,5,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,2,1,1,5,2,2,2,1,2,2,11,10,5,2,5,21,2,2,5,2,5,13,1,2,2,2,2,1,2,2,2,5,2,2,2,11,7,14,16,29,16,13,13,2,6,2,1,2,2,2,5,1,2,2,6,7,13,6,13,7,7,2,11,13,6,1,2,1,2,5,1,2,2,2,5,0,2,5,2,2,1,7,13,7,6,2,2,12,6,7,16,11,17,13,8,13,11,7,2,6,2,2,2,13,7,7,2,14,2,1,2,2,2,2,7,2,7,2,2,5,6,1,2,6,2,1,2,5,1,2,2,2,2,5,2,2,6,2,13,6,7,6,14,7,13,2,0,1,1,1,1,2,7,2,5,2,6,2,5,2,5,2,6,1,5,7,7,2,2,5,2,5,2,2,2,6,2,2,13,7,2,2,2,6,2,2,1,1,1,1,1,1,0,0,2,0,1,1,2,1,1,1,1,5,2,2,2,1,1,1,2,6,2,9,2,5,1,2,1,2,5,2,2,2,6,2,7,7,11,2,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,11,2,2,1,2,1,2,5,2,1,2,5,2,5,11,6,10,11,2,2,2,5,2,6,1,1,1,5,6,2,2,2,2,2,1,5,1,1,1,1,25,2,5,5,5,9,2,2,
+1,1,2,1,1,2,5,2,2,2,1,1,1,1,2,5,1,1,1,0,1,1,1,1,1,5,1,2,2,2,5,1,2,2,5,13,13,2,2,5,2,1,2,1,2,2,2,1,1,6,1,1,2,2,2,5,2,2,5,2,7,13,29,29,16,16,11,6,5,13,1,2,2,5,2,2,2,2,2,13,13,2,6,14,2,7,7,13,13,2,5,1,2,2,1,2,5,2,5,1,1,2,2,5,2,2,13,13,13,1,7,7,13,7,14,16,13,11,11,13,13,17,6,2,6,2,2,5,14,6,6,7,6,2,1,2,1,2,7,7,13,2,6,1,2,2,2,6,1,2,1,6,2,1,5,2,14,2,2,2,5,1,2,7,13,1,7,13,7,7,6,1,0,2,0,1,2,2,7,1,2,2,2,2,2,2,2,1,2,2,7,7,6,2,1,2,2,2,2,5,2,2,13,7,6,6,5,1,2,2,5,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,5,2,2,2,2,2,6,1,2,2,5,2,1,5,2,5,2,10,11,2,2,2,2,1,5,1,1,1,1,1,2,1,1,1,1,1,2,12,6,2,2,5,1,2,1,2,2,1,5,2,10,2,13,5,5,2,5,2,1,2,2,1,1,6,1,2,10,2,25,6,2,2,1,2,1,1,2,2,2,25,1,5,2,2,6,1,
+1,1,1,2,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,2,1,2,5,2,2,1,5,2,5,11,5,2,13,5,1,1,1,1,6,7,11,0,1,2,1,1,1,2,7,2,5,2,2,6,13,29,16,17,29,13,11,6,11,6,2,2,2,2,2,2,5,1,11,13,7,6,7,7,6,7,13,14,16,2,2,2,2,1,5,2,2,6,2,1,5,1,5,2,5,5,21,11,2,2,12,2,11,7,29,16,13,11,17,11,17,13,17,2,2,2,6,7,13,7,7,8,6,2,1,1,1,2,13,7,2,7,2,6,1,5,2,2,2,13,1,2,1,2,2,2,13,1,13,2,2,6,7,13,2,6,6,7,6,7,6,6,0,1,1,0,2,5,2,2,2,5,2,5,2,1,1,2,2,2,6,6,2,2,1,6,1,6,1,5,2,2,11,6,2,7,13,2,5,2,2,1,1,1,1,1,1,0,2,1,1,1,1,2,1,1,2,1,2,2,5,1,1,2,2,2,5,2,5,2,2,1,5,2,2,2,2,2,2,2,6,10,2,7,6,2,1,1,2,2,5,1,1,1,1,1,1,1,1,1,2,2,7,2,13,2,1,2,2,5,1,2,2,2,6,2,13,2,11,2,2,1,2,5,2,1,1,2,1,5,7,6,1,2,6,2,5,2,1,1,1,2,5,9,2,2,25,2,2,2,
+1,1,1,1,1,1,5,2,5,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,11,7,11,14,5,0,1,2,5,1,13,2,1,5,2,1,0,1,2,2,6,2,5,2,7,21,14,29,14,30,13,13,22,16,12,2,2,11,2,2,2,2,6,28,14,8,2,11,13,14,13,14,16,17,2,2,5,2,2,2,2,7,2,2,2,1,2,2,2,2,13,13,7,6,7,6,7,13,7,16,29,7,13,13,14,13,11,11,6,2,6,2,7,6,7,7,6,7,2,2,1,1,2,7,6,6,2,2,2,6,2,5,2,5,7,2,2,2,2,13,13,1,6,2,2,5,2,6,2,2,5,6,7,7,13,2,2,2,1,1,1,2,2,2,5,1,2,2,2,2,2,1,2,5,1,2,7,6,1,2,1,5,2,6,7,2,12,7,7,6,6,2,2,2,2,6,1,1,1,0,2,1,1,0,2,1,1,1,1,1,1,1,1,2,1,2,1,6,2,6,1,2,2,1,2,1,2,1,5,2,2,6,5,1,11,1,2,13,11,2,6,1,6,2,5,2,2,1,1,1,1,1,1,1,1,2,12,6,6,2,2,1,5,2,2,1,6,1,6,2,10,11,10,10,2,1,1,5,2,2,1,1,2,5,10,10,1,9,11,1,2,1,2,1,2,5,2,9,5,1,9,2,2,9,2,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,5,13,2,16,2,1,1,2,2,5,5,5,2,2,2,1,1,1,6,2,2,2,1,2,13,13,21,14,21,29,14,14,30,30,13,2,2,13,12,6,2,5,2,36,14,7,7,13,13,14,13,14,29,13,2,2,2,2,2,2,2,7,2,2,2,2,2,5,2,6,21,6,7,2,2,2,13,6,16,29,14,11,13,7,13,13,17,11,6,2,6,2,14,6,6,6,7,6,2,1,1,1,2,7,7,6,6,6,6,2,2,2,2,1,2,5,2,6,5,7,2,6,5,2,2,2,2,11,5,13,1,11,2,13,7,6,6,0,1,1,1,1,2,5,2,2,2,1,0,1,1,1,1,2,2,7,7,2,1,2,2,2,2,2,7,2,11,11,6,2,6,5,1,2,5,2,1,1,1,1,0,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,2,6,2,6,1,6,9,2,2,2,2,2,6,7,7,2,6,2,6,1,2,2,2,6,1,5,1,1,1,1,1,1,1,2,10,5,2,2,1,2,2,1,2,2,11,2,6,7,13,11,5,1,1,1,2,2,2,1,2,5,1,11,1,6,6,10,7,2,1,1,1,1,2,2,10,2,2,25,2,2,25,2,
+1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,5,2,2,2,1,13,13,7,2,13,2,1,1,1,1,2,10,2,1,1,1,2,5,1,5,7,5,2,2,6,13,21,17,21,12,29,14,29,24,13,2,2,2,5,2,2,6,5,13,16,13,14,13,14,14,15,13,13,16,13,1,2,2,5,2,2,5,2,2,1,2,2,5,1,2,14,13,2,7,2,2,21,7,6,17,14,11,7,13,29,11,8,7,11,11,2,2,2,7,6,13,7,7,13,2,1,1,1,13,14,2,7,7,2,2,2,2,6,2,5,2,2,2,6,13,7,2,2,2,2,5,2,11,7,6,2,5,13,2,14,13,6,2,6,0,1,1,1,2,2,2,2,2,1,1,1,1,2,2,2,5,13,7,1,2,5,2,5,2,13,10,13,13,2,6,6,6,6,1,2,5,2,1,1,2,1,1,0,2,1,1,1,1,1,1,1,6,1,1,1,1,1,2,5,2,2,5,2,6,1,2,1,2,2,2,2,2,5,2,5,5,2,13,6,6,6,6,6,2,6,1,6,1,2,2,1,1,1,1,1,1,5,6,2,2,12,2,1,5,2,1,1,5,6,6,6,7,13,5,2,6,1,1,2,5,2,1,1,9,10,2,5,1,11,9,2,5,1,1,1,5,2,5,10,9,5,2,9,2,2,1,
+2,1,1,1,1,1,1,1,2,5,2,2,1,1,1,1,1,1,1,1,1,1,1,2,6,9,2,5,2,2,5,2,5,6,21,13,11,11,14,6,1,1,1,2,12,12,1,1,0,2,2,2,2,2,2,2,5,1,2,21,21,23,15,30,36,30,36,17,14,6,2,2,2,2,5,2,13,21,7,14,29,29,29,14,13,13,13,16,13,0,2,2,2,1,6,2,2,2,5,2,5,2,5,5,21,2,5,11,6,2,13,6,6,22,13,11,7,17,15,13,13,13,11,13,6,2,13,7,7,11,7,6,8,6,1,1,2,7,7,6,14,7,6,2,2,6,1,2,2,2,2,13,2,7,2,6,2,13,2,2,2,5,7,7,2,2,14,2,13,6,7,6,6,2,2,1,1,2,2,2,1,1,1,0,2,1,2,1,2,7,13,6,2,1,2,2,2,2,2,2,2,11,7,6,6,7,2,6,2,6,2,1,1,0,0,2,1,0,1,1,1,1,1,2,1,1,1,5,2,1,1,1,2,2,5,2,2,2,1,5,2,2,6,5,1,2,2,10,2,2,2,10,11,6,6,6,6,1,2,5,2,5,2,2,2,2,1,1,1,1,2,10,2,6,2,2,2,2,1,1,2,1,26,11,11,7,7,2,5,1,1,1,2,2,6,5,2,2,2,1,1,6,13,5,2,1,1,1,1,2,2,10,12,1,2,2,2,5,2,1,
+1,1,1,1,1,1,1,1,1,1,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,11,11,5,13,13,2,2,2,2,12,13,21,2,0,2,2,2,2,2,2,2,6,2,5,11,13,16,29,14,30,29,21,29,22,14,2,6,1,2,2,2,2,5,13,13,36,29,16,16,14,14,16,13,13,11,0,1,2,1,5,2,2,2,6,2,2,2,2,2,21,13,2,2,12,2,13,2,7,7,29,13,13,12,13,11,8,11,8,7,7,6,2,6,7,8,7,7,7,7,2,2,1,1,14,7,7,6,7,2,6,6,7,6,2,1,1,6,5,7,13,2,2,2,7,2,6,2,2,7,2,6,13,2,2,7,7,6,2,13,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,1,2,7,2,2,1,5,2,2,5,7,2,7,11,7,6,7,6,2,1,2,2,1,1,0,2,1,1,0,1,2,1,1,1,2,2,1,2,1,2,1,1,1,2,5,1,2,2,5,2,2,1,2,1,2,1,2,5,2,2,5,2,5,11,6,6,6,2,6,6,2,2,2,2,1,1,1,1,2,1,1,1,2,10,7,7,2,1,6,5,1,1,2,2,13,11,7,10,11,2,2,6,1,2,5,9,2,1,1,1,1,1,2,2,10,2,6,1,1,1,1,2,11,9,6,5,10,10,10,2,2,1,
+2,1,6,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,6,5,2,1,2,1,5,13,13,7,11,0,1,2,2,13,2,21,2,1,5,6,5,2,1,2,11,2,2,2,13,13,21,21,29,22,13,22,43,14,14,6,1,2,6,2,2,2,11,6,16,23,16,16,13,29,14,13,16,13,6,2,1,1,2,2,2,5,7,2,2,2,5,2,9,14,2,12,7,2,11,2,2,21,13,16,13,13,16,11,8,13,8,13,11,11,6,2,6,7,7,13,7,6,6,2,1,1,2,7,6,1,7,14,2,2,7,16,7,2,6,1,2,2,2,2,5,2,2,5,2,2,6,1,13,2,2,13,6,13,13,7,6,2,7,1,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,7,6,2,5,2,2,2,5,2,13,2,12,2,11,6,7,2,2,5,2,1,1,1,1,1,1,1,1,1,1,0,2,1,2,1,1,5,1,1,1,1,1,2,2,2,5,2,2,2,5,2,5,2,2,2,6,1,2,11,6,6,2,11,5,6,6,7,6,1,2,1,1,2,1,2,2,1,1,1,1,1,5,10,10,10,9,2,2,2,1,1,5,2,2,26,6,10,2,5,2,2,1,2,2,5,1,2,1,1,1,2,5,27,21,2,1,2,1,1,1,5,1,9,10,6,10,10,11,5,11,0,
+2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,6,1,2,2,2,2,2,1,5,2,7,13,11,7,5,6,5,5,5,10,10,13,2,2,12,5,13,1,1,5,2,2,5,5,13,2,13,11,13,17,21,29,16,6,7,2,6,2,5,2,12,11,14,14,29,16,16,16,21,14,13,14,29,13,6,2,1,1,1,1,5,5,2,5,1,2,1,2,10,7,2,13,2,1,11,2,2,6,13,16,13,13,15,13,13,11,13,8,11,13,6,2,7,7,7,13,6,7,13,2,6,1,2,7,11,6,14,6,6,6,7,35,7,13,2,2,5,2,5,2,2,5,2,2,2,2,2,13,7,2,13,7,13,7,8,11,2,5,2,1,1,1,0,2,1,1,1,1,1,2,1,1,1,1,6,1,2,2,2,2,6,2,2,2,2,5,2,11,13,6,13,25,2,1,1,1,0,1,0,2,1,1,1,1,0,1,1,1,6,2,1,1,1,1,2,1,1,2,2,5,1,5,2,2,2,1,2,1,5,2,9,6,2,5,10,7,11,7,2,7,7,6,2,5,2,25,2,5,2,1,2,1,1,1,1,1,2,11,9,5,2,5,2,1,1,1,2,2,10,11,10,10,10,2,2,1,2,5,2,2,6,2,1,1,1,1,2,13,10,2,1,1,1,1,1,6,9,6,6,10,6,6,6,2,10,2,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,5,2,5,2,2,1,5,21,11,13,5,2,2,13,2,6,5,12,0,2,5,2,5,2,1,2,2,5,2,13,7,2,13,7,14,23,30,36,22,29,16,11,7,13,13,13,13,11,14,29,13,16,29,13,29,13,14,14,17,13,2,2,2,1,2,2,2,2,6,2,2,2,2,2,13,5,2,10,2,12,2,10,7,11,16,29,17,13,16,13,17,13,8,11,11,6,6,6,14,8,6,7,7,6,2,7,1,1,2,14,2,2,14,6,2,6,2,14,7,2,2,2,6,2,2,2,5,2,2,13,2,5,2,14,7,2,7,7,7,2,14,6,6,2,1,1,1,1,1,1,1,0,2,1,0,1,0,1,1,1,2,2,6,2,5,5,7,2,5,13,11,11,11,11,11,7,7,2,2,1,1,1,1,1,1,0,2,1,0,2,1,1,1,1,2,1,1,1,1,1,1,1,1,2,10,2,2,2,6,9,1,2,1,2,1,2,1,2,2,2,11,2,11,2,2,2,7,6,6,6,2,2,2,2,2,2,1,1,5,2,2,6,1,6,5,2,1,2,2,1,2,2,2,5,10,10,9,13,1,5,2,2,1,2,2,2,2,2,5,1,1,1,11,10,5,2,1,1,2,1,2,2,2,11,6,6,10,6,6,5,11,2,
+1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,1,1,1,2,5,2,2,2,2,2,6,1,10,21,13,13,2,1,6,13,21,11,2,2,0,1,11,2,2,5,1,2,2,5,11,6,5,5,11,7,30,23,34,68,11,22,17,13,11,7,6,2,21,13,11,11,14,17,21,14,36,13,21,29,14,11,2,6,1,1,2,6,1,6,1,2,2,2,5,6,5,2,13,2,14,13,12,2,2,7,16,21,14,13,11,13,13,16,13,11,13,6,6,2,7,7,13,6,7,7,6,7,1,1,7,14,2,2,14,2,2,6,2,14,13,2,5,1,2,2,2,5,2,6,5,2,2,2,2,21,13,5,7,7,2,7,6,13,2,2,2,1,1,1,0,2,0,2,0,1,1,1,1,1,2,6,1,5,2,2,2,2,5,1,2,2,2,5,2,2,13,5,2,2,1,0,1,1,0,1,0,2,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,2,5,2,2,2,1,1,5,2,2,1,2,2,5,2,7,11,6,2,6,6,5,13,6,2,2,6,2,1,2,1,1,1,2,1,6,1,1,2,1,5,2,2,5,1,1,2,2,10,10,10,10,2,5,2,1,1,2,5,2,25,2,5,2,1,1,5,10,10,2,1,2,1,1,1,2,5,9,11,6,6,6,10,6,10,11,2,
+1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,6,1,1,1,1,5,2,1,1,1,1,1,1,1,5,2,2,2,21,13,10,11,5,2,21,16,14,10,1,1,1,1,5,2,12,2,5,2,5,2,5,2,2,2,2,21,29,43,47,18,12,31,29,13,13,13,13,13,15,2,14,22,21,30,15,29,30,13,16,13,13,13,6,1,1,2,5,5,5,2,2,6,2,2,2,12,6,5,21,5,6,6,1,1,2,13,6,2,13,6,6,1,7,15,8,11,8,7,6,2,6,7,11,13,6,8,7,7,2,1,7,7,1,6,7,2,6,6,2,14,6,2,1,2,5,2,6,1,2,2,5,7,6,6,7,7,2,2,6,2,7,13,7,7,6,2,2,1,1,0,1,1,1,0,1,1,1,0,2,1,2,2,2,2,5,2,5,2,2,2,5,1,1,1,2,2,13,13,2,1,1,1,1,0,1,0,1,0,1,1,0,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,5,2,2,2,6,1,1,2,1,5,2,2,5,2,2,5,9,7,11,2,2,13,7,7,2,2,5,2,2,5,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,5,2,10,12,10,1,10,5,2,1,1,1,2,9,2,2,2,2,1,6,1,5,2,1,5,2,1,1,1,1,1,10,6,6,6,7,6,10,6,10,2,
+2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,5,2,2,5,2,2,6,1,2,6,2,2,2,5,10,11,13,5,5,14,21,14,26,2,2,1,1,2,13,5,2,2,1,1,2,2,2,5,1,2,11,14,30,37,34,29,11,34,14,17,21,21,16,21,21,14,22,29,16,22,21,36,22,14,15,13,14,13,6,1,2,5,2,2,2,2,5,2,5,1,5,7,11,7,13,1,5,7,2,2,2,2,7,8,11,2,2,2,13,17,11,15,11,6,2,6,13,8,11,11,7,7,7,7,1,1,7,5,2,13,2,2,7,6,1,13,2,2,1,1,2,2,7,2,13,2,2,2,2,7,2,13,2,5,2,7,13,7,7,6,2,6,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,13,5,2,2,2,2,2,2,5,1,6,2,5,2,2,13,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,1,1,1,1,1,1,1,2,10,2,1,1,1,1,2,1,2,2,2,6,1,6,6,7,7,2,5,11,6,13,2,2,2,5,2,2,5,1,1,1,1,5,2,2,1,1,2,2,1,2,5,1,1,2,1,25,2,2,12,6,2,5,1,1,2,2,5,2,11,6,11,2,2,10,5,2,2,1,1,2,1,1,2,2,1,11,6,6,6,6,6,5,6,2,
+2,1,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,1,2,2,2,2,5,1,2,5,2,2,11,7,10,10,10,5,2,5,11,1,1,2,2,1,5,2,2,1,2,6,2,13,2,2,6,6,21,30,45,49,34,47,13,37,21,13,21,13,7,7,16,13,14,14,29,16,29,30,13,21,14,14,14,14,2,6,2,5,2,2,5,2,2,2,2,2,13,12,1,27,2,6,7,5,2,1,1,2,2,21,6,2,6,13,17,15,15,13,11,11,6,7,11,7,14,7,13,2,5,2,6,1,2,2,2,2,5,2,2,6,2,6,2,1,1,6,2,6,13,2,2,2,2,13,1,6,7,2,2,2,2,2,7,8,7,6,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,6,1,7,13,2,2,5,1,1,2,1,2,2,2,11,13,13,1,1,2,1,1,1,1,2,0,1,1,1,1,1,1,1,1,1,2,1,2,5,1,1,1,1,1,1,1,5,2,2,2,10,1,1,6,1,1,5,2,5,2,2,2,5,11,13,1,2,10,11,6,2,6,2,2,2,6,2,5,1,2,1,2,5,1,1,2,1,1,2,5,2,1,1,2,2,2,5,2,10,10,2,2,1,1,5,11,2,10,2,11,11,5,11,10,2,2,1,2,1,5,1,1,1,5,9,6,6,2,10,11,9,6,6,2,
+2,5,2,5,5,5,1,2,5,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,2,5,2,7,5,5,2,2,11,5,12,13,2,2,5,2,5,2,13,1,1,5,1,5,2,2,7,2,13,22,49,45,16,45,47,21,32,2,13,11,13,13,13,21,11,29,22,30,43,29,22,12,21,14,11,13,29,1,2,2,2,5,2,1,2,5,2,5,2,13,1,12,2,5,5,2,2,2,5,1,2,11,11,13,6,2,11,17,15,15,15,7,11,6,6,11,7,7,2,6,5,2,2,1,1,2,1,2,2,2,2,6,2,2,7,2,2,1,1,2,7,6,2,5,5,13,2,2,2,6,1,6,1,6,6,14,7,6,7,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,5,2,2,2,2,2,6,2,5,1,13,11,13,13,13,2,1,0,2,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,1,1,1,1,2,2,5,2,1,1,6,1,2,6,1,2,2,2,5,2,10,7,2,5,6,7,13,11,2,2,12,2,2,2,2,2,1,1,1,6,2,1,5,1,2,1,1,2,2,2,1,5,2,12,11,2,5,6,2,5,1,1,2,2,2,5,10,10,10,6,10,5,1,2,1,2,1,1,1,1,2,1,2,11,9,6,5,2,11,6,6,2,
+10,2,5,5,9,2,1,1,1,1,1,1,1,2,1,1,5,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,10,13,10,5,5,10,10,10,1,2,6,2,2,2,5,2,5,1,2,2,5,2,11,2,2,14,30,30,29,35,45,21,43,16,5,5,30,14,13,14,14,21,37,22,34,30,29,16,21,29,14,13,16,7,2,2,2,6,2,1,2,2,2,2,2,2,7,1,2,2,2,2,2,5,2,2,2,2,7,11,13,11,6,7,17,8,15,13,7,8,6,6,6,6,6,6,2,6,7,2,1,1,1,1,1,1,6,6,2,6,2,5,2,2,1,2,5,5,7,2,2,2,12,2,6,1,7,5,2,2,7,7,6,7,13,7,6,1,1,1,0,2,1,1,1,1,0,1,1,1,1,1,2,5,2,2,2,5,2,5,1,2,2,5,2,2,2,13,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,6,1,2,1,2,2,6,1,2,2,5,2,10,1,7,11,2,6,13,7,11,6,6,6,7,12,11,2,1,2,1,1,2,2,2,6,1,2,5,2,2,5,2,10,2,2,9,25,2,13,7,10,6,2,1,1,2,26,2,2,10,11,6,13,2,2,1,5,1,1,1,1,1,2,1,2,5,9,6,6,6,6,6,6,11,2,
+2,1,1,2,5,2,5,2,2,1,1,1,1,1,1,1,1,2,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,5,10,10,1,5,5,1,2,12,1,9,2,2,5,2,5,7,2,2,2,5,2,2,5,2,6,29,22,30,30,117,36,29,30,13,7,13,22,5,14,29,16,21,30,23,43,15,21,16,17,22,11,5,13,7,6,2,5,1,2,6,6,2,2,6,2,2,6,6,2,5,2,5,2,1,2,2,5,1,2,21,13,16,11,7,22,15,29,11,6,11,6,6,6,13,6,7,13,5,7,6,0,1,1,0,2,2,7,7,6,1,2,2,5,2,1,2,2,2,13,2,2,13,7,2,2,5,6,1,2,5,7,2,14,7,11,13,1,1,2,1,1,1,1,1,1,1,1,1,0,1,0,2,2,2,2,5,2,1,2,2,6,2,1,2,5,2,11,11,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,5,2,2,2,5,1,2,5,2,2,5,2,2,2,2,6,10,6,5,2,13,6,11,7,2,11,11,2,2,2,5,1,1,2,2,5,2,2,1,1,1,2,2,2,6,13,2,5,6,2,9,1,13,9,2,2,1,6,2,9,2,2,11,2,9,2,2,6,1,2,5,2,2,1,1,5,1,2,2,2,11,6,6,5,9,7,2,5,
+1,6,5,5,10,5,2,5,10,2,1,1,1,1,1,1,1,1,5,1,1,2,5,1,2,1,2,1,1,2,1,1,2,2,5,5,1,2,2,6,5,10,2,2,10,2,2,2,5,2,2,1,2,2,2,2,2,2,7,16,47,23,70,120,22,15,7,7,6,2,16,13,13,16,22,29,16,32,22,17,16,30,29,13,6,7,7,2,2,2,2,6,2,2,11,2,6,2,1,5,6,1,2,2,2,2,2,2,2,2,1,2,2,30,13,17,7,7,18,15,13,8,11,7,11,7,13,11,11,7,2,2,5,2,1,1,1,1,2,6,6,6,2,2,2,6,2,2,6,1,6,13,2,2,26,7,2,5,2,2,2,6,2,2,6,7,6,7,8,2,2,1,1,1,0,2,1,1,1,1,1,0,1,2,1,2,14,2,6,2,2,2,1,1,2,1,6,1,2,5,7,6,1,1,1,1,1,1,1,0,2,0,1,1,1,1,1,0,1,2,1,1,1,1,1,1,5,2,1,1,1,1,2,5,2,2,2,1,2,2,2,2,6,2,5,2,2,7,5,11,2,2,11,7,6,7,2,5,6,2,2,5,2,1,2,1,6,2,2,1,2,6,1,1,6,1,7,10,7,2,2,6,5,5,10,2,5,2,1,1,2,5,2,25,6,2,2,6,1,2,1,2,1,2,1,1,1,2,1,2,6,9,6,6,9,6,2,2,7,2,
+2,2,1,2,6,1,2,6,1,2,1,1,1,1,1,1,2,1,2,1,1,1,2,5,1,2,5,1,1,1,1,1,1,1,5,2,2,10,2,5,2,5,2,12,7,13,13,2,2,13,2,1,1,5,2,12,6,2,11,29,48,120,32,16,13,7,14,11,13,13,14,15,21,22,32,13,29,30,32,29,14,21,14,13,2,21,13,1,2,5,2,1,2,2,11,2,6,2,2,2,2,2,6,1,5,2,5,2,5,2,1,2,7,29,17,21,11,13,18,13,8,7,11,7,7,13,8,11,8,11,7,6,7,1,1,1,1,1,2,7,6,2,7,6,6,13,2,1,2,7,2,21,7,1,5,2,1,6,1,5,7,6,2,6,7,7,7,6,7,2,2,1,1,1,1,1,1,0,2,1,1,1,1,2,2,5,21,2,2,2,2,6,2,5,1,2,1,1,2,2,11,11,2,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,2,1,1,2,5,2,6,1,5,2,5,2,1,2,2,6,5,6,6,2,2,13,7,11,8,6,2,2,2,5,2,2,2,1,5,1,2,2,2,5,2,1,1,2,1,5,10,11,11,2,10,2,2,2,10,2,2,2,6,5,2,6,1,2,2,2,9,7,5,1,2,5,2,1,1,1,1,6,1,5,1,11,6,9,11,1,6,2,9,2,
+1,2,5,2,2,5,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,1,1,1,1,1,1,1,5,10,7,5,12,7,2,2,2,5,5,2,2,5,2,2,2,2,2,2,2,6,5,5,7,13,14,13,13,13,13,6,13,29,13,13,7,7,7,14,36,23,22,37,47,22,14,13,13,21,13,2,7,2,6,1,2,2,5,2,5,6,6,6,6,2,5,2,5,1,6,2,1,2,2,2,1,2,5,2,29,16,16,11,16,17,15,11,8,6,6,11,8,11,13,6,6,6,6,6,1,1,1,1,1,2,7,2,2,2,2,2,7,2,2,2,6,5,11,2,2,12,2,1,2,2,7,7,5,2,1,2,7,6,7,13,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,6,1,5,2,5,2,2,2,5,2,1,1,11,7,13,12,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,5,2,1,5,2,2,1,2,2,2,2,2,2,1,6,5,2,5,1,2,11,2,2,2,11,11,7,6,2,1,2,5,2,2,5,2,1,1,5,2,5,2,6,1,2,1,1,2,6,11,2,13,6,2,2,5,5,6,1,11,2,2,2,2,2,9,5,2,25,2,2,2,6,1,2,1,1,2,1,2,2,2,6,2,25,9,7,2,9,2,2,11,2,
+2,5,2,1,2,2,1,5,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,2,1,2,2,12,2,2,13,2,5,2,2,5,2,9,2,2,2,5,2,2,1,5,5,2,5,7,21,21,14,14,15,7,14,13,29,14,14,21,15,21,29,16,32,18,30,47,36,29,13,21,22,17,2,13,21,2,2,2,13,2,2,2,2,11,2,2,2,2,2,2,2,6,1,2,2,2,5,2,5,1,2,2,16,29,29,14,16,23,15,11,11,6,7,7,7,7,11,6,6,7,7,2,2,1,1,1,1,2,2,2,6,2,6,7,12,2,1,2,2,7,7,2,6,1,2,1,2,6,7,2,2,2,5,6,14,7,8,13,2,2,1,1,1,1,1,1,1,1,1,1,1,0,12,0,21,2,1,2,2,2,2,2,5,2,2,2,5,11,10,13,2,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,5,2,2,1,1,2,1,10,2,10,1,10,5,2,2,2,2,2,2,6,5,1,11,2,5,6,6,7,2,6,1,2,2,2,5,2,5,1,2,1,2,2,2,2,2,5,1,1,1,2,2,10,2,2,25,2,9,2,6,9,5,2,2,2,5,2,5,2,2,2,9,2,6,1,1,5,2,1,1,5,1,2,5,2,2,2,2,2,9,5,2,10,11,11,
+2,1,1,2,5,1,1,2,1,2,1,1,1,2,1,1,1,1,2,5,1,1,1,1,1,1,2,5,1,1,2,2,2,5,5,2,2,5,2,10,2,1,1,1,2,5,1,1,1,1,1,1,1,2,2,2,14,43,13,7,13,14,29,29,14,16,13,5,7,13,13,13,21,22,29,23,32,16,29,21,16,29,14,11,7,2,6,2,7,2,2,5,2,7,2,6,6,6,1,6,2,5,2,2,6,1,6,2,2,2,2,2,13,13,16,13,6,29,17,17,8,11,8,13,6,8,7,11,7,6,7,2,6,1,1,1,1,1,2,2,6,2,6,11,6,5,6,1,2,2,21,7,6,1,6,1,1,2,2,7,7,7,6,1,7,7,13,7,13,2,0,1,2,1,1,1,1,1,1,1,1,1,1,1,1,38,2,1,6,2,5,2,1,1,2,5,2,2,10,13,11,2,2,1,1,1,1,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,2,2,1,5,1,2,2,2,2,5,2,5,2,2,2,2,13,5,6,7,11,6,6,2,2,2,5,10,2,2,2,2,1,1,5,2,2,5,2,2,2,1,2,5,2,5,1,5,2,2,5,2,2,2,2,5,1,9,2,1,2,2,6,10,7,2,1,1,6,1,6,1,2,1,2,2,2,1,2,25,2,9,7,2,13,13,6,36,
+2,2,5,2,1,1,1,5,5,2,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,5,2,5,2,2,5,5,13,11,2,6,13,13,5,2,2,5,2,2,2,9,2,2,2,2,1,1,2,2,11,13,36,13,5,2,14,29,22,16,29,16,29,13,14,13,16,16,13,21,29,30,29,17,16,30,13,21,11,7,6,2,2,7,11,2,2,6,2,2,6,6,6,2,6,1,2,2,2,5,2,5,2,2,2,5,2,5,7,6,13,11,11,13,22,16,11,11,7,11,6,7,6,8,11,13,6,5,2,1,0,1,1,1,2,5,2,7,7,11,6,1,2,5,2,2,2,11,2,2,2,1,2,2,5,5,7,7,2,1,7,14,6,13,7,5,60,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,5,1,2,5,1,2,11,10,2,13,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,5,2,2,1,2,5,2,2,6,1,2,2,2,5,2,2,5,12,6,6,11,7,11,2,2,2,6,2,2,6,1,1,1,1,1,2,5,2,2,5,2,5,2,1,2,2,11,10,2,2,2,1,2,1,5,2,2,5,2,5,2,2,11,5,10,11,1,1,2,1,1,2,1,2,6,1,1,1,5,2,2,2,5,9,2,10,11,43,74,
+5,5,2,5,5,1,1,5,5,5,1,1,1,1,1,1,1,2,6,2,2,5,1,2,1,2,11,2,2,2,6,5,14,11,13,7,16,26,15,1,2,2,2,5,2,2,1,2,2,2,1,2,1,2,13,30,16,13,6,13,30,32,43,34,29,30,30,22,29,29,22,13,30,13,21,37,45,43,14,21,14,21,11,11,8,2,2,6,6,2,2,2,5,2,6,6,6,7,2,6,2,2,6,1,2,2,2,6,1,2,1,2,7,6,7,11,11,11,18,13,15,13,6,11,6,6,13,6,6,6,6,6,1,2,1,1,1,2,6,2,2,6,6,6,2,6,2,2,2,12,11,6,2,5,1,0,1,2,2,5,13,2,6,1,7,14,7,13,11,1,0,2,1,1,1,1,1,2,1,1,0,2,1,1,1,1,1,2,5,2,1,2,2,1,1,2,5,2,2,11,13,2,1,1,1,1,1,1,2,1,1,1,0,1,2,1,1,1,2,1,1,2,1,1,1,1,5,1,1,1,1,2,1,5,2,1,2,2,5,1,1,5,2,2,1,2,6,2,2,5,12,2,9,11,6,2,2,2,6,1,2,5,2,1,5,1,1,2,2,6,2,2,1,1,2,5,5,13,2,2,5,1,5,2,2,2,2,1,2,2,2,2,5,9,6,1,9,5,1,1,1,2,1,1,1,2,5,2,2,2,5,2,9,2,2,10,6,70,205,131,
+2,5,9,2,1,1,1,2,5,2,5,2,2,1,1,1,2,14,11,2,2,2,6,1,5,5,26,2,6,10,21,7,13,13,13,21,21,14,2,1,2,6,2,2,2,2,5,1,2,2,1,1,2,11,7,30,2,13,13,11,14,36,46,30,30,30,16,29,14,29,14,13,36,2,30,36,46,30,21,13,13,16,8,21,22,2,2,7,2,6,1,2,2,6,6,7,6,6,2,2,2,5,2,5,5,2,5,2,5,2,2,5,2,2,7,7,11,8,16,13,13,11,6,13,6,7,11,11,11,6,2,6,2,2,1,0,1,2,2,2,6,7,11,6,2,2,2,6,2,5,12,2,2,1,1,1,1,2,7,7,13,7,2,2,13,13,6,7,13,6,1,0,1,0,2,1,0,0,2,1,1,1,1,1,1,1,1,2,2,2,5,2,1,1,5,1,2,5,7,6,2,2,0,1,0,1,1,1,1,1,1,0,1,0,2,1,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,6,1,2,6,1,1,2,6,2,2,2,2,13,2,2,2,5,6,2,2,6,1,2,2,2,2,1,2,2,5,1,1,6,1,2,5,1,2,6,2,11,13,2,5,2,2,1,5,1,2,1,1,25,6,2,5,9,2,2,25,6,2,1,5,2,2,5,2,2,2,2,5,2,9,2,2,6,5,10,5,131,201,201,74,
+2,2,2,6,2,2,1,1,6,2,2,2,2,5,2,2,5,13,26,2,5,2,2,2,2,5,2,5,7,21,10,13,16,15,13,14,13,27,2,2,5,2,2,5,2,2,2,6,12,2,2,6,2,7,29,10,2,11,17,11,22,34,32,30,16,29,13,13,14,14,13,21,29,2,21,43,22,13,21,29,16,29,13,17,15,1,6,17,2,2,7,6,2,7,6,13,6,6,2,6,2,2,2,2,2,5,2,2,2,2,2,2,2,6,6,6,7,7,13,13,8,11,6,11,13,8,11,7,6,6,6,2,2,2,1,0,1,5,2,5,7,11,13,7,11,2,2,2,2,6,5,2,2,2,1,1,1,2,2,2,5,7,6,2,2,14,2,13,13,2,2,1,1,1,1,1,57,38,0,2,1,1,1,1,1,1,0,2,2,5,2,1,2,2,1,2,5,2,2,5,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,9,5,2,2,2,6,2,2,6,2,2,2,7,2,6,2,2,13,11,1,2,5,9,11,2,6,1,2,2,2,1,1,1,2,6,2,5,2,2,2,11,5,2,9,2,6,2,1,1,5,1,2,2,2,5,2,6,10,10,7,11,2,2,2,2,2,2,25,2,5,2,2,2,6,1,9,11,11,16,192,205,201,200,74,
+2,6,5,1,2,1,1,5,2,5,2,2,6,2,2,5,2,13,12,5,2,5,2,5,2,6,2,5,21,16,11,2,30,16,14,21,16,2,2,2,2,2,6,2,2,2,21,2,28,13,22,15,6,7,17,9,2,11,22,30,22,34,43,30,22,29,14,29,14,15,13,21,17,29,16,30,30,17,17,17,17,16,13,15,8,2,14,11,2,2,6,2,2,2,7,7,7,6,2,2,2,5,5,2,6,1,2,13,2,5,2,5,13,7,2,6,7,13,6,2,17,7,2,11,7,11,8,13,11,6,2,2,6,1,1,1,1,2,1,2,2,2,2,6,2,7,2,11,5,13,7,2,5,2,1,1,1,7,5,13,1,5,1,2,2,14,6,14,8,2,2,1,1,1,1,1,1,1,1,1,2,1,0,2,0,2,1,1,2,2,2,1,1,1,2,5,2,2,6,2,11,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,6,1,6,1,11,7,6,2,6,2,2,10,2,2,11,11,2,6,2,2,5,6,2,2,1,1,2,1,5,1,1,5,1,2,9,2,5,9,6,2,2,6,1,2,2,6,2,1,2,2,2,11,6,2,11,10,6,10,2,1,5,2,2,25,2,2,2,9,2,25,1,2,6,11,13,165,205,201,201,204,201,131,
+2,2,2,6,1,1,1,2,1,2,11,7,2,2,2,10,2,13,10,10,2,5,2,1,2,2,5,11,14,21,15,21,22,29,13,14,11,6,2,5,2,5,1,2,2,2,13,5,21,22,117,29,2,30,17,2,6,14,20,15,22,31,32,33,29,29,21,13,14,13,14,16,47,106,31,16,24,17,33,29,29,15,13,29,11,0,29,11,2,6,6,2,6,6,7,7,13,7,0,6,2,2,5,6,1,5,6,1,2,2,2,6,5,7,6,2,7,7,7,7,16,6,7,8,11,11,13,11,17,6,6,2,2,1,1,1,1,2,2,2,5,2,5,2,2,2,13,5,12,7,2,6,2,2,1,1,1,2,7,5,2,2,1,2,13,13,7,17,13,2,2,2,1,1,5,2,1,1,9,40,2,5,2,1,1,1,1,1,2,2,1,2,5,1,2,2,5,1,2,2,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,2,1,2,2,2,2,11,11,6,6,6,2,6,5,11,2,7,13,12,1,1,2,5,1,9,7,7,1,2,2,21,1,1,2,1,2,6,2,5,2,5,2,2,5,1,6,2,5,1,1,2,6,2,11,2,5,11,10,5,10,6,1,2,2,5,2,2,2,5,2,2,5,2,2,9,11,13,13,205,201,201,204,201,201,74,
+2,5,1,1,6,2,1,5,2,7,13,11,2,5,7,29,14,15,13,21,13,5,5,2,6,1,2,5,7,21,21,29,22,22,13,29,7,2,2,2,2,2,6,2,2,12,7,21,12,29,130,18,15,120,6,6,1,14,22,18,22,122,37,29,16,16,13,14,13,15,47,106,43,18,15,24,24,29,33,18,30,22,11,8,8,1,16,7,1,11,2,2,2,7,6,7,13,2,2,2,5,2,2,2,12,7,2,13,2,5,7,2,13,7,6,6,7,13,8,6,16,6,13,17,13,11,11,11,11,11,6,6,2,0,1,1,1,1,1,5,2,2,2,2,6,1,14,6,2,2,1,2,2,6,1,1,2,7,7,2,2,13,1,5,13,14,7,7,13,2,2,7,5,5,65,7,2,2,1,9,9,51,9,10,59,1,2,1,2,1,5,2,1,2,5,2,2,5,2,5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,6,5,2,5,2,11,2,10,6,6,7,11,6,2,2,7,11,11,10,2,2,2,5,2,6,2,10,5,2,2,25,51,11,1,1,5,2,2,5,2,12,2,5,2,2,6,1,2,2,6,1,6,1,2,25,2,11,6,2,9,11,5,2,2,26,38,64,10,5,2,5,2,2,9,5,6,26,8,130,205,204,201,201,200,201,74,
+2,1,1,6,1,1,1,2,5,10,7,12,5,2,12,21,14,14,14,13,13,10,10,12,1,5,6,5,12,21,13,16,29,22,13,29,2,2,2,5,2,2,14,14,13,2,12,16,29,36,47,37,106,33,11,2,2,21,22,30,18,132,24,33,30,22,29,13,29,47,46,17,109,33,22,33,33,17,33,33,30,17,13,15,11,6,16,11,2,2,2,6,2,13,7,13,7,2,2,2,5,2,5,2,6,7,2,2,2,2,13,1,7,6,2,7,13,7,11,13,6,6,7,11,11,17,13,8,8,11,11,2,6,1,1,2,1,2,2,2,2,2,2,7,2,13,2,2,2,1,1,2,2,2,1,1,2,2,6,1,6,2,2,13,13,6,6,13,7,2,12,2,2,1,71,72,40,1,1,2,2,2,5,57,27,1,1,2,6,2,2,2,5,2,2,6,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,11,2,11,6,8,11,6,2,6,6,5,12,1,6,1,2,2,2,10,2,13,11,1,2,2,5,2,5,2,2,2,5,2,5,2,2,5,2,5,2,2,5,2,2,2,2,5,2,2,9,2,11,1,10,2,2,5,2,9,2,2,2,9,2,9,2,5,10,2,12,8,166,206,200,201,204,204,201,201,69,
+2,6,1,2,1,1,1,2,13,13,13,5,2,2,16,29,26,2,21,15,12,10,5,12,10,5,2,12,21,29,13,13,16,22,29,13,1,6,2,2,2,13,13,2,2,2,13,21,13,23,43,31,31,11,8,6,6,6,16,21,29,47,46,24,31,21,22,11,34,47,31,31,46,105,29,46,18,31,33,18,30,17,11,17,8,2,14,11,2,6,6,1,7,6,11,13,7,6,6,1,2,2,2,2,5,2,5,6,2,6,2,2,2,6,6,6,7,11,11,13,13,11,7,11,17,11,11,8,7,7,6,2,6,2,1,2,1,2,2,2,2,12,6,7,2,2,2,6,2,1,0,2,2,5,1,1,2,5,2,6,1,2,1,2,6,6,7,7,13,2,1,2,1,64,40,5,9,1,1,1,40,25,38,6,1,0,1,1,2,1,2,6,2,2,5,2,5,1,2,1,5,1,2,2,5,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,5,2,1,5,2,6,6,6,7,11,11,13,7,6,6,2,11,2,6,1,2,2,2,5,1,13,11,2,2,2,6,2,2,1,2,5,2,2,2,2,5,12,7,2,12,1,5,2,5,2,5,2,2,2,11,2,11,10,9,10,5,2,2,2,6,1,5,2,2,6,2,5,2,9,9,21,176,205,201,201,201,201,201,201,204,131,
+2,2,1,5,1,2,2,10,13,14,13,2,2,13,21,12,12,2,14,21,6,2,7,10,5,13,7,16,13,14,13,13,16,24,16,13,6,1,5,2,2,2,7,2,13,7,11,14,21,36,30,18,13,6,11,2,2,11,16,22,30,34,109,110,109,31,8,32,123,31,24,18,31,33,33,113,44,8,33,18,31,30,13,15,11,2,29,2,2,2,7,13,5,2,7,11,13,2,2,2,2,6,1,6,1,6,2,6,2,7,6,6,12,2,11,7,6,13,11,11,29,7,13,11,17,11,11,11,11,11,6,7,2,2,6,2,1,5,1,2,7,13,11,5,1,1,1,2,7,2,1,1,2,2,1,1,2,2,2,1,1,5,2,13,7,6,7,7,7,6,1,6,25,9,2,2,1,1,1,5,27,60,1,1,1,1,1,1,1,2,1,2,2,9,51,2,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,6,2,11,2,2,7,6,11,8,11,6,10,11,7,6,2,2,5,1,2,5,2,11,11,7,6,6,5,2,2,1,6,2,9,2,5,9,25,9,1,2,13,10,6,2,2,2,1,2,5,2,5,2,2,10,12,10,2,2,2,13,26,2,6,2,5,0,2,2,2,9,13,2,121,205,198,204,201,198,201,204,201,198,74,
+2,5,2,2,1,2,6,7,13,11,11,7,5,5,10,13,12,2,13,11,2,7,7,6,2,13,13,7,11,6,7,13,13,17,29,6,2,2,6,2,5,2,11,2,13,16,10,12,16,13,36,17,11,11,6,11,29,22,17,13,13,22,34,110,114,24,30,34,20,24,20,18,106,33,33,33,18,13,109,24,33,18,11,15,6,11,14,2,6,6,7,6,6,7,13,13,7,2,2,2,5,1,5,7,11,7,7,7,2,11,2,7,11,2,13,2,11,11,11,8,8,11,11,13,21,28,17,13,7,13,11,6,2,6,1,2,2,2,2,5,7,7,7,2,1,1,2,7,2,2,1,1,2,6,1,1,2,5,2,2,1,2,7,6,13,6,7,7,13,1,5,2,2,2,1,2,2,1,1,2,1,27,40,2,1,1,1,1,1,2,6,1,6,1,2,2,1,1,1,1,2,2,2,5,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,2,1,1,2,2,6,1,2,2,11,6,6,11,13,8,11,6,2,12,11,7,6,1,2,2,2,2,2,13,11,11,1,9,2,5,2,5,1,9,2,25,7,2,2,5,9,10,10,5,2,5,2,5,1,1,1,1,2,2,11,2,2,6,1,2,5,10,1,2,2,51,76,91,40,2,2,9,2,29,206,201,200,201,198,204,201,204,204,201,74,
+2,1,2,6,1,6,1,10,11,13,7,13,5,2,5,13,2,2,21,13,6,6,7,11,6,7,6,2,2,6,7,6,14,36,11,6,6,2,2,2,2,2,7,7,21,16,2,7,12,30,130,8,13,6,16,21,13,29,14,29,14,30,34,109,122,22,17,46,33,33,18,33,33,24,24,24,17,11,110,24,24,18,13,15,13,16,13,11,2,6,7,7,7,6,7,7,2,6,2,2,6,2,5,5,2,7,7,6,6,7,11,13,6,2,2,2,11,13,11,7,13,6,13,16,13,29,29,13,17,11,11,6,6,2,5,2,5,1,2,2,5,6,1,1,1,1,2,6,13,1,1,2,5,2,1,1,2,1,1,1,1,1,2,7,11,7,6,6,2,2,2,2,2,1,2,26,5,1,1,1,1,5,9,0,1,1,1,1,1,1,1,7,2,5,1,2,2,1,1,1,1,1,2,2,2,9,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,2,1,2,1,10,1,2,5,2,6,11,2,7,11,6,11,11,2,11,7,11,11,6,6,2,2,2,10,11,13,11,6,2,5,9,2,1,2,5,5,5,9,5,9,2,5,2,25,2,11,2,2,9,2,2,2,5,2,2,9,11,2,2,2,5,2,2,9,11,5,2,2,12,2,6,10,12,35,67,192,204,204,200,198,204,201,198,200,200,201,74,
+2,6,1,2,6,1,5,11,5,10,13,13,11,11,5,2,2,13,13,13,11,11,13,8,7,7,2,6,6,2,6,13,16,16,21,7,2,2,5,2,5,2,2,13,16,30,30,17,29,22,47,17,8,13,116,16,21,22,14,30,11,16,43,110,132,18,43,108,18,24,24,33,24,109,33,24,11,11,114,33,24,44,7,18,22,17,11,2,2,11,6,6,2,13,7,13,6,2,7,2,2,2,2,2,5,6,1,2,2,5,2,13,2,2,6,12,11,14,11,13,17,1,13,22,13,30,16,7,21,13,11,7,2,2,1,2,2,1,2,14,35,1,0,1,1,1,2,7,2,2,1,2,2,2,1,0,1,1,2,1,1,2,2,13,6,2,7,2,6,2,6,2,2,5,2,2,1,1,1,1,2,1,1,1,1,1,1,60,131,13,13,2,2,2,2,2,1,1,1,1,1,2,5,2,2,1,2,1,1,1,1,1,1,1,1,2,1,5,1,2,1,1,2,1,1,1,1,1,1,2,5,2,1,2,2,6,1,2,13,11,2,11,13,11,8,11,7,7,11,10,11,2,6,2,2,13,11,5,2,2,11,10,2,2,5,1,2,9,5,2,5,9,2,25,2,2,2,5,2,6,2,2,2,5,1,2,5,5,6,1,2,2,6,1,5,2,5,9,2,25,2,2,2,2,11,192,206,204,200,200,200,199,199,200,198,200,200,195,200,74,
+2,2,5,2,2,2,5,10,7,13,7,13,17,21,11,2,2,2,21,11,11,13,6,11,6,8,2,6,7,13,13,14,17,30,13,6,6,2,2,2,2,2,12,13,30,47,47,34,36,119,114,8,13,20,20,13,13,11,16,13,14,29,16,24,20,15,22,108,20,33,18,111,109,109,20,31,13,6,109,24,33,18,11,29,18,14,13,2,7,7,7,13,7,7,13,7,2,13,2,2,6,2,13,5,7,12,12,13,2,2,2,11,2,2,2,2,11,15,13,13,11,2,16,16,13,16,29,6,16,8,7,6,6,2,2,6,1,1,2,16,12,1,1,1,1,0,2,7,6,1,0,1,5,2,2,1,1,1,1,1,1,1,2,7,7,13,6,6,1,2,2,2,5,2,2,1,1,1,1,2,6,0,1,1,1,1,2,9,11,1,2,2,6,2,1,1,1,1,1,1,1,1,2,2,5,2,9,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,2,2,5,2,9,6,6,7,2,6,11,11,7,7,7,11,2,10,2,13,2,2,2,1,2,2,6,2,11,5,7,5,9,2,5,9,9,5,9,2,5,2,2,5,2,9,5,10,1,2,6,2,2,6,9,2,5,5,78,7,11,1,2,6,2,9,2,5,11,51,7,2,11,166,201,198,200,198,196,199,199,199,199,196,199,195,196,199,131,
+2,5,2,2,5,2,2,10,21,11,7,13,13,21,6,1,5,13,13,7,7,11,7,11,17,6,2,13,13,14,13,13,22,16,11,6,2,2,5,2,2,5,14,45,117,119,119,32,47,47,125,29,11,24,114,26,6,7,13,7,22,16,16,45,122,18,22,111,33,109,24,114,111,109,31,18,11,11,114,24,37,18,11,33,33,11,13,2,11,7,13,7,6,13,21,11,2,7,2,7,2,2,2,13,11,13,2,2,2,5,2,5,2,5,2,7,17,11,11,7,13,1,13,17,11,21,17,6,17,11,11,6,2,1,2,2,1,1,2,10,7,2,2,1,1,1,2,7,2,2,1,1,2,2,1,1,1,1,1,2,1,1,2,2,6,7,7,2,2,12,1,26,10,1,1,1,1,1,1,1,25,26,2,1,1,2,1,1,5,2,2,11,2,2,2,9,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,5,2,1,2,1,2,2,2,2,10,6,2,11,11,6,11,8,11,13,11,6,7,7,2,11,1,1,1,11,2,2,5,9,2,2,5,2,2,9,2,2,2,2,2,6,2,2,2,2,10,2,11,2,2,2,2,2,2,1,12,69,200,65,74,70,5,1,9,2,10,13,60,35,64,78,188,204,204,200,200,200,198,200,196,195,200,199,199,198,199,200,74,
+2,1,5,2,2,5,5,13,11,13,5,7,13,7,2,2,13,12,7,13,13,11,8,8,7,11,2,13,6,11,13,22,31,17,11,6,6,2,2,2,2,2,29,106,32,30,34,30,117,140,123,19,8,34,105,1,11,6,29,29,30,24,30,45,34,11,22,106,33,33,24,118,114,109,33,18,13,11,114,108,109,16,13,46,18,11,21,2,6,11,7,7,13,17,16,2,11,2,2,13,17,6,5,26,2,5,2,6,2,2,7,2,2,2,11,13,13,13,7,13,6,1,7,13,16,13,16,11,13,11,13,2,6,2,2,5,1,1,2,22,7,6,0,1,1,1,2,7,6,2,1,2,1,1,1,1,1,1,2,1,1,1,2,7,6,6,6,2,2,2,1,21,1,1,1,1,1,1,0,1,2,1,1,1,1,5,2,2,2,2,5,2,2,5,2,2,1,1,1,1,1,2,1,1,1,2,2,5,1,1,1,1,1,1,2,1,1,2,1,1,1,2,1,1,1,1,1,1,2,1,5,2,2,5,2,2,6,6,6,6,6,7,7,7,11,11,13,11,5,2,12,10,2,1,1,5,1,9,9,2,5,2,5,2,2,6,2,5,11,2,2,2,2,2,2,6,6,2,2,11,2,2,11,2,6,6,134,204,200,204,196,190,134,1,13,29,5,11,192,131,200,204,204,204,198,201,198,200,203,199,196,179,200,179,200,179,199,198,179,74,
+2,1,2,5,10,2,10,10,7,13,10,7,21,11,2,6,5,13,6,11,13,13,11,13,11,17,2,7,7,7,29,24,24,16,11,13,2,2,2,6,2,11,22,29,22,30,47,36,45,147,125,31,8,136,33,11,2,6,11,13,16,16,13,33,106,32,43,110,33,33,24,111,114,111,24,15,11,15,118,33,110,11,29,34,109,13,2,2,11,11,11,13,14,22,13,7,6,2,6,21,29,13,13,2,2,2,5,2,5,2,6,2,5,2,11,13,13,11,11,13,2,1,11,13,16,21,29,7,11,11,11,6,2,2,6,1,1,1,12,14,6,2,1,1,1,1,2,6,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,6,7,2,2,6,1,26,10,12,10,1,1,1,1,1,1,5,2,1,1,2,2,2,2,6,1,2,2,2,10,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,2,1,2,1,2,1,6,1,5,2,2,11,11,6,6,6,6,6,7,13,11,7,6,10,10,2,2,1,1,2,9,5,5,2,6,9,2,9,2,2,2,2,2,11,2,6,43,67,155,78,28,13,167,67,16,7,13,22,50,198,200,200,199,199,195,200,204,178,204,201,30,175,204,201,198,204,199,200,200,200,200,200,200,198,198,199,194,198,179,198,202,194,198,157,
+2,2,6,2,2,2,2,5,12,11,13,13,13,11,5,2,5,2,6,11,13,11,7,13,11,11,2,7,11,17,29,30,24,11,7,7,6,2,2,2,7,23,16,16,22,36,45,30,116,145,109,18,16,18,24,11,2,2,13,29,13,22,30,47,119,32,36,34,33,109,109,114,111,109,32,17,13,13,111,20,110,13,18,109,20,11,2,1,11,15,15,10,16,24,13,13,6,2,6,13,16,21,14,2,6,12,2,2,2,5,1,2,2,2,13,13,7,11,14,17,2,1,7,15,17,16,13,11,11,11,11,11,2,6,1,2,1,1,14,11,2,5,0,1,1,1,2,2,2,2,41,2,2,6,1,1,2,1,1,1,1,1,1,2,11,7,35,40,2,60,67,2,10,2,1,1,2,1,1,1,1,2,2,1,2,6,9,2,2,11,6,2,2,2,2,2,0,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,2,2,6,1,2,2,2,11,6,6,11,8,11,11,13,2,2,10,11,2,2,1,1,2,5,2,5,2,2,2,5,5,2,2,5,6,65,78,65,167,199,179,177,199,194,170,202,198,195,176,195,199,203,179,198,179,200,198,179,200,195,199,200,200,200,204,196,200,200,198,200,198,204,200,200,198,200,199,199,198,198,194,198,198,198,198,179,74,
+1,1,2,2,5,2,6,5,13,14,13,10,11,13,2,2,11,2,11,7,11,7,13,11,13,13,2,11,11,14,32,33,29,110,105,15,2,2,6,7,16,29,16,17,22,22,22,34,126,146,114,18,8,8,24,8,11,6,6,14,29,16,13,34,34,46,17,34,33,24,33,118,114,108,109,15,2,7,122,111,111,11,22,22,24,11,6,0,13,11,15,15,22,22,13,6,2,2,13,13,13,29,7,2,2,2,5,6,2,2,5,2,2,13,7,7,29,17,29,21,2,2,13,16,16,14,13,13,8,13,13,11,2,1,2,6,1,1,13,7,2,2,1,1,1,1,2,13,6,0,2,1,6,1,2,0,2,0,2,2,2,2,2,11,2,21,38,6,1,40,51,6,2,1,1,1,1,1,1,1,2,1,1,2,1,2,2,6,1,5,6,11,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,5,1,1,1,1,1,1,1,1,1,1,1,2,2,2,6,2,5,2,2,5,2,6,6,6,7,11,11,11,8,2,11,11,13,2,11,2,1,5,2,2,2,2,2,2,29,175,7,66,190,75,2,169,179,194,169,171,194,173,171,194,194,194,173,179,194,173,179,194,179,179,198,198,179,198,198,179,196,199,199,199,200,198,200,199,200,200,203,200,198,200,202,196,198,179,198,179,198,198,179,198,177,179,131,
+1,1,5,2,2,5,11,6,7,13,7,11,7,10,6,5,7,2,2,11,7,7,13,13,7,7,2,13,11,16,34,36,46,119,116,11,6,2,6,29,16,30,16,22,11,106,110,114,126,150,115,8,8,22,19,31,31,2,16,30,30,32,22,22,37,109,14,33,31,33,109,111,111,109,111,11,11,29,111,122,109,6,6,110,111,11,0,2,11,16,15,22,30,13,21,11,6,6,7,14,22,30,2,5,5,5,7,2,2,2,6,2,5,13,13,14,17,29,29,14,5,1,2,13,13,29,14,13,15,13,11,6,6,2,6,1,1,1,14,13,1,1,1,1,1,2,6,5,2,6,2,2,2,64,76,1,1,1,1,1,1,1,2,11,2,12,2,2,72,12,9,1,2,1,1,1,1,1,1,1,1,9,5,2,2,5,2,2,6,6,7,2,5,2,2,5,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,2,2,2,2,2,6,1,6,6,11,6,6,11,6,7,7,2,6,8,11,13,6,2,2,2,2,2,6,2,6,21,168,179,168,173,179,158,66,177,173,171,171,177,169,194,177,179,179,177,194,173,194,179,179,179,194,179,198,179,202,195,179,200,198,199,179,199,199,200,199,196,198,200,200,196,199,199,195,198,198,198,198,198,202,179,198,179,198,179,74,
+1,1,2,2,6,1,11,6,13,13,13,11,7,7,2,10,11,6,2,13,13,13,13,11,13,7,2,7,14,18,37,22,110,132,120,11,2,13,16,34,18,37,29,23,106,138,106,136,138,146,113,6,13,20,15,24,122,6,22,18,29,29,22,29,34,33,14,17,31,34,114,114,116,106,111,29,3,29,109,125,109,6,14,126,117,13,2,0,11,17,22,16,11,7,11,2,2,2,13,16,30,30,2,2,5,5,5,12,2,5,2,2,13,11,7,14,23,29,16,2,2,5,2,13,15,14,17,13,17,5,11,13,7,6,1,2,1,2,13,1,2,1,1,1,2,2,2,13,6,2,2,2,5,1,1,1,2,1,1,1,1,1,7,13,2,6,2,2,5,1,2,5,1,5,1,1,1,1,1,1,1,1,2,5,2,2,2,1,2,10,10,13,2,5,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,6,1,2,1,1,1,1,1,1,2,6,1,5,2,5,2,2,2,2,11,11,11,6,11,6,11,6,6,7,6,2,6,5,2,2,1,6,5,2,11,2,155,171,162,194,171,168,177,177,171,169,194,168,168,171,177,169,194,171,177,194,194,177,194,194,173,179,198,194,195,179,198,198,179,196,198,199,198,179,198,199,200,199,199,200,198,200,196,199,195,198,198,179,198,179,199,179,198,179,194,74,
+1,2,2,5,2,2,10,6,13,11,10,5,11,5,2,13,13,2,11,13,7,13,7,14,21,7,2,13,16,22,46,16,46,126,106,6,2,7,7,29,16,32,15,132,119,126,124,144,140,152,19,6,8,19,22,18,21,2,29,22,22,30,17,14,30,24,13,17,110,109,109,111,109,109,109,15,11,13,108,132,116,6,110,126,122,13,2,11,14,22,45,2,5,13,2,13,2,7,13,29,32,21,1,2,6,2,2,2,2,2,2,2,21,7,13,29,16,23,2,1,2,2,2,13,13,13,14,11,11,8,13,13,6,2,2,6,2,2,2,5,6,1,1,1,2,5,2,13,7,6,1,2,7,6,2,5,5,1,1,1,1,2,13,11,2,2,2,2,1,1,2,9,2,1,1,1,1,1,1,1,1,2,1,2,10,5,5,2,2,10,7,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,5,1,2,1,1,1,1,5,2,1,2,2,6,1,2,5,2,5,2,6,2,13,6,11,13,11,11,11,2,2,13,2,2,2,6,6,2,2,11,66,171,194,162,168,169,194,171,171,171,177,168,171,171,171,175,171,169,194,168,173,168,171,179,194,194,179,198,179,194,198,179,202,195,194,198,198,179,198,202,179,198,200,199,199,199,199,199,199,198,199,179,202,198,198,179,198,202,179,179,74,
+1,5,2,2,1,2,5,5,10,11,7,10,7,5,5,21,11,2,5,13,13,13,14,13,13,7,6,13,14,32,43,17,48,106,33,11,6,13,11,30,29,16,8,106,132,138,149,140,138,153,19,6,8,126,114,33,11,2,7,16,36,17,29,22,34,15,22,22,34,33,109,114,119,33,24,8,6,13,109,109,44,2,119,123,114,17,29,2,21,30,11,1,2,7,6,7,7,12,13,21,32,11,2,2,2,2,6,2,11,2,6,5,7,7,7,29,22,16,0,2,2,2,11,13,13,17,13,8,6,14,11,13,6,1,6,1,7,2,13,2,2,1,1,1,2,2,2,14,7,2,1,2,13,1,1,2,6,2,5,2,1,1,11,7,11,6,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,2,5,2,2,5,2,11,6,2,2,6,12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,6,1,5,2,2,2,6,2,2,2,2,11,7,7,7,6,14,11,6,6,2,6,1,2,6,11,11,6,6,6,42,194,169,168,162,171,162,168,162,168,171,173,169,171,168,171,171,162,168,168,171,194,168,194,168,169,179,177,179,179,198,198,179,198,179,195,179,179,198,195,194,179,195,179,202,195,202,179,200,195,198,198,198,179,199,179,198,198,179,179,179,69,
+1,2,2,5,1,1,2,5,12,11,7,10,13,2,5,13,11,11,2,14,13,13,13,13,7,5,2,13,29,36,22,16,18,119,120,11,7,7,7,34,11,17,29,119,123,125,140,138,140,148,4,13,15,126,33,13,13,29,14,29,32,29,13,13,32,11,13,24,110,106,106,114,116,110,18,13,6,15,111,132,18,11,116,119,111,15,29,6,6,13,11,2,2,2,2,5,13,7,11,30,30,2,12,2,5,5,1,2,21,2,2,2,13,13,14,30,30,29,1,1,1,2,12,11,8,13,11,13,13,13,11,13,2,2,2,5,2,13,6,2,2,2,1,1,2,5,5,6,7,6,2,2,2,2,6,1,2,7,7,6,1,2,5,11,2,2,6,1,1,1,1,1,1,1,1,2,5,1,1,1,1,2,1,2,2,2,5,2,2,9,6,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,2,6,1,2,1,5,1,5,2,2,11,2,11,2,10,10,13,10,7,11,1,2,2,6,11,11,11,11,2,69,169,162,162,167,169,169,168,171,175,169,171,168,168,171,171,162,169,168,168,168,168,169,168,171,194,177,175,171,177,179,179,195,202,179,198,179,179,179,198,179,179,198,198,198,179,198,198,198,177,198,194,179,179,198,179,198,198,179,198,179,194,74,
+1,2,6,6,1,6,5,10,2,2,5,11,5,2,13,13,13,11,6,13,14,14,16,16,13,29,7,16,16,33,13,13,22,106,119,15,7,11,13,22,7,17,22,133,116,116,137,144,139,150,8,13,16,122,29,11,13,16,16,16,16,13,5,6,109,6,7,34,110,116,34,123,106,111,24,11,6,15,111,141,8,13,122,122,116,22,18,2,6,13,6,2,2,5,2,5,2,10,16,43,6,7,6,2,2,2,6,2,12,2,6,5,14,7,16,30,23,13,2,1,2,1,2,13,11,11,16,6,13,13,11,13,6,1,2,2,2,5,2,7,1,1,2,6,2,2,11,6,2,2,5,2,11,2,1,13,5,11,13,6,2,6,2,21,36,21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,5,2,5,5,11,2,2,2,10,6,7,2,1,1,1,1,1,1,1,1,26,5,1,1,1,1,1,1,1,1,5,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,2,5,2,2,6,2,2,5,2,10,10,5,11,13,13,6,5,10,2,11,11,11,15,11,2,6,66,169,166,162,169,162,168,162,169,162,162,162,171,171,168,168,169,168,168,168,177,162,168,168,177,162,171,171,169,177,194,194,177,177,179,202,179,179,179,179,177,198,202,179,177,199,179,198,179,179,179,179,179,179,179,173,195,179,195,202,179,179,177,74,
+1,2,2,11,5,1,2,7,2,5,2,5,2,5,21,13,13,13,13,11,13,13,13,13,11,13,6,14,22,32,8,11,22,106,114,15,13,2,16,22,11,15,119,141,110,106,144,138,128,150,4,11,24,24,6,16,16,29,13,13,13,6,6,7,114,2,29,37,110,106,106,123,116,46,8,13,6,17,118,138,6,13,122,122,120,20,15,2,2,13,6,2,2,2,2,2,2,13,6,11,13,6,2,2,2,5,2,2,13,2,2,2,14,7,14,29,30,13,2,1,2,2,2,21,13,29,16,13,14,8,7,13,2,2,2,6,5,2,13,1,1,1,1,2,2,2,12,2,11,2,2,12,2,2,5,11,2,12,11,7,6,2,2,35,30,2,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,1,5,2,2,2,11,2,12,2,11,6,7,2,6,1,1,1,1,1,1,2,1,2,6,9,2,1,1,1,1,1,1,2,2,1,2,5,1,1,1,1,1,1,1,1,1,1,5,2,1,6,1,1,2,2,6,5,7,6,2,6,7,17,13,2,9,2,7,10,13,13,11,6,66,159,169,162,169,162,162,162,162,162,162,162,169,168,168,168,169,168,168,168,169,162,168,168,168,168,168,169,168,168,194,162,171,171,194,179,194,179,179,194,173,198,194,173,194,179,198,194,194,179,194,179,179,202,179,177,194,179,173,179,179,202,194,179,171,74,
+1,2,5,2,2,2,6,5,5,2,1,2,10,12,11,11,13,13,17,11,11,11,13,13,6,11,2,29,16,33,13,13,33,116,116,31,17,6,22,16,7,37,144,139,110,117,141,127,138,150,4,6,17,24,11,22,16,7,13,13,7,6,2,14,111,2,34,109,47,122,33,47,116,22,17,6,2,22,116,126,1,22,122,122,116,33,7,11,2,6,6,2,6,2,2,6,2,13,13,13,13,2,7,2,5,2,2,2,13,2,2,6,2,6,7,13,22,11,6,1,2,1,2,15,13,11,7,6,13,13,13,11,2,2,5,1,2,2,13,2,1,1,2,5,2,5,2,6,2,6,7,6,2,2,6,5,6,7,13,13,7,7,13,7,2,2,5,2,1,1,1,1,1,1,1,5,2,1,1,1,1,2,2,2,6,2,5,2,7,6,7,6,11,6,6,0,6,1,1,1,1,1,1,1,2,51,2,1,1,1,1,1,5,2,5,2,1,2,2,2,1,2,1,1,1,1,1,2,1,2,2,2,2,6,1,5,1,2,2,2,6,6,21,16,11,10,5,9,11,1,13,10,13,42,168,162,162,162,167,169,168,162,167,169,169,167,168,162,162,162,168,162,168,162,171,162,171,162,168,168,162,162,171,171,162,168,171,171,177,171,177,194,194,177,194,179,179,194,173,179,177,179,179,173,194,179,194,177,194,173,179,177,179,179,179,194,179,169,173,74,
+1,1,2,2,5,2,2,5,2,2,6,1,2,2,2,5,11,13,22,11,6,8,11,8,11,13,7,29,16,30,11,15,44,122,122,106,17,7,46,17,16,133,139,149,106,132,144,138,138,153,113,19,22,44,17,21,13,13,13,13,6,2,2,13,110,2,36,22,106,34,33,31,114,11,6,6,6,18,106,106,2,114,126,126,122,108,6,2,2,2,7,6,2,2,2,2,11,7,14,14,13,2,6,2,2,2,2,5,7,13,1,7,6,14,13,17,22,7,2,2,2,5,7,6,6,2,6,11,13,11,13,7,1,2,2,13,1,7,7,6,1,1,2,2,6,11,11,6,2,7,5,2,5,1,5,7,2,11,13,13,7,13,6,7,6,2,2,1,2,2,1,1,1,1,2,2,1,1,1,1,2,5,2,2,5,2,10,11,6,7,8,11,11,6,2,2,2,1,5,2,2,1,1,1,1,1,1,2,1,1,1,1,2,1,2,2,2,5,2,2,5,1,2,1,1,1,1,1,2,5,2,5,2,2,2,6,2,5,11,2,6,11,14,15,13,2,5,11,11,5,15,13,15,69,162,162,162,162,162,169,162,162,162,162,171,162,168,162,168,162,162,168,162,162,162,168,162,168,168,162,162,171,162,171,169,194,160,171,162,194,171,177,171,194,169,179,194,177,179,194,194,173,173,194,179,179,171,179,171,179,177,194,173,179,179,179,173,171,171,74,
+2,5,2,5,10,27,21,7,2,5,2,6,2,5,2,2,13,11,16,11,6,13,13,13,13,11,6,17,16,22,13,17,34,119,120,111,17,6,109,18,30,130,144,133,119,132,144,149,142,150,115,147,113,13,13,13,13,16,29,14,7,6,6,22,8,13,116,24,116,110,46,139,108,8,13,2,15,18,46,6,11,123,138,132,123,109,11,6,6,6,11,6,2,6,6,2,11,7,17,15,13,2,2,6,2,13,2,2,7,6,6,2,6,7,7,22,32,6,2,2,1,2,2,7,2,6,11,13,11,7,13,6,1,2,6,2,5,11,7,2,1,2,2,2,13,13,14,8,2,7,6,2,2,2,5,2,13,13,11,13,11,11,14,2,5,2,2,5,2,5,1,1,2,1,1,1,1,1,2,1,2,1,5,2,2,7,13,11,11,13,11,11,17,6,2,6,1,1,1,0,2,1,6,0,1,1,2,51,2,0,1,1,2,6,1,5,1,1,1,2,2,5,1,2,1,1,1,1,1,2,2,2,2,5,2,2,2,2,9,13,6,14,13,21,26,10,27,11,11,6,11,49,166,169,162,159,162,162,162,162,162,168,169,162,168,168,160,175,169,162,168,162,162,168,162,168,162,169,162,168,168,162,171,162,194,162,194,171,177,162,168,171,169,194,171,173,177,171,177,171,179,179,177,194,179,179,194,179,177,179,179,194,173,179,173,171,177,171,162,74,
+2,2,5,2,5,5,1,5,5,11,1,1,2,2,6,2,11,13,29,15,11,15,15,13,11,11,6,16,29,16,8,22,36,116,123,122,8,11,119,122,37,133,149,137,133,132,132,136,149,150,113,150,115,6,11,11,17,16,13,7,6,1,6,18,2,32,111,46,119,138,34,133,105,13,18,6,29,24,15,2,14,144,136,116,126,111,15,6,11,1,13,11,2,2,11,7,13,11,23,17,11,2,2,2,7,2,2,2,13,7,6,7,2,7,13,22,17,6,2,2,1,2,7,2,2,13,7,13,13,11,13,2,2,2,13,2,2,13,6,2,2,2,2,6,7,13,6,14,7,6,2,2,2,2,5,6,7,13,13,11,11,7,11,2,2,6,2,2,1,2,1,1,1,2,1,1,1,1,1,1,1,2,2,5,11,11,11,11,6,11,13,11,8,11,2,2,2,2,72,72,73,27,38,10,1,1,2,27,25,10,1,1,1,2,2,2,6,2,5,2,6,1,1,1,1,1,1,1,2,6,1,5,2,2,2,11,11,10,11,2,21,7,13,7,10,5,10,11,40,155,168,168,162,159,162,162,169,159,162,162,168,162,168,168,168,162,171,169,162,162,168,169,162,162,168,168,168,168,168,168,162,171,162,168,162,168,169,169,162,171,162,167,168,168,168,171,168,168,171,169,171,179,177,194,173,169,179,173,194,169,173,179,194,179,194,173,194,173,162,74,
+5,1,1,2,5,2,6,10,7,13,2,1,5,2,2,2,2,13,17,22,6,11,15,13,11,11,6,16,17,17,6,33,109,132,116,125,17,6,123,122,116,132,130,133,126,126,133,144,150,153,115,150,114,2,6,6,7,7,6,2,6,6,2,7,2,106,22,114,132,123,34,122,114,33,33,2,33,109,15,2,22,138,140,150,126,29,8,2,2,2,11,11,2,2,5,11,13,13,21,2,2,2,6,2,7,2,6,2,1,11,2,6,5,7,13,22,11,11,6,1,2,2,6,7,12,2,6,13,13,13,13,6,6,7,5,2,2,2,12,2,1,2,7,7,7,6,13,7,7,13,2,5,1,1,12,6,7,11,13,7,6,11,6,2,5,2,2,5,2,2,5,2,1,1,1,1,1,1,1,1,2,5,2,2,2,13,11,11,6,13,11,17,15,11,6,2,5,1,9,25,9,38,51,38,51,10,1,9,25,9,1,5,2,2,1,5,2,2,2,2,2,2,1,1,2,1,1,2,5,2,2,2,5,2,2,11,10,7,11,2,11,13,10,10,28,11,17,43,169,162,160,162,162,162,162,162,160,169,162,162,162,162,167,169,169,162,162,162,168,168,169,169,169,169,169,169,168,168,168,168,162,169,162,162,169,162,167,169,169,162,171,162,162,162,168,169,162,168,169,173,162,173,179,177,194,194,171,177,171,177,194,169,179,173,179,171,173,171,168,74,
+2,6,2,5,5,1,2,5,5,2,1,2,2,5,2,5,6,13,22,15,11,17,8,7,13,11,16,43,17,29,13,34,34,119,110,132,18,11,117,119,34,130,132,133,150,123,133,144,150,152,143,148,105,6,6,6,6,6,6,6,2,6,6,6,16,123,18,132,114,123,144,125,114,34,106,6,34,114,15,2,34,148,144,124,114,8,11,2,2,6,16,6,2,6,7,13,11,7,2,6,7,6,1,7,6,2,13,6,13,7,5,7,6,13,12,8,13,6,2,6,2,1,7,2,2,2,11,13,13,16,7,13,6,2,7,6,2,2,13,1,2,2,13,11,6,8,7,7,7,7,2,2,2,1,5,7,7,10,7,11,11,11,6,2,2,2,5,2,2,6,2,5,1,1,1,1,2,1,1,2,5,2,2,5,2,11,11,6,13,8,13,8,17,8,2,2,2,2,1,2,27,10,1,1,1,1,1,10,1,1,2,2,5,2,2,2,2,2,5,2,2,5,2,2,5,2,1,2,2,2,1,6,2,5,2,6,10,9,11,6,13,10,21,13,14,11,22,169,160,160,162,160,162,169,167,160,167,160,168,162,162,171,162,168,162,168,168,169,169,162,168,168,168,169,162,168,168,171,162,168,162,162,162,162,162,162,162,162,171,169,162,162,162,162,167,171,162,171,162,171,171,173,171,169,177,194,179,177,171,169,177,173,194,173,173,194,171,173,169,74,
+2,1,2,6,2,2,5,2,5,2,1,5,2,6,1,2,7,13,17,15,5,13,15,8,13,13,36,109,32,16,16,47,46,106,110,126,31,13,106,132,129,123,136,130,136,119,130,139,146,153,143,143,113,11,17,8,11,6,6,6,6,2,6,2,110,116,31,123,126,140,144,136,126,116,108,7,32,110,31,2,106,138,138,122,110,17,2,6,2,21,17,11,1,2,11,16,13,11,6,7,7,2,2,2,7,7,7,2,6,2,13,1,7,13,8,13,7,11,6,2,6,6,2,2,13,7,13,14,11,8,6,14,6,1,12,1,2,13,6,7,2,5,7,13,7,13,13,8,6,2,2,2,2,2,2,2,12,11,6,13,8,17,6,2,2,5,2,2,6,1,1,2,2,1,1,1,1,1,1,1,2,2,5,2,5,11,13,15,13,17,11,13,17,11,6,1,2,5,2,1,1,1,5,1,2,2,1,1,1,2,5,2,2,2,1,6,5,1,2,2,5,2,5,2,2,2,1,2,6,1,1,2,2,2,2,5,2,2,5,11,10,6,21,28,15,64,155,162,169,166,162,162,162,167,169,162,168,162,162,169,162,162,168,162,168,162,169,169,171,168,168,171,162,169,171,168,171,168,168,162,162,171,162,162,162,162,162,168,169,162,171,162,167,169,162,162,167,162,168,162,175,169,171,171,177,194,169,173,171,173,171,177,171,173,171,169,177,194,162,74,
+1,2,1,2,2,5,5,1,6,2,1,2,2,2,2,6,13,11,15,33,8,14,14,13,13,16,109,33,31,13,29,34,34,126,31,126,109,15,46,132,119,137,137,141,120,132,117,133,153,150,150,142,113,17,122,17,6,6,7,6,2,2,7,6,123,122,106,126,116,139,138,122,122,119,111,16,109,132,109,6,126,138,138,126,114,24,19,15,18,24,18,2,6,7,13,13,13,2,2,7,2,2,6,2,6,11,7,6,7,2,2,13,6,7,11,13,7,13,6,2,2,13,1,6,2,7,11,13,13,11,11,2,2,2,13,2,5,11,7,13,17,11,13,11,6,7,7,7,6,6,2,1,2,2,2,13,11,13,13,11,7,17,7,2,6,2,2,5,1,1,1,1,1,2,9,2,1,1,1,5,1,6,1,6,2,10,11,15,17,15,8,17,17,15,2,2,2,2,2,60,5,2,1,9,38,25,1,6,1,1,2,6,2,5,1,2,2,2,5,2,6,5,2,10,2,13,11,2,2,6,2,2,5,2,5,2,5,2,2,13,15,157,168,169,162,169,160,162,160,169,162,168,162,162,162,162,162,162,162,162,167,162,162,168,168,168,171,171,171,162,169,177,162,194,162,168,168,162,168,169,162,162,162,168,167,169,162,167,162,162,162,162,168,162,168,168,162,171,162,171,162,168,168,171,171,169,194,177,173,171,171,169,179,173,171,171,177,169,168,74,
+1,1,5,2,6,2,2,5,1,2,1,2,5,2,5,2,13,13,32,46,17,21,13,13,7,22,32,22,17,13,14,34,106,124,22,123,111,8,120,110,106,151,114,139,144,132,132,132,148,153,150,115,114,17,114,13,6,6,7,2,6,2,2,12,140,108,116,132,144,151,150,144,137,119,110,16,36,106,18,13,137,138,138,126,110,18,22,6,17,22,11,13,15,13,13,2,2,2,11,6,2,6,2,2,7,7,11,2,6,2,11,7,7,7,16,11,7,11,6,6,2,2,13,1,5,13,7,6,6,6,1,6,1,2,7,2,2,13,11,14,11,13,13,7,6,7,13,7,7,5,2,1,1,2,6,13,7,11,13,7,17,8,7,2,2,5,2,2,5,2,1,1,1,2,2,1,2,1,1,1,1,2,5,2,2,10,13,15,18,29,11,15,17,15,6,2,2,5,2,2,1,2,1,2,2,0,1,1,1,6,5,1,2,2,6,2,5,2,1,2,5,2,10,11,7,13,13,11,6,2,2,25,2,2,2,2,9,2,11,78,162,161,160,162,162,162,160,167,169,162,162,162,167,169,162,162,167,169,162,162,162,162,168,162,162,171,171,168,169,169,168,171,171,169,168,168,169,168,171,167,169,162,162,162,162,162,159,169,162,162,162,162,167,162,162,162,168,162,162,171,162,168,169,168,194,169,177,171,169,179,173,194,168,177,171,173,168,171,168,74,
+2,1,2,1,2,2,6,2,2,1,1,1,2,2,2,2,11,13,20,36,33,10,11,11,13,22,33,36,32,13,30,24,37,123,8,119,114,33,119,34,119,145,114,122,137,136,133,139,153,146,142,127,18,33,18,6,2,6,2,2,2,6,2,34,24,129,138,144,149,146,153,138,119,120,8,36,15,33,8,22,144,138,147,126,114,6,18,13,13,16,13,117,29,11,13,11,2,13,7,7,6,2,7,14,7,7,13,1,12,6,10,13,10,11,13,13,11,11,13,7,7,2,2,2,13,13,7,7,2,6,13,1,5,10,13,1,10,7,13,13,13,7,11,7,2,7,2,13,2,2,6,1,1,1,12,7,7,7,7,13,13,17,2,6,2,2,2,5,2,1,1,1,1,2,2,5,1,1,1,1,1,7,2,2,5,11,11,17,15,8,13,17,31,15,2,2,2,2,5,51,11,1,1,1,1,1,1,1,2,2,2,2,5,2,2,2,2,6,1,2,10,7,13,13,11,13,13,21,13,6,2,2,2,2,6,10,5,10,11,87,160,159,162,160,159,162,162,162,162,167,169,162,162,162,162,168,162,168,168,169,169,169,162,162,162,162,168,168,168,169,162,168,168,168,162,167,168,162,162,162,162,167,169,162,162,162,162,162,167,171,162,168,162,162,175,162,162,162,162,162,168,168,162,168,169,171,171,169,194,173,194,171,177,171,173,173,171,173,168,74,
+1,2,1,2,1,6,1,2,5,2,1,5,2,2,5,2,11,13,22,18,110,6,13,16,11,32,37,34,36,13,30,16,123,125,29,37,34,43,136,149,151,138,144,132,138,139,132,133,149,152,143,143,113,18,18,11,6,2,6,6,2,7,6,37,24,144,144,138,150,152,150,136,137,116,5,126,11,13,2,106,146,153,144,123,8,13,13,17,17,22,11,14,6,2,13,2,6,6,11,11,7,6,7,29,13,7,2,6,5,2,12,13,11,7,13,17,7,7,2,2,6,6,12,2,12,11,13,6,2,13,2,1,2,10,2,2,12,13,13,13,11,13,7,6,7,7,16,16,11,2,2,1,2,1,7,11,13,13,13,7,11,8,2,2,2,5,2,2,2,1,5,1,1,1,2,1,1,1,1,5,1,5,2,6,1,5,13,13,15,15,15,30,29,6,6,2,2,1,9,12,10,1,1,1,1,1,1,1,2,5,1,6,2,2,5,2,5,1,12,1,5,10,7,11,7,11,21,24,111,46,131,131,11,2,2,9,11,6,29,163,162,162,162,162,162,162,162,162,162,162,162,162,162,167,169,162,162,171,167,168,168,169,169,162,168,162,171,168,168,168,168,168,169,168,168,162,162,162,162,162,162,168,162,162,167,169,162,162,162,162,162,168,162,162,162,162,162,162,162,162,168,169,168,173,171,173,173,194,169,194,177,171,173,171,173,171,169,177,169,74,
+2,5,1,2,1,2,2,10,2,1,2,2,2,6,2,12,1,14,36,114,119,6,21,29,14,29,34,45,17,29,23,45,132,122,33,31,44,132,122,132,183,138,149,123,147,132,132,138,154,145,150,146,127,20,31,6,6,2,2,2,6,1,2,33,24,144,144,149,149,144,147,139,137,116,16,31,8,8,11,136,144,144,123,122,11,14,14,29,22,16,11,2,2,2,2,40,41,41,40,27,40,73,73,49,2,2,2,2,6,2,11,7,13,13,11,6,11,6,2,2,2,5,2,2,13,13,7,7,5,2,2,2,2,5,2,2,13,13,13,13,11,6,7,13,6,7,15,6,6,2,2,2,1,2,7,11,13,13,6,6,11,17,2,2,6,2,2,5,1,2,2,9,2,2,2,1,1,1,1,2,1,2,5,1,2,5,11,8,17,15,18,30,30,11,2,38,6,1,1,1,1,1,5,2,2,1,1,2,2,2,6,1,2,5,2,2,2,6,10,2,5,9,13,13,26,29,120,45,180,173,198,202,30,2,5,2,2,42,156,162,162,161,168,168,162,162,168,168,169,162,169,162,168,162,168,168,162,162,162,162,167,169,169,162,162,162,162,162,168,169,168,162,168,162,162,169,162,162,167,162,162,162,162,162,162,162,167,169,162,162,162,162,168,162,162,162,162,168,162,169,171,171,162,177,171,171,177,171,177,177,173,171,177,173,171,173,171,171,171,74,
+2,2,5,2,1,5,5,25,2,1,2,5,2,2,11,7,13,30,34,46,109,13,16,22,15,22,46,34,22,29,32,30,106,140,33,110,18,126,114,151,153,126,126,48,150,140,119,139,184,146,154,146,145,24,114,19,7,6,6,2,6,2,2,32,109,139,144,149,144,150,150,137,139,109,22,33,21,117,6,126,126,138,136,114,30,11,7,13,30,16,7,11,2,5,2,2,6,1,6,2,2,1,2,5,2,2,5,2,2,2,2,11,13,13,11,13,8,2,2,6,2,2,6,2,12,13,11,2,7,2,2,2,2,5,2,2,12,7,7,2,7,11,13,13,6,11,7,6,6,2,6,1,2,13,7,13,13,13,15,29,16,29,7,2,2,2,2,6,2,1,2,1,1,1,2,2,1,1,5,2,1,2,10,2,5,11,6,17,15,17,33,17,36,2,2,2,2,2,6,1,1,2,6,57,21,5,1,2,5,2,2,2,5,2,5,2,5,10,2,5,10,10,12,14,7,117,132,129,194,179,171,179,159,2,65,41,159,162,160,171,160,162,168,162,162,169,168,169,168,168,162,168,169,162,162,167,162,162,168,168,162,171,162,168,168,162,169,162,171,160,162,162,162,162,162,167,162,160,162,162,168,162,167,171,169,162,168,162,169,168,169,162,162,168,168,162,168,169,171,171,171,173,171,173,169,171,179,173,171,171,194,171,173,171,173,171,171,173,162,74,
+2,5,2,2,1,2,2,2,1,1,2,2,5,2,7,13,21,29,22,34,33,8,29,32,16,36,117,46,29,22,17,22,120,132,114,116,120,110,144,153,183,144,120,117,153,144,106,133,150,153,153,146,150,115,33,8,6,2,2,6,6,6,2,117,126,133,147,150,149,144,147,139,144,31,22,34,18,109,1,126,126,128,125,126,109,24,29,6,2,6,11,13,2,2,1,2,2,6,1,2,6,2,2,2,1,1,2,1,5,2,5,11,11,11,8,15,13,6,2,2,2,2,7,2,13,11,7,7,7,13,1,1,2,10,2,2,21,11,11,6,13,13,14,11,11,13,11,11,8,2,6,2,2,11,7,13,13,11,18,29,18,20,11,6,2,5,2,2,2,6,1,1,1,1,1,2,2,1,2,1,5,2,2,5,2,2,11,8,15,29,31,24,17,6,2,6,6,2,2,1,1,1,2,1,1,1,1,2,2,5,2,6,2,2,2,2,2,21,2,6,5,1,21,164,18,119,141,176,179,179,173,173,171,194,173,173,169,171,162,162,162,162,162,171,169,171,169,162,168,169,168,168,162,162,162,168,162,162,162,168,162,168,168,168,168,162,171,162,167,169,168,162,169,160,162,162,160,167,169,169,171,169,171,162,171,177,168,177,171,162,168,171,162,173,162,171,171,173,194,171,194,179,171,179,194,177,171,177,194,173,179,194,173,173,171,177,171,171,169,74,
+2,2,2,5,1,2,5,1,1,1,5,2,2,2,13,13,13,16,30,43,17,13,16,46,17,29,23,45,16,30,46,106,110,126,126,132,109,106,149,183,144,144,126,45,152,149,106,144,153,183,153,152,142,19,108,8,11,6,2,6,2,2,6,37,110,138,144,149,151,150,146,123,136,15,29,24,24,109,13,144,122,127,125,122,24,22,11,2,2,2,8,13,2,6,2,5,7,2,11,2,2,2,6,1,1,2,5,1,2,2,2,6,13,8,15,22,15,2,6,2,2,13,10,13,13,7,6,6,7,2,1,1,2,13,2,2,13,11,2,11,14,15,11,7,8,17,11,11,13,2,6,2,2,13,5,11,11,13,24,31,108,109,6,2,2,2,2,5,1,1,2,2,12,1,2,2,5,5,2,2,6,1,5,2,5,2,11,15,15,17,33,24,34,15,6,6,2,11,6,2,2,1,1,2,1,6,1,2,6,1,2,2,2,2,5,2,2,21,13,7,6,68,202,198,176,176,179,179,179,179,179,169,173,171,171,168,171,162,162,162,168,169,162,162,171,162,169,162,171,162,168,168,169,168,168,168,162,162,168,171,162,168,169,169,162,171,162,162,168,162,162,168,162,160,169,162,162,162,168,168,168,171,168,169,194,168,171,171,173,173,171,179,171,171,171,173,194,173,179,179,179,173,194,173,179,179,179,194,173,194,173,179,179,179,194,169,179,173,169,74,
+2,6,5,1,2,1,6,2,1,1,2,2,6,2,21,13,13,14,31,34,29,7,33,37,22,17,29,32,22,106,120,116,122,126,132,138,126,119,153,184,141,144,140,36,154,144,117,149,153,154,153,154,127,34,20,15,11,6,6,6,6,2,2,29,24,150,151,144,139,146,138,138,122,11,16,24,18,24,22,145,142,122,140,20,31,17,13,2,5,2,15,17,2,2,2,2,5,2,7,11,2,2,2,1,1,1,1,1,2,5,2,7,15,13,15,17,13,6,6,2,2,10,7,11,13,10,13,5,11,6,2,0,2,13,2,11,11,13,13,11,7,13,13,11,14,11,8,13,11,6,2,6,2,13,13,21,17,13,18,24,33,24,2,2,2,6,2,2,5,1,2,9,9,1,1,1,1,2,2,1,2,2,6,1,2,11,13,17,22,30,109,24,15,36,11,7,13,110,16,22,2,1,2,2,6,1,2,6,1,11,2,2,6,2,2,6,5,29,30,21,78,198,198,179,179,202,179,171,179,171,179,173,171,173,168,194,162,168,168,168,168,169,162,171,171,169,171,177,162,171,162,169,168,168,168,162,162,167,171,162,168,168,162,168,162,171,162,169,168,162,162,168,168,162,162,162,162,162,168,168,169,173,162,171,171,173,171,173,171,179,179,194,173,179,179,194,179,177,179,179,179,179,202,179,179,179,194,179,202,179,179,179,194,179,179,179,179,171,169,74,
+2,2,6,2,6,1,2,1,2,5,2,5,1,2,14,16,16,32,46,30,16,7,117,130,114,11,16,109,24,106,33,106,126,126,122,141,126,147,153,151,139,149,128,23,154,151,153,150,154,153,152,152,143,17,24,105,26,6,2,11,2,2,6,7,24,149,144,144,144,144,126,138,34,6,17,17,22,6,24,138,143,128,126,46,33,29,11,6,2,11,8,17,11,2,6,2,2,2,13,6,2,2,5,1,1,1,1,2,6,2,13,16,17,15,15,13,6,2,2,2,7,13,6,14,13,8,2,13,13,2,6,1,1,13,2,13,11,11,2,11,13,14,14,13,13,11,17,15,15,13,2,2,15,21,13,21,29,22,29,18,109,17,11,6,2,2,2,12,9,2,2,1,1,1,1,2,5,2,1,2,5,2,2,2,6,5,13,29,33,109,109,31,13,30,109,33,127,106,114,22,1,2,12,5,21,36,2,2,2,11,6,2,2,2,2,2,12,11,30,196,198,179,179,198,179,179,179,194,179,179,171,179,171,173,171,169,171,162,168,168,168,162,194,162,169,171,171,171,171,171,171,162,168,168,168,168,162,162,168,168,171,162,171,169,162,168,168,168,168,168,168,162,169,168,162,167,169,169,162,171,194,171,173,171,171,171,194,169,179,179,179,198,179,195,179,179,177,179,179,194,179,179,195,202,195,173,179,198,179,198,198,173,198,198,173,198,173,179,179,74,
+2,7,32,17,8,2,5,2,1,2,2,2,6,7,29,13,36,45,22,36,24,12,117,132,29,2,22,34,34,110,31,122,126,138,122,123,149,133,139,139,141,144,140,36,153,150,154,186,153,153,152,150,143,20,20,127,18,11,2,2,11,6,2,13,22,123,122,138,144,145,141,126,18,11,11,22,24,3,110,151,144,128,123,32,31,11,2,2,2,13,15,17,6,2,1,2,13,2,7,2,5,2,2,1,1,1,2,1,2,2,15,8,13,15,13,6,11,6,7,6,6,13,7,16,16,13,11,13,11,2,2,1,6,13,13,6,13,7,2,21,21,29,13,11,11,15,17,15,29,11,7,13,14,15,13,13,13,18,22,34,33,6,6,2,6,6,2,2,5,1,1,1,1,1,2,5,2,5,2,1,2,2,5,2,2,2,13,13,34,44,108,18,13,119,19,114,115,47,136,133,11,6,9,11,29,18,11,11,2,11,2,6,2,6,2,2,15,24,200,179,179,179,179,179,179,179,179,179,179,179,179,179,171,179,171,173,171,171,171,171,171,171,171,169,177,168,173,168,194,168,194,168,168,169,169,162,168,169,168,162,171,168,169,168,169,171,171,171,162,169,162,171,169,162,162,162,168,162,168,171,171,169,179,179,177,179,194,173,194,179,194,179,195,198,179,179,179,198,202,194,198,198,179,198,198,198,179,179,179,179,198,195,198,202,198,198,198,179,179,69,
+2,13,22,114,33,15,16,11,2,6,9,2,2,12,36,30,47,16,21,33,29,18,47,46,11,6,29,17,18,36,24,122,138,144,109,130,110,136,149,122,123,132,148,24,154,183,186,154,183,153,153,153,142,18,24,127,108,6,1,6,6,2,2,6,114,126,122,136,144,138,144,132,17,6,6,17,110,8,137,150,140,139,33,30,33,6,2,2,5,15,11,6,6,2,2,2,2,2,12,2,2,2,5,1,1,2,5,2,5,2,21,16,29,17,11,11,17,6,8,7,13,13,11,13,16,7,11,13,13,7,1,1,7,21,21,29,17,7,10,13,13,13,11,29,32,32,15,22,15,11,11,13,14,7,13,21,29,17,33,116,116,36,34,34,13,22,2,2,2,1,2,1,1,1,1,2,2,1,1,5,2,5,2,2,5,10,13,13,33,109,33,15,13,109,32,46,33,46,117,133,11,5,10,1,11,11,119,109,1,2,2,11,6,2,29,29,16,179,179,179,179,179,179,194,179,179,179,194,179,179,179,179,179,173,171,171,171,173,168,171,173,173,171,171,169,171,194,171,171,171,168,168,168,169,171,168,169,162,169,168,169,171,162,168,168,169,162,171,171,194,162,171,162,168,162,162,167,171,162,168,171,179,173,179,179,179,179,195,179,198,179,199,198,195,198,179,198,198,179,195,199,196,198,195,198,195,198,196,198,198,198,203,203,198,200,203,195,198,179,74,
+1,2,29,34,34,22,17,22,2,2,2,6,1,7,29,30,49,2,14,34,22,18,21,22,8,13,21,22,22,16,33,116,144,144,18,116,106,149,123,146,140,149,154,24,183,153,183,154,153,153,153,153,128,10,18,114,142,11,2,2,11,2,6,6,110,116,126,145,145,150,138,124,6,11,6,30,123,8,138,137,138,119,33,16,13,2,5,2,13,33,11,2,11,6,2,2,6,1,15,11,6,2,2,1,2,5,2,2,2,2,12,16,13,17,11,7,6,6,7,6,7,16,11,13,30,11,13,16,21,11,1,1,13,16,29,29,16,11,2,13,14,29,14,22,30,16,22,16,11,11,13,13,13,13,14,14,14,33,132,125,120,34,13,126,122,138,2,2,2,1,1,2,5,1,1,2,5,2,2,1,2,2,5,2,2,6,13,21,110,20,33,8,17,117,109,116,32,45,47,133,114,10,121,119,10,26,132,70,11,6,2,6,11,8,32,30,194,195,179,179,179,194,202,179,194,198,179,179,179,169,179,173,179,171,171,173,173,171,173,171,171,173,171,169,171,162,171,162,168,168,168,162,162,162,162,168,168,168,169,162,194,161,173,171,171,169,177,162,194,168,169,194,171,169,168,168,162,162,162,194,171,169,194,194,179,179,198,179,198,199,196,199,199,199,199,198,199,199,196,199,199,196,199,199,199,199,198,198,203,200,198,204,201,200,204,200,195,198,198,131,
+2,6,21,36,21,6,18,109,15,2,6,1,12,12,13,16,13,11,6,16,18,30,33,17,13,13,11,16,16,13,34,149,138,34,122,149,116,138,138,186,141,186,183,110,185,151,153,153,154,153,153,146,142,8,122,150,125,2,2,11,6,6,11,8,110,144,150,143,146,146,122,24,2,11,11,24,114,22,119,149,123,106,33,18,5,2,2,11,8,110,15,29,106,6,2,2,2,11,13,14,13,6,2,6,2,2,2,6,2,7,22,13,18,29,6,6,6,7,7,13,6,16,11,13,18,1,21,17,13,6,2,1,13,16,29,16,17,7,14,21,29,16,21,29,18,22,22,17,33,8,13,13,13,13,14,29,29,30,125,111,15,11,20,145,126,136,2,2,2,2,5,2,2,2,1,6,1,2,6,1,6,2,2,5,2,2,21,29,117,37,22,11,16,29,36,33,43,22,109,124,21,2,132,37,6,2,182,204,74,11,6,11,20,180,198,203,198,198,179,179,179,179,179,179,179,179,179,194,179,194,169,179,179,194,173,194,169,173,173,171,194,169,173,173,171,171,169,171,168,162,168,162,160,162,168,162,175,169,169,171,171,169,194,168,173,171,169,171,173,171,173,171,169,171,168,168,169,194,169,171,162,194,173,179,179,179,195,179,198,198,196,199,199,200,199,199,195,199,203,203,199,203,199,196,199,200,200,200,200,204,200,198,204,204,200,204,198,203,196,74,
+2,2,10,11,1,13,122,114,33,11,2,1,2,6,36,16,13,14,13,7,29,24,22,43,17,13,11,17,16,13,37,140,126,149,149,138,119,149,123,153,152,153,150,24,130,149,153,152,153,153,152,150,142,116,125,128,16,2,2,2,2,6,6,6,116,150,150,143,143,125,136,17,2,11,22,33,18,15,129,144,123,116,33,11,2,6,2,7,13,110,18,13,15,11,16,12,6,7,13,14,14,17,1,1,2,2,11,2,2,29,16,16,22,11,6,7,13,11,13,6,13,22,11,22,17,1,21,29,17,6,2,1,13,29,17,33,29,13,13,16,29,30,21,29,16,30,15,29,17,11,17,14,13,14,29,16,21,18,116,114,3,6,138,127,126,110,6,2,5,1,2,2,5,2,2,2,2,6,1,2,2,2,2,2,2,5,10,29,106,114,106,2,21,68,29,50,106,46,133,188,6,7,29,16,117,130,203,203,172,7,30,130,180,199,198,198,179,198,195,179,179,179,179,179,179,179,179,179,171,171,194,171,173,171,194,179,171,171,173,194,194,179,171,169,173,171,168,162,171,162,162,171,162,162,171,162,171,162,171,168,171,173,173,171,173,168,171,173,173,171,173,171,171,171,169,168,168,171,169,168,171,171,177,179,179,194,173,195,179,196,199,199,199,199,199,199,199,199,199,199,199,200,198,200,200,203,198,204,198,196,204,200,204,204,201,200,200,195,199,74,
+2,5,0,2,1,12,106,111,109,29,2,5,2,7,16,11,13,11,13,11,22,33,22,29,13,10,22,46,13,17,36,119,129,149,140,139,138,149,132,149,153,150,147,16,47,133,153,154,152,153,153,153,125,115,122,109,2,6,2,2,11,6,6,6,34,144,128,128,142,138,125,6,13,24,116,120,125,8,22,22,123,125,8,6,2,2,2,13,2,22,29,3,22,16,17,2,6,7,14,29,13,17,6,6,2,2,2,2,6,30,14,17,22,11,7,11,13,13,13,13,13,20,29,32,13,1,13,22,17,17,2,2,21,22,32,30,31,11,13,29,22,16,30,16,16,29,15,17,11,2,21,21,11,13,16,16,16,24,33,125,6,113,145,126,147,119,2,2,2,2,6,2,2,5,2,13,13,2,5,11,2,6,2,2,6,2,12,29,32,122,125,6,16,66,116,141,29,21,106,6,15,43,15,47,47,195,198,202,198,131,47,141,176,198,179,200,202,198,179,198,198,179,202,179,179,179,179,179,171,171,171,171,173,171,171,171,194,171,179,179,179,179,179,173,171,173,162,168,168,162,162,162,162,162,162,162,168,162,168,171,171,194,169,173,194,177,171,177,171,179,177,173,171,173,171,171,171,171,171,179,177,179,194,179,179,179,179,179,173,198,195,195,195,199,195,199,199,198,198,199,196,200,198,204,200,200,200,204,201,200,204,204,204,195,204,204,204,204,196,74,
+2,2,5,1,2,7,34,109,108,108,11,2,2,5,11,1,6,2,7,13,16,37,31,13,12,16,29,13,33,106,141,122,120,149,18,106,119,147,129,152,183,152,144,8,22,183,153,154,153,153,153,150,125,138,111,11,2,2,2,2,7,6,6,11,34,143,128,138,128,126,125,17,22,119,122,138,126,11,6,7,136,111,11,6,2,2,2,13,11,18,18,22,11,15,11,2,7,11,13,13,13,6,7,21,11,2,2,11,7,18,15,24,30,2,13,7,11,13,13,11,13,16,30,37,11,1,2,22,18,15,6,2,16,30,22,32,31,11,7,13,17,29,18,29,16,17,30,22,13,11,21,17,6,21,29,29,29,17,34,111,120,140,127,149,144,144,8,2,6,2,2,6,2,2,2,15,11,2,34,37,36,7,13,11,2,2,11,36,34,120,123,121,170,48,124,141,106,4,15,106,11,17,18,106,200,202,195,179,198,179,8,175,198,199,198,179,200,179,198,198,179,179,198,179,198,179,179,179,179,171,171,173,169,179,173,179,174,179,179,179,169,179,173,171,177,171,171,171,162,168,168,162,166,161,162,162,162,171,160,168,168,171,169,194,169,171,177,169,194,179,179,194,179,169,179,169,171,173,173,168,171,194,179,179,194,179,175,179,194,173,198,199,199,200,199,199,195,200,200,198,200,198,204,200,204,201,200,200,204,201,201,195,204,204,200,201,204,201,204,131,
+2,5,2,1,1,12,32,37,111,109,18,2,6,26,2,5,1,5,13,15,16,31,31,16,12,16,11,23,130,117,150,148,37,30,8,47,141,132,37,123,144,154,153,8,36,150,147,153,154,184,150,147,125,125,8,11,2,6,2,2,6,6,6,6,138,143,125,127,126,114,122,6,36,132,139,122,24,2,11,11,126,19,6,11,6,2,11,16,11,16,24,16,15,11,2,2,21,13,21,16,22,6,17,6,13,2,2,12,16,32,30,46,13,2,12,11,6,11,7,21,22,17,29,33,1,1,1,13,24,2,13,11,13,31,32,34,31,7,13,16,22,30,17,30,15,17,15,31,15,2,14,29,11,16,30,22,22,46,110,18,114,119,140,140,144,151,116,2,2,1,2,2,2,6,2,11,6,29,46,36,32,13,10,21,10,5,13,36,68,108,123,137,19,6,24,109,106,154,110,43,16,45,190,202,198,198,179,199,195,198,203,203,200,179,198,203,203,199,198,179,198,198,179,179,198,179,179,179,171,171,169,179,171,173,179,169,179,171,173,179,171,171,171,194,169,177,171,177,162,169,168,169,169,169,168,169,168,162,168,162,162,168,169,162,194,171,173,171,171,194,179,177,194,177,179,194,169,173,171,177,173,171,179,194,171,171,173,171,177,194,173,199,199,199,199,204,200,200,200,203,200,203,200,198,200,204,204,204,201,204,201,201,204,205,201,205,201,205,204,74,
+2,2,2,1,2,16,30,30,33,37,109,22,0,1,2,2,6,2,2,13,32,2,43,122,16,17,21,22,37,130,137,151,119,123,24,47,149,114,32,133,153,153,152,8,130,147,154,184,153,150,150,143,126,127,8,6,6,2,6,2,11,6,11,14,128,128,128,128,138,114,138,145,109,109,128,136,18,6,6,13,116,11,15,11,2,2,34,15,22,29,22,22,33,18,6,2,17,29,30,33,30,13,36,11,17,2,2,29,16,30,30,32,2,6,2,11,7,7,13,16,29,16,22,29,2,1,2,21,11,17,44,7,10,32,46,24,33,5,10,29,18,33,16,29,16,20,29,111,18,1,13,18,14,30,30,30,22,109,110,109,18,144,132,147,153,150,143,6,2,2,6,2,11,6,6,6,22,23,43,34,34,29,13,1,10,10,13,17,124,142,125,142,140,109,44,30,47,121,165,194,190,200,179,202,198,179,198,179,198,198,179,198,179,198,199,198,198,199,179,203,198,179,198,198,179,179,179,179,179,179,179,179,179,179,179,179,179,179,173,171,179,171,173,173,171,171,171,169,171,168,168,169,171,171,171,162,169,162,162,171,162,168,169,168,168,168,171,171,171,169,179,177,171,194,177,179,194,169,179,179,179,194,179,171,173,173,171,171,171,177,179,194,199,199,200,200,204,204,200,201,200,201,203,200,200,200,204,201,204,201,201,204,201,201,205,201,205,204,201,74,
+2,2,2,9,1,7,32,46,36,34,24,29,2,2,5,2,2,2,11,106,20,21,129,130,14,21,16,22,34,119,181,149,106,22,15,130,120,119,110,183,153,153,150,8,152,152,150,150,153,148,147,139,114,127,8,11,2,2,2,2,6,6,6,33,143,150,138,143,128,47,139,148,112,126,138,140,17,11,6,17,116,6,13,8,2,11,119,6,30,30,16,37,17,46,8,11,11,23,30,10,21,21,13,21,13,2,6,16,21,30,30,13,2,2,7,13,21,14,21,34,30,15,30,18,1,1,2,13,15,29,16,2,21,24,46,33,33,11,7,16,29,14,22,17,29,34,114,109,22,2,21,29,8,18,15,13,29,110,116,132,106,126,139,153,150,147,136,10,6,16,11,8,8,8,13,11,30,49,36,29,36,29,17,21,50,172,15,130,114,116,133,129,70,166,130,33,134,177,194,177,194,173,194,179,202,198,194,198,202,179,203,198,198,195,198,199,198,199,195,200,195,198,198,198,171,198,179,179,179,198,179,202,179,179,173,179,179,179,179,179,173,179,169,179,177,171,177,171,169,169,171,169,194,169,173,179,168,162,162,160,162,168,162,162,168,168,171,162,179,171,194,179,177,179,177,171,173,171,179,179,179,179,173,179,194,169,171,173,194,171,173,179,198,199,199,204,204,201,200,200,204,200,200,204,200,200,204,201,205,204,201,201,205,206,204,201,206,201,201,69,
+9,1,2,2,9,5,30,109,116,120,109,10,2,6,2,2,5,13,45,130,106,13,14,15,11,45,141,34,47,117,132,144,18,119,109,45,32,120,36,133,153,153,147,24,138,138,150,153,148,126,149,122,123,128,3,11,6,6,2,2,11,6,8,132,149,146,144,149,128,116,144,145,138,126,136,151,116,29,36,48,29,6,11,15,17,16,123,6,16,36,30,36,29,29,18,21,14,30,7,7,11,21,6,7,13,13,21,7,7,30,47,6,2,7,13,17,21,7,17,29,29,16,24,17,2,1,1,11,13,16,5,10,29,34,43,33,44,6,15,16,29,29,43,36,22,46,109,32,31,2,7,15,22,29,11,6,16,132,120,116,110,149,153,150,148,144,140,8,21,17,11,17,18,20,17,2,29,21,29,14,33,132,29,30,46,3,13,106,123,46,11,35,163,162,168,169,171,169,171,194,177,198,179,194,202,179,179,198,202,202,198,203,179,200,179,200,199,195,198,196,203,203,198,198,198,198,179,202,198,179,179,198,198,202,198,202,179,179,179,179,179,179,178,169,171,171,171,171,173,171,177,171,179,194,179,177,179,168,162,162,156,162,162,171,162,162,168,162,168,171,169,194,179,194,194,173,194,179,179,179,179,194,179,194,171,171,173,177,194,173,194,198,179,198,200,200,204,204,204,204,201,204,200,204,204,204,201,204,201,201,201,201,205,201,206,205,201,206,205,74,
+2,6,1,2,1,2,29,34,123,111,109,33,116,119,16,6,6,32,130,120,32,21,16,26,2,36,132,132,149,151,140,149,8,126,111,15,106,124,32,117,144,144,106,15,137,144,149,150,144,144,144,111,125,140,17,6,6,2,2,2,11,6,22,133,147,150,145,136,144,140,138,127,126,122,141,141,14,24,19,22,6,6,2,13,13,36,122,1,17,22,30,16,48,31,119,30,30,13,29,16,12,47,2,29,36,29,29,1,30,32,10,2,5,11,13,13,13,14,23,22,16,30,17,24,2,1,2,11,2,16,2,11,22,30,33,32,46,34,31,13,13,21,28,29,22,30,33,33,18,1,12,17,15,7,13,18,33,119,106,116,147,152,150,150,148,140,146,115,109,11,6,6,17,6,2,6,2,13,43,13,30,119,106,106,30,13,32,126,22,159,166,162,162,160,162,162,168,171,171,171,194,169,194,179,202,179,198,179,198,179,200,199,199,195,198,199,199,199,195,196,198,198,200,198,200,203,198,198,179,198,198,179,198,179,179,198,179,202,179,179,179,179,179,179,179,168,173,173,171,171,171,169,194,179,177,179,179,179,168,162,162,162,162,162,162,162,168,168,168,171,171,194,179,179,179,179,173,195,179,179,179,179,173,194,171,194,171,169,179,194,179,179,195,179,200,195,204,200,201,204,200,204,201,201,204,204,201,201,204,201,204,204,201,206,206,201,205,206,201,74,
+2,1,2,2,1,5,30,47,126,122,116,46,149,152,34,43,106,132,119,130,15,14,21,12,6,14,22,152,151,120,133,132,15,116,33,13,24,123,133,133,123,145,109,16,137,138,149,153,153,115,47,106,115,142,15,6,6,11,2,6,6,6,34,144,144,144,136,138,138,123,113,126,47,13,122,110,6,16,33,17,8,2,30,32,129,133,130,6,36,30,36,117,120,6,32,32,43,11,45,21,21,50,14,36,29,21,13,33,47,29,1,2,11,2,13,8,13,29,17,30,29,32,46,20,2,1,2,13,13,13,11,11,29,32,31,120,140,46,17,13,17,15,21,13,15,33,109,32,17,6,2,16,11,11,16,30,46,106,106,140,152,148,153,152,150,136,149,113,20,6,2,11,6,18,8,15,11,10,11,11,36,120,119,147,128,108,109,118,141,161,162,160,162,160,171,169,162,171,171,162,171,171,171,169,194,194,177,179,194,198,198,202,200,199,199,198,199,196,203,198,200,203,203,195,198,203,198,198,198,198,179,198,198,198,203,195,203,195,198,202,202,179,179,179,171,173,171,179,171,173,171,173,171,179,179,198,179,179,179,168,162,162,156,161,156,162,162,168,162,173,171,171,169,194,179,179,194,179,179,198,179,179,179,194,179,171,177,194,173,194,179,198,194,198,199,199,200,201,200,204,204,201,204,201,200,204,201,201,204,201,201,205,201,205,201,206,206,201,206,131,
+2,2,1,1,2,2,16,36,122,126,116,46,122,116,33,36,139,133,70,15,6,7,7,2,13,13,43,153,147,120,120,4,29,126,109,40,133,137,20,22,33,145,105,31,147,136,153,154,145,125,31,31,18,140,8,6,6,2,2,2,7,6,117,138,144,138,128,137,126,114,109,22,6,22,138,15,6,16,24,18,44,34,29,30,120,18,32,2,29,23,30,117,29,13,30,43,29,29,17,22,15,6,21,29,34,6,36,21,17,10,1,2,5,2,11,15,13,22,22,30,29,34,31,24,2,1,2,14,17,1,5,13,45,47,117,129,120,106,34,106,17,21,11,15,37,31,33,33,20,2,2,29,22,16,17,29,106,110,116,124,152,148,146,142,144,139,139,136,15,6,6,6,6,8,17,15,17,6,2,36,16,119,132,142,125,109,116,149,169,162,162,162,168,167,162,167,171,169,171,169,171,162,168,194,168,177,171,173,194,202,179,199,199,199,203,199,199,199,198,203,200,198,196,203,200,195,198,200,203,198,198,203,179,200,198,203,199,203,199,179,198,198,173,179,179,194,179,169,173,171,171,171,179,179,194,179,198,198,179,179,171,168,168,162,168,162,168,168,171,194,171,177,171,171,177,194,179,179,179,179,179,194,194,179,179,179,179,179,179,179,179,179,198,198,179,200,195,195,200,199,204,200,200,204,204,204,201,204,201,201,205,201,205,201,206,206,201,206,205,74,
+82,10,2,2,1,5,16,33,106,126,144,139,136,44,7,132,185,132,46,1,5,1,1,2,16,139,148,153,144,124,17,13,24,153,18,29,34,109,106,24,29,138,114,146,126,147,153,144,150,142,105,15,8,126,4,5,2,2,5,2,11,11,133,149,150,149,126,146,125,126,14,2,6,22,114,5,7,16,13,114,111,115,18,33,29,6,11,2,29,32,17,32,16,33,32,34,47,123,122,31,22,13,13,43,32,2,34,34,29,12,1,2,2,2,13,109,15,31,18,29,17,106,33,17,2,1,2,21,22,6,0,29,45,106,46,109,46,109,34,106,24,5,11,14,24,33,33,29,24,6,6,16,29,16,29,8,47,46,114,142,145,139,150,153,149,147,123,126,2,11,6,6,6,11,18,22,17,13,29,10,29,106,33,140,125,114,131,160,168,168,162,162,162,162,162,162,168,169,171,177,171,169,168,168,171,173,171,169,194,179,179,195,198,198,200,199,196,204,200,200,200,200,200,200,204,203,203,198,196,198,198,199,199,179,195,179,200,179,198,198,179,198,179,179,171,179,179,179,171,194,171,179,173,194,179,198,199,199,179,179,179,179,171,171,168,168,173,171,168,171,171,171,173,194,179,173,179,179,179,194,179,179,179,179,202,179,171,194,179,198,179,198,179,198,179,198,196,199,203,200,200,200,204,201,201,200,204,201,201,205,201,204,201,205,206,201,206,201,201,74,
+95,53,6,0,1,2,29,29,47,133,130,136,126,118,21,149,132,141,13,2,2,1,2,13,22,149,138,146,136,46,11,17,109,143,20,16,46,116,148,24,32,154,127,126,144,146,145,128,144,142,105,8,46,128,6,17,13,2,2,2,11,16,133,141,147,144,150,122,113,111,13,6,6,22,109,2,11,13,18,114,33,111,115,31,8,17,6,6,13,16,22,22,30,106,46,37,119,129,120,47,106,31,2,47,43,14,22,15,17,2,2,5,2,11,11,106,11,20,31,15,15,116,110,15,1,1,2,29,18,2,2,21,30,22,17,43,34,111,37,110,30,9,2,34,31,31,24,24,15,1,11,33,30,22,36,29,110,106,127,138,146,145,153,154,147,145,124,144,6,2,2,6,6,13,20,17,17,8,49,39,129,106,106,111,115,164,162,169,168,162,171,169,169,162,168,168,168,171,171,169,168,168,168,168,171,194,171,173,171,177,194,202,203,195,198,204,199,200,200,198,204,204,200,200,204,200,200,203,198,203,198,198,202,199,203,199,203,195,179,198,198,179,198,202,179,179,179,179,194,169,173,179,168,179,179,198,199,199,196,203,198,195,179,179,179,179,168,171,174,173,171,171,171,169,173,194,173,194,179,194,179,179,195,179,194,198,202,179,179,198,179,198,198,198,198,179,198,198,179,200,195,200,204,204,204,201,201,200,201,201,205,201,205,201,206,201,206,206,206,131,
+89,84,38,5,2,2,13,21,32,34,139,147,149,130,117,133,149,136,6,2,2,6,2,7,29,110,153,150,111,6,8,114,144,152,4,14,46,24,24,13,16,137,128,3,114,142,150,150,115,142,114,11,109,115,31,110,7,6,2,2,11,16,110,122,145,140,115,137,154,123,6,6,2,47,20,2,6,7,16,109,119,108,126,8,15,17,17,2,21,31,30,16,30,47,34,68,110,48,132,31,46,24,15,34,24,13,16,30,13,2,2,7,2,7,13,18,21,24,31,15,43,20,109,8,2,1,5,11,22,6,2,13,30,32,30,24,106,46,47,32,33,6,2,18,30,36,16,117,6,2,30,37,43,22,30,45,106,132,125,144,153,153,153,153,151,151,149,126,11,2,2,6,6,6,18,31,33,14,13,8,49,47,8,111,164,169,169,169,162,168,162,168,168,169,171,168,171,169,171,168,168,169,168,162,194,169,179,171,171,194,179,179,196,199,200,203,204,199,198,200,200,198,204,198,201,200,199,199,199,199,198,198,179,202,195,203,196,179,198,198,179,202,179,198,179,179,179,179,171,179,171,177,179,179,194,179,199,199,199,199,196,203,195,198,198,179,179,179,179,169,173,174,194,171,179,179,194,169,179,179,179,179,179,198,179,198,194,179,179,198,198,179,198,199,179,198,203,198,198,198,195,203,198,204,201,200,204,201,204,201,205,205,201,201,205,206,201,206,201,74,
+89,90,91,90,71,2,7,22,47,119,139,182,149,140,106,132,150,132,11,2,2,2,6,7,16,119,154,151,17,13,29,152,150,140,2,14,119,110,29,1,7,117,33,126,147,128,150,150,105,138,127,6,109,109,128,37,7,2,2,5,6,14,123,144,126,127,128,153,152,125,8,6,6,119,19,5,6,14,34,122,109,111,47,19,13,13,11,6,16,13,13,22,34,106,32,36,106,33,34,18,33,18,31,29,18,13,29,11,2,2,6,2,2,2,12,11,17,108,33,24,109,31,122,6,2,1,2,13,22,8,6,16,34,33,16,46,106,120,116,132,144,109,5,121,16,22,129,122,2,5,36,30,29,29,22,47,36,132,127,139,151,153,153,148,151,137,149,34,2,6,2,11,17,22,21,17,22,109,157,166,171,78,157,166,169,169,169,171,168,168,169,169,169,162,168,168,168,168,168,169,162,168,169,171,171,173,173,171,171,179,202,179,203,200,198,203,200,199,200,198,204,196,204,196,198,196,199,203,199,198,198,203,179,198,179,198,198,203,195,179,198,198,198,179,179,198,173,179,179,194,194,177,179,179,179,198,179,198,199,200,196,203,199,199,198,198,198,202,179,179,198,194,202,179,179,179,179,179,179,173,179,179,198,179,198,179,198,179,198,179,179,198,199,198,198,198,195,198,198,203,195,200,200,203,200,204,201,200,201,205,201,201,205,205,201,201,205,201,206,74,
+90,90,91,90,90,38,11,129,130,47,120,133,133,123,29,149,147,125,16,7,11,6,2,11,22,130,146,136,11,6,33,150,137,144,111,24,33,43,114,22,132,119,109,106,8,8,138,148,8,146,125,11,114,18,46,18,2,2,2,2,2,29,116,114,126,145,153,152,144,128,16,6,6,137,20,6,6,6,11,20,109,18,114,22,6,13,11,11,6,6,30,30,29,106,30,30,46,17,36,17,30,24,15,30,15,4,7,6,2,2,2,6,6,2,6,13,1,16,11,8,33,32,136,2,1,2,6,12,17,11,6,30,34,34,46,109,116,124,141,140,141,136,126,8,32,134,149,17,1,2,43,30,16,21,36,133,43,120,125,144,150,183,150,149,146,147,129,6,6,11,8,17,34,17,31,21,24,78,168,162,160,168,162,162,167,171,171,169,168,168,168,168,169,169,168,169,162,169,171,168,168,168,171,171,177,179,179,179,194,179,198,202,199,199,203,198,198,203,199,196,196,199,203,199,199,203,195,199,198,179,198,198,198,198,198,203,179,198,203,195,203,198,196,198,179,179,194,179,179,179,194,179,194,179,179,198,198,198,199,199,199,203,198,198,179,198,179,199,203,196,196,199,179,198,179,179,198,178,173,198,195,198,198,198,198,195,199,198,198,195,179,198,198,198,198,200,203,199,196,198,199,199,196,198,199,203,200,201,204,201,201,205,206,201,205,206,201,206,205,131,
+82,90,89,90,91,82,38,30,32,34,132,139,138,133,119,147,137,140,11,13,11,11,13,13,32,124,153,19,11,30,132,126,144,145,115,119,122,21,22,22,17,29,8,6,17,106,143,105,114,150,111,6,33,114,17,34,2,6,2,2,11,16,123,138,126,153,143,143,115,140,8,6,6,135,111,6,6,7,7,24,24,24,114,19,11,13,13,22,2,11,4,16,30,46,17,30,116,22,14,17,16,30,16,45,32,164,2,7,6,7,2,10,9,11,7,14,6,13,24,119,15,34,132,1,1,2,2,11,30,11,7,29,37,24,119,149,149,141,139,144,139,133,136,109,47,130,136,109,5,2,36,30,29,43,120,130,106,120,139,147,148,145,147,141,140,33,6,10,13,16,36,16,21,29,16,68,169,162,156,156,160,162,162,162,168,168,194,162,194,162,168,160,162,168,168,168,169,169,162,168,169,171,173,171,179,179,198,179,179,202,199,179,200,195,196,198,203,200,200,199,198,198,199,198,195,199,203,179,198,179,202,179,194,198,179,179,202,198,179,196,199,199,203,195,198,202,179,179,179,179,198,179,179,202,179,179,198,179,198,199,203,199,198,179,198,203,196,200,199,199,203,196,199,203,198,195,179,198,198,198,179,196,203,198,199,199,199,195,199,198,198,198,199,203,200,195,198,204,198,198,195,200,195,198,199,196,203,198,204,204,201,201,205,205,205,201,205,201,205,74,
+89,86,89,89,89,90,86,7,21,116,140,144,139,147,120,144,151,108,13,11,13,13,13,18,43,119,141,11,17,144,138,133,144,128,24,137,125,116,31,13,16,33,17,15,24,24,31,20,142,150,18,29,123,146,144,31,6,11,2,2,7,7,106,137,136,148,138,146,108,136,6,6,13,147,122,6,13,1,7,22,34,17,109,111,13,15,15,18,15,33,44,23,22,33,13,34,47,106,43,22,47,31,35,29,46,40,2,29,13,13,2,1,5,21,13,11,2,119,133,116,15,130,22,2,1,2,2,35,28,2,13,30,119,132,149,183,133,141,133,133,141,132,130,33,132,130,117,43,2,7,21,36,37,47,47,47,120,118,120,138,147,148,146,142,116,13,13,15,30,11,21,28,66,165,29,159,162,162,162,160,162,162,160,169,162,168,162,168,162,162,162,162,160,162,168,162,162,169,169,168,168,169,194,173,194,173,179,202,198,196,179,200,202,199,199,200,198,204,198,204,199,199,199,195,203,195,179,198,198,202,179,198,179,179,179,198,179,198,199,203,199,199,199,203,198,202,198,179,198,198,203,198,179,198,198,198,198,198,179,199,198,203,198,199,195,179,196,198,179,198,198,198,179,199,195,202,203,199,199,199,195,179,199,199,199,203,198,200,200,196,199,200,195,200,203,200,200,198,200,203,199,199,199,195,199,199,199,199,198,201,204,204,201,206,201,205,201,205,200,74,
+84,85,85,86,85,89,89,7,32,36,132,130,144,132,139,144,140,19,17,13,13,13,34,111,22,34,142,11,114,144,147,149,144,125,125,140,32,32,31,44,119,114,21,34,109,114,151,18,150,140,6,135,152,144,122,17,30,34,11,2,5,11,133,135,32,138,146,151,108,125,6,6,24,139,109,2,6,13,13,32,34,34,136,31,8,17,17,18,33,46,22,29,34,22,11,106,132,34,118,119,18,120,14,48,46,2,5,5,1,5,2,5,1,2,5,1,11,117,110,33,18,132,11,2,1,2,5,29,13,2,21,130,134,130,141,149,149,133,133,139,133,119,117,46,141,110,47,1,5,5,28,30,110,31,117,106,116,106,109,116,142,142,20,140,32,16,36,15,120,164,162,173,169,171,166,171,194,162,169,168,168,162,171,160,168,162,162,162,160,161,162,169,160,160,98,160,160,160,162,162,168,171,169,171,179,179,198,177,198,203,195,198,199,204,198,200,200,198,200,200,200,199,198,199,203,199,195,179,198,198,179,179,179,179,179,179,179,179,198,195,199,199,198,199,198,179,195,198,198,179,198,199,195,198,179,199,179,198,202,198,179,196,200,203,203,199,178,203,198,195,198,198,203,198,203,198,200,198,200,195,200,195,198,198,198,196,203,203,198,204,200,203,200,204,198,204,200,200,200,200,195,203,200,198,199,199,198,199,199,198,204,201,204,201,201,201,205,201,201,131,
+89,89,89,89,90,90,95,26,13,32,132,139,182,138,140,128,125,125,20,11,11,13,17,116,33,130,144,11,116,122,111,109,115,114,111,110,16,29,16,130,109,44,13,34,106,119,126,126,144,132,133,144,144,122,139,109,29,106,13,2,31,21,48,47,16,126,149,146,138,133,16,13,119,116,17,6,6,11,13,22,24,116,120,11,17,46,17,17,24,15,17,36,119,130,6,106,119,132,149,122,130,24,11,37,20,1,2,5,7,2,2,2,5,2,2,6,21,34,34,120,116,15,6,1,2,2,2,30,3,6,30,33,132,46,129,180,133,133,141,132,119,129,120,141,139,149,31,1,2,11,29,22,33,116,119,116,116,129,132,122,145,125,110,18,16,22,16,74,179,169,169,162,171,169,194,169,171,169,175,169,171,169,168,162,160,162,156,159,160,160,169,159,160,160,156,159,160,160,168,162,162,168,173,194,177,179,179,198,179,200,195,179,196,200,204,200,204,204,199,204,199,196,199,198,199,195,203,198,179,202,198,179,179,179,179,202,198,198,179,200,203,179,200,198,198,198,202,179,196,203,196,203,199,195,199,199,195,179,179,198,202,179,199,196,203,195,199,195,203,199,196,198,198,203,200,198,200,200,195,203,203,195,200,199,199,196,198,200,200,204,198,201,201,200,203,198,201,200,204,198,201,199,199,203,199,198,199,199,198,195,200,200,200,204,204,205,201,204,201,74,
+89,90,89,90,85,91,90,27,32,119,139,136,137,136,126,127,143,145,109,11,11,14,16,106,126,132,106,17,119,140,18,108,125,114,114,106,24,16,22,119,16,110,21,46,43,110,151,145,33,116,149,126,150,126,138,20,13,13,2,2,5,33,11,6,7,140,151,127,126,34,109,70,34,11,6,6,6,7,14,34,109,119,24,2,44,106,126,43,33,30,30,47,123,11,29,106,147,137,149,136,124,132,11,132,24,1,2,2,5,13,1,2,2,5,2,2,23,46,32,132,132,21,2,5,2,2,2,70,68,16,21,130,133,120,133,117,182,133,133,119,130,120,120,149,133,141,24,1,2,13,21,43,125,118,109,116,132,119,114,124,144,140,36,17,66,168,167,168,168,168,194,171,173,171,171,173,171,171,173,162,194,160,168,160,162,160,160,162,162,162,156,159,160,160,97,156,160,160,162,167,169,171,171,179,177,179,199,179,199,203,199,199,203,195,198,204,200,199,204,199,200,203,203,195,203,179,179,198,202,198,179,179,179,202,179,179,198,179,198,198,199,202,198,198,179,198,198,202,198,203,198,204,199,195,199,195,199,199,195,179,198,202,198,198,199,203,199,199,198,200,199,198,200,198,200,200,200,198,200,198,198,200,198,198,198,203,198,196,198,204,200,200,198,204,200,204,200,204,198,204,198,204,200,198,195,198,200,199,199,199,199,198,200,200,204,200,204,204,200,74,
+89,90,91,90,91,90,91,71,133,120,130,114,109,114,119,128,150,146,33,11,13,21,22,46,110,37,24,46,138,126,8,46,144,149,126,34,17,22,30,22,34,22,16,31,34,123,149,126,18,148,108,138,138,126,139,116,2,2,11,6,11,14,2,11,11,123,130,19,148,125,115,15,11,7,7,2,6,7,29,132,133,106,123,6,36,106,120,34,33,15,46,126,116,11,34,183,149,151,139,132,129,124,11,37,13,2,6,10,5,2,2,2,5,2,2,7,43,110,110,133,130,2,2,2,2,9,13,13,2,6,21,130,144,149,145,133,47,139,147,125,132,132,129,141,133,132,33,1,2,35,11,117,120,109,44,114,120,124,118,106,149,31,69,14,78,168,168,168,171,169,171,169,177,194,169,173,171,177,173,173,171,169,162,160,160,159,160,162,160,160,160,159,159,160,156,160,162,160,162,168,168,171,173,194,179,198,179,202,199,196,195,179,196,203,203,204,199,196,203,204,196,199,196,200,203,195,202,198,179,194,179,179,179,177,179,198,198,202,198,179,195,198,198,179,198,198,177,198,199,198,203,198,200,199,203,196,203,203,203,195,179,198,179,198,199,196,203,199,198,196,198,200,200,195,200,195,200,198,204,195,200,195,198,198,200,198,195,198,203,200,204,204,200,201,200,204,201,200,200,203,200,198,204,198,196,196,198,198,200,203,199,198,199,204,200,196,200,200,204,131,
+89,89,89,89,89,90,85,71,6,17,125,138,139,137,136,147,150,139,86,60,29,16,22,67,101,92,96,46,126,114,15,116,126,144,132,34,22,120,22,30,47,13,16,129,106,132,144,115,32,150,136,123,144,126,144,18,11,22,123,13,47,13,2,11,24,122,18,139,138,126,143,19,6,6,6,6,2,13,8,116,18,36,110,16,16,106,132,123,33,36,136,181,109,37,120,181,136,141,138,120,33,22,10,30,2,2,2,5,2,11,2,1,2,2,6,5,45,33,120,119,33,1,2,2,2,1,11,21,6,2,30,133,124,47,151,147,31,132,144,149,126,119,132,144,126,144,34,1,11,21,29,117,120,109,109,118,116,124,128,43,45,163,162,98,173,162,168,171,169,169,175,171,169,173,173,169,177,171,177,171,168,162,162,162,162,160,160,162,169,167,169,160,162,159,160,156,169,162,162,168,171,173,194,202,198,198,203,198,199,203,203,195,198,200,200,195,203,198,199,198,204,203,203,198,179,198,179,179,198,179,179,198,198,198,202,179,198,179,198,198,179,198,179,198,177,198,198,179,203,199,199,203,198,199,199,198,200,198,195,203,195,179,198,198,203,196,200,198,204,200,200,198,196,204,195,204,200,204,198,204,204,198,200,204,195,204,204,200,204,198,195,204,201,204,201,201,203,201,203,200,200,204,200,200,203,199,199,203,199,198,200,198,198,200,199,204,198,201,200,74,
+89,89,89,85,90,91,89,90,6,13,123,144,140,136,119,140,148,79,89,90,79,75,75,90,92,91,96,59,13,33,138,144,149,182,96,53,22,32,30,34,20,31,26,23,132,144,149,114,22,150,136,122,136,133,150,8,29,114,126,8,119,13,7,2,132,105,119,144,34,16,150,20,11,6,6,2,2,6,29,115,32,114,136,8,22,132,130,133,132,130,141,126,33,130,119,151,110,130,133,138,109,16,14,6,2,5,6,2,10,2,6,1,1,2,7,6,30,123,109,109,15,6,1,2,5,2,2,2,11,1,36,151,123,34,149,144,106,133,141,133,132,116,144,144,145,147,17,2,2,22,31,36,36,116,109,116,122,113,148,169,162,171,169,171,162,171,171,169,171,177,177,168,177,175,171,171,168,169,194,171,169,162,160,162,162,159,169,162,162,162,162,160,162,160,162,160,167,162,162,168,171,202,194,202,179,198,179,196,196,200,199,203,198,200,198,199,198,200,200,203,198,200,198,179,198,198,198,179,179,179,179,179,202,179,198,198,179,198,179,198,199,198,198,198,179,179,198,199,196,198,199,199,199,204,200,198,200,198,200,198,199,198,198,179,198,199,198,205,203,198,200,200,204,198,204,204,204,195,201,204,195,201,195,204,195,204,195,204,195,200,200,198,204,204,201,200,201,200,201,200,203,200,200,204,200,200,198,200,199,196,199,199,196,198,199,203,199,198,200,131,
+89,86,89,90,86,88,91,100,6,6,33,126,142,138,122,106,48,90,89,90,86,90,90,91,91,90,92,59,106,116,119,117,48,87,96,96,49,11,32,29,7,33,33,21,47,36,29,11,114,150,144,123,106,138,151,105,34,114,120,29,129,119,123,104,114,18,137,132,11,24,153,19,2,11,6,6,2,7,17,123,106,106,135,20,36,130,110,132,132,120,130,24,24,139,133,130,120,106,136,123,130,116,2,2,2,2,2,11,2,2,2,2,1,2,2,2,34,109,111,33,2,2,6,2,2,5,2,5,7,11,29,136,122,36,133,149,24,141,145,136,136,133,140,141,133,126,8,2,21,36,13,46,109,109,118,118,125,127,140,194,160,171,168,168,168,168,167,168,169,171,171,177,171,171,177,175,173,171,162,168,162,162,162,161,162,169,162,162,168,162,162,162,162,168,162,162,168,162,171,171,194,173,179,198,179,198,203,199,199,196,198,200,196,198,200,203,199,199,198,196,198,203,198,199,195,179,179,179,194,198,179,198,202,179,179,179,202,179,202,179,198,179,198,179,198,179,198,179,199,200,200,203,198,200,198,204,198,200,200,203,203,195,179,198,199,199,200,198,201,203,200,204,195,201,201,204,201,204,200,204,201,204,201,201,201,204,201,201,204,195,204,201,204,204,204,204,204,201,200,200,204,201,203,198,200,200,198,204,199,198,200,199,199,199,195,196,199,203,195,74,
+85,85,85,85,89,89,86,90,58,11,126,128,128,132,134,77,95,89,91,90,90,91,86,90,86,91,92,71,66,68,77,100,91,92,91,96,96,62,34,16,30,123,18,13,32,8,11,16,149,150,147,33,106,128,146,144,120,133,31,34,110,133,149,154,148,22,122,105,11,24,145,8,11,7,2,2,7,6,37,125,45,47,106,106,30,117,106,129,136,46,29,24,110,144,109,34,136,120,137,124,126,116,0,6,1,11,2,2,6,6,2,6,1,1,6,2,46,138,125,15,6,2,2,2,6,1,2,2,31,31,30,144,137,117,37,133,30,153,149,145,133,119,138,122,119,124,11,2,2,8,43,111,126,33,33,111,125,115,145,198,168,162,169,168,168,162,168,162,168,168,162,171,169,162,171,171,171,171,168,168,162,168,162,160,168,168,162,168,168,169,162,162,171,162,168,168,162,168,171,173,179,198,198,202,194,198,195,203,199,203,195,198,204,203,196,203,200,199,200,199,198,179,199,198,203,179,198,179,179,179,202,179,179,179,198,179,198,198,198,198,202,179,198,198,202,173,195,199,198,195,198,201,200,198,204,200,200,203,198,200,200,200,203,196,198,199,200,204,204,201,205,201,204,201,204,201,204,201,204,201,204,204,204,201,204,201,201,200,204,201,195,204,204,200,201,204,200,204,204,204,199,200,200,195,200,200,200,198,204,200,203,198,199,203,203,199,198,199,195,74,
+89,89,89,85,85,89,89,85,90,61,36,123,121,78,84,89,82,85,85,90,76,90,91,89,91,90,86,90,91,85,91,90,91,91,91,91,92,102,39,11,17,138,17,13,30,7,2,29,123,149,126,20,139,152,151,138,136,125,10,130,147,153,153,144,147,126,144,114,17,106,145,11,7,7,6,2,6,6,119,116,34,106,47,106,33,47,34,47,126,11,8,109,141,143,29,132,116,119,141,144,151,24,2,1,2,11,2,6,2,7,13,2,2,6,1,2,129,122,132,22,2,2,2,5,1,5,2,6,36,129,116,129,141,122,120,132,30,126,133,133,136,140,132,132,110,125,11,2,13,46,110,126,146,127,29,24,150,128,147,169,169,169,168,162,162,162,168,162,168,162,169,169,162,168,171,173,171,169,168,168,168,169,162,162,162,162,162,168,169,162,171,169,162,162,160,162,171,171,171,194,179,202,179,198,198,203,199,198,204,200,200,200,203,198,200,195,198,204,198,196,200,198,203,195,196,198,202,179,179,179,194,202,179,179,202,179,195,179,198,179,198,179,198,179,198,198,179,203,199,203,200,195,204,204,200,198,200,200,204,199,198,196,198,199,204,200,201,201,204,201,201,204,205,201,201,204,201,201,204,201,204,201,201,204,201,204,201,204,204,204,201,200,201,204,204,201,204,204,204,200,199,200,200,200,198,199,202,200,198,200,199,199,200,200,195,200,200,198,200,131,
+85,85,86,88,85,89,84,84,89,89,89,82,84,84,82,84,89,85,90,91,90,90,85,89,91,85,90,90,89,90,89,91,89,86,91,91,92,96,62,30,46,122,16,32,30,13,2,24,144,152,148,20,149,144,142,124,106,110,15,120,153,151,144,111,149,139,128,127,8,138,144,6,7,6,2,2,13,7,132,33,106,128,127,108,29,22,116,44,123,8,11,116,136,136,16,124,132,114,153,141,68,11,2,2,5,1,11,2,11,13,21,6,2,2,2,6,117,149,132,13,2,2,5,25,1,2,6,7,47,120,120,120,124,151,105,31,18,132,120,132,133,124,123,110,47,117,6,2,11,33,116,136,140,138,104,113,141,126,130,169,169,168,162,171,169,160,168,168,171,171,171,177,168,171,194,169,177,171,169,162,171,168,169,169,169,169,162,162,169,169,162,168,160,160,159,160,162,171,171,194,173,198,179,202,179,200,198,200,203,199,200,199,200,200,200,200,203,198,200,179,196,199,196,203,179,179,179,179,202,179,198,179,198,198,179,195,179,203,178,202,195,179,196,199,198,179,200,198,198,198,200,200,203,200,198,200,200,204,196,200,204,200,200,200,195,204,201,201,201,206,201,205,201,205,206,201,204,201,204,201,201,201,204,201,201,205,201,204,201,201,204,201,200,200,201,200,201,203,200,204,199,199,202,199,199,199,198,199,203,198,200,202,199,198,198,199,199,202,179,74,
+89,89,85,89,82,84,84,82,84,82,84,84,84,84,89,85,86,89,85,85,91,89,90,91,82,91,85,91,88,91,90,90,89,91,90,86,90,86,92,75,130,43,30,29,11,11,7,141,152,151,144,151,138,143,150,128,119,8,43,110,148,147,143,145,115,109,132,126,15,153,128,6,7,14,29,16,11,13,136,15,30,138,143,20,11,34,124,24,132,31,36,133,124,132,34,119,149,119,144,124,6,2,5,2,2,6,6,2,14,47,22,21,13,6,2,2,68,125,33,2,6,10,2,1,2,5,1,13,119,119,15,32,133,116,130,133,33,106,120,110,130,132,139,120,110,6,2,6,13,106,132,119,132,127,140,126,18,69,156,162,162,168,169,169,162,171,169,171,169,171,171,162,194,162,171,171,162,194,168,194,162,171,171,162,171,169,162,169,162,160,162,156,156,156,156,156,160,169,168,171,194,179,179,179,198,198,202,179,200,202,199,199,199,200,200,200,199,200,199,198,199,203,199,200,198,198,179,173,198,198,179,202,179,198,198,203,195,179,202,194,198,203,199,203,199,198,198,199,203,200,200,203,198,198,204,198,200,195,204,204,198,200,204,204,200,201,204,205,205,206,206,201,206,201,206,205,201,201,205,201,204,201,201,201,204,201,201,204,201,200,204,201,204,204,204,204,200,204,204,195,202,194,198,199,198,177,198,179,198,179,179,198,198,179,198,179,198,177,179,74,
+89,84,84,85,84,84,84,84,82,84,84,84,84,82,84,84,84,85,89,85,85,90,89,85,91,90,91,89,89,89,89,90,91,90,85,91,90,90,91,91,95,13,13,2,16,17,6,120,151,137,141,144,150,142,142,138,17,13,33,37,153,152,146,145,142,115,110,111,122,124,13,6,7,36,110,114,109,22,47,2,29,129,150,20,23,34,116,47,123,116,117,133,149,126,68,133,141,130,149,125,2,2,2,1,2,2,2,11,106,36,47,22,46,29,31,18,117,139,136,2,2,2,6,2,2,5,2,13,116,29,18,17,36,109,43,116,29,29,119,106,130,123,106,106,132,24,2,2,11,119,110,120,132,144,140,45,159,161,156,162,161,168,162,169,169,162,171,171,171,173,171,171,171,162,169,169,169,171,171,169,171,168,168,171,162,169,162,160,160,156,98,103,98,103,103,156,156,160,162,168,171,171,171,177,179,177,198,177,194,202,179,198,196,199,204,204,204,199,195,198,198,202,198,179,200,179,198,198,179,179,198,198,202,179,195,179,198,198,198,179,199,179,198,203,200,203,199,200,200,200,198,200,200,203,200,195,200,204,200,204,200,204,201,200,203,204,201,204,201,205,201,205,206,206,201,205,205,204,201,205,201,204,201,204,201,201,204,201,204,204,204,201,204,201,200,200,200,198,199,199,198,198,198,179,198,177,194,179,202,179,194,173,179,199,194,173,194,171,171,74,
+84,84,84,84,84,84,84,84,82,84,82,84,84,84,84,88,85,85,89,89,89,91,85,90,85,85,85,89,89,89,89,91,90,89,91,90,90,89,90,90,95,12,11,6,22,24,7,130,149,148,145,138,150,143,150,106,15,24,13,47,147,149,127,143,115,17,18,17,132,29,2,11,7,24,109,125,149,106,30,6,16,34,132,15,16,34,138,117,133,140,139,182,186,22,120,149,136,151,37,132,3,5,2,2,2,6,5,6,106,114,48,16,15,22,136,119,181,24,130,6,2,5,2,2,2,2,2,21,116,124,29,34,120,33,110,46,18,29,30,119,120,130,119,47,47,32,6,2,13,43,119,132,133,124,17,87,160,160,156,156,160,162,162,169,162,169,168,168,168,168,168,169,162,160,159,160,162,162,168,168,162,162,162,162,161,160,160,156,103,98,98,98,98,98,98,98,98,98,160,161,168,169,168,171,171,171,171,177,179,179,194,179,179,199,203,199,199,198,198,203,199,179,198,203,198,198,202,179,198,198,198,179,200,199,203,199,179,198,179,198,179,198,198,199,199,200,200,203,196,200,203,200,200,200,200,200,200,200,198,204,200,201,200,204,201,204,200,201,201,204,201,201,206,201,206,201,205,201,201,201,204,201,201,201,204,201,204,201,205,204,201,203,200,198,204,200,203,199,198,194,177,179,179,177,194,194,179,177,194,173,173,194,194,177,179,173,169,160,162,69,
+82,84,82,82,84,82,82,82,82,84,82,84,84,84,84,88,89,85,86,89,89,89,86,88,90,85,86,82,85,89,89,85,85,89,89,89,89,89,89,89,95,61,14,129,129,29,34,116,141,149,144,138,145,150,115,4,22,122,15,117,140,127,149,143,150,111,18,192,18,7,2,6,13,13,24,128,126,110,15,2,21,110,126,6,22,130,141,45,133,153,151,144,116,6,181,132,47,120,34,106,20,2,5,11,6,2,6,7,123,122,109,11,22,17,110,123,141,14,20,2,11,6,2,12,2,5,2,13,106,120,30,32,46,106,46,36,106,43,47,120,132,120,120,45,106,24,15,11,29,31,47,149,120,97,87,98,103,159,160,161,156,160,169,162,160,169,156,160,162,168,162,161,160,156,160,156,156,162,168,169,168,162,156,160,156,160,103,98,98,96,102,92,92,92,98,98,98,103,93,159,161,162,162,156,168,162,169,160,173,171,171,173,194,202,194,203,203,200,195,199,199,203,199,179,200,198,198,198,179,198,200,199,202,196,198,200,203,198,199,203,198,179,198,179,196,204,200,204,200,200,200,200,198,200,199,199,199,199,203,200,200,204,200,200,204,204,204,201,200,201,205,204,201,201,205,205,201,206,205,204,201,201,201,205,201,201,201,204,204,200,200,198,199,200,179,198,179,177,179,179,169,194,162,168,177,177,169,194,169,162,171,177,171,173,171,194,162,171,169,74,
+84,84,82,82,82,82,84,84,84,82,84,82,82,82,84,85,89,85,85,85,85,85,88,85,85,85,85,88,84,84,84,88,89,84,89,85,86,89,89,89,90,61,14,23,29,29,22,119,106,122,47,34,149,146,146,114,18,46,17,139,150,145,153,152,125,153,114,27,2,11,2,7,7,13,34,146,149,124,6,2,47,153,153,8,45,141,110,106,47,150,148,138,6,120,119,132,22,119,45,47,111,2,31,125,33,13,11,11,117,24,109,15,13,13,106,147,125,36,126,2,21,16,2,1,1,2,11,13,116,47,17,36,43,43,31,43,116,43,43,46,46,47,119,46,133,106,24,34,33,116,132,164,92,97,103,98,98,103,160,160,160,161,160,156,162,160,160,162,168,162,160,156,159,160,156,160,156,162,162,160,161,160,160,161,156,160,98,92,92,92,96,92,96,101,92,92,98,98,98,98,98,103,98,160,156,160,159,160,169,167,169,171,171,171,173,194,179,198,179,199,195,198,202,199,199,198,179,179,198,198,179,200,198,199,200,200,200,195,199,198,179,200,198,203,195,200,200,198,204,204,204,199,203,200,198,199,179,200,179,200,199,199,199,199,204,204,201,204,200,204,204,201,205,205,205,201,205,204,197,205,201,204,204,204,205,201,204,205,200,200,199,179,202,179,199,194,173,194,177,171,169,169,169,169,171,171,177,169,162,168,171,171,168,168,162,168,162,169,162,69,
+84,82,81,82,84,81,88,84,82,82,82,84,82,84,84,84,84,84,82,85,89,84,85,84,88,84,84,82,84,82,84,85,85,85,90,85,90,85,89,95,91,82,0,2,11,106,11,106,36,46,22,22,153,145,148,127,17,29,8,149,149,142,153,154,144,153,20,5,2,11,7,6,7,13,34,126,138,32,16,5,36,147,149,8,129,136,31,16,132,146,140,11,33,123,147,141,15,47,29,43,114,4,123,105,182,185,3,13,30,110,33,24,20,126,147,124,136,129,147,2,7,13,2,5,2,2,11,47,130,29,29,47,116,116,124,114,33,31,138,116,136,132,138,114,186,144,120,46,23,35,71,96,96,93,98,98,98,98,160,159,160,156,160,156,160,156,160,156,162,156,160,156,103,156,160,156,162,169,160,160,162,160,160,160,161,98,96,102,92,92,92,92,91,92,92,92,92,96,101,98,98,98,98,98,98,98,103,159,160,160,160,162,162,168,169,168,173,194,179,179,198,179,179,179,179,198,179,194,179,179,198,203,198,198,198,199,204,204,202,196,199,199,179,199,203,195,203,200,200,203,198,203,198,179,179,179,179,198,179,198,179,202,179,198,179,199,199,199,200,200,204,201,204,201,201,205,206,201,204,201,200,201,204,200,201,204,200,200,203,199,198,198,202,194,169,177,171,171,177,168,162,162,162,169,169,169,171,168,168,169,169,169,168,160,162,162,160,162,160,73,
+82,82,84,82,84,84,81,82,82,82,81,85,81,84,82,82,84,82,84,84,82,90,89,88,84,84,88,84,84,84,84,85,88,85,88,89,85,90,90,88,89,95,40,2,14,133,2,45,30,47,11,29,150,146,142,142,33,11,43,144,152,151,126,140,123,152,109,2,5,6,6,7,6,11,13,110,109,17,30,2,21,144,133,11,20,114,109,36,133,149,128,22,138,141,144,122,30,33,33,23,116,144,128,130,136,136,6,11,33,106,120,123,109,141,146,123,129,119,116,0,5,72,64,2,2,6,7,37,22,7,117,120,130,120,129,120,120,43,119,130,132,130,31,138,154,149,111,120,77,95,95,91,97,102,98,98,98,98,103,160,159,103,97,160,156,160,156,161,160,160,156,160,160,156,160,160,162,162,156,169,169,160,156,160,156,98,98,96,92,91,91,91,91,91,91,91,92,92,91,92,92,92,98,92,98,98,98,98,156,156,156,160,156,160,160,162,162,169,171,168,168,168,169,168,173,179,179,179,179,171,179,199,198,179,198,198,198,179,200,202,203,198,203,200,203,203,200,199,204,202,200,199,198,179,169,171,173,173,171,177,179,194,177,194,173,198,198,198,198,199,200,204,200,201,201,204,201,205,201,201,204,201,201,201,204,203,199,198,179,198,177,177,179,177,162,162,168,168,168,162,168,162,167,168,162,162,160,169,162,171,162,162,162,162,160,160,160,159,159,73,
+84,84,82,84,82,82,84,84,84,81,85,83,85,81,82,84,82,84,82,84,88,85,85,82,84,84,84,84,84,84,84,88,84,89,88,88,89,88,85,90,90,88,54,7,43,33,6,5,33,20,13,16,148,150,143,148,122,16,47,144,120,122,15,106,46,138,33,2,2,11,6,6,6,7,13,31,33,14,30,5,7,119,124,11,37,106,120,36,151,153,127,111,124,138,132,33,30,30,22,43,114,186,140,147,132,17,6,21,118,30,116,137,132,136,130,110,36,139,120,2,5,6,2,38,2,11,11,43,2,11,119,37,120,36,120,47,124,110,47,47,132,31,46,144,154,119,46,85,89,89,90,85,92,87,98,98,98,103,98,156,103,159,103,156,160,156,156,160,162,160,156,160,156,160,160,160,162,161,156,160,156,160,160,98,103,98,96,92,92,91,101,91,90,91,91,91,92,91,92,92,92,101,92,93,98,98,103,98,103,98,98,98,98,103,156,160,103,156,156,160,156,98,103,159,156,169,171,173,179,179,179,194,179,179,179,194,179,198,198,179,198,179,179,198,179,199,200,200,199,203,199,199,198,179,168,168,162,162,169,168,162,169,169,171,168,171,177,198,179,202,200,204,201,203,201,205,204,201,201,204,201,201,203,204,200,202,179,198,177,194,173,171,169,171,162,162,168,162,162,162,162,162,162,162,160,168,162,162,162,160,162,160,162,160,156,160,156,156,156,71,
+81,84,81,84,81,81,84,82,81,81,85,81,81,82,81,84,81,88,84,84,84,84,88,85,84,84,84,82,84,84,84,88,85,85,88,88,85,88,88,88,85,85,85,7,5,2,2,6,29,17,17,138,153,152,150,144,125,112,24,132,119,20,109,34,120,127,13,2,11,2,7,6,6,11,17,46,33,16,116,1,2,130,126,3,45,130,114,106,151,148,127,125,126,125,128,31,109,18,36,116,151,183,153,132,46,13,115,125,136,33,47,130,141,150,120,8,119,133,17,1,6,2,2,25,1,2,12,1,6,37,132,47,120,118,106,132,141,109,29,106,20,113,140,124,120,130,65,90,89,90,86,90,91,91,92,98,98,98,98,103,98,98,103,160,156,160,160,160,156,160,156,161,160,156,160,160,156,160,161,156,160,160,98,103,98,98,98,96,92,91,90,91,91,91,91,102,91,92,96,91,102,91,96,102,92,101,98,98,92,101,96,96,91,96,96,98,98,98,102,96,92,92,92,92,98,98,160,169,169,173,171,173,173,173,171,171,171,169,173,179,173,173,171,173,179,198,202,179,179,198,202,179,179,173,169,160,160,156,159,160,156,160,162,160,160,169,171,179,194,203,198,204,201,200,204,204,204,204,204,204,200,204,200,179,198,198,177,171,168,169,169,168,162,160,162,161,162,162,162,162,162,169,169,162,162,162,162,160,162,162,162,160,160,160,160,103,98,103,98,72,
+81,81,84,84,81,81,85,81,81,81,81,81,82,84,82,84,82,84,84,84,82,84,84,82,82,84,82,84,81,84,84,84,84,84,88,85,84,84,84,88,88,88,95,51,2,2,5,2,13,22,109,150,153,150,128,125,139,153,122,132,132,31,18,110,132,15,5,2,2,11,2,7,14,123,126,116,37,11,106,2,6,106,144,22,30,116,110,34,145,144,132,127,125,151,151,24,106,33,45,141,149,142,153,122,15,21,138,153,142,132,114,147,114,132,138,130,138,110,6,2,2,9,2,2,2,6,5,2,2,130,130,44,130,117,47,47,123,33,33,136,153,124,149,30,65,86,90,86,84,88,90,91,90,91,91,87,97,96,98,98,98,103,98,159,103,159,160,161,160,160,160,98,103,160,161,161,160,161,156,160,156,98,103,98,92,96,98,101,92,92,91,92,91,101,92,102,92,91,92,92,92,91,91,92,92,92,92,91,91,92,91,91,90,79,92,91,92,92,87,92,91,90,91,92,92,87,98,98,159,97,160,161,168,162,160,168,162,162,156,169,173,162,169,169,171,173,194,202,194,179,179,194,162,167,156,156,98,98,98,160,156,98,98,97,159,156,173,194,202,179,198,199,198,200,202,200,200,200,200,200,200,199,199,202,194,169,171,162,162,162,160,156,162,156,160,156,162,156,160,162,162,160,169,160,156,160,160,160,161,160,156,161,156,103,98,156,98,98,98,72,
+81,81,81,56,84,81,81,81,81,85,80,81,85,84,81,82,81,81,82,82,84,84,84,81,88,84,82,81,84,84,84,84,84,88,84,84,84,88,85,88,85,88,90,84,1,5,2,2,13,34,123,152,150,145,152,126,126,153,142,114,51,11,18,33,18,2,2,5,6,2,10,6,106,124,126,24,34,8,31,11,2,47,116,15,30,110,15,47,138,137,114,126,183,183,125,46,34,33,36,144,137,128,154,145,15,11,133,136,124,126,141,148,183,116,151,136,140,149,164,75,11,2,2,6,1,6,2,2,2,47,109,106,119,46,114,116,114,13,141,137,140,43,87,82,91,85,90,84,84,86,90,91,85,90,90,90,91,92,96,92,103,98,103,98,159,156,160,156,161,160,98,160,103,160,156,160,160,161,160,161,156,103,103,97,96,92,102,92,96,91,91,91,92,101,101,92,96,91,91,92,91,91,91,91,91,92,91,91,90,86,92,91,91,90,90,91,90,91,90,89,91,90,91,91,91,92,92,92,97,101,98,98,98,156,98,98,159,160,98,156,160,160,156,162,162,160,171,179,173,169,177,169,162,160,98,98,97,92,98,98,103,98,98,98,156,162,169,194,179,198,202,179,198,198,202,179,199,203,203,196,198,179,198,179,177,169,162,162,162,160,162,160,160,160,156,160,160,160,162,156,162,160,156,160,160,156,160,160,160,156,160,156,98,98,98,98,101,101,92,71,
+81,81,81,81,56,81,81,81,81,85,83,81,81,85,81,81,85,84,81,82,82,81,82,84,81,84,81,84,81,84,84,84,84,84,84,84,84,88,88,81,88,88,89,100,5,2,2,5,21,120,126,150,144,145,141,35,144,153,145,125,110,17,24,32,6,6,1,2,11,6,7,11,22,122,124,7,12,29,23,11,2,36,109,8,16,22,18,110,138,128,142,145,149,153,19,34,43,22,29,130,153,143,153,110,111,151,8,130,144,133,153,153,151,137,37,117,45,67,62,38,9,2,5,25,5,11,11,2,2,47,124,120,126,111,46,142,140,17,120,132,183,131,90,90,85,85,85,82,85,89,90,90,85,90,85,91,91,92,92,98,103,98,103,160,160,160,156,98,103,98,103,103,98,98,98,101,98,103,98,160,98,98,102,98,96,91,92,92,91,92,92,91,92,102,92,101,91,91,91,91,91,95,92,91,91,90,91,91,91,89,86,90,86,95,90,90,89,90,85,90,91,89,90,82,91,91,91,91,92,92,98,98,101,96,101,92,98,98,98,98,96,98,98,160,156,160,168,162,171,171,171,168,160,98,96,92,92,96,96,98,93,98,98,160,160,161,162,177,173,173,179,198,179,202,179,202,202,179,202,179,202,179,171,171,168,168,160,160,160,160,156,160,160,156,160,161,160,156,160,156,160,160,160,160,156,160,160,159,103,98,103,98,98,93,102,92,96,92,92,62,
+81,81,81,81,81,81,56,81,81,83,85,81,81,81,56,85,81,81,85,81,81,84,81,84,84,84,84,81,84,82,84,84,84,81,84,84,84,84,84,84,88,88,89,100,25,2,5,2,2,106,144,124,144,148,3,22,185,148,122,188,197,121,11,6,5,2,1,7,7,10,2,2,29,126,125,6,21,22,106,11,2,48,136,11,22,114,132,123,153,186,186,154,151,143,125,22,31,21,13,136,154,153,138,45,46,46,116,144,132,110,183,133,123,132,29,46,60,85,82,58,12,9,1,10,5,5,29,11,2,30,46,47,114,111,20,133,15,46,130,184,185,86,89,85,90,86,90,85,88,85,86,88,88,85,89,91,91,91,101,92,98,103,98,103,98,98,98,98,98,96,91,92,97,96,91,91,92,98,98,96,101,98,87,91,91,95,90,91,91,91,91,91,91,91,87,91,91,91,91,86,95,91,91,91,91,91,90,89,85,91,90,91,90,89,76,91,85,90,89,90,89,89,90,91,91,90,91,91,92,96,92,92,92,92,92,92,101,92,97,92,91,92,98,156,103,162,162,162,168,168,162,161,97,97,92,92,92,92,96,101,101,98,98,160,159,162,169,171,171,171,179,173,194,179,179,194,173,194,173,194,177,171,171,169,162,160,160,156,156,156,103,156,156,159,160,159,160,103,156,98,160,162,156,160,156,98,98,98,98,98,101,101,97,102,92,92,96,96,90,58,
+56,81,56,81,81,56,84,81,81,56,81,81,81,85,81,81,81,88,81,81,85,81,81,81,81,81,81,88,81,84,84,84,84,81,88,84,84,84,84,84,84,85,88,90,53,2,2,2,5,31,127,144,150,140,8,14,132,138,11,36,138,8,1,6,11,2,1,10,12,11,11,5,119,151,29,13,37,17,117,2,2,130,136,6,37,137,132,151,186,186,153,186,145,150,142,8,11,6,17,139,144,149,114,14,47,46,141,147,126,134,153,19,24,131,29,81,90,88,88,90,40,58,28,5,10,2,26,9,21,134,182,182,191,120,67,34,46,47,141,191,87,90,86,90,90,89,91,85,85,90,85,86,89,90,86,90,91,91,91,92,96,93,98,98,98,98,98,96,101,91,91,91,91,92,85,91,91,91,91,89,91,91,90,90,90,86,90,91,91,91,91,92,91,91,90,91,91,91,91,91,86,91,90,91,92,91,91,90,92,90,92,91,85,91,89,90,91,85,86,89,89,89,90,91,90,91,90,91,91,87,101,92,92,91,92,92,91,91,91,91,91,87,101,98,98,160,156,103,156,160,169,156,102,92,92,92,96,92,92,96,98,98,103,93,156,156,156,169,169,169,169,173,173,171,171,173,171,177,173,171,168,169,168,168,162,162,156,160,160,103,97,98,98,98,98,156,103,159,103,160,156,160,156,103,97,98,97,101,98,97,97,101,98,97,97,92,92,97,96,58,
+81,81,81,81,81,81,81,81,81,81,56,81,81,81,56,88,81,81,56,85,81,81,81,85,81,82,82,81,84,84,84,84,84,84,81,84,88,85,84,84,88,84,88,85,85,26,2,5,2,30,144,151,146,153,148,34,132,10,2,5,1,2,1,5,2,2,1,13,1,10,12,8,187,45,2,21,50,2,126,11,2,133,32,2,30,119,132,149,186,153,153,144,141,138,151,6,6,6,6,148,119,148,45,30,46,106,145,140,30,136,130,115,136,44,59,71,89,84,88,90,63,95,61,13,5,5,5,14,148,180,180,45,151,141,144,181,31,149,193,158,90,91,89,91,91,90,90,85,85,91,85,90,90,90,85,89,90,90,85,91,90,90,92,92,91,92,92,91,91,95,90,91,90,89,91,90,90,91,89,91,90,90,85,85,86,90,85,90,91,91,92,91,90,91,91,91,91,91,91,91,91,91,91,92,92,91,90,90,86,91,90,92,90,90,90,91,85,89,85,85,89,89,91,89,90,79,91,91,90,91,91,91,89,91,90,92,91,91,91,91,90,91,92,98,98,92,98,101,103,156,160,160,97,92,96,92,92,96,98,98,98,98,98,98,103,98,156,160,156,162,169,169,169,162,169,173,171,177,171,169,162,168,162,162,168,162,160,160,156,98,98,98,98,98,98,98,103,98,98,98,103,156,98,103,98,98,97,93,102,92,98,98,98,98,96,93,102,91,92,71,
+81,80,82,81,81,81,56,82,81,81,81,81,81,80,81,81,81,81,81,81,81,81,81,81,81,85,81,84,81,82,84,84,81,84,85,84,81,81,88,84,84,84,88,88,85,99,2,2,12,30,132,144,148,150,122,141,5,6,2,2,5,1,2,2,12,2,1,2,5,6,2,14,140,110,2,21,29,2,137,17,2,130,20,2,43,106,147,153,186,154,144,136,108,139,116,2,13,11,11,151,132,144,8,29,119,133,124,109,30,119,132,149,93,96,95,90,85,88,88,88,88,89,100,40,5,11,26,40,197,182,141,119,185,130,182,154,187,149,158,85,91,85,90,89,91,91,91,90,91,89,91,89,85,88,89,89,91,85,90,86,90,89,91,88,91,91,91,95,90,89,89,90,89,91,90,89,91,89,91,90,85,86,85,91,90,82,86,90,91,91,91,91,91,96,92,91,91,91,90,90,91,91,92,92,91,91,91,91,91,89,91,90,86,90,91,89,85,89,89,89,85,86,90,91,90,85,91,89,92,91,91,90,91,91,91,91,91,91,91,85,91,91,91,92,91,91,92,92,97,98,160,156,98,96,102,92,92,92,96,97,98,97,92,96,96,96,98,98,98,156,161,162,168,169,169,171,173,171,173,169,169,168,162,162,160,161,156,160,156,98,98,98,98,98,103,93,156,98,97,101,98,98,101,97,97,101,98,101,92,96,97,92,97,97,101,102,93,93,101,71,
+81,81,56,82,82,81,81,81,83,56,81,81,83,85,81,81,81,81,81,56,81,81,81,85,81,81,81,85,84,84,84,84,84,84,83,85,85,81,88,85,84,85,84,88,85,83,21,26,13,16,106,151,142,143,94,26,9,2,5,2,1,2,1,2,10,2,1,6,10,12,6,106,151,114,2,10,13,5,130,8,2,37,114,2,21,48,153,154,153,145,125,138,132,116,124,7,145,114,17,124,130,148,13,34,124,136,136,30,24,132,134,91,91,91,89,91,89,85,85,84,84,84,84,99,71,72,13,13,181,186,191,121,117,147,149,141,70,87,90,86,90,90,91,91,91,90,92,89,89,90,85,89,89,84,89,88,85,88,90,90,90,89,89,88,89,89,89,85,91,89,88,91,85,91,85,91,85,95,90,85,89,90,90,90,89,85,90,91,91,91,91,90,91,92,91,92,91,91,91,90,91,92,96,92,92,91,91,90,86,92,91,91,90,89,85,89,88,85,85,89,89,89,90,90,91,90,90,90,91,90,91,92,92,91,91,91,92,91,91,91,90,90,91,91,90,79,91,91,92,98,103,98,103,92,92,92,91,92,96,92,96,92,92,92,92,92,92,96,98,98,161,156,162,162,169,169,168,168,168,162,162,162,162,160,159,156,98,98,98,98,98,98,97,97,98,98,103,98,97,97,98,97,97,102,92,101,92,97,101,92,101,102,93,92,97,93,101,102,93,71,
+81,81,80,81,81,56,84,82,81,81,81,56,81,81,56,81,81,81,56,84,56,81,81,81,82,81,81,81,82,84,82,82,85,81,85,81,81,81,85,81,81,83,85,81,88,85,59,21,22,32,153,93,71,69,85,6,2,2,2,9,5,1,2,11,2,2,1,2,5,9,21,141,132,21,6,1,2,2,36,113,2,47,37,2,36,120,154,153,145,146,150,31,106,116,15,11,144,145,115,140,133,31,13,36,34,141,22,15,36,69,95,90,91,90,90,85,85,88,88,84,84,84,84,88,90,85,63,64,40,130,180,185,147,67,130,192,90,88,85,91,90,91,89,90,86,91,90,89,91,85,95,89,89,85,89,85,84,88,89,88,89,82,84,84,88,85,89,89,84,89,91,85,90,89,91,90,90,86,85,91,85,91,95,85,86,90,91,91,90,90,89,92,91,96,96,91,91,91,91,91,91,92,92,96,102,91,90,89,91,90,90,85,85,89,89,85,86,89,84,89,84,90,86,89,90,90,89,89,91,91,90,89,86,90,92,91,92,90,91,88,90,86,88,90,89,90,91,91,97,98,98,98,98,96,91,91,92,91,91,92,92,91,91,92,91,91,91,92,98,98,98,98,156,160,169,169,168,162,160,156,160,162,160,98,156,98,97,98,102,93,98,98,97,98,98,97,98,97,98,103,98,97,97,92,92,92,92,92,101,97,97,101,92,97,102,93,97,98,97,71,
+81,56,81,81,56,81,81,81,56,82,56,81,56,81,81,81,80,81,81,81,81,85,83,85,85,82,81,85,81,85,84,81,81,81,88,81,88,81,81,81,85,90,81,81,88,88,63,50,85,85,86,84,84,84,80,6,7,2,6,2,2,2,5,1,11,1,2,2,6,10,37,133,181,8,2,6,6,7,43,130,11,45,30,5,30,130,136,136,148,144,140,6,32,124,11,13,136,146,147,116,147,24,34,33,132,29,36,65,64,58,89,89,85,90,89,85,89,88,85,84,84,84,85,90,85,90,86,100,57,11,129,131,77,76,86,86,89,89,90,90,91,85,91,90,91,91,91,89,90,91,85,89,89,89,85,88,84,89,90,85,86,88,88,84,85,86,89,88,89,89,85,91,89,95,89,86,90,90,85,90,89,85,85,91,85,91,85,91,85,91,91,91,91,92,92,91,91,91,91,91,97,96,101,91,91,91,91,90,86,95,91,89,89,89,89,85,85,85,85,88,85,90,85,86,90,86,88,91,85,91,90,90,90,91,85,92,90,86,89,89,85,89,88,90,89,85,91,92,92,92,96,101,92,91,91,91,91,91,91,91,91,91,91,89,90,76,96,91,92,98,98,103,156,156,161,162,160,160,159,103,156,156,103,98,98,97,92,92,92,101,98,98,97,92,96,101,101,97,98,98,98,98,91,91,91,91,91,91,92,101,91,92,92,101,91,92,101,97,92,72,
+56,81,82,81,56,81,56,56,81,80,81,81,81,81,56,81,81,84,56,81,81,81,81,81,83,56,85,81,81,85,80,85,81,88,81,81,81,88,81,81,81,81,83,85,81,81,81,88,81,88,85,85,88,85,90,6,2,2,7,2,2,5,2,5,21,34,2,5,1,21,132,140,148,18,22,11,11,10,21,132,11,27,39,10,16,116,136,138,144,122,148,29,29,22,2,30,146,140,136,136,144,130,141,34,151,44,40,95,84,88,90,89,89,89,88,88,88,88,85,88,85,84,88,85,90,91,90,85,91,82,85,85,90,90,85,89,89,89,88,95,90,90,88,91,90,91,90,90,91,85,91,85,84,85,89,85,89,90,85,89,84,89,85,89,85,90,85,89,90,85,90,90,91,89,91,90,85,91,85,91,90,90,91,90,85,89,91,85,91,90,89,92,92,92,92,91,92,92,91,91,91,92,92,91,91,91,91,89,91,85,85,89,84,84,88,88,84,88,82,84,88,85,90,85,85,85,90,90,90,85,89,89,89,89,90,90,90,85,89,89,89,85,86,89,89,90,91,91,91,87,96,91,92,92,85,90,91,91,91,91,91,91,89,79,95,89,86,92,92,92,98,98,103,98,98,98,98,103,98,98,97,98,92,92,92,92,91,91,91,92,96,98,92,96,96,96,96,92,101,92,97,101,97,91,91,91,91,92,91,91,91,92,92,92,92,101,92,97,97,72,
+81,81,80,81,81,84,81,81,56,81,81,56,81,56,84,56,82,81,81,81,81,84,81,81,81,83,85,83,81,83,85,81,81,81,83,85,83,81,81,81,81,81,81,81,81,83,85,88,81,81,88,81,88,81,83,11,2,2,9,5,2,2,2,2,5,29,2,2,6,22,139,120,17,124,114,16,11,2,123,190,2,12,9,2,29,106,106,106,136,144,43,29,119,29,11,123,125,142,133,133,116,133,138,110,22,21,58,88,84,84,88,84,88,88,85,84,84,85,88,84,88,89,89,88,89,90,90,82,89,85,88,88,89,88,85,89,90,82,88,88,88,85,90,90,85,90,86,95,90,90,90,85,85,88,88,88,89,90,90,91,85,89,85,90,85,86,90,84,88,90,86,95,89,90,85,91,88,85,91,85,91,91,85,85,89,90,89,89,86,85,90,91,92,91,90,91,91,85,92,91,91,92,96,91,90,91,92,90,89,91,85,86,88,84,84,84,84,84,84,84,82,84,88,90,82,88,88,89,89,85,88,90,89,90,91,85,89,89,88,89,89,85,90,86,89,88,90,90,90,90,86,91,90,89,91,79,90,91,91,91,92,90,92,90,90,90,92,91,91,92,92,96,97,98,101,92,96,92,92,92,101,92,92,91,91,91,86,91,91,91,92,98,96,92,92,92,92,92,91,92,91,92,101,92,92,91,91,91,91,91,91,91,91,91,91,92,92,91,92,71,
+56,81,56,81,56,81,56,81,84,81,56,81,81,81,81,81,81,56,82,81,81,81,81,81,81,81,81,81,81,56,81,83,81,81,81,81,81,81,81,56,85,81,81,81,81,81,81,81,83,81,83,81,83,81,99,10,25,6,2,2,2,6,2,2,2,30,2,6,1,36,144,136,132,116,11,15,6,11,16,11,11,11,2,2,11,13,31,46,125,17,33,47,180,43,134,108,109,132,114,149,123,147,46,66,75,57,84,82,84,81,85,84,84,88,84,84,88,88,85,88,88,89,89,85,88,85,88,88,85,88,89,85,90,90,88,85,88,88,85,84,84,88,90,83,90,90,90,88,91,90,89,89,85,88,84,84,88,90,89,85,90,90,85,91,90,90,85,89,90,88,90,90,85,89,88,84,89,90,91,90,89,85,91,90,86,89,90,90,90,90,91,91,92,92,90,92,90,91,90,91,92,92,101,91,91,91,90,86,90,90,90,82,85,84,84,84,84,84,84,82,82,84,84,88,84,84,84,84,88,84,84,88,90,86,90,89,89,89,89,84,85,88,85,89,89,89,90,85,91,90,90,85,91,90,90,91,90,90,92,90,92,85,91,85,91,89,79,90,91,91,92,97,92,92,92,92,91,91,92,92,92,92,91,91,91,91,91,91,91,91,92,96,92,92,91,91,91,91,91,91,91,91,92,92,86,91,86,91,91,92,92,91,91,91,91,91,91,91,91,62,
+81,56,82,56,81,56,81,56,56,81,81,80,56,82,56,82,84,81,56,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,83,84,81,81,83,81,81,81,81,81,81,81,90,1,2,9,2,5,9,2,2,2,12,119,17,2,5,117,147,116,122,8,15,24,17,13,29,10,2,12,9,5,21,17,29,47,110,14,134,24,34,138,46,29,33,151,144,144,119,116,35,91,82,56,81,81,88,81,81,83,84,81,88,84,81,88,84,84,88,84,88,84,84,84,84,88,88,88,88,88,89,89,85,89,89,88,84,85,81,90,81,88,85,90,81,88,85,90,85,88,85,88,85,85,90,89,90,88,89,89,90,90,86,85,88,90,81,88,88,89,85,84,85,84,84,88,90,85,91,90,89,85,90,90,90,85,86,88,91,85,90,86,91,91,90,91,85,90,86,92,96,91,90,86,90,90,90,85,85,85,88,82,84,88,85,82,84,85,84,84,84,88,85,84,84,84,84,84,84,84,89,85,90,90,86,89,89,89,89,89,84,89,89,89,89,85,86,89,89,89,85,89,85,90,86,91,82,91,89,95,89,91,89,95,89,91,91,91,92,92,91,91,91,91,91,91,87,92,91,91,91,91,91,91,91,91,91,91,96,96,92,91,91,90,91,91,91,91,91,91,92,92,91,91,91,91,92,92,91,91,91,91,92,91,92,91,91,58,
+56,81,80,82,81,81,56,84,81,56,81,81,81,81,81,81,56,84,82,84,81,81,81,81,81,81,56,84,81,81,81,81,81,81,81,81,81,81,80,81,81,81,81,81,81,81,81,81,81,81,81,81,83,81,83,2,5,9,2,2,2,21,6,6,2,43,126,3,2,30,17,34,29,2,15,127,127,125,109,10,13,2,2,2,7,106,140,133,21,21,106,142,146,151,109,10,37,151,140,36,48,74,57,83,81,80,81,84,81,81,81,81,81,81,81,88,88,84,81,81,88,85,85,88,85,88,84,84,84,84,84,84,88,89,90,88,88,85,84,88,85,81,88,81,85,81,88,85,88,88,88,81,88,85,81,88,88,85,88,85,88,90,88,90,90,88,85,81,88,85,88,85,88,81,84,84,88,91,85,91,90,89,91,90,85,88,85,85,89,88,90,90,91,90,90,91,85,89,89,90,90,90,96,90,92,91,85,91,90,89,89,88,88,85,84,81,88,81,85,81,88,81,84,82,84,84,84,84,84,84,84,88,90,89,86,89,85,89,89,89,90,89,89,89,89,89,86,88,85,85,89,89,85,86,90,90,85,91,91,90,90,86,95,85,91,89,92,85,91,91,91,91,91,91,89,91,91,91,91,91,91,91,91,91,91,92,91,92,96,92,92,92,92,92,91,79,89,91,91,91,91,86,91,91,91,91,91,92,91,91,91,91,92,91,91,87,91,91,91,58,
+81,81,81,81,56,56,81,56,56,84,56,81,84,56,81,81,56,81,81,56,81,81,80,81,81,56,81,56,81,81,81,81,81,80,82,81,81,81,81,81,81,81,81,81,84,56,81,81,81,80,81,81,81,81,88,26,9,9,5,2,10,21,11,2,2,22,138,15,10,30,129,6,2,2,24,125,128,124,126,109,106,106,6,6,48,149,138,130,30,21,109,122,181,182,8,5,119,136,33,50,63,81,81,81,80,81,81,81,81,81,81,81,81,81,89,81,81,81,83,88,88,81,81,81,81,85,81,84,85,88,85,84,84,88,88,84,84,85,83,85,88,85,88,85,85,88,81,81,88,85,88,85,83,85,81,81,81,83,88,88,85,83,85,88,81,81,81,81,81,81,81,88,81,88,85,85,84,88,90,89,90,90,84,84,85,88,90,81,84,84,89,89,89,90,86,85,90,89,90,85,90,91,88,91,89,90,91,85,86,89,84,84,84,84,84,81,81,81,83,85,80,85,84,84,84,84,84,84,84,84,84,84,89,88,85,90,89,89,90,89,88,85,89,89,89,90,85,91,90,91,85,89,85,90,86,91,90,89,92,85,86,90,90,91,90,89,85,89,91,91,91,91,79,90,79,90,90,91,91,91,91,91,86,92,92,92,92,92,91,92,92,92,91,91,91,91,91,91,92,91,91,91,86,91,91,91,91,91,92,92,92,91,91,91,91,91,91,91,86,58,
+56,81,56,82,81,84,81,56,81,81,56,81,56,81,80,82,81,81,56,56,84,81,81,81,84,81,56,82,81,81,82,81,81,81,56,81,56,56,81,81,81,81,81,81,81,81,80,81,80,81,80,81,81,81,56,81,6,10,7,9,12,7,9,11,2,12,21,10,12,21,13,11,5,11,116,132,145,115,123,46,130,109,21,119,116,116,43,46,26,21,130,137,184,118,2,6,106,132,60,81,81,81,81,81,80,81,81,83,81,81,81,81,81,81,81,81,81,84,81,81,81,81,88,81,81,88,81,85,83,82,84,81,85,84,84,82,88,88,85,81,81,81,81,85,83,81,81,81,81,81,81,81,88,81,81,81,81,81,83,81,81,81,90,80,81,81,81,81,81,81,81,81,81,81,88,81,88,85,85,88,85,88,85,84,84,84,81,85,84,81,88,89,89,90,90,89,84,88,85,89,91,88,89,85,91,90,85,90,85,89,89,88,84,84,81,88,81,81,81,81,88,84,84,84,85,84,81,82,84,82,84,84,84,89,89,88,85,86,88,89,86,89,86,89,90,85,85,89,90,86,91,89,90,90,91,91,86,91,82,91,90,91,85,91,91,90,90,85,90,90,91,91,90,90,90,91,91,91,91,91,91,91,91,86,91,91,92,91,92,92,91,91,91,91,91,91,91,82,91,86,91,91,91,91,91,91,91,91,91,92,91,91,91,91,91,91,86,86,95,57,
+81,81,84,56,81,56,84,81,81,56,81,56,81,56,81,81,56,81,81,56,81,81,56,56,81,56,81,81,80,80,56,81,81,81,81,80,82,80,82,56,81,81,80,80,80,61,81,81,81,81,81,81,80,81,80,99,10,2,10,2,2,29,32,2,6,9,27,10,2,5,10,13,10,11,119,116,122,116,111,21,47,18,110,120,106,181,144,45,39,26,30,181,138,8,2,21,149,66,58,81,81,80,81,81,81,81,81,84,80,81,80,81,81,81,81,81,83,81,81,81,83,81,81,88,81,81,88,81,81,90,84,83,81,85,88,85,81,81,81,88,81,88,88,81,83,85,88,80,81,81,81,81,81,81,83,80,56,81,81,81,81,83,81,81,81,83,80,81,81,85,81,81,83,81,81,83,85,83,89,88,88,89,85,84,84,88,81,85,88,85,84,88,88,88,85,88,85,88,85,88,84,88,85,84,88,91,88,88,85,88,85,84,84,81,84,85,81,81,81,81,85,81,84,84,84,85,85,84,84,84,82,84,84,88,82,90,89,89,85,91,85,85,90,90,89,86,91,91,91,91,90,79,91,91,91,90,91,90,89,91,90,86,92,91,91,91,90,90,86,91,91,91,91,91,91,90,90,91,91,91,86,91,91,91,91,91,92,92,92,92,91,91,91,91,91,86,91,91,86,91,91,91,91,91,91,91,92,91,92,86,91,91,86,90,91,91,92,90,89,58,
+81,56,56,81,56,81,81,81,56,82,56,56,56,81,81,61,81,56,84,56,81,56,81,56,81,81,81,56,81,81,81,81,81,81,80,56,56,61,83,82,56,82,80,80,82,56,56,80,82,80,81,80,81,80,81,81,54,2,2,9,10,17,106,17,2,6,5,5,2,62,40,15,11,9,6,46,138,147,109,11,141,32,138,46,141,132,119,46,11,2,29,132,141,11,2,22,77,81,81,80,81,81,80,80,81,80,80,61,81,81,81,80,81,80,81,81,80,84,81,81,81,81,81,90,83,81,81,81,81,81,81,81,81,84,81,81,81,88,81,88,85,88,81,81,81,81,83,85,83,85,81,81,81,81,81,81,81,81,80,81,81,81,83,81,81,83,81,81,83,81,83,85,81,81,81,81,81,81,81,88,88,85,88,85,88,81,81,81,85,81,88,84,84,84,84,88,85,84,84,81,84,84,84,84,89,90,89,85,84,84,84,84,84,84,84,80,81,88,81,81,81,88,84,82,88,82,88,85,89,89,84,84,84,84,89,88,89,85,91,85,92,91,90,91,86,90,91,91,91,91,91,91,91,91,91,86,90,86,91,91,91,92,91,101,96,92,92,92,92,92,92,92,91,91,91,86,91,86,90,79,90,91,91,86,92,91,91,91,92,91,91,91,91,91,91,91,91,91,91,91,91,91,92,92,91,91,91,91,91,91,90,89,86,91,90,86,86,86,91,58,
+56,84,82,81,82,81,56,81,56,80,81,56,82,56,56,80,61,80,56,81,81,56,82,81,56,80,56,82,56,81,56,81,56,80,56,80,80,80,56,80,80,80,81,80,80,80,80,81,80,80,61,81,81,81,81,81,81,6,9,5,5,43,130,136,6,53,26,54,2,2,2,18,22,2,6,36,136,126,118,13,141,34,120,43,136,136,134,30,26,2,141,119,29,2,117,187,80,80,61,81,80,81,81,81,81,81,81,80,80,81,81,80,80,61,83,81,81,81,81,81,81,81,81,81,81,81,81,81,88,81,88,81,81,81,81,81,81,81,90,80,81,81,81,81,81,81,81,83,81,81,83,85,81,81,81,80,81,81,80,80,81,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,88,85,88,81,88,81,81,85,83,81,81,85,88,84,84,84,84,88,85,84,88,82,84,84,84,85,90,89,84,84,84,84,84,84,81,84,81,81,81,88,81,84,81,84,82,84,88,85,85,84,89,84,85,84,84,84,89,89,90,90,86,90,91,89,92,91,91,91,91,91,91,92,91,91,91,91,91,91,92,91,91,92,92,92,92,96,92,92,92,91,92,92,91,91,91,91,91,91,91,90,90,90,86,91,91,91,90,86,91,91,91,91,91,91,91,91,91,91,91,91,91,92,92,91,91,91,91,91,91,89,91,90,91,86,90,89,91,89,90,85,62,
+56,81,81,80,56,56,56,81,56,61,56,80,56,56,82,56,81,56,56,63,80,80,56,56,63,80,56,61,63,81,80,61,80,80,61,80,56,80,61,81,80,80,61,81,80,56,80,61,81,80,80,56,80,61,81,80,81,51,2,2,9,46,123,136,42,88,82,83,2,6,2,29,111,112,16,116,133,182,111,29,132,119,130,139,46,43,48,197,147,122,49,120,32,26,78,80,56,81,80,56,80,81,61,83,56,80,82,80,56,83,80,80,83,80,61,56,81,81,81,81,81,81,81,81,81,80,80,81,81,81,81,84,81,81,83,81,81,81,83,88,83,81,81,85,81,81,85,81,83,81,81,81,81,83,81,80,81,81,81,56,80,81,56,81,81,81,81,81,81,83,81,81,81,81,56,81,81,81,81,81,81,88,81,81,81,81,83,81,88,82,84,84,84,85,84,84,88,84,81,84,81,84,84,84,88,85,84,84,82,84,82,81,81,84,81,81,56,81,81,85,81,84,84,84,84,84,88,88,85,85,84,84,85,89,85,85,91,90,91,82,91,90,91,90,90,91,90,91,91,91,86,91,90,91,91,91,92,91,92,91,92,92,92,92,92,91,91,92,92,92,101,92,96,93,92,92,96,91,91,86,91,90,90,92,86,79,91,95,90,91,91,90,86,91,91,91,91,91,87,92,91,92,91,92,91,91,91,91,91,90,79,89,85,86,91,86,89,91,85,58,
+81,56,56,56,82,56,81,56,81,56,80,56,82,56,56,80,82,56,61,56,56,63,80,56,61,80,56,80,80,56,56,81,80,56,80,80,80,56,80,80,56,80,56,80,80,80,56,56,80,80,56,80,80,56,80,80,61,83,26,2,2,129,124,132,77,80,80,85,26,1,2,5,29,18,132,32,110,141,114,47,138,32,70,138,120,44,193,134,176,180,17,130,82,81,80,80,80,56,80,82,80,56,80,80,80,80,80,80,80,81,56,81,83,80,80,81,83,81,81,80,81,81,81,81,81,81,80,81,80,81,81,56,84,81,81,81,81,81,83,81,90,83,81,83,81,83,81,81,83,81,81,81,81,81,83,81,81,81,81,83,81,56,84,81,80,81,81,81,81,81,81,80,56,82,81,80,81,81,81,88,81,84,81,56,81,81,81,81,84,84,84,84,88,88,84,84,84,84,84,81,88,85,84,84,84,84,88,84,81,84,81,84,82,81,84,81,81,81,83,81,85,84,84,84,82,84,84,84,84,84,88,84,85,82,89,89,89,89,85,90,85,85,89,85,89,89,90,91,90,90,89,91,91,92,90,91,86,86,92,91,91,91,91,91,91,79,91,91,91,92,92,92,97,96,92,97,92,92,91,91,89,86,92,90,90,85,85,90,85,86,85,90,90,91,85,91,91,91,91,91,92,91,91,91,86,91,91,79,91,90,90,91,91,89,91,89,92,90,85,58,
+81,82,81,81,81,56,56,56,56,84,56,80,56,81,56,56,56,56,56,80,56,56,56,80,80,56,56,56,81,80,80,56,56,80,80,56,81,80,80,56,80,80,80,80,56,81,80,80,56,80,80,81,80,80,80,56,80,80,81,11,5,119,133,157,80,80,81,81,54,29,1,12,2,43,123,120,120,126,29,119,69,61,29,192,188,130,132,129,120,43,58,56,80,81,80,80,56,80,80,80,81,80,81,80,56,81,80,80,56,56,81,80,80,81,81,81,81,81,80,81,81,80,81,81,80,81,80,81,81,80,81,83,81,81,84,81,81,81,81,81,83,81,81,81,81,81,81,81,83,81,83,80,81,81,81,81,56,81,81,81,80,83,81,80,81,81,81,81,81,81,81,81,81,80,81,81,80,81,82,80,81,81,81,81,81,81,81,81,81,88,84,84,84,84,82,84,84,84,88,81,81,81,88,84,84,84,81,82,81,84,81,81,81,81,84,81,81,81,81,81,81,84,81,81,84,84,84,84,84,85,84,84,88,88,89,84,84,88,89,88,84,85,84,88,82,89,89,85,90,89,90,91,90,86,91,91,90,86,86,92,91,90,91,91,91,91,90,91,91,91,92,92,92,96,96,96,96,91,91,91,91,90,85,86,89,89,90,91,90,82,91,85,86,86,90,91,91,91,91,91,91,87,92,91,91,91,86,95,90,90,79,89,90,90,90,91,89,91,82,57,
+82,82,81,84,82,56,82,81,81,56,56,56,56,56,81,56,80,56,56,56,56,56,80,56,56,80,56,56,56,56,56,80,56,80,56,80,56,80,56,80,56,56,80,56,80,56,80,56,80,56,80,56,56,80,56,80,56,80,56,56,38,67,72,56,80,56,56,81,56,35,141,33,2,10,45,132,144,141,64,82,80,56,80,52,38,65,65,85,58,80,56,80,56,80,56,81,80,56,80,56,80,56,80,56,80,56,80,56,80,56,80,56,81,80,80,81,80,83,80,81,81,81,81,81,81,80,81,80,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,80,81,81,81,81,81,80,81,81,80,81,81,80,81,81,81,83,80,80,81,80,81,81,81,81,80,81,80,81,81,81,81,88,84,81,81,88,81,82,81,84,82,82,81,81,81,81,81,88,84,84,82,84,81,84,81,81,81,81,81,81,81,81,81,81,81,81,88,81,84,81,88,84,84,84,84,84,84,84,88,84,84,84,88,85,84,84,84,84,84,84,84,89,84,89,89,85,90,90,90,85,91,90,91,89,92,79,90,91,91,91,91,91,91,91,91,92,92,92,92,92,91,91,91,91,90,86,85,89,85,86,85,86,91,89,85,90,85,90,91,82,86,91,90,91,91,91,91,91,91,91,91,91,79,91,90,91,79,90,91,79,90,91,89,58,
+82,81,82,81,81,56,81,56,56,56,81,56,81,56,56,56,56,80,80,80,56,80,56,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,56,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,6,14,28,39,133,149,157,80,80,80,56,80,80,81,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,81,80,81,80,81,83,80,80,56,80,80,81,83,56,81,80,81,80,81,81,83,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,80,80,80,81,81,80,81,81,81,56,83,80,56,80,83,56,83,81,80,80,81,81,81,83,81,80,81,81,81,81,81,80,81,81,81,81,81,81,84,81,81,84,84,81,84,84,84,81,81,81,81,81,84,84,84,84,81,84,81,84,81,81,82,81,81,81,81,56,81,81,81,81,81,81,84,81,84,81,82,81,82,84,84,81,81,84,82,84,84,84,84,84,84,84,84,84,84,84,84,84,89,89,90,89,89,85,89,90,90,90,90,90,91,90,91,90,90,91,91,92,92,92,91,92,91,91,91,90,90,90,90,90,85,90,89,89,90,85,89,89,85,89,85,89,90,90,85,91,90,86,90,90,86,90,85,86,90,85,85,90,90,90,90,86,90,90,90,90,58,
+};
+
+MWIMAGEHDR image_rle8 = {
+ 320, 200, /* width, height*/
+ 1, 8, /* planes, bpp*/
+ 320, 1, /* pitch, bytesperpixel*/
+ 1, 256, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/convxpm.perl
===================================================================
--- bmp/convxpm.perl (nonexistent)
+++ bmp/convxpm.perl (revision 174)
@@ -0,0 +1,116 @@
+#!/bin/perl
+
+# This is a little perl script that converts XPM colors from
+# X colors to their true RGB format
+
+# Change this first, if you rgb.txt file lives somewhere else
+$RFILE="/usr/X11R6/lib/X11/rgb.txt";
+
+# First, Open up the RGBFILE, and make a hash table
+
+open (RGBIN, $RFILE) || die "Can not file $RGBFILE!";
+
+while()
+{
+ chop($_);
+
+ $firstchar = substr($_, 0, 1);
+
+ if ($firstchar ne "!")
+ {
+ ($r, $g, $b, $val) = /\s*(\d*)\s*(\d*)\s*(\d*)\s*(\w*)/;
+ $rgbvals{$val} = sprintf("#%2.2x%2.2x%2.2x", $r, $g, $b);
+ }
+}
+
+close(RGBIN);
+
+# Ok then, are we in batch mode or individual mode?
+
+if ($ARGV[0] eq "--batch")
+{
+ $srcdir = $ARGV[1];
+ $destdir = $ARGV[2];
+
+ # Batch mode, open up directory and fire
+ opendir(INDIR, $srcdir) || die "Directory $ARGV[1] doesn't exist";
+ my @xpms = readdir(INDIR);
+ closedir(INDIR);
+
+ foreach $xpmfile (@xpms)
+ {
+ if ($xpmfile =~ /\.xpm/g)
+ {
+ print "Converting $srcdir/$xpmfile to $destdir/$xpmfile...\n"
+ &convert_xpm("$srcdir/$xpmfile", "$destdir/$xpmfile");
+ }
+ }
+}
+else
+{
+ # regular mode
+ &convert_xpm($ARGV[0], $ARGV[1]);
+}
+
+
+sub convert_xpm
+{
+ # Open up the file to convert it
+
+ $filea = $_[0];
+ $fileb = $_[1];
+
+ print"Writing from $filea to $fileb...\n";
+
+ open(XPMIN, $filea) || die "Could not file $filea for processing...\n";
+ open(XPMOUT,">$fileb") || die "Could not open file $fileb for writing...\n";
+
+ $xpmline = ;
+
+ die "$fila is Not an XPM file!\n" if (!($xpmline =~ /\/\* XPM \*\/\n/));
+
+ $firstchar = substr($xpmline, 0, 1);
+
+ while($firstchar ne "\"")
+ {
+ print XPMOUT $xpmline;
+ $xpmline = ;
+ $firstchar = substr($xpmline, 0, 1);
+ }
+
+ # Now we have the numbers. Grab em!
+
+ ($width, $height, $colors, $chars) = ($xpmline =~ /\"(\d*) (\d*) (\d*) (\d*)\",\n/);
+
+ print XPMOUT $xpmline;
+
+ # Now read in the appropriate number of colors
+
+ for($i = 0; $i < $colors; $i++)
+ {
+ $xpmline = ;
+ chop($xpmline);
+
+ ($str, $val, $color) = ($xpmline =~ /\"(.+)\s+(\w*)\s+(.+)\"/);
+
+ $firstchar = substr($color, 0, 1);
+
+ if ($firstchar ne "#")
+ {
+ $color = $rgbvals{$color} if ($color ne "None");
+ }
+
+ print XPMOUT "\"$str $val $color\",\n";
+ }
+
+ while()
+ {
+ print XPMOUT $_;
+ }
+
+ close(XPMIN);
+ close(XPMOUT);
+}
+
+
+
Index: bmp/win/edit.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/win/edit.bmp
===================================================================
--- bmp/win/edit.bmp (nonexistent)
+++ bmp/win/edit.bmp (revision 174)
bmp/win/edit.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/win/button.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/win/button.bmp
===================================================================
--- bmp/win/button.bmp (nonexistent)
+++ bmp/win/button.bmp (revision 174)
bmp/win/button.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/win/chkbox.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/win/chkbox.bmp
===================================================================
--- bmp/win/chkbox.bmp (nonexistent)
+++ bmp/win/chkbox.bmp (revision 174)
bmp/win/chkbox.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/win/radio.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/win/radio.bmp
===================================================================
--- bmp/win/radio.bmp (nonexistent)
+++ bmp/win/radio.bmp (revision 174)
bmp/win/radio.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/win/radio2.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/win/radio2.bmp
===================================================================
--- bmp/win/radio2.bmp (nonexistent)
+++ bmp/win/radio2.bmp (revision 174)
bmp/win/radio2.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/win/chkbox_d.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/win/chkbox_d.bmp
===================================================================
--- bmp/win/chkbox_d.bmp (nonexistent)
+++ bmp/win/chkbox_d.bmp (revision 174)
bmp/win/chkbox_d.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/cs1.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/cs1.bmp
===================================================================
--- bmp/cs1.bmp (nonexistent)
+++ bmp/cs1.bmp (revision 174)
bmp/cs1.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/microwin.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/microwin.bmp
===================================================================
--- bmp/microwin.bmp (nonexistent)
+++ bmp/microwin.bmp (revision 174)
bmp/microwin.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/close4.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/close4.bmp
===================================================================
--- bmp/close4.bmp (nonexistent)
+++ bmp/close4.bmp (revision 174)
bmp/close4.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/cs1.c
===================================================================
--- bmp/cs1.c (nonexistent)
+++ bmp/cs1.c (revision 174)
@@ -0,0 +1,178 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_cs1 converted from cs1.bmp*/
+
+static MWPALENTRY palette[2] = {
+ RGBDEF( 0, 0, 0 ), /* pal 0*/
+ RGBDEF( 255, 255, 255 ), /* pal 1*/
+};
+
+static MWUCHAR imagebits[] = {
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x83,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0xfe,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xf8,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x0f,0xe0,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0x80,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0xfe,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xf8,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0xff,0x00,0x00,0x0f,0xf7,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xfc,0x00,0x00,0x3f,0xc1,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0x00,0x7f,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x01,0xfe,0x00,0x3f,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0xff,0x00,0x00,0x07,0xf8,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x07,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x07,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xf0,0x00,0x00,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xc0,0x00,0x03,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x1f,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfc,0x07,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xfc,0x00,0x00,0x3f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf0,0x03,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xf0,0x00,0x00,0x7f,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xc0,0x01,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xc0,0x00,0x01,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x00,0x00,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0x00,0x00,0x07,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfc,0x00,0x00,0x3f,0xff,0xff,0x80,0x00,
+0xff,0xfc,0x00,0x00,0x1f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0x1f,0xff,0xff,0x80,0x00,
+0xff,0xf0,0x00,0x00,0x7f,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x00,0x0f,0xff,0xff,0x80,0x00,
+0xff,0xc0,0x00,0x01,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x00,0x00,0x00,0x07,0xff,0xff,0x80,0x00,
+0xff,0x00,0x00,0x07,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfc,0x00,0x00,0x00,0x03,0xff,0xff,0x80,0x00,
+0xf8,0x00,0x00,0x1f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x01,0xff,0xff,0x80,0x00,
+0xfe,0x00,0x00,0x7f,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0xff,0xff,0x80,0x00,
+0xff,0x80,0x01,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x7f,0xff,0x80,0x00,
+0xff,0xc0,0x07,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0x80,0x00,
+0xff,0xf0,0x1f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0x80,0x00,
+0xff,0xf8,0x7f,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0x80,0x00,
+0xff,0xfd,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0x80,0x00,
+0xff,0xff,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0x80,0x00,
+0xff,0xff,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0x80,0x00,
+0xff,0xff,0xe0,0x00,0x07,0xf8,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x00,
+0xff,0xff,0xf8,0x00,0x1f,0xe0,0x00,0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x00,
+0xff,0xf9,0xfe,0x00,0x7f,0xc0,0x00,0x03,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x80,0x00,
+0xff,0xf0,0xff,0x01,0xff,0x00,0x00,0x0f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x80,0x00,
+0xff,0xe0,0x3f,0xe3,0xfc,0x00,0x00,0x3f,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0x80,0x00,
+0xff,0xe0,0x0f,0xcf,0xf0,0x00,0x00,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x80,0x00,
+0xff,0xc0,0x07,0xff,0xc0,0x00,0x01,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x80,0x00,
+0xff,0x80,0x01,0xfe,0x00,0x00,0x07,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x80,0x00,
+0xff,0x00,0x00,0xff,0x00,0x00,0x1f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x80,0x00,
+0xff,0x00,0x00,0x3f,0xc0,0x00,0x7f,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x80,0x00,
+0xfe,0x00,0x00,0x1f,0xe0,0x01,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x80,0x00,
+0xfe,0x00,0x00,0x07,0xf8,0x07,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x80,0x00,
+0xfc,0x00,0x00,0x01,0xfe,0x1f,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,
+0xf8,0x00,0x00,0x00,0xfe,0x7f,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,
+0xf8,0x00,0x00,0x00,0x3f,0xff,0x00,0x00,0x1f,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
+0xf8,0x00,0x00,0x00,0x1f,0xfc,0x00,0x00,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
+0xf0,0x00,0x00,0x00,0x07,0xf8,0x00,0x03,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
+0xf0,0x00,0x00,0x00,0x03,0xfe,0x00,0x0f,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
+0xe0,0x00,0x00,0x00,0x00,0xff,0x00,0x1f,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0xe0,0x00,0x00,0x00,0x00,0x7f,0xc0,0x3f,0xff,0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0xe0,0x00,0x00,0x00,0x00,0x1f,0xf0,0x7f,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x0f,0xf8,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x03,0xfc,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xc0,0x00,0x00,0x00,0x00,0x03,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x3f,0xe0,0x00,0x00,0x00,0x00,0x07,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xff,0xff,0xfe,0x1f,0xf8,0x00,0x00,0x00,0x00,0x07,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xff,0xff,0xfc,0x07,0xfc,0x00,0x00,0x00,0x00,0x07,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xff,0xff,0xf8,0x01,0xff,0x00,0x00,0x00,0x00,0x0f,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xff,0xff,0xf0,0x00,0x7f,0xc0,0x00,0x00,0x00,0x0f,0x80,0x00,
+0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xff,0xff,0xe0,0x00,0x3f,0xe0,0x00,0x00,0x00,0x0f,0x80,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x80,0x00,0x3f,0xf8,0x00,0x00,0x00,0x1f,0x80,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xfc,0x00,0x00,0x7f,0xfc,0x00,0x00,0x00,0x1f,0x80,0x00,
+0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0xfe,0x00,0x00,0x00,0x1f,0x80,0x00,
+0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0xff,0x80,0x00,0x00,0x3f,0x80,0x00,
+0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8,0x7f,0xc0,0x00,0x00,0x7f,0x80,0x00,
+0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xe0,0x1f,0xf0,0x00,0x00,0x7f,0x80,0x00,
+0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x0f,0xf8,0x00,0x00,0xff,0x80,0x00,
+0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0x00,0x03,0xfe,0x00,0x00,0xff,0x80,0x00,
+0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0xff,0x80,0x01,0xff,0x80,0x00,
+0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xe0,0x00,0x01,0xff,0xc0,0x03,0xff,0x80,0x00,
+0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x00,0x03,0xff,0xf0,0x03,0xff,0x80,0x00,
+0xfc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0x00,0x00,0x0f,0xff,0xf8,0x07,0xff,0x80,0x00,
+0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0x3f,0xc3,0xfe,0x0f,0xff,0x80,0x00,
+0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f,0xe0,0x00,0x00,0xff,0x01,0xff,0x1f,0xff,0x80,0x00,
+0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xff,0x80,0x00,0x03,0xfc,0x00,0x7f,0x9f,0xff,0x80,0x00,
+0xff,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x1f,0xff,0xff,0x80,0x00,
+0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x0f,0xff,0xff,0x80,0x00,
+0xff,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0xe0,0x00,0x00,0xff,0x00,0x00,0x07,0xff,0xff,0x80,0x00,
+0xff,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x80,0x00,0x03,0xfc,0x00,0x00,0x1f,0xff,0xff,0x80,0x00,
+0xff,0xf0,0x00,0x00,0x00,0x00,0x00,0x03,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0xff,0xff,0x80,0x00,
+0xff,0xf8,0x00,0x00,0x00,0x00,0x00,0x0f,0xfc,0x00,0x00,0x3f,0xc0,0x00,0x01,0xfe,0x3f,0xff,0x80,0x00,
+0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0x3f,0xf0,0x00,0x00,0xff,0x00,0x00,0x07,0xf8,0x0f,0xff,0x80,0x00,
+0xff,0xfc,0x00,0x00,0x00,0x00,0x00,0xff,0xc0,0x00,0x03,0xfe,0x00,0x00,0x1f,0xe0,0x03,0xff,0x80,0x00,
+0xff,0xfe,0x00,0x00,0x00,0x00,0x03,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x7f,0x80,0x01,0xff,0x80,0x00,
+0xff,0xff,0x00,0x00,0x00,0x00,0x0f,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x01,0xfe,0x00,0x00,0x7f,0x80,0x00,
+0xff,0xff,0x80,0x00,0x00,0x00,0x3f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x07,0xf8,0x00,0x00,0x7f,0x80,0x00,
+0xff,0xff,0xe0,0x00,0x00,0x00,0xff,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0x80,0x00,
+0xff,0xff,0xe0,0x00,0x00,0x03,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0x80,0x00,0x03,0xff,0x80,0x00,
+0xff,0xff,0xf0,0x00,0x00,0x0f,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xfe,0x00,0x00,0x0f,0xff,0x80,0x00,
+0xff,0xff,0xfc,0x00,0x00,0x3f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xf8,0x00,0x00,0x3f,0xff,0x80,0x00,
+0xff,0xff,0xfe,0x00,0x00,0xff,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0x00,0x03,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0x80,0x00,0x03,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0x80,0x0f,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xfe,0x00,0x00,0x0f,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xc0,0x3f,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xf8,0x00,0x00,0x3f,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xf0,0x7f,0xc0,0x00,0x01,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xf9,0xff,0x00,0x00,0x07,0xf8,0x00,0x00,0x3f,0x80,0x00,0x03,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x1f,0xe0,0x00,0x00,0xfe,0x00,0x00,0x0f,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xf0,0x00,0x00,0x7f,0x80,0x00,0x03,0xf8,0x00,0x00,0x3f,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0x80,0x00,0x01,0xfe,0x00,0x00,0x0f,0xe0,0x00,0x00,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xc0,0x00,0x07,0xf8,0x00,0x00,0x3f,0x80,0x00,0x03,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xf0,0x00,0x1f,0xe0,0x00,0x00,0xff,0x00,0x00,0x0f,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xfc,0x00,0x7f,0x80,0x00,0x03,0xfc,0x00,0x00,0x3f,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xfe,0x01,0xfe,0x00,0x00,0x0f,0xf0,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0x87,0xf8,0x00,0x00,0x3f,0xc0,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xdf,0xe0,0x00,0x00,0xff,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0x03,0xfc,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x0f,0xf0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x00,0x3f,0xc0,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,0xff,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0x03,0xfc,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x0f,0xf0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x3f,0xc0,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0x00,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0x00,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe0,0x00,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x00,0x07,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0x00,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc1,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x80,0x00,
+};
+
+MWIMAGEHDR image_cs1 = {
+ 145, 156, /* width, height*/
+ 1, 1, /* planes, bpp*/
+ 20, 1, /* pitch, bytesperpixel*/
+ 1, 2, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/micro2.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/micro2.bmp
===================================================================
--- bmp/micro2.bmp (nonexistent)
+++ bmp/micro2.bmp (revision 174)
bmp/micro2.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: bmp/microwin.c
===================================================================
--- bmp/microwin.c (nonexistent)
+++ bmp/microwin.c (revision 174)
@@ -0,0 +1,407 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_microwin converted from microwin.bmp*/
+
+static MWPALENTRY palette[16] = {
+ RGBDEF( 0, 0, 0 ), /* pal 0*/
+ RGBDEF( 0, 0, 0 ), /* pal 1*/
+ RGBDEF( 0, 0, 0 ), /* pal 2*/
+ RGBDEF( 0, 0, 0 ), /* pal 3*/
+ RGBDEF( 0, 0, 0 ), /* pal 4*/
+ RGBDEF( 0, 0, 0 ), /* pal 5*/
+ RGBDEF( 0, 0, 0 ), /* pal 6*/
+ RGBDEF( 0, 0, 0 ), /* pal 7*/
+ RGBDEF( 0, 0, 0 ), /* pal 8*/
+ RGBDEF( 0, 128, 0 ), /* pal 9*/
+ RGBDEF( 63, 135, 163 ), /* pal 10*/
+ RGBDEF( 0, 0, 255 ), /* pal 11*/
+ RGBDEF( 255, 0, 0 ), /* pal 12*/
+ RGBDEF( 61, 160, 199 ), /* pal 13*/
+ RGBDEF( 119, 190, 217 ), /* pal 14*/
+ RGBDEF( 255, 255, 0 ), /* pal 15*/
+};
+
+static MWUCHAR imagebits[] = {
+0xea,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,
+0xee,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,
+0xee,0xea,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x8f,0x9f,0x9f,0xf9,0xf9,0xf9,0xf8,0x88,0x88,0x88,0x88,0xff,0x9f,0xff,0xf9,0xf9,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0xf9,0xff,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xf9,0xfc,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xf9,0xff,0xf9,0xf9,0xfc,0xff,0xf9,0xff,0x9f,0x9f,0xf9,0xff,0x9c,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xff,0x9f,0xf9,0xff,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xcf,0x9f,0xf9,0xff,0x9f,0x9f,0x9f,0x9f,0xcf,0x9f,0xcf,0xf9,0xff,0x9f,0xff,0xcf,0x9f,0xff,0xff,0x9f,0xff,0x9f,0x9f,0x9f,0xf9,0xf9,0xfc,0xf9,0xff,0x9f,0xf9,0xff,0xff,0xcf,0x9f,0x9f,0x8f,0x9f,0xff,0x9f,0x9f,0xf9,0x88,0x88,0x88,0x88,0x88,0xf9,0xff,0xf9,0xff,0x9f,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0xcf,0x9f,0xff,0x98,0x8f,0xff,0x88,0x9f,0xf8,0x88,0x8f,0x9f,0xff,0x98,0x88,0x88,0x88,0x8f,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xff,0xf8,0xc8,0x8f,0xff,0xff,0x88,0xff,0xff,0xf9,0x88,0xff,0xff,0x88,0xff,0x8f,0x8c,0x88,0xff,0xff,0xf8,0x88,0x8f,0xff,0x98,0x88,0x8f,0xf8,0x8f,0xff,0xff,0x8f,0x9f,0xff,0xff,0xff,0x88,0xf8,0xff,0xff,0xf8,0x88,0x8f,0xff,0x98,0x88,0xff,0xff,0xff,0xf8,0xff,0xff,0xf8,0x8f,0xff,0xf8,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf9,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xf8,0x8f,0xff,0x88,0xff,0xff,0x88,0x8f,0x88,0xff,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x88,0xfc,0x8f,0xff,0xf8,0x8f,0xf8,0xff,0xff,0x88,0xff,0xf8,0x88,0xff,0x88,0xf9,0xf8,0xff,0xff,0xf8,0x88,0x8f,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf8,0x8f,0xf8,0x8f,0xff,0xf8,0x8f,0xcf,0x8f,0xff,0xff,0x88,0x8f,0xff,0xf8,0x88,0xff,0xff,0x88,0xf8,0x8f,0xff,0xf8,0xff,0xff,0x88,0x9f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xff,0xff,0x88,0xff,0xff,0x88,0x8f,0x98,0x88,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0x98,0x89,0xff,0xf9,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0x88,0x88,0xf9,0x8f,0xff,0xff,0x89,0xff,0xff,0x88,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0xff,0xff,0xf9,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0xf8,0x88,0xff,0x88,0x8f,0xf8,0xff,0xf8,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xff,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf9,0xf8,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xff,0xf9,0x88,0x9f,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0x9f,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0x9f,0xf8,0xff,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xff,0xf8,0x88,0x89,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0x88,0xff,0xff,0xf9,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xf9,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x89,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xf9,0x88,0x8f,0x9f,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0x8f,0xff,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0x98,0x88,0x8f,0xf8,0x88,0x9f,0xff,0x88,0x88,0xff,0xff,0x88,0x88,0x88,0x8f,0xff,0xff,0x88,0xff,0xff,0xff,0x88,0x9f,0x88,0xff,0xff,0x88,0x8f,0xff,0xf9,0xff,0x88,0xff,0xff,0xff,0xff,0xf9,0x88,0x9f,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf8,0xf8,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xf8,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf9,0x88,0x88,0xf8,0xf9,0x88,0x88,0x88,0xff,0xff,0xf9,0x88,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xfc,0xff,0x88,0x9f,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xf9,0x88,0x8f,0xf8,0xf8,0x88,0x8f,0x9f,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0x9f,0xff,0xf8,0x88,0xff,0x9f,0xff,0x88,0x8f,0x98,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0x98,0x88,0xff,0xff,0xff,0xf8,0x89,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0xff,0xf8,0xf9,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0x9f,0xff,0x88,0xff,0xff,0xff,0x98,0xff,0x88,0xff,0xcf,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf9,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xf8,0xff,0x88,0x8f,0xf8,0x88,0xff,0xf8,0x88,0x8f,0xf8,0xff,0x88,0x8f,0xff,0x8f,0xf8,0xff,0x88,0x9f,0x88,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xf8,0xff,0x88,0xff,0xf9,0xf8,0x88,0xff,0xf8,0x88,0xff,0x88,0x8f,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xf8,0x8f,0xf8,0x88,0x8f,0xf8,0x8f,0xff,0x88,0x8f,0x88,0xff,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xf8,0x8f,0x98,0xff,0xff,0x88,0x88,0xff,0x88,0xff,0xf8,0x8f,0xff,0x8f,0xf8,0x8f,0x88,0xff,0x88,0xf8,0x88,0xf8,0x88,0xff,0xff,0x88,0x8f,0xff,0x88,0xff,0xf8,0x8f,0xf9,0x8f,0xf8,0xff,0x88,0xf8,0x8f,0xf8,0x88,0xff,0xff,0x88,0xf8,0x8f,0xff,0xf8,0x88,0x8f,0xff,0x8f,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xed,0xdd,0xdd,0xdd,0xde,0xee,0xdd,0xee,0xee,0xdd,0xde,0xde,0xee,0xdd,0xee,0xee,0xdd,0xde,0xee,0xed,0xdd,0xee,0xee,0xde,0xee,0xed,0xdd,0xdd,0xdd,0xee,0xee,0xdd,0xdd,0xee,0xdd,0xdd,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xe0,0x00,0x0d,0xdd,0x0e,0x00,0x0d,0xe0,0x00,0x0d,0xdd,0x00,0x00,0xee,0xd0,0x00,0x0d,0x00,0x00,0xdd,0xdd,0xdd,0xd0,0x00,0x0e,0xed,0xd0,0x0e,0xdd,0xd0,0x00,0x0d,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0xd0,0x00,0x00,0xde,0x00,0xed,0xdd,0x00,0xdd,0xd0,0xed,0x00,0xed,0xd0,0x0d,0xd0,0x0e,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0x00,0xdd,0x00,0xed,0xd0,0x0d,0xdd,0x00,0x0d,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xde,0xdd,0xdd,0x00,0x0d,0xdd,0x0d,0x00,0xed,0xdd,0x0d,0xdd,0xe0,0xed,0x00,0xed,0x00,0xed,0xdd,0x00,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0x0e,0xdd,0xd0,0xee,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0e,0x0e,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0xe0,0x00,0xdd,0x00,0xed,0x00,0xed,0xdd,0x00,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0d,0x0d,0xed,0xdd,0x00,0xee,0xee,0xee,0x00,0xed,0xdd,0xd0,0x00,0x0d,0xdd,0x00,0xed,0x00,0xed,0xdd,0x00,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0x00,0xee,0xd0,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0xed,0xdd,0x00,0x00,0x00,0x0e,0x00,0xed,0xdd,0x00,0x0d,0xdd,0xed,0x00,0xed,0x00,0xed,0xdd,0x00,0xed,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xd0,0x0e,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xdd,0xd0,0xed,0xdd,0x00,0xee,0xd0,0x0d,0x00,0xee,0xde,0x0e,0xdd,0xd0,0xed,0x00,0xed,0x00,0xee,0xdd,0x00,0xdd,0x00,0xee,0xd0,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0xde,0xdd,0xd0,0x0e,0xe0,0xd0,0x00,0x0d,0x0e,0x0d,0xee,0x00,0xe0,0x00,0xed,0xd0,0x0e,0xe0,0x0d,0xd0,0x00,0x0d,0xe0,0x0d,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xd0,0x0d,0x0d,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0d,0xdd,0xdd,0x0e,0xdd,0xdd,0x00,0x0d,0xdd,0x00,0xd0,0x0d,0xd0,0x00,0xd0,0xdd,0x00,0xdd,0xdd,0x00,0x00,0xdd,0xdd,0x00,0xd0,0x00,0xdd,0xdd,0xdd,0xd0,0x0e,0xdd,0xd0,0x0d,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0x0d,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xed,0xd0,0xed,0xdd,0xdd,0xdd,0x00,0xed,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0x00,0xee,0xdd,0xdd,0xe0,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xee,0x00,0xdd,0xdd,0xdd,0xdd,0x00,0xee,0xe0,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0x0d,0xdd,0xd0,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xee,0xee,0xee,0xed,0xdd,0xdd,0xde,0xdd,0xdd,0xde,0xee,0xee,0xee,0xee,0xde,0xee,0xee,0xee,0xdd,0xdd,0xdd,0xee,0xee,0xdd,0xdd,0xde,0xee,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xde,0xee,0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xed,0xdd,0xdd,0xdd,0xdd,0xed,0xdd,0xdd,0xdd,0xdd,0xee,0xee,0xee,0xed,0xee,0xee,0xee,0xed,0xde,0xee,0xee,0xed,0xdd,0xdd,0xee,0xee,0xdd,0xee,0xdd,0xdd,0xdd,0xdd,0xee,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xed,0xdd,0xdd,0xdd,0xde,0xdd,0xdd,0xdd,0xde,0xdd,0xee,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0x00,0xdd,0xdd,0xdd,0x0e,0xed,0xdd,0x00,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x0d,0xdd,0xdd,0xe0,0x00,0x0e,0xee,0xdd,0x00,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0xde,0x00,0x00,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xee,0xdd,0xdd,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0x00,0xd0,0x00,0x00,0x00,0xdd,0x00,0x00,0x00,0xdd,0xdd,0xe0,0x00,0x0e,0xe0,0x0e,0xee,0xdd,0xdd,0xe0,0x00,0x00,0x0e,0xed,0xdd,0xdd,0xdd,0xdd,0xd0,0xee,0xdd,0xdd,0xdd,0x0e,0xed,0xdd,0xdd,0x0e,0xe0,0x00,0x0e,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x00,0x0d,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0x00,0x00,0x0e,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xdd,0xd0,0x0e,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0x00,0x00,0xd0,0x00,0x0e,0xed,0xd0,0x00,0x0d,0xdd,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0d,0xdd,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xde,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x00,0x00,0x00,0x00,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0x00,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0x00,0x00,0x0d,0xdd,0x00,0x00,0x00,0xdd,0xd0,0x00,0xdd,0xdd,0xd0,0x0e,0xed,0xdd,0xdd,0xdd,0x00,0x0d,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x00,0xdd,0xdd,0x00,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xe0,0xed,0xdd,0xd0,0x00,0xde,0xdd,0xdd,0x0e,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0x00,0x0d,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x00,0x0d,0xdd,0xdd,0xd0,0xee,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x00,0xdd,0xdd,0xdd,0xd0,0x0e,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x0d,0xed,0xdd,0xd0,0x00,0x0d,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0x0d,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0x0d,0xdd,0xdd,0xdd,0x00,0xee,0xdd,0xdd,0xd0,0x00,0xd0,0xde,0xdd,0x00,0x0e,0x0e,0xdd,0xdd,0x0d,0xdd,0xde,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0x0d,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x0e,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xde,0xee,0xee,0xee,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xe0,0xed,0xdd,0xd0,0x00,0xe0,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x0e,0xdd,0x0e,0xdd,0x00,0x0d,0x0e,0xdd,0xdd,0xdd,0xde,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xd0,0x00,0xdd,0xd0,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0x0d,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0x00,0x00,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xd0,0xed,0xdd,0xd0,0x00,0xd0,0xed,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x0e,0xdd,0x0d,0xe0,0x00,0xed,0x0d,0xed,0xdd,0xdd,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0xde,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0x00,0x00,0x00,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xd0,0xde,0xdd,0x00,0x0e,0xd0,0xee,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x0d,0xdd,0xd0,0xe0,0x00,0xdd,0xd0,0xed,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0x0e,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xde,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0x00,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0x0e,0xdd,0x00,0x0e,0xd0,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0x0e,0xdd,0xd0,0xed,0xdd,0x00,0x00,0x0d,0xdd,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x0d,0xed,0xd0,0x00,0xed,0xdd,0xdd,0x00,0x0e,0xdd,0xd0,0x0e,0xed,0xdd,0xdd,0x00,0xed,0xdd,0x00,0x0e,0xed,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0x0e,0xd0,0x00,0x0d,0xdd,0x0e,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0xd0,0x00,0xed,0xdd,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0x00,0xed,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xd0,0xde,0xdd,0x00,0x0d,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xd0,0xed,0xd0,0x00,0xed,0xdd,0xde,0x00,0x0e,0xdd,0xdd,0x00,0xed,0xdd,0xd0,0x00,0xed,0xde,0x00,0x00,0xed,0xde,0xee,0xd0,0x0e,0xed,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0x0d,0xe0,0x00,0xed,0xdd,0x0e,0xdd,0xdd,0xdd,0xe0,0x00,0xed,0xdd,0xe0,0x00,0xee,0xed,0xd0,0x00,0xed,0xdd,0x00,0xee,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0x00,0xee,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0x00,0xed,0xdd,0xdd,0x0e,0xdd,0x00,0xed,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xd0,0xde,0xd0,0x00,0xed,0xdd,0x00,0x00,0x0e,0xdd,0xdd,0x00,0xee,0xdd,0xd0,0x00,0xdd,0x00,0x00,0x00,0xde,0x00,0x0e,0xdd,0x00,0xee,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xd0,0xe0,0x00,0xdd,0xdd,0x0d,0xed,0xdd,0xd0,0x00,0x00,0xed,0xd0,0x00,0x00,0x00,0xee,0x00,0x00,0xdd,0xdd,0xd0,0x0e,0xed,0xdd,0x00,0x00,0xed,0xdd,0xd0,0x0e,0xed,0xdd,0x00,0x0e,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0x0d,0xed,0x00,0xee,0xdd,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xdd,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0x0e,0xd0,0x00,0xed,0xdd,0xd0,0x00,0x0e,0xdd,0xdd,0xd0,0x0d,0xee,0x00,0x0d,0xdd,0xd0,0x00,0x0e,0x00,0x00,0x0d,0xdd,0xd0,0x0e,0xee,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x0e,0xdd,0xdd,0xd0,0x00,0x0e,0xdd,0xdd,0xd0,0xed,0xdd,0xdd,0x00,0x00,0xed,0xdd,0x00,0x00,0xe0,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0x00,0xee,0xe0,0x00,0x00,0xed,0xdd,0xdd,0x00,0xee,0xe0,0x00,0x0d,0xdd,0xd0,0x00,0x0e,0xed,0xdd,0xe0,0x00,0xee,0xdd,0xdd,0xe0,0xee,0xd0,0x0e,0xe0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0x0d,0xe0,0x00,0xed,0xdd,0xdd,0xd0,0x0d,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0xdd,0xdd,0xdd,0xd0,0x0d,0xd0,0x00,0xdd,0xdd,0xdd,0x00,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xdd,0xdd,0xd0,0x00,0x0e,0xdd,0xdd,0xd0,0xed,0xdd,0xdd,0xdd,0x00,0xdd,0xdd,0xdd,0x00,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0xdd,0x00,0x00,0x00,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0xd0,0x00,0x0d,0xdd,0x00,0x0d,0xd0,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xe0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0xd0,0x00,0x0d,0xdd,0xdd,0xd0,0xde,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xe0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x0e,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0x0d,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xee,0xdd,0xdd,0xde,0xee,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0e,0xed,0xdd,0xdd,0x00,0x0e,0xed,0xdd,0xdd,0xdd,0xd0,0xee,0xdd,0xdd,0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xe0,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x0e,0xee,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xde,0x00,0x00,0xee,0xdd,0xe0,0x00,0x00,0xee,0xed,0xdd,0xde,0x00,0x0e,0xed,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0x00,0x0d,0xdd,0x00,0x0e,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0x00,0x0d,0xd0,0x00,0x00,0x00,0x00,0xdd,0xdd,0x00,0x00,0x00,0xdd,0xd0,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x00,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0x0d,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xd0,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0x00,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xda,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x8f,0x9f,0x9f,0xf9,0xf9,0xf9,0xf8,0x88,0x88,0x88,0x88,0xff,0x9f,0xff,0xf9,0xf9,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0xf9,0xff,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xf9,0xfc,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xf9,0xff,0xf9,0xf9,0xfc,0xff,0xf9,0xff,0x9f,0x9f,0xf9,0xff,0x9c,0xf9,0xff,0x9f,0xf9,0xff,0x9f,0xff,0x9f,0xf9,0xff,0xff,0x9f,0xf9,0xff,0x9f,0x9f,0xcf,0x9f,0xf9,0xff,0x9f,0x9f,0x9f,0x9f,0xcf,0x9f,0xcf,0xf9,0xff,0x9f,0xff,0xcf,0x9f,0xff,0xff,0x9f,0xff,0x9f,0x9f,0x9f,0xf9,0xf9,0xfc,0xf9,0xff,0x9f,0xf9,0xff,0xff,0xcf,0x9f,0x9f,0x8f,0x9f,0xff,0x9f,0x9f,0xf9,0x88,0x88,0x88,0x88,0x88,0xf9,0xff,0xf9,0xff,0x9f,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf9,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xf8,0x8f,0xff,0x88,0xff,0xff,0x88,0x8f,0x88,0xff,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x88,0xfc,0x8f,0xff,0xf8,0x8f,0xf8,0xff,0xff,0x88,0xff,0xf8,0x88,0xff,0x88,0xf9,0xf8,0xff,0xff,0xf8,0x88,0x8f,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf8,0x8f,0xf8,0x8f,0xff,0xf8,0x8f,0xcf,0x8f,0xff,0xff,0x88,0x8f,0xff,0xf8,0x88,0xff,0xff,0x88,0xf8,0x8f,0xff,0xf8,0xff,0xff,0x88,0x9f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0x9f,0xff,0x88,0xff,0xff,0x88,0x8f,0xf8,0x8f,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0x98,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xff,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xfc,0xff,0x88,0x88,0xff,0x88,0xff,0xff,0x8f,0xff,0xff,0x88,0xff,0xff,0xfc,0x88,0xff,0x88,0xcf,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0x9f,0xff,0x9f,0xff,0xf9,0x88,0xff,0xff,0xf8,0x88,0xff,0xf8,0x88,0xf9,0x88,0x8f,0xf8,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0xf9,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xff,0xff,0x88,0xff,0xff,0x88,0x8f,0x98,0x88,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0x98,0x89,0xff,0xf9,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0x88,0x88,0xf9,0x8f,0xff,0xff,0x89,0xff,0xff,0x88,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0xff,0xff,0xf9,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0xf8,0x88,0xff,0x88,0x8f,0xf8,0xff,0xf8,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xff,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf9,0xf8,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xff,0xf9,0x88,0x9f,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0x9f,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0x9f,0xf8,0xff,0xf8,0x88,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xff,0xf8,0x88,0x89,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0x88,0xff,0xff,0xf9,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xf9,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x89,0xf8,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xf9,0x88,0x8f,0x9f,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0x8f,0xff,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0x98,0x88,0x8f,0xf8,0x88,0x9f,0xff,0x88,0x88,0xff,0xff,0x88,0x88,0x88,0x8f,0xff,0xff,0x88,0xff,0xff,0xff,0x88,0x9f,0x88,0xff,0xff,0x88,0x8f,0xff,0xf9,0xff,0x88,0xff,0xff,0xff,0xff,0xf9,0x88,0x9f,0xff,0xf8,0x88,0xff,0x88,0x88,0xff,0x88,0x8f,0xf8,0xf8,0x88,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0xf8,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xff,0xff,0x88,0x8f,0xff,0xff,0xf8,0x88,0x8f,0xf8,0x88,0xff,0xf9,0x88,0x88,0xf8,0xf9,0x88,0x88,0x88,0xff,0xff,0xf9,0x88,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xfc,0xff,0x88,0x9f,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xf8,0x88,0xff,0x88,0x88,0xf9,0x88,0x8f,0xf8,0xf8,0x88,0x8f,0x9f,0xff,0xff,0xff,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xff,0x88,0x88,0xff,0xff,0xff,0x88,0x8f,0xf8,0x88,0xff,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x88,0xff,0xff,0xff,0xf8,0x8f,0xff,0xf8,0xff,0x88,0x8f,0xf8,0x88,0xff,0xf8,0x88,0x8f,0xf8,0xff,0x88,0x8f,0xff,0x8f,0xf8,0xff,0x88,0x9f,0x88,0xff,0x88,0xff,0x88,0xff,0xff,0x88,0x8f,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xf8,0xff,0x88,0xff,0xf9,0xf8,0x88,0xff,0xf8,0x88,0xff,0x88,0x8f,0xff,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0x8f,0xf8,0x88,0x88,0xff,0x8f,0xff,0x88,0x8f,0xf8,0x8f,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xff,0xff,0xf8,0x8f,0xff,0xf8,0xff,0x88,0x8f,0xf8,0x8f,0xff,0xf8,0x88,0xff,0xf8,0xff,0x88,0x8f,0xff,0x8f,0xf8,0xf9,0x88,0xff,0x88,0xff,0x88,0xf9,0x88,0xff,0xff,0x88,0x8f,0xff,0xf9,0xff,0x88,0x8f,0xff,0x8f,0x98,0xf9,0x88,0xf9,0x8f,0xf8,0x88,0xff,0xff,0x88,0xf8,0x88,0xff,0xf8,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0xf8,0x88,0xff,0xff,0xff,0xf8,0x88,0xff,0xf8,0x8f,0xf8,0x88,0x8f,0xf8,0x8f,0xff,0x88,0x8f,0x88,0xff,0xff,0x88,0x88,0xf8,0x8f,0xff,0x88,0x8f,0x88,0x8f,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xff,0xf8,0x8f,0x98,0xff,0xff,0x88,0x88,0xff,0x88,0xff,0xf8,0x8f,0xff,0x8f,0xf8,0x8f,0x88,0xff,0x88,0xf8,0x88,0xf8,0x88,0xff,0xff,0x88,0x8f,0xff,0x88,0xff,0xf8,0x8f,0xf9,0x8f,0xf8,0xff,0x88,0xf8,0x8f,0xf8,0x88,0xff,0xff,0x88,0xf8,0x8f,0xff,0xf8,0x88,0x8f,0xff,0x8f,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0xff,0xff,0xff,0xff,0xff,0x88,0x88,0x88,0x88,0x88,0x8f,0xff,0xff,0xff,0xff,0xf8,0x8d,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xae,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xda,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xad,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xed,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xaa,0x00,
+0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xea,0x00,
+0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0x00,
+};
+
+MWIMAGEHDR image_microwin = {
+ 310, 371, /* width, height*/
+ 1, 4, /* planes, bpp*/
+ 156, 1, /* pitch, bytesperpixel*/
+ 1, 16, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/close4.c
===================================================================
--- bmp/close4.c (nonexistent)
+++ bmp/close4.c (revision 174)
@@ -0,0 +1,46 @@
+/* Generated by convbmp*/
+#include "device.h"
+
+/* MWIMAGEHDR image_close4 converted from close4.bmp*/
+
+static MWPALENTRY palette[16] = {
+ RGBDEF( 0, 0, 0 ), /* pal 0*/
+ RGBDEF( 191, 0, 0 ), /* pal 1*/
+ RGBDEF( 0, 191, 0 ), /* pal 2*/
+ RGBDEF( 191, 191, 0 ), /* pal 3*/
+ RGBDEF( 0, 0, 191 ), /* pal 4*/
+ RGBDEF( 191, 0, 191 ), /* pal 5*/
+ RGBDEF( 0, 191, 191 ), /* pal 6*/
+ RGBDEF( 192, 192, 192 ), /* pal 7*/
+ RGBDEF( 128, 128, 128 ), /* pal 8*/
+ RGBDEF( 255, 0, 0 ), /* pal 9*/
+ RGBDEF( 0, 255, 0 ), /* pal 10*/
+ RGBDEF( 255, 255, 0 ), /* pal 11*/
+ RGBDEF( 0, 0, 255 ), /* pal 12*/
+ RGBDEF( 255, 0, 255 ), /* pal 13*/
+ RGBDEF( 0, 255, 255 ), /* pal 14*/
+ RGBDEF( 255, 255, 255 ), /* pal 15*/
+};
+
+static MWUCHAR imagebits[] = {
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0xf8,0x88,0x88,0x88,0x88,0x80,0x00,0x00,
+0xf7,0x00,0x77,0x77,0x00,0x80,0x00,0x00,
+0xf7,0x70,0x07,0x70,0x07,0x80,0x00,0x00,
+0xf7,0x77,0x00,0x00,0x77,0x80,0x00,0x00,
+0xf7,0x77,0x70,0x07,0x77,0x80,0x00,0x00,
+0xf7,0x77,0x00,0x00,0x77,0x80,0x00,0x00,
+0xf7,0x70,0x07,0x70,0x07,0x80,0x00,0x00,
+0xf7,0x00,0x77,0x77,0x00,0x80,0x00,0x00,
+0xff,0xff,0xff,0xff,0xff,0xf0,0x00,0x00,
+};
+
+MWIMAGEHDR image_close4 = {
+ 12, 10, /* width, height*/
+ 1, 4, /* planes, bpp*/
+ 8, 1, /* pitch, bytesperpixel*/
+ 1, 16, /* compression, palsize*/
+ -1L, /* transcolor*/
+ palette,
+ imagebits,
+};
Index: bmp/under4.bmp
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: bmp/under4.bmp
===================================================================
--- bmp/under4.bmp (nonexistent)
+++ bmp/under4.bmp (revision 174)
bmp/under4.bmp
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.