Just4Fun
Published © LGPL

A $4, 4 x IC, Z80 Homemade Computer on Breadboard

No iron, no cry! Simply wire it to build a mini 4MHz Z80 64kB RAM system with a Basic interpreter as an educational technological puzzle!

IntermediateFull instructions providedOver 2 days3,106
A $4, 4 x IC, Z80 Homemade Computer on Breadboard

Things used in this project

Hardware components

Z80 CPU CMOS (Z84C00) 4Mhz or greater
×1
Atmega32A
×1
TC551001-70
×1
74HC00
×1
Others (see schematic)
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Schematics

vwPIqnte5E6mal5gy4BI.pdf

Code

S221116_Z80_Breadboard.ino

Arduino
/* ------------------------------------------------------------------------------

S221116 - HW ref: A041116

IOS - I/O Subsystem - for Z80-MBC (Mobile Breadboard Computer)
(Z80 64kB RAM @ 4Mhz)



Notes:

1:  This SW is ONLY for the Atmega32A used as EEPROM and I/O subsystem (8MHz internal oscillator).
    
2:  Tested on ATmega16A/Atmega32A @ Arduino IDE 1.6.5.

3:  Embedded FW: S091116 Loader, S121216 uBIOS + Basic

4:  Utilities: S111216 TASM conversion utility (S111216.c)

--------------------------------------------------------------------------------- */


// ------------------------------------------------------------------------------
//
// Hardware definitions (see A041116 schematic)
//
// ------------------------------------------------------------------------------

#define   D0          24  // PA0 pin 40   Z80 data bus
#define   D1          25  // PA1 pin 39
#define   D2          26  // PA2 pin 38
#define   D3          27  // PA3 pin 37
#define   D4          28  // PA4 pin 36
#define   D5          29  // PA5 pin 35
#define   D6          30  // PA6 pin 34
#define   D7          31  // PA7 pin 33

#define   AD0         18  // PC2 pin 24   Z80 address bus (AD0-AD8 = A0-A8 on A04113 schematic)
#define   AD1         19  // PC3 pin 25
#define   AD2         20  // PC4 pin 26
#define   AD3         21  // PC5 pin 27
#define   AD4         22  // PC6 pin 28
#define   AD5         23  // PC7 pin 29
#define   AD6         10  // PD2 pin 16
#define   AD7         11  // PD3 pin 17
#define   AD8         12  // PD4 pin 18

#define   INT_         1  // PB1 pin 2    Z80 control bus
#define   BUSACK_      2  // PB2 pin 3
#define   WAIT_        3  // PB3 pin 4
#define   WR_          4  // PB4 pin 5
#define   RD_          5  // PB5 pin 6
#define   MREQ_        6  // PB6 pin 7
#define   RESET_       7  // PB7 pin 8
#define   BUSREQ_     14  // PD6 pin 20
#define   CLK         15  // PD7 pin 21

#define   SCL_PC0     16  // PC0 pin 22   IOEXP connector
#define   SDA_PC1     17  // PC1 pin 23

#define   LED_D0       0  // PB0 pin 1    Led LED_0 ON if HIGH
#define   WAIT_RES_    0  // PB0 pin 1    Internal control line
#define   USER        13  // PD5 pin 19   Led USER and key

// ------------------------------------------------------------------------------
//
//  Libraries
//
// ------------------------------------------------------------------------------

#include <avr/pgmspace.h>                 // needed for PROGMEM

// ------------------------------------------------------------------------------
//
//  Constants
//
// ------------------------------------------------------------------------------

const byte  debugLev          = 0;      // Set the level of debug (0 = no debug, 1 = only phase 1 boot, 
                                        // 2 = 1 + phase 2 boot + runtime I/O)
                                        
const word  bootPhase1StrAddr = 0x0000; // Phase 1 payload image starting address
const byte  bootPhase1[] PROGMEM = {    // Phase 1 payload image (S091116 Loader) 
  0xC3, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x15, 0x00, 0x11, 0x00, 0xFC, 0x01, 0x24, 0x00, 
  0xED, 0xB0, 0xC3, 0x00, 0xFC, 0xED, 0x5B, 0x05, 0x00, 0x2A, 0x03, 0x00, 0xDD, 0x2A, 0x03, 0x00, 
  0x0E, 0x02, 0x06, 0x00, 0x7A, 0xB7, 0xCA, 0x1A, 0xFC, 0xED, 0xB2, 0x3D, 0xC3, 0x11, 0xFC, 0x7B, 
  0xB7, 0xCA, 0x22, 0xFC, 0x43, 0xED, 0xB2, 0xDD, 0xE9
  }; 

