Version of Robotron arcade game using LPC1768, a Gameduino shield, a serial EEPROM (for high scores), two microswitch joysticks and two buttons plus a box to put it in. 20 levels of mayhem.

Dependencies:   25LCxxx_SPI CommonTypes Gameduino mbed

Files at this revision

API Documentation at this revision

Comitter:
RichardE
Date:
Thu Jun 06 20:11:28 2013 +0000
Parent:
1:dfd5eaaf96a3
Child:
3:a6a0cd726ca0
Commit message:
More code brought in from Maple version. Now uses fancy character set and displays Robotric logo. Started re-writing I2C EEPROM code as SPI EEPROM code since now using an SPI EEPROM but not finished yet.

Changed in this revision

CharFrame.cpp Show annotated file Show diff for this revision Revisions of this file
CharFrame.h Show annotated file Show diff for this revision Revisions of this file
GameRobotRic.cpp Show annotated file Show diff for this revision Revisions of this file
HighScoreTable.cpp Show annotated file Show diff for this revision Revisions of this file
HighScoreTable.h Show annotated file Show diff for this revision Revisions of this file
I2CEEPROM.cpp Show diff for this revision Revisions of this file
I2CEEPROM.h Show diff for this revision Revisions of this file
Level.h Show annotated file Show diff for this revision Revisions of this file
Level0.cpp Show annotated file Show diff for this revision Revisions of this file
SPIEEPROM.cpp Show annotated file Show diff for this revision Revisions of this file
SPIEEPROM.h Show annotated file Show diff for this revision Revisions of this file
sprite.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CharFrame.cpp	Thu Jun 06 20:11:28 2013 +0000
@@ -0,0 +1,57 @@
+/*
+ * SOURCE FILE : CharFrame.cpp
+ *
+ * For drawing rectangular frames using characters.
+ *
+ */
+
+#include "CharFrame.h"
+#include "GDConst.h"      // a few Gameduino constants
+#include "CharCodes.h"    // character set codes
+
+/****************/
+/* DRAW A FRAME */
+/****************/
+// Pass Gameduino to draw on in gd.
+// Pass x coordinate of top left in x.
+// Pass y coordinate of top left in y.
+// Pass width in w.
+// Pass height in h.
+void CharFrame::Draw( Gameduino *gd, UInt8 x, UInt8 y, UInt8 w, UInt8 h ) {
+  // Calculate address for top left.
+  unsigned int rowStart = Gameduino::RAM_PIC + y * SCREEN_CHAR_WIDTH + x;
+  unsigned int address = rowStart;
+  UInt8 count;
+  // Draw top left corner.
+  gd->wr( address++, TopLeft );
+  // Draw top edge.
+  if( w > 2 ) {
+    for( count = w - 2; count > 0; --count ) {
+      gd->wr( address++, Top );
+    }
+  }
+  // Draw top right corner.
+  gd->wr( address, TopRight );
+  // Draw left and right edges.
+  rowStart += SCREEN_CHAR_WIDTH;
+  if( h > 2 ) {
+    for( count = h - 2; count > 0; --count ) {
+      gd->wr( rowStart, Left );
+      gd->wr( rowStart + w - 1, Right );
+      rowStart += SCREEN_CHAR_WIDTH;
+    }
+  }
+  // Draw bottom edge.
+  address = rowStart;
+  // Draw bottom left corner.
+  gd->wr( address++, BottomLeft );
+  // Draw bottom edge.
+  if( w > 2 ) {
+    for( count = w - 2; count > 0; --count ) {
+      gd->wr( address++, Bottom );
+    }
+  }
+  // Draw bottom right corner.
+  gd->wr( address, BottomRight );
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CharFrame.h	Thu Jun 06 20:11:28 2013 +0000
@@ -0,0 +1,34 @@
+/*
+ * SOURCE FILE : CharFrame.h
+ *
+ * For drawing rectangular frames using characters.
+ *
+ */
+
+#ifndef CharFrameIncluded
+  
+  #define CharFrameIncluded
+
+  #include "Types.h"    // various types
+  #include "Gameduino.h"    // Gameduino stuff
+  
+  class CharFrame {
+
+  public :
+  
+    /****************/
+    /* DRAW A FRAME */
+    /****************/
+    // Pass Gameduino to draw on in gd.
+    // Pass x coordinate of top left in x.
+    // Pass y coordinate of top left in y.
+    // Pass width in w.
+    // Pass height in h.
+    static void Draw( Gameduino *gd, UInt8 x, UInt8 y, UInt8 w, UInt8 h );
+
+  };
+  
+#endif
+
+/* END of CharFrame.h */
+
--- a/GameRobotRic.cpp	Wed Jun 05 22:05:41 2013 +0000
+++ b/GameRobotRic.cpp	Thu Jun 06 20:11:28 2013 +0000
@@ -8,8 +8,9 @@
 #include "GameRobotRic.h"          // this module's prototypes
 #include "Types.h"                 // various integer types etc.
 #include "LevelCollection.h"       // all the levels
+#include "sprite.h"                // sprite data
+#include "RobotRicCharacterSet.h"  // character set used in this game
 #if 0
-    #include "RobotRicCharacterSet.h"  // character set used in this game
     #include "GDExtra.h"               // extra Gameduino functions
     #include "GDConst.h"               // a few more Gameduino constants
     #include "ArenaConst.h"            // gameplay arena constants
@@ -54,9 +55,15 @@
 /*****************/
 // This NEVER exits.
 void GameRobotRic::Play( void ) {
-    // Make a digital output for use with Gameduino.
-    DigitalOut cs( p8 );
-    // Initialise an SPI link for communications with Gameduino.
+    // Make a digital output for use as the Gameduino chip select pin. Deselect it.
+    DigitalOut gameduinoCS( p8 );
+    gameduinoCS = 1;
+    // Make a digital output for use as the Gameduino chip select pin. Deselect it.
+    DigitalOut eepromCS( p14 );
+    eepromCS = 1;
+    // Initialise an SPI link for communications with Gameduino and the serial EEPROM.
+    // This is different from how the Maple version of RobotRic did it. It used an
+    // I2C EEPROM.
     // Use pin 5 for MOSI.
     // Use pin 6 for MISO.
     // Use pin 7 for SCK.
@@ -68,24 +75,30 @@
     // Use SPI mode 0.
     spi.format( 8, 0 );
     // Make a Gameduino and pass SPI link and digital output for chip select.
-    Gameduino gd( &spi, &cs );
+    Gameduino gd( &spi, &gameduinoCS );
     // Reset the Gameduino.
     gd.begin();
-    // Lets have a default ASCII character set.
-    gd.ascii();
-    // Display sign on message.
-    gd.putstr( 3, 10, "RobotRic is up and running!" );
-#if 0
-    // Initialise I2C communications (to talk to serial EEPROM).
-  Wire.begin( EEPROM_SDA, EEPROM_SCL );
-    // Initialise serial EEPROM object with EEPROM address of zero.
-    I2CEEPROM eeprom;
-    eeprom.Open( &Wire, ADDRESS_OF_EEPROM, EEPROM_WP );
+    gd.copy( Gameduino::RAM_SPRIMG, sprite_sprimg, sizeof( sprite_sprimg ) );
+    // Copy sprite palette data into Gameduino memory.
+    gd.copy( Gameduino::RAM_SPRPAL, sprite_sprpal, sizeof( sprite_sprpal ) );
+    // Initialise character set pixel data RAM.
+    gd.copy( Gameduino::RAM_CHR, RobotRicCharacterSet::PixelData, ( LAST_CHAR_IN_CHARACTER_SET + 1 ) << 4 );
+    // Initialise character set pixel palette RAM.
+    gd.copy( Gameduino::RAM_PAL, RobotRicCharacterSet::PaletteData, ( LAST_CHAR_IN_CHARACTER_SET + 1 ) << 3 );
+    // Turn off JK collision detection. Every sprite collides with every other.
+    // Did it this way because I could not resolve some problems with wandering humans.
+    // Suppose JK collision detection were used. The player sprite is of type J and humans
+    // are of type K so collisions between them will register allowing humans to be rescued.
+    // However, I also need some enemies (Crushers for example) to be able to collide with
+    // humans so they would need to be J type to collide with humans. But then player and
+    // enemies are both J type and so collisions between players and enemies are not detected.
+    gd.wr( Gameduino::JK_MODE, 0 );
+    // Initialise serial EEPROM object which is on same SPI bus as the Gameduino.
+    SPIEEPROM eeprom( &spi, &eepromCS );
     // Create a high score table that uses the EEPROM.
     HighScoreTable highScores( &eeprom );
-#endif
-  // Start on the attract level.
-  UInt8 levelNumber = LevelCollection::AttractLevel;
+    // Start on the attract level.
+    UInt8 levelNumber = LevelCollection::AttractLevel;
 #if 0
   player.Lives = START_LIVES;
 #endif
@@ -144,7 +157,5 @@
     // Wait a bit.
     wait( (float)2 );
   }
-// Finished with Gameduino.
-gd.end();
 }
 
