Library for MI0283QT-2 LCD

Files at this revision

API Documentation at this revision

Comitter:
clemente
Date:
Wed May 23 06:25:31 2012 +0000
Commit message:

Changed in this revision

MI0283QTlib.cpp Show annotated file Show diff for this revision Revisions of this file
MI0283QTlib.h Show annotated file Show diff for this revision Revisions of this file
Terminal12x6.h Show annotated file Show diff for this revision Revisions of this file
Terminal24x12.h Show annotated file Show diff for this revision Revisions of this file
Touchlib.c Show annotated file Show diff for this revision Revisions of this file
Touchlib.h Show annotated file Show diff for this revision Revisions of this file
calibrate.c Show annotated file Show diff for this revision Revisions of this file
calibrate.h Show annotated file Show diff for this revision Revisions of this file
crocino.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 7ad454fed160 MI0283QTlib.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MI0283QTlib.cpp	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,1332 @@
+/* mbed Graphics LCD library. Library for MI0283QT-2 screen.
+
+    Copyright (c) 2011 NXP 3803 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+ 
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+*/
+
+#include "MI0283QTlib.h"
+#include "mbed.h"
+#include "Terminal24x12.h"
+#include "Terminal12x6.h"
+
+#ifdef _USE_FILE
+#include "SDFileSystem.h"
+#endif
+
+/* GLCD definition and functions. */
+#define LCD_MODE_262K        5          // 5=65K, 6=262K colors.
+
+/* */
+#define LCD_FAST_SPEED      40000000
+#define LCD_SLOW_SPEED       3000000
+//
+#define LCD_ID               (0)
+#define LCD_DATA             ((0x72)|(LCD_ID<<2))
+#define LCD_REGISTER         ((0x70)|(LCD_ID<<2))
+//
+#define LCD_WIDTH            (320)
+#define LCD_HEIGHT           (240)
+
+#if ( LCD_MODE_262K==6 )
+    #define RGB(r,g,b)           (((r&0xFC)<<16)|((g&0xFC)<<8)|((b&0xFC))) //6 red | 6 green | 6 blue
+#else
+    #define RGB(r,g,b)           (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //5 red | 6 green | 5 blue
+ #endif
+
+#define LCD_RST_DISABLE()    _rst = 1;
+#define LCD_RST_ENABLE()     _rst = 0;
+#define LCD_CS_DISABLE()     _cs = 1;
+#define LCD_CS_ENABLE()      _cs = 0;
+
+//MODDMA dma;
+
+GLCD::GLCD(  PinName mosi, PinName miso, PinName sclk, PinName cs, PinName rst, PinName bklgh) : _spi( mosi, miso, sclk), _cs( cs), _rst( rst), _bklgh( bklgh) {
+    // deselect the device
+    LCD_CS_DISABLE();
+    LCD_RST_ENABLE();
+    // defaults params
+    SPIClkSpeed=LCD_FAST_SPEED;
+    SPISlowClkSpeed=LCD_SLOW_SPEED;
+    SPIMode=3;
+    LCDBkLight=0.5;
+    //
+    BackGroundColor=LCD_BLACK;
+    //
+#if 0
+struct _FONTINFO {
+    unsigned char *pText;
+    unsigned int h_size;
+    unsigned int v_size;
+    unsigned int h_line;
+};
+#endif
+  
+    FontInfo[0].pText=(unsigned char*)&Text12x6[0];
+    FontInfo[0].h_size=6;
+    FontInfo[0].v_size=12;
+    FontInfo[0].h_line=1;
+    
+    FontInfo[1].pText=(unsigned char*)&Text24x12[0];
+    FontInfo[1].h_size=12;
+    FontInfo[1].v_size=24;
+    FontInfo[1].h_line=2;
+    
+    FontIdx=0;
+}
+
+void GLCD::backlighton( void)
+{
+    backlightset( 1);
+}
+
+void GLCD::backlightoff( void)
+{
+    backlightset( 0);
+}
+
+void GLCD::backlightset( double val)
+{
+    LCDBkLight=val;
+    _bklgh = LCDBkLight;    
+}
+
+void GLCD::lcd_init( void)
+{
+    _spi.format(8,SPIMode);
+    _spi.frequency( SPIClkSpeed);
+    _bklgh = LCDBkLight;
+    
+    lcd_reset();
+
+}
+
+void GLCD::lcd_init( unsigned int speedf)
+{
+    _spi.format(8,SPIMode);
+    _spi.frequency( speedf);
+    SPIClkSpeed=speedf;
+    _bklgh = LCDBkLight;
+    
+    lcd_reset();
+
+}
+
+void GLCD::lcd_init( unsigned int speedf, unsigned int speeds)
+{
+    _spi.format(8,SPIMode);
+    _spi.frequency( speedf);
+    SPIClkSpeed=speedf;
+    SPISlowClkSpeed=speeds;
+    _bklgh = LCDBkLight;
+    
+    lcd_reset();
+
+}
+
+void GLCD::lcd_setfontsmall(  void)
+{
+    FontIdx=0;
+}
+
+void GLCD::lcd_setfontbig(  void)
+{
+    FontIdx=1;
+}
+
+void GLCD::lcd_setbackgroundcolor( unsigned int color) {
+    BackGroundColor=color;
+}
+
+void GLCD::lcd_drawstr(char *__putstr, unsigned int xpos, unsigned int ypos, unsigned int color)
+{
+    char __ps;
+    unsigned int xp,yp;
+    
+    /* Set the fast SPI speed. */
+    _spi.frequency( SPIClkSpeed);
+    
+    xp=xpos; yp=ypos;
+    
+    while((__ps = *__putstr))
+    {
+        __putstr++;
+        if (__ps== 0) break;
+        lcd_drawch(__ps,xp,yp, color);
+        xp+=FontInfo[FontIdx].h_size;           // la dimensione del font per adesso è impostata manualmente.
+    }
+    /* Reset to slow speed. */
+    _spi.frequency( SPISlowClkSpeed);
+}
+    
+void GLCD::lcd_drawch( unsigned ch, unsigned int xpos, unsigned int ypos, unsigned int color)
+{
+    unsigned int H_Line, H_Size, V_Size, SrcInc;
+    unsigned char *pSrc;
+    unsigned int i, j, txtcolor;
+    
+    /* Set the fast SPI speed. */
+    _spi.frequency( SPIClkSpeed);
+    
+    // per adesso imposto i valori di queste grandezze manualmente
+    H_Line=FontInfo[FontIdx].h_line;
+    H_Size=FontInfo[FontIdx].h_size;
+    V_Size=FontInfo[FontIdx].v_size;
+    
+    //
+    lcd_area(xpos, ypos, (H_Size-1)+xpos, (V_Size-1)+ypos);
+    // printf("Programmo area: xpos=%d, ypos=%d, Hs=%d, Vs=%d\r\n", xpos,ypos,(H_Size-1)+xpos, (V_Size-1)+ypos);
+    // wait( 1);
+    //
+    pSrc=(unsigned char*)&FontInfo[FontIdx].pText[0]+(H_Line*V_Size*ch);
+    // printf("Carico il puntatore @ Text[%d]\r\n", (H_Line*V_Size*ch));
+    // wait( 1);
+
+    lcd_drawstart();
+  
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+#endif 
+
+    //
+    for ( i=0; i<V_Size; i++) {
+        SrcInc=H_Line;
+        for ( j=0; j<H_Size; j++) {
+            txtcolor=(*pSrc & (1UL<<(j&0x07)))?color:BackGroundColor;
+#if (LCD_MODE_262K==6 )    
+            _spi.write( (txtcolor&0x00FC0000)>>18 );
+            _spi.write( (txtcolor&0x0000FC00)>>10 );
+            _spi.write( (txtcolor&0x000000FC)>>2);
+#else  
+            lcd_draw( txtcolor);
+#endif            //
+            if ((j&0x07) == 7) {
+                ++pSrc;
+                --SrcInc;
+            }
+        }
+        pSrc += SrcInc;
+    }
+    //
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+#endif   
+    lcd_drawstop();
+   /* Reset to the slow SPI speed. */
+    _spi.frequency( SPISlowClkSpeed);
+}
+
+void GLCD::lcd_draw(unsigned int color)
+{
+  _spi.write(color>>8);
+  _spi.write(color);
+
+  return;
+}
+
+
+void GLCD::lcd_drawstop(void)
+{
+  LCD_CS_DISABLE();
+
+  return;
+}
+
+
+void GLCD::lcd_drawstart(void)
+{
+  LCD_CS_ENABLE();
+  _spi.write(LCD_REGISTER);
+  _spi.write(0x22);
+  LCD_CS_DISABLE();
+
+  LCD_CS_ENABLE();
+  _spi.write(LCD_DATA);
+
+  return;
+}
+
+inline void GLCD::lcd_cmd(unsigned int reg, unsigned int param)
+{
+  LCD_CS_ENABLE();
+  _spi.write( LCD_REGISTER);
+  _spi.write( reg);
+  LCD_CS_DISABLE();
+
+  LCD_CS_ENABLE();
+  _spi.write( LCD_DATA);
+  _spi.write( param);
+  LCD_CS_DISABLE();
+
+  return;
+}
+
+
+void GLCD::lcd_data(unsigned int c)
+{
+  LCD_CS_ENABLE();
+  _spi.write(LCD_DATA);
+  _spi.write(c>>8);
+  _spi.write(c);
+  LCD_CS_DISABLE();
+
+  return;
+}
+
+void GLCD::lcd_area(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1)
+{
+  lcd_cmd(0x03, (x0>>0)); //set x0
+  lcd_cmd(0x02, (x0>>8)); //set x0
+  lcd_cmd(0x05, (x1>>0)); //set x1
+  lcd_cmd(0x04, (x1>>8)); //set x1
+  lcd_cmd(0x07, (y0>>0)); //set y0
+  lcd_cmd(0x06, (y0>>8)); //set y0
+  lcd_cmd(0x09, (y1>>0)); //set y1
+  lcd_cmd(0x08, (y1>>8)); //set y1
+
+  return;
+}
+
+void GLCD::lcd_setverticalarea( unsigned int topf, unsigned int height, unsigned int butf)
+{
+    if ( (topf+height+butf) > 320)
+        return;
+        
+    lcd_cmd( 0x0F, (topf>>0));
+    lcd_cmd( 0x0E, (topf>>8));
+    lcd_cmd( 0x11, (height>>0));
+    lcd_cmd( 0x10, (height>>8));
+    lcd_cmd( 0x13, (butf>>0));
+    lcd_cmd( 0x12, (butf>>8));
+}
+
+void GLCD::lcd_scrollstartadd( unsigned int ssa)
+{
+    lcd_cmd( 0x15, (ssa>>0));
+    lcd_cmd( 0x14, (ssa>>8));
+}
+
+void GLCD::lcd_scrollstart( void)
+{
+    lcd_cmd( 0x01, 0x0008);
+}
+
+void GLCD::lcd_scrollstop( void)
+{
+    lcd_cmd( 0x01, 0x0000);
+}
+
+unsigned int GLCD::lcd_RGB( unsigned int color)
+{
+
+     return ( RGB( (( color&0x00FF0000)>>16), ( ( color&0x0000FF00)>>8), ( color&0x000000FF)) );
+
+}
+
+unsigned int GLCD::lcd_RGB( unsigned int r, unsigned int g, unsigned int b)
+{
+    return ( RGB( r, g, b));
+}
+
+
+void GLCD::lcd_clear(unsigned int color)
+{
+  unsigned int i;
+
+  /* Set the fast SPI speed. */
+  _spi.frequency( SPIClkSpeed);
+  
+  lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1));
+
+  lcd_drawstart();
+  
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+    _spi.frequency( SPIClkSpeed);
+#endif 
+  
+  for(i=(LCD_WIDTH*LCD_HEIGHT); i!=0; i--)
+  {
+#if (LCD_MODE_262K==6 )    
+    _spi.write( (color&0x00FC0000)>>18 );
+    _spi.write( (color&0x0000FC00)>>10 );
+    _spi.write( (color&0x000000FC)>>2);
+#else  
+    lcd_draw( color);
+#endif    
+  }
+    //   
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+    _spi.frequency( SPIClkSpeed);
+#endif   
+  lcd_drawstop();
+
+  /* Reset to the slow SPI speed. */
+  _spi.frequency( SPISlowClkSpeed);
+  return;
+}
+
+void GLCD::lcd_clear(unsigned int x0, unsigned int y0, unsigned int w, unsigned int h, unsigned int color)
+{
+  unsigned int i;
+
+  /* Set the fast SPI speed. */
+  _spi.frequency( SPIClkSpeed);
+  
+  lcd_area(x0, y0, (w-1)+x0, (h-1)+y0);
+
+  lcd_drawstart();
+  
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+    _spi.frequency( SPIClkSpeed);
+#endif 
+  
+  for(i=(w*h); i!=0; i--)
+  {
+#if (LCD_MODE_262K==6 )    
+    _spi.write( (color&0x00FC0000)>>18 );
+    _spi.write( (color&0x0000FC00)>>10 );
+    _spi.write( (color&0x000000FC)>>2);
+#else  
+    lcd_draw( color);
+#endif    
+  }
+    //   
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+    _spi.frequency( SPIClkSpeed);
+#endif   
+  lcd_drawstop();
+
+  /* Reset to the slow SPI speed. */
+  _spi.frequency( SPISlowClkSpeed);
+  return;
+}
+
+
+#ifdef _USE_FILE
+unsigned int GLCD::lcd_drawimage(char *fname)
+{
+    unsigned int i;
+    unsigned char  r, g, b;
+    
+    FILE *fp;
+    
+    if ( (fp=fopen( fname, "r")) == NULL ) {
+        return 0;
+    }
+
+    lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1));
+    
+    lcd_drawstart();
+    
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,3);
+#endif   
+
+    for(i=(LCD_WIDTH*LCD_HEIGHT); i!=0; i--)
+    {
+        //
+        r=fgetc( fp);
+        g=fgetc( fp);
+        b=fgetc( fp);
+        //    
+#if ( LCD_MODE_262K==6 )        
+        _spi.write( (r&0xFC)>>2 );
+        _spi.write( (g&0xFC)>>2 );
+        _spi.write( (b&0xFC)>>2 );        
+#else
+        lcd_draw( RGB( r, g, b));
+#endif        
+        //
+        if ( feof( fp)) {
+            fclose( fp);
+            break;
+        }
+    }
+    //
+    if ( fp)
+        fclose( fp);
+    //   
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,3);
+#endif      
+    lcd_drawstop();
+
+    return 1;
+}
+#endif
+
+
+#ifdef _USE_FILE
+
+unsigned int GLCD::lcd_drawimagebuff(char *fname)
+{
+    unsigned int i;
+    unsigned char  r, g, b;
+    unsigned char buffer[320*BUFFER_LINE*3];
+    unsigned int size, idx, y=0;
+    
+    FILE *fp;
+    
+    if ( (fp=fopen( fname, "r")) == NULL ) {
+        return 0;
+    }
+
+    size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp);
+
+    /* Set the fast SPI speed. */
+    _spi.frequency( SPIClkSpeed);
+        
+    lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1));
+    
+    lcd_drawstart();
+    
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+#endif   
+    
+    idx=0;
+    for(i=(LCD_WIDTH*LCD_HEIGHT); i!=0; i--)
+    {
+        //
+        r=buffer[idx++];
+        g=buffer[idx++];
+        b=buffer[idx++];
+        //    
+#if ( LCD_MODE_262K==6 )  
+        _spi.write( (r&0xFC)>>2 );
+        _spi.write( (g&0xFC)>>2 );
+        _spi.write( (b&0xFC)>>2 );        
+#else
+        lcd_draw( RGB( r, g, b));
+#endif        
+        //
+        if ( idx>=size){
+#if ( LCD_MODE_262K==6 )
+            _spi.format(8,SPIMode);
+#endif             
+            lcd_drawstop();
+            //
+            if ( feof( fp)) {
+                fclose( fp);
+                break;
+            }
+            //
+            size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp);
+            idx=0;
+            y+=BUFFER_LINE;
+            lcd_area(0, y, (LCD_WIDTH-1), (LCD_HEIGHT-1));
+            lcd_drawstart();
+#if ( LCD_MODE_262K==6 )
+            _spi.format(6,SPIMode);
+#endif                 
+        }            
+    }
+    //   
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+#endif          
+    //
+    lcd_drawstop();
+    /* Reset to the slow SPI speed. */
+    _spi.frequency( SPISlowClkSpeed);    
+    //
+    if ( fp)
+        fclose( fp);
+
+    return 1;
+}
+#endif
+
+#ifdef _USE_FILE
+unsigned int GLCD::lcd_drawimagebyline(unsigned char *buffer, unsigned int lnum, unsigned int xstart, unsigned int ystart, unsigned int scale)
+{
+    unsigned int i, idx;
+    unsigned char  r, g, b;
+
+    /* Set the fast SPI speed. */
+    _spi.frequency( SPIClkSpeed);
+        
+    lcd_area(xstart, lnum+ystart, ((LCD_WIDTH/scale)-1)+xstart, lnum+ystart);
+    
+    lcd_drawstart();
+    
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+#endif   
+    
+    idx=0;
+    for(i=LCD_WIDTH/scale; i!=0; i--)
+    {
+        //
+        r=buffer[idx];
+        g=buffer[idx+1];
+        b=buffer[idx+2];
+        //
+        idx+=(scale*3);
+        //    
+#if ( LCD_MODE_262K==6 )  
+        _spi.write( (r&0xFC)>>2 );
+        _spi.write( (g&0xFC)>>2 );
+        _spi.write( (b&0xFC)>>2 );        
+#else
+        lcd_draw( RGB( r, g, b));
+#endif        
+    }
+    //   
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+#endif          
+    //
+    lcd_drawstop();
+    /* Reset to the slow SPI speed. */
+    _spi.frequency( SPISlowClkSpeed);    
+    
+    return 1;
+}
+#endif
+
+#ifdef _USE_FILE
+unsigned int GLCD::lcd_drawimagebyline(unsigned char *buffer, unsigned int lnum)
+{
+    unsigned int i, idx;
+    unsigned char  r, g, b;
+
+    /* Set the fast SPI speed. */
+    _spi.frequency( SPIClkSpeed);
+        
+    lcd_area(0, lnum, (LCD_WIDTH-1), lnum);
+    
+    lcd_drawstart();
+    
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+#endif   
+    
+    idx=0;
+    for(i=LCD_WIDTH; i!=0; i--)
+    {
+        //
+        r=buffer[idx++];
+        g=buffer[idx++];
+        b=buffer[idx++];
+        //    
+#if ( LCD_MODE_262K==6 )  
+        _spi.write( (r&0xFC)>>2 );
+        _spi.write( (g&0xFC)>>2 );
+        _spi.write( (b&0xFC)>>2 );        
+#else
+        lcd_draw( RGB( r, g, b));
+#endif        
+    }
+    //   
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+#endif          
+    //
+    lcd_drawstop();
+    /* Reset to the slow SPI speed. */
+    _spi.frequency( SPISlowClkSpeed);    
+    
+    return 1;
+}
+#endif
+
+#ifdef _USE_FILE
+
+unsigned int GLCD::lcd_drawmovie(char *fname, unsigned int x_start, unsigned int y_start)
+{
+    unsigned int i;
+    unsigned char  r, g, b;
+    
+    FILE *fp;
+    
+    if ( (fp=fopen( fname, "r")) == NULL ) {
+        return 0;
+    }
+
+    /* Set the fast SPI speed. */
+    _spi.frequency( SPIClkSpeed);
+
+    lcd_drawstop();
+    // lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1));
+    lcd_area(x_start, y_start, (80-1)+x_start, (60-1)+y_start);
+    
+    lcd_drawstart();
+    
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+#endif   
+
+    while( 1)
+    {
+        //
+        r=fgetc( fp);
+        g=fgetc( fp);
+        b=fgetc( fp);
+        //    
+#if ( LCD_MODE_262K==6 )        
+        _spi.write( (r&0xFC)>>2 );
+        _spi.write( (g&0xFC)>>2 );
+        _spi.write( (b&0xFC)>>2 );        
+#else
+        lcd_draw( RGB( r, g, b));
+#endif        
+        //
+        if ( feof( fp)) {
+            fclose( fp);
+            break;
+        }
+    }
+    //
+    if ( fp)
+        fclose( fp);
+    //   
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+#endif      
+    lcd_drawstop();
+
+    /* Reset to the slow SPI speed. */
+    _spi.frequency( SPISlowClkSpeed);    
+
+    return 1;
+}
+#endif
+
+#ifdef _USE_FILE
+#if ( LCD_MODE_262K==5 )
+
+// I will use a portion of memory proportional to a defined number of rows.
+#define cLINE_NUMBER    40
+
+// Ping-pong buffer. The buffer are proportional to the number of pixel per row (160), to the
+// numeber of line I want to read and to the number of byte for each pixel. In this case I have
+// a ready-made file with each pixel defined with 16bit (RGB==565bit)
+unsigned char buffer[160*cLINE_NUMBER*2] __attribute((section("AHBSRAM1"),aligned));
+unsigned char buffer1[160*cLINE_NUMBER*2] __attribute((section("AHBSRAM0"),aligned));
+
+/** DMA_IRQHandler Called by DMA.
+ *  Please to learn more read: http://mbed.org/users/AjK/programs/SOWB/lg489e/docs/flash__read_8c_source.html
+ */
+volatile int DMA_flag;
+extern "C" void DMA_IRQHandler(void) __irq {
+    if (LPC_GPDMA->DMACIntStat & 1) {
+        if (LPC_GPDMA->DMACIntTCStat & 1) {
+            DMA_flag=1;
+            LPC_GPDMA->DMACIntTCClear = 1;
+        }
+        if (LPC_GPDMA->DMACIntErrStat & 1) {
+            LPC_GPDMA->DMACIntErrClr = 1;
+        }
+    }
+}
+
+/** Linked List structure. I use this structure to send with one shot 3x3200 byte to the GLCD.
+ */
+typedef struct {
+    uint32_t SrcAddr;    /* Source Address */
+    uint32_t DstAddr;    /* Destination address  */
+    uint32_t NextLLI;    /* Next LLI address, otherwise set to '0'  */
+    uint32_t Control;    /* GPDMA Control Register of this LLI. Reflect the content of LPC_GPDMACH0->DMACCControl */
+} GPDMA_LLI;
+
+/* Let declare the 3 linked list. The first LLI address will be programmed inside the DMA registers. */
+GPDMA_LLI LLI0, LLI1, LLI2;
+
+#define DMA_CHANNEL_ENABLE      1
+#define DMA_TRANSFER_TYPE_M2P   (1UL << 11)   
+#define DMA_CHANNEL_TCIE        (1UL << 31)
+#define DMA_CHANNEL_SRC_INC     (1UL << 26)
+#define DMA_MASK_IE             (1UL << 14)
+#define DMA_MASK_ITC            (1UL << 15)
+#define DMA_CHANNEL_SRC_PERIPHERAL_SSP0_RX  (1UL << 1)
+#define DMA_CHANNEL_SRC_PERIPHERAL_SSP0_TX  (0UL << 1)
+#define DMA_CHANNEL_DST_PERIPHERAL_SSP0_RX  (1UL << 6)
+#define DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX  (0UL << 6)
+
+/** Display a movie file. The file is ready made to speed up the entire process.
+ *
+ * @param the name file.
+ *
+ */
+unsigned int GLCD::lcd_drawmoviebuff(char *fname, unsigned int x_start, unsigned int y_start)
+{
+    unsigned int i;
+    unsigned char  r, g, b;
+    unsigned int size, idx, y=0;
+    unsigned char *pframe;
+    FILE *fp;
+    
+    LPC_SSP0->DMACR=2;
+
+    /* Load the content to the LLI */    
+    /* The LLI are chained, so I load the address to the corrispondent LLI*/
+    LLI0.NextLLI=(uint32_t)&LLI1;
+    LLI1.NextLLI=(uint32_t)&LLI2;
+    LLI2.NextLLI=0;                 // The last is NULL to stop the chain.
+    
+    /* The dimension of the buffer are fixed. So each LLI have a fixed pointer to the owned block of memory */
+    /* Each buffer is 16KB long but I use fixed chunk following this rule: */
+    /* The image is 160x120x2 = 38400 byte big. I have divided this amount by three so that it can */
+    /* use the two memory buffer. Each chunk is now 12800 byte. But the DMA can only transfer 4KB of RAM, */ 
+    /* so I divided this amount of memory by four, 3200 byte, and use three LLI to let the DMA to send the entire buffer all at once. */
+    /* The LLI are three because the DMA is programmed with the first chund of buffer. At the end of this operation, the DMA load the LLI */
+    /* and sends the remaining buffers. */
+    LLI0.SrcAddr=(uint32_t)&buffer[3200];
+    LLI1.SrcAddr=(uint32_t)&buffer[3200+3200];
+    LLI2.SrcAddr=(uint32_t)&buffer[3200+3200+3200];
+    /* OK, the destination address is the same for all LLI. Please change if you use a different SPI. */
+    LLI0.DstAddr=(uint32_t)&LPC_SSP0->DR;
+    LLI1.DstAddr=(uint32_t)&LPC_SSP0->DR;
+    LLI2.DstAddr=(uint32_t)&LPC_SSP0->DR;
+    /* This is the control register. */
+    LLI0.Control= DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200;
+    LLI1.Control= DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200;
+    LLI2.Control= DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200;
+    /* ****************************************************** */
+    
+    /* Power up the GPDMA. */
+    LPC_SC->PCONP |= (1UL << 29);
+    LPC_GPDMA->DMACConfig = 1;
+    LPC_GPDMA->DMACIntTCClear = 0x1;
+    // LPC_GPDMA->DMACSoftSReq   = 0xC;
+    LPC_GPDMA->DMACSoftSReq   = 0x3;
+    
+    /* Enable the IRQ */
+    NVIC_EnableIRQ(DMA_IRQn);
+    
+    /* Open the file */
+    if ( (fp=fopen( fname, "rb")) == NULL ) {
+        return 0;
+    }
+        
+    /* Set the fast SPI speed. */
+    _spi.frequency( SPIClkSpeed);
+    _spi.format(8,SPIMode);
+    /* Define a fixed area to display the movie. */
+    lcd_area(x_start, y_start, (160-1)+x_start, (120-1)+y_start);
+    lcd_drawstart();
+
+    /* read the first buffer... */
+    size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp);
+    
+    /* Loop untile the whole file is read. */
+    while( 1) {
+        pframe=&buffer[0];
+        /* set the source buffer... */
+        LLI0.SrcAddr=(uint32_t)&pframe[3200];
+        LLI1.SrcAddr=(uint32_t)&pframe[3200+3200];
+        LLI2.SrcAddr=(uint32_t)&pframe[3200+3200+3200];
+
+        /* configure the DMA channell... */
+        LPC_GPDMACH0->DMACCSrcAddr  = (uint32_t)pframe;
+        LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP0->DR;
+        LPC_GPDMACH0->DMACCLLI      = (uint32_t)&LLI0;
+        LPC_GPDMACH0->DMACCControl  = DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200;
+
+        DMA_flag=0;
+        /* Fire GPDMA Channel0 */
+        LPC_GPDMACH0->DMACCConfig = DMA_CHANNEL_ENABLE | 
+                                    DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX |
+                                    DMA_TRANSFER_TYPE_M2P |
+                                    DMA_MASK_IE |
+                                    DMA_MASK_ITC;
+
+        if ( feof( fp)) {
+            fclose( fp);
+            break;
+        }    
+        /* Read the second chunk of the frame... */
+        size=fread( &buffer1[0], sizeof(buffer1[0]), sizeof(buffer1)/sizeof(buffer1[0]), fp);
+        /* OK, the buffer from the SDCar is read but now we must check if the DMA it's work... */
+        while( !DMA_flag);
+        DMA_flag=0;
+        /* At this point I check if I'm at end of the file. */
+        if ( feof( fp) || size != sizeof(buffer1)/sizeof(buffer1[0]) ) {
+            //
+            LPC_SSP0->IMSC = (1UL << 3);
+
+            LPC_GPDMACH0->DMACCConfig = 0;
+            LPC_GPDMA->DMACIntTCClear = 1;
+            
+            fclose( fp);
+            while(LPC_SSP0->SR & (1UL << 2)) {
+                /* This loop ensures we read the last byte in the
+                RX FIFO and test that. */
+                int sr = LPC_SSP0->DR;
+            }
+
+            // lcd_drawstop();
+            NVIC_DisableIRQ(DMA_IRQn);
+            LPC_GPDMA->DMACIntTCClear = 1;
+            LPC_SSP0->DMACR=0;
+            LPC_GPDMA->DMACConfig = 0;
+            LPC_GPDMA->DMACIntTCClear = 0x1;
+            LPC_GPDMA->DMACSoftSReq   = 0;
+            LPC_SC->PCONP &= ~(1UL << 29);
+            LPC_GPDMA->DMACIntTCClear = 1;
+            //
+            lcd_drawstop();
+            break;
+        }        
+        /* Now I have a buffer full with new data and the DMA stopped. I can start it again. */
+        pframe=&buffer1[0];
+        /* I set the new buffer inside the LLI... */
+        LLI0.SrcAddr=(uint32_t)&pframe[3200];
+        LLI1.SrcAddr=(uint32_t)&pframe[3200+3200];
+        LLI2.SrcAddr=(uint32_t)&pframe[3200+3200+3200];
+        /* DMA configuration. */    
+        LPC_GPDMACH0->DMACCSrcAddr  = (uint32_t)pframe;
+        LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP0->DR;
+        LPC_GPDMACH0->DMACCLLI      = (uint32_t)&LLI0;
+        LPC_GPDMACH0->DMACCControl  = DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200;
+        /* Fire GPDMA Channel0 */
+        LPC_GPDMACH0->DMACCConfig = DMA_CHANNEL_ENABLE | 
+                                    DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX |
+                                    DMA_TRANSFER_TYPE_M2P |
+                                    DMA_MASK_IE |
+                                    DMA_MASK_ITC;
+                
+        if ( feof( fp)) {
+            fclose( fp);
+            break;
+        }        
+        /* A new read from the SDCad... */
+        size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp);
+        /* just wait is the DMA it's working... */
+        while( !DMA_flag);
+        DMA_flag=0;
+        /* At this point I check if I'm at end of the file. */
+        if ( feof( fp) || size != sizeof(buffer)/sizeof(buffer[0]) ) {
+            fclose( fp);
+            break;
+        }        
+        /* */
+        pframe=&buffer[0];
+        /* programmo nella LLI il nvuovo buffer... */
+        LLI0.SrcAddr=(uint32_t)&pframe[3200];
+        LLI1.SrcAddr=(uint32_t)&pframe[3200+3200];
+        LLI2.SrcAddr=(uint32_t)&pframe[3200+3200+3200];
+        /* programmo il DMA */    
+        LPC_GPDMACH0->DMACCSrcAddr  = (uint32_t)pframe;
+        LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP0->DR;
+        LPC_GPDMACH0->DMACCLLI      = (uint32_t)&LLI0;
+        LPC_GPDMACH0->DMACCControl  = DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200;
+        /* Fire GPDMA Channel0 */
+        LPC_GPDMACH0->DMACCConfig = DMA_CHANNEL_ENABLE | 
+                                    DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX |
+                                    DMA_TRANSFER_TYPE_M2P |
+                                    DMA_MASK_IE |
+                                    DMA_MASK_ITC;
+        if ( feof( fp)) {
+            fclose( fp);
+            break;
+        }
+        /* */
+        size=fread( &buffer1[0], sizeof(buffer1[0]), sizeof(buffer1)/sizeof(buffer1[0]), fp);
+        /* Aspetto che il DMA completi l'ultimo transfer... */
+        while( !DMA_flag);
+        DMA_flag=0;
+        /* At this point I check if I'm at end of the file. */
+        if ( feof( fp) || size != sizeof(buffer1)/sizeof(buffer1[0]) ) {
+            fclose( fp);
+            break;
+        }                
+        /* */
+        pframe=&buffer1[0];
+        /* At this point I reset the display area resending the xy value*/
+        lcd_drawstop();        
+        LPC_SSP0->DMACR=0;
+        /* Invio un nuovo comando di lcd_area */
+        lcd_area(x_start, y_start, (160-1)+x_start, (120-1)+y_start);
+        lcd_drawstart();
+        /* */
+        LPC_SSP0->DMACR=2;
+
+        /* programmo nella LLI il nvuovo buffer... */
+        LLI0.SrcAddr=(uint32_t)&pframe[3200];
+        LLI1.SrcAddr=(uint32_t)&pframe[3200+3200];
+        LLI2.SrcAddr=(uint32_t)&pframe[3200+3200+3200];
+        /* programmo il DMA */    
+        LPC_GPDMACH0->DMACCSrcAddr  = (uint32_t)pframe;
+        LPC_GPDMACH0->DMACCDestAddr = (uint32_t)&LPC_SSP0->DR;
+        LPC_GPDMACH0->DMACCLLI      = (uint32_t)&LLI0;
+        LPC_GPDMACH0->DMACCControl  = DMA_CHANNEL_TCIE | DMA_CHANNEL_SRC_INC | 3200;
+        /* Fire GPDMA Channel0 */
+        LPC_GPDMACH0->DMACCConfig = DMA_CHANNEL_ENABLE | 
+                                    DMA_CHANNEL_DST_PERIPHERAL_SSP0_TX |
+                                    DMA_TRANSFER_TYPE_M2P |
+                                    DMA_MASK_IE |
+                                    DMA_MASK_ITC;
+
+        if ( feof( fp)) {
+            fclose( fp);
+            break;
+        }                
+        /* Ultima lettura del buffer da SDCard... */
+        size=fread( &buffer[0], sizeof(buffer[0]), sizeof(buffer)/sizeof(buffer[0]), fp);
+        /* Aspetto che il DMA completi il transfer... */
+        while( !DMA_flag);
+        DMA_flag=0;
+        /* At this point I check if I'm at end of the file. */
+        if ( feof( fp) || size != sizeof(buffer)/sizeof(buffer[0]) ) {
+            fclose( fp);
+            break;
+        }        
+    }
+    //
+    LPC_SSP0->IMSC = (1UL << 3);
+    while(LPC_SSP0->SR & (1UL << 2)) {
+        /* This loop ensures we read the last byte in the
+        RX FIFO and test that. */
+        int sr = LPC_SSP0->DR;
+    }    
+    
+    LPC_GPDMACH0->DMACCConfig = 0;
+    LPC_SSP0->DMACR=0;
+    LPC_GPDMA->DMACConfig = 0;
+    LPC_GPDMA->DMACIntTCClear = 0x1;
+    LPC_GPDMA->DMACSoftSReq   = 0;
+    LPC_SC->PCONP &= ~(1UL << 29);
+    //
+    lcd_drawstop();
+    //
+    LPC_SSP0->DMACR=0;
+    LPC_GPDMA->DMACConfig = 0;
+    LPC_GPDMA->DMACIntTCClear = 0x1;
+    LPC_GPDMA->DMACSoftSReq   = 0;
+    LPC_SC->PCONP &= ~(1UL << 29);
+    //
+    /* Reset to the slow SPI speed. */
+    _spi.frequency( SPISlowClkSpeed);    
+    _spi.format(8,SPIMode);    
+    //
+    lcd_drawstop();
+    
+    lcd_area(0, 0, (320-1), (240-1));
+
+    /* Disable the IRQ */
+    NVIC_DisableIRQ(DMA_IRQn);    
+    return 1;
+}
+#endif      // #if ( LCD_MODE_262K==5 ) 
+#endif      // #ifdef _USE_FILE
+
+void GLCD::lcd_drawicon( const unsigned char *icon, unsigned int x, unsigned int y, unsigned int size)
+{
+  unsigned int i;
+  unsigned char r, g, b;
+
+  /* Set the fast SPI speed. */
+  _spi.frequency( SPIClkSpeed);
+  
+  lcd_area(x, y, ((size-1)+x), ((size-1)+y));
+
+  lcd_drawstart();
+  
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+#endif 
+  
+  for(i=(size*size); i!=0; i--)
+  {
+    r=*icon++;
+    g=*icon++;
+    b=*icon++;
+
+#if ( LCD_MODE_262K==6 )
+    _spi.write( (r&0xFC)>>2 );
+    _spi.write( (g&0xFC)>>2 );
+    _spi.write( (b&0xFC)>>2);
+#else
+    lcd_draw( RGB( r, g, b ) );
+#endif   
+  }
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+#endif  
+  lcd_drawstop();
+  /* Reset to the slow SPI speed. */
+  _spi.frequency( SPISlowClkSpeed);
+  return;
+}
+
+void GLCD::lcd_drawicon( const unsigned char *icon, unsigned int x, unsigned int y, unsigned int xsize, unsigned int ysize)
+{
+  unsigned int i;
+  unsigned char r, g, b;
+  
+  /* Set the fast SPI speed. */
+  _spi.frequency( SPIClkSpeed);
+  
+  lcd_area(x, y, ((xsize-1)+x), ((ysize-1)+y));
+
+  lcd_drawstart();
+  
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+#endif 
+  
+  for(i=(xsize*ysize); i!=0; i--)
+  {
+    r=*icon++;
+    g=*icon++;
+    b=*icon++;
+
+#if ( LCD_MODE_262K==6 )
+    _spi.write( (r&0xFC)>>2 );
+    _spi.write( (g&0xFC)>>2 );
+    _spi.write( (b&0xFC)>>2);
+#else
+    lcd_draw( RGB( r, g, b ) );
+#endif   
+  }
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+#endif  
+  lcd_drawstop();
+  /* Reset to the slow SPI speed. */
+  _spi.frequency( SPISlowClkSpeed);
+  return;
+}
+
+
+void GLCD::lcd_drawicon( const unsigned int *icon, unsigned int x, unsigned int y, unsigned int size)
+{
+  unsigned int i, tmp;
+  
+  /* Set the fast SPI speed. */
+  _spi.frequency( SPIClkSpeed);
+  
+  lcd_area(x, y, ((size-1)+x), ((size-1)+y));
+
+  lcd_drawstart();
+  
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+#endif 
+  
+  for(i=(size*size); i!=0; i--)
+  {
+    tmp = *icon++;
+#if ( LCD_MODE_262K==6 )
+    _spi.write( (tmp&0x00FC0000)>>18 );
+    _spi.write( (tmp&0x0000FC00)>>10 );
+    _spi.write( (tmp&0x000000FC)>>2);
+#else
+    lcd_draw( RGB( (( tmp&0x00FF0000)>>16), ( ( tmp&0x0000FF00)>>8), ( tmp&0x000000FF)) );
+#endif   
+  }
+#if ( LCD_MODE_262K==6 )
+    _spi.format(8,SPIMode);
+#endif  
+  lcd_drawstop();
+  /* Reset to the slow SPI speed. */
+  _spi.frequency( SPISlowClkSpeed);
+  return;
+}
+
+void GLCD::lcd_drawpixel(unsigned int x0, unsigned int y0, unsigned int color) {
+
+  /* Set the fast SPI speed. */
+  _spi.frequency( SPIClkSpeed);
+  
+  lcd_area( x0, y0, x0, y0);
+  lcd_drawstart();
+
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+    _spi.write( (color&0x00FC0000)>>18 );
+    _spi.write( (color&0x0000FC00)>>10 );
+    _spi.write( (color&0x000000FC)>>2);
+    _spi.format(8,SPIMode);
+#else  
+  lcd_draw(color);
+#endif
+
+  lcd_drawstop();
+  /* Reset to the slow SPI speed. */
+  _spi.frequency( SPISlowClkSpeed);
+
+}
+
+void GLCD::lcd_drawline(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int color) {
+  //
+  // pInt32U pData = ((pInt32U) LCD_VRAM_BASE_ADDR) + x0 + (y0 * LCD_HEIGHT);
+  // pInt32U pData = ((pInt32U) pCurrFrmBuff) + x0 + (y0 * LCD_HEIGHT);
+  
+  int dy = y1 - y0;
+  int dx = x1 - x0;
+  int stepx, stepy;
+  
+  if (dy < 0) { dy = -dy; stepy = -1; } else { stepy = 1; }
+  if (dx < 0) { dx = -dx; stepx = -1; } else { stepx = 1; }
+  
+  dy <<= 1; // dy is now 2*dy
+  dx <<= 1; // dx is now 2*dx
+  
+  /* Set the fast SPI speed. */
+  _spi.frequency( SPIClkSpeed);
+  
+  lcd_area( x0, y0, x0, y0);
+  lcd_drawstart();
+
+#if ( LCD_MODE_262K==6 )
+    _spi.format(6,SPIMode);
+    _spi.write( (color&0x00FC0000)>>18 );
+    _spi.write( (color&0x0000FC00)>>10 );
+    _spi.write( (color&0x000000FC)>>2);
+    _spi.format(8,SPIMode);
+#else  
+  lcd_draw(color);
+#endif
+
+  lcd_drawstop();
+  
+  // *(pData)= color;
+  
+  if (dx > dy) {
+          int fraction = dy - (dx >> 1);          // same as 2*dy - dx
+          while (x0 != x1) {
+                  if (fraction >= 0) {
+                          y0 += stepy;
+                          fraction -= dx;           // same as fraction -= 2*dx
+                  }
+                  x0 += stepx;
+                  fraction += dy;                   // same as fraction -= 2*dy
+                  // pData = ((pInt32U) LCD_VRAM_BASE_ADDR) + x0 + (y0 * C_GLCD_H_SIZE);
+                  // pData = ((pInt32U) pCurrFrmBuff) + x0 + (y0 * C_GLCD_H_SIZE);
+                  // *(pData)= color;
+                  lcd_area( x0, y0, x0, y0);
+                  lcd_drawstart();
+
+#if ( LCD_MODE_262K==6 )
+                   _spi.format(6,SPIMode);
+                   _spi.write( (color&0x00FC0000)>>18 );
+                   _spi.write( (color&0x0000FC00)>>10 );
+                   _spi.write( (color&0x000000FC)>>2);
+                   _spi.format(8,SPIMode);
+#else  
+                  lcd_draw(color);
+#endif
+                  
+                  lcd_drawstop();
+ 
+          }
+  } else {
+          int fraction = dx - (dy >> 1);
+          while (y0 != y1) {
+                  if (fraction >= 0) {
+                          x0 += stepx;
+                          fraction -= dy;
+                  }
+                  y0 += stepy;
+                  fraction += dx;
+                  // pData = ((pInt32U) LCD_VRAM_BASE_ADDR) + x0 + (y0 * C_GLCD_H_SIZE);
+                  // pData = ((pInt32U) pCurrFrmBuff) + x0 + (y0 * C_GLCD_H_SIZE);
+                  // *(pData)= color;
+                  lcd_area( x0, y0, x0, y0);
+                  lcd_drawstart();
+                  
+#if ( LCD_MODE_262K==6 )
+                   _spi.format(6,SPIMode);
+                   _spi.write( (color&0x00FC0000)>>18 );
+                   _spi.write( (color&0x0000FC00)>>10 );
+                   _spi.write( (color&0x000000FC)>>2);
+                   _spi.format(8,SPIMode);
+#else  
+                  lcd_draw(color);
+#endif
+                  
+                  lcd_drawstop();
+          }
+  }
+  /* Reset to the slow SPI speed. */
+  _spi.frequency( SPISlowClkSpeed);
+}
+
+void GLCD::lcd_reset(void)
+{
+  //reset
+  LCD_CS_DISABLE();
+  LCD_RST_ENABLE();
+  wait_ms(50);
+  LCD_RST_DISABLE();
+  wait_ms(50);
+
+  //driving ability
+  lcd_cmd(0xEA, 0x0000);
+  lcd_cmd(0xEB, 0x0020);
+  lcd_cmd(0xEC, 0x000C);
+  lcd_cmd(0xED, 0x00C4);
+  lcd_cmd(0xE8, 0x0040);
+  lcd_cmd(0xE9, 0x0038);
+  lcd_cmd(0xF1, 0x0001);
+  lcd_cmd(0xF2, 0x0010);
+  lcd_cmd(0x27, 0x00A3);
+
+  //power voltage
+  lcd_cmd(0x1B, 0x001B);
+  lcd_cmd(0x1A, 0x0001);
+  lcd_cmd(0x24, 0x002F);
+  lcd_cmd(0x25, 0x0057);
+
+  //VCOM offset
+  lcd_cmd(0x23, 0x008D); //for flicker adjust
+
+  //power on
+  lcd_cmd(0x18, 0x0036);
+  lcd_cmd(0x19, 0x0001); //start osc
+  lcd_cmd(0x01, 0x0000); //wakeup
+  lcd_cmd(0x1F, 0x0088);
+  wait_ms(5);
+  lcd_cmd(0x1F, 0x0080);
+  wait_ms(5);
+  lcd_cmd(0x1F, 0x0090);
+  wait_ms(5);
+  lcd_cmd(0x1F, 0x00D0);
+  wait_ms(5);
+
+  //color selection
+  lcd_cmd(0x17, LCD_MODE_262K); //0x0005=65k, 0x0006=262k 
+
+  //panel characteristic
+  lcd_cmd(0x36, 0x0000);
+
+  //display on
+  lcd_cmd(0x28, 0x0038);
+  wait_ms(40);
+  lcd_cmd(0x28, 0x003C);
+
+  //display options
+#ifdef LCD_MIRROR
+  lcd_cmd(0x16, 0x0068); //MY=0 MX=1 MV=1 ML=0 BGR=1
+#else
+  lcd_cmd(0x16, 0x00A8); //MY=1 MX=0 MV=1 ML=0 BGR=1
+#endif
+
+  lcd_area(0, 0, (LCD_WIDTH-1), (LCD_HEIGHT-1));
+
+  return;
+}
+
diff -r 000000000000 -r 7ad454fed160 MI0283QTlib.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MI0283QTlib.h	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,363 @@
+    /* mbed Graphics LCD library. Library for MI0283QT-2 screen.
+
+    Copyright (c) 2011 NXP 3803 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+ 
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+*/
+
+#ifndef __MBED_GLCDLIB_H
+#define __MBED_GLCDLIB_H
+
+// Comment out if file system functions are not used.
+#define _USE_FILE
+
+#ifdef _USE_FILE
+#define BUFFER_LINE     10
+#endif
+
+//
+#define LCD_BLACK   (0)
+#define LCD_WHITE   ( (255<<16)|(255<<8)|(255<<0) )
+#define LCD_RED     ( (255<<16)|(0<<8)|(0<<0) )
+#define LCD_GREEN   ( (0<<16)|(255<<8)|(0<<0) )
+#define LCD_BLUE    ( (0<<16)|(0<<8)|(255<<0) )
+//
+#define SCALE_320x240    1
+#define SCALE_160x120    2
+//
+#include "mbed.h"
+
+struct _FONTINFO {
+    unsigned char *pText;
+    unsigned int h_size;
+    unsigned int v_size;
+    unsigned int h_line;
+};
+
+
+/** Graphic LCD Library for MI0283QT-2 LCD
+* 
+* Image Format.
+* About image format, I choose the way to make the library capable to read the simple RGB format.
+* That's: a file with RGB bytes written. This format is very simple to obtain, using the convert.exe software.
+* This program is inside the "Imagemagick" installation software. You can download the portable versio for windows 
+* at this link: http://www.imagemagick.org/download/binaries/ImageMagick-6.6.7-Q16-windows.zip
+*
+* Icone Format.
+* I use some free icons from Internet. I use the bin2h utility to convert this file to .h format.
+* (http://www.deadnode.org/sw/bin2h/)
+* 
+* Example:
+* @code
+* // Init code...
+* #include "mbed.h"
+* #include "GLCDlib.h"
+* 
+* // Configure the GLCD pin: 
+* //         mosi, miso, clk, cs,  rst, bklgh
+* GLCD lcd(  p11,  p12,  p13, p14, p17, p26);
+* 
+* int main() {
+*
+*    lcd.lcd_init();
+*    lcd.backlightoff();
+*    //... do somethings...
+*   lcd.lcd_clear( LCD_WHITE);
+*    lcd.backlighton();
+*    //... the LCD is ON
+* }
+* @endcode
+
+*/
+    
+class GLCD {
+
+public:
+    /** Create the GLCD Object and initlaize the I/O pins
+     * 
+     * @param pin mosi, pin miso, pin sclk, pin cs, pin LCD_reset, pin LCD_backlight
+     */
+    GLCD( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName rst, PinName bklgh);
+    
+    /** Configure the SPI port with default parameters.
+     *
+     * @param none
+     */
+    void lcd_init( void);
+    
+    /** Initialize the LCD with an optional SPI freq. Used as FastSpeed 
+     *
+     * @param clock speed in Hz
+     */
+    void lcd_init( unsigned speedf);
+    
+    /** Initialize the LCD with two optionals SPI freq: fast and slow speed. 
+     *
+     * @param speedf The fast freq. used to drive the GLCD
+     * @param speeds The freq. at wich the SPI is configured after the use.
+     *
+     */
+    void lcd_init( unsigned int speedf, unsigned int speeds);
+    
+    /** Clear the entire screen with color 
+     *
+     * #param color The color we want to use to fill the screen
+     */
+    void lcd_clear(unsigned int color);
+    
+    /** Clear a specified screen region. Like as a rectangle fill
+     * @param x0 start x position
+     * @param y0 start y position
+     * @param w  rectangle width
+     * @param h  rectangle hight
+     * @param color The color we use to fill the area.
+     *
+     */
+    void lcd_clear(unsigned int x0, unsigned int y0, unsigned int w, unsigned int h, unsigned int color);
+    
+#ifdef _USE_FILE    
+    /** Draw an RGB image file (320x240) starting at x=0, y=0
+     *  The image is read byte per byte. So use this function if you don't care about speed
+     *
+     * @param fname The file name we want to display
+     */
+    unsigned int lcd_drawimage(char *fname);
+    
+    /** Draw an RGB image file (320x240) starting at x=0, y=0
+     *  The image is read using a buffer. You can set the buffer using the define: BUFFER_LINE
+     *  This procedure speedup the draw of the image. At the cost of more RAM.
+     *  The defaullt buffer size is: 320*BUFFER_LINE*3
+     *
+     * @param fname The file name we want to display
+     */    
+    unsigned int lcd_drawimagebuff(char *fname);
+    
+    /** Draw an image file (320x240) staring at x=0, y=0
+     *  The image is displayed line-by-line so the main program can do other jobs between the call.
+     *  The buffer size is equivalent to a LCD line, so must be: 320x3 bytes.
+     * 
+     * @param buffer The pointer at the data to be displayed
+     * @param lnum   The number of the line to display. From 0 to 239.
+     */
+    unsigned int lcd_drawimagebyline(unsigned char *buffer, unsigned int lnum);
+    
+    /** Draw an image file (less then 320x240) specifying the x and y position and the scale value.
+     *  The image is displayed line-by-line so the main program can do other job during the call.
+     *  It is possible to specify a x and y starting position and a scale value.
+     *  The buffer size is equivalent to a LCD line, so must be: 320x3 bytes.
+     * 
+     * @param buffer The pointer at the data to be displayed
+     * @param lnum   The number of the line to display. From 0 to 239.
+     * @param xstart x position 
+     * @param ystart y position
+     * @param scale  Scale factor value. There are two value defined: SCALE_320x240 and SCALE_160x120
+     *               Using the second value it's possible to draw, from a 320x240 image, a 160x120 image.
+     *               at the xy specified. This is the only value supported for now.
+     */
+    unsigned int lcd_drawimagebyline(unsigned char *buffer, unsigned int lnum, unsigned int xstart, unsigned int ystart, unsigned int scale);
+
+    /** Play a movie file 80x60 pixel.
+     *  The file is a ready-made array of pictures extracted from a movie, resized to 80x60 and converted to RGB format.
+     *  I use this procedure in a Ubuntu Linux PC:
+     *
+     *  @code
+     *  mplayer -endpos 10 -nosound -vo png:z=0 perla.avi
+     *  mogrify -resize 80x60 *.png
+     *  mogrify -format rgb *.png
+     *  cat *.rgb > unico_80x60.bin
+     *  @endcode
+     *
+     *  First I convert 10 sec of my avi files with mplayer, then I use mogrify to resize the 150 images to 80x60 pixel.
+     *  The next step is to convert the PNG format to RGB. At this point I create a single file using a simple cat command.
+     *  With this little format there is enough speed to play the movie at 15fps.
+     */
+    unsigned int lcd_drawmovie(char *fname, unsigned int x_start, unsigned int y_start);
+    
+    /** Play a 160x120 pixel ready made movie file.
+     *  The file is a ready-made array of pictures extracted from a movie, resized to 160x120 pixel and converted to RGB format.
+     *  I use this procedure in a Ubuntu Linux PC:
+     *
+     *  @code
+     *  mplayer -endpos 10 -nosound -vo png:z=0 perla.avi
+     *  mogrify -resize 160x120 *.png
+     *  mogrify -format rgb *.png
+     *  cat *.rgb > unico_160x120.bin
+     *  RGBconv_tst unico_160x120.bin unico_160x120_lcd.bin
+     *  @endcode
+     *
+     *  First I convert 10 sec of my avi files with mplayer, then I use mogrify to resize the 150 images generated to 160x120 pixel.
+     *  The next step is to convert the PNG format to RGB. At this point I create a single file using a simple cat command.
+     *  To speed up the playing procedure, I convert the RGB 24bit file to the LCD format RGB 565bit using a simple programm
+     *  I create.
+     *  The procedure use the USB and Ethernet memory area as a ping pong buffer. The buffer loaded from the SDCard is send to the LCD using the DMA.
+     *  During this time another buffer is read and stored to the second buffer. The single DMA transfer is too short for me and I use 3 linked list 
+     *  to chain 3 buffer of memory and send simultaneously more then 12KB if data.
+     *
+     *  @param fname the file name to display
+     *  @param x_start and y_start, the x and y position where to display the movie.
+     */
+    unsigned int lcd_drawmoviebuff(char *fname, unsigned int x_start, unsigned int y_start);
+    
+#endif    // End of: #ifdef _USE_FILE
+
+    /** Draw an RGB icon at x, y. The size is specified for width and hight.
+     *
+     * @param *icon  pointer at the array with the RGB value in integer format. That is: 0x00RRGGBB
+     * @param x      x position
+     * @param y      y position
+     * @param size   the width and height
+     */
+    void lcd_drawicon( const unsigned int *icon, unsigned int x, unsigned int y, unsigned int size);
+
+    /** Draw an RGB icon at x, y. The size is specified for width and hight.
+     *
+     * @param *icon  pointer at the array with the RGB value in byte format. That is: 0xRR, 0xGG, 0xBB
+     * @param x      x position
+     * @param y      y position
+     * @param size   the width and height
+     */    
+    void lcd_drawicon( const unsigned char *icon, unsigned int x, unsigned int y, unsigned int size);
+    
+    /** Draw an RGB icon at x, y. The size is specified for width and hight.
+     *
+     * @param *icon  pointer at the array with the RGB value in byte format. That is: 0xRR, 0xGG, 0xBB
+     * @param x      x position
+     * @param y      y position
+     * @param xsize   the width
+     * @param ysize   the height
+     */     
+    void lcd_drawicon( const unsigned char *icon, unsigned int x, unsigned int y, unsigned int xsize, unsigned int ysize);
+    
+    /** Draw a color line from xy to xy
+     * 
+     * @param x0  x position
+     * @param y0  y position
+     * @param x1  x position
+     * @param y1  y position     
+     * @param color  color to use
+     */
+    void lcd_drawline(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int color);
+    
+    /** Draw a single pixel
+     *
+     * @param x0  x position
+     * @param y0  y position
+     * @param color  color to use
+     */
+    void lcd_drawpixel(unsigned int x0, unsigned int y0, unsigned int color);
+    
+    /** Draw a character at xy position.
+     * 
+     * @param ch    the character to draw
+     * @param xpos  x position
+     * @param ypos  y position 
+     * @param color the color to use
+     */
+    void lcd_drawch( unsigned ch, unsigned int xpos, unsigned int ypos, unsigned int color);
+    
+    /** Draw a string at xy position 
+     *
+     * @param *putstr the string to draw
+     * @param xpos    x position
+     * @param ypos    y position
+     * @param color   the color to use
+     */
+    void lcd_drawstr(char *__putstr, unsigned int xpos, unsigned int ypos, unsigned int color);
+    
+    /** Set the font type to small: 12x6
+     */
+    void lcd_setfontsmall( void);
+    
+    /** Set the font type to big: 24x12
+     */    
+    void lcd_setfontbig( void);
+        
+    /** Return the color value use by the LCD. There are two form: 666 and 565
+     *
+     * @param color   the color in the format: 0x00RRGGBB
+     * @return        the color in the format: 666 or 565
+     */
+    unsigned int lcd_RGB( unsigned int color);
+    
+    /** Return the color value use by the LCD. There are two form: 666 and 565
+     *
+     * @param r   the Red color value
+     * @param g   the Green color value
+     * @param b   the Blue color value
+     * @return        the color in the format: 666 or 565
+     */    
+    unsigned int lcd_RGB( unsigned int r, unsigned int g, unsigned int b);
+    
+    /** Set the background color
+     * 
+     * @param color  the color of the background
+     */
+    void lcd_setbackgroundcolor( unsigned int color);
+
+    /** Function to start the automated scroll of the screen
+     */
+    void lcd_setverticalarea( unsigned int topf, unsigned int height, unsigned int butf);
+    void lcd_scrollstartadd( unsigned int ssa);
+    void lcd_scrollstart( void);
+    void lcd_scrollstop( void);    
+    
+    /** Set the backlight ON
+     *
+     */
+    void backlighton( void);
+    
+    /** Set the backlight OFF
+     *
+     */    
+    void backlightoff( void);
+
+    /** Set the backlight at a particular value.
+     *
+     * @param val  backlight value to set.
+     */    
+    void backlightset( double val);
+        
+protected:
+    void lcd_draw(unsigned int color);
+    void lcd_drawstop(void);
+    void lcd_drawstart(void);
+    void lcd_cmd(unsigned int reg, unsigned int param);
+    void lcd_data(unsigned int c);
+    void lcd_area(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1);
+    void lcd_reset(void);
+    
+    // default value for SPIClock speed, SPI mode and backlight freq.
+    unsigned int SPIClkSpeed;
+    unsigned int SPISlowClkSpeed;
+    unsigned int SPIMode;
+    double       LCDBkLight;
+    // default value for background color
+    unsigned int BackGroundColor;
+    //
+    unsigned char FontIdx;
+    _FONTINFO FontInfo[2];
+    
+    SPI         _spi;
+    DigitalOut  _cs;
+    DigitalOut  _rst;
+    PwmOut      _bklgh;      
+    
+};
+
+#endif
\ No newline at end of file
diff -r 000000000000 -r 7ad454fed160 Terminal12x6.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Terminal12x6.h	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,386 @@
+const unsigned char Text12x6[] = {
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x0e, 0x11, 0x11, 0x1b,
+        0x11, 0x11, 0x1b, 0x15, 0x11, 0x0e, 0x00, 0x00,
+        0x0e, 0x1f, 0x1f, 0x15, 0x1f, 0x1f, 0x15, 0x1b,
+        0x1f, 0x0e, 0x00, 0x00, 0x00, 0x0a, 0x1b, 0x1f,
+        0x1f, 0x1f, 0x1f, 0x0e, 0x0e, 0x04, 0x04, 0x00,
+        0x04, 0x04, 0x0e, 0x0e, 0x1f, 0x1f, 0x1f, 0x0e,
+        0x0e, 0x04, 0x04, 0x00, 0x04, 0x0e, 0x0e, 0x0e,
+        0x04, 0x1f, 0x1f, 0x0e, 0x04, 0x0e, 0x00, 0x00,
+        0x04, 0x04, 0x0e, 0x0e, 0x1f, 0x1f, 0x1f, 0x0e,
+        0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x19, 0x19, 0x1f,
+        0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00,
+        0x0e, 0x0a, 0x0a, 0x0e, 0x00, 0x00, 0x00, 0x00,
+        0x1f, 0x1f, 0x1f, 0x1f, 0x11, 0x15, 0x15, 0x11,
+        0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x1c, 0x18,
+        0x14, 0x06, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x06, 0x09, 0x09, 0x09, 0x06, 0x02, 0x02,
+        0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x0c,
+        0x0c, 0x04, 0x04, 0x04, 0x07, 0x03, 0x00, 0x00,
+        0x0c, 0x0a, 0x0e, 0x0a, 0x0a, 0x0a, 0x0e, 0x0e,
+        0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x15, 0x0e, 0x11, 0x0e, 0x15, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x01, 0x03, 0x07, 0x0f, 0x07, 0x03,
+        0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c,
+        0x0e, 0x0f, 0x0e, 0x0c, 0x08, 0x00, 0x00, 0x00,
+        0x00, 0x04, 0x0e, 0x15, 0x04, 0x04, 0x04, 0x15,
+        0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x00, 0x0a, 0x0a, 0x00, 0x00,
+        0x00, 0x0e, 0x0b, 0x0b, 0x0b, 0x0b, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x00, 0x00, 0x00, 0x06, 0x09, 0x01,
+        0x06, 0x09, 0x06, 0x08, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0f, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x15,
+        0x04, 0x04, 0x04, 0x15, 0x0e, 0x04, 0x1f, 0x00,
+        0x00, 0x04, 0x0e, 0x15, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x15, 0x0e, 0x04, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x02, 0x04, 0x0f, 0x04, 0x02,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+        0x02, 0x0f, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x0f,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
+        0x0a, 0x1f, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x04, 0x04, 0x0e, 0x0e, 0x1f,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
+        0x0e, 0x0e, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x1f,
+        0x0a, 0x0a, 0x1f, 0x0a, 0x0a, 0x00, 0x00, 0x00,
+        0x00, 0x02, 0x06, 0x09, 0x01, 0x02, 0x04, 0x08,
+        0x09, 0x06, 0x04, 0x00, 0x00, 0x0b, 0x0b, 0x04,
+        0x04, 0x02, 0x02, 0x02, 0x0d, 0x0d, 0x00, 0x00,
+        0x00, 0x02, 0x05, 0x05, 0x05, 0x02, 0x15, 0x09,
+        0x09, 0x16, 0x00, 0x00, 0x0c, 0x0c, 0x08, 0x04,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+        0x02, 0x04, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00,
+        0x00, 0x00, 0x04, 0x15, 0x0e, 0x0e, 0x15, 0x04,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+        0x04, 0x1f, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x06, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x06, 0x00, 0x00, 0x00, 0x08, 0x08, 0x04,
+        0x04, 0x02, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
+        0x00, 0x0e, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
+        0x09, 0x07, 0x00, 0x00, 0x00, 0x04, 0x06, 0x05,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x0f, 0x00, 0x00,
+        0x00, 0x06, 0x09, 0x09, 0x08, 0x04, 0x02, 0x01,
+        0x01, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x09, 0x08,
+        0x08, 0x06, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x08, 0x0c, 0x0a, 0x0a, 0x09, 0x0f, 0x08,
+        0x08, 0x08, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01,
+        0x01, 0x07, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x0c, 0x02, 0x01, 0x07, 0x09, 0x09, 0x09,
+        0x09, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x08,
+        0x08, 0x04, 0x04, 0x02, 0x02, 0x02, 0x00, 0x00,
+        0x00, 0x06, 0x09, 0x09, 0x09, 0x06, 0x09, 0x09,
+        0x09, 0x06, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x09, 0x09, 0x0e, 0x08, 0x04, 0x03, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00,
+        0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x04, 0x02,
+        0x00, 0x00, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02,
+        0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x0f, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x08, 0x04,
+        0x02, 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x08, 0x04, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00,
+        0x00, 0x06, 0x09, 0x09, 0x09, 0x0d, 0x0d, 0x01,
+        0x01, 0x0e, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x09, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x09, 0x09,
+        0x09, 0x07, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x01, 0x01, 0x01, 0x01, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x07, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
+        0x09, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01,
+        0x01, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x00, 0x00,
+        0x00, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x01, 0x01,
+        0x01, 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x01, 0x01, 0x0d, 0x09, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x09, 0x09, 0x09, 0x09, 0x0f, 0x09, 0x09,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x0e, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00,
+        0x00, 0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05,
+        0x05, 0x02, 0x00, 0x00, 0x00, 0x09, 0x09, 0x05,
+        0x05, 0x03, 0x05, 0x05, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+        0x01, 0x0f, 0x00, 0x00, 0x00, 0x09, 0x09, 0x0f,
+        0x0f, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x09, 0x09, 0x0b, 0x0b, 0x0d, 0x0d, 0x09,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x01, 0x01,
+        0x01, 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x06, 0x04, 0x08,
+        0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x03, 0x05,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x01, 0x06, 0x08, 0x09, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0a, 0x0a,
+        0x04, 0x04, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09,
+        0x09, 0x09, 0x09, 0x0f, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x09, 0x09, 0x09, 0x06, 0x06, 0x06, 0x09,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11,
+        0x0a, 0x0a, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
+        0x00, 0x0f, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01,
+        0x01, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x02, 0x02,
+        0x02, 0x02, 0x02, 0x02, 0x02, 0x06, 0x00, 0x00,
+        0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04,
+        0x08, 0x08, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x00, 0x00,
+        0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
+        0x06, 0x06, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x08, 0x0e, 0x09, 0x09, 0x0e, 0x00, 0x00,
+        0x00, 0x01, 0x01, 0x01, 0x07, 0x09, 0x09, 0x09,
+        0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0e, 0x01, 0x01, 0x01, 0x01, 0x0e, 0x00, 0x00,
+        0x00, 0x08, 0x08, 0x08, 0x0e, 0x09, 0x09, 0x09,
+        0x09, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x09, 0x09, 0x0f, 0x01, 0x0e, 0x00, 0x00,
+        0x00, 0x04, 0x02, 0x02, 0x07, 0x02, 0x02, 0x02,
+        0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0e, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x06,
+        0x00, 0x01, 0x01, 0x01, 0x07, 0x09, 0x09, 0x09,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00,
+        0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x05, 0x02, 0x00, 0x01, 0x01, 0x01,
+        0x09, 0x05, 0x03, 0x03, 0x05, 0x09, 0x00, 0x00,
+        0x00, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x09, 0x09,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x09, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x09, 0x09,
+        0x09, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+        0x0e, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x08,
+        0x00, 0x00, 0x00, 0x00, 0x0d, 0x0a, 0x02, 0x02,
+        0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x09, 0x02, 0x04, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x00, 0x02, 0x02, 0x07, 0x02, 0x02, 0x02,
+        0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x0a, 0x0a,
+        0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x09, 0x09, 0x09, 0x0f, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x06, 0x06,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x07,
+        0x00, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x04, 0x02,
+        0x01, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x02, 0x02,
+        0x02, 0x01, 0x02, 0x02, 0x02, 0x04, 0x00, 0x00,
+        0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x00, 0x00, 0x00, 0x02, 0x04, 0x04,
+        0x04, 0x08, 0x04, 0x04, 0x04, 0x02, 0x00, 0x00,
+        0x00, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0a,
+        0x0a, 0x11, 0x11, 0x11, 0x11, 0x1f, 0x00, 0x00,
+        0x00, 0x0e, 0x09, 0x09, 0x09, 0x0f, 0x09, 0x09,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01,
+        0x01, 0x07, 0x09, 0x09, 0x09, 0x07, 0x00, 0x00,
+        0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x09, 0x09,
+        0x09, 0x07, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x01,
+        0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+        0x00, 0x0c, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x1f, 0x11, 0x00, 0x00, 0x0f, 0x01, 0x01,
+        0x01, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x00, 0x00,
+        0x00, 0x15, 0x15, 0x15, 0x15, 0x0e, 0x15, 0x15,
+        0x15, 0x15, 0x00, 0x00, 0x00, 0x06, 0x09, 0x08,
+        0x08, 0x06, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x09, 0x09, 0x09, 0x0d, 0x0d, 0x0b, 0x0b,
+        0x09, 0x09, 0x00, 0x00, 0x06, 0x09, 0x09, 0x09,
+        0x0d, 0x0d, 0x0b, 0x0b, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x09, 0x09, 0x05, 0x05, 0x03, 0x05, 0x05,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x09,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x09, 0x09, 0x0f, 0x0f, 0x09, 0x09, 0x09,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09,
+        0x09, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x06, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
+        0x09, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x09, 0x09,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x07, 0x09, 0x09, 0x09, 0x07, 0x01, 0x01,
+        0x01, 0x01, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
+        0x01, 0x01, 0x01, 0x01, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09,
+        0x09, 0x0e, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x04, 0x0e, 0x15, 0x15, 0x15, 0x15, 0x0e,
+        0x04, 0x04, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09,
+        0x06, 0x06, 0x06, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
+        0x09, 0x1f, 0x10, 0x10, 0x00, 0x09, 0x09, 0x09,
+        0x09, 0x0e, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
+        0x00, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x15,
+        0x15, 0x1f, 0x00, 0x00, 0x00, 0x15, 0x15, 0x15,
+        0x15, 0x15, 0x15, 0x15, 0x15, 0x1f, 0x10, 0x10,
+        0x00, 0x03, 0x03, 0x02, 0x02, 0x0e, 0x12, 0x12,
+        0x12, 0x0e, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09,
+        0x09, 0x0b, 0x0d, 0x0d, 0x0d, 0x0b, 0x00, 0x00,
+        0x00, 0x01, 0x01, 0x01, 0x01, 0x07, 0x09, 0x09,
+        0x09, 0x07, 0x00, 0x00, 0x00, 0x06, 0x09, 0x08,
+        0x08, 0x0e, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x09, 0x15, 0x15, 0x15, 0x17, 0x15, 0x15,
+        0x15, 0x09, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x09,
+        0x09, 0x0e, 0x0c, 0x0a, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x06, 0x08, 0x0e, 0x09,
+        0x09, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x08, 0x06,
+        0x01, 0x07, 0x09, 0x09, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x07, 0x09,
+        0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x0c, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x09, 0x09, 0x0f, 0x01, 0x0e, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x0e, 0x15,
+        0x15, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x06, 0x09, 0x04, 0x08, 0x09, 0x06, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x0d, 0x0b,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02,
+        0x09, 0x09, 0x0d, 0x0b, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x09, 0x05, 0x03, 0x03,
+        0x05, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0e, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x09, 0x0f, 0x09, 0x09,
+        0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x09, 0x0f, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09, 0x09,
+        0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0f, 0x09, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x15, 0x00, 0x00, 0x0a, 0x00, 0x00,
+        0x15, 0x00, 0x00, 0x0a, 0x00, 0x0a, 0x00, 0x15,
+        0x00, 0x0a, 0x00, 0x15, 0x00, 0x0a, 0x00, 0x15,
+        0x0a, 0x15, 0x0a, 0x15, 0x0a, 0x15, 0x0a, 0x15,
+        0x0a, 0x15, 0x0a, 0x15, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x07, 0x04, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x0f, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x07, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0b, 0x08, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00,
+        0x0f, 0x08, 0x0b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x0b, 0x08, 0x0f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x04, 0x04, 0x04, 0x04, 0x07, 0x04, 0x07, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x1c, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x1c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x1c, 0x04, 0x1c, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x1a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x1a, 0x02, 0x1e, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x1e, 0x02, 0x1a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x1b, 0x00, 0x1f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x1f, 0x00, 0x1b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x1a, 0x02, 0x1a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00,
+        0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x1b, 0x00, 0x1b, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x04, 0x04, 0x04, 0x04,
+        0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x1f, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x1f, 0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x04, 0x04, 0x04, 0x04, 0x1c, 0x04, 0x1c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x1c, 0x04, 0x1c, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0a, 0x0a,
+        0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x0a, 0x1b, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
+        0x04, 0x04, 0x04, 0x04, 0x1f, 0x00, 0x1f, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x04,
+        0x04, 0x04, 0x04, 0x04, 0x1f, 0x1f, 0x1f, 0x1f,
+        0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f,
+        0x1f, 0x1f, 0x1f, 0x1f, 0x07, 0x07, 0x07, 0x07,
+        0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+        0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
+        0x1c, 0x1c, 0x1c, 0x1c, 0x1f, 0x1f, 0x1f, 0x1f,
+        0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x07, 0x09, 0x09, 0x09,
+        0x09, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+        0x0e, 0x01, 0x01, 0x01, 0x01, 0x0e, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x1f, 0x04, 0x04, 0x04,
+        0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x07,
+        0x00, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x15, 0x15,
+        0x15, 0x0e, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x09, 0x06, 0x06, 0x09, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x09,
+        0x09, 0x1f, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x09, 0x09, 0x0e, 0x08, 0x08, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x15, 0x15, 0x15, 0x15,
+        0x15, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x15, 0x15, 0x15, 0x15, 0x15, 0x1f, 0x10, 0x10,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x02, 0x06, 0x0a,
+        0x0a, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x09, 0x09, 0x0b, 0x0d, 0x0d, 0x0b, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x07, 0x09,
+        0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x07, 0x08, 0x0e, 0x08, 0x08, 0x07, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x09, 0x15, 0x17, 0x15,
+        0x15, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0e, 0x09, 0x09, 0x0e, 0x09, 0x09, 0x00, 0x00,
+        0x09, 0x0f, 0x01, 0x01, 0x01, 0x0f, 0x01, 0x01,
+        0x01, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00,
+        0x06, 0x09, 0x09, 0x0f, 0x01, 0x0e, 0x00, 0x00,
+        0x00, 0x06, 0x09, 0x01, 0x01, 0x07, 0x01, 0x01,
+        0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0e, 0x01, 0x07, 0x01, 0x01, 0x0e, 0x00, 0x00,
+        0x11, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+        0x04, 0x0e, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x00,
+        0x06, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00,
+        0x06, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x08,
+        0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x09, 0x06,
+        0x09, 0x09, 0x09, 0x09, 0x09, 0x0e, 0x08, 0x07,
+        0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x04, 0x0e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x04,
+        0x04, 0x04, 0x05, 0x05, 0x06, 0x04, 0x00, 0x00,
+        0x00, 0x1d, 0x1d, 0x05, 0x05, 0x1f, 0x07, 0x05,
+        0x05, 0x05, 0x00, 0x00, 0x00, 0x09, 0x06, 0x09,
+        0x09, 0x09, 0x09, 0x09, 0x06, 0x09, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
diff -r 000000000000 -r 7ad454fed160 Terminal24x12.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Terminal24x12.h	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,1538 @@
+const unsigned char Text24x12[] = {
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x03, 0x03, 0x03, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0xcf, 0x03, 0xcf, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+        0xcf, 0x03, 0xcf, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xcf, 0x03, 0xcf, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcf, 0x03, 0xcf, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xc3, 0x03, 0xc3, 0x03,
+        0xc3, 0x03, 0xc3, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x03, 0x03, 0x03, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xf0, 0x03, 0xf0, 0x03, 0xc0, 0x03, 0xc0, 0x03,
+        0x30, 0x03, 0x30, 0x03, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xf0, 0x00, 0xf0, 0x00,
+        0xf0, 0x00, 0xf0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xf0, 0x00, 0xf0, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x03, 0x03, 0x03, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xf0, 0x00, 0xf0, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xfc, 0x00, 0xfc, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x03, 0x3c, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xf0, 0x00, 0xf0, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xf3, 0x00, 0xf3, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xf3, 0x00, 0xf3, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x0f, 0x00, 0x0f, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0x03, 0x03, 0x03, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x0f, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x0c, 0x00, 0x0c, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x0c, 0x03, 0x0c, 0x03, 0x0c, 0x03, 0x0c, 0x03,
+        0x0c, 0x03, 0x0c, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00, 0xf3, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x3f, 0x03, 0x3f, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xf0, 0x00, 0xf0, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xf0, 0x00, 0xf0, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0xfc, 0x00, 0xfc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00, 0x0f, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xf0, 0x03, 0xf0, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xf0, 0x03, 0xf0, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x03, 0xcc, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x03, 0xcc, 0x03, 0x0c, 0x00, 0x0c, 0x00,
+        0xfc, 0x03, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x03, 0xfc, 0x03, 0x0c, 0x00, 0x0c, 0x00,
+        0xcc, 0x03, 0xcc, 0x03, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcf, 0x03, 0xcf, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0xcf, 0x03, 0xcf, 0x03, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x03, 0xcc, 0x03, 0x0c, 0x00, 0x0c, 0x00,
+        0xcc, 0x03, 0xcc, 0x03, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcf, 0x03, 0xcf, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0xcf, 0x03, 0xcf, 0x03, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xfc, 0x03, 0xfc, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0xf0, 0x03, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0xf0, 0x03, 0xf0, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0xfc, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcf, 0x03, 0xcf, 0x03,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xf0, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03,
+        0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03,
+        0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03,
+        0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03,
+        0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03,
+        0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03, 0xf0, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xff, 0x03, 0xff, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xff, 0x03, 0xff, 0x03,
+        0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x0f, 0x00, 0x0f, 0x00, 0x0c, 0x00, 0x0c, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xcf, 0x00, 0xcf, 0x00, 0xf3, 0x00, 0xf3, 0x00,
+        0xf3, 0x00, 0xf3, 0x00, 0xcf, 0x00, 0xcf, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x33, 0x03, 0x33, 0x03,
+        0x3f, 0x03, 0x3f, 0x03, 0x33, 0x03, 0x33, 0x03,
+        0x33, 0x03, 0x33, 0x03, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xff, 0x00, 0xff, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x3f, 0x00, 0x3f, 0x00, 0x03, 0x00, 0x03, 0x00,
+        0x03, 0x00, 0x03, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x03, 0x03, 0x03, 0x03, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0xcc, 0x00,
+        0xcc, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xc0, 0x00, 0xc0, 0x00, 0x3f, 0x00, 0x3f, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0x3c, 0x00, 0x3c, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0xf0, 0x03,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0x30, 0x00, 0x30, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xf3, 0x03, 0xf3, 0x03,
+        0xf3, 0x03, 0xf3, 0x03, 0x33, 0x00, 0x33, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0xff, 0x03, 0xff, 0x03,
+        0x3f, 0x00, 0x3f, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x33, 0x00, 0x33, 0x00, 0x33, 0x00, 0x33, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x3c, 0x00, 0x3c, 0x00, 0xc3, 0x00, 0xc3, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
\ No newline at end of file
diff -r 000000000000 -r 7ad454fed160 Touchlib.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Touchlib.c	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,286 @@
+/* mbed TouchScreen ADS7846 library. 
+
+    Copyright (c) 2011 NXP 3803 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+ 
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+*/
+
+#include "mbed.h"
+#include "string.h"
+#include "Touchlib.h"
+#include "calibrate.h"
+#include "crocino.h"
+
+/* */
+unsigned char TSCmd[cTS_CMDSIZE] = { 
+    cTS_GETY,   0x00,   cTS_GETY,   0x00,       /* y */
+    cTS_GETZ1,  0x00,   cTS_GETZ1,  0x00,       /* z1 */
+    cTS_GETZ2,  0x00,   cTS_GETZ2,  0x00,       /* z2 */
+    cTS_GETX,   0x00,   cTS_END,    0x00, 0x00  /* x */
+};
+
+#define cTS_SAMPLE      8
+#define MODE12          0
+
+POINT crocino_coord[3] = {
+    {80,120},
+    {240,60},
+    {240,180}
+};
+
+MATRIX  TS_Matrix;
+
+unsigned char TSValue[cTS_CMDSIZE];
+unsigned int tap_debounce;
+
+DigitalOut TS_DBG_LED(LED4);
+    
+TOUCHS::TOUCHS(  PinName mosi, PinName miso, PinName sclk, PinName cs, PinName penirq) : _spi( mosi, miso, sclk), _cs( cs), _penirq( penirq) {
+    // defaults params
+
+}
+
+unsigned int TOUCHS::setcalibration( _TS_COORD *ts)
+{
+    POINT screen[3];
+    /* from struct TS_COORD to struct POINT. */
+    screen[0].x=ts[0].x;
+    screen[0].y=ts[0].y;
+    screen[1].x=ts[1].x;
+    screen[1].y=ts[1].y;
+    screen[2].x=ts[2].x;
+    screen[2].y=ts[2].y;        
+    /* Now start the calibration process. */
+    ts_val.calibration_done=!setCalibrationMatrix( &crocino_coord[0], &screen[0], &TS_Matrix);
+    /* Return the result. */
+    return( ts_val.calibration_done);
+}
+
+unsigned int TOUCHS::calibrate( void)
+{
+    POINT ts_tmp, coord;
+    
+    coord.x=ts_val.coord.x;
+    coord.y=ts_val.coord.y;
+    // see calibrate.c
+    getDisplayPoint( &ts_tmp, &coord, &TS_Matrix);
+    //
+    ts_val.coord.x = ts_tmp.x;
+    ts_val.coord.y = ts_tmp.y;
+    
+    return 0;
+}
+
+unsigned int TOUCHS::crocino_size( void)
+{
+    return( cTS_CROCINO);
+}
+
+unsigned int TOUCHS::getcrocino_x( unsigned char idx)
+{
+    if ( idx > 3)
+        idx=3;
+    
+    return ( crocino_coord[idx].x);
+}
+
+unsigned int TOUCHS::getcrocino_y( unsigned char idx)
+{
+    if ( idx > 3)
+        idx=3;
+    
+    return ( crocino_coord[idx].y);
+}
+
+unsigned int TOUCHS::gettsmatrixsize( void)
+{
+    return( sizeof( TS_Matrix));
+}
+
+void TOUCHS::gettsmatrix( unsigned char *pmatrix)
+{
+
+    *pmatrix++=((unsigned char*)&TS_Matrix.An)[0];
+    *pmatrix++=((unsigned char*)&TS_Matrix.An)[1];
+    *pmatrix++=((unsigned char*)&TS_Matrix.An)[2];
+    *pmatrix++=((unsigned char*)&TS_Matrix.An)[3];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[0];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[1];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[2];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Bn)[3];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[0];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[1];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[2];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Cn)[3];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[0];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[1];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[2];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Dn)[3];
+    *pmatrix++=((unsigned char*)&TS_Matrix.En)[0];
+    *pmatrix++=((unsigned char*)&TS_Matrix.En)[1];
+    *pmatrix++=((unsigned char*)&TS_Matrix.En)[2];
+    *pmatrix++=((unsigned char*)&TS_Matrix.En)[3];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[0];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[1];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[2];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Fn)[3];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[0];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[1];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[2];
+    *pmatrix++=((unsigned char*)&TS_Matrix.Divider)[3];
+
+}
+
+void TOUCHS::settsmatrix( unsigned char *pmatrix)
+{
+
+    ((unsigned char*)&TS_Matrix.An)[0]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.An)[1]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.An)[2]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.An)[3]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Bn)[0]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Bn)[1]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Bn)[2]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Bn)[3]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Cn)[0]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Cn)[1]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Cn)[2]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Cn)[3]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Dn)[0]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Dn)[1]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Dn)[2]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Dn)[3]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.En)[0]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.En)[1]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.En)[2]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.En)[3]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Fn)[0]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Fn)[1]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Fn)[2]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Fn)[3]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Divider)[0]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Divider)[1]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Divider)[2]=*pmatrix++;
+    ((unsigned char*)&TS_Matrix.Divider)[3]=*pmatrix++;
+    
+    ts_val.calibration_done=1;
+        
+}
+
+void TOUCHS::init( void)
+{
+    _spi.format( 8, BUS_MODE);
+    _spi.frequency( TS_SPEED);
+    
+}
+
+
+void TOUCHS::do_tap( void)
+{
+    unsigned int i, x, y;
+    
+    if ( TOUCHS::pressure() && ts_val.touched==0) {
+        printf("press: %d\r\n", tap_debounce );
+        tap_debounce++;
+        if ( tap_debounce>= cTS_DEBOUNCE) {
+            tap_debounce=0;
+            ts_val.touched=1;
+            for ( i=4, x=0,y=0; i!=0; i--) {
+                TOUCHS::read( &ts_val.coord);
+                x+=ts_val.coord.x;
+                y+=ts_val.coord.y;
+            }
+            ts_val.coord.x=x>>2;
+            ts_val.coord.y=y>>2;
+            // If the calibration process was successful complited...
+            if ( ts_val.calibration_done) {
+                // ...run the convertion from touch to screen coord.
+                TOUCHS::calibrate();       
+            }         
+        }
+    }       
+}
+
+unsigned int TOUCHS::pressure( void)
+{
+    unsigned char pressure; 
+    unsigned char iZ2, iZ1;
+
+    _spi.frequency( TS_SPEED);
+   
+    _cs = 0;                            /* Seleziono il CS del TS */
+    
+    _spi.write( 0xB0);    
+    iZ1 = _spi.write( 0x00);
+    //
+    _spi.write( 0xC0);
+    iZ2 = 127-_spi.write( 0x00);
+    _cs = 1;                            /* De-Seleziono il CS del TS */
+    
+    pressure=iZ1+iZ2;
+   
+    if ( pressure > 3) {
+        // ts_val.touched=1;
+        return( 1);
+    } else {
+        // ts_val.touched=0;
+        return( 0);  
+    }        
+    
+}
+
+/* Read the value from the touch. Write the raw value inside the struct TS_COORD. */
+void TOUCHS::read( _TS_COORD *ts)
+{
+    unsigned int i, idx;
+    unsigned int iZ1, iZ2;
+    
+    _spi.frequency( TS_SPEED);
+    
+    idx=0;
+    while( 1) {
+        //
+        i=0;
+        _cs = 0;                            /* Assert the CS */
+            
+        while ( i<cTS_CMDSIZE) {
+            TSValue[i] = _spi.write( TSCmd[i]);
+            /* */
+            i++;
+        }
+        
+        _cs = 1;                            /* Deasser the CS */
+    
+        /* */
+        ts->x = ((unsigned int)TSValue[15]<<5) | (TSValue[16]>>3);
+        ts->y = ((unsigned int)TSValue[3]<<5) | (TSValue[4]>>3);
+        iZ2   = ((unsigned int)TSValue[11]<<5) | (TSValue[12]>>3);
+        iZ1   = ((unsigned int)TSValue[7]<<5) | (TSValue[8]>>3);
+        ts->z =  (int)(330.0 * (((double)ts->x)/4096.0)*((((double)iZ2)/((double)iZ1))-1.0));
+    
+        /* Reduce the value to 10bit */
+        ts->y = (ts->y >> MODE12);
+        ts->x = (ts->x >> MODE12);
+        
+        idx++;
+        if ( ts->z < 10000 || idx>10)
+            break;
+    }
+}
+
diff -r 000000000000 -r 7ad454fed160 Touchlib.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Touchlib.h	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,201 @@
+/* mbed TouchScreen ADS7846 library. 
+
+    Copyright (c) 2011 NXP 3803 
+ 
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+ 
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+ 
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+    THE SOFTWARE.
+*/
+
+#ifndef __TOOUCH_H
+#define __TOOUCH_H
+
+#include "mbed.h"
+#include "calibrate.h"
+
+/* Define per la compilazione del codice di gestione del PENIRQ */
+#define SW_PENIRQ
+/* */
+#define cTS_STARTBIT    0x80
+#define cTS_MODE    0x00
+#define cTS_SERDFR    0x00    /* SER/DFR =1 -> 0x04, */
+#define cTS_PWRUP    0x03    /* Device is powered ON, PENIRQ OFF */
+#define cTS_PWRDWN    0x00    /* Device is powered OFF, PENIRQ ON */
+/* */
+#define cTS_GETY    (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x10)
+#define cTS_GETX    (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x50)
+#define cTS_GETZ1    (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x30)
+#define cTS_GETZ2    (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x40)
+#define cTS_VBAT    (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRUP|0x20)
+#define cTS_END        (cTS_STARTBIT|cTS_MODE|cTS_SERDFR|cTS_PWRDWN|0x50)
+/* */
+#define cTS_CMDSIZE    17
+#define cTS_CROCINO    16
+/* */
+#define cTS_DEBOUNCE    2        /* 3ms di debounce x la pressione del touch */
+/* FSM per la lettura del touch */
+#define cTS_INIT        6
+#define cTS_START       1
+#define cTS_READ        2
+#define cTS_RELEASING   3
+#define cTS_RELEASED    4
+#define cTS_STOP        5
+
+#define TS_SPEED            1000000        /* 1Mbit */
+#define BUS_MODE            3
+
+/* We read the sample MAX_SAMPLES times*/
+#define    MAX_SAMPLES        8
+
+
+/* Data structure: x, y and pressure */
+struct _TS_COORD {
+    unsigned int        x;
+    unsigned int        y;
+    int                 z;
+};
+
+/* Collection of data about the touch... */
+struct _TS_VALUE {
+    _TS_COORD                   coord;              /* tap's coord. */
+    volatile unsigned char      touched;            /* == 1 pen down. */
+    unsigned char               calibration_done;   /* calibration done. */
+};
+
+/** TouchScreen ADS7846 Library
+ *  From the DS:
+ * The ADS7846 is a classic successive approximation register
+ * (SAR) analog-to-digital converter (ADC). The architecture is
+ * based on capacitive redistribution which inherently includes
+ * a sample-and-hold function. The converter is fabricated on a
+ * 0.6μm CMOS process.
+ * 
+ * The device features an internal 2.5V reference and an
+ * external clock. Operation is maintained from a single supply
+ * of 2.7V to 5.25V. The internal reference can be overdriven
+ * with an external, low impedance source between 1V and
+ * +VCC. The value of the reference voltage directly sets the
+ * input range of the converter.
+ * The analog input (X-, Y-, and Z-position coordinates, auxiliary
+ * input, battery voltage, and chip temperature) to the
+ * converter is provided via a multiplexer. A unique configuration
+ * of low on-resistance touch panel driver switches allows
+ * an unselected ADC input channel to provide power and its
+ * accompanying pin to provide ground for an external device,
+ * such as a touch screen
+ * 
+ * Example:
+ * @code
+ * // Please the main.c code as an elabora example.
+ *
+ * @endcode
+ */
+
+//
+class TOUCHS {
+
+public:
+
+    /** Create the touch object
+     *
+     * @param pin mosi, pin miso, pin sclk, pin chip select and pin penirq
+     */
+    TOUCHS( PinName mosi, PinName miso, PinName sclk, PinName cs, PinName penirq);
+    
+    /** Initalize the touchscreen chip.
+     *
+     * @param none
+     */
+    void init( void);
+
+    /** This function computes a matrix of data to be used for the conversion from touch to screen coord.
+     * 
+     * @param the coord of each crocino tapped by the user.
+     */
+    unsigned int setcalibration( _TS_COORD *ts);    
+    
+    /** I use a pool metod to read the touch. Each time I need to read the touch I loop until this function
+     *  set a flag. It's also possible to configure this fuction as an handle of a Ticker class, checkin for 
+     *  the flag inside the main loop.
+     */
+    void do_tap( void);
+    
+    /** Get the x coord of the crocino speicifyed by idx. There are three crocino defined inside the crocino.h header file
+     *
+     * @param idx One of the three crocino.
+     * @return the x coord.
+     */
+    unsigned int getcrocino_x( unsigned char idx);
+    
+    /** Get the y coord of the crocino speicifyed by idx. There are three crocino defined inside the crocino.h header file
+     *
+     * @param idx One of the three crocino.
+     * @return the x coord.
+     */    
+    unsigned int getcrocino_y( unsigned char idx);
+    
+    /** Get the pixel size of the crocino.
+     *
+     * @return the pixel size of the crocino.
+     */    
+    unsigned int crocino_size( void);
+    
+    /** Return the size of the TS_Matrix size.
+     *
+     * @return the size of the TS_Matrix
+     */
+    unsigned int gettsmatrixsize( void);
+    
+    /** Get the TS_Matrix 
+     *
+     * @param pmatrix Pointer to an area of RAM where the function store the content of the TS_Matrix
+     */
+    void gettsmatrix( unsigned char *pmatrix);
+    
+    /** Set the TS_Matrix with the content of the buffer.
+     *
+     * @param pmatrix Pointer to a buffer 
+     */
+    void settsmatrix( unsigned char *pmatrix);
+    
+    //
+    _TS_VALUE       ts_val;
+    
+protected:
+    /**
+     */
+    unsigned int pressure( void);
+        
+    /** This function convert from touch to screen coord.
+     *  The value are stored inside the struct ts_val
+     */
+    unsigned int calibrate( void);
+
+    /** Read the raw coordinate from the touchscreen 
+     *
+     * @param struct ts that will old the data.
+     */
+    void read( _TS_COORD *ts);
+    
+    _TS_VALUE       TS_value;
+    _TS_COORD       TS_coord;
+    SPI             _spi;
+    DigitalOut      _cs;
+    InterruptIn     _penirq;
+};
+
+#endif
\ No newline at end of file
diff -r 000000000000 -r 7ad454fed160 calibrate.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calibrate.c	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,363 @@
+/*
+ *
+ *   Copyright (c) 2001, Carlos E. Vidales. All rights reserved.
+ *
+ *   This sample program was written and put in the public domain 
+ *    by Carlos E. Vidales.  The program is provided "as is" 
+ *    without warranty of any kind, either expressed or implied.
+ *   If you choose to use the program within your own products
+ *    you do so at your own risk, and assume the responsibility
+ *    for servicing, repairing or correcting the program should
+ *    it prove defective in any manner.
+ *   You may copy and distribute the program's source code in any 
+ *    medium, provided that you also include in each copy an
+ *    appropriate copyright notice and disclaimer of warranty.
+ *   You may also modify this program and distribute copies of
+ *    it provided that you include prominent notices stating 
+ *    that you changed the file(s) and the date of any change,
+ *    and that you do not charge any royalties or licenses for 
+ *    its use.
+ * 
+ *
+ * 
+ *   File Name:  calibrate.c
+ *
+ *
+ *   This file contains functions that implement calculations 
+ *    necessary to obtain calibration factors for a touch screen
+ *    that suffers from multiple distortion effects: namely, 
+ *    translation, scaling and rotation.
+ *
+ *   The following set of equations represent a valid display 
+ *    point given a corresponding set of touch screen points:
+ *
+ *
+ *                                              /-     -\
+ *              /-    -\     /-            -\   |       |
+ *              |      |     |              |   |   Xs  |
+ *              |  Xd  |     | A    B    C  |   |       |
+ *              |      |  =  |              | * |   Ys  |
+ *              |  Yd  |     | D    E    F  |   |       |
+ *              |      |     |              |   |   1   |
+ *              \-    -/     \-            -/   |       |
+ *                                              \-     -/
+ *
+ * 
+ *    where:
+ *
+ *           (Xd,Yd) represents the desired display point 
+ *                    coordinates,
+ *
+ *           (Xs,Ys) represents the available touch screen
+ *                    coordinates, and the matrix
+ *
+ *           /-   -\
+ *           |A,B,C|
+ *           |D,E,F| represents the factors used to translate
+ *           \-   -/  the available touch screen point values
+ *                    into the corresponding display 
+ *                    coordinates.
+ *
+ *
+ *    Note that for practical considerations, the utilitities 
+ *     within this file do not use the matrix coefficients as
+ *     defined above, but instead use the following 
+ *     equivalents, since floating point math is not used:
+ *
+ *            A = An/Divider 
+ *            B = Bn/Divider 
+ *            C = Cn/Divider 
+ *            D = Dn/Divider 
+ *            E = En/Divider 
+ *            F = Fn/Divider 
+ *
+ *
+ *
+ *    The functions provided within this file are:
+ *
+ *          setCalibrationMatrix() - calculates the set of factors
+ *                                    in the above equation, given
+ *                                    three sets of test points.
+ *               getDisplayPoint() - returns the actual display
+ *                                    coordinates, given a set of
+ *                                    touch screen coordinates.
+ * translateRawScreenCoordinates() - helper function to transform
+ *                                    raw screen points into values
+ *                                    scaled to the desired display
+ *                                    resolution.
+ *
+ *
+ */
+
+
+#define _CALIBRATE_C_
+
+
+
+/****************************************************/
+/*                                                  */
+/* Included files                                   */
+/*                                                  */
+/****************************************************/
+
+#include "calibrate.h"
+
+
+
+/****************************************************/
+/*                                                  */
+/* Local Definitions and macros                     */
+/*                                                  */
+/****************************************************/
+
+
+
+/****************************************************/
+/*                                                  */
+/* Global variables                                 */
+/*                                                  */
+/****************************************************/
+
+
+
+/****************************************************/
+/*                                                  */
+/* Forward Declaration of local functions           */
+/*                                                  */
+/****************************************************/
+
+
+
+
+
+
+/**********************************************************************
+ *
+ *     Function: setCalibrationMatrix()
+ *
+ *  Description: Calling this function with valid input data
+ *                in the display and screen input arguments 
+ *                causes the calibration factors between the
+ *                screen and display points to be calculated,
+ *                and the output argument - matrixPtr - to be 
+ *                populated.
+ *
+ *               This function needs to be called only when new
+ *                calibration factors are desired.
+ *               
+ *  
+ *  Argument(s): displayPtr (input) - Pointer to an array of three 
+ *                                     sample, reference points.
+ *               screenPtr (input) - Pointer to the array of touch 
+ *                                    screen points corresponding 
+ *                                    to the reference display points.
+ *               matrixPtr (output) - Pointer to the calibration 
+ *                                     matrix computed for the set 
+ *                                     of points being provided.
+ *
+ *
+ *  From the article text, recall that the matrix coefficients are
+ *   resolved to be the following:
+ *
+ *
+ *      Divider =  (Xs0 - Xs2)*(Ys1 - Ys2) - (Xs1 - Xs2)*(Ys0 - Ys2)
+ *
+ *
+ *
+ *                 (Xd0 - Xd2)*(Ys1 - Ys2) - (Xd1 - Xd2)*(Ys0 - Ys2)
+ *            A = ---------------------------------------------------
+ *                                   Divider
+ *
+ *
+ *                 (Xs0 - Xs2)*(Xd1 - Xd2) - (Xd0 - Xd2)*(Xs1 - Xs2)
+ *            B = ---------------------------------------------------
+ *                                   Divider
+ *
+ *
+ *                 Ys0*(Xs2*Xd1 - Xs1*Xd2) + 
+ *                             Ys1*(Xs0*Xd2 - Xs2*Xd0) + 
+ *                                           Ys2*(Xs1*Xd0 - Xs0*Xd1)
+ *            C = ---------------------------------------------------
+ *                                   Divider
+ *
+ *
+ *                 (Yd0 - Yd2)*(Ys1 - Ys2) - (Yd1 - Yd2)*(Ys0 - Ys2)
+ *            D = ---------------------------------------------------
+ *                                   Divider
+ *
+ *
+ *                 (Xs0 - Xs2)*(Yd1 - Yd2) - (Yd0 - Yd2)*(Xs1 - Xs2)
+ *            E = ---------------------------------------------------
+ *                                   Divider
+ *
+ *
+ *                 Ys0*(Xs2*Yd1 - Xs1*Yd2) + 
+ *                             Ys1*(Xs0*Yd2 - Xs2*Yd0) + 
+ *                                           Ys2*(Xs1*Yd0 - Xs0*Yd1)
+ *            F = ---------------------------------------------------
+ *                                   Divider
+ *
+ *
+ *       Return: OK - the calibration matrix was correctly 
+ *                     calculated and its value is in the 
+ *                     output argument.
+ *               NOT_OK - an error was detected and the 
+ *                         function failed to return a valid
+ *                         set of matrix values.
+ *                        The only time this sample code returns
+ *                        NOT_OK is when Divider == 0
+ *
+ *
+ *
+ *                 NOTE!    NOTE!    NOTE!
+ *
+ *  setCalibrationMatrix() and getDisplayPoint() will do fine
+ *  for you as they are, provided that your digitizer         
+ *  resolution does not exceed 10 bits (1024 values).  Higher
+ *  resolutions may cause the integer operations to overflow
+ *  and return incorrect values.  If you wish to use these   
+ *  functions with digitizer resolutions of 12 bits (4096    
+ *  values) you will either have to a) use 64-bit signed     
+ *  integer variables and math, or b) judiciously modify the 
+ *  operations to scale results by a factor of 2 or even 4.  
+ *
+ *
+ */
+unsigned char setCalibrationMatrix( POINT * displayPtr,
+                          POINT * screenPtr,
+                          MATRIX * matrixPtr)
+{
+
+    unsigned char   retValue = OK ;
+
+
+    
+    matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - 
+                         ((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
+
+    if( matrixPtr->Divider == 0 )
+    {
+        retValue = NOT_OK ;
+    }
+    else
+    {
+        matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - 
+                        ((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
+
+        matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) - 
+                        ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ;
+
+        matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y +
+                        (screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y +
+                        (screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ;
+
+        matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) - 
+                        ((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ;
+    
+        matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) - 
+                        ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ;
+
+        matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y +
+                        (screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y +
+                        (screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ;
+    }
+ 
+    return( retValue ) ;
+
+} /* end of setCalibrationMatrix() */
+
+
+
+/**********************************************************************
+ *
+ *     Function: getDisplayPoint()
+ *
+ *  Description: Given a valid set of calibration factors and a point
+ *                value reported by the touch screen, this function
+ *                calculates and returns the true (or closest to true)
+ *                display point below the spot where the touch screen 
+ *                was touched.
+ * 
+ *
+ * 
+ *  Argument(s): displayPtr (output) - Pointer to the calculated
+ *                                      (true) display point.
+ *               screenPtr (input) - Pointer to the reported touch
+ *                                    screen point.
+ *               matrixPtr (input) - Pointer to calibration factors
+ *                                    matrix previously calculated
+ *                                    from a call to 
+ *                                    setCalibrationMatrix()
+ * 
+ *
+ *  The function simply solves for Xd and Yd by implementing the 
+ *   computations required by the translation matrix.  
+ * 
+ *                                              /-     -\
+ *              /-    -\     /-            -\   |       |
+ *              |      |     |              |   |   Xs  |
+ *              |  Xd  |     | A    B    C  |   |       |
+ *              |      |  =  |              | * |   Ys  |
+ *              |  Yd  |     | D    E    F  |   |       |
+ *              |      |     |              |   |   1   |
+ *              \-    -/     \-            -/   |       |
+ *                                              \-     -/
+ * 
+ *  It must be kept brief to avoid consuming CPU cycles.
+ * 
+ *
+ *       Return: OK - the display point was correctly calculated 
+ *                     and its value is in the output argument.
+ *               NOT_OK - an error was detected and the function
+ *                         failed to return a valid point.
+ *
+ *
+ *
+ *                 NOTE!    NOTE!    NOTE!
+ *
+ *  setCalibrationMatrix() and getDisplayPoint() will do fine
+ *  for you as they are, provided that your digitizer         
+ *  resolution does not exceed 10 bits (1024 values).  Higher
+ *  resolutions may cause the integer operations to overflow
+ *  and return incorrect values.  If you wish to use these   
+ *  functions with digitizer resolutions of 12 bits (4096    
+ *  values) you will either have to a) use 64-bit signed     
+ *  integer variables and math, or b) judiciously modify the 
+ *  operations to scale results by a factor of 2 or even 4.  
+ *
+ *
+ */
+unsigned char getDisplayPoint( POINT * displayPtr,
+                     POINT * screenPtr,
+                     MATRIX * matrixPtr )
+{
+    unsigned char retValue = OK ;
+
+
+    if( matrixPtr->Divider != 0 )
+    {
+
+            /* Operation order is important since we are doing integer */
+            /*  math. Make sure you add all terms together before      */
+            /*  dividing, so that the remainder is not rounded off     */
+            /*  prematurely.                                           */
+
+        displayPtr->x = ( (matrixPtr->An * screenPtr->x) + 
+                          (matrixPtr->Bn * screenPtr->y) + 
+                           matrixPtr->Cn 
+                        ) / matrixPtr->Divider ;
+
+        displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) + 
+                          (matrixPtr->En * screenPtr->y) + 
+                           matrixPtr->Fn 
+                        ) / matrixPtr->Divider ;
+    }
+    else
+    {
+        retValue = NOT_OK ;
+    }
+
+    return( retValue ) ;
+
+} /* end of getDisplayPoint() */
+
diff -r 000000000000 -r 7ad454fed160 calibrate.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calibrate.h	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,117 @@
+/*
+ *
+ *   Copyright (c) 2001, Carlos E. Vidales. All rights reserved.
+ *
+ *   This sample program was written and put in the public domain 
+ *    by Carlos E. Vidales.  The program is provided "as is" 
+ *    without warranty of any kind, either expressed or implied.
+ *   If you choose to use the program within your own products
+ *    you do so at your own risk, and assume the responsibility
+ *    for servicing, repairing or correcting the program should
+ *    it prove defective in any manner.
+ *   You may copy and distribute the program's source code in any 
+ *    medium, provided that you also include in each copy an
+ *    appropriate copyright notice and disclaimer of warranty.
+ *   You may also modify this program and distribute copies of
+ *    it provided that you include prominent notices stating 
+ *    that you changed the file(s) and the date of any change,
+ *    and that you do not charge any royalties or licenses for 
+ *    its use.
+ * 
+ *
+ *   File Name:  calibrate.h
+ *
+ *
+ *   Definition of constants and structures, and declaration of functions 
+ *    in Calibrate.c
+ *
+ */
+
+#ifndef _CALIBRATE_H_
+
+#define _CALIBRATE_H_
+
+/****************************************************/
+/*                                                  */
+/* Included files                                   */
+/*                                                  */
+/****************************************************/
+
+#include <math.h>
+
+
+/****************************************************/
+/*                                                  */
+/* Definitions                                      */
+/*                                                  */
+/****************************************************/
+
+#ifndef		_CALIBRATE_C_
+	#define		EXTERN         extern
+#else
+	#define		EXTERN
+#endif
+
+
+
+#ifndef		OK
+	#define		OK		        0
+	#define		NOT_OK		    1
+#endif
+
+
+
+#define			INT32				long
+
+
+
+
+/****************************************************/
+/*                                                  */
+/* Structures                                       */
+/*                                                  */
+/****************************************************/
+
+
+typedef struct Point {
+                        INT32    x,
+                                 y ;
+                     } POINT ;
+
+
+
+typedef struct Matrix {
+							/* This arrangement of values facilitates 
+							 *  calculations within getDisplayPoint() 
+							 */
+                        INT32    An,     /* A = An/Divider */
+                                 Bn,     /* B = Bn/Divider */
+                                 Cn,     /* C = Cn/Divider */
+                                 Dn,     /* D = Dn/Divider */
+                                 En,     /* E = En/Divider */
+                                 Fn,     /* F = Fn/Divider */
+                                 Divider ;
+                     } MATRIX ;
+
+
+
+
+/****************************************************/
+/*                                                  */
+/* Function declarations                            */
+/*                                                  */
+/****************************************************/
+
+
+EXTERN unsigned char  setCalibrationMatrix( POINT * display,
+                                 POINT * screen,
+                                 MATRIX * matrix) ;
+
+
+EXTERN unsigned char getDisplayPoint( POINT * display,
+                            POINT * screen,
+                            MATRIX * matrix ) ;
+
+
+#endif  /* _CALIBRATE_H_ */
+
diff -r 000000000000 -r 7ad454fed160 crocino.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/crocino.h	Wed May 23 06:25:31 2012 +0000
@@ -0,0 +1,48 @@
+const unsigned int crocino[]=
+{
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+    
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,    
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00000000,0x00000000,
+    0x00000000,0x00000000,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,
+
+    0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00000000,0x00000000,
+    0x00000000,0x00000000,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,0x00FFFFFF,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,    
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+
+    0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00FFFFFF,
+    0x00FFFFFF,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000
+};
+    
\ No newline at end of file