const word  bootPhase2StrAddr = 0x0000; // Phase 2 payload image starting address
const byte  bootPhase2[] PROGMEM = {    // Phase 2 payload image (S121216 uBIOS + Basic)
  0xF3, 0xC3, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0xC3, 0x6A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xF5, 0xE5, 0xDB, 0x01, 0xF5, 0x3A, 
  0x43, 0x20, 0xFE, 0x3F, 0x20, 0x03, 0xF1, 0x18, 0x1C, 0x2A, 0x3F, 0x20, 0x23, 0x7D, 0xFE, 0x3F, 
  0x20, 0x03, 0x21, 0x00, 0x20, 0x22, 0x3F, 0x20, 0xF1, 0x77, 0x3A, 0x43, 0x20, 0x3C, 0x32, 0x43, 
  0x20, 0xFE, 0x30, 0x38, 0x00, 0xE1, 0xF1, 0xFB, 0xED, 0x4D, 0x3A, 0x43, 0x20, 0xFE, 0x00, 0x28, 
  0xF9, 0xE5, 0x2A, 0x41, 0x20, 0x23, 0x7D, 0xFE, 0x3F, 0x20, 0x03, 0x21, 0x00, 0x20, 0xF3, 0x22, 
  0x41, 0x20, 0x3A, 0x43, 0x20, 0x3D, 0x32, 0x43, 0x20, 0xFE, 0x05, 0x30, 0x00, 0x7E, 0xFB, 0xE1, 
  0xC9, 0xF5, 0xF1, 0xD3, 0x01, 0xC9, 0x3A, 0x43, 0x20, 0xFE, 0x00, 0xC9, 0x7E, 0xB7, 0xC8, 0xCF, 
  0x23, 0x18, 0xF9, 0xC9, 0x21, 0xED, 0x20, 0xF9, 0x21, 0x00, 0x20, 0x22, 0x3F, 0x20, 0x22, 0x41, 
  0x20, 0xAF, 0x32, 0x43, 0x20, 0xED, 0x56, 0xFB, 0x21, 0xF1, 0x00, 0xCD, 0x9C, 0x00, 0x3A, 0x44, 
  0x20, 0xFE, 0x59, 0x20, 0x16, 0x21, 0x2A, 0x01, 0xCD, 0x9C, 0x00, 0xCD, 0x6A, 0x00, 0xE6, 0xDF, 
  0xFE, 0x43, 0x20, 0x0F, 0xCF, 0x3E, 0x0D, 0xCF, 0x3E, 0x0A, 0xCF, 0x3E, 0x59, 0x32, 0x44, 0x20, 
  0xC3, 0x50, 0x01, 0xFE, 0x57, 0x20, 0xE4, 0xCF, 0x3E, 0x0D, 0xCF, 0x3E, 0x0A, 0xCF, 0xC3, 0x53, 
  0x01, 0x75, 0x42, 0x49, 0x4F, 0x53, 0x20, 0x2D, 0x20, 0x53, 0x31, 0x32, 0x31, 0x32, 0x31, 0x36, 
  0x20, 0x28, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x64, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x5A, 
  0x38, 0x30, 0x20, 0x53, 0x42, 0x43, 0x20, 0x62, 0x79, 0x20, 0x47, 0x72, 0x61, 0x6E, 0x74, 0x20, 
  0x53, 0x65, 0x61, 0x72, 0x6C, 0x65, 0x29, 0x0D, 0x0A, 0x00, 0x0D, 0x0A, 0x75, 0x42, 0x49, 0x4F, 
  0x53, 0x3A, 0x20, 0x43, 0x6F, 0x6C, 0x64, 0x20, 0x6F, 0x72, 0x20, 0x77, 0x61, 0x72, 0x6D, 0x20, 
  0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x28, 0x43, 0x2F, 0x57, 0x29, 0x3F, 0x00, 0x00, 0x00, 0x00, 
  0xC3, 0x56, 0x01, 0xC3, 0xF4, 0x01, 0xDD, 0x21, 0x00, 0x00, 0xC3, 0x61, 0x01, 0x07, 0x0A, 0x7D, 
  0x11, 0x21, 0x45, 0x20, 0xF9, 0xC3, 0x9C, 0x1D, 0x11, 0x2E, 0x04, 0x06, 0x63, 0x21, 0x45, 0x20, 
  0x1A, 0x77, 0x23, 0x13, 0x05, 0xC2, 0x70, 0x01, 0xF9, 0xCD, 0x2F, 0x06, 0xCD, 0xFD, 0x0B, 0x32, 
  0xEF, 0x20, 0x32, 0x3E, 0x21, 0x21, 0x43, 0x02, 0xCD, 0x9B, 0x12, 0xCD, 0x4C, 0x06, 0xCD, 0x55, 
  0x09, 0xB7, 0xC2, 0xAA, 0x01, 0x21, 0xA2, 0x21, 0x23, 0x7C, 0xB5, 0xCA, 0xBC, 0x01, 0x7E, 0x47, 
  0x2F, 0x77, 0xBE, 0x70, 0xCA, 0x98, 0x01, 0xC3, 0xBC, 0x01, 0xCD, 0x21, 0x0A, 0xB7, 0xC2, 0xFD, 
  0x04, 0xEB, 0x2B, 0x3E, 0xD9, 0x46, 0x77, 0xBE, 0x70, 0xC2, 0x85, 0x01, 0x2B, 0x11, 0xA1, 0x21, 
  0xCD, 0xC5, 0x07, 0xDA, 0x85, 0x01, 0x11, 0xCE, 0xFF, 0x22, 0xF4, 0x20, 0x19, 0x22, 0x9F, 0x20, 
  0xCD, 0x0A, 0x06, 0x2A, 0x9F, 0x20, 0x11, 0xEF, 0xFF, 0x19, 0x11, 0x3E, 0x21, 0x7D, 0x93, 0x6F, 
  0x7C, 0x9A, 0x67, 0xE5, 0x21, 0x0C, 0x02, 0xCD, 0x9B, 0x12, 0xE1, 0xCD, 0x3E, 0x19, 0x21, 0xFD, 
  0x01, 0xCD, 0x9B, 0x12, 0x31, 0xAB, 0x20, 0xCD, 0x2F, 0x06, 0xC3, 0x48, 0x05, 0x20, 0x42, 0x79, 
  0x74, 0x65, 0x73, 0x20, 0x66, 0x72, 0x65, 0x65, 0x0D, 0x0A, 0x00, 0x00, 0x5A, 0x38, 0x30, 0x20, 
  0x42, 0x41, 0x53, 0x49, 0x43, 0x20, 0x56, 0x65, 0x72, 0x20, 0x34, 0x2E, 0x37, 0x62, 0x0D, 0x0A, 
  0x43, 0x6F, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x31, 0x39, 
  0x37, 0x38, 0x20, 0x62, 0x79, 0x20, 0x4D, 0x69, 0x63, 0x72, 0x6F, 0x73, 0x6F, 0x66, 0x74, 0x0D, 
  0x0A, 0x00, 0x00, 0x4D, 0x65, 0x6D, 0x6F, 0x72, 0x79, 0x20, 0x74, 0x6F, 0x70, 0x00, 0xB3, 0x17, 
  0x77, 0x18, 0xC9, 0x17, 0x48, 0x20, 0x5B, 0x11, 0xE0, 0x14, 0x89, 0x11, 0x3D, 0x1A, 0x1C, 0x1B, 
  0x58, 0x16, 0x8B, 0x1A, 0x91, 0x1B, 0x97, 0x1B, 0xF8, 0x1B, 0x0D, 0x1C, 0x34, 0x15, 0x78, 0x1C, 
  0x96, 0x20, 0x0D, 0x14, 0x25, 0x12, 0xA7, 0x14, 0x1C, 0x14, 0x2D, 0x14, 0x9A, 0x1C, 0x2D, 0x1D, 
  0x3D, 0x14, 0x6D, 0x14, 0x77, 0x14, 0xC5, 0x4E, 0x44, 0xC6, 0x4F, 0x52, 0xCE, 0x45, 0x58, 0x54, 
  0xC4, 0x41, 0x54, 0x41, 0xC9, 0x4E, 0x50, 0x55, 0x54, 0xC4, 0x49, 0x4D, 0xD2, 0x45, 0x41, 0x44, 
  0xCC, 0x45, 0x54, 0xC7, 0x4F, 0x54, 0x4F, 0xD2, 0x55, 0x4E, 0xC9, 0x46, 0xD2, 0x45, 0x53, 0x54, 
  0x4F, 0x52, 0x45, 0xC7, 0x4F, 0x53, 0x55, 0x42, 0xD2, 0x45, 0x54, 0x55, 0x52, 0x4E, 0xD2, 0x45, 
  0x4D, 0xD3, 0x54, 0x4F, 0x50, 0xCF, 0x55, 0x54, 0xCF, 0x4E, 0xCE, 0x55, 0x4C, 0x4C, 0xD7, 0x41, 
  0x49, 0x54, 0xC4, 0x45, 0x46, 0xD0, 0x4F, 0x4B, 0x45, 0xC4, 0x4F, 0x4B, 0x45, 0xD3, 0x43, 0x52, 
  0x45, 0x45, 0x4E, 0xCC, 0x49, 0x4E, 0x45, 0x53, 0xC3, 0x4C, 0x53, 0xD7, 0x49, 0x44, 0x54, 0x48, 
  0xCD, 0x4F, 0x4E, 0x49, 0x54, 0x4F, 0x52, 0xD3, 0x45, 0x54, 0xD2, 0x45, 0x53, 0x45, 0x54, 0xD0, 
  0x52, 0x49, 0x4E, 0x54, 0xC3, 0x4F, 0x4E, 0x54, 0xCC, 0x49, 0x53, 0x54, 0xC3, 0x4C, 0x45, 0x41, 
  0x52, 0xC3, 0x4C, 0x4F, 0x41, 0x44, 0xC3, 0x53, 0x41, 0x56, 0x45, 0xCE, 0x45, 0x57, 0xD4, 0x41, 
  0x42, 0x28, 0xD4, 0x4F, 0xC6, 0x4E, 0xD3, 0x50, 0x43, 0x28, 0xD4, 0x48, 0x45, 0x4E, 0xCE, 0x4F, 
  0x54, 0xD3, 0x54, 0x45, 0x50, 0xAB, 0xAD, 0xAA, 0xAF, 0xDE, 0xC1, 0x4E, 0x44, 0xCF, 0x52, 0xBE, 
  0xBD, 0xBC, 0xD3, 0x47, 0x4E, 0xC9, 0x4E, 0x54, 0xC1, 0x42, 0x53, 0xD5, 0x53, 0x52, 0xC6, 0x52, 
  0x45, 0xC9, 0x4E, 0x50, 0xD0, 0x4F, 0x53, 0xD3, 0x51, 0x52, 0xD2, 0x4E, 0x44, 0xCC, 0x4F, 0x47, 
  0xC5, 0x58, 0x50, 0xC3, 0x4F, 0x53, 0xD3, 0x49, 0x4E, 0xD4, 0x41, 0x4E, 0xC1, 0x54, 0x4E, 0xD0, 
  0x45, 0x45, 0x4B, 0xC4, 0x45, 0x45, 0x4B, 0xD0, 0x4F, 0x49, 0x4E, 0x54, 0xCC, 0x45, 0x4E, 0xD3, 
  0x54, 0x52, 0x24, 0xD6, 0x41, 0x4C, 0xC1, 0x53, 0x43, 0xC3, 0x48, 0x52, 0x24, 0xC8, 0x45, 0x58, 
  0x24, 0xC2, 0x49, 0x4E, 0x24, 0xCC, 0x45, 0x46, 0x54, 0x24, 0xD2, 0x49, 0x47, 0x48, 0x54, 0x24, 
  0xCD, 0x49, 0x44, 0x24, 0x80, 0x9F, 0x09, 0x9C, 0x08, 0x77, 0x0D, 0xEC, 0x0A, 0x7E, 0x0C, 0xB3, 
  0x0F, 0xAD, 0x0C, 0x03, 0x0B, 0xA9, 0x0A, 0x8C, 0x0A, 0x7B, 0x0B, 0x65, 0x09, 0x98, 0x0A, 0xC7, 
  0x0A, 0xEE, 0x0A, 0x9D, 0x09, 0xEC, 0x14, 0x5D, 0x0B, 0xDE, 0x09, 0xF2, 0x14, 0x91, 0x11, 0x3B, 
  0x15, 0x83, 0x1C, 0xEE, 0x0A, 0x69, 0x1C, 0x5C, 0x1C, 0x61, 0x1C, 0x99, 0x1D, 0x99, 0x20, 0x9C, 
  0x20, 0x9F, 0x0B, 0xCB, 0x09, 0x11, 0x08, 0x46, 0x0A, 0xEE, 0x0A, 0xEE, 0x0A, 0x09, 0x06, 0x79, 
  0x25, 0x19, 0x79, 0x59, 0x15, 0x7C, 0x97, 0x16, 0x7C, 0xF8, 0x16, 0x7F, 0x46, 0x1A, 0x50, 0x0C, 
  0x0F, 0x46, 0x0B, 0x0F, 0x4E, 0x46, 0x53, 0x4E, 0x52, 0x47, 0x4F, 0x44, 0x46, 0x43, 0x4F, 0x56, 
  0x4F, 0x4D, 0x55, 0x4C, 0x42, 0x53, 0x44, 0x44, 0x2F, 0x30, 0x49, 0x44, 0x54, 0x4D, 0x4F, 0x53, 
  0x4C, 0x53, 0x53, 0x54, 0x43, 0x4E, 0x55, 0x46, 0x4D, 0x4F, 0x48, 0x58, 0x42, 0x4E, 0xC3, 0xF4, 
  0x01, 0xC3, 0x1C, 0x0A, 0xD3, 0x00, 0xC9, 0xD6, 0x00, 0x6F, 0x7C, 0xDE, 0x00, 0x67, 0x78, 0xDE, 
  0x00, 0x47, 0x3E, 0x00, 0xC9, 0x00, 0x00, 0x00, 0x35, 0x4A, 0xCA, 0x99, 0x39, 0x1C, 0x76, 0x98, 
  0x22, 0x95, 0xB3, 0x98, 0x0A, 0xDD, 0x47, 0x98, 0x53, 0xD1, 0x99, 0x99, 0x0A, 0x1A, 0x9F, 0x98, 
  0x65, 0xBC, 0xCD, 0x98, 0xD6, 0x77, 0x3E, 0x98, 0x52, 0xC7, 0x4F, 0x80, 0xDB, 0x00, 0xC9, 0x01, 
  0xFF, 0x1C, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC3, 0x42, 0x07, 0xC3, 
  0x00, 0x00, 0xC3, 0x00, 0x00, 0xC3, 0x00, 0x00, 0xA2, 0x21, 0xFE, 0xFF, 0x3F, 0x21, 0x20, 0x45, 
  0x72, 0x72, 0x6F, 0x72, 0x00, 0x20, 0x69, 0x6E, 0x20, 0x00, 0x4F, 0x6B, 0x0D, 0x0A, 0x00, 0x00, 
  0x42, 0x72, 0x65, 0x61, 0x6B, 0x00, 0x21, 0x04, 0x00, 0x39, 0x7E, 0x23, 0xFE, 0x81, 0xC0, 0x4E, 
  0x23, 0x46, 0x23, 0xE5, 0x69, 0x60, 0x7A, 0xB3, 0xEB, 0xCA, 0xC0, 0x04, 0xEB, 0xCD, 0xC5, 0x07, 
  0x01, 0x0D, 0x00, 0xE1, 0xC8, 0x09, 0xC3, 0xAA, 0x04, 0xCD, 0xE3, 0x04, 0xC5, 0xE3, 0xC1, 0xCD, 
  0xC5, 0x07, 0x7E, 0x02, 0xC8, 0x0B, 0x2B, 0xC3, 0xCF, 0x04, 0xE5, 0x2A, 0x1F, 0x21, 0x06, 0x00, 
  0x09, 0x09, 0x3E, 0xE5, 0x3E, 0xD0, 0x95, 0x6F, 0x3E, 0xFF, 0x9C, 0xDA, 0xF2, 0x04, 0x67, 0x39, 
  0xE1, 0xD8, 0x1E, 0x0C, 0xC3, 0x11, 0x05, 0x2A, 0x0E, 0x21, 0x22, 0xA1, 0x20, 0x1E, 0x02, 0x01, 
  0x1E, 0x14, 0x01, 0x1E, 0x00, 0x01, 0x1E, 0x12, 0x01, 0x1E, 0x22, 0x01, 0x1E, 0x0A, 0x01, 0x1E, 
  0x18, 0xCD, 0x2F, 0x06, 0x32, 0x8A, 0x20, 0xCD, 0xF0, 0x0B, 0x21, 0x04, 0x04, 0x57, 0x3E, 0x3F, 
  0xCD, 0xD6, 0x07, 0x19, 0x7E, 0xCD, 0xD6, 0x07, 0xCD, 0x55, 0x09, 0xCD, 0xD6, 0x07, 0x21, 0x8E, 
  0x04, 0xCD, 0x9B, 0x12, 0x2A, 0xA1, 0x20, 0x11, 0xFE, 0xFF, 0xCD, 0xC5, 0x07, 0xCA, 0x61, 0x01, 
  0x7C, 0xA5, 0x3C, 0xC4, 0x36, 0x19, 0x3E, 0xC1, 0xAF, 0x32, 0x8A, 0x20, 0xCD, 0xF0, 0x0B, 0x21, 
  0x9A, 0x04, 0xCD, 0x9B, 0x12, 0x21, 0xFF, 0xFF, 0x22, 0xA1, 0x20, 0xCD, 0x42, 0x07, 0xDA, 0x55, 
  0x05, 0xCD, 0x55, 0x09, 0x3C, 0x3D, 0xCA, 0x55, 0x05, 0xF5, 0xCD, 0x21, 0x0A, 0xD5, 0xCD, 0x59, 
  0x06, 0x47, 0xD1, 0xF1, 0xD2, 0x35, 0x09, 0xD5, 0xC5, 0xAF, 0x32, 0x11, 0x21, 0xCD, 0x55, 0x09, 
  0xB7, 0xF5, 0xCD, 0xE9, 0x05, 0xDA, 0x8E, 0x05, 0xF1, 0xF5, 0xCA, 0xC2, 0x0A, 0xB7, 0xC5, 0xD2, 
  0xA5, 0x05, 0xEB, 0x2A, 0x1B, 0x21, 0x1A, 0x02, 0x03, 0x13, 0xCD, 0xC5, 0x07, 0xC2, 0x96, 0x05, 
  0x60, 0x69, 0x22, 0x1B, 0x21, 0xD1, 0xF1, 0xCA, 0xCC, 0x05, 0x2A, 0x1B, 0x21, 0xE3, 0xC1, 0x09, 
  0xE5, 0xCD, 0xC9, 0x04, 0xE1, 0x22, 0x1B, 0x21, 0xEB, 0x74, 0xD1, 0x23, 0x23, 0x73, 0x23, 0x72, 
  0x23, 0x11, 0xA6, 0x20, 0x1A, 0x77, 0x23, 0x13, 0xB7, 0xC2, 0xC4, 0x05, 0xCD, 0x15, 0x06, 0x23, 
  0xEB, 0x62, 0x6B, 0x7E, 0x23, 0xB6, 0xCA, 0x55, 0x05, 0x23, 0x23, 0x23, 0xAF, 0xBE, 0x23, 0xC2, 
  0xDD, 0x05, 0xEB, 0x73, 0x23, 0x72, 0xC3, 0xD1, 0x05, 0x2A, 0xA3, 0x20, 0x44, 0x4D, 0x7E, 0x23, 
  0xB6, 0x2B, 0xC8, 0x23, 0x23, 0x7E, 0x23, 0x66, 0x6F, 0xCD, 0xC5, 0x07, 0x60, 0x69, 0x7E, 0x23, 
  0x66, 0x6F, 0x3F, 0xC8, 0x3F, 0xD0, 0xC3, 0xEC, 0x05, 0xC0, 0x2A, 0xA3, 0x20, 0xAF, 0x77, 0x23, 
  0x77, 0x23, 0x22, 0x1B, 0x21, 0x2A, 0xA3, 0x20, 0x2B, 0x22, 0x13, 0x21, 0x2A, 0xF4, 0x20, 0x22, 
  0x08, 0x21, 0xAF, 0xCD, 0x65, 0x09, 0x2A, 0x1B, 0x21, 0x22, 0x1D, 0x21, 0x22, 0x1F, 0x21, 0xC1, 
  0x2A, 0x9F, 0x20, 0xF9, 0x21, 0xF8, 0x20, 0x22, 0xF6, 0x20, 0xAF, 0x6F, 0x67, 0x22, 0x19, 0x21, 
  0x32, 0x10, 0x21, 0x22, 0x23, 0x21, 0xE5, 0xC5, 0x2A, 0x13, 0x21, 0xC9, 0x3E, 0x3F, 0xCD, 0xD6, 
  0x07, 0x3E, 0x20, 0xCD, 0xD6, 0x07, 0xC3, 0x93, 0x20, 0xAF, 0x32, 0xF3, 0x20, 0x0E, 0x05, 0x11, 
  0xA6, 0x20, 0x7E, 0xFE, 0x20, 0xCA, 0xE1, 0x06, 0x47, 0xFE, 0x22, 0xCA, 0x01, 0x07, 0xB7, 0xCA, 
  0x08, 0x07, 0x3A, 0xF3, 0x20, 0xB7, 0x7E, 0xC2, 0xE1, 0x06, 0xFE, 0x3F, 0x3E, 0x9E, 0xCA, 0xE1, 
  0x06, 0x7E, 0xFE, 0x30, 0xDA, 0x8C, 0x06, 0xFE, 0x3C, 0xDA, 0xE1, 0x06, 0xD5, 0x11, 0x85, 0x02, 
  0xC5, 0x01, 0xDD, 0x06, 0xC5, 0x06, 0x7F, 0x7E, 0xFE, 0x61, 0xDA, 0xA5, 0x06, 0xFE, 0x7B, 0xD2, 
  0xA5, 0x06, 0xE6, 0x5F, 0x77, 0x4E, 0xEB, 0x23, 0xB6, 0xF2, 0xA7, 0x06, 0x04, 0x7E, 0xE6, 0x7F, 
  0xC8, 0xB9, 0xC2, 0xA7, 0x06, 0xEB, 0xE5, 0x13, 0x1A, 0xB7, 0xFA, 0xD9, 0x06, 0x4F, 0x78, 0xFE, 
  0x88, 0xC2, 0xC8, 0x06, 0xCD, 0x55, 0x09, 0x2B, 0x23, 0x7E, 0xFE, 0x61, 0xDA, 0xD1, 0x06, 0xE6, 
  0x5F, 0xB9, 0xCA, 0xB7, 0x06, 0xE1, 0xC3, 0xA5, 0x06, 0x48, 0xF1, 0xEB, 0xC9, 0xEB, 0x79, 0xC1, 
  0xD1, 0x23, 0x12, 0x13, 0x0C, 0xD6, 0x3A, 0xCA, 0xEF, 0x06, 0xFE, 0x49, 0xC2, 0xF2, 0x06, 0x32, 
  0xF3, 0x20, 0xD6, 0x54, 0xC2, 0x62, 0x06, 0x47, 0x7E, 0xB7, 0xCA, 0x08, 0x07, 0xB8, 0xCA, 0xE1, 
  0x06, 0x23, 0x12, 0x0C, 0x13, 0xC3, 0xF8, 0x06, 0x21, 0xA5, 0x20, 0x12, 0x13, 0x12, 0x13, 0x12, 
  0xC9, 0x3A, 0x89, 0x20, 0xB7, 0x3E, 0x00, 0x32, 0x89, 0x20, 0xC2, 0x25, 0x07, 0x05, 0xCA, 0x42, 
  0x07, 0xCD, 0xD6, 0x07, 0x3E, 0x05, 0x2B, 0xCA, 0x39, 0x07, 0x7E, 0xCD, 0xD6, 0x07, 0xC3, 0x4B, 
  0x07, 0x05, 0x2B, 0xCD, 0xD6, 0x07, 0xC2, 0x4B, 0x07, 0xCD, 0xD6, 0x07, 0xCD, 0xFD, 0x0B, 0xC3, 
  0x42, 0x07, 0x21, 0xA6, 0x20, 0x06, 0x01, 0xAF, 0x32, 0x89, 0x20, 0xCD, 0x00, 0x08, 0x4F, 0xFE, 
  0x7F, 0xCA, 0x11, 0x07, 0x3A, 0x89, 0x20, 0xB7, 0xCA, 0x64, 0x07, 0x3E, 0x00, 0xCD, 0xD6, 0x07, 
  0xAF, 0x32, 0x89, 0x20, 0x79, 0xFE, 0x07, 0xCA, 0xA8, 0x07, 0xFE, 0x03, 0xCC, 0xFD, 0x0B, 0x37, 
  0xC8, 0xFE, 0x0D, 0xCA, 0xF8, 0x0B, 0xFE, 0x15, 0xCA, 0x3C, 0x07, 0xFE, 0x40, 0xCA, 0x39, 0x07, 
  0xFE, 0x5F, 0xCA, 0x31, 0x07, 0xFE, 0x08, 0xCA, 0x31, 0x07, 0xFE, 0x12, 0xC2, 0xA3, 0x07, 0xC5, 
  0xD5, 0xE5, 0x36, 0x00, 0xCD, 0xAD, 0x1D, 0x21, 0xA6, 0x20, 0xCD, 0x9B, 0x12, 0xE1, 0xD1, 0xC1, 
  0xC3, 0x4B, 0x07, 0xFE, 0x20, 0xDA, 0x4B, 0x07, 0x78, 0xFE, 0x49, 0x3E, 0x07, 0xD2, 0xBD, 0x07, 
  0x79, 0x71, 0x32, 0x11, 0x21, 0x23, 0x04, 0xCD, 0xD6, 0x07, 0xC3, 0x4B, 0x07, 0xCD, 0xD6, 0x07, 
  0x3E, 0x08, 0xC3, 0xB7, 0x07, 0x7C, 0x92, 0xC0, 0x7D, 0x93, 0xC9, 0x7E, 0xE3, 0xBE, 0x23, 0xE3, 
  0xCA, 0x55, 0x09, 0xC3, 0xFD, 0x04, 0xF5, 0x3A, 0x8A, 0x20, 0xB7, 0xC2, 0xD0, 0x12, 0xF1, 0xC5, 
  0xF5, 0xFE, 0x20, 0xDA, 0xFA, 0x07, 0x3A, 0x87, 0x20, 0x47, 0x3A, 0xF0, 0x20, 0x04, 0xCA, 0xF6, 
  0x07, 0x05, 0xB8, 0xCC, 0xFD, 0x0B, 0x3C, 0x32, 0xF0, 0x20, 0xF1, 0xC1, 0xCD, 0x96, 0x1D, 0xC9, 
  0xCD, 0x5A, 0x1C, 0xE6, 0x7F, 0xFE, 0x0F, 0xC0, 0x3A, 0x8A, 0x20, 0x2F, 0x32, 0x8A, 0x20, 0xAF, 
  0xC9, 0xCD, 0x21, 0x0A, 0xC0, 0xC1, 0xCD, 0xE9, 0x05, 0xC5, 0xCD, 0x67, 0x08, 0xE1, 0x4E, 0x23, 
  0x46, 0x23, 0x78, 0xB1, 0xCA, 0x48, 0x05, 0xCD, 0x70, 0x08, 0xCD, 0x80, 0x09, 0xC5, 0xCD, 0xFD, 
  0x0B, 0x5E, 0x23, 0x56, 0x23, 0xE5, 0xEB, 0xCD, 0x3E, 0x19, 0x3E, 0x20, 0xE1, 0xCD, 0xD6, 0x07, 
  0x7E, 0xB7, 0x23, 0xCA, 0x1D, 0x08, 0xF2, 0x3D, 0x08, 0xD6, 0x7F, 0x4F, 0x11, 0x86, 0x02, 0x1A, 
  0x13, 0xB7, 0xF2, 0x4F, 0x08, 0x0D, 0xC2, 0x4F, 0x08, 0xE6, 0x7F, 0xCD, 0xD6, 0x07, 0x1A, 0x13, 
  0xB7, 0xF2, 0x59, 0x08, 0xC3, 0x40, 0x08, 0xE5, 0x2A, 0x8D, 0x20, 0x22, 0x8B, 0x20, 0xE1, 0xC9, 
  0xE5, 0xD5, 0x2A, 0x8B, 0x20, 0x11, 0xFF, 0xFF, 0xED, 0x5A, 0x22, 0x8B, 0x20, 0xD1, 0xE1, 0xF0, 
  0xE5, 0x2A, 0x8D, 0x20, 0x22, 0x8B, 0x20, 0xCD, 0x5A, 0x1C, 0xFE, 0x03, 0xCA, 0x93, 0x08, 0xE1, 
  0xC3, 0x70, 0x08, 0x2A, 0x8D, 0x20, 0x22, 0x8B, 0x20, 0xC3, 0xF7, 0x01, 0x3E, 0x64, 0x32, 0x10, 
  0x21, 0xCD, 0x03, 0x0B, 0xC1, 0xE5, 0xCD, 0xEC, 0x0A, 0x22, 0x0C, 0x21, 0x21, 0x02, 0x00, 0x39, 
  0xCD, 0xAA, 0x04, 0xD1, 0xC2, 0xCC, 0x08, 0x09, 0xD5, 0x2B, 0x56, 0x2B, 0x5E, 0x23, 0x23, 0xE5, 
  0x2A, 0x0C, 0x21, 0xCD, 0xC5, 0x07, 0xE1, 0xC2, 0xB0, 0x08, 0xD1, 0xF9, 0xEB, 0x0E, 0x08, 0xCD, 
  0xDA, 0x04, 0xE5, 0x2A, 0x0C, 0x21, 0xE3, 0xE5, 0x2A, 0xA1, 0x20, 0xE3, 0xCD, 0xC5, 0x0D, 0xCD, 
  0xCB, 0x07, 0xA6, 0xCD, 0xC2, 0x0D, 0xE5, 0xCD, 0xF0, 0x17, 0xE1, 0xC5, 0xD5, 0x01, 0x00, 0x81, 
  0x51, 0x5A, 0x7E, 0xFE, 0xAB, 0x3E, 0x01, 0xC2, 0x08, 0x09, 0xCD, 0x55, 0x09, 0xCD, 0xC2, 0x0D, 
  0xE5, 0xCD, 0xF0, 0x17, 0xCD, 0xA4, 0x17, 0xE1, 0xC5, 0xD5, 0xF5, 0x33, 0xE5, 0x2A, 0x13, 0x21, 
  0xE3, 0x06, 0x81, 0xC5, 0x33, 0xCD, 0x80, 0x09, 0x22, 0x13, 0x21, 0x7E, 0xFE, 0x3A, 0xCA, 0x35, 
  0x09, 0xB7, 0xC2, 0xFD, 0x04, 0x23, 0x7E, 0x23, 0xB6, 0xCA, 0xA7, 0x09, 0x23, 0x5E, 0x23, 0x56, 
  0xEB, 0x22, 0xA1, 0x20, 0xEB, 0xCD, 0x55, 0x09, 0x11, 0x15, 0x09, 0xD5, 0xC8, 0xD6, 0x80, 0xDA, 
  0x03, 0x0B, 0xFE, 0x25, 0xD2, 0xFD, 0x04, 0x07, 0x4F, 0x06, 0x00, 0xEB, 0x21, 0xA5, 0x03, 0x09, 
  0x4E, 0x23, 0x46, 0xC5, 0xEB, 0x23, 0x7E, 0xFE, 0x3A, 0xD0, 0xFE, 0x20, 0xCA, 0x55, 0x09, 0xFE, 
  0x30, 0x3F, 0x3C, 0x3D, 0xC9, 0xEB, 0x2A, 0xA3, 0x20, 0xCA, 0x7A, 0x09, 0xEB, 0xCD, 0x21, 0x0A, 
  0xE5, 0xCD, 0xE9, 0x05, 0x60, 0x69, 0xD1, 0xD2, 0xC2, 0x0A, 0x2B, 0x22, 0x21, 0x21, 0xEB, 0xC9, 
  0xDF, 0xC8, 0xD7, 0xFE, 0x1B, 0x28, 0x11, 0xFE, 0x03, 0x28, 0x0D, 0xFE, 0x13, 0xC0, 0xD7, 0xFE, 
  0x11, 0xC8, 0xFE, 0x03, 0x28, 0x07, 0x18, 0xF6, 0x3E, 0xFF, 0x32, 0x92, 0x20, 0xC0, 0xF6, 0xC0, 
  0x22, 0x13, 0x21, 0x21, 0xF6, 0xFF, 0xC1, 0x2A, 0xA1, 0x20, 0xF5, 0x7D, 0xA4, 0x3C, 0xCA, 0xBA, 
  0x09, 0x22, 0x17, 0x21, 0x2A, 0x13, 0x21, 0x22, 0x19, 0x21, 0xAF, 0x32, 0x8A, 0x20, 0xCD, 0xF0, 
  0x0B, 0xF1, 0x21, 0xA0, 0x04, 0xC2, 0x31, 0x05, 0xC3, 0x48, 0x05, 0x2A, 0x19, 0x21, 0x7C, 0xB5, 
  0x1E, 0x20, 0xCA, 0x11, 0x05, 0xEB, 0x2A, 0x17, 0x21, 0x22, 0xA1, 0x20, 0xEB, 0xC9, 0xCD, 0x23, 
  0x15, 0xC0, 0x32, 0x86, 0x20, 0xC9, 0xE5, 0x2A, 0x8F, 0x20, 0x06, 0x00, 0x4F, 0x09, 0x22, 0x8F, 
  0x20, 0xE1, 0xC9, 0x7E, 0xFE, 0x41, 0xD8, 0xFE, 0x5B, 0x3F, 0xC9, 0xCD, 0x55, 0x09, 0xCD, 0xC2, 
  0x0D, 0xCD, 0xA4, 0x17, 0xFA, 0x1C, 0x0A, 0x3A, 0x2C, 0x21, 0xFE, 0x90, 0xDA, 0x4C, 0x18, 0x01, 
  0x80, 0x90, 0x11, 0x00, 0x00, 0xE5, 0xCD, 0x1F, 0x18, 0xE1, 0x51, 0xC8, 0x1E, 0x08, 0xC3, 0x11, 
  0x05, 0x2B, 0x11, 0x00, 0x00, 0xCD, 0x55, 0x09, 0xD0, 0xE5, 0xF5, 0x21, 0x98, 0x19, 0xCD, 0xC5, 
  0x07, 0xDA, 0xFD, 0x04, 0x62, 0x6B, 0x19, 0x29, 0x19, 0x29, 0xF1, 0xD6, 0x30, 0x5F, 0x16, 0x00, 
  0x19, 0xEB, 0xE1, 0xC3, 0x25, 0x0A, 0xCA, 0x19, 0x06, 0xCD, 0xFE, 0x09, 0x2B, 0xCD, 0x55, 0x09, 
  0xE5, 0x2A, 0xF4, 0x20, 0xCA, 0x69, 0x0A, 0xE1, 0xCD, 0xCB, 0x07, 0x2C, 0xD5, 0xCD, 0xFE, 0x09, 
  0x2B, 0xCD, 0x55, 0x09, 0xC2, 0xFD, 0x04, 0xE3, 0xEB, 0x7D, 0x93, 0x5F, 0x7C, 0x9A, 0x57, 0xDA, 
  0xF2, 0x04, 0xE5, 0x2A, 0x1B, 0x21, 0x01, 0x28, 0x00, 0x09, 0xCD, 0xC5, 0x07, 0xD2, 0xF2, 0x04, 
  0xEB, 0x22, 0x9F, 0x20, 0xE1, 0x22, 0xF4, 0x20, 0xE1, 0xC3, 0x19, 0x06, 0xCA, 0x15, 0x06, 0xCD, 
  0x19, 0x06, 0x01, 0x15, 0x09, 0xC3, 0xA8, 0x0A, 0x0E, 0x03, 0xCD, 0xDA, 0x04, 0xC1, 0xE5, 0xE5, 
  0x2A, 0xA1, 0x20, 0xE3, 0x3E, 0x8C, 0xF5, 0x33, 0xC5, 0xCD, 0x21, 0x0A, 0xCD, 0xEE, 0x0A, 0xE5, 
  0x2A, 0xA1, 0x20, 0xCD, 0xC5, 0x07, 0xE1, 0x23, 0xDC, 0xEC, 0x05, 0xD4, 0xE9, 0x05, 0x60, 0x69, 
  0x2B, 0xD8, 0x1E, 0x0E, 0xC3, 0x11, 0x05, 0xC0, 0x16, 0xFF, 0xCD, 0xA6, 0x04, 0xF9, 0xFE, 0x8C, 
  0x1E, 0x04, 0xC2, 0x11, 0x05, 0xE1, 0x22, 0xA1, 0x20, 0x23, 0x7C, 0xB5, 0xC2, 0xE6, 0x0A, 0x3A, 
  0x11, 0x21, 0xB7, 0xC2, 0x47, 0x05, 0x21, 0x15, 0x09, 0xE3, 0x3E, 0xE1, 0x01, 0x3A, 0x0E, 0x00, 
  0x06, 0x00, 0x79, 0x48, 0x47, 0x7E, 0xB7, 0xC8, 0xB8, 0xC8, 0x23, 0xFE, 0x22, 0xCA, 0xF2, 0x0A, 
  0xC3, 0xF5, 0x0A, 0xCD, 0xB8, 0x0F, 0xCD, 0xCB, 0x07, 0xB4, 0xD5, 0x3A, 0xF2, 0x20, 0xF5, 0xCD, 
  0xD4, 0x0D, 0xF1, 0xE3, 0x22, 0x13, 0x21, 0x1F, 0xCD, 0xC7, 0x0D, 0xCA, 0x56, 0x0B, 0xE5, 0x2A, 
  0x29, 0x21, 0xE5, 0x23, 0x23, 0x5E, 0x23, 0x56, 0x2A, 0xA3, 0x20, 0xCD, 0xC5, 0x07, 0xD2, 0x45, 
  0x0B, 0x2A, 0x9F, 0x20, 0xCD, 0xC5, 0x07, 0xD1, 0xD2, 0x4D, 0x0B, 0x21, 0x04, 0x21, 0xCD, 0xC5, 
  0x07, 0xD2, 0x4D, 0x0B, 0x3E, 0xD1, 0xCD, 0xFC, 0x13, 0xEB, 0xCD, 0x35, 0x12, 0xCD, 0xFC, 0x13, 
  0xE1, 0xCD, 0xFF, 0x17, 0xE1, 0xC9, 0xE5, 0xCD, 0xFC, 0x17, 0xD1, 0xE1, 0xC9, 0xCD, 0x23, 0x15, 
  0x7E, 0x47, 0xFE, 0x8C, 0xCA, 0x6C, 0x0B, 0xCD, 0xCB, 0x07, 0x88, 0x2B, 0x4B, 0x0D, 0x78, 0xCA, 
  0x3D, 0x09, 0xCD, 0x22, 0x0A, 0xFE, 0x2C, 0xC0, 0xC3, 0x6D, 0x0B, 0xCD, 0xD4, 0x0D, 0x7E, 0xFE, 
  0x88, 0xCA, 0x89, 0x0B, 0xCD, 0xCB, 0x07, 0xA9, 0x2B, 0xCD, 0xC5, 0x0D, 0xCD, 0xA4, 0x17, 0xCA, 
  0xEE, 0x0A, 0xCD, 0x55, 0x09, 0xDA, 0xA9, 0x0A, 0xC3, 0x3C, 0x09, 0x2B, 0xCD, 0x55, 0x09, 0xCA, 
  0xFD, 0x0B, 0xC8, 0xFE, 0xA5, 0xCA, 0x30, 0x0C, 0xFE, 0xA8, 0xCA, 0x30, 0x0C, 0xE5, 0xFE, 0x2C, 
  0xCA, 0x19, 0x0C, 0xFE, 0x3B, 0xCA, 0x53, 0x0C, 0xC1, 0xCD, 0xD4, 0x0D, 0xE5, 0x3A, 0xF2, 0x20, 
  0xB7, 0xC2, 0xE9, 0x0B, 0xCD, 0x49, 0x19, 0xCD, 0x59, 0x12, 0x36, 0x20, 0x2A, 0x29, 0x21, 0x34, 
  0x2A, 0x29, 0x21, 0x3A, 0x87, 0x20, 0x47, 0x04, 0xCA, 0xE5, 0x0B, 0x04, 0x3A, 0xF0, 0x20, 0x86, 
  0x3D, 0xB8, 0xD4, 0xFD, 0x0B, 0xCD, 0x9E, 0x12, 0xAF, 0xC4, 0x9E, 0x12, 0xE1, 0xC3, 0x9B, 0x0B, 
  0x3A, 0xF0, 0x20, 0xB7, 0xC8, 0xC3, 0xFD, 0x0B, 0x36, 0x00, 0x21, 0xA5, 0x20, 0x3E, 0x0D, 0xCD, 
  0xD6, 0x07, 0x3E, 0x0A, 0xCD, 0xD6, 0x07, 0xAF, 0x32, 0xF0, 0x20, 0x3A, 0x86, 0x20, 0x3D, 0xC8, 
  0xF5, 0xAF, 0xCD, 0xD6, 0x07, 0xF1, 0xC3, 0x0E, 0x0C, 0x3A, 0x88, 0x20, 0x47, 0x3A, 0xF0, 0x20, 
  0xB8, 0xD4, 0xFD, 0x0B, 0xD2, 0x53, 0x0C, 0xD6, 0x0E, 0xD2, 0x27, 0x0C, 0x2F, 0xC3, 0x48, 0x0C, 
  0xF5, 0xCD, 0x20, 0x15, 0xCD, 0xCB, 0x07, 0x29, 0x2B, 0xF1, 0xD6, 0xA8, 0xE5, 0xCA, 0x43, 0x0C, 
  0x3A, 0xF0, 0x20, 0x2F, 0x83, 0xD2, 0x53, 0x0C, 0x3C, 0x47, 0x3E, 0x20, 0xCD, 0xD6, 0x07, 0x05, 
  0xC2, 0x4C, 0x0C, 0xE1, 0xCD, 0x55, 0x09, 0xC3, 0xA2, 0x0B, 0x3F, 0x52, 0x65, 0x64, 0x6F, 0x20, 
  0x66, 0x72, 0x6F, 0x6D, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x0D, 0x0A, 0x00, 0x3A, 0x12, 0x21, 
  0xB7, 0xC2, 0xF7, 0x04, 0xC1, 0x21, 0x5A, 0x0C, 0xCD, 0x9B, 0x12, 0xC3, 0x48, 0x06, 0xCD, 0x06, 
  0x12, 0x7E, 0xFE, 0x22, 0x3E, 0x00, 0x32, 0x8A, 0x20, 0xC2, 0x98, 0x0C, 0xCD, 0x5A, 0x12, 0xCD, 
  0xCB, 0x07, 0x3B, 0xE5, 0xCD, 0x9E, 0x12, 0x3E, 0xE5, 0xCD, 0x4C, 0x06, 0xC1, 0xDA, 0xA4, 0x09, 
  0x23, 0x7E, 0xB7, 0x2B, 0xC5, 0xCA, 0xEB, 0x0A, 0x36, 0x2C, 0xC3, 0xB2, 0x0C, 0xE5, 0x2A, 0x21, 
  0x21, 0xF6, 0xAF, 0x32, 0x12, 0x21, 0xE3, 0xC3, 0xBE, 0x0C, 0xCD, 0xCB, 0x07, 0x2C, 0xCD, 0xB8, 
  0x0F, 0xE3, 0xD5, 0x7E, 0xFE, 0x2C, 0xCA, 0xE6, 0x0C, 0x3A, 0x12, 0x21, 0xB7, 0xC2, 0x53, 0x0D, 
  0x3E, 0x3F, 0xCD, 0xD6, 0x07, 0xCD, 0x4C, 0x06, 0xD1, 0xC1, 0xDA, 0xA4, 0x09, 0x23, 0x7E, 0xB7, 
  0x2B, 0xC5, 0xCA, 0xEB, 0x0A, 0xD5, 0x3A, 0xF2, 0x20, 0xB7, 0xCA, 0x10, 0x0D, 0xCD, 0x55, 0x09, 
  0x57, 0x47, 0xFE, 0x22, 0xCA, 0x04, 0x0D, 0x3A, 0x12, 0x21, 0xB7, 0x57, 0xCA, 0x01, 0x0D, 0x16, 
  0x3A, 0x06, 0x2C, 0x2B, 0xCD, 0x5D, 0x12, 0xEB, 0x21, 0x1B, 0x0D, 0xE3, 0xD5, 0xC3, 0x1E, 0x0B, 
  0xCD, 0x55, 0x09, 0xCD, 0xAB, 0x18, 0xE3, 0xCD, 0xFC, 0x17, 0xE1, 0x2B, 0xCD, 0x55, 0x09, 0xCA, 
  0x27, 0x0D, 0xFE, 0x2C, 0xC2, 0x6D, 0x0C, 0xE3, 0x2B, 0xCD, 0x55, 0x09, 0xC2, 0xBA, 0x0C, 0xD1, 
  0x3A, 0x12, 0x21, 0xB7, 0xEB, 0xC2, 0x7B, 0x09, 0xD5, 0xB6, 0x21, 0x42, 0x0D, 0xC4, 0x9B, 0x12, 
  0xE1, 0xC9, 0x3F, 0x45, 0x78, 0x74, 0x72, 0x61, 0x20, 0x69, 0x67, 0x6E, 0x6F, 0x72, 0x65, 0x64, 
  0x0D, 0x0A, 0x00, 0xCD, 0xEC, 0x0A, 0xB7, 0xC2, 0x6C, 0x0D, 0x23, 0x7E, 0x23, 0xB6, 0x1E, 0x06, 
  0xCA, 0x11, 0x05, 0x23, 0x5E, 0x23, 0x56, 0xEB, 0x22, 0x0E, 0x21, 0xEB, 0xCD, 0x55, 0x09, 0xFE, 
  0x83, 0xC2, 0x53, 0x0D, 0xC3, 0xE6, 0x0C, 0x11, 0x00, 0x00, 0xC4, 0xB8, 0x0F, 0x22, 0x13, 0x21, 
  0xCD, 0xA6, 0x04, 0xC2, 0x03, 0x05, 0xF9, 0xD5, 0x7E, 0x23, 0xF5, 0xD5, 0xCD, 0xE2, 0x17, 0xE3, 
  0xE5, 0xCD, 0x4F, 0x15, 0xE1, 0xCD, 0xFC, 0x17, 0xE1, 0xCD, 0xF3, 0x17, 0xE5, 0xCD, 0x1F, 0x18, 
  0xE1, 0xC1, 0x90, 0xCD, 0xF3, 0x17, 0xCA, 0xB2, 0x0D, 0xEB, 0x22, 0xA1, 0x20, 0x69, 0x60, 0xC3, 
  0x11, 0x09, 0xF9, 0x2A, 0x13, 0x21, 0x7E, 0xFE, 0x2C, 0xC2, 0x15, 0x09, 0xCD, 0x55, 0x09, 0xCD, 
  0x7A, 0x0D, 0xCD, 0xD4, 0x0D, 0xF6, 0x37, 0x3A, 0xF2, 0x20, 0x8F, 0xB7, 0xE8, 0xC3, 0x0F, 0x05, 
  0xCD, 0xCB, 0x07, 0x28, 0x2B, 0x16, 0x00, 0xD5, 0x0E, 0x01, 0xCD, 0xDA, 0x04, 0xCD, 0x4B, 0x0E, 
  0x22, 0x15, 0x21, 0x2A, 0x15, 0x21, 0xC1, 0x78, 0xFE, 0x78, 0xD4, 0xC5, 0x0D, 0x7E, 0x16, 0x00, 
  0xD6, 0xB3, 0xDA, 0x0C, 0x0E, 0xFE, 0x03, 0xD2, 0x0C, 0x0E, 0xFE, 0x01, 0x17, 0xAA, 0xBA, 0x57, 
  0xDA, 0xFD, 0x04, 0x22, 0x0A, 0x21, 0xCD, 0x55, 0x09, 0xC3, 0xF0, 0x0D, 0x7A, 0xB7, 0xC2, 0x33, 
  0x0F, 0x7E, 0x22, 0x0A, 0x21, 0xD6, 0xAC, 0xD8, 0xFE, 0x07, 0xD0, 0x5F, 0x3A, 0xF2, 0x20, 0x3D, 
  0xB3, 0x7B, 0xCA, 0x91, 0x13, 0x07, 0x83, 0x5F, 0x21, 0xEF, 0x03, 0x19, 0x78, 0x56, 0xBA, 0xD0, 
  0x23, 0xCD, 0xC5, 0x0D, 0xC5, 0x01, 0xE3, 0x0D, 0xC5, 0x43, 0x4A, 0xCD, 0xD5, 0x17, 0x58, 0x51, 
  0x4E, 0x23, 0x46, 0x23, 0xC5, 0x2A, 0x0A, 0x21, 0xC3, 0xD7, 0x0D, 0xAF, 0x32, 0xF2, 0x20, 0xCD, 
  0x55, 0x09, 0x1E, 0x24, 0xCA, 0x11, 0x05, 0xDA, 0xAB, 0x18, 0xCD, 0xF3, 0x09, 0xD2, 0xB2, 0x0E, 
  0xFE, 0x26, 0x20, 0x12, 0xCD, 0x55, 0x09, 0xFE, 0x48, 0xCA, 0xEF, 0x1C, 0xFE, 0x42, 0xCA, 0x5F, 
  0x1D, 0x1E, 0x02, 0xCA, 0x11, 0x05, 0xFE, 0xAC, 0xCA, 0x4B, 0x0E, 0xFE, 0x2E, 0xCA, 0xAB, 0x18, 
  0xFE, 0xAD, 0xCA, 0xA1, 0x0E, 0xFE, 0x22, 0xCA, 0x5A, 0x12, 0xFE, 0xAA, 0xCA, 0x93, 0x0F, 0xFE, 
  0xA7, 0xCA, 0xBE, 0x11, 0xD6, 0xB6, 0xD2, 0xC3, 0x0E, 0xCD, 0xD0, 0x0D, 0xCD, 0xCB, 0x07, 0x29, 
  0xC9, 0x16, 0x7D, 0xCD, 0xD7, 0x0D, 0x2A, 0x15, 0x21, 0xE5, 0xCD, 0xCD, 0x17, 0xCD, 0xC5, 0x0D, 
  0xE1, 0xC9, 0xCD, 0xB8, 0x0F, 0xE5, 0xEB, 0x22, 0x29, 0x21, 0x3A, 0xF2, 0x20, 0xB7, 0xCC, 0xE2, 
  0x17, 0xE1, 0xC9, 0x06, 0x00, 0x07, 0x4F, 0xC5, 0xCD, 0x55, 0x09, 0x79, 0xFE, 0x31, 0xDA, 0xEA, 
  0x0E, 0xCD, 0xD0, 0x0D, 0xCD, 0xCB, 0x07, 0x2C, 0xCD, 0xC6, 0x0D, 0xEB, 0x2A, 0x29, 0x21, 0xE3, 
  0xE5, 0xEB, 0xCD, 0x23, 0x15, 0xEB, 0xE3, 0xC3, 0xF2, 0x0E, 0xCD, 0x99, 0x0E, 0xE3, 0x11, 0xAD, 
  0x0E, 0xD5, 0x01, 0x4E, 0x02, 0x09, 0x4E, 0x23, 0x66, 0x69, 0xE9, 0x15, 0xFE, 0xAD, 0xC8, 0xFE, 
  0x2D, 0xC8, 0x14, 0xFE, 0x2B, 0xC8, 0xFE, 0xAC, 0xC8, 0x2B, 0xC9, 0xF6, 0xAF, 0xF5, 0xCD, 0xC5, 
  0x0D, 0xCD, 0x07, 0x0A, 0xF1, 0xEB, 0xC1, 0xE3, 0xEB, 0xCD, 0xE5, 0x17, 0xF5, 0xCD, 0x07, 0x0A, 
  0xF1, 0xC1, 0x79, 0x21, 0x7C, 0x11, 0xC2, 0x2E, 0x0F, 0xA3, 0x4F, 0x78, 0xA2, 0xE9, 0xB3, 0x4F, 
  0x78, 0xB2, 0xE9, 0x21, 0x45, 0x0F, 0x3A, 0xF2, 0x20, 0x1F, 0x7A, 0x17, 0x5F, 0x16, 0x64, 0x78, 
  0xBA, 0xD0, 0xC3, 0x34, 0x0E, 0x47, 0x0F, 0x79, 0xB7, 0x1F, 0xC1, 0xD1, 0xF5, 0xCD, 0xC7, 0x0D, 
  0x21, 0x89, 0x0F, 0xE5, 0xCA, 0x1F, 0x18, 0xAF, 0x32, 0xF2, 0x20, 0xD5, 0xCD, 0xDE, 0x13, 0x7E, 
  0x23, 0x23, 0x4E, 0x23, 0x46, 0xD1, 0xC5, 0xF5, 0xCD, 0xE2, 0x13, 0xCD, 0xF3, 0x17, 0xF1, 0x57, 
  0xE1, 0x7B, 0xB2, 0xC8, 0x7A, 0xD6, 0x01, 0xD8, 0xAF, 0xBB, 0x3C, 0xD0, 0x15, 0x1D, 0x0A, 0xBE, 
  0x23, 0x03, 0xCA, 0x71, 0x0F, 0x3F, 0xC3, 0xAF, 0x17, 0x3C, 0x8F, 0xC1, 0xA0, 0xC6, 0xFF, 0x9F, 
  0xC3, 0xB6, 0x17, 0x16, 0x5A, 0xCD, 0xD7, 0x0D, 0xCD, 0xC5, 0x0D, 0xCD, 0x07, 0x0A, 0x7B, 0x2F, 
  0x4F, 0x7A, 0x2F, 0xCD, 0x7C, 0x11, 0xC1, 0xC3, 0xE3, 0x0D, 0x2B, 0xCD, 0x55, 0x09, 0xC8, 0xCD, 
  0xCB, 0x07, 0x2C, 0x01, 0xAA, 0x0F, 0xC5, 0xF6, 0xAF, 0x32, 0xF1, 0x20, 0x46, 0xCD, 0xF3, 0x09, 
  0xDA, 0xFD, 0x04, 0xAF, 0x4F, 0x32, 0xF2, 0x20, 0xCD, 0x55, 0x09, 0xDA, 0xD4, 0x0F, 0xCD, 0xF3, 
  0x09, 0xDA, 0xE1, 0x0F, 0x4F, 0xCD, 0x55, 0x09, 0xDA, 0xD5, 0x0F, 0xCD, 0xF3, 0x09, 0xD2, 0xD5, 
  0x0F, 0xD6, 0x24, 0xC2, 0xF0, 0x0F, 0x3C, 0x32, 0xF2, 0x20, 0x0F, 0x81, 0x4F, 0xCD, 0x55, 0x09, 
  0x3A, 0x10, 0x21, 0x3D, 0xCA, 0x9D, 0x10, 0xF2, 0x00, 0x10, 0x7E, 0xD6, 0x28, 0xCA, 0x75, 0x10, 
  0xAF, 0x32, 0x10, 0x21, 0xE5, 0x50, 0x59, 0x2A, 0x23, 0x21, 0xCD, 0xC5, 0x07, 0x11, 0x25, 0x21, 
  0xCA, 0xE5, 0x16, 0x2A, 0x1D, 0x21, 0xEB, 0x2A, 0x1B, 0x21, 0xCD, 0xC5, 0x07, 0xCA, 0x33, 0x10, 
  0x79, 0x96, 0x23, 0xC2, 0x28, 0x10, 0x78, 0x96, 0x23, 0xCA, 0x67, 0x10, 0x23, 0x23, 0x23, 0x23, 
  0xC3, 0x1A, 0x10, 0xE1, 0xE3, 0xD5, 0x11, 0xB5, 0x0E, 0xCD, 0xC5, 0x07, 0xD1, 0xCA, 0x6A, 0x10, 
  0xE3, 0xE5, 0xC5, 0x01, 0x06, 0x00, 0x2A, 0x1F, 0x21, 0xE5, 0x09, 0xC1, 0xE5, 0xCD, 0xC9, 0x04, 
  0xE1, 0x22, 0x1F, 0x21, 0x60, 0x69, 0x22, 0x1D, 0x21, 0x2B, 0x36, 0x00, 0xCD, 0xC5, 0x07, 0xC2, 
  0x59, 0x10, 0xD1, 0x73, 0x23, 0x72, 0x23, 0xEB, 0xE1, 0xC9, 0x32, 0x2C, 0x21, 0x21, 0x99, 0x04, 
  0x22, 0x29, 0x21, 0xE1, 0xC9, 0xE5, 0x2A, 0xF1, 0x20, 0xE3, 0x57, 0xD5, 0xC5, 0xCD, 0xFB, 0x09, 
  0xC1, 0xF1, 0xEB, 0xE3, 0xE5, 0xEB, 0x3C, 0x57, 0x7E, 0xFE, 0x2C, 0xCA, 0x7B, 0x10, 0xCD, 0xCB, 
  0x07, 0x29, 0x22, 0x15, 0x21, 0xE1, 0x22, 0xF1, 0x20, 0x1E, 0x00, 0xD5, 0x11, 0xE5, 0xF5, 0x2A, 
  0x1D, 0x21, 0x3E, 0x19, 0xEB, 0x2A, 0x1F, 0x21, 0xEB, 0xCD, 0xC5, 0x07, 0xCA, 0xD5, 0x10, 0x7E, 
  0xB9, 0x23, 0xC2, 0xB7, 0x10, 0x7E, 0xB8, 0x23, 0x5E, 0x23, 0x56, 0x23, 0xC2, 0xA3, 0x10, 0x3A, 
  0xF1, 0x20, 0xB7, 0xC2, 0x06, 0x05, 0xF1, 0x44, 0x4D, 0xCA, 0xE5, 0x16, 0x96, 0xCA, 0x33, 0x11, 
  0x1E, 0x10, 0xC3, 0x11, 0x05, 0x11, 0x04, 0x00, 0xF1, 0xCA, 0x1C, 0x0A, 0x71, 0x23, 0x70, 0x23, 
  0x4F, 0xCD, 0xDA, 0x04, 0x23, 0x23, 0x22, 0x0A, 0x21, 0x71, 0x23, 0x3A, 0xF1, 0x20, 0x17, 0x79, 
  0x01, 0x0B, 0x00, 0xD2, 0xF8, 0x10, 0xC1, 0x03, 0x71, 0x23, 0x70, 0x23, 0xF5, 0xE5, 0xCD, 0x90, 
  0x18, 0xEB, 0xE1, 0xF1, 0x3D, 0xC2, 0xF0, 0x10, 0xF5, 0x42, 0x4B, 0xEB, 0x19, 0xDA, 0xF2, 0x04, 
  0xCD, 0xE3, 0x04, 0x22, 0x1F, 0x21, 0x2B, 0x36, 0x00, 0xCD, 0xC5, 0x07, 0xC2, 0x16, 0x11, 0x03, 
  0x57, 0x2A, 0x0A, 0x21, 0x5E, 0xEB, 0x29, 0x09, 0xEB, 0x2B, 0x2B, 0x73, 0x23, 0x72, 0x23, 0xF1, 
  0xDA, 0x57, 0x11, 0x47, 0x4F, 0x7E, 0x23, 0x16, 0xE1, 0x5E, 0x23, 0x56, 0x23, 0xE3, 0xF5, 0xCD, 
  0xC5, 0x07, 0xD2, 0xD0, 0x10, 0xE5, 0xCD, 0x90, 0x18, 0xD1, 0x19, 0xF1, 0x3D, 0x44, 0x4D, 0xC2, 
  0x38, 0x11, 0x29, 0x29, 0xC1, 0x09, 0xEB, 0x2A, 0x15, 0x21, 0xC9, 0x2A, 0x1F, 0x21, 0xEB, 0x21, 
  0x00, 0x00, 0x39, 0x3A, 0xF2, 0x20, 0xB7, 0xCA, 0x77, 0x11, 0xCD, 0xDE, 0x13, 0xCD, 0xDE, 0x12, 
  0x2A, 0x9F, 0x20, 0xEB, 0x2A, 0x08, 0x21, 0x7D, 0x93, 0x4F, 0x7C, 0x9A, 0x41, 0x50, 0x1E, 0x00, 
  0x21, 0xF2, 0x20, 0x73, 0x06, 0x90, 0xC3, 0xBB, 0x17, 0x3A, 0xF0, 0x20, 0x47, 0xAF, 0xC3, 0x7D, 
  0x11, 0xCD, 0x14, 0x12, 0xCD, 0x06, 0x12, 0x01, 0xEC, 0x0A, 0xC5, 0xD5, 0xCD, 0xCB, 0x07, 0x28, 
  0xCD, 0xB8, 0x0F, 0xE5, 0xEB, 0x2B, 0x56, 0x2B, 0x5E, 0xE1, 0xCD, 0xC5, 0x0D, 0xCD, 0xCB, 0x07, 
  0x29, 0xCD, 0xCB, 0x07, 0xB4, 0x44, 0x4D, 0xE3, 0x71, 0x23, 0x70, 0xC3, 0x53, 0x12, 0xCD, 0x14, 
  0x12, 0xD5, 0xCD, 0x99, 0x0E, 0xCD, 0xC5, 0x0D, 0xE3, 0x5E, 0x23, 0x56, 0x23, 0x7A, 0xB3, 0xCA, 
  0x09, 0x05, 0x7E, 0x23, 0x66, 0x6F, 0xE5, 0x2A, 0x23, 0x21, 0xE3, 0x22, 0x23, 0x21, 0x2A, 0x27, 
  0x21, 0xE5, 0x2A, 0x25, 0x21, 0xE5, 0x21, 0x25, 0x21, 0xD5, 0xCD, 0xFC, 0x17, 0xE1, 0xCD, 0xC2, 
  0x0D, 0x2B, 0xCD, 0x55, 0x09, 0xC2, 0xFD, 0x04, 0xE1, 0x22, 0x25, 0x21, 0xE1, 0x22, 0x27, 0x21, 
  0xE1, 0x22, 0x23, 0x21, 0xE1, 0xC9, 0xE5, 0x2A, 0xA1, 0x20, 0x23, 0x7C, 0xB5, 0xE1, 0xC0, 0x1E, 
  0x16, 0xC3, 0x11, 0x05, 0xCD, 0xCB, 0x07, 0xA7, 0x3E, 0x80, 0x32, 0x10, 0x21, 0xB6, 0x47, 0xCD, 
  0xBD, 0x0F, 0xC3, 0xC5, 0x0D, 0xCD, 0xC5, 0x0D, 0xCD, 0x49, 0x19, 0xCD, 0x59, 0x12, 0xCD, 0xDE, 
  0x13, 0x01, 0x39, 0x14, 0xC5, 0x7E, 0x23, 0x23, 0xE5, 0xCD, 0xB4, 0x12, 0xE1, 0x4E, 0x23, 0x46, 
  0xCD, 0x4D, 0x12, 0xE5, 0x6F, 0xCD, 0xD1, 0x13, 0xD1, 0xC9, 0xCD, 0xB4, 0x12, 0x21, 0x04, 0x21, 
  0xE5, 0x77, 0x23, 0x23, 0x73, 0x23, 0x72, 0xE1, 0xC9, 0x2B, 0x06, 0x22, 0x50, 0xE5, 0x0E, 0xFF, 
  0x23, 0x7E, 0x0C, 0xB7, 0xCA, 0x6F, 0x12, 0xBA, 0xCA, 0x6F, 0x12, 0xB8, 0xC2, 0x60, 0x12, 0xFE, 
  0x22, 0xCC, 0x55, 0x09, 0xE3, 0x23, 0xEB, 0x79, 0xCD, 0x4D, 0x12, 0x11, 0x04, 0x21, 0x2A, 0xF6, 
  0x20, 0x22, 0x29, 0x21, 0x3E, 0x01, 0x32, 0xF2, 0x20, 0xCD, 0xFF, 0x17, 0xCD, 0xC5, 0x07, 0x22, 
  0xF6, 0x20, 0xE1, 0x7E, 0xC0, 0x1E, 0x1E, 0xC3, 0x11, 0x05, 0x23, 0xCD, 0x59, 0x12, 0xCD, 0xDE, 
  0x13, 0xCD, 0xF3, 0x17, 0x1C, 0x1D, 0xC8, 0x0A, 0xCD, 0xD6, 0x07, 0xFE, 0x0D, 0xCC, 0x07, 0x0C, 
  0x03, 0xC3, 0xA5, 0x12, 0xB7, 0x0E, 0xF1, 0xF5, 0x2A, 0x9F, 0x20, 0xEB, 0x2A, 0x08, 0x21, 0x2F, 
  0x4F, 0x06, 0xFF, 0x09, 0x23, 0xCD, 0xC5, 0x07, 0xDA, 0xD2, 0x12, 0x22, 0x08, 0x21, 0x23, 0xEB, 
  0xF1, 0xC9, 0xF1, 0x1E, 0x1A, 0xCA, 0x11, 0x05, 0xBF, 0xF5, 0x01, 0xB6, 0x12, 0xC5, 0x2A, 0xF4, 
  0x20, 0x22, 0x08, 0x21, 0x21, 0x00, 0x00, 0xE5, 0x2A, 0x9F, 0x20, 0xE5, 0x21, 0xF8, 0x20, 0xEB, 
  0x2A, 0xF6, 0x20, 0xEB, 0xCD, 0xC5, 0x07, 0x01, 0xEF, 0x12, 0xC2, 0x43, 0x13, 0x2A, 0x1B, 0x21, 
  0xEB, 0x2A, 0x1D, 0x21, 0xEB, 0xCD, 0xC5, 0x07, 0xCA, 0x16, 0x13, 0x7E, 0x23, 0x23, 0xB7, 0xCD, 
  0x46, 0x13, 0xC3, 0x00, 0x13, 0xC1, 0xEB, 0x2A, 0x1F, 0x21, 0xEB, 0xCD, 0xC5, 0x07, 0xCA, 0x6C, 
  0x13, 0xCD, 0xF3, 0x17, 0x7B, 0xE5, 0x09, 0xB7, 0xF2, 0x15, 0x13, 0x22, 0x0A, 0x21, 0xE1, 0x4E, 
  0x06, 0x00, 0x09, 0x09, 0x23, 0xEB, 0x2A, 0x0A, 0x21, 0xEB, 0xCD, 0xC5, 0x07, 0xCA, 0x16, 0x13, 
  0x01, 0x35, 0x13, 0xC5, 0xF6, 0x80, 0x7E, 0x23, 0x23, 0x5E, 0x23, 0x56, 0x23, 0xF0, 0xB7, 0xC8, 
  0x44, 0x4D, 0x2A, 0x08, 0x21, 0xCD, 0xC5, 0x07, 0x60, 0x69, 0xD8, 0xE1, 0xE3, 0xCD, 0xC5, 0x07, 
  0xE3, 0xE5, 0x60, 0x69, 0xD0, 0xC1, 0xF1, 0xF1, 0xE5, 0xD5, 0xC5, 0xC9, 0xD1, 0xE1, 0x7D, 0xB4, 
  0xC8, 0x2B, 0x46, 0x2B, 0x4E, 0xE5, 0x2B, 0x2B, 0x6E, 0x26, 0x00, 0x09, 0x50, 0x59, 0x2B, 0x44, 
  0x4D, 0x2A, 0x08, 0x21, 0xCD, 0xCC, 0x04, 0xE1, 0x71, 0x23, 0x70, 0x69, 0x60, 0x2B, 0xC3, 0xE1, 
  0x12, 0xC5, 0xE5, 0x2A, 0x29, 0x21, 0xE3, 0xCD, 0x4B, 0x0E, 0xE3, 0xCD, 0xC6, 0x0D, 0x7E, 0xE5, 
  0x2A, 0x29, 0x21, 0xE5, 0x86, 0x1E, 0x1C, 0xDA, 0x11, 0x05, 0xCD, 0x4A, 0x12, 0xD1, 0xCD, 0xE2, 
  0x13, 0xE3, 0xCD, 0xE1, 0x13, 0xE5, 0x2A, 0x06, 0x21, 0xEB, 0xCD, 0xC8, 0x13, 0xCD, 0xC8, 0x13, 
  0x21, 0xE0, 0x0D, 0xE3, 0xE5, 0xC3, 0x7B, 0x12, 0xE1, 0xE3, 0x7E, 0x23, 0x23, 0x4E, 0x23, 0x46, 
  0x6F, 0x2C, 0x2D, 0xC8, 0x0A, 0x12, 0x03, 0x13, 0xC3, 0xD2, 0x13, 0xCD, 0xC6, 0x0D, 0x2A, 0x29, 
  0x21, 0xEB, 0xCD, 0xFC, 0x13, 0xEB, 0xC0, 0xD5, 0x50, 0x59, 0x1B, 0x4E, 0x2A, 0x08, 0x21, 0xCD, 
  0xC5, 0x07, 0xC2, 0xFA, 0x13, 0x47, 0x09, 0x22, 0x08, 0x21, 0xE1, 0xC9, 0x2A, 0xF6, 0x20, 0x2B, 
  0x46, 0x2B, 0x4E, 0x2B, 0x2B, 0xCD, 0xC5, 0x07, 0xC0, 0x22, 0xF6, 0x20, 0xC9, 0x01, 0x8C, 0x11, 
  0xC5, 0xCD, 0xDB, 0x13, 0xAF, 0x57, 0x32, 0xF2, 0x20, 0x7E, 0xB7, 0xC9, 0x01, 0x8C, 0x11, 0xC5, 
  0xCD, 0x11, 0x14, 0xCA, 0x1C, 0x0A, 0x23, 0x23, 0x5E, 0x23, 0x56, 0x1A, 0xC9, 0x3E, 0x01, 0xCD, 
  0x4A, 0x12, 0xCD, 0x26, 0x15, 0x2A, 0x06, 0x21, 0x73, 0xC1, 0xC3, 0x7B, 0x12, 0xCD, 0xD6, 0x14, 
  0xAF, 0xE3, 0x4F, 0xE5, 0x7E, 0xB8, 0xDA, 0x4B, 0x14, 0x78, 0x11, 0x0E, 0x00, 0xC5, 0xCD, 0xB4, 
  0x12, 0xC1, 0xE1, 0xE5, 0x23, 0x23, 0x46, 0x23, 0x66, 0x68, 0x06, 0x00, 0x09, 0x44, 0x4D, 0xCD, 
  0x4D, 0x12, 0x6F, 0xCD, 0xD1, 0x13, 0xD1, 0xCD, 0xE2, 0x13, 0xC3, 0x7B, 0x12, 0xCD, 0xD6, 0x14, 
  0xD1, 0xD5, 0x1A, 0x90, 0xC3, 0x41, 0x14, 0xEB, 0x7E, 0xCD, 0xDB, 0x14, 0x04, 0x05, 0xCA, 0x1C, 
  0x0A, 0xC5, 0x1E, 0xFF, 0xFE, 0x29, 0xCA, 0x90, 0x14, 0xCD, 0xCB, 0x07, 0x2C, 0xCD, 0x23, 0x15, 
  0xCD, 0xCB, 0x07, 0x29, 0xF1, 0xE3, 0x01, 0x43, 0x14, 0xC5, 0x3D, 0xBE, 0x06, 0x00, 0xD0, 0x4F, 
  0x7E, 0x91, 0xBB, 0x47, 0xD8, 0x43, 0xC9, 0xCD, 0x11, 0x14, 0xCA, 0xC4, 0x15, 0x5F, 0x23, 0x23, 
  0x7E, 0x23, 0x66, 0x6F, 0xE5, 0x19, 0x46, 0x72, 0xE3, 0xC5, 0x7E, 0xFE, 0x24, 0xC2, 0xC5, 0x14, 
  0xCD, 0xEF, 0x1C, 0x18, 0x0D, 0xFE, 0x25, 0xC2, 0xCF, 0x14, 0xCD, 0x5F, 0x1D, 0x18, 0x03, 0xCD, 
  0xAB, 0x18, 0xC1, 0xE1, 0x70, 0xC9, 0xEB, 0xCD, 0xCB, 0x07, 0x29, 0xC1, 0xD1, 0xC5, 0x43, 0xC9, 
  0xCD, 0x26, 0x15, 0x32, 0x84, 0x20, 0xCD, 0x83, 0x20, 0xC3, 0x8C, 0x11, 0xCD, 0x10, 0x15, 0xC3, 
  0x4B, 0x20, 0xCD, 0x10, 0x15, 0xF5, 0x1E, 0x00, 0x2B, 0xCD, 0x55, 0x09, 0xCA, 0x06, 0x15, 0xCD, 
  0xCB, 0x07, 0x2C, 0xCD, 0x23, 0x15, 0xC1, 0xCD, 0x83, 0x20, 0xAB, 0xA0, 0xCA, 0x07, 0x15, 0xC9, 
  0xCD, 0x23, 0x15, 0x32, 0x84, 0x20, 0x32, 0x4C, 0x20, 0xCD, 0xCB, 0x07, 0x2C, 0xC3, 0x23, 0x15, 
  0xCD, 0x55, 0x09, 0xCD, 0xC2, 0x0D, 0xCD, 0x01, 0x0A, 0x7A, 0xB7, 0xC2, 0x1C, 0x0A, 0x2B, 0xCD, 
  0x55, 0x09, 0x7B, 0xC9, 0xCD, 0x07, 0x0A, 0x1A, 0xC3, 0x8C, 0x11, 0xCD, 0xC2, 0x0D, 0xCD, 0x07, 
  0x0A, 0xD5, 0xCD, 0xCB, 0x07, 0x2C, 0xCD, 0x23, 0x15, 0xD1, 0x12, 0xC9, 0x21, 0x22, 0x1A, 0xCD, 
  0xF3, 0x17, 0xC3, 0x5E, 0x15, 0xCD, 0xF3, 0x17, 0x21, 0xC1, 0xD1, 0xCD, 0xCD, 0x17, 0x78, 0xB7, 
  0xC8, 0x3A, 0x2C, 0x21, 0xB7, 0xCA, 0xE5, 0x17, 0x90, 0xD2, 0x78, 0x15, 0x2F, 0x3C, 0xEB, 0xCD, 
  0xD5, 0x17, 0xEB, 0xCD, 0xE5, 0x17, 0xC1, 0xD1, 0xFE, 0x19, 0xD0, 0xF5, 0xCD, 0x0A, 0x18, 0x67, 
  0xF1, 0xCD, 0x23, 0x16, 0xB4, 0x21, 0x29, 0x21, 0xF2, 0x9E, 0x15, 0xCD, 0x03, 0x16, 0xD2, 0xE4, 
  0x15, 0x23, 0x34, 0xCA, 0x0C, 0x05, 0x2E, 0x01, 0xCD, 0x39, 0x16, 0xC3, 0xE4, 0x15, 0xAF, 0x90, 
  0x47, 0x7E, 0x9B, 0x5F, 0x23, 0x7E, 0x9A, 0x57, 0x23, 0x7E, 0x99, 0x4F, 0xDC, 0x0F, 0x16, 0x68, 
  0x63, 0xAF, 0x47, 0x79, 0xB7, 0xC2, 0xD1, 0x15, 0x4A, 0x54, 0x65, 0x6F, 0x78, 0xD6, 0x08, 0xFE, 
  0xE0, 0xC2, 0xB2, 0x15, 0xAF, 0x32, 0x2C, 0x21, 0xC9, 0x05, 0x29, 0x7A, 0x17, 0x57, 0x79, 0x8F, 
  0x4F, 0xF2, 0xC9, 0x15, 0x78, 0x5C, 0x45, 0xB7, 0xCA, 0xE4, 0x15, 0x21, 0x2C, 0x21, 0x86, 0x77, 
  0xD2, 0xC4, 0x15, 0xC8, 0x78, 0x21, 0x2C, 0x21, 0xB7, 0xFC, 0xF6, 0x15, 0x46, 0x23, 0x7E, 0xE6, 
  0x80, 0xA9, 0x4F, 0xC3, 0xE5, 0x17, 0x1C, 0xC0, 0x14, 0xC0, 0x0C, 0xC0, 0x0E, 0x80, 0x34, 0xC0, 
  0xC3, 0x0C, 0x05, 0x7E, 0x83, 0x5F, 0x23, 0x7E, 0x8A, 0x57, 0x23, 0x7E, 0x89, 0x4F, 0xC9, 0x21, 
  0x2D, 0x21, 0x7E, 0x2F, 0x77, 0xAF, 0x6F, 0x90, 0x47, 0x7D, 0x9B, 0x5F, 0x7D, 0x9A, 0x57, 0x7D, 
  0x99, 0x4F, 0xC9, 0x06, 0x00, 0xD6, 0x08, 0xDA, 0x32, 0x16, 0x43, 0x5A, 0x51, 0x0E, 0x00, 0xC3, 
  0x25, 0x16, 0xC6, 0x09, 0x6F, 0xAF, 0x2D, 0xC8, 0x79, 0x1F, 0x4F, 0x7A, 0x1F, 0x57, 0x7B, 0x1F, 
  0x5F, 0x78, 0x1F, 0x47, 0xC3, 0x35, 0x16, 0x00, 0x00, 0x00, 0x81, 0x03, 0xAA, 0x56, 0x19, 0x80, 
  0xF1, 0x22, 0x76, 0x80, 0x45, 0xAA, 0x38, 0x82, 0xCD, 0xA4, 0x17, 0xB7, 0xEA, 0x1C, 0x0A, 0x21, 
  0x2C, 0x21, 0x7E, 0x01, 0x35, 0x80, 0x11, 0xF3, 0x04, 0x90, 0xF5, 0x70, 0xD5, 0xC5, 0xCD, 0x5E, 
  0x15, 0xC1, 0xD1, 0x04, 0xCD, 0xFA, 0x16, 0x21, 0x47, 0x16, 0xCD, 0x55, 0x15, 0x21, 0x4B, 0x16, 
  0xCD, 0xEC, 0x1A, 0x01, 0x80, 0x80, 0x11, 0x00, 0x00, 0xCD, 0x5E, 0x15, 0xF1, 0xCD, 0x1F, 0x19, 
  0x01, 0x31, 0x80, 0x11, 0x18, 0x72, 0x21, 0xC1, 0xD1, 0xCD, 0xA4, 0x17, 0xC8, 0x2E, 0x00, 0xCD, 
  0x62, 0x17, 0x79, 0x32, 0x3B, 0x21, 0xEB, 0x22, 0x3C, 0x21, 0x01, 0x00, 0x00, 0x50, 0x58, 0x21, 
  0xAF, 0x15, 0xE5, 0x21, 0xBB, 0x16, 0xE5, 0xE5, 0x21, 0x29, 0x21, 0x7E, 0x23, 0xB7, 0xCA, 0xE7, 
  0x16, 0xE5, 0x2E, 0x08, 0x1F, 0x67, 0x79, 0xD2, 0xD5, 0x16, 0xE5, 0x2A, 0x3C, 0x21, 0x19, 0xEB, 
  0xE1, 0x3A, 0x3B, 0x21, 0x89, 0x1F, 0x4F, 0x7A, 0x1F, 0x57, 0x7B, 0x1F, 0x5F, 0x78, 0x1F, 0x47, 
  0x2D, 0x7C, 0xC2, 0xC4, 0x16, 0xE1, 0xC9, 0x43, 0x5A, 0x51, 0x4F, 0xC9, 0xCD, 0xD5, 0x17, 0x01, 
  0x20, 0x84, 0x11, 0x00, 0x00, 0xCD, 0xE5, 0x17, 0xC1, 0xD1, 0xCD, 0xA4, 0x17, 0xCA, 0x00, 0x05, 
  0x2E, 0xFF, 0xCD, 0x62, 0x17, 0x34, 0x34, 0x2B, 0x7E, 0x32, 0x57, 0x20, 0x2B, 0x7E, 0x32, 0x53, 
  0x20, 0x2B, 0x7E, 0x32, 0x4F, 0x20, 0x41, 0xEB, 0xAF, 0x4F, 0x57, 0x5F, 0x32, 0x5A, 0x20, 0xE5, 
  0xC5, 0x7D, 0xCD, 0x4E, 0x20, 0xDE, 0x00, 0x3F, 0xD2, 0x32, 0x17, 0x32, 0x5A, 0x20, 0xF1, 0xF1, 
  0x37, 0xD2, 0xC1, 0xE1, 0x79, 0x3C, 0x3D, 0x1F, 0xFA, 0xE5, 0x15, 0x17, 0x7B, 0x17, 0x5F, 0x7A, 
  0x17, 0x57, 0x79, 0x17, 0x4F, 0x29, 0x78, 0x17, 0x47, 0x3A, 0x5A, 0x20, 0x17, 0x32, 0x5A, 0x20, 
  0x79, 0xB2, 0xB3, 0xC2, 0x1F, 0x17, 0xE5, 0x21, 0x2C, 0x21, 0x35, 0xE1, 0xC2, 0x1F, 0x17, 0xC3, 
  0x0C, 0x05, 0x78, 0xB7, 0xCA, 0x86, 0x17, 0x7D, 0x21, 0x2C, 0x21, 0xAE, 0x80, 0x47, 0x1F, 0xA8, 
  0x78, 0xF2, 0x85, 0x17, 0xC6, 0x80, 0x77, 0xCA, 0xE5, 0x16, 0xCD, 0x0A, 0x18, 0x77, 0x2B, 0xC9, 
  0xCD, 0xA4, 0x17, 0x2F, 0xE1, 0xB7, 0xE1, 0xF2, 0xC4, 0x15, 0xC3, 0x0C, 0x05, 0xCD, 0xF0, 0x17, 
  0x78, 0xB7, 0xC8, 0xC6, 0x02, 0xDA, 0x0C, 0x05, 0x47, 0xCD, 0x5E, 0x15, 0x21, 0x2C, 0x21, 0x34, 
  0xC0, 0xC3, 0x0C, 0x05, 0x3A, 0x2C, 0x21, 0xB7, 0xC8, 0x3A, 0x2B, 0x21, 0xFE, 0x2F, 0x17, 0x9F, 
  0xC0, 0x3C, 0xC9, 0xCD, 0xA4, 0x17, 0x06, 0x88, 0x11, 0x00, 0x00, 0x21, 0x2C, 0x21, 0x4F, 0x70, 
  0x06, 0x00, 0x23, 0x36, 0x80, 0x17, 0xC3, 0xAC, 0x15, 0xCD, 0xA4, 0x17, 0xF0, 0x21, 0x2B, 0x21, 
  0x7E, 0xEE, 0x80, 0x77, 0xC9, 0xEB, 0x2A, 0x29, 0x21, 0xE3, 0xE5, 0x2A, 0x2B, 0x21, 0xE3, 0xE5, 
  0xEB, 0xC9, 0xCD, 0xF3, 0x17, 0xEB, 0x22, 0x29, 0x21, 0x60, 0x69, 0x22, 0x2B, 0x21, 0xEB, 0xC9, 
  0x21, 0x29, 0x21, 0x5E, 0x23, 0x56, 0x23, 0x4E, 0x23, 0x46, 0x23, 0xC9, 0x11, 0x29, 0x21, 0x06, 
  0x04, 0x1A, 0x77, 0x13, 0x23, 0x05, 0xC2, 0x01, 0x18, 0xC9, 0x21, 0x2B, 0x21, 0x7E, 0x07, 0x37, 
  0x1F, 0x77, 0x3F, 0x1F, 0x23, 0x23, 0x77, 0x79, 0x07, 0x37, 0x1F, 0x4F, 0x1F, 0xAE, 0xC9, 0x78, 
  0xB7, 0xCA, 0xA4, 0x17, 0x21, 0xAD, 0x17, 0xE5, 0xCD, 0xA4, 0x17, 0x79, 0xC8, 0x21, 0x2B, 0x21, 
  0xAE, 0x79, 0xF8, 0xCD, 0x39, 0x18, 0x1F, 0xA9, 0xC9, 0x23, 0x78, 0xBE, 0xC0, 0x2B, 0x79, 0xBE, 
  0xC0, 0x2B, 0x7A, 0xBE, 0xC0, 0x2B, 0x7B, 0x96, 0xC0, 0xE1, 0xE1, 0xC9, 0x47, 0x4F, 0x57, 0x5F, 
  0xB7, 0xC8, 0xE5, 0xCD, 0xF0, 0x17, 0xCD, 0x0A, 0x18, 0xAE, 0x67, 0xFC, 0x70, 0x18, 0x3E, 0x98, 
  0x90, 0xCD, 0x23, 0x16, 0x7C, 0x17, 0xDC, 0xF6, 0x15, 0x06, 0x00, 0xDC, 0x0F, 0x16, 0xE1, 0xC9, 
  0x1B, 0x7A, 0xA3, 0x3C, 0xC0, 0x0B, 0xC9, 0x21, 0x2C, 0x21, 0x7E, 0xFE, 0x98, 0x3A, 0x29, 0x21, 
  0xD0, 0x7E, 0xCD, 0x4C, 0x18, 0x36, 0x98, 0x7B, 0xF5, 0x79, 0x17, 0xCD, 0xAC, 0x15, 0xF1, 0xC9, 
  0x21, 0x00, 0x00, 0x78, 0xB1, 0xC8, 0x3E, 0x10, 0x29, 0xDA, 0xD0, 0x10, 0xEB, 0x29, 0xEB, 0xD2, 
  0xA6, 0x18, 0x09, 0xDA, 0xD0, 0x10, 0x3D, 0xC2, 0x98, 0x18, 0xC9, 0xFE, 0x2D, 0xF5, 0xCA, 0xB7, 
  0x18, 0xFE, 0x2B, 0xCA, 0xB7, 0x18, 0x2B, 0xCD, 0xC4, 0x15, 0x47, 0x57, 0x5F, 0x2F, 0x4F, 0xCD, 
  0x55, 0x09, 0xDA, 0x08, 0x19, 0xFE, 0x2E, 0xCA, 0xE3, 0x18, 0xFE, 0x45, 0xC2, 0xE7, 0x18, 0xCD, 
  0x55, 0x09, 0xCD, 0xFB, 0x0E, 0xCD, 0x55, 0x09, 0xDA, 0x2A, 0x19, 0x14, 0xC2, 0xE7, 0x18, 0xAF, 
  0x93, 0x5F, 0x0C, 0x0C, 0xCA, 0xBF, 0x18, 0xE5, 0x7B, 0x90, 0xF4, 0x00, 0x19, 0xF2, 0xF6, 0x18, 
  0xF5, 0xCD, 0xEC, 0x16, 0xF1, 0x3C, 0xC2, 0xEA, 0x18, 0xD1, 0xF1, 0xCC, 0xCD, 0x17, 0xEB, 0xC9, 
  0xC8, 0xF5, 0xCD, 0x8D, 0x17, 0xF1, 0x3D, 0xC9, 0xD5, 0x57, 0x78, 0x89, 0x47, 0xC5, 0xE5, 0xD5, 
  0xCD, 0x8D, 0x17, 0xF1, 0xD6, 0x30, 0xCD, 0x1F, 0x19, 0xE1, 0xC1, 0xD1, 0xC3, 0xBF, 0x18, 0xCD, 
  0xD5, 0x17, 0xCD, 0xB6, 0x17, 0xC1, 0xD1, 0xC3, 0x5E, 0x15, 0x7B, 0x07, 0x07, 0x83, 0x07, 0x86, 
  0xD6, 0x30, 0x5F, 0xC3, 0xD5, 0x18, 0xE5, 0x21, 0x95, 0x04, 0xCD, 0x9B, 0x12, 0xE1, 0xEB, 0xAF, 
  0x06, 0x98, 0xCD, 0xBB, 0x17, 0x21, 0x9A, 0x12, 0xE5, 0x21, 0x2E, 0x21, 0xE5, 0xCD, 0xA4, 0x17, 
  0x36, 0x20, 0xF2, 0x57, 0x19, 0x36, 0x2D, 0x23, 0x36, 0x30, 0xCA, 0x0D, 0x1A, 0xE5, 0xFC, 0xCD, 
  0x17, 0xAF, 0xF5, 0xCD, 0x13, 0x1A, 0x01, 0x43, 0x91, 0x11, 0xF8, 0x4F, 0xCD, 0x1F, 0x18, 0xB7, 
  0xE2, 0x84, 0x19, 0xF1, 0xCD, 0x01, 0x19, 0xF5, 0xC3, 0x66, 0x19, 0xCD, 0xEC, 0x16, 0xF1, 0x3C, 
  0xF5, 0xCD, 0x13, 0x1A, 0xCD, 0x4C, 0x15, 0x3C, 0xCD, 0x4C, 0x18, 0xCD, 0xE5, 0x17, 0x01, 0x06, 
  0x03, 0xF1, 0x81, 0x3C, 0xFA, 0xA0, 0x19, 0xFE, 0x08, 0xD2, 0xA0, 0x19, 0x3C, 0x47, 0x3E, 0x02, 
  0x3D, 0x3D, 0xE1, 0xF5, 0x11, 0x26, 0x1A, 0x05, 0xC2, 0xB1, 0x19, 0x36, 0x2E, 0x23, 0x36, 0x30, 
  0x23, 0x05, 0x36, 0x2E, 0xCC, 0xFA, 0x17, 0xC5, 0xE5, 0xD5, 0xCD, 0xF0, 0x17, 0xE1, 0x06, 0x2F, 
  0x04, 0x7B, 0x96, 0x5F, 0x23, 0x7A, 0x9E, 0x57, 0x23, 0x79, 0x9E, 0x4F, 0x2B, 0x2B, 0xD2, 0xC0, 
  0x19, 0xCD, 0x03, 0x16, 0x23, 0xCD, 0xE5, 0x17, 0xEB, 0xE1, 0x70, 0x23, 0xC1, 0x0D, 0xC2, 0xB1, 
  0x19, 0x05, 0xCA, 0xF1, 0x19, 0x2B, 0x7E, 0xFE, 0x30, 0xCA, 0xE5, 0x19, 0xFE, 0x2E, 0xC4, 0xFA, 
  0x17, 0xF1, 0xCA, 0x10, 0x1A, 0x36, 0x45, 0x23, 0x36, 0x2B, 0xF2, 0x01, 0x1A, 0x36, 0x2D, 0x2F, 
  0x3C, 0x06, 0x2F, 0x04, 0xD6, 0x0A, 0xD2, 0x03, 0x1A, 0xC6, 0x3A, 0x23, 0x70, 0x23, 0x77, 0x23, 
  0x71, 0xE1, 0xC9, 0x01, 0x74, 0x94, 0x11, 0xF7, 0x23, 0xCD, 0x1F, 0x18, 0xB7, 0xE1, 0xE2, 0x7B, 
  0x19, 0xE9, 0x00, 0x00, 0x00, 0x80, 0xA0, 0x86, 0x01, 0x10, 0x27, 0x00, 0xE8, 0x03, 0x00, 0x64, 
  0x00, 0x00, 0x0A, 0x00, 0x00, 0x01, 0x00, 0x00, 0x21, 0xCD, 0x17, 0xE3, 0xE9, 0xCD, 0xD5, 0x17, 
  0x21, 0x22, 0x1A, 0xCD, 0xE2, 0x17, 0xC1, 0xD1, 0xCD, 0xA4, 0x17, 0x78, 0xCA, 0x8B, 0x1A, 0xF2, 
  0x56, 0x1A, 0xB7, 0xCA, 0x00, 0x05, 0xB7, 0xCA, 0xC5, 0x15, 0xD5, 0xC5, 0x79, 0xF6, 0x7F, 0xCD, 
  0xF0, 0x17, 0xF2, 0x73, 0x1A, 0xD5, 0xC5, 0xCD, 0x77, 0x18, 0xC1, 0xD1, 0xF5, 0xCD, 0x1F, 0x18, 
  0xE1, 0x7C, 0x1F, 0xE1, 0x22, 0x2B, 0x21, 0xE1, 0x22, 0x29, 0x21, 0xDC, 0x38, 0x1A, 0xCC, 0xCD, 
  0x17, 0xD5, 0xC5, 0xCD, 0x58, 0x16, 0xC1, 0xD1, 0xCD, 0x99, 0x16, 0xCD, 0xD5, 0x17, 0x01, 0x38, 
  0x81, 0x11, 0x3B, 0xAA, 0xCD, 0x99, 0x16, 0x3A, 0x2C, 0x21, 0xFE, 0x88, 0xD2, 0x80, 0x17, 0xCD, 
  0x77, 0x18, 0xC6, 0x80, 0xC6, 0x02, 0xDA, 0x80, 0x17, 0xF5, 0x21, 0x47, 0x16, 0xCD, 0x4F, 0x15, 
  0xCD, 0x90, 0x16, 0xF1, 0xC1, 0xD1, 0xF5, 0xCD, 0x5B, 0x15, 0xCD, 0xCD, 0x17, 0x21, 0xCB, 0x1A, 
  0xCD, 0xFB, 0x1A, 0x11, 0x00, 0x00, 0xC1, 0x4A, 0xC3, 0x99, 0x16, 0x08, 0x40, 0x2E, 0x94, 0x74, 
  0x70, 0x4F, 0x2E, 0x77, 0x6E, 0x02, 0x88, 0x7A, 0xE6, 0xA0, 0x2A, 0x7C, 0x50, 0xAA, 0xAA, 0x7E, 
  0xFF, 0xFF, 0x7F, 0x7F, 0x00, 0x00, 0x80, 0x81, 0x00, 0x00, 0x00, 0x81, 0xCD, 0xD5, 0x17, 0x11, 
  0x97, 0x16, 0xD5, 0xE5, 0xCD, 0xF0, 0x17, 0xCD, 0x99, 0x16, 0xE1, 0xCD, 0xD5, 0x17, 0x7E, 0x23, 
  0xCD, 0xE2, 0x17, 0x06, 0xF1, 0xC1, 0xD1, 0x3D, 0xC8, 0xD5, 0xC5, 0xF5, 0xE5, 0xCD, 0x99, 0x16, 
  0xE1, 0xCD, 0xF3, 0x17, 0xE5, 0xCD, 0x5E, 0x15, 0xE1, 0xC3, 0x04, 0x1B, 0xCD, 0xA4, 0x17, 0x21, 
  0x5E, 0x20, 0xFA, 0x7D, 0x1B, 0x21, 0x7F, 0x20, 0xCD, 0xE2, 0x17, 0x21, 0x5E, 0x20, 0xC8, 0x86, 
  0xE6, 0x07, 0x06, 0x00, 0x77, 0x23, 0x87, 0x87, 0x4F, 0x09, 0xCD, 0xF3, 0x17, 0xCD, 0x99, 0x16, 
  0x3A, 0x5D, 0x20, 0x3C, 0xE6, 0x03, 0x06, 0x00, 0xFE, 0x01, 0x88, 0x32, 0x5D, 0x20, 0x21, 0x81, 
  0x1B, 0x87, 0x87, 0x4F, 0x09, 0xCD, 0x4F, 0x15, 0xCD, 0xF0, 0x17, 0x7B, 0x59, 0xEE, 0x4F, 0x4F, 
  0x36, 0x80, 0x2B, 0x46, 0x36, 0x80, 0x21, 0x5C, 0x20, 0x34, 0x7E, 0xD6, 0xAB, 0xC2, 0x74, 0x1B, 
  0x77, 0x0C, 0x15, 0x1C, 0xCD, 0xAF, 0x15, 0x21, 0x7F, 0x20, 0xC3, 0xFC, 0x17, 0x77, 0x2B, 0x77, 
  0x2B, 0x77, 0xC3, 0x58, 0x1B, 0x68, 0xB1, 0x46, 0x68, 0x99, 0xE9, 0x92, 0x69, 0x10, 0xD1, 0x75, 
  0x68, 0x21, 0xDB, 0x1B, 0xCD, 0x4F, 0x15, 0xCD, 0xD5, 0x17, 0x01, 0x49, 0x83, 0x11, 0xDB, 0x0F, 
  0xCD, 0xE5, 0x17, 0xC1, 0xD1, 0xCD, 0xFA, 0x16, 0xCD, 0xD5, 0x17, 0xCD, 0x77, 0x18, 0xC1, 0xD1, 
  0xCD, 0x5B, 0x15, 0x21, 0xDF, 0x1B, 0xCD, 0x55, 0x15, 0xCD, 0xA4, 0x17, 0x37, 0xF2, 0xC7, 0x1B, 
  0xCD, 0x4C, 0x15, 0xCD, 0xA4, 0x17, 0xB7, 0xF5, 0xF4, 0xCD, 0x17, 0x21, 0xDF, 0x1B, 0xCD, 0x4F, 
  0x15, 0xF1, 0xD4, 0xCD, 0x17, 0x21, 0xE3, 0x1B, 0xC3, 0xEC, 0x1A, 0xDB, 0x0F, 0x49, 0x81, 0x00, 
  0x00, 0x00, 0x7F, 0x05, 0xBA, 0xD7, 0x1E, 0x86, 0x64, 0x26, 0x99, 0x87, 0x58, 0x34, 0x23, 0x87, 
  0xE0, 0x5D, 0xA5, 0x86, 0xDA, 0x0F, 0x49, 0x83, 0xCD, 0xD5, 0x17, 0xCD, 0x97, 0x1B, 0xC1, 0xE1, 
  0xCD, 0xD5, 0x17, 0xEB, 0xCD, 0xE5, 0x17, 0xCD, 0x91, 0x1B, 0xC3, 0xF8, 0x16, 0xCD, 0xA4, 0x17, 
  0xFC, 0x38, 0x1A, 0xFC, 0xCD, 0x17, 0x3A, 0x2C, 0x21, 0xFE, 0x81, 0xDA, 0x2A, 0x1C, 0x01, 0x00, 
  0x81, 0x51, 0x59, 0xCD, 0xFA, 0x16, 0x21, 0x55, 0x15, 0xE5, 0x21, 0x34, 0x1C, 0xCD, 0xEC, 0x1A, 
  0x21, 0xDB, 0x1B, 0xC9, 0x09, 0x4A, 0xD7, 0x3B, 0x78, 0x02, 0x6E, 0x84, 0x7B, 0xFE, 0xC1, 0x2F, 
  0x7C, 0x74, 0x31, 0x9A, 0x7D, 0x84, 0x3D, 0x5A, 0x7D, 0xC8, 0x7F, 0x91, 0x7E, 0xE4, 0xBB, 0x4C, 
  0x7E, 0x6C, 0xAA, 0xAA, 0x7F, 0x00, 0x00, 0x00, 0x81, 0xC9, 0xD7, 0xC9, 0x3E, 0x0C, 0xC3, 0x96, 
  0x1D, 0xCD, 0x23, 0x15, 0x7B, 0x32, 0x87, 0x20, 0xC9, 0xCD, 0xC2, 0x0D, 0xCD, 0x07, 0x0A, 0xED, 
  0x53, 0x8B, 0x20, 0xED, 0x53, 0x8D, 0x20, 0xC9, 0xCD, 0x07, 0x0A, 0xD5, 0xE1, 0x46, 0x23, 0x7E, 
  0xC3, 0x7D, 0x11, 0xCD, 0xC2, 0x0D, 0xCD, 0x07, 0x0A, 0xD5, 0xCD, 0xCB, 0x07, 0x2C, 0xCD, 0xC2, 
  0x0D, 0xCD, 0x07, 0x0A, 0xE3, 0x73, 0x23, 0x72, 0xE1, 0xC9, 0xCD, 0xC5, 0x0D, 0xCD, 0x07, 0x0A, 
  0xC5, 0x21, 0x2E, 0x21, 0x7A, 0xFE, 0x00, 0x28, 0x0C, 0xCD, 0xD2, 0x1C, 0x78, 0xFE, 0x30, 0x28, 
  0x02, 0x70, 0x23, 0x71, 0x23, 0x7B, 0xCD, 0xD2, 0x1C, 0x7A, 0xFE, 0x00, 0x20, 0x05, 0x78, 0xFE, 
  0x30, 0x28, 0x02, 0x70, 0x23, 0x71, 0x23, 0xAF, 0x77, 0x23, 0x77, 0xC1, 0x21, 0x2E, 0x21, 0xC3, 
  0x2B, 0x12, 0x47, 0xE6, 0x0F, 0xFE, 0x0A, 0x38, 0x02, 0xC6, 0x07, 0xC6, 0x30, 0x4F, 0x78, 0x0F, 
  0x0F, 0x0F, 0x0F, 0xE6, 0x0F, 0xFE, 0x0A, 0x38, 0x02, 0xC6, 0x07, 0xC6, 0x30, 0x47, 0xC9, 0xEB, 
  0x21, 0x00, 0x00, 0xCD, 0x08, 0x1D, 0xDA, 0x28, 0x1D, 0x18, 0x05, 0xCD, 0x08, 0x1D, 0x38, 0x1F, 
  0x29, 0x29, 0x29, 0x29, 0xB5, 0x6F, 0x18, 0xF3, 0x13, 0x1A, 0xFE, 0x20, 0xCA, 0x08, 0x1D, 0xD6, 
  0x30, 0xD8, 0xFE, 0x0A, 0x38, 0x05, 0xD6, 0x07, 0xFE, 0x0A, 0xD8, 0xFE, 0x10, 0x3F, 0xC9, 0xEB, 
  0x7A, 0x4B, 0xE5, 0xCD, 0x7C, 0x11, 0xE1, 0xC9, 0x1E, 0x26, 0xC3, 0x11, 0x05, 0xCD, 0xC5, 0x0D, 
  0xCD, 0x07, 0x0A, 0xC5, 0x21, 0x2E, 0x21, 0x06, 0x11, 0x05, 0x78, 0xFE, 0x01, 0x28, 0x08, 0xCB, 
  0x13, 0xCB, 0x12, 0x30, 0xF4, 0x18, 0x04, 0xCB, 0x13, 0xCB, 0x12, 0x3E, 0x30, 0xCE, 0x00, 0x77, 
  0x23, 0x05, 0x20, 0xF3, 0xAF, 0x77, 0x23, 0x77, 0xC1, 0x21, 0x2E, 0x21, 0xC3, 0x2B, 0x12, 0xEB, 
  0x21, 0x00, 0x00, 0xCD, 0x7C, 0x1D, 0xDA, 0x8A, 0x1D, 0xD6, 0x30, 0x29, 0xB5, 0x6F, 0xCD, 0x7C, 
  0x1D, 0x30, 0xF6, 0xEB, 0x7A, 0x4B, 0xE5, 0xCD, 0x7C, 0x11, 0xE1, 0xC9, 0x13, 0x1A, 0xFE, 0x20, 
  0xCA, 0x7C, 0x1D, 0xFE, 0x30, 0xD8, 0xFE, 0x32, 0x3F, 0xC9, 0x1E, 0x28, 0xC3, 0x11, 0x05, 0xDD, 
  0x21, 0xFF, 0xFF, 0xC3, 0x61, 0x01, 0xC3, 0x08, 0x00, 0xC3, 0x00, 0x00, 0x3E, 0x00, 0x32, 0x92, 
  0x20, 0xC3, 0x68, 0x01, 0xED, 0x45, 0xF5, 0xA0, 0xC1, 0xB8, 0x3E, 0x00, 0xC9, 0xCD, 0xD6, 0x07, 
  0xC3, 0xFD, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
  };