--- a/HighScoreTable.cpp	Wed Jun 05 22:05:41 2013 +0000
+++ b/HighScoreTable.cpp	Thu Jun 06 20:11:28 2013 +0000
@@ -1,259 +1,259 @@
-/*
- * SOURCE FILE : HighScoreTable.cpp
- *
- * Definition of class HighScoreTable.
- * Maintains a table of high scores with a name and a score for each entry in the table.
- *
- * The table is stored in EEPROM at an address specified when you call the constructor.
- * The table is structured as follows. This shows a table with a capacity of 3.
- *
- * Byte offset      Usage
- * -----------      -----
- * 0                Index of highest score in data that follows
- * 1                Index of second highest score in data that follows
- * 2                Index of third highest score in data that follows
- *
- * 3                First character of player's name
- * 4                Second character of player's name
- * 5                Third character of player's name
- * 6                LSB of score (in BCD)
- * 7                Byte 1 of score (in BCD)
- * 8                Byte 2 of score (in BCD)
- * 9                MSB of score (in BCD)
- * 10               Unused
- *
- * 11               First character of player's name
- * 12               Second character of player's name
- * 13               Third character of player's name
- * 14               LSB of score (in BCD)
- * 15               Byte 1 of score (in BCD)
- * 16               Byte 2 of score (in BCD)
- * 17               MSB of score (in BCD)
- * 18               Unused
- *
- * 19               First character of player's name
- * 20               Second character of player's name
- * 21               Third character of player's name
- * 22               LSB of score (in BCD)
- * 23               Byte 1 of score (in BCD)
- * 24               Byte 2 of score (in BCD)
- * 25               MSB of score (in BCD)
- * 26               Unused
- *
- * So, assuming the capacity of the table is N, the first N bytes form an index which is used to locate
- * items in the remaining N*8 bytes that follow. This is done so that inserting a new entry only involves
- * overwriting one name/score record and updating the index. You don't have to re-write all the records
- * that move down the table to make room for the new one.
- *
- */
-
-#include "HighScoreTable.h"
-
-/***************/
-/* CONSTRUCTOR */
-/***************/
-// Pass pointer to an I2C EEPROM which contains the high scores.
-HighScoreTable::HighScoreTable( I2CEEPROM *e ) :
-    eeprom( e )
-{
-}
-
-/**************/
-/* DESTRUCTOR */
-/**************/
-HighScoreTable::~HighScoreTable() {
-}
-
-/****************************************/
-/* VALIDATE EEPROM USED FOR HIGH SCORES */
-/****************************************/
-// Checks EEPROM used for high scores and
-// if any of it looks like nonsense it
-// rewrites the whole table with defaults.
-void HighScoreTable::ValidateEEPROM( void ) {
-  // Check if contents of EEPROM make sense.
-  // If not then rewrite EEPROM with defaults.
-  if( ! EEPROMValid() ) {
-    WriteEEPROMDefaults();
-  }
-}
-
-/**********************************************/
-/* DETERMINE POSITION OF A SCORE IN THE TABLE */
-/**********************************************/
-// Pass score in score.
-// Returns position in table (0 is top score).
-// If position returned is >= capacity of table then score is not high
-// enough to place in table.
-UInt8 HighScoreTable::GetPositionInTable( UInt32 score ) const {
-  // Look through table for a score less than the one passed.
-  PlayerName name;
-  UInt32 tableScore = (UInt32)0;
-  for( UInt8 i = 0; i < capacity; ++i ) {
-    Get( i, &name, &tableScore );
-    if( tableScore < score ) {
-      // Found a score that is less.
-      // Return index at which it was found.
-      return i;
-    }
-  }
-  // No score found that is less than the one passed.
-  // Return capacity of table to indicate not found.
-  return capacity;
-}
-
-/*********************************/
-/* ADD ENTRY TO HIGH SCORE TABLE */
-/*********************************/
-// Pass position in table to put entry in pos.
-// Pass name of player in name.
-// Pass score in score.
-void HighScoreTable::Add( UInt8 pos, const PlayerName *name, UInt32 score ) {
-    // Read the entire index, high scores and names out of EEPROM.
-    // Going to do manipulations in RAM to minimise the number of
-    // writes we need to do to EEPROM. Remember every time we write
-    // a single byte a whole page is written so might as well
-    // write a whole page in one go. Only drawback is more RAM
-    // is required.
-    UInt8 buffer[ memoryUsed ];
-    if( eeprom->ReadBytes( eepromAddress, buffer, memoryUsed ) ) {
-        // Fetch index for lowest score in the table.
-        UInt8 index = buffer[ capacity - 1 ];
-        // Make sure index is within range.
-        if( index < capacity ) {
-            // Point to section of buffer that contains name and score for
-            // lowest score.
-            UInt8 *address = buffer + capacity + ( index << 3 );
-            // Copy characters of name into buffer.
-            for( UInt8 i = 0; i < PlayerName::Length; ++i ) {
-                *address++ = name->Name[ i ];
-            }
-            // Copy bytes of score into buffer.
-            *((UInt32*)address) = score;
-            address += 4;
-            // Move all entries in the index below insertion point down one
-            // to make room for new entry.
-            for( UInt8 i = capacity - 1; i > pos; --i ) {
-                buffer[ i ] = buffer[ i - 1 ];
-            }
-            // Insert index of newly written record at insertion point.
-            buffer[ pos ] = index;
-            // Write the buffer back to EEPROM.
-            eeprom->WriteBytes( eepromAddress, buffer, memoryUsed ); 
-        }
-    }
-}
-
-/****************************/
-/* GET ENTRY FROM THE TABLE */
-/****************************/
-// Pass position to fetch from in pos.
-// Player name is returned in object pointed to by name.
-// Player score is returned in integer pointed to by score.
-void HighScoreTable::Get( UInt8 pos, PlayerName *name, UInt32 *score ) const {
-    // Write default values to name and score.
-  for( UInt8 i = 0; i < PlayerName::Length; ++i ) {
-    name->Name[ i ] = (UInt8)'X';
-  }
-  name->Name[ PlayerName::Length ] = 0;
-    *score = 0;
-  // Fetch index from EEPROM.
-  UInt8 index;
-    if( ! eeprom->ReadBytes( eepromAddress + pos, &index, 1 ) ) {
-        return;
-    }
-  // Point to appropriate part of data table.
-  UInt16 address = eepromAddress + capacity + ( index << 3 );
-  // Read out characters and store in name.
-    if( ! eeprom->ReadBytes( address, (UInt8*)name->Name, PlayerName::Length ) ) {
-        return;
-    }
-  name->Name[ PlayerName::Length ] = 0;
-    address += PlayerName::Length;
-  // Read out score.
-    eeprom->ReadBytes( address, (UInt8*)score, 4 );
-}
-
-/********************************/
-/* DETERMINE IF EEPROM IS VALID */
-/********************************/
-// Returns true if EEPROM is valid.
-bool HighScoreTable::EEPROMValid( void ) {
-  UInt8 b, b2;
-  // Check all entries in the index are within range and are unique.
-  for( UInt8 i = 0; i < capacity; ++i ) {
-    // Read byte from EEPROM.
-        if( ! eeprom->ReadBytes( eepromAddress + i, &b, 1 ) ) {
-            return false;
-        }
-    // Check index read is less than capacity.
-    if( b >= capacity ) {
-      return false;
-    }
-    // Check if any of the following bytes in the index have
-    // the same value.
-    for( UInt8 j = i + 1; j < capacity; ++j ) {
-            if( ! eeprom->ReadBytes( eepromAddress + j, &b2, 1 ) ) {
-                return false;
-            }
-      if( b == b2 ) {
-        return false;
-      }
-    }
-  }
-  // Check all entries in the data part of the table are valid.
-  UInt16 address = eepromAddress + capacity;
-  for( UInt8 i = 0; i < capacity; ++i ) {
-    // Check name consists only of uppercase letters.
-    for( UInt8 j = 0; j < PlayerName::Length; ++j ) {
-            // Read byte from EEPROM.
-            if( ! eeprom->ReadBytes( address++, &b, 1 ) ) {
-                return false;
-            }
-      if( ( b < PlayerName::MinChar ) || ( b > PlayerName::MaxChar ) ) {
-        return false;
-      }
-    }
-    // Check score consists only of valid BCD numbers.
-    for( UInt8 j = 0; j < 4; ++j ) {
-            // Read byte from EEPROM.
-            if( ! eeprom->ReadBytes( address++, &b, 1 ) ) {
-                return false;
-            }
-      if( ( ( b & 0x0F ) > 0x09 ) || ( ( b & 0xF0 ) > 0x90 ) ) {
-        return false;
-      }
-    }
-    // Skip over unused byte.
-    address++;
-  }
-  // EEPROM is valid
-  return true;
-}
-
-/****************************/
-/* WRITE DEFAULTS TO EEPROM */
-/****************************/
-// This may take a second or two to execute!
-void HighScoreTable::WriteEEPROMDefaults( void ) {
-    UInt8 buffer[ memoryUsed ];
-  // Write index with ascending integers.
-    UInt8 *ptr = buffer;
-  for( UInt8 i = 0; i < capacity; ++i ) {
-    *ptr++ =  i;
-  }
-  // Write data table with zero score entries.  
-  for( UInt8 i = 0; i < capacity; ++i ) {
-    // Write a name of "AAA".
-    for( UInt8 j = 0; j < PlayerName::Length; ++j ) {
-            *ptr++ = (UInt8)'A';
-    }
-        // Write a score of zero.
-    *((UInt32*)ptr) = 0;
-        ptr += 4;
-        // Write zero to unused byte.
-        *ptr++ = 0;    
-    }
-    // Write the buffer to EEPROM.
-    eeprom->WriteBytes( eepromAddress, buffer, memoryUsed ); 
+/*
+ * SOURCE FILE : HighScoreTable.cpp
+ *
+ * Definition of class HighScoreTable.
+ * Maintains a table of high scores with a name and a score for each entry in the table.
+ *
+ * The table is stored in EEPROM at an address specified when you call the constructor.
+ * The table is structured as follows. This shows a table with a capacity of 3.
+ *
+ * Byte offset      Usage
+ * -----------      -----
+ * 0                Index of highest score in data that follows
+ * 1                Index of second highest score in data that follows
+ * 2                Index of third highest score in data that follows
+ *
+ * 3                First character of player's name
+ * 4                Second character of player's name
+ * 5                Third character of player's name
+ * 6                LSB of score (in BCD)
+ * 7                Byte 1 of score (in BCD)
+ * 8                Byte 2 of score (in BCD)
+ * 9                MSB of score (in BCD)
+ * 10               Unused
+ *
+ * 11               First character of player's name
+ * 12               Second character of player's name
+ * 13               Third character of player's name
+ * 14               LSB of score (in BCD)
+ * 15               Byte 1 of score (in BCD)
+ * 16               Byte 2 of score (in BCD)
+ * 17               MSB of score (in BCD)
+ * 18               Unused
+ *
+ * 19               First character of player's name
+ * 20               Second character of player's name
+ * 21               Third character of player's name
+ * 22               LSB of score (in BCD)
+ * 23               Byte 1 of score (in BCD)
+ * 24               Byte 2 of score (in BCD)
+ * 25               MSB of score (in BCD)
+ * 26               Unused
+ *
+ * So, assuming the capacity of the table is N, the first N bytes form an index which is used to locate
+ * items in the remaining N*8 bytes that follow. This is done so that inserting a new entry only involves
+ * overwriting one name/score record and updating the index. You don't have to re-write all the records
+ * that move down the table to make room for the new one.
+ *
+ */
+
+#include "HighScoreTable.h"
+
+/***************/
+/* CONSTRUCTOR */
+/***************/
+// Pass pointer to an SPI EEPROM which contains the high scores.
+HighScoreTable::HighScoreTable( SPIEEPROM *e ) :
+    eeprom( e )
+{
+}
+
+/**************/
+/* DESTRUCTOR */
+/**************/
+HighScoreTable::~HighScoreTable() {
+}
+
+/****************************************/
+/* VALIDATE EEPROM USED FOR HIGH SCORES */
+/****************************************/
+// Checks EEPROM used for high scores and
+// if any of it looks like nonsense it
+// rewrites the whole table with defaults.
+void HighScoreTable::ValidateEEPROM( void ) {
+  // Check if contents of EEPROM make sense.
+  // If not then rewrite EEPROM with defaults.
+  if( ! EEPROMValid() ) {
+    WriteEEPROMDefaults();
+  }
+}
+
+/**********************************************/
+/* DETERMINE POSITION OF A SCORE IN THE TABLE */
+/**********************************************/
+// Pass score in score.
+// Returns position in table (0 is top score).
+// If position returned is >= capacity of table then score is not high
+// enough to place in table.
+UInt8 HighScoreTable::GetPositionInTable( UInt32 score ) const {
+  // Look through table for a score less than the one passed.
+  PlayerName name;
+  UInt32 tableScore = (UInt32)0;
+  for( UInt8 i = 0; i < capacity; ++i ) {
+    Get( i, &name, &tableScore );
+    if( tableScore < score ) {
+      // Found a score that is less.
+      // Return index at which it was found.
+      return i;
+    }
+  }
+  // No score found that is less than the one passed.
+  // Return capacity of table to indicate not found.
+  return capacity;
 }
+
+/*********************************/
+/* ADD ENTRY TO HIGH SCORE TABLE */
+/*********************************/
+// Pass position in table to put entry in pos.
+// Pass name of player in name.
+// Pass score in score.
+void HighScoreTable::Add( UInt8 pos, const PlayerName *name, UInt32 score ) {
+    // Read the entire index, high scores and names out of EEPROM.
+    // Going to do manipulations in RAM to minimise the number of
+    // writes we need to do to EEPROM. Remember every time we write
+    // a single byte a whole page is written so might as well
+    // write a whole page in one go. Only drawback is more RAM
+    // is required.
+    UInt8 buffer[ memoryUsed ];
+    if( eeprom->ReadBytes( eepromAddress, buffer, memoryUsed ) ) {
+        // Fetch index for lowest score in the table.
+        UInt8 index = buffer[ capacity - 1 ];
+        // Make sure index is within range.
+        if( index < capacity ) {
+            // Point to section of buffer that contains name and score for
+            // lowest score.
+            UInt8 *address = buffer + capacity + ( index << 3 );
+            // Copy characters of name into buffer.
+            for( UInt8 i = 0; i < PlayerName::Length; ++i ) {
+                *address++ = name->Name[ i ];
+            }
+            // Copy bytes of score into buffer.
+            *((UInt32*)address) = score;
+            address += 4;
+            // Move all entries in the index below insertion point down one
+            // to make room for new entry.
+            for( UInt8 i = capacity - 1; i > pos; --i ) {
+                buffer[ i ] = buffer[ i - 1 ];
+            }
+            // Insert index of newly written record at insertion point.
+            buffer[ pos ] = index;
+            // Write the buffer back to EEPROM.
+            eeprom->WriteBytes( eepromAddress, buffer, memoryUsed ); 
+        }
+    }
+}
+
+/****************************/
+/* GET ENTRY FROM THE TABLE */
+/****************************/
+// Pass position to fetch from in pos.
+// Player name is returned in object pointed to by name.
+// Player score is returned in integer pointed to by score.
+void HighScoreTable::Get( UInt8 pos, PlayerName *name, UInt32 *score ) const {
+    // Write default values to name and score.
+  for( UInt8 i = 0; i < PlayerName::Length; ++i ) {
+    name->Name[ i ] = (UInt8)'X';
+  }
+  name->Name[ PlayerName::Length ] = 0;
+    *score = 0;
+  // Fetch index from EEPROM.
+  UInt8 index;
+    if( ! eeprom->ReadBytes( eepromAddress + pos, &index, 1 ) ) {
+        return;
+    }
+  // Point to appropriate part of data table.
+  UInt16 address = eepromAddress + capacity + ( index << 3 );
+  // Read out characters and store in name.
+    if( ! eeprom->ReadBytes( address, (UInt8*)name->Name, PlayerName::Length ) ) {
+        return;
+    }
+  name->Name[ PlayerName::Length ] = 0;
+    address += PlayerName::Length;
+  // Read out score.
+    eeprom->ReadBytes( address, (UInt8*)score, 4 );
+}
+
+/********************************/
+/* DETERMINE IF EEPROM IS VALID */
+/********************************/
+// Returns true if EEPROM is valid.
+bool HighScoreTable::EEPROMValid( void ) {
+  UInt8 b, b2;
+  // Check all entries in the index are within range and are unique.
+  for( UInt8 i = 0; i < capacity; ++i ) {
+    // Read byte from EEPROM.
+        if( ! eeprom->ReadBytes( eepromAddress + i, &b, 1 ) ) {
+            return false;
+        }
+    // Check index read is less than capacity.
+    if( b >= capacity ) {
+      return false;
+    }
+    // Check if any of the following bytes in the index have
+    // the same value.
+    for( UInt8 j = i + 1; j < capacity; ++j ) {
+            if( ! eeprom->ReadBytes( eepromAddress + j, &b2, 1 ) ) {
+                return false;
+            }
+      if( b == b2 ) {
+        return false;
+      }
+    }
+  }
+  // Check all entries in the data part of the table are valid.
+  UInt16 address = eepromAddress + capacity;
+  for( UInt8 i = 0; i < capacity; ++i ) {
+    // Check name consists only of uppercase letters.
+    for( UInt8 j = 0; j < PlayerName::Length; ++j ) {
+            // Read byte from EEPROM.
+            if( ! eeprom->ReadBytes( address++, &b, 1 ) ) {
+                return false;
+            }
+      if( ( b < PlayerName::MinChar ) || ( b > PlayerName::MaxChar ) ) {
+        return false;
+      }
+    }
+    // Check score consists only of valid BCD numbers.
+    for( UInt8 j = 0; j < 4; ++j ) {
+            // Read byte from EEPROM.
+            if( ! eeprom->ReadBytes( address++, &b, 1 ) ) {
+                return false;
+            }
+      if( ( ( b & 0x0F ) > 0x09 ) || ( ( b & 0xF0 ) > 0x90 ) ) {
+        return false;
+      }
+    }
+    // Skip over unused byte.
+    address++;
+  }
+  // EEPROM is valid
+  return true;
+}
+
+/****************************/
+/* WRITE DEFAULTS TO EEPROM */
+/****************************/
+// This may take a second or two to execute!
+void HighScoreTable::WriteEEPROMDefaults( void ) {
+    UInt8 buffer[ memoryUsed ];
+  // Write index with ascending integers.
+    UInt8 *ptr = buffer;
+  for( UInt8 i = 0; i < capacity; ++i ) {
+    *ptr++ =  i;
+  }
+  // Write data table with zero score entries.  
+  for( UInt8 i = 0; i < capacity; ++i ) {
+    // Write a name of "AAA".
+    for( UInt8 j = 0; j < PlayerName::Length; ++j ) {
+            *ptr++ = (UInt8)'A';
+    }
+        // Write a score of zero.
+    *((UInt32*)ptr) = 0;
+        ptr += 4;
+        // Write zero to unused byte.
+        *ptr++ = 0;    
+    }
+    // Write the buffer to EEPROM.
+    eeprom->WriteBytes( eepromAddress, buffer, memoryUsed ); 
+}
--- a/HighScoreTable.h	Wed Jun 05 22:05:41 2013 +0000
+++ b/HighScoreTable.h	Thu Jun 06 20:11:28 2013 +0000
@@ -12,7 +12,7 @@
 
   #include "Types.h"
   #include "PlayerName.h"
-  #include "I2CEEPROM.h"
+  #include "SPIEEPROM.h"
   
   class HighScoreTable {
 
@@ -21,20 +21,20 @@
     /***************/
     /* CONSTRUCTOR */
     /***************/
-        // Pass pointer to an I2C EEPROM which contains the high scores.
-    HighScoreTable( I2CEEPROM *e );
+        // Pass pointer to an SPI EEPROM which contains the high scores.
+    HighScoreTable( SPIEEPROM *e );
 
     /**************/
     /* DESTRUCTOR */
     /**************/
     virtual ~HighScoreTable();
 
-        /***************************************/
-        /* GET EEPROM USED BY HIGH SCORE TABLE */
-        /***************************************/
-        I2CEEPROM *GetEEPROM( void ) const {
-            return eeprom;
-        }
+    /***************************************/
+    /* GET EEPROM USED BY HIGH SCORE TABLE */
+    /***************************************/
+    SPIEEPROM *GetEEPROM( void ) const {
+        return eeprom;
+    }
         
     /****************************************/
     /* VALIDATE EEPROM USED FOR HIGH SCORES */
@@ -87,16 +87,16 @@
 
     // Change the following to suit.
     enum {
-      eepromAddress = 0,    // address in EEPROM where high score table starts
-      capacity = 10,        // number of entries in table
-            // Amount of memory used in EEPROM.
-            // You need capacity bytes for the index and then
-            // eight bytes for each high score and name.
-            memoryUsed = capacity + ( capacity << 3 ),
+        eepromAddress = 0,    // address in EEPROM where high score table starts
+        capacity = 10,        // number of entries in table
+        // Amount of memory used in EEPROM.
+        // You need capacity bytes for the index and then
+        // eight bytes for each high score and name.
+        memoryUsed = capacity + ( capacity << 3 ),
     };
 
-        // Pointer to EEPROM that holds high scores.
-        I2CEEPROM *eeprom;
+    // Pointer to EEPROM that holds high scores.
+    SPIEEPROM *eeprom;
         
     /****************************/
     /* WRITE DEFAULTS TO EEPROM */
@@ -108,4 +108,3 @@
 #endif
 
 /* END of HighScoreTable.h */
-
--- a/I2CEEPROM.cpp	Wed Jun 05 22:05:41 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-/*
- * SOURCE FILE : I2CEEPROM.cpp
- *
- * Definition of class I2CEEPROM.
- * Rountines for communicating with a serial EEPROM over an I2C link.
- * EEPROM in question is a Microchip 24AA512.
- * Remember you need pullup resistors on the SCL, SDA and WP lines.
- *
- */
-
-#include "I2CEEPROM.h"
-
-/***************/
-/* CONSTRUCTOR */
-/***************/
-I2CEEPROM::I2CEEPROM() :
-    isOpen( false ),
-    // wire( (TwoWire*)NULL ),
-    wp( 8 )
-{
-}
-
-/**************/
-/* DESTRUCTOR */
-/**************/
-I2CEEPROM::~I2CEEPROM() {
-}
-
-/**************************************/
-/* PREPARE TO COMMUNICATE WITH EEPROM */
-/**************************************/
-// Pass pointer to TwoWire object to use for I2C communications
-// which should have been initialised and opened before calling this.
-// Pass 3 bit address of EEPROM (as set by A0, A1 and A2 pins) in ea.
-// Pass pin number to use for write protect in wp.
-#if 0
-void I2CEEPROM::Open( TwoWire *wire, UInt8 ea, UInt8 wp ) {
-    if( ! isOpen ) {
-        // Save pointer to TwoWire object.
-        this->wire = wire;
-        // Calculate slave address.
-        slaveAddress = (UInt8)( ( ea & 0x7 ) | 0x50 );
-        // Save write protect pin number.
-        this->wp = wp;
-        // Configure write protect pin as open drain output.
-        pinMode( wp, OUTPUT_OPEN_DRAIN );
-        // Write protect EEPROM.
-        digitalWrite( wp, HIGH );
-        isOpen = true;
-    }
-}
-#endif
-
-/*********************************************/
-/* SHUT DOWN COMMUNICATIONS LINK WITH EEPROM */
-/*********************************************/
-void I2CEEPROM::Close( void ) {
-    isOpen = false;
-}
-
-// Size of each chunk read or written.
-#define CHUNK_SIZE ( WIRE_BUFSIZ - 2 )
-
-/************************************/
-/* ATTEMPT TO READ A CHUNK OF BYTES */
-/************************************/
-// Pass address within EEPROM in address.
-// Pass pointer to buffer for bytes read in buffer.
-// Returns false if a failure occurred whilst reading EEPROM.
-// Pass number of bytes to read in count.
-// Returns true if successful, false if not.
-// The number of bytes read must not exceed CHUNK_SIZE.
-bool I2CEEPROM::ReadChunk( UInt16 address, UInt8 *buffer, UInt8 count ) {
-#if 0
-  // First send address you want to read from.
-  wire->beginTransmission( slaveAddress );
-  // Add high byte of EEPROM address to read from.
-  wire->send( ( address >> 8 ) & 0xFF );
-  // Add low byte of EEPROM address to read from.
-  wire->send( address & 0xFF );
-  // Send the packet and return false on failure.
-  if( wire->endTransmission() != SUCCESS ) {
-        return false;
-    }
-  // Now read back data.
-  wire->requestFrom( slaveAddress, count );
-    UInt16 readCount = 0;
-  while( ( wire->available() > 0 ) && ( readCount < count ) ) {
-        *buffer++ = wire->receive();
-        readCount++;
-  }
-    return true;
-#else
-  return false;
-#endif
-}
-
-/*************************************/
-/* ATTEMPT TO READ A NUMBER OF BYTES */
-/*************************************/
-// Pass address within EEPROM in address.
-// Pass pointer to buffer for bytes read in buffer.
-// Returns false if a failure occurred whilst reading EEPROM.
-// Pass number of bytes to read in count.
-// Returns true if successful, false if not.
-bool I2CEEPROM::ReadBytes( UInt16 address, UInt8 *buffer, UInt16 count ) {
-#if 0
-    bool ok = true;
-    // Keep reading chunks until all bytes read.
-    while( ( count > 0 ) && ok ) {
-        if( count > CHUNK_SIZE ) {
-            ok = ReadChunk( address, buffer, (UInt8)CHUNK_SIZE );
-            address += CHUNK_SIZE;
-            buffer += CHUNK_SIZE;
-            count -= CHUNK_SIZE;
-        }
-        else {
-            ok = ReadChunk( address, buffer, (UInt8)count );
-            count = 0;
-        }
-    }
-    // Return true on success.
-    return ok;
-#else
-  return false;
-#endif
-}
-
-/**************************************/
-/* ATTEMPT TO WRITE A CHUNK TO EEPROM */
-/**************************************/
-// Pass address within EEPROM in address.
-// Pass pointer to buffer of bytes to write in buffer.
-// Pass number of bytes to write in count.
-// Returns true if successful, false if not.
-// The number of bytes written must not exceed CHUNK_SIZE.
-bool I2CEEPROM::WriteChunk( UInt16 address, const UInt8 *buffer, UInt8 count ) {
-#if 0
-  // First send address you want to write to.
-  wire->beginTransmission( slaveAddress );
-  // Add high byte of EEPROM address to write to.
-  wire->send( ( address >> 8 ) & 0xFF );
-  // Add low byte of EEPROM address to write to.
-  wire->send( address & 0xFF );
-    // Add buffer bytes.
-    wire->send( (uint8*)buffer, count );
-  // Send the packet.
-    // Return true if successful.
-  return ( wire->endTransmission() == SUCCESS );
-#else
-  return false;
-#endif
-}
-
-/**************************************/
-/* ATTEMPT TO WRITE A NUMBER OF BYTES */
-/**************************************/
-// Pass address within EEPROM in address.
-// Pass pointer to buffer of bytes to write in buffer.
-// Pass number of bytes to write in count.
-// Returns true if successful, false if not.
-bool I2CEEPROM::WriteBytes( UInt16 address, const UInt8 *buffer, UInt16 count ) {
-#if 0
-    bool ok = true;
-    // Write enable EEPROM and wait a bit.
-    digitalWrite( wp, LOW );
-    delay( 1 );
-    // Keep writing chunks until all bytes written.
-    while( ( count > 0 ) && ok ) {
-        if( count > CHUNK_SIZE ) {
-            ok = WriteChunk( address, buffer, (UInt8)CHUNK_SIZE );
-            address += CHUNK_SIZE;
-            buffer += CHUNK_SIZE;
-            count -= CHUNK_SIZE;
-        }
-        else {
-            ok = WriteChunk( address, buffer, (UInt8)count );
-            count = 0;
-        }
-        // Wait a lot to allow page to be written.
-        delay( 6 );
-    }
-    // Write protect EEPROM.
-    digitalWrite( wp, HIGH );
-    // Return true on success.
-    return ok;
-#else
-  return false;
-#endif
-}
-
--- a/I2CEEPROM.h	Wed Jun 05 22:05:41 2013 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/*
- * SOURCE FILE : I2CEEPROM.h
- *
- * Definition of class I2CEEPROM.
- * Rountines for communicating with a serial EEPROM over an I2C link.
- * EEPROM in question is a Microchip 24AA512.
- * Remember you need pullup resistors on the SCL, SDA and WP lines.
- *
- */
-
-#ifndef I2CEEPROMDefined
-
-  #define I2CEEPROMDefined
-
-    #include "Types.h"
-    // #include "CDFWire.h"        // tweaked version of Wire library
-    
-  class I2CEEPROM {
-
-  public :
-
-    /***************/
-    /* CONSTRUCTOR */
-    /***************/
-    I2CEEPROM();
-        
-    /**************/
-    /* DESTRUCTOR */
-    /**************/
-    virtual ~I2CEEPROM();
-
-        /**************************************/
-        /* PREPARE TO COMMUNICATE WITH EEPROM */
-        /**************************************/
-        // Pass pointer to TwoWire object to use for I2C communications.
-        // Pass 3 bit address of EEPROM (as set by A0, A1 and A2 pins) in ea.
-        // Pass pin number to use for write protect in wp.
-        // void Open( TwoWire *wire, UInt8 ea, UInt8 wp );
-        
-        /*********************************************/
-        /* SHUT DOWN COMMUNICATIONS LINK WITH EEPROM */
-        /*********************************************/
-        void Close( void );
-        
-        /*****************************************/
-        /* DETERMINE IF LINK WITH EEPROM IS OPEN */
-        /*****************************************/
-        // Returns true if link is open.
-        bool IsOpen( void ) {
-            return isOpen;
-        }
-        
-        /*************************************/
-        /* ATTEMPT TO READ A NUMBER OF BYTES */
-        /*************************************/
-        // Pass address within EEPROM in address.
-        // Pass pointer to buffer for bytes read in buffer.
-        // Pass number of bytes to read in count.
-        // Returns true if successful, false if not.
-        bool ReadBytes( UInt16 address, UInt8 *buffer, UInt16 count );
-
-        /**************************************/
-        /* ATTEMPT TO WRITE A NUMBER OF BYTES */
-        /**************************************/
-        // Pass address within EEPROM in address.
-        // Pass pointer to buffer of bytes to write in buffer.
-        // Pass number of bytes to write in count.
-        // Returns true if successful, false if not.
-        bool WriteBytes( UInt16 address, const UInt8 *buffer, UInt16 count );
-        
-private :
-
-        // Indicates connection with EEPROM is open.
-        bool isOpen;
-
-        // Pointer to object that does I2C communications.
-        // TwoWire *wire;
-        
-        // Slave address consisting of three bits that identify the
-        // particular EEPROM on the I2C bus, plus bits 3 to 7 are
-        // set to 01010 binary (see 24AA512 dtasheet).
-        UInt8 slaveAddress;
-        
-        // Pin number for write protect pin.
-        UInt8 wp;
-
-        /************************************/
-        /* ATTEMPT TO READ A CHUNK OF BYTES */
-        /************************************/
-        // Pass address within EEPROM in address.
-        // Pass pointer to buffer for bytes read in buffer.
-        // Returns false if a failure occurred whilst reading EEPROM.
-        // Pass number of bytes to read in count.
-        // Returns true if successful, false if not.
-        // The number of bytes read must not exceed CHUNK_SIZE.
-        bool ReadChunk( UInt16 address, UInt8 *buffer, UInt8 count );
-
-        /**************************************/
-        /* ATTEMPT TO WRITE A CHUNK TO EEPROM */
-        /**************************************/
-        // Pass address within EEPROM in address.
-        // Pass pointer to buffer of bytes to write in buffer.
-        // Pass number of bytes to write in count.
-        // Returns true if successful, false if not.
-        // The number of bytes written must not exceed WIRE_BUFSIZ - 2.
-        bool WriteChunk( UInt16 address, const UInt8 *buffer, UInt8 count );
-
-  };
-
-#endif
-
-/* END of I2CEEPROM.h */
-
--- a/Level.h	Wed Jun 05 22:05:41 2013 +0000
+++ b/Level.h	Thu Jun 06 20:11:28 2013 +0000
@@ -18,6 +18,7 @@
   #include "CharBlocks.h"
   #include "StringData.h"
   #include "HighScoreTable.h"
+  #include "CharFrame.h"
 #if 0
   #include "ArenaConst.h"
   #include "SpriteImageId.h"
@@ -26,7 +27,6 @@
   #include "BlueMeanyObject.h"
   #include "CrusherObject.h"
   #include "BrainObject.h"
-  #include "CharFrame.h"
   #include "SoundManager.h"
   #include "Sounds.h"
 #endif
--- a/Level0.cpp	Wed Jun 05 22:05:41 2013 +0000
+++ b/Level0.cpp	Thu Jun 06 20:11:28 2013 +0000
@@ -68,12 +68,11 @@
       GDExtra::HideAllSprites( gd );
       // SoundManager::Instance.SilenceAll();
       // Draw border around screen.
-      // CharFrame::Draw( 0, 0, VISIBLE_CHAR_WIDTH, VISIBLE_CHAR_HEIGHT );
+      CharFrame::Draw( gd, 0, 0, VISIBLE_CHAR_WIDTH, VISIBLE_CHAR_HEIGHT );
       // Draw big block of characters that read "ROBOTRIC".
       GDExtra::WriteProgCharBlock( gd, 2, 2, CharBlocks::RobotRicText );
       // Write message telling user how to start game.
       GDExtra::WriteProgString( gd, 2, VISIBLE_CHAR_HEIGHT - 3, startText );
-      #if 0
       // Validate high scores in EEPROM which will re-write the entire
       // table with default data if it finds nonsense in the EEPROM.
       // Then check if EEPROM now makes sense. If it does then display
@@ -85,6 +84,7 @@
                DrawHighScores();
            }
       }