// ------------------------------------------------------------------------------
//
//  Global variables
//
// ------------------------------------------------------------------------------

byte              ioAddress;
byte              ioData;
byte              tempByte;
word              indexPhase2     =   0;      // Index for the bootPhase2[] array

// ------------------------------------------------------------------------------

void setup() {
  
// ------------------------------------------------------------------------------
//
//  Local variables
//
// ------------------------------------------------------------------------------

  byte  data;                                     // Data byte
  word  address;                                  // External RAM current address;

// ------------------------------------------------------------------------------

  // Initialize RESET_and BUSREQ_
  pinMode(RESET_, OUTPUT);                        // Configure RESET_ and set it ACTIVE
  digitalWrite(RESET_, LOW);

  pinMode(WAIT_RES_, OUTPUT);                     // Configure WAIT_RES_ and set it ACTIVE to reset the WAIT FF (U1C)
  digitalWrite(WAIT_RES_, LOW);

  pinMode(USER, OUTPUT);                          // USER led OFF
  digitalWrite(USER, HIGH);
  
  pinMode(INT_, INPUT_PULLUP);                    // Configure INT_ and set it NOT ACTIVE
  pinMode(INT_, OUTPUT);
  digitalWrite(INT_, HIGH);
  
  pinMode(BUSACK_, INPUT);                        // Configure BUSACK_ as input
  pinMode(WAIT_, INPUT);                          // Configure WAIT_ as input
  
  pinMode(BUSREQ_, INPUT_PULLUP);                 // Set BUSREQ_ HIGH
  pinMode(BUSREQ_, OUTPUT);
  digitalWrite(BUSREQ_, HIGH);
  
  DDRA = 0x00;                                    // Configure Z80 data bus D0-D7 (PA0-PA7) as input with pull-up
  PORTA = 0xFF;
  DDRC = DDRC & B00000011;                        // Configure Z80 address bus AD0-AD5 (PC2-PC7) as input with pull-up
  PORTC = PORTC | B11111100;
  DDRD = DDRD & B11100011;                        // Configure Z80 address bus AD6-AD8 (PD2-PD4) as input with pull-up
  PORTD = PORTD | B00011100;
  pinMode(MREQ_, INPUT_PULLUP);                   // Configure MREQ_ as input with pull-up
  pinMode(RD_, INPUT_PULLUP);                     // Configure RD_ as input with pull-up
  pinMode(WR_, INPUT_PULLUP);                     // Configure WR_ as input with pull-up
  
  // Initialize CLK @ 4MHz. Z80 clock_freq = (Atmega_clock) / (OCR2 + 1) = (Atmega_clock) / 2
  ASSR &= ~(1 << AS2);                            // Set Timer2 clock from system clock
  TCCR2 |= (1 << CS20);                           // Set Timer2 clock to "no prescaling"
  TCCR2 &= ~((1 << CS21) | (1 << CS22));
  TCCR2 |= (1 << WGM21);                          // Set Timer2 CTC mode
  TCCR2 &= ~(1 << WGM20);
  TCCR2 |= (1 <<  COM20);                         // Set "toggle OC2 on compare match"
  TCCR2 &= ~(1 << COM21);
  OCR2 = 0;                                       // Set the compare value to toggle OC2
  pinMode(CLK, OUTPUT);                           // Set OC2 as output and start to output the clock @ 4Mhz

  Serial.begin(9600);
  Serial.println();
  Serial.println("Z80-MBC (Mobile Breadboard Computer) - A041116");
  Serial.println("IOS - I/O Subsystem - S221116");
  Serial.println();
  
  delay(1);                                       // Wait for reset completed
  digitalWrite(WAIT_RES_, HIGH);                  // Set WAIT_RES_ HIGH
  digitalWrite(BUSREQ_, LOW);                     // Activate DMA request signal
  delay(1);
  digitalWrite(RESET_, HIGH);                     // Release Z80 from RESET
  delay(1);                                       // Wait for Z80 bus thee-stated

  // Load Phase 1 boot payload into external RAM with DMA and using address (AD0-AD8) and data (D0-D7) bus
  address = bootPhase1StrAddr;                    // Initialize the starting address of external RAM 
  Serial.println("IOS: Loading phase 1 boot program...");
  pinMode(WR_, OUTPUT);                           // Configure WR_ as ouput and set it HIGH
  digitalWrite(WR_, HIGH);
  pinMode(RD_, OUTPUT);                           // Configure RD_ as ouput and set it HIGH
  digitalWrite(RD_, HIGH);
  pinMode(MREQ_, OUTPUT);                         // Configure MREQ_ as ouput and set it HIGH
  digitalWrite(MREQ_, HIGH);
  for (int i = 0; i < sizeof(bootPhase1); i++)
  // Write boot program into external RAM
  {
    if (debugLev > 0)
    {
      Serial.print("DMA WRITE -> ADDR: ");
      Serial.print(address, HEX);
      Serial.print(" - DATA: ");
    }
    switch (i)
    // Get the current data to write into external RAM (Compliant with the S091116 specs)
    {
      case 3:
      // Send the LSB of the starting addres of the phase 2 boot program
        data = lowByte(bootPhase2StrAddr);
      break;
              
      case 4:
      // Send the MSB of the starting addres of the phase 2 boot program
        data = highByte(bootPhase2StrAddr);
      break;

      case 5:
      // Send the LSB of the lenght in bytes of the phase 2 boot program
        data = lowByte(sizeof(bootPhase2));
      break;

      case 6:
      // Send the MSB of the lenght in bytes of the phase 2 boot program
        data = highByte(sizeof(bootPhase2));
      break;

      default:
      // Get a byte of the phase 1 payload
        data = pgm_read_byte(&bootPhase1[i]);
      break;
    }

    if (debugLev > 0)
    {
      if (data < 0x10) Serial.print("0");
      Serial.println(data, HEX);
      Serial.println("      76543210       76543210");
      Serial.print("PORTC=");
      printBinaryByte(PORTC);
      Serial.print(" PORTD=");
      printBinaryByte(PORTD);
      Serial.println();
    }

    DDRA = 0xFF;                                  // Configure Z80 data bus D0-D7 (PA0-PA7) as output
    PORTA = data;                                 // Current output on data bus
    DDRC = DDRC | B11111100;                      // Configure Z80 address bus AD0-AD5 (PC2-PC7) as output
    DDRD = DDRD | B00011100;                      // Configure Z80 address bus AD6-AD8 (PD2-PD4) as output
    PORTC = (PORTC & B00000011) | ((lowByte(address) << 2) & B11111100);  // Output address AD0-AD5 (PC2-PC7)
    PORTD = (PORTD & B11100011) | (byte(address >> 4 ) & B00011100);      // Output address AD6-AD8 (PD2-PD4)
    //PORTC = (PORTC & B11111101) | ((highByte(address) & B00000100) >> 1); // Output address AD10 (PC1)
    digitalWrite(MREQ_, LOW);                     // Enable external RAM /CE1 pin
    digitalWrite(WR_, LOW);                       // Write data into current address of the external RAM (10us 1-0-1 pulse)
    digitalWrite(WR_, HIGH);
    address++;                                    // Set next address
  }
  Serial.println("IOS: Loading phase 1 done.");

  // Release Z80 address AD0-AD8 and data D0-D7 bus and run the Z80 CPU
  pinMode(WR_, INPUT_PULLUP);                     // Configure WR_ as input with pull-up
  pinMode(WR_, INPUT);
  pinMode(RD_, INPUT_PULLUP);                     // Configure RD_ as input with pull-up
  pinMode(RD_, INPUT);
  pinMode(MREQ_, INPUT_PULLUP);                   // Configure MREQ_ as input with pull-up
  DDRA = 0x00;                                    // Configure Z80 data bus D0-D7 (PA0-PA7) as input with pull-up
  PORTA = 0xFF;
  DDRC = DDRC & B00000011;                        // Configure Z80 address bus AD0-AD5 (PC2-PC7) as input with pull-up
  PORTC = PORTC | B11111100;
  DDRD = DDRD & B11100011;                        // Configure Z80 address bus AD6-AD8 (PD2-PD4) as input with pull-up
  PORTD = PORTD | B00011100;
  digitalWrite(RESET_, LOW);                      // Activate Z80 RESET_ signal
  digitalWrite(BUSREQ_, HIGH);                    // Release Z80 from DMA
  digitalWrite(RESET_, HIGH);                     // Release Z80 from RESET. Z80 is running from now.
  Serial.println("IOS: Z80 is running from now.");
  Serial.println();
}