+      #if 0
       // Must have a player with non-NULL controls.
       PanelControls *controls;
       if(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPIEEPROM.cpp	Thu Jun 06 20:11:28 2013 +0000
@@ -0,0 +1,122 @@
+/*
+ * SOURCE FILE : SPIEEPROM.cpp
+ *
+ * Definition of class SPIEEPROM.
+ * Rountines for communicating with a serial EEPROM over an SPI link.
+ * EEPROM in question is a Microchip 24AA512.
+ * Remember you need pullup resistors on the SCL, SDA and WP lines.
+ *
+ */
+
+#include "SPIEEPROM.h"
+
+// Instruction set codes for use with EEPROM.
+#define READ 0x03       // read data beginning at selected address
+#define WRITE 0x02      // write data beginning at selected address
+#define WRDI 0x04       // disable write operations
+#define WREN 0x06       // enable write operations
+#define RDSR 0x05       // read status register
+#define WRSR 0x01       // write status register
+
+/***************/
+/* CONSTRUCTOR */
+/***************/
+// Pass pointer to an SPI object in spiLink.
+// Pass pointer to output used as chip select in chipSelect.
+SPIEEPROM::SPIEEPROM( SPI *spiLink, DigitalOut *chipSelect ) :
+    spi( spiLink ),
+    cs( chipSelect )
+{
+}
+
+/**************/
+/* DESTRUCTOR */
+/**************/
+SPIEEPROM::~SPIEEPROM() {
+}
+
+/*************************************/
+/* ATTEMPT TO READ A NUMBER OF BYTES */
+/*************************************/
+// Pass address within EEPROM in address.
+// Pass pointer to buffer for bytes read in buffer.
+// Returns false if a failure occurred whilst reading EEPROM.
+// Pass number of bytes to read in count.
+// Returns true if successful, false if not.
+bool SPIEEPROM::ReadBytes( UInt16 address, UInt8 *buffer, UInt16 count ) {
+    *cs = 0;                                // Select the EEPROM.
+    spi->write( READ );                     // Send read instruction.
+    spi->write( ( address >> 8 ) & 0xFF );  // Send MSB of address.
+    spi->write( address & 0xFF );           // Send LSB of address.
+    // Read back the correct number of bytes by writing zero bytes.
+    // and storing what comes back in the buffer.
+    while( count > 0 ) {
+        *buffer++ = (UInt8)( spi->write( 0 ) );
+        count--;
+    }
+    *cs = 1;                                // Deselect the EEPROM.
+    return true;                            // Always succeeds.
+}
+
+/**************************************/
+/* ATTEMPT TO WRITE A CHUNK TO EEPROM */
+/**************************************/
+// Pass address within EEPROM in address.
+// Pass pointer to buffer of bytes to write in buffer.
+// Pass number of bytes to write in count.
+// Returns true if successful, false if not.
+// The number of bytes written must not exceed CHUNK_SIZE.
+bool SPIEEPROM::WriteChunk( UInt16 address, const UInt8 *buffer, UInt8 count ) {
+#if 0
+  // First send address you want to write to.
+  wire->beginTransmission( slaveAddress );
+  // Add high byte of EEPROM address to write to.
+  wire->send( ( address >> 8 ) & 0xFF );
+  // Add low byte of EEPROM address to write to.
+  wire->send( address & 0xFF );
+    // Add buffer bytes.
+    wire->send( (uint8*)buffer, count );
+  // Send the packet.
+    // Return true if successful.
+  return ( wire->endTransmission() == SUCCESS );
+#else
+  return false;
+#endif
+}
+
+/**************************************/
+/* ATTEMPT TO WRITE A NUMBER OF BYTES */
+/**************************************/
+// Pass address within EEPROM in address.
+// Pass pointer to buffer of bytes to write in buffer.
+// Pass number of bytes to write in count.
+// Returns true if successful, false if not.
+bool SPIEEPROM::WriteBytes( UInt16 address, const UInt8 *buffer, UInt16 count ) {
+#if 0
+    bool ok = true;
+    // Write enable EEPROM and wait a bit.
+    digitalWrite( wp, LOW );
+    delay( 1 );
+    // Keep writing chunks until all bytes written.
+    while( ( count > 0 ) && ok ) {
+        if( count > CHUNK_SIZE ) {
+            ok = WriteChunk( address, buffer, (UInt8)CHUNK_SIZE );
+            address += CHUNK_SIZE;
+            buffer += CHUNK_SIZE;
+            count -= CHUNK_SIZE;
+        }
+        else {
+            ok = WriteChunk( address, buffer, (UInt8)count );
+            count = 0;
+        }
+        // Wait a lot to allow page to be written.
+        delay( 6 );
+    }
+    // Write protect EEPROM.
+    digitalWrite( wp, HIGH );
+    // Return true on success.
+    return ok;
+#else
+  return false;
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPIEEPROM.h	Thu Jun 06 20:11:28 2013 +0000
@@ -0,0 +1,74 @@
+/*
+ * SOURCE FILE : SPIEEPROM.h
+ *
+ * Definition of class SPIEEPROM.
+ * Rountines for communicating with a serial EEPROM over an SPI link.
+ * EEPROM in question is a Microchip 25AA256.
+ *
+ */
+
+#ifndef SPIEEPROMDefined
+
+  #define SPIEEPROMDefined
+
+  #include "Types.h"
+  #include "mbed.h"     // for SPI
+    
+  class SPIEEPROM {
+
+  public :
+
+    /***************/
+    /* CONSTRUCTOR */
+    /***************/
+    // Pass pointer to an SPI object in spiLink.
+    // Pass pointer to output used as chip select in chipSelect.
+    SPIEEPROM( SPI *spi, DigitalOut *cs );
+        
+    /**************/
+    /* DESTRUCTOR */
+    /**************/
+    virtual ~SPIEEPROM();
+
+    /*************************************/
+    /* ATTEMPT TO READ A NUMBER OF BYTES */
+    /*************************************/
+    // Pass address within EEPROM in address.
+    // Pass pointer to buffer for bytes read in buffer.
+    // Pass number of bytes to read in count.
+    // Returns true if successful, false if not.
+    bool ReadBytes( UInt16 address, UInt8 *buffer, UInt16 count );
+
+    /**************************************/
+    /* ATTEMPT TO WRITE A NUMBER OF BYTES */
+    /**************************************/
+    // Pass address within EEPROM in address.
+    // Pass pointer to buffer of bytes to write in buffer.
+    // Pass number of bytes to write in count.
+    // Returns true if successful, false if not.
+    bool WriteBytes( UInt16 address, const UInt8 *buffer, UInt16 count );
+        
+private :
+
+    // Pointer to SPI object used for communication.
+    SPI *spi;
+    
+    // Pointer to digital output used as chip select.
+    DigitalOut *cs;
+    
+    /**************************************/
+    /* ATTEMPT TO WRITE A CHUNK TO EEPROM */
+    /**************************************/
+    // Pass address within EEPROM in address.
+    // Pass pointer to buffer of bytes to write in buffer.
+    // Pass number of bytes to write in count.
+    // Returns true if successful, false if not.
+    // The number of bytes written must not exceed WIRE_BUFSIZ - 2.
+    bool WriteChunk( UInt16 address, const UInt8 *buffer, UInt8 count );
+
+};
+
+#endif
+
+/* END of SPIEEPROM.h */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sprite.h	Thu Jun 06 20:11:28 2013 +0000
@@ -0,0 +1,684 @@
+static PROGMEM prog_uchar sprite_sprimg[] = {
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0x44,  0x08,  0x07,  0x07,  0x08,  0x44,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0x44,  0x07,  0x07,  0x07,  0x07,  0x44,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x08,  0x07,  0x07,  0x08,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x34,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0x34,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x00,  0x00,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x00,  0x00,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xfa,  0xfa,  0xfa,  0xfa,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xfe,  0xfe,  0xfa,  0xfa,  0xfe,  0xfe,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0x64,  0x07,  0x64,  0x64,  0x07,  0x64,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x64,  0xfa,  0xfa,  0x64,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xfa,  0xfe,  0xfe,  0xfa,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xfa,  0xfa,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xff, 
+0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xff, 
+0xff,  0xf8,  0xf8,  0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xff,  0x64,  0x64,  0xff, 
+0xff,  0x64,  0x64,  0xff,  0xf8,  0xfa,  0xfe,  0xfe,  0xfe,  0xfe,  0xfa,  0xf8,  0xff,  0x07,  0x07,  0xff, 
+0xff,  0x07,  0x07,  0xff,  0xff,  0xfe,  0xfe,  0xfa,  0xfa,  0xfe,  0xfe,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0x07,  0x07,  0xff,  0xf8,  0xfa,  0xfe,  0xfe,  0xfe,  0xfe,  0xfa,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x64,  0x64,  0x64,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0x07,  0xff,  0xff,  0x64,  0x64,  0x64,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xdd,  0xc4,  0xb2,  0xff,  0xce,  0xd2,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x99,  0x6a,  0x74,  0x9b,  0x7c,  0x86,  0xa7,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xe2,  0x67,  0x24,  0x49,  0x4e,  0x2c,  0x54,  0x96,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x6c,  0x1d,  0x16,  0x1e,  0x1a,  0x21,  0x1b,  0x4c,  0x99,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x6b,  0x1f,  0x12,  0x13,  0x18,  0x1b,  0x16,  0x26,  0x68,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x6b,  0x12,  0x0b,  0x0c,  0x12,  0x18,  0x19,  0x26,  0x66,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xb6,  0x30,  0x0d,  0x01,  0x09,  0x0a,  0x13,  0x0d,  0x1c,  0x54,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0x90,  0x30,  0x0d,  0x0b,  0x09,  0x00,  0x0b,  0x11,  0x24,  0x5e,  0xa7,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0x91,  0x30,  0x0a,  0x0c,  0x09,  0x09,  0x0c,  0x0c,  0x2b,  0x5a,  0x86,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xb5,  0x8a,  0x0e,  0x0d,  0x0c,  0x0a,  0x14,  0x1c,  0x4b,  0x7e,  0x86,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xb4,  0x90,  0x67,  0x12,  0x13,  0x1d,  0x25,  0x49,  0x59,  0x72,  0x86,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xb7,  0x6c,  0x5b,  0x2a,  0x1d,  0x21,  0x4d,  0x53,  0x5c,  0x7f,  0xa5,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xd6,  0x91,  0x7b,  0x30,  0x1c,  0x24,  0x49,  0x53,  0x76,  0x86,  0xc9,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xb3,  0x6b,  0x4e,  0x48,  0x57,  0x77,  0xc3,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf6,  0xcb,  0xc7,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xe3,  0xaa,  0xb0,  0xb0,  0xad,  0xc6,  0xb0,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x99,  0x79,  0x79,  0x81,  0x77,  0x8e,  0xc9,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x6a,  0x61,  0x74,  0x56,  0x65,  0x72,  0xc4,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xa9,  0x68,  0x4c,  0x28,  0x21,  0x49,  0x2b,  0x66,  0xaa,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xa9,  0x4e,  0x16,  0x15,  0x18,  0x21,  0x1d,  0x53,  0x88,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x9c,  0x23,  0x16,  0x11,  0x14,  0x1a,  0x19,  0x2b,  0x81,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xb3,  0x8a,  0x28,  0x17,  0x0c,  0x11,  0x19,  0x1c,  0x1f,  0x7a,  0xee,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xdc,  0x87,  0x1c,  0x19,  0x0b,  0x0a,  0x15,  0x1d,  0x49,  0x61,  0xe5,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xd5,  0x30,  0x15,  0x15,  0x0a,  0x0a,  0x14,  0x1a,  0x2a,  0x65,  0xa7,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xdb,  0x6b,  0x1f,  0x15,  0x11,  0x0d,  0x21,  0x2b,  0x47,  0x78,  0xa5,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xcc,  0x95,  0x4e,  0x25,  0x17,  0x23,  0x4d,  0x57,  0x5a,  0x7f,  0xa3,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xdc,  0x9b,  0x7b,  0x47,  0x1d,  0x26,  0x4b,  0x53,  0x65,  0x7f,  0xc3,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xb3,  0x8b,  0x6b,  0x16,  0x29,  0x49,  0x57,  0x7f,  0x93,  0xe5,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xd4,  0x6c,  0x68,  0x54,  0x65,  0x82,  0xc9,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xdd,  0xcd,  0xec,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xb2,  0xdb,  0xaa,  0xa8,  0xd1,  0xc8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xb3,  0x89,  0x9c,  0x7c,  0x81,  0xaf,  0xd1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xac,  0x88,  0x89,  0x74,  0x7f,  0x85,  0xd2,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xea,  0x8b,  0x8a,  0x4e,  0x26,  0x5a,  0x74,  0x8d,  0xe5,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xcc,  0x90,  0x2e,  0x21,  0x1a,  0x29,  0x26,  0x65,  0xa7,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xe1,  0x67,  0x20,  0x15,  0x1b,  0x26,  0x21,  0x48,  0x8f,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xbc,  0xab,  0x54,  0x29,  0x14,  0x19,  0x1b,  0x24,  0x2e,  0x94,  0xee,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf2,  0x9c,  0x2e,  0x29,  0x14,  0x0d,  0x1a,  0x21,  0x53,  0x97,  0xd1,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf3,  0x6b,  0x20,  0x1c,  0x0d,  0x0c,  0x1d,  0x26,  0x4c,  0x77,  0xe5,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xee,  0x6b,  0x47,  0x23,  0x16,  0x16,  0x2b,  0x4d,  0x50,  0x61,  0xd1,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xdf,  0x88,  0x6a,  0x50,  0x1f,  0x2a,  0x57,  0x5a,  0x7f,  0x81,  0xcf,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xcc,  0x87,  0x5b,  0x2f,  0x2c,  0x50,  0x5a,  0x7f,  0x85,  0xcf,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xbc,  0x87,  0x23,  0x2f,  0x4b,  0x5a,  0x82,  0xa5,  0xf5,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf1,  0x8b,  0x89,  0x7a,  0x84,  0xa4,  0xeb,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xe0,  0xf2,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xdc,  0xe1,  0xce,  0xb1,  0xe9,  0xe7,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xe3,  0x98,  0xdb,  0x8f,  0x92,  0xd2,  0xec,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xe3,  0x9c,  0xa6,  0x84,  0x85,  0xc3,  0xed,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xd4,  0x91,  0x69,  0x48,  0x77,  0x82,  0xc4,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xe2,  0xb6,  0x8a,  0x4b,  0x2b,  0x5b,  0x52,  0x82,  0xeb,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf2,  0x8a,  0x47,  0x20,  0x24,  0x50,  0x47,  0x55,  0xad,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xe4,  0xd6,  0x68,  0x52,  0x28,  0x1b,  0x26,  0x49,  0x5e,  0xc6,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xd5,  0x68,  0x54,  0x23,  0x14,  0x21,  0x2c,  0x75,  0xd0,  0xe5,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x8b,  0x48,  0x20,  0x16,  0x12,  0x26,  0x48,  0x5e,  0x95,  0xf5,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf7,  0x8f,  0x68,  0x47,  0x1e,  0x20,  0x50,  0x61,  0x74,  0x7a,  0xec,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xe2,  0x98,  0x87,  0x74,  0x2e,  0x4b,  0x65,  0x72,  0x82,  0x93,  0xee,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf2,  0x91,  0x7a,  0x5b,  0x4b,  0x57,  0x65,  0x82,  0x97,  0xed,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xe4,  0x90,  0x4e,  0x4f,  0x52,  0x75,  0x92,  0xc9,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xb3,  0xb1,  0x90,  0xa5,  0xc6,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf6,  0xf7,  0xdb,  0xf6,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xab,  0xe3,  0xae,  0xa7,  0xee,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xd5,  0xb1,  0x97,  0x96,  0xeb,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xb4,  0x89,  0x5b,  0x84,  0xa4,  0xe5,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xd4,  0xb8,  0x74,  0x5a,  0x8e,  0x7c,  0xa5,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xc7,  0x7b,  0x2e,  0x2c,  0x74,  0x55,  0x73,  0xdb,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf0,  0x7d,  0x72,  0x56,  0x26,  0x49,  0x55,  0x82,  0xed,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf0,  0x7d,  0x78,  0x54,  0x20,  0x2b,  0x53,  0x94,  0xf5,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xbc,  0x68,  0x2b,  0x25,  0x16,  0x49,  0x59,  0x78,  0xc8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xca,  0x83,  0x5b,  0x2b,  0x2b,  0x5a,  0x81,  0x85,  0x94,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xb2,  0x91,  0x89,  0x55,  0x55,  0x7f,  0x78,  0xa3,  0xc5,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xd4,  0x94,  0x87,  0x59,  0x5a,  0x78,  0x92,  0xc4,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xb1,  0x87,  0x6a,  0x79,  0x84,  0xaf,  0xeb,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf0,  0xe9,  0xb8,  0xcb,  0xe5,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xd5,  0xf2,  0xce,  0xcd,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf0,  0xdb,  0xaf,  0xb0,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xe3,  0xb0,  0x83,  0x9a,  0xc8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf0,  0xe0,  0x96,  0x8d,  0xd1,  0x9a,  0xc9,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xe8,  0x9b,  0x6a,  0x4f,  0x8e,  0x7a,  0x89,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x95,  0x7c,  0x7d,  0x2f,  0x59,  0x73,  0x97,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x98,  0x8d,  0x7c,  0x2e,  0x53,  0x61,  0xc6,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf0,  0x89,  0x4e,  0x50,  0x23,  0x5e,  0x75,  0x8d,  0xed,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf4,  0xa6,  0x83,  0x52,  0x50,  0x7c,  0x94,  0xa4,  0xb0,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xdf,  0xab,  0xaa,  0x87,  0x6a,  0x86,  0x8d,  0xaf,  0xed,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf3,  0xca,  0x9b,  0x79,  0x72,  0x84,  0xa6,  0xe6,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xdc,  0xab,  0x90,  0x83,  0xa6,  0xd2,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf0,  0xe8,  0xf1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xe8,  0xe7,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xe0,  0xc8,  0xce,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xe7,  0x9a,  0xca,  0xed,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xe4,  0xc5,  0xb0,  0xff,  0xcc,  0xed,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xdf,  0x90,  0x61,  0xaf,  0x94,  0xad,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xad,  0x8f,  0xa8,  0x4f,  0x73,  0x85,  0xb1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xb2,  0xa6,  0xa6,  0x56,  0x76,  0x84,  0xeb,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xad,  0x69,  0x7a,  0x4b,  0x7c,  0x94,  0xaa,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xcc,  0x9a,  0x7d,  0x74,  0x97,  0xa8,  0xc4,  0xe7,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xbb,  0xcf,  0x9b,  0x88,  0xa4,  0x96,  0xc9,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xe1,  0xbb,  0x88,  0x81,  0x97,  0xc6,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xe4,  0xdc,  0xb8,  0xa8,  0xcf,  0xed,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xe6,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xce,  0xf2,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xdf,  0xe7,  0xff,  0xf2,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xd0,  0x89,  0xd1,  0xc7,  0xdf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xdd,  0xa9,  0xc7,  0x6a,  0x83,  0xa6,  0xe2,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xd5,  0xc8,  0xc7,  0x7d,  0x93,  0xa7,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xe8,  0x8c,  0x9a,  0x6a,  0x96,  0xaa,  0xde,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf1,  0xcf,  0x98,  0x8d,  0xc7,  0xc7,  0xe5,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xe3,  0xe7,  0xcc,  0x91,  0xc4,  0xaa,  0xe6,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xef,  0x9b,  0x94,  0xaf,  0xde,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xe3,  0xdd,  0xec,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf7,  0xac,  0xee,  0xe8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf1,  0xbb,  0xe7,  0x88,  0x95,  0xc8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf0,  0xe9,  0xdf,  0x9a,  0xaf,  0xe5,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xb3,  0xcd,  0x90,  0xcb,  0xdd,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xec,  0xcc,  0xa8,  0xdf,  0xde,  0xf5,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf3,  0xf7,  0xef,  0xac,  0xcf,  0xc7,  0xf5,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xb5,  0xa8,  0xcf,  0xf2,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf2,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xe0,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xea,  0xf4,  0xab,  0xb0,  0xe9,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf5,  0xf2,  0xca,  0xd0,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xe3,  0xf6,  0xca,  0xed,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf2,  0xce,  0xf6,  0xea,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xd5,  0xe6,  0xde,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xe0,  0xcb,  0xec,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xfd,  0xfd,  0xfd,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xfd,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xfd,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xfd,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xfd,  0xfc,  0xfe,  0xfe,  0xfe,  0xfc,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xfb,  0xfe,  0xf8,  0xf8,  0x00,  0xfe,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xfd,  0xfb,  0xfc,  0xfe,  0xfe,  0xfe,  0xfc,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff, 
+0xff,  0xff,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf9,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x07,  0x00,  0x07,  0x00,  0x07,  0xf8,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xf8,  0xf9,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xfd,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xfd,  0xfd,  0xfb,  0xfb,  0xfb,  0xfb,  0xfb,  0xfd,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xfd,  0xfd,  0xfd,  0xfd,  0xfd,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x70,  0x31,  0x00,  0x00,  0x31,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x31,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x31,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x31,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x31,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x31,  0x0f,  0x31,  0x0f,  0x0f,  0x31,  0x0f,  0x31,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x31,  0x31,  0xfe,  0x31,  0x31,  0xfe,  0x31,  0x31,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x31,  0x0f,  0x31,  0x0f,  0x0f,  0x31,  0x0f,  0x31,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x70,  0x00,  0x00,  0x00,  0x00,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0x70,  0xff,  0xff,  0xff,  0x00,  0x70,  0xfe,  0xfe,  0x70,  0x00,  0xff,  0xff,  0xff,  0x70,  0xff, 
+0xff,  0x00,  0x70,  0xff,  0xff,  0x31,  0x00,  0x70,  0x70,  0x00,  0x31,  0xff,  0xff,  0x70,  0x00,  0xff, 
+0x70,  0x00,  0x00,  0x31,  0xff,  0xff,  0x31,  0x00,  0x00,  0x31,  0xff,  0xff,  0x31,  0x00,  0x00,  0x70, 
+0xff,  0x70,  0x31,  0x00,  0x00,  0x31,  0xff,  0xff,  0xff,  0xff,  0x31,  0x00,  0x00,  0x31,  0x70,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x31,  0x00,  0x00,  0x00,  0x00,  0x00,  0x00,  0x31,  0xff,  0xff,  0xff,  0xff, 
+0x00,  0x00,  0x70,  0x70,  0x00,  0x00,  0x31,  0x70,  0x70,  0x31,  0x00,  0x00,  0x70,  0x70,  0x00,  0x00, 
+0x70,  0x00,  0x00,  0x00,  0x31,  0x70,  0xff,  0xff,  0xff,  0xff,  0x70,  0x31,  0x00,  0x00,  0x00,  0xd7, 
+0xff,  0x00,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xd7,  0x00,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xa1,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x2d,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x2d,  0x6f,  0x2d,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x2d,  0x2d,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x2d,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x45,  0x46,  0x45,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x03,  0x2d,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x2d,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x2d,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xa1,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x6f,  0x10,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x10,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0x45,  0x45,  0x45,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x03,  0x03,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xa1,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x6f,  0x10,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x10,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x10,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0x10,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x45,  0x45,  0x45,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x03,  0x03,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x00,  0x00,  0x00,  0x00,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x00,  0x00,  0x00,  0xff,  0xff,  0x00,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0x00,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0x00,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x00,  0x00,  0x00,  0xff,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xf8,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0x34,  0x34,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x34,  0x44,  0x44,  0x34,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x34,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xf8,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0x34,  0x34,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x34,  0x44,  0x44,  0x34,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x34,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff, 
+0xf8,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x34,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff, 
+0xff,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff, 
+0xf8,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x34,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff, 
+0xff,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x34,  0xf8,  0xf8,  0x34,  0x34,  0x44,  0x44,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0x34,  0x34,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xf8,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x08,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x34,  0xf8,  0xf8,  0x34,  0x34,  0x44,  0x44,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0x44,  0x44,  0x44,  0x34,  0x34,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0x34,  0x34,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xf8,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x07,  0x07,  0x07,  0x07,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0x44,  0x08,  0x07,  0x07,  0x08,  0x44,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0x44,  0xff,  0xff,  0x00,  0x00,  0xff,  0xff,  0x44,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0x34,  0x34,  0x44,  0x44,  0x34,  0xf8,  0xf8,  0x34,  0x44,  0x44,  0x34,  0x34,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x34,  0x34,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x44,  0x44,  0x44,  0x44,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0x44,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x70,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x71,  0x10,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x10,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xda,  0x6f,  0xda,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x10,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6d,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6d,  0x6d,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6d,  0x6d,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6d,  0x6d,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xd9,  0xd9,  0xd9,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x70,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x71,  0x10,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x10,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0xda,  0xda,  0xda,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xda,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0xda,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xda,  0xda,  0xff,  0xff,  0xff,  0xda,  0xda,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x70,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x71,  0x10,  0x70,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x10,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x10,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x10,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xda,  0xda,  0xda,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xda,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0xda,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xda,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xda,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x07,  0x07,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0xf8,  0xf8,  0x07,  0x07,  0x00,  0x00,  0x07,  0x07,  0xf8,  0xf8,  0xf8,  0xff,  0xff, 
+0xf8,  0xf8,  0xf8,  0x07,  0x07,  0x07,  0x00,  0x00,  0x00,  0x00,  0x07,  0x07,  0x07,  0xf8,  0xf8,  0xf8, 
+0xf8,  0xf8,  0xf8,  0x07,  0x07,  0x07,  0x00,  0x00,  0x00,  0x00,  0x07,  0x07,  0x07,  0xf8,  0xf8,  0xf8, 
+0xff,  0xff,  0xf8,  0xf8,  0xf8,  0x07,  0x07,  0x00,  0x00,  0x07,  0x07,  0xf8,  0xf8,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x07,  0x07,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0x07,  0x07,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xc1,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xf8,  0x32,  0x5d,  0xc2,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xf8,  0xf8,  0xc0,  0x80,  0xf8,  0x80,  0x58,  0x58,  0x07,  0x32,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0x58,  0x07,  0x32,  0x04,  0x04,  0x03,  0x07,  0x64,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xf8,  0x80,  0x32,  0x07,  0x0a,  0x09,  0x00,  0x18,  0x32,  0xf8,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x5d,  0x03,  0x00,  0x00,  0x00,  0x11,  0x07,  0xa2,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xc0,  0x07,  0x0a,  0x00,  0x00,  0x0c,  0x07,  0x80,  0xf8,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xc0,  0x32,  0x03,  0x0c,  0x03,  0x04,  0x07,  0x07,  0x80,  0xf8,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xc1,  0x27,  0x07,  0x07,  0x58,  0x58,  0x80,  0x32,  0xc1,  0xf8,  0xf8,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xa2,  0x07,  0x32,  0xc1,  0xf8,  0xff,  0xf8,  0xc2,  0xf8,  0xf8,  0xf8,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xc0,  0xc0,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xf8,  0xf8,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0xbf,  0xbf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x64,  0x64,  0xbf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x00,  0x00,  0x64,  0xbf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0xf8,  0x00,  0x64,  0xbf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x64,  0x64,  0x64,  0x64,  0x64,  0xbf,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xff,  0xff, 
+0xff,  0xff,  0xbf,  0xbf,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0xbf,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0xbf,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0xbf,  0xbf,  0xff, 
+0xff,  0xff,  0xff,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0xbf,  0xbf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x64,  0x64,  0xbf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x00,  0x00,  0x64,  0xbf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0xf8,  0x00,  0x64,  0xbf,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x64,  0x64,  0x64,  0x64,  0x64,  0xbf,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xff,  0xff, 
+0xff,  0xff,  0xbf,  0xbf,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0xbf,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0x3c,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0x64,  0xbf,  0xff, 
+0xff,  0xff,  0xbf,  0xbf,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0x64,  0xbf,  0xbf,  0xff, 
+0xff,  0xff,  0xff,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xbf,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x07,  0x07,  0x07,  0x07,  0xff,  0xff,  0x07,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0xbe,  0xbe,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x63,  0x63,  0xbe,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x00,  0x00,  0x63,  0xbd,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0xf8,  0x00,  0x62,  0xbd,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xbf,  0x64,  0x63,  0x62,  0x62,  0x60,  0xba,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xbf,  0xbf,  0xbf,  0xbe,  0xbe,  0xbd,  0xbd,  0xba,  0xba,  0xb9,  0xb9,  0xff,  0xff, 
+0xff,  0xff,  0xbf,  0xbf,  0x64,  0x64,  0x63,  0x63,  0x62,  0x60,  0x60,  0x5f,  0x5f,  0xb7,  0xb7,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0xbf,  0xbe,  0xbd,  0xbd,  0xba,  0xba,  0xb9,  0xb9,  0x5f,  0xb5,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x38,  0x38,  0x37,  0x37,  0x36,  0x35,  0x35,  0xb7,  0x5f,  0xb5,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x38,  0x38,  0x37,  0x37,  0x36,  0x35,  0x35,  0xb7,  0x5f,  0xb5,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0x38,  0x38,  0x37,  0x37,  0x36,  0x35,  0x35,  0xb7,  0x5f,  0xb5,  0xff, 
+0xff,  0xff,  0xbf,  0x64,  0xbf,  0xbe,  0xbe,  0xbd,  0xbd,  0xba,  0xb9,  0xb9,  0xb7,  0x5f,  0xb5,  0xff, 
+0xff,  0xff,  0xbf,  0xbf,  0x64,  0x63,  0x63,  0x62,  0x62,  0x60,  0x5f,  0x5f,  0x5f,  0xb5,  0xb5,  0xff, 
+0xff,  0xff,  0x07,  0xbf,  0xbf,  0xbe,  0xbe,  0xbd,  0xbd,  0xba,  0xb9,  0xb9,  0xb7,  0xb7,  0x05,  0xff, 
+0xff,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x06,  0x05,  0x05, 
+0x07,  0x07,  0x07,  0x07,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x06,  0x06,  0x06,  0x05, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x42,  0xa0,  0x9d,  0x43,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x42,  0x42,  0x42,  0xd8,  0xd8,  0x42,  0x43,  0x43,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x41,  0xd7,  0x9f,  0x9d,  0x9f,  0x9d,  0xa0,  0xa0,  0xd8,  0x42,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0x9f,  0x9e,  0x9e,  0x9e,  0x40,  0x9f,  0x9d,  0x41,  0xa0,  0xa0,  0xa0,  0x9e,  0xff,  0xff, 
+0xff,  0xff,  0x40,  0x40,  0x9e,  0x40,  0x40,  0xd7,  0xd8,  0x41,  0x41,  0x9f,  0x42,  0x42,  0xff,  0xff, 
+0xff,  0xff,  0xd7,  0x9d,  0x9d,  0x3f,  0xd7,  0x9d,  0x9e,  0xd7,  0x41,  0x9e,  0x9e,  0xd7,  0xff,  0xff, 
+0xff,  0xff,  0x3f,  0x9d,  0x3f,  0x3f,  0x3f,  0x9d,  0x9d,  0x40,  0x3f,  0x41,  0x9f,  0x42,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x3e,  0x05,  0x34,  0x05,  0x3e,  0x3f,  0x05,  0x34,  0x05,  0x41,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0x3d,  0x3d,  0x3d,  0x3d,  0x3e,  0x3e,  0x3f,  0x3f,  0x40,  0x41,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x3d,  0x3d,  0x3e,  0x3f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x3d,  0x39,  0x3b,  0x3f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x39,  0x39,  0x39,  0x39,  0x3b,  0x3b,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x39,  0x3b,  0xff,  0x39,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x39,  0x39,  0x39,  0x3b,  0xff,  0x39,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x39,  0x3b,  0xff,  0xff,  0x3b,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x39,  0x39,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0x00,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xa1,  0xa1,  0xa1,  0xa1,  0xff,  0xff,  0x00,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0x00,  0xff,  0xff,  0xa1,  0xa1,  0xa1,  0xa1,  0xa1,  0xa1,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xa1,  0x10,  0xf8,  0x10,  0x10,  0xf8,  0x10,  0xa1,  0xff,  0x00,  0xff,  0xff, 
+0xff,  0xff,  0x00,  0xff,  0xa1,  0x10,  0x10,  0x2d,  0x2d,  0x10,  0x10,  0xa1,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x10,  0x10,  0x10,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x46,  0x46,  0x46,  0x46,  0x46,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x46,  0x45,  0x45,  0x45,  0x45,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x03,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x03,  0x03,  0x03,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x03,  0x03,  0x03,  0x03,  0x03,  0x03,  0x03,  0x03,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xf8,  0xf8,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x00,  0xff,  0x00,  0xff,  0x00,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x00,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x00,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0x00,  0xff,  0x70,  0x10,  0x10,  0x10,  0x10,  0x10,  0x10,  0x70,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0xf8,  0x10,  0x10,  0xf8,  0x10,  0xff,  0xff,  0x00,  0xff,  0xff, 
+0xff,  0xff,  0x00,  0xff,  0xff,  0xff,  0x10,  0x2d,  0x2d,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x10,  0x10,  0x10,  0xff,  0xff,  0xff,  0x00,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0xda,  0xda,  0xda,  0xda,  0x10,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x10,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0x6f,  0x6f,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x6f,  0x6f,  0xda,  0xda,  0xda,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xda,  0xda,  0xda,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x45,  0x45,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x45,  0x3a,  0x3a,  0x45,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x45,  0x3a,  0x00,  0x00,  0x3a,  0x45,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0x45,  0x3a,  0x00,  0x00,  0x3a,  0x45,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x45,  0x3a,  0x3a,  0x45,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0x45,  0x45,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff,  0xff, 
+};
+static PROGMEM prog_uchar sprite_sprpal[] = {
+
+0xff,  0x7f,  0xf7,  0x7f,  0xeb,  0x7f,  0xe8,  0x7f,  0xe2,  0x7f,  0xe0,  0x7f,  0xe0,  0x7f,  0xe0,  0x7f, 
+0xe0,  0x63,  0xfa,  0x7f,  0xf8,  0x7f,  0xf6,  0x7f,  0xf5,  0x7f,  0xf3,  0x7f,  0xd4,  0x7f,  0x9c,  0x73, 
+0x7b,  0x7f,  0xf1,  0x7f,  0xf1,  0x7f,  0xef,  0x7f,  0xef,  0x7f,  0xee,  0x7f,  0xed,  0x7f,  0xee,  0x7f, 
+0xec,  0x7f,  0xec,  0x7f,  0xeb,  0x7f,  0xea,  0x7f,  0xec,  0x7f,  0xeb,  0x7f,  0xcb,  0x7f,  0xcc,  0x7f, 
+0xab,  0x7f,  0xa9,  0x7f,  0xc4,  0x7f,  0x8b,  0x7f,  0x89,  0x7f,  0x6a,  0x7f,  0x88,  0x7f,  0x83,  0x7f, 
+0x6a,  0x7f,  0x48,  0x7f,  0x49,  0x7f,  0x48,  0x7f,  0x28,  0x7f,  0x18,  0x7f,  0x08,  0x7f,  0x08,  0x7f, 
+0x2b,  0x7b,  0x18,  0x63,  0x22,  0x7f,  0x24,  0x73,  0x00,  0x63,  0xf0,  0x43,  0xf0,  0x43,  0xf0,  0x43, 
+0xf0,  0x43,  0xeb,  0x3f,  0xff,  0x23,  0xeb,  0x3b,  0xe8,  0x23,  0x5a,  0x07,  0x5a,  0x07,  0x39,  0x03, 
+0x39,  0x03,  0x39,  0x03,  0x39,  0x03,  0x39,  0x03,  0xe0,  0x03,  0x18,  0x03,  0x00,  0x03,  0xe8,  0x7e, 
+0xc7,  0x7e,  0xe6,  0x7e,  0xe4,  0x7e,  0xc7,  0x7e,  0xc7,  0x7a,  0xc4,  0x7e,  0xa7,  0x7a,  0x86,  0x7a, 
+0x86,  0x7a,  0xa3,  0x7e,  0x66,  0x7e,  0x64,  0x7e,  0x66,  0x7a,  0x66,  0x7a,  0x66,  0x76,  0x65,  0x7e, 
+0x61,  0x7e,  0x45,  0x7e,  0x24,  0x7e,  0x45,  0x7a,  0x23,  0x7e,  0x20,  0x7e,  0x25,  0x7a,  0x00,  0x7e, 
+0x00,  0x7e,  0x05,  0x7a,  0x00,  0x7e,  0x00,  0x7e,  0x00,  0x7e,  0x03,  0x7a,  0x04,  0x76,  0x87,  0x72, 
+0x26,  0x72,  0x05,  0x72,  0x05,  0x6e,  0x47,  0x66,  0x06,  0x66,  0x1f,  0x42,  0x0c,  0x4e,  0x1f,  0x42, 
+0x10,  0x42,  0x00,  0x42,  0xe4,  0x79,  0xe4,  0x75,  0xe3,  0x71,  0xe4,  0x71,  0xc2,  0x79,  0xc3,  0x71, 
+0xc3,  0x71,  0xe5,  0x6d,  0xc4,  0x6d,  0xe5,  0x69,  0xc4,  0x69,  0xc5,  0x65,  0xa1,  0x7d,  0xa3,  0x75, 
+
+0x60,  0x7d,  0xa3,  0x69,  0x83,  0x69,  0xa3,  0x65,  0x83,  0x65,  0x63,  0x65,  0x42,  0x61,  0xc5,  0x5d, 
+0xa5,  0x5d,  0x84,  0x5d,  0xc5,  0x55,  0xa5,  0x51,  0x85,  0x55,  0x63,  0x5d,  0x62,  0x5d,  0x64,  0x59, 
+0x64,  0x51,  0x64,  0x49,  0x42,  0x5d,  0x42,  0x5d,  0x43,  0x59,  0x43,  0x55,  0x43,  0x55,  0x43,  0x55, 
+0x43,  0x4d,  0x63,  0x49,  0x43,  0x4d,  0x43,  0x49,  0x43,  0x45,  0x08,  0x7d,  0x08,  0x7d,  0x08,  0x7d, 
+0x08,  0x7d,  0x03,  0x75,  0x20,  0x7d,  0x22,  0x59,  0x22,  0x55,  0x02,  0x51,  0x22,  0x4d,  0x02,  0x4d, 
+0x22,  0x49,  0x23,  0x45,  0x02,  0x49,  0x23,  0x41,  0x23,  0x41,  0x03,  0x41,  0x02,  0x49,  0x01,  0x49, 
+0x02,  0x45,  0x02,  0x41,  0x03,  0x3d,  0x24,  0x3d,  0x24,  0x39,  0x03,  0x39,  0x03,  0x3d,  0x03,  0x39, 
+0x02,  0x39,  0x03,  0x39,  0x03,  0x39,  0x03,  0x39,  0x03,  0x35,  0x02,  0x35,  0x02,  0x35,  0x02,  0x35, 
+0xa0,  0x7c,  0x20,  0x7c,  0x00,  0x7c,  0xe2,  0x44,  0xe1,  0x44,  0xe2,  0x40,  0xe1,  0x40,  0xe2,  0x3c, 
+0xc2,  0x3c,  0xc1,  0x3c,  0xe2,  0x38,  0xe2,  0x38,  0xe2,  0x38,  0xe2,  0x38,  0xc2,  0x34,  0xc1,  0x38, 
+0xc1,  0x38,  0xa1,  0x38,  0xa1,  0x38,  0x26,  0x2d,  0xe3,  0x30,  0xe2,  0x34,  0xe3,  0x2c,  0x08,  0x21, 
+0x08,  0x21,  0x08,  0x21,  0x08,  0x21,  0xe2,  0x34,  0xc2,  0x30,  0xc2,  0x30,  0xc2,  0x30,  0xc2,  0x30, 
+0xc2,  0x2c,  0xc1,  0x2c,  0xc2,  0x2c,  0xc2,  0x28,  0xc2,  0x24,  0xa1,  0x34,  0xa1,  0x30,  0xa1,  0x30, 
+0xa1,  0x2c,  0xa1,  0x2c,  0xa2,  0x28,  0x81,  0x30,  0xa1,  0x2c,  0xa1,  0x28,  0x81,  0x28,  0xa2,  0x28, 
+0xa2,  0x24,  0xa1,  0x28,  0xa1,  0x24,  0xa2,  0x20,  0x81,  0x28,  0x81,  0x28,  0x81,  0x24,  0x81,  0x24, 
+0x00,  0x7c,  0x1f,  0x30,  0x00,  0x60,  0x1f,  0x00,  0x18,  0x00,  0x10,  0x00,  0x00,  0x00,  0x00,  0x80, 
+};