// ------------------------------------------------------------------------------

void loop() {
  if (!digitalRead(WAIT_))
  // IO operaton requested
  {
    if (!digitalRead(WR_))
    // IO WRITE operation requested
    {
      ioAddress = PINC >> 2;                      // Read Z80 address bus AD0-AD5 (PC2-PC7)
      ioAddress = (ioAddress & B00111111) | ((PIND << 4) & B11000000);  // Read Z80 address bus AD6-AD7 (PD2-PD3)
      ioData = PINA;                              // Read Z80 data bus D0-D7 (PA0-PA7)

      if (debugLev > 1)
      {
        Serial.print("IOS: I/O WRITE operation requested");
        Serial.print(" - DATA: ");
        if (ioData < 0x10) Serial.print("0");
        Serial.print(ioData, HEX);
        Serial.print(" ");
        printBinaryByte(ioData);
        Serial.print(" ADDR: ");
        if (ioAddress < 0x10) Serial.print("0");
        Serial.print(ioAddress, HEX);
        Serial.print(" ");
        printBinaryByte(ioAddress);
        Serial.println();
      }
      switch (ioAddress)
      // Execute the requested I/O WRITE operation
      {
        case  0x00:
          // USER LED:      I/O DATA:    D7 D6 D5 D4 D3 D2 D1 D0
          //                            ---------------------------------------------------------
          //                              x  x  x  x  x  x  x  0    USER Led off
          //                              x  x  x  x  x  x  x  1    USER Led on
          if (ioData & B00000001) digitalWrite(USER, LOW); 
          else digitalWrite(USER, HIGH);
        break;
        
        case  0x01:
          // SERIAL TX:     I/O DATA:    D7 D6 D5 D4 D3 D2 D1 D0
          //                            ---------------------------------------------------------
          //                             D7 D6 D5 D4 D3 D2 D1 D0    ASCII char to be sent to serial
          Serial.write(ioData);
        break;
      }

      digitalWrite(BUSREQ_, LOW);                 // Request for a DMA
      digitalWrite(WAIT_RES_, LOW);               // Reset WAIT FF exiting from WAIT state
      digitalWrite(WAIT_RES_, HIGH);              // Now Z80 is in DMA, so it's safe set WAIT_RES_ HIGH again
      digitalWrite(BUSREQ_, HIGH);                // Resume Z80 from DMA
    }
    else 
      if (!digitalRead(RD_))
      // IO READ operation requested
      {
        ioAddress = PINC >> 2;                    // Read Z80 address bus AD0-AD5 (PC2-PC7)
        ioAddress = (ioAddress & B00111111) | ((PIND << 4) & B11000000); // Read Z80 address bus AD6-AD7 (PD2-PD3)
        switch (ioAddress)
        // Execute the requested I/O READ operation
        {
          case  0x00:
            // USER KEY:      I/O DATA:    D7 D6 D5 D4 D3 D2 D1 D0
            //                            ---------------------------------------------------------
            //                              0  0  0  0  0  0  0  0    USER Key not pressed
            //                              0  0  0  0  0  0  0  1    USER Key pressed
            tempByte = digitalRead(USER);         // Save USER led status
            pinMode(USER, INPUT_PULLUP);          // Read USER Key
            ioData = !digitalRead(USER);
            pinMode(USER, OUTPUT); 
            digitalWrite(USER, tempByte);         // Restore USER led status
          break;

          case  0x01:
            // SERIAL RX:     I/O DATA:    D7 D6 D5 D4 D3 D2 D1 D0
            //                            ---------------------------------------------------------
            //                             D7 D6 D5 D4 D3 D2 D1 D0    ASCII char read from serial
            //
            // NOTE 1: if there is no input char, a value 0xFF is forced as input char.
            // NOTE 2: the INT_ signal is always reset (set to HIGH) after this I/O operation.
            ioData = 0xFF;
            if (Serial.available() > 0) ioData = Serial.read();
            digitalWrite(INT_, HIGH);
          break;

          case  0x02:
            // READ BOOT PHASE 2 PAYLOAD:
            //                I/O DATA:    D7 D6 D5 D4 D3 D2 D1 D0
            //                            ---------------------------------------------------------
            //                             D7 D6 D5 D4 D3 D2 D1 D0    current byte of bootPhase2[]
            //
            // NOTE 1: a new byte is read every I/O read operation, and the pointer is automatically incremented to next byte
            //         every I/O read operation.
            // NOTE 2: a value 0x00 is forced as output byte for successive readings if the end of bootPhase2[] is reached.
            if (indexPhase2 < sizeof(bootPhase2)) ioData = pgm_read_byte(&bootPhase2[indexPhase2]);
            else ioData = 0;
            indexPhase2++;
          break;
        }
        if (debugLev > 1)
        {
          Serial.print("IOS: I/O READ operation requested"); 
          Serial.print(" - DATA: ");
          if (ioData < 0x10) Serial.print("0");
          Serial.print(ioData, HEX);
          Serial.print(" ");
          printBinaryByte(ioData);
          Serial.print(" ADDR: ");
          if (ioAddress < 0x10) Serial.print("0");
          Serial.print(ioAddress, HEX);
          Serial.print(" ");
          printBinaryByte(ioAddress);
          Serial.println();        
        }
        
        DDRA = 0xFF;                               // Configure Z80 data bus D0-D7 (PA0-PA7) as output
        PORTA = ioData;                            // Current output on data bus
        
        digitalWrite(BUSREQ_, LOW);                // Request for a DMA
        digitalWrite(WAIT_RES_, LOW);              // Now is safe reset WAIT FF (exiting from WAIT state)

        delayMicroseconds(2);                      // Wait 2us just to be sure that Z80 read the data
        DDRA = 0x00;                               // Configure Z80 data bus D0-D7 (PA0-PA7) as input with pull-up
        PORTA = 0xFF;

        digitalWrite(WAIT_RES_, HIGH);             // Now Z80 is in DMA, so it's safe set WAIT_RES_ HIGH again
        digitalWrite(BUSREQ_, HIGH);               // Resume Z80 from DMA
      }
      else
      // INTERRUPT operation setting IORQ_ LOW, so nothing to do
      {
        if (debugLev > 1) Serial.println("IOS: INT operation (nothing to do)");
        digitalWrite(BUSREQ_, LOW);                // Request for a DMA
        digitalWrite(WAIT_RES_, LOW);              // Reset WAIT FF exiting from WAIT state
        digitalWrite(WAIT_RES_, HIGH);             // Now Z80 is in DMA, so it's safe set WAIT_RES_ HIGH again
        digitalWrite(BUSREQ_, HIGH);               // Resume Z80 from DMA
      }
  }

}

// ------------------------------------------------------------------------------

void printBinaryByte(byte value)
{
  for (byte mask = 0x80; mask; mask >>= 1)
  {
    Serial.print((mask & value) ? '1' : '0');
  }
}

// ------------------------------------------------------------------------------

void serialEvent()
// Set INT_ to ACTIVE if there are received chars from serial to read
{
  if (Serial.available()) digitalWrite(INT_, LOW);
}

Github

https://github.com/MCUdude/MightyCore#how-to-install

Credits

Just4Fun

Just4Fun

0 projects • 3 followers

Comments