BBC Basic in Z80 emulation on the mbed, USB serial terminal output only. LOAD and SAVE work on the local file system but there is no error signalling.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
gertk
Date:
Wed Jun 29 14:25:56 2011 +0000
Commit message:
preliminary version

Changed in this revision

bbc_0100.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
module.h Show annotated file Show diff for this revision Revisions of this file
z80/cbops.h Show annotated file Show diff for this revision Revisions of this file
z80/edops.h Show annotated file Show diff for this revision Revisions of this file
z80/z80.h Show annotated file Show diff for this revision Revisions of this file
z80/z80ops.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bbc_0100.h	Wed Jun 29 14:25:56 2011 +0000
@@ -0,0 +1,851 @@
+// the BBC Basic rom for Z80
+// this is the CP/M version
+static const char rom[] = {
+  0xc3, 0x2a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x50, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+  
+  0xc3, 0x2a, 0x01, 0xc3, 0x97, 0x01, 0xc3, 0x78, 0x0e, 0xc3, 0xd6, 0x07, 0xc3, 0xe6, 0x0c, 0xc3,
+  0xdd, 0x0c, 0xc3, 0x86, 0x08, 0xc3, 0xaa, 0x08, 0xc3, 0x72, 0x0d, 0xc3, 0xf7, 0xff, 0xc3, 0x98,
+  0x32, 0xc3, 0x7b, 0x32, 0xc3, 0xb2, 0x32, 0xc3, 0xd9, 0x31, 0x21, 0x00, 0x37, 0xf9, 0x36, 0x0a,
+  0x2c, 0x36, 0x09, 0x2c, 0xaf, 0x77, 0x2c, 0x20, 0xfc, 0x3d, 0x32, 0xfe, 0x37, 0x21, 0x76, 0x01,
+  0x22, 0xee, 0x37, 0xcd, 0x64, 0x34, 0xed, 0x53, 0xe4, 0x37, 0x22, 0xdc, 0x37, 0xcd, 0xa2, 0x08,
+  0xc2, 0x6b, 0x0d, 0xcd, 0xe6, 0x0c, 0x41, 0x63, 0x6f, 0x72, 0x6e, 0x20, 0x42, 0x42, 0x43, 0x20,
+  0x42, 0x41, 0x53, 0x49, 0x43, 0x20, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x32, 0x2e,
+  0x32, 0x30, 0x20, 0x20, 0x0d, 0x0a, 0x28, 0x43, 0x29, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69,
+  0x67, 0x68, 0x74, 0x20, 0x52, 0x2e, 0x54, 0x2e, 0x52, 0x75, 0x73, 0x73, 0x65, 0x6c, 0x6c, 0x20,
+  0x31, 0x39, 0x38, 0x33, 0x0d, 0x0a, 0x00, 0xf6, 0x37, 0xed, 0x7b, 0xe4, 0x37, 0xcd, 0x15, 0x13,
+  0x21, 0xfe, 0x37, 0x7e, 0xe6, 0x0f, 0xf6, 0x30, 0x77, 0x21, 0x00, 0x00, 0x22, 0xec, 0x37, 0x22,
+  0xf4, 0x37, 0x2a, 0xea, 0x37, 0x22, 0xe6, 0x37, 0x7c, 0xb5, 0x28, 0x17, 0xe5, 0xcd, 0xe3, 0x09,
+  0xe1, 0xed, 0x4b, 0xff, 0x37, 0x06, 0x00, 0x09, 0xda, 0xf1, 0x2c, 0x22, 0xea, 0x37, 0x3e, 0x20,
+  0xcd, 0x52, 0x09, 0x21, 0x00, 0x35, 0xcd, 0x99, 0x34, 0xaf, 0x32, 0xfb, 0x37, 0xfd, 0x21, 0x00,
+  0x35, 0xcd, 0x9f, 0x0b, 0xcd, 0x7f, 0x2f, 0x7c, 0xb5, 0x28, 0x03, 0x22, 0xe6, 0x37, 0x11, 0x00,
+  0x36, 0x0e, 0x01, 0xcd, 0x10, 0x0c, 0x12, 0xaf, 0x47, 0x4b, 0x13, 0x12, 0x2a, 0xe6, 0x37, 0x7c,
+  0xb5, 0xfd, 0x21, 0x00, 0x36, 0xca, 0xa2, 0x0d, 0xc5, 0xe5, 0xcd, 0x86, 0x08, 0xe1, 0xcd, 0x89,
+  0x09, 0xcc, 0x46, 0x08, 0xc1, 0x79, 0xb7, 0xca, 0x98, 0x01, 0xc6, 0x04, 0x4f, 0xd5, 0xc5, 0xeb,
+  0x2a, 0xde, 0x37, 0xe5, 0x09, 0xe5, 0x24, 0xaf, 0xed, 0x72, 0xe1, 0xd2, 0xc1, 0x07, 0x22, 0xde,
+  0x37, 0xe3, 0xe5, 0x23, 0xb7, 0xed, 0x52, 0x44, 0x4d, 0xe1, 0xd1, 0x28, 0x02, 0xed, 0xb8, 0xc1,
+  0xd1, 0x23, 0x71, 0x23, 0x73, 0x23, 0x72, 0x23, 0x11, 0x00, 0x36, 0xeb, 0x0d, 0x0d, 0x0d, 0xed,
+  0xb0, 0xcd, 0x7b, 0x08, 0xc3, 0x98, 0x01, 0x80, 0x41, 0x4e, 0x44, 0x94, 0x41, 0x42, 0x53, 0x95,
+  0x41, 0x43, 0x53, 0x96, 0x41, 0x44, 0x56, 0x41, 0x4c, 0x97, 0x41, 0x53, 0x43, 0x98, 0x41, 0x53,
+  0x4e, 0x99, 0x41, 0x54, 0x4e, 0xc6, 0x41, 0x55, 0x54, 0x4f, 0x9a, 0x42, 0x47, 0x45, 0x54, 0x00,
+  0xd5, 0x42, 0x50, 0x55, 0x54, 0x00, 0xfb, 0x43, 0x4f, 0x4c, 0x4f, 0x55, 0x52, 0xfb, 0x43, 0x4f,
+  0x4c, 0x4f, 0x52, 0xd6, 0x43, 0x41, 0x4c, 0x4c, 0xd7, 0x43, 0x48, 0x41, 0x49, 0x4e, 0xbd, 0x43,
+  0x48, 0x52, 0x24, 0xd8, 0x43, 0x4c, 0x45, 0x41, 0x52, 0x00, 0xd9, 0x43, 0x4c, 0x4f, 0x53, 0x45,
+  0x00, 0xda, 0x43, 0x4c, 0x47, 0x00, 0xdb, 0x43, 0x4c, 0x53, 0x00, 0x9b, 0x43, 0x4f, 0x53, 0x9c,
+  0x43, 0x4f, 0x55, 0x4e, 0x54, 0x00, 0xdc, 0x44, 0x41, 0x54, 0x41, 0x9d, 0x44, 0x45, 0x47, 0xdd,
+  0x44, 0x45, 0x46, 0xc7, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x81, 0x44, 0x49, 0x56, 0xde, 0x44,
+  0x49, 0x4d, 0xdf, 0x44, 0x52, 0x41, 0x57, 0xe1, 0x45, 0x4e, 0x44, 0x50, 0x52, 0x4f, 0x43, 0x00,
+  0xe0, 0x45, 0x4e, 0x44, 0x00, 0xe2, 0x45, 0x4e, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x45, 0x8b, 0x45,
+  0x4c, 0x53, 0x45, 0xa0, 0x45, 0x56, 0x41, 0x4c, 0x9e, 0x45, 0x52, 0x4c, 0x00, 0x85, 0x45, 0x52,
+  0x52, 0x4f, 0x52, 0xc5, 0x45, 0x4f, 0x46, 0x00, 0x82, 0x45, 0x4f, 0x52, 0x9f, 0x45, 0x52, 0x52,
+  0x00, 0xa1, 0x45, 0x58, 0x50, 0xa2, 0x45, 0x58, 0x54, 0x00, 0xe3, 0x46, 0x4f, 0x52, 0xa3, 0x46,
+  0x41, 0x4c, 0x53, 0x45, 0x00, 0xa4, 0x46, 0x4e, 0xe5, 0x47, 0x4f, 0x54, 0x4f, 0xbe, 0x47, 0x45,
+  0x54, 0x24, 0xa5, 0x47, 0x45, 0x54, 0xe4, 0x47, 0x4f, 0x53, 0x55, 0x42, 0xe6, 0x47, 0x43, 0x4f,
+  0x4c, 0x93, 0x48, 0x49, 0x4d, 0x45, 0x4d, 0x00, 0xe8, 0x49, 0x4e, 0x50, 0x55, 0x54, 0xe7, 0x49,
+  0x46, 0xbf, 0x49, 0x4e, 0x4b, 0x45, 0x59, 0x24, 0xa6, 0x49, 0x4e, 0x4b, 0x45, 0x59, 0xa8, 0x49,
+  0x4e, 0x54, 0xa7, 0x49, 0x4e, 0x53, 0x54, 0x52, 0x28, 0xc9, 0x4c, 0x49, 0x53, 0x54, 0x86, 0x4c,
+  0x49, 0x4e, 0x45, 0xc8, 0x4c, 0x4f, 0x41, 0x44, 0x92, 0x4c, 0x4f, 0x4d, 0x45, 0x4d, 0x00, 0xea,
+  0x4c, 0x4f, 0x43, 0x41, 0x4c, 0xc0, 0x4c, 0x45, 0x46, 0x54, 0x24, 0x28, 0xa9, 0x4c, 0x45, 0x4e,
+  0xe9, 0x4c, 0x45, 0x54, 0xab, 0x4c, 0x4f, 0x47, 0xaa, 0x4c, 0x4e, 0xc1, 0x4d, 0x49, 0x44, 0x24,
+  0x28, 0xeb, 0x4d, 0x4f, 0x44, 0x45, 0x83, 0x4d, 0x4f, 0x44, 0xec, 0x4d, 0x4f, 0x56, 0x45, 0xed,
+  0x4e, 0x45, 0x58, 0x54, 0xca, 0x4e, 0x45, 0x57, 0x00, 0xac, 0x4e, 0x4f, 0x54, 0xcb, 0x4f, 0x4c,
+  0x44, 0x00, 0xee, 0x4f, 0x4e, 0x87, 0x4f, 0x46, 0x46, 0x84, 0x4f, 0x52, 0x8e, 0x4f, 0x50, 0x45,
+  0x4e, 0x49, 0x4e, 0xae, 0x4f, 0x50, 0x45, 0x4e, 0x4f, 0x55, 0x54, 0xad, 0x4f, 0x50, 0x45, 0x4e,
+  0x55, 0x50, 0xff, 0x4f, 0x53, 0x43, 0x4c, 0x49, 0xf1, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x90, 0x50,
+  0x41, 0x47, 0x45, 0x00, 0x8f, 0x50, 0x54, 0x52, 0x00, 0xaf, 0x50, 0x49, 0x00, 0xf0, 0x50, 0x4c,
+  0x4f, 0x54, 0xb0, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x28, 0xf2, 0x50, 0x52, 0x4f, 0x43, 0xb1, 0x50,
+  0x4f, 0x53, 0x00, 0xce, 0x50, 0x55, 0x54, 0xf8, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x00, 0xf5,
+  0x52, 0x45, 0x50, 0x45, 0x41, 0x54, 0xf6, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x00, 0xf3, 0x52,
+  0x45, 0x41, 0x44, 0xf4, 0x52, 0x45, 0x4d, 0xf9, 0x52, 0x55, 0x4e, 0x00, 0xb2, 0x52, 0x41, 0x44,
+  0xf7, 0x52, 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0xc2, 0x52, 0x49, 0x47, 0x48, 0x54, 0x24, 0x28,
+  0xb3, 0x52, 0x4e, 0x44, 0x00, 0xcc, 0x52, 0x45, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x88, 0x53,
+  0x54, 0x45, 0x50, 0xcd, 0x53, 0x41, 0x56, 0x45, 0xb4, 0x53, 0x47, 0x4e, 0xb5, 0x53, 0x49, 0x4e,
+  0xb6, 0x53, 0x51, 0x52, 0x89, 0x53, 0x50, 0x43, 0xc3, 0x53, 0x54, 0x52, 0x24, 0xc4, 0x53, 0x54,
+  0x52, 0x49, 0x4e, 0x47, 0x24, 0x28, 0xd4, 0x53, 0x4f, 0x55, 0x4e, 0x44, 0xfa, 0x53, 0x54, 0x4f,
+  0x50, 0x00, 0xb7, 0x54, 0x41, 0x4e, 0x8c, 0x54, 0x48, 0x45, 0x4e, 0xb8, 0x54, 0x4f, 0x8a, 0x54,
+  0x41, 0x42, 0x28, 0xfc, 0x54, 0x52, 0x41, 0x43, 0x45, 0x91, 0x54, 0x49, 0x4d, 0x45, 0x00, 0xb9,
+  0x54, 0x52, 0x55, 0x45, 0x00, 0xfd, 0x55, 0x4e, 0x54, 0x49, 0x4c, 0xba, 0x55, 0x53, 0x52, 0xef,
+  0x56, 0x44, 0x55, 0xbb, 0x56, 0x41, 0x4c, 0xbc, 0x56, 0x50, 0x4f, 0x53, 0x00, 0xfe, 0x57, 0x49,
+  0x44, 0x54, 0x48, 0xd3, 0x48, 0x49, 0x4d, 0x45, 0x4d, 0xd2, 0x4c, 0x4f, 0x4d, 0x45, 0x4d, 0xd0,
+  0x50, 0x41, 0x47, 0x45, 0xcf, 0x50, 0x54, 0x52, 0xd1, 0x54, 0x49, 0x4d, 0x45, 0x01, 0x4d, 0x69,
+  0x73, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x02, 0x4e, 0x6f, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x03,
+  0x42, 0x61, 0x64, 0x20, 0x04, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x05, 0x76, 0x61, 0x72, 0x69,
+  0x61, 0x62, 0x6c, 0x65, 0x06, 0x4f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x07, 0x4e, 0x6f, 0x20, 0x08,
+  0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0xff, 0xff, 0x07, 0x72, 0x6f, 0x6f, 0x6d, 0x00, 0x06, 0x04,
+  0x00, 0x00, 0x00, 0x4d, 0x69, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x00, 0x01, 0x2c, 0x00, 0x54, 0x79,
+  0x70, 0x65, 0x20, 0x6d, 0x69, 0x73, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x07, 0xa4, 0x00, 0x00,
+  0x01, 0x22, 0x00, 0x03, 0xde, 0x00, 0xde, 0x08, 0x00, 0x4e, 0x6f, 0x74, 0x20, 0xea, 0x00, 0x07,
+  0xf2, 0x00, 0x41, 0x72, 0x72, 0x61, 0x79, 0x00, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70,
+  0x74, 0x00, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x45,
+  0x73, 0x63, 0x61, 0x70, 0x65, 0x00, 0x44, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x62,
+  0x79, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x00, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f,
+  0x6f, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x00, 0x54, 0x6f, 0x6f, 0x20, 0x62, 0x69, 0x67, 0x00, 0x2d,
+  0x76, 0x65, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x00, 0x4c, 0x6f, 0x67, 0x04, 0x00, 0x41, 0x63, 0x63,
+  0x75, 0x72, 0x61, 0x63, 0x79, 0x20, 0x6c, 0x6f, 0x73, 0x74, 0x00, 0x45, 0x78, 0x70, 0x04, 0x00,
+  0x00, 0x02, 0x05, 0x00, 0x01, 0x29, 0x00, 0x03, 0x48, 0x45, 0x58, 0x00, 0x02, 0xa4, 0x2f, 0xf2,
+  0x00, 0x03, 0x63, 0x61, 0x6c, 0x6c, 0x00, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+  0x00, 0x07, 0xe3, 0x00, 0x43, 0x61, 0x6e, 0x27, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20,
+  0xe3, 0x00, 0xe3, 0x20, 0x05, 0x00, 0x00, 0x07, 0xb8, 0x00, 0x00, 0x07, 0xe4, 0x00, 0xee, 0x20,
+  0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x00, 0xee, 0x04, 0x00, 0x02, 0x6c, 0x69, 0x6e, 0x65, 0x00,
+  0x06, 0x20, 0xdc, 0x00, 0x07, 0xf5, 0x00, 0x00, 0x01, 0x23, 0x00, 0xcd, 0x86, 0x08, 0xcd, 0xd2,
+  0x0b, 0x7e, 0xb7, 0x28, 0x51, 0x23, 0x5e, 0x23, 0x56, 0x7a, 0xb3, 0x28, 0x1a, 0x2b, 0x2b, 0xeb,
+  0x37, 0xed, 0x42, 0xeb, 0x30, 0x40, 0xc5, 0xcd, 0x46, 0x08, 0xc1, 0x18, 0xe4, 0xfd, 0x23, 0xcd,
+  0x46, 0x1f, 0xd9, 0x7d, 0x32, 0xfe, 0x37, 0xc3, 0x98, 0x01, 0xfe, 0x4f, 0x28, 0xef, 0xcd, 0xd2,
+  0x0b, 0x78, 0xb1, 0x20, 0x01, 0x0b, 0xd9, 0xdd, 0x21, 0xfe, 0x37, 0x01, 0x00, 0x00, 0xd9, 0x3e,
+  0x14, 0x08, 0x7e, 0xb7, 0x28, 0x10, 0x23, 0x5e, 0x23, 0x56, 0x7a, 0xb3, 0x28, 0xd9, 0x23, 0xd5,
+  0xeb, 0x37, 0xed, 0x42, 0xeb, 0xd1, 0xd2, 0x97, 0x01, 0x22, 0xf4, 0x37, 0xcd, 0xc2, 0x08, 0x08,
+  0x3d, 0xcd, 0x57, 0x34, 0x18, 0xdb, 0xcd, 0xaa, 0x08, 0xcd, 0xaf, 0x0b, 0xd9, 0x2a, 0xdc, 0x37,
+  0xed, 0x5b, 0xe0, 0x37, 0x7e, 0xb7, 0x28, 0x2f, 0x23, 0x4e, 0x23, 0x46, 0x78, 0xb1, 0x28, 0xa7,
+  0xeb, 0x71, 0x23, 0x70, 0x23, 0xd9, 0xe5, 0x09, 0xda, 0xf1, 0x2c, 0xd9, 0xc1, 0x71, 0x23, 0x70,
+  0x23, 0xeb, 0x2b, 0x2b, 0xaf, 0x47, 0x4e, 0x09, 0xeb, 0xe5, 0x24, 0xed, 0x72, 0xe1, 0xeb, 0x38,
+  0xd3, 0xcd, 0xd6, 0x07, 0xcc, 0x08, 0x00, 0xeb, 0x36, 0xff, 0x23, 0x36, 0xff, 0xed, 0x5b, 0xe0,
+  0x37, 0xd9, 0x2a, 0xdc, 0x37, 0x4e, 0x79, 0xb7, 0x28, 0x9c, 0xd9, 0xeb, 0x23, 0x23, 0x5e, 0x23,
+  0x56, 0x23, 0xd5, 0xeb, 0x22, 0xe6, 0x37, 0xd9, 0xd1, 0x23, 0x73, 0x23, 0x72, 0x23, 0x0d, 0x0d,
+  0x0d, 0x06, 0x00, 0x3e, 0x8d, 0xed, 0xb1, 0x20, 0xdc, 0xc5, 0xe5, 0xe5, 0xfd, 0xe1, 0xd9, 0xcd,
+  0xa1, 0x29, 0xd9, 0x44, 0x4d, 0x2a, 0xe0, 0x37, 0x5e, 0x23, 0x56, 0x23, 0xeb, 0xb7, 0xed, 0x42,
+  0xeb, 0x5e, 0x23, 0x56, 0x23, 0x38, 0xf1, 0xeb, 0x28, 0x19, 0xcd, 0xe6, 0x0c, 0x46, 0x61, 0x69,
+  0x6c, 0x65, 0x64, 0x20, 0x61, 0x74, 0x20, 0x00, 0x2a, 0xe6, 0x37, 0xcd, 0xdf, 0x09, 0xcd, 0x4b,
+  0x09, 0x18, 0x06, 0xd1, 0xd5, 0x1b, 0xcd, 0xb4, 0x0c, 0xe1, 0xc1, 0x18, 0xb6, 0xcd, 0xaf, 0x0b,
+  0x22, 0xea, 0x37, 0x79, 0x32, 0xff, 0x37, 0x18, 0x29, 0xcd, 0xe6, 0x0c, 0x03, 0x70, 0x72, 0x6f,
+  0x67, 0x72, 0x61, 0x6d, 0x0d, 0x0a, 0x00, 0xcd, 0xa2, 0x08, 0x18, 0x16, 0x2a, 0xdc, 0x37, 0xe5,
+  0x23, 0x23, 0x23, 0x01, 0xfc, 0x00, 0x3e, 0x0d, 0xed, 0xb1, 0x20, 0xdd, 0x7d, 0xe1, 0x77, 0xcd,
+  0x7b, 0x08, 0xc3, 0x98, 0x01, 0xcd, 0x4f, 0x1f, 0x3e, 0x0d, 0x12, 0xcd, 0x61, 0x08, 0xcd, 0xaa,
+  0x08, 0x18, 0x1b, 0xcd, 0x86, 0x08, 0xcd, 0xcb, 0x33, 0x3e, 0x0d, 0x12, 0xed, 0x5b, 0xdc, 0x37,
+  0x2a, 0xde, 0x37, 0xb7, 0xed, 0x52, 0x44, 0x4d, 0x21, 0x00, 0x35, 0xcd, 0x62, 0x31, 0xc3, 0x97,
+  0x01, 0xed, 0x7b, 0xe4, 0x37, 0x21, 0x38, 0x05, 0xb7, 0x28, 0x0a, 0x47, 0x08, 0xaf, 0xbe, 0x23,
+  0x20, 0xfc, 0x10, 0xfa, 0x08, 0xe5, 0xe1, 0x22, 0xee, 0x37, 0xed, 0x7b, 0xe4, 0x37, 0x32, 0xfd,
+  0x37, 0xcd, 0xa2, 0x09, 0x22, 0xf2, 0x37, 0xb7, 0x28, 0x0b, 0x2a, 0xec, 0x37, 0x7c, 0xb5, 0xe5,
+  0xfd, 0xe1, 0xc2, 0xa2, 0x0d, 0x21, 0x00, 0x00, 0x22, 0xea, 0x37, 0x22, 0xe8, 0x37, 0xcd, 0x4b,
+  0x09, 0xcd, 0xda, 0x0c, 0xcd, 0xcc, 0x09, 0xcd, 0x4b, 0x09, 0xc3, 0x98, 0x01, 0x21, 0x57, 0x02,
+  0xfd, 0x7e, 0x00, 0x46, 0x23, 0xbe, 0x28, 0x08, 0xd8, 0x23, 0xcb, 0x7e, 0x28, 0xfb, 0x18, 0xf0,
+  0xfd, 0xe5, 0x23, 0xcb, 0x7e, 0x20, 0x1b, 0xfd, 0x23, 0xfd, 0x7e, 0x00, 0xfe, 0x2e, 0x28, 0x12,
+  0xbe, 0x28, 0xef, 0xcd, 0xf0, 0x0b, 0x38, 0x04, 0xfd, 0xe1, 0x18, 0xdd, 0x7e, 0xb7, 0x20, 0xf8,
+  0xfd, 0x2b, 0xf1, 0xaf, 0x78, 0xc9, 0xd5, 0xe5, 0xe5, 0x06, 0x00, 0x4e, 0x09, 0xe5, 0xeb, 0x2a,
+  0xde, 0x37, 0xed, 0x52, 0x44, 0x4d, 0xe1, 0xd1, 0xed, 0xb0, 0xed, 0x53, 0xde, 0x37, 0xe1, 0xd1,
+  0xc9, 0xed, 0x5b, 0xdc, 0x37, 0x21, 0x00, 0xff, 0x39, 0xed, 0x52, 0x44, 0x4d, 0x21, 0x00, 0x35,
+  0xcd, 0xa9, 0x31, 0xd4, 0xa2, 0x08, 0x3e, 0x00, 0xd2, 0xc1, 0x07, 0xcd, 0x86, 0x08, 0x2b, 0x36,
+  0xff, 0x2b, 0x36, 0xff, 0x18, 0x24, 0x2a, 0xdc, 0x37, 0x06, 0x00, 0x3e, 0x0d, 0x4e, 0x0c, 0x0d,
+  0x28, 0x09, 0x09, 0x2b, 0xbe, 0x23, 0x28, 0xf5, 0xc3, 0x69, 0x07, 0x23, 0x23, 0x23, 0x22, 0xde,
+  0x37, 0xc9, 0x2a, 0xdc, 0x37, 0x36, 0x00, 0xcd, 0x9b, 0x08, 0xe5, 0x2a, 0xde, 0x37, 0x22, 0xe0,
+  0x37, 0x22, 0xe2, 0x37, 0x21, 0x6c, 0x37, 0xc5, 0x06, 0x70, 0x36, 0x00, 0x23, 0x10, 0xfb, 0xc1,
+  0xe1, 0xc9, 0xe5, 0xeb, 0xc5, 0xcd, 0xe3, 0x09, 0xc1, 0xe1, 0x7e, 0xfe, 0xed, 0xcc, 0x2e, 0x09,
+  0xfe, 0xfd, 0xcc, 0x2e, 0x09, 0xd9, 0x3e, 0x20, 0xdd, 0xcb, 0x00, 0x46, 0xc4, 0x52, 0x09, 0x78,
+  0x87, 0xdd, 0xcb, 0x00, 0x4e, 0xc4, 0x9c, 0x17, 0x79, 0x87, 0xdd, 0xcb, 0x00, 0x56, 0xc4, 0x9c,
+  0x17, 0xd9, 0x7e, 0xfe, 0xe3, 0xcc, 0x2e, 0x09, 0xfe, 0xf5, 0xcc, 0x2e, 0x09, 0x1e, 0x00, 0x7e,
+  0x23, 0xfe, 0x0d, 0x28, 0x46, 0xfe, 0x22, 0x20, 0x01, 0x1c, 0xcd, 0x22, 0x09, 0x18, 0xf0, 0xe5,
+  0xfd, 0xe1, 0xc5, 0xcd, 0xa1, 0x29, 0xc1, 0xd9, 0xc5, 0xcd, 0xdf, 0x09, 0xc1, 0xd9, 0xfd, 0xe5,
+  0xe1, 0xc9, 0xcb, 0x43, 0x20, 0x2c, 0xfe, 0x8d, 0x28, 0xe5, 0xcd, 0x6b, 0x09, 0x7e, 0xd9, 0xfe,
+  0xe3, 0x28, 0x08, 0xfe, 0xed, 0x20, 0x05, 0x05, 0xf2, 0x3c, 0x09, 0x04, 0xfe, 0xf5, 0x28, 0x08,
+  0xfe, 0xfd, 0x20, 0x05, 0x0d, 0xf2, 0x49, 0x09, 0x0c, 0xd9, 0xc9, 0x3e, 0x0d, 0xcd, 0x52, 0x09,
+  0x3e, 0x0a, 0xcd, 0xee, 0xff, 0xd6, 0x0d, 0x28, 0x05, 0xd8, 0x3a, 0xfb, 0x37, 0x3c, 0x32, 0xfb,
+  0x37, 0xc8, 0xe5, 0x2a, 0xfc, 0x37, 0xbd, 0xe1, 0xc0, 0x18, 0xe0, 0xfe, 0x8a, 0xea, 0x52, 0x09,
+  0xc5, 0xe5, 0x21, 0x57, 0x02, 0x01, 0xdf, 0x02, 0xed, 0xb1, 0x7e, 0x23, 0xfe, 0x8a, 0xf5, 0xec,
+  0x52, 0x09, 0xf1, 0xea, 0x7a, 0x09, 0xe1, 0xc1, 0xc9, 0xeb, 0x2a, 0xdc, 0x37, 0xaf, 0xbe, 0x3c,
+  0xd0, 0xaf, 0x47, 0x4e, 0xe5, 0x23, 0x7e, 0x23, 0x66, 0x6f, 0xed, 0x52, 0xe1, 0xd0, 0x09, 0xc3,
+  0x93, 0x09, 0x06, 0x00, 0xed, 0x5b, 0xf4, 0x37, 0x2a, 0xdc, 0x37, 0xb7, 0xed, 0x52, 0x19, 0x30,
+  0x16, 0x4e, 0x0c, 0x0d, 0x28, 0x11, 0x09, 0xed, 0x52, 0x19, 0x38, 0xf5, 0xed, 0x42, 0x23, 0x5e,
+  0x23, 0x56, 0xeb, 0x22, 0xe6, 0x37, 0xc9, 0x21, 0x00, 0x00, 0x18, 0xf7, 0x2a, 0xe6, 0x37, 0x7c,
+  0xb5, 0xc8, 0xcd, 0xe6, 0x0c, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x00, 0x0e,
+  0x00, 0x18, 0x02, 0x0e, 0x20, 0x06, 0x05, 0x11, 0x10, 0x27, 0xaf, 0xed, 0x52, 0x3c, 0x30, 0xfb,
+  0x19, 0x3d, 0x28, 0x04, 0xcb, 0xe1, 0xcb, 0xe9, 0xb1, 0xc4, 0x52, 0x09, 0x78, 0xfe, 0x05, 0x28,
+  0x06, 0x29, 0x54, 0x5d, 0x29, 0x29, 0x19, 0x11, 0xe8, 0x03, 0x10, 0xde, 0x37, 0xc9, 0xcd, 0x5b,
+  0x0b, 0xfd, 0x7e, 0x00, 0xfe, 0x28, 0x20, 0x68, 0x3e, 0x0e, 0xc3, 0xc1, 0x07, 0xfd, 0x7e, 0x00,
+  0xfe, 0x24, 0x28, 0x62, 0xfe, 0x21, 0x28, 0x62, 0xfe, 0x3f, 0x28, 0x62, 0xcd, 0xd3, 0x0a, 0xc0,
+  0xfd, 0x7e, 0x00, 0xfe, 0x28, 0x20, 0x41, 0xd5, 0x7e, 0xb7, 0x28, 0xdc, 0x23, 0x11, 0x00, 0x00,
+  0xf5, 0xfd, 0x23, 0x18, 0x04, 0xf5, 0xcd, 0x39, 0x2f, 0xe5, 0xd5, 0xcd, 0x46, 0x1f, 0xd9, 0xd1,
+  0xe3, 0x4e, 0x23, 0x46, 0x23, 0xe3, 0xeb, 0xd5, 0xcd, 0x15, 0x18, 0xd1, 0x19, 0xeb, 0xb7, 0xed,
+  0x42, 0x3e, 0x0f, 0x30, 0xb5, 0xe1, 0xf1, 0x3d, 0x20, 0xdb, 0xcd, 0x45, 0x2f, 0xf1, 0xe5, 0xcd,
+  0x08, 0x18, 0xe1, 0x19, 0x57, 0xfd, 0x7e, 0x00, 0xfe, 0x3f, 0x28, 0x1d, 0xfe, 0x21, 0x28, 0x15,
+  0xe5, 0xdd, 0xe1, 0x7a, 0xbf, 0xc9, 0x3e, 0x80, 0x18, 0x05, 0x3e, 0x04, 0x18, 0x01, 0xaf, 0x21,
+  0x00, 0x00, 0xf5, 0x18, 0x15, 0x06, 0x04, 0x18, 0x02, 0x06, 0x00, 0xe5, 0xdd, 0xe1, 0x7a, 0xfe,
+  0x81, 0xc8, 0xc5, 0xcd, 0xeb, 0x1f, 0xcd, 0xf5, 0x2b, 0xd9, 0xe5, 0xfd, 0x23, 0xcd, 0x5d, 0x1f,
+  0xd9, 0xd1, 0xf1, 0x19, 0xe5, 0xdd, 0xe1, 0xbf, 0xc9, 0xfd, 0x7e, 0x01, 0xcd, 0xf0, 0x0b, 0xd8,
+  0xfd, 0x7e, 0x00, 0x21, 0xd8, 0x37, 0xfe, 0xa4, 0x28, 0x43, 0x21, 0xda, 0x37, 0xfe, 0xf2, 0x28,
+  0x3c, 0x37, 0xc9, 0xd6, 0x40, 0xd8, 0x26, 0x00, 0xfe, 0x1b, 0x30, 0x1d, 0x87, 0x6f, 0xfd, 0x7e,
+  0x01, 0xfe, 0x25, 0x20, 0x20, 0xfd, 0x7e, 0x02, 0xfe, 0x28, 0x28, 0x19, 0x29, 0x11, 0x00, 0x37,
+  0x19, 0xfd, 0x23, 0xfd, 0x23, 0x16, 0x04, 0xaf, 0xc9, 0xfe, 0x1f, 0xd8, 0xfe, 0x3b, 0x3f, 0x3d,
+  0xd8, 0xd6, 0x03, 0x87, 0x6f, 0x11, 0x6c, 0x37, 0x2d, 0x2d, 0x37, 0xf8, 0x19, 0x5e, 0x23, 0x56,
+  0x7a, 0xb3, 0x28, 0x45, 0x62, 0x6b, 0x23, 0x23, 0xfd, 0xe5, 0x7e, 0x23, 0xfd, 0x23, 0xfd, 0xbe,
+  0x00, 0x28, 0xf7, 0xb7, 0x28, 0x06, 0xfd, 0xe1, 0xeb, 0xc3, 0x0d, 0x0b, 0xfd, 0x2b, 0xfd, 0x7e,
+  0x00, 0xfe, 0x28, 0x28, 0x13, 0xfd, 0x23, 0xcd, 0xe4, 0x0b, 0x38, 0x0c, 0xfe, 0x28, 0x28, 0xe6,
+  0xfd, 0x7e, 0xff, 0xcd, 0xf0, 0x0b, 0x30, 0xde, 0xd1, 0xfd, 0x7e, 0xff, 0xfe, 0x24, 0x16, 0x81,
+  0xc8, 0xfe, 0x25, 0x16, 0x04, 0xc8, 0x14, 0xbf, 0xc9, 0x3c, 0xc9, 0xaf, 0xed, 0x5b, 0xe2, 0x37,
+  0x72, 0x2b, 0x73, 0xeb, 0x77, 0x23, 0x77, 0x23, 0xfd, 0x23, 0xcd, 0xe4, 0x0b, 0x38, 0x14, 0x77,
+  0x23, 0xcd, 0xf0, 0x0b, 0x30, 0xf2, 0xfe, 0x28, 0x28, 0x09, 0xfd, 0x7e, 0x01, 0xfe, 0x28, 0x28,
+  0xe7, 0xfd, 0x23, 0x36, 0x00, 0x23, 0xe5, 0xcd, 0x49, 0x0b, 0x3e, 0x05, 0xba, 0x28, 0x01, 0x3d,
+  0x36, 0x00, 0x23, 0x3d, 0x20, 0xfa, 0x22, 0xe2, 0x37, 0xcd, 0x39, 0x16, 0xe1, 0xaf, 0xc9, 0xcd,
+  0x7f, 0x2f, 0xcd, 0x00, 0x2d, 0xcd, 0xb4, 0x2b, 0x7c, 0xb5, 0xd9, 0xc8, 0xc3, 0xf1, 0x2c, 0xcd,
+  0x9f, 0x0b, 0x7c, 0xb5, 0x20, 0x02, 0x2e, 0x0a, 0xcd, 0x3c, 0x17, 0xfd, 0x23, 0xe5, 0x21, 0x0a,
+  0x00, 0xc4, 0x9f, 0x0b, 0xe3, 0xc1, 0x78, 0xb1, 0xc0, 0xcd, 0xd6, 0x07, 0x53, 0x69, 0x6c, 0x6c,
+  0x79, 0x00, 0xcd, 0x9f, 0x0b, 0xcd, 0x3c, 0x17, 0xfd, 0x23, 0xe5, 0xc4, 0x9f, 0x0b, 0xe3, 0xcd,
+  0x89, 0x09, 0xc1, 0xc9, 0xfd, 0x7e, 0x00, 0xfe, 0x24, 0xc8, 0xfe, 0x25, 0xc8, 0xfe, 0x28, 0xc8,
+  0xfe, 0x30, 0xd8, 0xfe, 0x3a, 0x3f, 0xd0, 0xfe, 0x41, 0xd8, 0xfe, 0x5b, 0x3f, 0xd0, 0xfe, 0x5f,
+  0xd8, 0xfe, 0x7b, 0x3f, 0xc9, 0xaf, 0xcd, 0xd6, 0x07, 0x86, 0x08, 0x00, 0x12, 0x13, 0xfd, 0x23,
+  0x7b, 0xfe, 0xfc, 0x30, 0xf0, 0xfd, 0x7e, 0x00, 0xfe, 0x0d, 0xc8, 0xcd, 0xf0, 0x0b, 0x30, 0x04,
+  0xcb, 0xa9, 0xcb, 0x99, 0xfe, 0x20, 0x28, 0xe4, 0xfe, 0x2c, 0x28, 0xe0, 0xfe, 0x47, 0x38, 0x02,
+  0xcb, 0x99, 0xfe, 0x22, 0x20, 0x05, 0xcb, 0x11, 0x3f, 0xcb, 0x19, 0xcb, 0x61, 0x28, 0x10, 0xcb,
+  0xa1, 0xc5, 0xd5, 0xcd, 0x9f, 0x0b, 0xd1, 0xc1, 0x7c, 0xb5, 0xc4, 0xb4, 0x0c, 0x18, 0xc1, 0x0d,
+  0x28, 0x09, 0x0c, 0x20, 0xb7, 0xb7, 0xf4, 0x0d, 0x08, 0x18, 0x12, 0xfe, 0x2a, 0x28, 0x16, 0xb7,
+  0xf4, 0x0d, 0x08, 0xfe, 0x8f, 0x38, 0x06, 0xfe, 0x94, 0x30, 0x02, 0xc6, 0x40, 0xfe, 0xf4, 0x28,
+  0x04, 0xfe, 0xdc, 0x20, 0x02, 0xcb, 0xf1, 0xfe, 0xa4, 0x28, 0x09, 0xfe, 0xf2, 0x28, 0x05, 0xcd,
+  0xf7, 0x0b, 0x38, 0x02, 0xcb, 0xe9, 0xfe, 0x26, 0x20, 0x02, 0xcb, 0xd9, 0x21, 0xab, 0x0c, 0xc5,
+  0x01, 0x06, 0x00, 0xed, 0xb1, 0xc1, 0x20, 0x02, 0xcb, 0xe1, 0x21, 0xaf, 0x0c, 0xc5, 0x01, 0x05,
+  0x00, 0xed, 0xb1, 0xc1, 0x20, 0x02, 0xcb, 0xc1, 0xc3, 0x0c, 0x0c, 0xe5, 0xe4, 0xf7, 0xfc, 0x8c,
+  0x8b, 0xf5, 0x8d, 0x3a, 0xcb, 0xe1, 0xeb, 0x36, 0x8d, 0x23, 0x7a, 0xe6, 0xc0, 0x0f, 0x0f, 0x47,
+  0x7b, 0xe6, 0xc0, 0xb0, 0x0f, 0x0f, 0xee, 0x54, 0x77, 0x23, 0x7b, 0xe6, 0x3f, 0xf6, 0x40, 0x77,
+  0x23, 0x7a, 0xe6, 0x3f, 0xf6, 0x40, 0x77, 0x23, 0xeb, 0xc9, 0x2a, 0xee, 0x37, 0x7e, 0x23, 0xb7,
+  0xc8, 0xcd, 0x6b, 0x09, 0x18, 0xf7, 0xe3, 0xcd, 0xdd, 0x0c, 0xe3, 0xc9, 0x5d, 0x07, 0x3b, 0x06,
+  0x95, 0x07, 0x6a, 0x06, 0x77, 0x07, 0x7c, 0x07, 0xa6, 0x06, 0xa3, 0x07, 0xb4, 0x15, 0xdc, 0x32,
+  0x91, 0x14, 0xa0, 0x14, 0xaf, 0x14, 0xc2, 0x14, 0x82, 0x30, 0x36, 0x15, 0x49, 0x15, 0x65, 0x0d,
+  0x56, 0x14, 0x2d, 0x15, 0x06, 0x31, 0x33, 0x14, 0x18, 0x0e, 0x18, 0x0e, 0xc4, 0x0e, 0xbb, 0x30,
+  0xca, 0x0d, 0x8f, 0x12, 0x54, 0x30, 0xfa, 0x10, 0xb5, 0x10, 0x9e, 0x10, 0x1e, 0x31, 0x06, 0x14,
+  0x1a, 0x13, 0x37, 0x0e, 0x41, 0x12, 0xf2, 0x30, 0xb6, 0x30, 0x3f, 0x11, 0x42, 0x10, 0x0c, 0x15,
+  0xc0, 0x30, 0x71, 0x0f, 0xc4, 0x11, 0xb5, 0x13, 0x18, 0x0e, 0xd0, 0x10, 0x50, 0x14, 0x5e, 0x14,
+  0xc0, 0x10, 0x60, 0x0d, 0x3d, 0x14, 0x0e, 0x31, 0xf2, 0x14, 0xd8, 0x10, 0xe7, 0x14, 0x04, 0x0e,
+  0xcd, 0x3c, 0x17, 0x28, 0x0d, 0xcd, 0x4f, 0x1f, 0x3e, 0x0d, 0x12, 0xed, 0x7b, 0xe4, 0x37, 0xcd,
+  0x61, 0x08, 0xed, 0x7b, 0xe4, 0x37, 0xdd, 0x21, 0xf6, 0x37, 0xed, 0x5f, 0x28, 0xfc, 0x07, 0x07,
+  0xdd, 0x77, 0x03, 0x9f, 0xdd, 0x77, 0x04, 0xcd, 0xaa, 0x08, 0x21, 0x00, 0x00, 0x22, 0xec, 0x37,
+  0x2a, 0xdc, 0x37, 0x3e, 0xdc, 0xcd, 0xf2, 0x17, 0x22, 0xf0, 0x37, 0xfd, 0x2a, 0xdc, 0x37, 0xcd,
+  0xd7, 0x0d, 0xfd, 0x22, 0xf4, 0x37, 0xcd, 0x57, 0x34, 0xcd, 0x7f, 0x2f, 0xfd, 0x23, 0xfe, 0x3a,
+  0x28, 0xf7, 0xfe, 0x0d, 0x28, 0xe9, 0xd6, 0xc6, 0x38, 0x6c, 0x87, 0x4f, 0x06, 0x00, 0x21, 0xec,
+  0x0c, 0x09, 0x7e, 0x23, 0x66, 0x6f, 0xcd, 0x7f, 0x2f, 0xe9, 0xcd, 0xa2, 0x09, 0x7c, 0xb5, 0xca,
+  0x98, 0x01, 0x1e, 0x00, 0xc3, 0x97, 0x01, 0xfd, 0x7e, 0x00, 0x01, 0x03, 0x00, 0xfd, 0x09, 0xb7,
+  0x28, 0xe8, 0x2a, 0xe8, 0x37, 0x7c, 0xb5, 0xc8, 0xfd, 0x56, 0xff, 0xfd, 0x5e, 0xfe, 0xed, 0x52,
+  0xd8, 0xeb, 0x3e, 0x5b, 0xcd, 0x52, 0x09, 0xcd, 0xdf, 0x09, 0x3e, 0x5d, 0xcd, 0x52, 0x09, 0x3e,
+  0x20, 0xc3, 0x52, 0x09, 0xcd, 0x4f, 0x1f, 0x3e, 0x0d, 0x12, 0x21, 0x00, 0x35, 0xcd, 0xf7, 0xff,
+  0x18, 0x90, 0xfd, 0xe5, 0xe1, 0xcd, 0xf7, 0xff, 0xfd, 0xe5, 0xe1, 0x3e, 0x0d, 0x47, 0xed, 0xb1,
+  0xe5, 0xfd, 0xe1, 0xc3, 0x9f, 0x0d, 0xfe, 0xc5, 0x28, 0xee, 0xfe, 0x64, 0x28, 0xe4, 0xfe, 0x77,
+  0x28, 0x4b, 0xc3, 0xd0, 0x32, 0xfd, 0x2b, 0xcd, 0xc6, 0x15, 0xca, 0xa2, 0x0d, 0x38, 0x36, 0xf5,
+  0xcd, 0x48, 0x17, 0xe5, 0xcd, 0x4f, 0x1f, 0xdd, 0xe1, 0xf1, 0xcd, 0x01, 0x16, 0xc3, 0xa2, 0x0d,
+  0xcd, 0xd7, 0x0d, 0xfd, 0x22, 0xf4, 0x37, 0xcd, 0x57, 0x34, 0xcd, 0x3b, 0x18, 0x38, 0x16, 0xfe,
+  0x0d, 0x28, 0xed, 0x21, 0xfe, 0x37, 0x7e, 0xe6, 0x0f, 0xf6, 0x30, 0x77, 0x18, 0xdf, 0xcd, 0x1d,
+  0x0a, 0xc8, 0xd2, 0x0e, 0x0a, 0x3e, 0x10, 0x21, 0x3e, 0x11, 0xc3, 0xc1, 0x07, 0xcd, 0x36, 0x1e,
+  0x43, 0xeb, 0xd9, 0xeb, 0xc1, 0x21, 0x1c, 0x17, 0xb7, 0xed, 0x42, 0x28, 0x19, 0x21, 0xc4, 0x11,
+  0xb7, 0xed, 0x42, 0x3e, 0x07, 0x20, 0xe3, 0xfd, 0xe1, 0xfd, 0x22, 0xf4, 0x37, 0xeb, 0xd9, 0xeb,
+  0x11, 0x00, 0x35, 0x58, 0x08, 0xc9, 0xdd, 0xe1, 0xc1, 0x78, 0xb7, 0xfa, 0xb7, 0x0e, 0xe1, 0xd9,
+  0xe1, 0xd9, 0xcd, 0xda, 0x15, 0x18, 0xcd, 0x21, 0x00, 0x00, 0x39, 0xd5, 0x59, 0xcd, 0x04, 0x16,
+  0xd1, 0xf9, 0x18, 0xc0, 0xcd, 0x1d, 0x0a, 0x38, 0x7b, 0xca, 0x4c, 0x0f, 0xcd, 0x5b, 0x0b, 0xe5,
+  0xdd, 0xe1, 0xfd, 0x7e, 0x00, 0xfe, 0x28, 0x7a, 0x20, 0x72, 0xe5, 0xf5, 0x11, 0x01, 0x00, 0x42,
+  0xfd, 0x23, 0xc5, 0xd5, 0xdd, 0xe5, 0xcd, 0x46, 0x1f, 0xcb, 0x7c, 0x20, 0x57, 0xd9, 0x23, 0xdd,
+  0xe1, 0xdd, 0x23, 0xdd, 0x75, 0x00, 0xdd, 0x23, 0xdd, 0x74, 0x00, 0xc1, 0xcd, 0x15, 0x18, 0x38,
+  0x46, 0xeb, 0xc1, 0x04, 0xfd, 0x7e, 0x00, 0xfe, 0x2c, 0x28, 0xd5, 0xcd, 0x45, 0x2f, 0xf1, 0xdd,
+  0x23, 0xdd, 0xe3, 0xdd, 0x70, 0x00, 0xcd, 0x08, 0x18, 0xe1, 0x38, 0x2b, 0x19, 0x38, 0x28, 0xe5,
+  0x24, 0x28, 0x24, 0xed, 0x72, 0x30, 0x20, 0xe1, 0x22, 0xe2, 0x37, 0x7a, 0xb3, 0x28, 0x06, 0x2b,
+  0x36, 0x00, 0x1b, 0x18, 0xf6, 0xcd, 0x7f, 0x2f, 0xfe, 0x2c, 0xc2, 0xa2, 0x0d, 0xfd, 0x23, 0xcd,
+  0x7f, 0x2f, 0x18, 0x80, 0x3e, 0x0a, 0x21, 0x3e, 0x0b, 0xc3, 0xc1, 0x07, 0xb7, 0x28, 0xf5, 0xfa,
+  0x44, 0x0f, 0x47, 0xfd, 0x7e, 0xff, 0xfe, 0x29, 0x78, 0x28, 0xe9, 0x2a, 0xe2, 0x37, 0xd9, 0x21,
+  0x00, 0x00, 0x4c, 0xcd, 0xda, 0x15, 0xcd, 0x46, 0x1f, 0xd9, 0x23, 0xeb, 0x2a, 0xe2, 0x37, 0x18,
+  0xab, 0xfe, 0x23, 0x20, 0x67, 0xcd, 0x33, 0x18, 0xcd, 0x7f, 0x2f, 0xfe, 0x2c, 0xc2, 0xa2, 0x0d,
+  0xfd, 0x23, 0xd5, 0xcd, 0x36, 0x1e, 0x08, 0xfa, 0xa5, 0x0f, 0xd1, 0xc5, 0xfe, 0x05, 0xca, 0x5b,
+  0x33, 0x3e, 0x40, 0xcd, 0x7b, 0x32, 0xcd, 0x78, 0x33, 0xcd, 0x7c, 0x33, 0xcd, 0x80, 0x33, 0xcd,
+  0x86, 0x33, 0xc1, 0x18, 0xd3, 0x26, 0x35, 0x6b, 0xd1, 0xaf, 0xcd, 0x7b, 0x32, 0x7d, 0xcd, 0x7b,
+  0x32, 0x2c, 0x2d, 0x28, 0xc3, 0x2d, 0x7e, 0xcd, 0x7b, 0x32, 0x18, 0xf5, 0x06, 0x02, 0x18, 0x22,
+  0x01, 0x00, 0x01, 0x18, 0x1d, 0x21, 0x00, 0x37, 0xaf, 0xbe, 0x28, 0x10, 0x3a, 0xfb, 0x37, 0xb7,
+  0x28, 0x0a, 0x96, 0x28, 0x07, 0x30, 0xfb, 0xed, 0x44, 0xcd, 0x9c, 0x17, 0x3a, 0x00, 0x37, 0x4f,
+  0x06, 0x00, 0xcd, 0x3c, 0x17, 0x28, 0x38, 0xcb, 0x80, 0xfd, 0x23, 0xfe, 0x7e, 0x28, 0xcd, 0xfe,
+  0x3b, 0x28, 0xcd, 0xfe, 0x2c, 0x28, 0xce, 0xcd, 0x55, 0x17, 0x28, 0xe6, 0xfd, 0x2b, 0xc5, 0xcd,
+  0x36, 0x1e, 0x08, 0xfa, 0x19, 0x10, 0xd1, 0xd5, 0xcb, 0x4a, 0xf5, 0xcc, 0x0f, 0x2a, 0xf1, 0xc4,
+  0xce, 0x29, 0xc1, 0xc5, 0x79, 0x93, 0xd4, 0x9c, 0x17, 0xc1, 0xcd, 0xaa, 0x17, 0x18, 0xc3, 0xcb,
+  0x40, 0xcc, 0x4b, 0x09, 0xc3, 0xa2, 0x0d, 0xfd, 0x23, 0x21, 0x00, 0x00, 0x22, 0xec, 0x37, 0xcd,
+  0x7f, 0x2f, 0xfe, 0x87, 0xfd, 0x23, 0xca, 0xa2, 0x0d, 0xfd, 0x2b, 0xfd, 0x22, 0xec, 0x37, 0xc3,
+  0x18, 0x0e, 0xfe, 0x85, 0x28, 0xe1, 0xcd, 0x46, 0x1f, 0xfd, 0x7e, 0x00, 0xfd, 0x23, 0xfe, 0xe5,
+  0x28, 0x06, 0xfe, 0xe4, 0x3e, 0x27, 0x20, 0x43, 0xd9, 0xe5, 0xd9, 0xc1, 0x08, 0x78, 0xb4, 0xb5,
+  0x20, 0x29, 0xb1, 0x28, 0x26, 0x08, 0x47, 0x0d, 0x28, 0x0e, 0xcd, 0x3c, 0x17, 0x28, 0x1c, 0xfd,
+  0x23, 0xfe, 0x2c, 0x20, 0xf5, 0x0d, 0x20, 0xf2, 0xc5, 0xcd, 0x5d, 0x1f, 0xc1, 0x78, 0xfe, 0xe5,
+  0x28, 0x25, 0xcd, 0x3c, 0x17, 0x28, 0x31, 0xfd, 0x23, 0x18, 0xf7, 0xfd, 0x7e, 0x00, 0xfd, 0x23,
+  0xfe, 0x8b, 0xca, 0x18, 0x14, 0xfe, 0x0d, 0x20, 0xf2, 0x3e, 0x28, 0xc3, 0xc1, 0x07, 0xcd, 0x5d,
+  0x1f, 0xcd, 0x3c, 0x17, 0xc2, 0x75, 0x0e, 0xd9, 0xcd, 0x89, 0x09, 0xe5, 0xfd, 0xe1, 0xca, 0x9f,
+  0x0d, 0x3e, 0x29, 0x18, 0xe6, 0xcd, 0x5d, 0x1f, 0xfd, 0xe5, 0xcd, 0x39, 0x16, 0xcd, 0xa1, 0x10,
+  0xd1, 0x21, 0xc0, 0x10, 0xb7, 0xed, 0x52, 0xfd, 0xe1, 0xca, 0xa2, 0x0d, 0x3e, 0x26, 0x18, 0xcb,
+  0xfd, 0xe5, 0xcd, 0x39, 0x16, 0xcd, 0xa2, 0x0d, 0xc1, 0xc5, 0x21, 0xd8, 0x10, 0xb7, 0xed, 0x42,
+  0x3e, 0x2b, 0x20, 0xb7, 0xcd, 0x46, 0x1f, 0xcd, 0xf6, 0x2c, 0xc1, 0xd1, 0x20, 0x05, 0xd5, 0xc5,
+  0xd5, 0xfd, 0xe1, 0xc3, 0xa2, 0x0d, 0x3e, 0x22, 0x18, 0xa1, 0xcd, 0xc6, 0x15, 0x20, 0xf7, 0xf5,
+  0xfd, 0x7e, 0x00, 0xfe, 0xb8, 0x3e, 0x24, 0x20, 0x92, 0xfd, 0x23, 0xdd, 0xe5, 0xcd, 0x3f, 0x1f,
+  0xdd, 0xe1, 0xf1, 0x47, 0xc5, 0xe5, 0x21, 0x00, 0x00, 0x4c, 0xd9, 0xe5, 0x21, 0x01, 0x00, 0xd9,
+  0xfd, 0x7e, 0x00, 0xfe, 0x88, 0x20, 0x09, 0xfd, 0x23, 0xdd, 0xe5, 0xcd, 0x3f, 0x1f, 0xdd, 0xe1,
+  0xc5, 0xe5, 0xd9, 0xe5, 0xd9, 0xfd, 0xe5, 0xdd, 0xe5, 0xcd, 0x39, 0x16, 0xcd, 0xa2, 0x0d, 0xc1,
+  0x21, 0x3f, 0x11, 0xb7, 0xed, 0x42, 0x3e, 0x20, 0x20, 0x73, 0xcd, 0x3c, 0x17, 0xe1, 0xe5, 0xc5,
+  0xe5, 0xc4, 0x1d, 0x0a, 0xd1, 0xeb, 0xb7, 0xed, 0x52, 0x20, 0x50, 0xd5, 0xdd, 0x21, 0x08, 0x00,
+  0xdd, 0x39, 0xcd, 0xa6, 0x20, 0xdd, 0x7e, 0x0b, 0xdd, 0xe1, 0xcd, 0xeb, 0x1f, 0xcb, 0x7a, 0xf5,
+  0x3e, 0x0b, 0xcd, 0x98, 0x2f, 0xf1, 0xf5, 0xcd, 0xda, 0x15, 0xdd, 0x21, 0x0e, 0x00, 0xdd, 0x39,
+  0xcd, 0xa6, 0x20, 0xf1, 0xcc, 0xdb, 0x2c, 0x3e, 0x08, 0xcd, 0x98, 0x2f, 0x24, 0x20, 0x11, 0x21,
+  0x12, 0x00, 0x39, 0xf9, 0xcd, 0x7f, 0x2f, 0xfe, 0x2c, 0xc2, 0xa2, 0x0d, 0xfd, 0x23, 0x18, 0x9f,
+  0xc1, 0xd1, 0xfd, 0xe1, 0xfd, 0xe5, 0xd5, 0xc5, 0xc3, 0xa2, 0x0d, 0x21, 0x12, 0x00, 0x39, 0xf9,
+  0xc1, 0x21, 0x3f, 0x11, 0xed, 0x42, 0xe1, 0xe5, 0xc5, 0x28, 0x9c, 0x3e, 0x21, 0xc3, 0xc1, 0x07,
+  0xf5, 0xcd, 0xc8, 0x11, 0xf5, 0xcd, 0xc8, 0x11, 0xcd, 0x39, 0x16, 0xfd, 0x2b, 0xfd, 0xe5, 0xcd,
+  0xb9, 0x0a, 0xc1, 0x28, 0x39, 0x3e, 0x1e, 0x38, 0xe4, 0xc5, 0x2a, 0xdc, 0x37, 0x3e, 0xdd, 0xcd,
+  0xf2, 0x17, 0x38, 0x21, 0xe5, 0xfd, 0xe1, 0xfd, 0x23, 0xcd, 0x7f, 0x2f, 0xcd, 0xb9, 0x0a, 0xfd,
+  0xe5, 0xd1, 0x38, 0x09, 0xc4, 0x5b, 0x0b, 0xfd, 0xe5, 0xd1, 0x73, 0x23, 0x72, 0xeb, 0x3e, 0x0d,
+  0x47, 0xed, 0xb1, 0x18, 0xd8, 0xfd, 0xe1, 0xcd, 0xb9, 0x0a, 0x3e, 0x1d, 0x20, 0xaf, 0x5e, 0x23,
+  0x56, 0x21, 0x02, 0x00, 0x39, 0xcd, 0x7f, 0x2f, 0xd5, 0xfd, 0xe3, 0xd1, 0xfe, 0x28, 0x20, 0x1b,
+  0xcd, 0x7f, 0x2f, 0xfe, 0x28, 0xc2, 0x75, 0x0e, 0xfd, 0xe5, 0xc1, 0xd9, 0xcd, 0xca, 0x16, 0xcd,
+  0x45, 0x2f, 0xd9, 0xc5, 0xfd, 0xe1, 0xe5, 0xcd, 0x55, 0x16, 0xe1, 0x73, 0x23, 0x72, 0xc3, 0xa2,
+  0x0d, 0xc1, 0xc5, 0x21, 0xc4, 0x11, 0xb7, 0xed, 0x42, 0x28, 0x13, 0x21, 0xc8, 0x11, 0xb7, 0xed,
+  0x42, 0x28, 0x0b, 0x21, 0x1c, 0x17, 0xb7, 0xed, 0x42, 0x3e, 0x0c, 0xc2, 0xc1, 0x07, 0xfd, 0xe5,
+  0xc1, 0xd9, 0xfd, 0x2b, 0xcd, 0xca, 0x16, 0xd9, 0xc5, 0xfd, 0xe1, 0xcd, 0x1d, 0x0a, 0xc2, 0x75,
+  0x0e, 0xb7, 0x08, 0xcd, 0x00, 0x2d, 0x08, 0xf5, 0xf4, 0xda, 0x15, 0xf1, 0x59, 0xfc, 0x04, 0x16,
+  0xcd, 0x7f, 0x2f, 0xfe, 0x2c, 0xc2, 0xa2, 0x0d, 0xfd, 0x23, 0xcd, 0x7f, 0x2f, 0x18, 0xdc, 0xc1,
+  0x21, 0x1c, 0x17, 0xb7, 0xed, 0x42, 0x28, 0x10, 0x21, 0xc8, 0x11, 0xb7, 0xed, 0x42, 0xfd, 0xe1,
+  0xca, 0xa2, 0x0d, 0x3e, 0x0d, 0xc3, 0xc1, 0x07, 0xdd, 0xe1, 0xc1, 0x78, 0xb7, 0xfa, 0xb9, 0x12,
+  0xe1, 0xd9, 0xe1, 0xd9, 0xcd, 0xda, 0x15, 0x18, 0xd6, 0x21, 0x00, 0x00, 0x39, 0x59, 0xcd, 0x04,
+  0x16, 0xf9, 0x18, 0xcb, 0xcd, 0x33, 0x18, 0xcd, 0x7f, 0x2f, 0xfe, 0x2c, 0xc2, 0xa2, 0x0d, 0xfd,
+  0x23, 0xcd, 0x7f, 0x2f, 0xd5, 0xcd, 0x6e, 0x0e, 0xd1, 0xf5, 0xe5, 0xb7, 0xfa, 0xff, 0x12, 0xcd,
+  0x98, 0x32, 0xfe, 0xff, 0xca, 0x9a, 0x33, 0xcd, 0xb3, 0x33, 0xcd, 0xb8, 0x33, 0xcd, 0xbd, 0x33,
+  0xcd, 0xc4, 0x33, 0x0e, 0x00, 0xdd, 0xe1, 0xf1, 0xd5, 0xcd, 0xda, 0x15, 0xd1, 0x18, 0xc8, 0xcd,
+  0x98, 0x32, 0xcd, 0x98, 0x32, 0xf5, 0x6f, 0x26, 0x35, 0x2c, 0x2d, 0xca, 0x8c, 0x33, 0x2d, 0xcd,
+  0x98, 0x32, 0x77, 0x18, 0xf4, 0x3e, 0x3e, 0xc3, 0xee, 0xff, 0xfe, 0x23, 0x28, 0xa6, 0x0e, 0x00,
+  0xfe, 0x86, 0x20, 0x04, 0xfd, 0x23, 0x0e, 0x80, 0x21, 0x00, 0x36, 0x36, 0x0d, 0xcd, 0x3c, 0x17,
+  0xca, 0xa2, 0x0d, 0xfd, 0x23, 0xfe, 0x2c, 0x28, 0x4d, 0xfe, 0x3b, 0x28, 0x49, 0xe5, 0xfe, 0x22,
+  0x20, 0x0a, 0xc5, 0xcd, 0x2d, 0x20, 0xc1, 0xcd, 0xaa, 0x17, 0x18, 0x05, 0xcd, 0x55, 0x17, 0x20,
+  0x05, 0xe1, 0xcb, 0xc1, 0x18, 0xd2, 0xfd, 0x2b, 0xc5, 0xcd, 0x6e, 0x0e, 0xc1, 0xe1, 0xf5, 0x7e,
+  0x23, 0xfe, 0x0d, 0xcc, 0x8a, 0x13, 0xcb, 0x79, 0xf5, 0xc4, 0xc8, 0x17, 0xf1, 0xcc, 0xb7, 0x17,
+  0xf1, 0xc5, 0xe5, 0xb7, 0xfa, 0x81, 0x13, 0xf5, 0xcd, 0xeb, 0x21, 0xf1, 0xcd, 0xda, 0x15, 0x18,
+  0x03, 0xcd, 0x01, 0x16, 0xe1, 0xc1, 0xcb, 0x81, 0x18, 0xa3, 0xcb, 0x41, 0x20, 0x0a, 0x3e, 0x3f,
+  0xcd, 0x52, 0x09, 0x18, 0x03, 0xcd, 0x52, 0x09, 0x21, 0x00, 0x36, 0xc5, 0xe5, 0xdd, 0xe5, 0xcd,
+  0x99, 0x34, 0xdd, 0xe1, 0xe1, 0xc1, 0x47, 0xaf, 0x32, 0xfb, 0x37, 0xb8, 0xc8, 0x7e, 0xfe, 0x0d,
+  0xc8, 0x23, 0x10, 0xf9, 0xc9, 0xfe, 0x23, 0xca, 0xc4, 0x12, 0x2a, 0xf0, 0x37, 0x7e, 0x23, 0xfe,
+  0x0d, 0xcc, 0xfa, 0x13, 0xe5, 0xcd, 0x6e, 0x0e, 0xe1, 0xb7, 0xfa, 0xe0, 0x13, 0xe5, 0xfd, 0xe3,
+  0xf5, 0xdd, 0xe5, 0xcd, 0x3f, 0x1f, 0xdd, 0xe1, 0xf1, 0xcd, 0xda, 0x15, 0xfd, 0xe3, 0x18, 0x07,
+  0xcd, 0xb7, 0x17, 0xe5, 0xcd, 0x01, 0x16, 0xe1, 0x22, 0xf0, 0x37, 0xcd, 0x7f, 0x2f, 0xfe, 0x2c,
+  0xc2, 0xa2, 0x0d, 0xfd, 0x23, 0xcd, 0x7f, 0x2f, 0x18, 0xc3, 0x3e, 0xdc, 0xcd, 0xf2, 0x17, 0x23,
+  0xd0, 0x3e, 0x2a, 0xc3, 0xc1, 0x07, 0xcd, 0x46, 0x1f, 0xcd, 0xf6, 0x2c, 0x28, 0x15, 0xfd, 0x7e,
+  0x00, 0xfe, 0x8c, 0xc2, 0xa2, 0x0d, 0xfd, 0x23, 0xcd, 0x7f, 0x2f, 0xfe, 0x8d, 0xc2, 0xa2, 0x0d,
+  0xc3, 0x9e, 0x10, 0xfd, 0x7e, 0x00, 0xfe, 0x0d, 0xfd, 0x23, 0xca, 0x9f, 0x0d, 0xfe, 0x8b, 0x20,
+  0xf2, 0x18, 0xe5, 0xcd, 0xea, 0x2f, 0xaf, 0x32, 0xfb, 0x37, 0xc3, 0xa2, 0x0d, 0xcd, 0xe6, 0x0c,
+  0x0d, 0x0a, 0xfa, 0x00, 0xcd, 0xa2, 0x09, 0xcd, 0xcc, 0x09, 0xcd, 0x4b, 0x09, 0xc3, 0x98, 0x01,
+  0xcd, 0xa3, 0x31, 0xc3, 0xa2, 0x0d, 0xcd, 0xaa, 0x08, 0x2a, 0xdc, 0x37, 0x18, 0x13, 0x2a, 0xdc,
+  0x37, 0xcd, 0x3c, 0x17, 0x28, 0x0b, 0xcd, 0x5d, 0x1f, 0xd9, 0xcd, 0x89, 0x09, 0x3e, 0x29, 0x20,
+  0x92, 0x3e, 0xdc, 0xcd, 0xf2, 0x17, 0x22, 0xf0, 0x37, 0xc3, 0xa2, 0x0d, 0xcd, 0x29, 0x18, 0xcd,
+  0x48, 0x17, 0x7b, 0xf5, 0xcd, 0x46, 0x1f, 0xe5, 0xd9, 0xd1, 0xf1, 0xc3, 0x67, 0x32, 0xc3, 0xa2,
+  0x0d, 0xcd, 0x48, 0x17, 0xcd, 0x46, 0x1f, 0xd9, 0x2e, 0x00, 0x22, 0xdc, 0x37, 0xc3, 0xa2, 0x0d,
+  0xc3, 0x0e, 0x33, 0xcd, 0x46, 0x1f, 0xe5, 0xd9, 0xd1, 0xcd, 0xcd, 0x2f, 0xc3, 0xa2, 0x0d, 0xcd,
+  0x48, 0x17, 0xcd, 0x46, 0x1f, 0xcd, 0xaa, 0x08, 0xd9, 0x22, 0xe0, 0x37, 0x22, 0xe2, 0x37, 0xc3,
+  0xa2, 0x0d, 0xcd, 0x48, 0x17, 0xcd, 0x46, 0x1f, 0xd9, 0xed, 0x5b, 0xe2, 0x37, 0x14, 0xaf, 0xed,
+  0x52, 0x19, 0xda, 0xc1, 0x07, 0xed, 0x5b, 0xe4, 0x37, 0x22, 0xe4, 0x37, 0xeb, 0xed, 0x72, 0xc2,
+  0xa2, 0x0d, 0xeb, 0xf9, 0xc3, 0xa2, 0x0d, 0xcd, 0x46, 0x1f, 0xd9, 0x7d, 0x32, 0xfc, 0x37, 0xc3,
+  0xa2, 0x0d, 0xfd, 0x23, 0x21, 0x00, 0x00, 0xfe, 0xee, 0x28, 0x0a, 0xfe, 0x87, 0x28, 0x07, 0xfd,
+  0x2b, 0xcd, 0x46, 0x1f, 0xd9, 0x2b, 0x22, 0xe8, 0x37, 0xc3, 0xa2, 0x0d, 0xcd, 0x46, 0x1f, 0xd9,
+  0x7d, 0xcd, 0xee, 0xff, 0xfd, 0x7e, 0x00, 0xfe, 0x2c, 0x28, 0x08, 0xfe, 0x3b, 0x20, 0x06, 0x7c,
+  0xcd, 0xee, 0xff, 0xfd, 0x23, 0xcd, 0x3c, 0x17, 0x20, 0xe2, 0xc3, 0xa2, 0x0d, 0xcd, 0x29, 0x18,
+  0xcd, 0xd9, 0x31, 0xc3, 0xa2, 0x0d, 0xcd, 0x29, 0x18, 0xd5, 0xcd, 0x39, 0x2f, 0xcd, 0x46, 0x1f,
+  0xd9, 0x7d, 0xd1, 0xcd, 0x7b, 0x32, 0xc3, 0xa2, 0x0d, 0xcd, 0x46, 0x1f, 0xd9, 0xe5, 0x06, 0x00,
+  0x11, 0x00, 0x36, 0xcd, 0x7f, 0x2f, 0xfe, 0x2c, 0x20, 0x17, 0xfd, 0x23, 0x04, 0xcd, 0x7f, 0x2f,
+  0xc5, 0xd5, 0xcd, 0x6e, 0x0e, 0xd1, 0xc1, 0x13, 0x12, 0x13, 0xeb, 0x73, 0x23, 0x72, 0xeb, 0x18,
+  0xe2, 0x78, 0x32, 0x00, 0x36, 0xe1, 0xcd, 0x80, 0x15, 0xc3, 0xa2, 0x0d, 0xcd, 0x5d, 0x1f, 0xd9,
+  0xe5, 0xfd, 0xe3, 0x24, 0x21, 0xaf, 0x15, 0xe5, 0xdd, 0x21, 0x00, 0x37, 0xcc, 0x3b, 0x31, 0xdd,
+  0x4e, 0x18, 0xc5, 0xf1, 0xdd, 0x7e, 0x04, 0xdd, 0x46, 0x08, 0xdd, 0x4e, 0x0c, 0xdd, 0x56, 0x10,
+  0xdd, 0x5e, 0x14, 0xdd, 0x66, 0x20, 0xdd, 0x6e, 0x30, 0xdd, 0x21, 0x00, 0x36, 0xfd, 0xe9, 0xfd,
+  0xe1, 0xaf, 0x4f, 0xc9, 0xcd, 0x46, 0x1f, 0xd9, 0xe5, 0xcd, 0x39, 0x2f, 0xcd, 0x46, 0x1f, 0xd9,
+  0xc1, 0xed, 0x69, 0xc3, 0xa2, 0x0d, 0xcd, 0x1d, 0x0a, 0xd8, 0xc4, 0x0e, 0x0a, 0xb7, 0xf8, 0xf5,
+  0xcd, 0x48, 0x17, 0xe5, 0xcd, 0x3f, 0x1f, 0xdd, 0xe1, 0xf1, 0xcb, 0x47, 0x28, 0x13, 0xbf, 0xdd,
+  0x71, 0x04, 0xd9, 0xdd, 0x75, 0x00, 0xdd, 0x74, 0x01, 0xd9, 0xdd, 0x75, 0x02, 0xdd, 0x74, 0x03,
+  0xc9, 0xf5, 0xcd, 0xf5, 0x2b, 0xf1, 0xfe, 0x04, 0x28, 0xe8, 0xbf, 0xd9, 0xdd, 0x75, 0x00, 0xd9,
+  0xc9, 0x21, 0x00, 0x35, 0x1f, 0x30, 0x3f, 0xe5, 0xcd, 0xf7, 0x1f, 0x7b, 0xd9, 0x6f, 0x7c, 0xd9,
+  0xbb, 0x30, 0x14, 0xd9, 0x65, 0xd9, 0xe5, 0x06, 0x00, 0x4f, 0x09, 0xed, 0x4b, 0xe2, 0x37, 0xed,
+  0x42, 0xe1, 0x37, 0x28, 0x02, 0x60, 0x69, 0xcd, 0xe2, 0x15, 0x06, 0x00, 0x4b, 0xeb, 0xe1, 0x0d,
+  0x0c, 0xc8, 0xed, 0xb0, 0xd0, 0xed, 0x53, 0xe2, 0x37, 0xe5, 0x2a, 0xe2, 0x37, 0x24, 0xed, 0x72,
+  0xe1, 0xd8, 0xaf, 0xc3, 0xc1, 0x07, 0x4b, 0xdd, 0xe5, 0xd1, 0xaf, 0x47, 0xb9, 0x28, 0x02, 0xed,
+  0xb0, 0x3e, 0x0d, 0x12, 0xc9, 0x3e, 0xff, 0xf5, 0xfd, 0x23, 0x13, 0xd5, 0xcd, 0x7f, 0x2f, 0xcd,
+  0x1d, 0x0a, 0x38, 0x38, 0xc4, 0x0e, 0x0a, 0xd1, 0xe5, 0xb7, 0xf5, 0xd5, 0xfd, 0xe3, 0xfa, 0x83,
+  0x16, 0xcd, 0x3f, 0x1f, 0xfd, 0xe3, 0xd1, 0xf1, 0xd9, 0xe5, 0xd9, 0xe5, 0x47, 0xc5, 0xcd, 0x39,
+  0x16, 0x18, 0x0d, 0xcd, 0x4f, 0x1f, 0xfd, 0xe3, 0xd9, 0xd1, 0xd9, 0xf1, 0xcd, 0xaa, 0x2d, 0xd9,
+  0xcd, 0x7f, 0x2f, 0xfe, 0x2c, 0x20, 0x0a, 0x1a, 0xfe, 0x2c, 0x28, 0xbc, 0x3e, 0x1f, 0xc3, 0xc1,
+  0x07, 0xcd, 0x45, 0x2f, 0x1a, 0xfe, 0x29, 0x20, 0xf3, 0x13, 0xd9, 0xc1, 0x78, 0x3c, 0xd9, 0xc8,
+  0xd9, 0x3d, 0xfa, 0xc0, 0x16, 0xe1, 0xd9, 0xe1, 0xd9, 0xdd, 0xe1, 0xcd, 0xda, 0x15, 0x18, 0xeb,
+  0xcd, 0xc9, 0x2d, 0xdd, 0xe1, 0xcd, 0x01, 0x16, 0x18, 0xe1, 0xd1, 0xfd, 0x23, 0xcd, 0x7f, 0x2f,
+  0xd5, 0xd9, 0xc5, 0xd5, 0xe5, 0xd9, 0xcd, 0x6e, 0x0e, 0xd9, 0xe1, 0xd1, 0xc1, 0xd9, 0xd1, 0xb7,
+  0xfa, 0xf1, 0x16, 0xd9, 0xe5, 0xd9, 0x47, 0xcd, 0xeb, 0x1f, 0xd9, 0xe3, 0xd9, 0xe5, 0xc5, 0x18,
+  0x26, 0xf5, 0xd5, 0xd9, 0xe5, 0xd9, 0xcd, 0xb8, 0x20, 0xd9, 0xe1, 0xd9, 0x4b, 0xd1, 0xcd, 0x39,
+  0x16, 0xf1, 0x21, 0x00, 0x00, 0x45, 0xed, 0x42, 0x39, 0xf9, 0x47, 0xc5, 0x28, 0x09, 0xd5, 0x11,
+  0x00, 0x35, 0xeb, 0x45, 0xed, 0xb0, 0xd1, 0xdd, 0xe5, 0xcd, 0x1c, 0x17, 0xcd, 0x39, 0x16, 0xcd,
+  0x7f, 0x2f, 0xfe, 0x2c, 0x28, 0xa5, 0xeb, 0xe9, 0xfd, 0x7e, 0x00, 0xfe, 0x20, 0xc8, 0xfe, 0x2c,
+  0xc8, 0xfe, 0x29, 0xc8, 0xfe, 0x3b, 0xc8, 0xfe, 0x5c, 0xc8, 0x18, 0x06, 0xcd, 0x7f, 0x2f, 0xfe,
+  0x8b, 0xd0, 0xfe, 0x3a, 0xd0, 0xfe, 0x0d, 0xc9, 0xcd, 0x7f, 0x2f, 0xfd, 0x23, 0xfe, 0x3d, 0xc8,
+  0x3e, 0x04, 0xc3, 0xc1, 0x07, 0xfe, 0x8a, 0x28, 0x0c, 0xfe, 0x89, 0x28, 0x38, 0xfe, 0x27, 0xc0,
+  0xcd, 0x4b, 0x09, 0xaf, 0xc9, 0xc5, 0xcd, 0x46, 0x1f, 0xd9, 0xc1, 0xfd, 0x7e, 0x00, 0xfe, 0x2c,
+  0x28, 0x11, 0xcd, 0x45, 0x2f, 0x7d, 0x21, 0xfb, 0x37, 0xbe, 0xc8, 0xf5, 0xdc, 0x4b, 0x09, 0xf1,
+  0x96, 0x18, 0x19, 0xfd, 0x23, 0xc5, 0xe5, 0xcd, 0x46, 0x1f, 0xd9, 0xd1, 0xc1, 0xcd, 0x45, 0x2f,
+  0xcd, 0xfa, 0x2f, 0xaf, 0xc9, 0xc5, 0xcd, 0x5d, 0x1f, 0xd9, 0x7d, 0xc1, 0xb7, 0xc8, 0xc5, 0x47,
+  0x3e, 0x20, 0xcd, 0x52, 0x09, 0x10, 0xf9, 0xc1, 0xaf, 0xc9, 0x21, 0x00, 0x35, 0x1c, 0x1d, 0xc8,
+  0x7e, 0x23, 0xcd, 0x52, 0x09, 0x18, 0xf7, 0xf5, 0xc5, 0xe5, 0xfd, 0xe3, 0xcd, 0xd4, 0x17, 0xcd,
+  0x7f, 0x2f, 0xfd, 0xe3, 0xe1, 0xc1, 0xf1, 0xc9, 0x11, 0x00, 0x35, 0x7e, 0x12, 0xfe, 0x0d, 0xc8,
+  0x23, 0x1c, 0x18, 0xf7, 0xcd, 0x7f, 0x2f, 0xfe, 0x22, 0xfd, 0x23, 0xca, 0x2d, 0x20, 0xfd, 0x2b,
+  0x11, 0x00, 0x35, 0xfd, 0x7e, 0x00, 0x12, 0xfe, 0x2c, 0xc8, 0xfe, 0x0d, 0xc8, 0xfd, 0x23, 0x1c,
+  0x18, 0xf1, 0x06, 0x00, 0x4e, 0x0c, 0x0d, 0x28, 0x0c, 0x23, 0x23, 0x23, 0xbe, 0xc8, 0x0d, 0x0d,
+  0x0d, 0x09, 0xc3, 0xf4, 0x17, 0x2b, 0x37, 0xc9, 0xfe, 0x05, 0x62, 0x6b, 0x29, 0xd8, 0x29, 0xd8,
+  0xeb, 0xc0, 0x19, 0xeb, 0xc9, 0xeb, 0x21, 0x00, 0x00, 0x3e, 0x10, 0x29, 0xd8, 0xcb, 0x23, 0xcb,
+  0x12, 0x30, 0x02, 0x09, 0xd8, 0x3d, 0x20, 0xf3, 0xc9, 0xcd, 0x7f, 0x2f, 0xfe, 0x23, 0x3e, 0x2d,
+  0xc2, 0xc1, 0x07, 0xfd, 0x23, 0xcd, 0x5d, 0x1f, 0xd9, 0xeb, 0xc9, 0xcd, 0xb1, 0x1b, 0xfd, 0x23,
+  0xfe, 0x3a, 0x28, 0xf7, 0xfe, 0x5d, 0xc8, 0xfe, 0x0d, 0xc8, 0xfd, 0x2b, 0xdd, 0x2a, 0x40, 0x37,
+  0x21, 0xfe, 0x37, 0xcb, 0x76, 0x28, 0x04, 0xdd, 0x2a, 0x3c, 0x37, 0xdd, 0xe5, 0xfd, 0xe5, 0xcd,
+  0xef, 0x18, 0xc1, 0xd1, 0xd8, 0xcd, 0xb1, 0x1b, 0x37, 0xc0, 0xfd, 0x2b, 0xfd, 0x23, 0xfd, 0x7e,
+  0x00, 0xcd, 0x42, 0x17, 0x20, 0xf6, 0x3a, 0xfe, 0x37, 0xdd, 0xe5, 0xe1, 0xb7, 0xed, 0x52, 0xeb,
+  0xe5, 0x2a, 0x40, 0x37, 0xe5, 0x19, 0x22, 0x40, 0x37, 0xcb, 0x77, 0x28, 0x07, 0x2a, 0x3c, 0x37,
+  0x19, 0x22, 0x3c, 0x37, 0xe1, 0xdd, 0xe1, 0xcb, 0x67, 0x28, 0xa0, 0x7c, 0xcd, 0xdb, 0x18, 0x7d,
+  0xcd, 0xd4, 0x18, 0xaf, 0xbb, 0x28, 0x15, 0x3a, 0xfb, 0x37, 0xfe, 0x11, 0x3e, 0x05, 0xd4, 0x76,
+  0x17, 0xdd, 0x7e, 0x00, 0xcd, 0xd4, 0x18, 0xdd, 0x23, 0x1d, 0x20, 0xeb, 0x3e, 0x12, 0xcd, 0x76,
+  0x17, 0xfd, 0xe5, 0xe1, 0xed, 0x42, 0x0a, 0xcd, 0x6b, 0x09, 0x03, 0x2d, 0x20, 0xf8, 0xcd, 0x4b,
+  0x09, 0xc3, 0x3b, 0x18, 0xcd, 0xdb, 0x18, 0x3e, 0x20, 0x18, 0x11, 0xf5, 0x0f, 0x0f, 0x0f, 0x0f,
+  0xcd, 0xe4, 0x18, 0xf1, 0xe6, 0x0f, 0xc6, 0x90, 0x27, 0xce, 0x40, 0x27, 0xc3, 0x6b, 0x09, 0xfe,
+  0x2e, 0x20, 0x16, 0xfd, 0x23, 0xdd, 0xe5, 0xcd, 0x6e, 0x0e, 0xf5, 0xcd, 0x00, 0x2d, 0xd9, 0x2a,
+  0x40, 0x37, 0xd9, 0xf1, 0xcd, 0xda, 0x15, 0xdd, 0xe1, 0xcd, 0xb1, 0x1b, 0xc8, 0xfe, 0xd6, 0x0e,
+  0xc4, 0xfd, 0x23, 0xca, 0x00, 0x1a, 0xfd, 0x2b, 0x21, 0xc3, 0x1b, 0xcd, 0x68, 0x1b, 0xd8, 0x48,
+  0x16, 0x00, 0xd6, 0x27, 0x30, 0x07, 0xfe, 0xe8, 0xd4, 0xce, 0x1a, 0x18, 0x68, 0xd6, 0x0a, 0x30,
+  0x0f, 0xfe, 0xf9, 0xdc, 0x58, 0x1b, 0xd8, 0xcd, 0x2d, 0x1b, 0xd8, 0xcd, 0xd2, 0x1a, 0x18, 0x55,
+  0xd6, 0x03, 0x30, 0x06, 0xcd, 0x4c, 0x1b, 0xd8, 0x18, 0x4b, 0xd6, 0x0a, 0x30, 0x32, 0xfe, 0xfd,
+  0x06, 0x07, 0xd4, 0xe0, 0x1a, 0x78, 0xfe, 0x07, 0x20, 0x10, 0xcd, 0x2d, 0x1b, 0x79, 0x30, 0x28,
+  0xee, 0x46, 0xcd, 0xd4, 0x1a, 0xcd, 0x10, 0x1b, 0x18, 0x78, 0xe6, 0x3f, 0xfe, 0x0c, 0x37, 0xc0,
+  0x79, 0xfe, 0x80, 0x0e, 0x09, 0x28, 0xcd, 0xee, 0x1c, 0x0f, 0x4f, 0xcd, 0xce, 0x1a, 0x18, 0xc4,
+  0xd6, 0x02, 0x30, 0x14, 0xcd, 0x33, 0x1b, 0x79, 0xd2, 0xd4, 0x1a, 0xee, 0x64, 0x07, 0x07, 0x07,
+  0x4f, 0xcd, 0x50, 0x1b, 0xd8, 0x79, 0x18, 0x7f, 0xd6, 0x02, 0x30, 0x21, 0xfe, 0xff, 0xcc, 0xc3,
+  0x1a, 0x08, 0xcd, 0x33, 0x1b, 0xd8, 0x08, 0xdc, 0xc3, 0x1a, 0x24, 0x28, 0xe8, 0x78, 0xfe, 0x07,
+  0x37, 0xc0, 0x79, 0xee, 0x03, 0x07, 0x07, 0x07, 0xcd, 0x00, 0x1b, 0x18, 0x25, 0xd6, 0x02, 0x30,
+  0x24, 0xfe, 0xff, 0xc4, 0x39, 0x1b, 0x79, 0x30, 0x02, 0x3e, 0x18, 0xcd, 0x00, 0x1b, 0xcd, 0x10,
+  0x1b, 0xed, 0x5b, 0x40, 0x37, 0x13, 0x37, 0xed, 0x52, 0x7d, 0x17, 0x9f, 0xbc, 0x3e, 0x01, 0xc2,
+  0xc1, 0x07, 0x7d, 0x18, 0x32, 0x47, 0x20, 0x16, 0xcd, 0x39, 0x1b, 0x79, 0x30, 0x0b, 0x78, 0xe6,
+  0x3f, 0xfe, 0x06, 0x3e, 0xe9, 0x28, 0x20, 0x3e, 0xc3, 0xcd, 0x00, 0x1b, 0x18, 0x05, 0x10, 0x0c,
+  0xcd, 0x1b, 0x1a, 0xcd, 0x10, 0x1b, 0xcd, 0xe2, 0x19, 0x7c, 0x18, 0x0b, 0x10, 0x0b, 0xcd, 0x10,
+  0x1b, 0xa1, 0xb4, 0x20, 0xc8, 0x7d, 0xb1, 0x18, 0x78, 0x10, 0x0a, 0xcd, 0x39, 0x1b, 0x79, 0x30,
+  0x70, 0xf6, 0x09, 0x18, 0x6c, 0x10, 0x6c, 0xcd, 0x65, 0x1b, 0x30, 0x5f, 0xcd, 0x33, 0x1b, 0x08,
+  0xcd, 0xb1, 0x1b, 0xfe, 0x28, 0x28, 0x1d, 0x08, 0xd2, 0x5a, 0x19, 0x0e, 0x01, 0xcd, 0x50, 0x1b,
+  0xd8, 0x3e, 0x0e, 0xb8, 0x47, 0xcc, 0x4c, 0x1b, 0x78, 0xe6, 0x3f, 0xfe, 0x0c, 0x79, 0x20, 0xa9,
+  0x3e, 0xf9, 0x18, 0x3d, 0x08, 0xc5, 0xd4, 0x2d, 0x1b, 0x79, 0xc1, 0x30, 0x77, 0x0e, 0x0a, 0xcd,
+  0x50, 0x1b, 0xcd, 0xaa, 0x1a, 0x30, 0x92, 0xcd, 0x10, 0x1b, 0x0e, 0x02, 0xcd, 0x4c, 0x1b, 0xcd,
+  0xaa, 0x1a, 0xd8, 0xcd, 0x00, 0x1b, 0x18, 0x8e, 0x05, 0xca, 0x65, 0x19, 0x10, 0x85, 0xcd, 0x10,
+  0x1b, 0x21, 0xfe, 0x37, 0x4f, 0xed, 0x6f, 0x79, 0xed, 0x67, 0xc9, 0xfe, 0x04, 0xdc, 0xce, 0x1a,
+  0x78, 0x18, 0x6d, 0x10, 0xe3, 0xdd, 0xe5, 0xcd, 0x4f, 0x1f, 0xdd, 0xe1, 0x21, 0x00, 0x35, 0xaf,
+  0xbb, 0xc8, 0x7e, 0x23, 0xcd, 0x00, 0x1b, 0x1d, 0x18, 0xf5, 0x78, 0x38, 0x0e, 0x78, 0xe6, 0x3f,
+  0xfe, 0x0c, 0x79, 0xc8, 0xcd, 0xce, 0x1a, 0x79, 0xf6, 0x43, 0xc9, 0xfe, 0x07, 0x37, 0xc0, 0x79,
+  0xf6, 0x30, 0xc9, 0xc5, 0xcd, 0xe0, 0x1a, 0xcb, 0x68, 0xc1, 0x28, 0x44, 0x26, 0xff, 0x3e, 0xed,
+  0x18, 0x2e, 0x3e, 0xcb, 0xfe, 0x76, 0x37, 0xc8, 0xcd, 0x00, 0x1b, 0x14, 0xf0, 0x7b, 0x18, 0x20,
+  0xe5, 0x21, 0x0a, 0x1d, 0xcd, 0x68, 0x1b, 0xe1, 0xd8, 0xcb, 0x78, 0xc8, 0xcb, 0x58, 0xe5, 0xcc,
+  0x07, 0x1b, 0x5d, 0xe1, 0x3e, 0xdd, 0xcb, 0x70, 0x28, 0x02, 0x3e, 0xfd, 0xb7, 0x14, 0x57, 0xf8,
+  0xdd, 0x77, 0x00, 0xdd, 0x23, 0xb7, 0xc9, 0xfd, 0x7e, 0x00, 0xfe, 0x29, 0x21, 0x00, 0x00, 0xc8,
+  0xcd, 0xb1, 0x1b, 0xc5, 0xd5, 0xdd, 0xe5, 0xcd, 0x46, 0x1f, 0xdd, 0xe1, 0xd9, 0xd1, 0xc1, 0x7d,
+  0xb7, 0xc9, 0xcd, 0xe0, 0x1a, 0xd8, 0x78, 0xe6, 0x3f, 0xfe, 0x08, 0x3f, 0xc9, 0xcd, 0x22, 0x1b,
+  0xd8, 0x18, 0x2f, 0xcd, 0x22, 0x1b, 0xd8, 0x18, 0x26, 0xcd, 0xe0, 0x1a, 0xd8, 0x78, 0xe6, 0x1f,
+  0xd6, 0x10, 0x30, 0x1b, 0xfe, 0xf1, 0x37, 0xc0, 0x3e, 0x03, 0x18, 0x13, 0xcd, 0xe0, 0x1a, 0xd8,
+  0x78, 0xe6, 0x0f, 0xd6, 0x08, 0xd8, 0x18, 0x07, 0xcd, 0x10, 0x1b, 0xfe, 0x08, 0x3f, 0xd8, 0x07,
+  0x07, 0x07, 0xb1, 0x4f, 0xc9, 0x21, 0x4f, 0x1d, 0xcd, 0xb1, 0x1b, 0x06, 0x00, 0x37, 0xc8, 0xfe,
+  0xdd, 0x28, 0x04, 0xfe, 0x85, 0x3f, 0xd8, 0x7e, 0xb7, 0x28, 0xf0, 0xfd, 0xae, 0x00, 0xe6, 0x5f,
+  0x28, 0x09, 0xcb, 0x7e, 0x23, 0x28, 0xfb, 0x23, 0x04, 0x18, 0xec, 0xfd, 0xe5, 0xcb, 0x7e, 0xfd,
+  0x23, 0x23, 0x20, 0x10, 0xbe, 0xcc, 0xb0, 0x1b, 0x7e, 0xfd, 0xae, 0x00, 0xe6, 0x5f, 0x28, 0xed,
+  0xfd, 0xe1, 0x18, 0xde, 0xcd, 0x28, 0x17, 0xc4, 0xbd, 0x1b, 0x20, 0xf4, 0x78, 0x46, 0xe1, 0xc9,
+  0x23, 0xcd, 0x28, 0x17, 0xc0, 0xcd, 0x34, 0x17, 0xc8, 0xfd, 0x23, 0x18, 0xf4, 0xfe, 0x2b, 0xc8,
+  0xfe, 0x2d, 0xc9, 0x4e, 0x4f, 0xd0, 0x00, 0x52, 0x4c, 0x43, 0xc1, 0x07, 0x45, 0x58, 0x00, 0x41,
+  0x46, 0x00, 0x41, 0x46, 0xa7, 0x08, 0x52, 0x52, 0x43, 0xc1, 0x0f, 0x52, 0x4c, 0xc1, 0x17, 0x52,
+  0x52, 0xc1, 0x1f, 0x44, 0x41, 0xc1, 0x27, 0x43, 0x50, 0xcc, 0x2f, 0x53, 0x43, 0xc6, 0x37, 0x43,
+  0x43, 0xc6, 0x3f, 0x48, 0x41, 0x4c, 0xd4, 0x76, 0x45, 0x58, 0xd8, 0xd9, 0x45, 0x58, 0x00, 0x44,
+  0x45, 0x00, 0x48, 0xcc, 0xeb, 0x44, 0xc9, 0xf3, 0x45, 0xc9, 0xfb, 0x4e, 0x45, 0xc7, 0x44, 0x49,
+  0x4d, 0x00, 0xb0, 0x46, 0x52, 0x45, 0x54, 0xce, 0x45, 0x52, 0x45, 0x54, 0xc9, 0x4d, 0x49, 0x4d,
+  0x00, 0xb1, 0x56, 0x49, 0x4d, 0x00, 0xb2, 0x5e, 0x52, 0x52, 0xc4, 0x67, 0x52, 0x4c, 0xc4, 0x6f,
+  0x4c, 0x44, 0xc9, 0xa0, 0x43, 0x50, 0xc9, 0xa1, 0x49, 0x4e, 0xc9, 0xa2, 0x4f, 0x55, 0x54, 0xc9,
+  0xa3, 0x4c, 0x44, 0xc4, 0xa8, 0x43, 0x50, 0xc4, 0xa9, 0x49, 0x4e, 0xc4, 0xaa, 0x4f, 0x55, 0x54,
+  0xc4, 0xab, 0x4c, 0x44, 0x49, 0xd2, 0xb0, 0x43, 0x50, 0x49, 0xd2, 0xb1, 0x49, 0x4e, 0x49, 0xd2,
+  0xb2, 0x4f, 0x54, 0x49, 0xd2, 0xb3, 0x4c, 0x44, 0x44, 0xd2, 0xb8, 0x43, 0x50, 0x44, 0xd2, 0xb9,
+  0x49, 0x4e, 0x44, 0xd2, 0xba, 0x4f, 0x54, 0x44, 0xd2, 0xbb, 0x42, 0x49, 0xd4, 0x40, 0x52, 0x45,
+  0xd3, 0x80, 0x53, 0x45, 0xd4, 0xc0, 0x52, 0x4c, 0xc3, 0x00, 0x52, 0x52, 0xc3, 0x08, 0x52, 0xcc,
+  0x10, 0x52, 0xd2, 0x18, 0x53, 0x4c, 0xc1, 0x20, 0x53, 0x52, 0xc1, 0x28, 0x53, 0x52, 0xcc, 0x38,
+  0x50, 0x4f, 0xd0, 0xc1, 0x50, 0x55, 0x53, 0xc8, 0xc5, 0x45, 0x58, 0x00, 0x28, 0x53, 0xd0, 0xe3,
+  0x53, 0x55, 0xc2, 0x90, 0x41, 0x4e, 0xc4, 0xa0, 0x58, 0x4f, 0xd2, 0xa8, 0x4f, 0xd2, 0xb0, 0x43,
+  0xd0, 0xb8, 0x80, 0xa0, 0x84, 0xb0, 0x41, 0x44, 0xc4, 0x80, 0x41, 0x44, 0xc3, 0x88, 0x53, 0x42,
+  0xc3, 0x98, 0x49, 0x4e, 0xc3, 0x04, 0x44, 0x45, 0xc3, 0x05, 0x49, 0xce, 0x40, 0x4f, 0x55, 0xd4,
+  0x41, 0x4a, 0xd2, 0x20, 0x44, 0x4a, 0x4e, 0xda, 0x10, 0x4a, 0xd0, 0xc2, 0x43, 0x41, 0x4c, 0xcc,
+  0xc4, 0x52, 0x53, 0xd4, 0xc7, 0x52, 0x45, 0xd4, 0xc0, 0x4c, 0xc4, 0x40, 0x5d, 0xcd, 0x00, 0x5d,
+  0xc2, 0x00, 0x4f, 0x50, 0xd4, 0x00, 0x5d, 0xd7, 0x00, 0x00, 0xc2, 0x00, 0xc3, 0x01, 0xc4, 0x02,
+  0xc5, 0x03, 0xc8, 0x04, 0xcc, 0x05, 0x28, 0x48, 0xcc, 0x06, 0xc1, 0x07, 0x28, 0x49, 0xd8, 0x86,
+  0x28, 0x49, 0xd9, 0xc6, 0x42, 0xc3, 0x08, 0x44, 0xc5, 0x0a, 0x48, 0xcc, 0x0c, 0x49, 0xd8, 0x8c,
+  0x49, 0xd9, 0xcc, 0x41, 0xc6, 0x0e, 0x53, 0xd0, 0x0e, 0x4e, 0xda, 0x10, 0xda, 0x11, 0x4e, 0xc3,
+  0x12, 0x50, 0xcf, 0x14, 0x50, 0xc5, 0x15, 0xd0, 0x16, 0xcd, 0x17, 0x28, 0xc3, 0x20, 0x00, 0x49,
+  0x00, 0xc1, 0x47, 0x52, 0x00, 0xc1, 0x4f, 0x41, 0x00, 0xc9, 0x57, 0x41, 0x00, 0xd2, 0x5f, 0x28,
+  0x42, 0x43, 0x00, 0xc1, 0x02, 0x28, 0x44, 0x45, 0x00, 0xc1, 0x12, 0x41, 0x00, 0x28, 0x42, 0xc3,
+  0x0a, 0x41, 0x00, 0x28, 0x44, 0xc5, 0x1a, 0x00, 0xa1, 0x29, 0x5a, 0x32, 0x97, 0x21, 0x53, 0x21,
+  0x9f, 0x21, 0x49, 0x21, 0x4e, 0x21, 0xda, 0x20, 0xed, 0x24, 0x48, 0x30, 0x36, 0x21, 0xee, 0x24,
+  0x1d, 0x25, 0x12, 0x21, 0x2a, 0x23, 0x71, 0x21, 0xb4, 0x21, 0x67, 0x21, 0x6c, 0x21, 0x08, 0x22,
+  0xca, 0x23, 0x8f, 0x21, 0x00, 0x2d, 0xc0, 0x11, 0x20, 0x21, 0x1b, 0x21, 0x9f, 0x25, 0x9b, 0x22,
+  0x43, 0x21, 0x58, 0x24, 0xdb, 0x24, 0xe8, 0x20, 0x62, 0x32, 0x5e, 0x32, 0xa8, 0x21, 0x12, 0x30,
+  0xfb, 0x20, 0xbc, 0x21, 0x35, 0x22, 0xd5, 0x21, 0x38, 0x23, 0xb4, 0x22, 0x0a, 0x23, 0x58, 0x21,
+  0x96, 0x29, 0x7c, 0x15, 0xe8, 0x21, 0x01, 0x21, 0x1f, 0x26, 0x3c, 0x26, 0x2c, 0x26, 0x73, 0x26,
+  0x42, 0x26, 0x8e, 0x26, 0xf7, 0x29, 0xa2, 0x26, 0x06, 0x21, 0xd8, 0x26, 0x3b, 0x27, 0xea, 0x26,
+  0x0e, 0x27, 0xfc, 0x26, 0x70, 0x29, 0x82, 0x29, 0x60, 0x29, 0x3f, 0x29, 0x92, 0x29, 0x05, 0x28,
+  0x5e, 0x27, 0x4f, 0x29, 0x48, 0x27, 0xa3, 0x28, 0xbd, 0x27, 0xd5, 0x26, 0x38, 0x27, 0xe7, 0x26,
+  0x0b, 0x27, 0xf9, 0x26, 0x6b, 0x29, 0x7d, 0x29, 0x5b, 0x29, 0x3a, 0x29, 0x8d, 0x29, 0x53, 0x28,
+  0x68, 0x27, 0x4a, 0x29, 0x52, 0x27, 0x0b, 0x29, 0xc0, 0x27, 0x66, 0x29, 0x78, 0x29, 0x56, 0x29,
+  0x35, 0x29, 0x88, 0x29, 0x45, 0x29, 0xcd, 0x4b, 0x1e, 0xfe, 0x82, 0x28, 0x03, 0xfe, 0x84, 0xc0,
+  0xcd, 0x52, 0x2f, 0xcd, 0x4b, 0x1e, 0xcd, 0x60, 0x2f, 0x18, 0xee, 0xcd, 0x5c, 0x1e, 0xfe, 0x80,
+  0xc0, 0xcd, 0x52, 0x2f, 0xcd, 0x5c, 0x1e, 0xcd, 0x60, 0x2f, 0x18, 0xf2, 0xcd, 0xbb, 0x1e, 0xcd,
+  0x22, 0x2f, 0xc0, 0x47, 0xfd, 0x23, 0xcd, 0x7f, 0x2f, 0xcd, 0x22, 0x2f, 0x20, 0x08, 0xfd, 0x23,
+  0xb8, 0xca, 0x75, 0x0e, 0x80, 0x47, 0x78, 0x08, 0xfa, 0x8e, 0x1e, 0x08, 0xd6, 0x04, 0xfe, 0x3a,
+  0x20, 0x02, 0xc6, 0x02, 0xcd, 0x54, 0x2f, 0xcd, 0xbb, 0x1e, 0xcd, 0x60, 0x2f, 0xc9, 0x08, 0x3d,
+  0xe6, 0x07, 0xcd, 0xaa, 0x2d, 0xf5, 0xcd, 0xbb, 0x1e, 0x08, 0xf2, 0x6b, 0x1f, 0xf1, 0x4b, 0xd1,
+  0x21, 0x00, 0x00, 0x39, 0x43, 0xd5, 0x11, 0x00, 0x35, 0xeb, 0xcd, 0x8a, 0x2f, 0xd1, 0xeb, 0x26,
+  0x00, 0x39, 0xf9, 0xeb, 0xaf, 0x4f, 0x08, 0xfd, 0x7e, 0x00, 0xc9, 0xcd, 0x0a, 0x1f, 0xfe, 0x2d,
+  0x28, 0x08, 0xfe, 0x2b, 0xc0, 0x08, 0xfa, 0xd5, 0x1e, 0x08, 0xcd, 0x52, 0x2f, 0xcd, 0x0a, 0x1f,
+  0xcd, 0x60, 0x2f, 0x18, 0xe9, 0x08, 0xfd, 0x23, 0xcd, 0xaa, 0x2d, 0xcd, 0x0a, 0x1f, 0x08, 0xf2,
+  0x6b, 0x1f, 0x4b, 0xd1, 0xd5, 0x21, 0x00, 0x35, 0x54, 0x79, 0xb7, 0x28, 0x0f, 0x45, 0x6f, 0x83,
+  0x5f, 0x3e, 0x13, 0xda, 0xc1, 0x07, 0xd5, 0x1d, 0x2d, 0xed, 0xb8, 0xd1, 0xd9, 0xc1, 0xcd, 0xc9,
+  0x2d, 0xd9, 0xf6, 0x80, 0x08, 0xfd, 0x7e, 0x00, 0x18, 0xb4, 0xcd, 0x27, 0x1f, 0xfe, 0x2a, 0x28,
+  0x0b, 0xfe, 0x2f, 0x28, 0x07, 0xfe, 0x83, 0x28, 0x03, 0xfe, 0x81, 0xc0, 0xcd, 0x52, 0x2f, 0xcd,
+  0x27, 0x1f, 0xcd, 0x60, 0x2f, 0x18, 0xe6, 0xcd, 0xae, 0x1f, 0xb7, 0x08, 0xcd, 0x7f, 0x2f, 0xfe,
+  0x5e, 0xc0, 0xcd, 0x52, 0x2f, 0xcd, 0xae, 0x1f, 0xb7, 0x08, 0xcd, 0x60, 0x2f, 0x18, 0xed, 0xcd,
+  0x36, 0x1e, 0x08, 0xf0, 0x18, 0x25, 0xcd, 0x36, 0x1e, 0x08, 0xf2, 0xf5, 0x2b, 0x18, 0x1c, 0xcd,
+  0x36, 0x1e, 0x08, 0xf8, 0x18, 0x15, 0xcd, 0xae, 0x1f, 0xb7, 0xf0, 0x18, 0x0e, 0xcd, 0xae, 0x1f,
+  0xb7, 0xf2, 0xf5, 0x2b, 0x18, 0x05, 0xcd, 0xae, 0x1f, 0xb7, 0xf8, 0x3e, 0x06, 0xc3, 0xc1, 0x07,
+  0xcd, 0x36, 0x1e, 0xcd, 0x45, 0x2f, 0x08, 0xc9, 0xcd, 0x00, 0x2d, 0xcd, 0x0e, 0x2f, 0x38, 0x1b,
+  0xfd, 0x23, 0xe6, 0x0f, 0xcd, 0x75, 0x2d, 0xcd, 0x75, 0x2d, 0xcd, 0x75, 0x2d, 0xcd, 0x75, 0x2d,
+  0xd9, 0xb5, 0x6f, 0xd9, 0xcd, 0x0e, 0x2f, 0x30, 0xe7, 0xaf, 0xc9, 0x3e, 0x1c, 0xc3, 0xc1, 0x07,
+  0xcd, 0x56, 0x1f, 0x0d, 0x0c, 0xca, 0x04, 0x2c, 0x7c, 0xee, 0x80, 0x67, 0xaf, 0xc9, 0xcd, 0x39,
+  0x16, 0xcd, 0x7f, 0x2f, 0xfd, 0x23, 0xfe, 0x26, 0x28, 0xbe, 0xfe, 0x2d, 0x28, 0xe2, 0xfe, 0x2b,
+  0x28, 0x94, 0xfe, 0x28, 0x28, 0xaa, 0xfe, 0x22, 0x28, 0x63, 0xfe, 0xc6, 0xd2, 0x82, 0x32, 0xfe,
+  0x8d, 0xd2, 0x90, 0x2f, 0xfd, 0x2b, 0xfe, 0x3a, 0x30, 0x08, 0xfe, 0x30, 0x30, 0x74, 0xfe, 0x2e,
+  0x28, 0x70, 0xcd, 0x1d, 0x0a, 0x20, 0x2b, 0xb7, 0xfa, 0xb8, 0x20, 0xb7, 0x28, 0x18, 0x0e, 0x00,
+  0xcb, 0x47, 0x28, 0x03, 0xdd, 0x4e, 0x04, 0xd9, 0xdd, 0x6e, 0x00, 0xdd, 0x66, 0x01, 0xd9, 0xdd,
+  0x6e, 0x02, 0xdd, 0x66, 0x03, 0xc9, 0x21, 0x00, 0x00, 0xd9, 0x26, 0x00, 0xdd, 0x6e, 0x00, 0xd9,
+  0x4c, 0xc9, 0xda, 0x75, 0x0e, 0x3a, 0xfe, 0x37, 0xcb, 0x6f, 0x3e, 0x1a, 0x20, 0x23, 0xfd, 0x23,
+  0xcd, 0xe4, 0x0b, 0x30, 0xf9, 0xdd, 0x21, 0x40, 0x37, 0xaf, 0x4f, 0x18, 0xca, 0x11, 0x00, 0x35,
+  0xfd, 0x7e, 0x00, 0xfd, 0x23, 0xfe, 0x22, 0x28, 0x0b, 0x12, 0xfe, 0x20, 0x1c, 0x30, 0xf1, 0x3e,
+  0x09, 0xc3, 0xc1, 0x07, 0xfd, 0x7e, 0x00, 0xfe, 0x22, 0xfd, 0x23, 0x28, 0xec, 0xfd, 0x2b, 0x3e,
+  0x80, 0xc9, 0xcd, 0x00, 0x2d, 0x0e, 0x00, 0xcd, 0xb4, 0x2b, 0xfe, 0x2e, 0x06, 0x00, 0xcc, 0xb2,
+  0x2b, 0xfe, 0x45, 0x3e, 0x00, 0xcc, 0x7d, 0x2b, 0xcb, 0x7c, 0x20, 0x08, 0xb7, 0x20, 0x05, 0xb8,
+  0x20, 0x02, 0xb9, 0xc8, 0x90, 0x81, 0x0e, 0x9f, 0xcd, 0x97, 0x2c, 0xcb, 0xbc, 0xb7, 0xc8, 0xfa,
+  0x8a, 0x20, 0xcd, 0x21, 0x2e, 0xcd, 0x53, 0x28, 0xaf, 0xc9, 0xfe, 0xda, 0x38, 0x0a, 0xed, 0x44,
+  0xcd, 0x21, 0x2e, 0xcd, 0xc0, 0x27, 0xaf, 0xc9, 0xf5, 0x3e, 0x26, 0xcd, 0x21, 0x2e, 0xcd, 0xc0,
+  0x27, 0xf1, 0xc6, 0x26, 0x18, 0xe4, 0xdd, 0x46, 0x04, 0xd9, 0xdd, 0x5e, 0x00, 0xdd, 0x56, 0x01,
+  0xd9, 0xdd, 0x5e, 0x02, 0xdd, 0x56, 0x03, 0xc9, 0x11, 0x00, 0x35, 0x1f, 0x30, 0x10, 0xcd, 0xf7,
+  0x1f, 0xd9, 0x7d, 0xd9, 0xb7, 0x4f, 0x3e, 0x80, 0xc8, 0x06, 0x00, 0xed, 0xb0, 0xc9, 0x7e, 0x12,
+  0x23, 0xfe, 0x0d, 0x3e, 0x80, 0xc8, 0x1c, 0x20, 0xf5, 0xc9, 0xcd, 0x56, 0x1f, 0xcb, 0x7c, 0xc8,
+  0x0d, 0x0c, 0xca, 0x04, 0x2c, 0xcb, 0xbc, 0xc9, 0xcd, 0x5d, 0x1f, 0x7c, 0x2f, 0x67, 0x7d, 0x2f,
+  0x6f, 0xd9, 0x7c, 0x2f, 0x67, 0x7d, 0x2f, 0x6f, 0xd9, 0xaf, 0xc9, 0xcd, 0x07, 0x30, 0xeb, 0x18,
+  0x75, 0xcd, 0x07, 0x30, 0x18, 0x70, 0xcd, 0x29, 0x18, 0xcd, 0xb2, 0x32, 0xca, 0x96, 0x29, 0xc3,
+  0x00, 0x2d, 0xcd, 0x29, 0x18, 0xcd, 0x98, 0x32, 0x6f, 0x18, 0x59, 0xcd, 0x2c, 0x26, 0x18, 0x19,
+  0xcd, 0x7f, 0x2f, 0xfe, 0x28, 0x20, 0x0a, 0xcd, 0x5d, 0x1f, 0xd9, 0x44, 0x4d, 0xed, 0x68, 0x18,
+  0x43, 0xcd, 0x3c, 0x26, 0x18, 0x08, 0xcd, 0x66, 0x1f, 0xaf, 0xbb, 0xca, 0x96, 0x29, 0x2a, 0x00,
+  0x35, 0x18, 0x31, 0xcd, 0x66, 0x1f, 0xeb, 0x18, 0x2b, 0x2a, 0xe0, 0x37, 0x18, 0x28, 0x2a, 0xe4,
+  0x37, 0x18, 0x23, 0x2a, 0xdc, 0x37, 0x18, 0x1e, 0xfd, 0x7e, 0x00, 0xfd, 0x23, 0xfe, 0x50, 0xc2,
+  0x75, 0x0e, 0x2a, 0xde, 0x37, 0x18, 0x0f, 0x2a, 0xf2, 0x37, 0x18, 0x0a, 0x2a, 0xfd, 0x37, 0x18,
+  0x03, 0x2a, 0xfb, 0x37, 0x26, 0x00, 0xd9, 0xaf, 0x4f, 0x67, 0x6f, 0xc9, 0xf6, 0x37, 0xf5, 0xcd,
+  0x66, 0x1f, 0x3e, 0x0d, 0x12, 0xf1, 0x21, 0x00, 0x35, 0xcd, 0xce, 0xff, 0x6f, 0x18, 0xe5, 0xcd,
+  0x29, 0x18, 0xcd, 0xb4, 0x32, 0x18, 0x0b, 0xcd, 0x29, 0x18, 0xcd, 0xcd, 0x32, 0x18, 0x03, 0xc3,
+  0xe9, 0x32, 0xd5, 0xd9, 0xe1, 0xaf, 0x4f, 0xc9, 0x21, 0x0f, 0x49, 0xd9, 0x21, 0xa2, 0xda, 0xd9,
+  0x0e, 0x81, 0xaf, 0xc9, 0xcd, 0xc4, 0x21, 0xcd, 0x53, 0x28, 0xaf, 0xc9, 0xcd, 0xc4, 0x21, 0xcd,
+  0xc0, 0x27, 0xaf, 0xc9, 0xcd, 0x56, 0x1f, 0xcd, 0xb1, 0x2c, 0x11, 0x2e, 0x65, 0xd9, 0x11, 0xd3,
+  0xe0, 0xd9, 0x06, 0x85, 0xc9, 0xcd, 0x56, 0x1f, 0xcd, 0xf6, 0x2c, 0xb1, 0xc8, 0xcb, 0x7c, 0xc2,
+  0x96, 0x29, 0xcd, 0x00, 0x2d, 0xc3, 0xc7, 0x2c, 0xcd, 0x66, 0x1f, 0xaf, 0x12, 0xfd, 0xe5, 0xfd,
+  0x21, 0x00, 0x35, 0xcd, 0x7f, 0x2f, 0xcd, 0x2b, 0x2f, 0xf5, 0xcd, 0x52, 0x20, 0xf1, 0xfd, 0xe1,
+  0xfe, 0x2d, 0x3e, 0x00, 0xc0, 0xc3, 0xa3, 0x1f, 0xcd, 0x66, 0x1f, 0x3e, 0x0d, 0x12, 0xfd, 0xe5,
+  0x11, 0x00, 0x35, 0xfd, 0x21, 0x00, 0x35, 0x0e, 0x00, 0xcd, 0x10, 0x0c, 0x12, 0x13, 0xaf, 0xcd,
+  0xaa, 0x2d, 0xfd, 0x21, 0x02, 0x00, 0xfd, 0x39, 0xcd, 0x36, 0x1e, 0xfd, 0xe1, 0xfd, 0x39, 0xfd,
+  0xf9, 0xfd, 0xe1, 0x08, 0xc9, 0xdd, 0x21, 0xf6, 0x37, 0xcd, 0x7f, 0x2f, 0xfe, 0x28, 0x28, 0x1c,
+  0xcd, 0xf4, 0x1f, 0xcb, 0x19, 0x06, 0x20, 0xd9, 0xed, 0x6a, 0xd9, 0xed, 0x6a, 0xcb, 0x5d, 0x28,
+  0x01, 0x3f, 0x10, 0xf3, 0xcb, 0x11, 0xcd, 0xdf, 0x15, 0xaf, 0x4f, 0xc9, 0xcd, 0x5d, 0x1f, 0xdd,
+  0x21, 0xf6, 0x37, 0xcb, 0x7c, 0x37, 0x20, 0xec, 0xcd, 0xf6, 0x2c, 0xf5, 0xcd, 0xdb, 0x2c, 0xd9,
+  0xcd, 0xf4, 0x1f, 0xc4, 0x43, 0x22, 0xd9, 0x0e, 0x7f, 0xcd, 0x97, 0x2c, 0xcb, 0xbc, 0xf1, 0xc8,
+  0xd9, 0x7b, 0x3d, 0xb2, 0xd9, 0xb3, 0xb2, 0xc8, 0x06, 0x00, 0xcd, 0xdb, 0x2c, 0xcd, 0xb1, 0x2c,
+  0xcd, 0x53, 0x28, 0xcd, 0xf5, 0x2b, 0xcd, 0xc7, 0x2c, 0xaf, 0xc9, 0xcd, 0x56, 0x1f, 0x0d, 0x0c,
+  0xc8, 0x3e, 0x9f, 0x44, 0xcd, 0xdc, 0x2b, 0x08, 0xa0, 0xfc, 0xc7, 0x2c, 0x78, 0xb7, 0xfc, 0x04,
+  0x2c, 0xaf, 0x4f, 0xc9, 0xcd, 0x56, 0x1f, 0xcd, 0xb1, 0x2c, 0xcb, 0x7c, 0x3e, 0x15, 0xc2, 0xc1,
+  0x07, 0x0d, 0x0c, 0xc8, 0xcb, 0xfc, 0xcb, 0x41, 0xcc, 0xe3, 0x2c, 0x79, 0xd6, 0x80, 0xcb, 0x2f,
+  0xc6, 0x80, 0x4f, 0xc5, 0xeb, 0x21, 0x00, 0x00, 0x44, 0x4d, 0xd9, 0xeb, 0x21, 0x00, 0x00, 0x44,
+  0x4d, 0x3e, 0xe1, 0xcd, 0xbe, 0x2e, 0xd9, 0xcb, 0x78, 0xd9, 0xcc, 0xbe, 0x2e, 0xcd, 0xf7, 0x2e,
+  0xb7, 0xcd, 0x78, 0x2e, 0xcb, 0x1b, 0x60, 0x69, 0xd9, 0x60, 0x69, 0xdc, 0xc7, 0x2c, 0xc1, 0xdc,
+  0xef, 0x2c, 0x1f, 0x9f, 0x81, 0x4f, 0xcb, 0xbc, 0xaf, 0xc9, 0xcd, 0x56, 0x1f, 0xcd, 0xb1, 0x2c,
+  0xcd, 0x95, 0x2d, 0xcd, 0x30, 0x23, 0xcd, 0x9e, 0x2d, 0xcd, 0x95, 0x2d, 0xcd, 0xdb, 0x2c, 0xcd,
+  0x3e, 0x23, 0xcd, 0x9e, 0x2d, 0xcd, 0xc0, 0x27, 0xaf, 0xc9, 0xcd, 0x56, 0x1f, 0xcd, 0xb1, 0x2c,
+  0xcd, 0x26, 0x2c, 0x1c, 0x1c, 0x7b, 0x18, 0x11, 0xcd, 0x56, 0x1f, 0xcd, 0xb1, 0x2c, 0xe5, 0xcd,
+  0x26, 0x2c, 0xf1, 0x07, 0x07, 0x07, 0xe6, 0x04, 0xab, 0xf5, 0xcb, 0xbc, 0x1f, 0xcd, 0xbf, 0x23,
+  0xdc, 0x58, 0x27, 0xf1, 0xf5, 0xe6, 0x03, 0xe2, 0x88, 0x23, 0xcd, 0x95, 0x2d, 0xcd, 0x8f, 0x2d,
+  0xcd, 0xfa, 0x2d, 0xb7, 0xa8, 0x11, 0x36, 0x6d, 0x26, 0xde, 0x05, 0xd0, 0x73, 0xc0, 0x80, 0x88,
+  0x08, 0x79, 0x9d, 0xaa, 0xaa, 0xaa, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcd, 0x9e, 0x2d, 0xcd,
+  0x9e, 0x2d, 0xcd, 0x53, 0x28, 0xc3, 0xaa, 0x23, 0xcd, 0x8f, 0x2d, 0xcd, 0xfa, 0x2d, 0x71, 0xd5,
+  0x78, 0x4c, 0x70, 0xaf, 0x94, 0x03, 0xb6, 0x76, 0xc8, 0x9c, 0xaa, 0x2a, 0x7b, 0xdd, 0xff, 0xff,
+  0xff, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcd, 0x9e, 0x2d, 0xf1, 0xe6, 0x04, 0xc8, 0x0d, 0x0c,
+  0xc8, 0xcb, 0xfc, 0xc9, 0x11, 0x00, 0x00, 0xd9, 0x11, 0x00, 0x00, 0xd9, 0x06, 0x80, 0xc9, 0x11,
+  0x0f, 0x49, 0xd9, 0x11, 0xa2, 0xda, 0xd9, 0x06, 0x7f, 0xc9, 0xcd, 0x56, 0x1f, 0xcd, 0xb1, 0x2c,
+  0xcd, 0x4d, 0x24, 0xd9, 0x1d, 0x01, 0xcf, 0xd1, 0xd9, 0xe5, 0xcd, 0x36, 0x2c, 0xf1, 0xcb, 0x7b,
+  0x28, 0x09, 0x17, 0xda, 0x00, 0x2d, 0x3e, 0x18, 0xc3, 0xc1, 0x07, 0xe6, 0x80, 0xb3, 0xf5, 0xcb,
+  0xbc, 0xcd, 0x95, 0x2d, 0xcd, 0xfa, 0x2d, 0x72, 0x40, 0x2e, 0x94, 0x73, 0x65, 0x6f, 0x4f, 0x2e,
+  0x76, 0x37, 0x6d, 0x02, 0x88, 0x79, 0x12, 0xe5, 0xa0, 0x2a, 0x7b, 0x14, 0x4f, 0xaa, 0xaa, 0x7d,
+  0x56, 0xfd, 0xff, 0x7f, 0x7e, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xcd,
+  0x9e, 0x2d, 0xf1, 0xf5, 0xf4, 0x44, 0x24, 0xf1, 0xf2, 0x2f, 0x24, 0xe6, 0x7f, 0xed, 0x44, 0xc6,
+  0x80, 0x81, 0x38, 0x05, 0xf2, 0x00, 0x2d, 0x18, 0x03, 0xfa, 0xf1, 0x2c, 0xc6, 0x80, 0xca, 0x00,
+  0x2d, 0x4f, 0xaf, 0xc9, 0xcd, 0xb4, 0x23, 0xcd, 0xdb, 0x2c, 0xc3, 0xc0, 0x27, 0x11, 0x62, 0x31,
+  0xd9, 0x11, 0xf8, 0x17, 0xd9, 0x06, 0x7f, 0xc9, 0xcd, 0x56, 0x1f, 0xcd, 0xb1, 0x2c, 0x3e, 0x16,
+  0xcb, 0x7c, 0xc2, 0xc1, 0x07, 0x0c, 0x0d, 0xca, 0xc1, 0x07, 0x11, 0x04, 0x35, 0xd9, 0x11, 0x33,
+  0xf3, 0xd9, 0xcd, 0x12, 0x2d, 0x79, 0x0e, 0x80, 0x38, 0x02, 0x0d, 0x3c, 0xf5, 0xcd, 0xdc, 0x2d,
+  0xcd, 0x95, 0x2d, 0xcd, 0x8f, 0x2d, 0xcd, 0xfa, 0x2d, 0x48, 0xcc, 0xfb, 0x74, 0x7d, 0xaf, 0xae,
+  0xff, 0x11, 0x7e, 0x8c, 0xd9, 0xcd, 0x4c, 0x7e, 0xe3, 0xa9, 0xaa, 0x2a, 0x7f, 0x00, 0x00, 0x00,
+  0x00, 0x81, 0xcd, 0x9e, 0x2d, 0xcd, 0x9e, 0x2d, 0xcd, 0x53, 0x28, 0xf1, 0xcd, 0x95, 0x2d, 0x08,
+  0xcd, 0x00, 0x2d, 0x08, 0xd6, 0x80, 0x28, 0x1b, 0x30, 0x02, 0x2f, 0x3c, 0x67, 0x0e, 0x87, 0xf5,
+  0xcd, 0x97, 0x2c, 0xcb, 0xbc, 0xcd, 0x4d, 0x24, 0xcd, 0x53, 0x28, 0xf1, 0x30, 0x05, 0xfa, 0xd3,
+  0x24, 0xcb, 0xfc, 0xcd, 0x9e, 0x2d, 0xcd, 0x68, 0x27, 0xaf, 0xc9, 0xcd, 0x58, 0x24, 0x11, 0x5b,
+  0x5e, 0xd9, 0x11, 0xa9, 0xd8, 0xd9, 0x06, 0x7e, 0xcd, 0x53, 0x28, 0xaf, 0xc9, 0xf6, 0xaf, 0xf5,
+  0xcd, 0x56, 0x1f, 0xcd, 0xb1, 0x2c, 0xcd, 0x95, 0x2d, 0xcd, 0x87, 0x2d, 0xcd, 0x53, 0x28, 0xcd,
+  0xb4, 0x23, 0xcd, 0x58, 0x27, 0xcd, 0xba, 0x22, 0xcd, 0x9e, 0x2d, 0xf1, 0xcc, 0xdb, 0x2c, 0x04,
+  0x05, 0x20, 0x05, 0xcd, 0xa8, 0x21, 0x0d, 0xc9, 0xcd, 0xc0, 0x27, 0x18, 0x06, 0xcd, 0x56, 0x1f,
+  0xcd, 0xb1, 0x2c, 0x7c, 0xf5, 0xcb, 0xbc, 0x11, 0x13, 0x54, 0xd9, 0x11, 0xd0, 0xcc, 0xd9, 0x06,
+  0x7e, 0xcd, 0x0f, 0x2d, 0x06, 0x00, 0x38, 0x1b, 0x11, 0x82, 0x1a, 0xd9, 0x11, 0x9a, 0x79, 0xd9,
+  0x06, 0x81, 0xcd, 0x0f, 0x2d, 0x38, 0x07, 0xcd, 0x44, 0x24, 0x06, 0x02, 0x18, 0x05, 0xcd, 0xdc,
+  0x2d, 0x06, 0x01, 0xc5, 0xcd, 0x95, 0x2d, 0xcd, 0x8f, 0x2d, 0xcd, 0xfa, 0x2d, 0x35, 0xf3, 0xd8,
+  0x37, 0x7b, 0x91, 0x6b, 0xb9, 0xaa, 0x7c, 0xde, 0x41, 0x97, 0x61, 0x7c, 0x7b, 0x9d, 0x37, 0x92,
+  0x7d, 0x5a, 0x2a, 0xcc, 0x4c, 0x7d, 0x5c, 0xa9, 0xaa, 0xaa, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x80,
+  0xcd, 0x9e, 0x2d, 0xcd, 0x9e, 0x2d, 0xcd, 0x53, 0x28, 0xcd, 0xbf, 0x23, 0xf1, 0x1f, 0xf5, 0xdc,
+  0x68, 0x27, 0xf1, 0x04, 0x1f, 0xdc, 0x58, 0x27, 0xf1, 0xb7, 0xf0, 0xcb, 0xfc, 0xaf, 0xc9, 0xcd,
+  0x36, 0x2f, 0xcd, 0xaa, 0x2d, 0xcd, 0x4f, 0x1f, 0x4b, 0xd1, 0x21, 0x00, 0x00, 0x39, 0xd5, 0xcd,
+  0xbf, 0x25, 0xcd, 0x45, 0x2f, 0xe1, 0x26, 0x00, 0x39, 0xf9, 0xaf, 0x67, 0x6f, 0x4f, 0xc9, 0xcd,
+  0x7f, 0x2f, 0xfe, 0x2c, 0x3e, 0x00, 0x20, 0x19, 0xfd, 0x23, 0xc5, 0xe5, 0xcd, 0xaa, 0x2d, 0xcd,
+  0x46, 0x1f, 0xc1, 0xcd, 0xc9, 0x2d, 0xe1, 0xc1, 0xd9, 0x7d, 0xd9, 0xb7, 0x28, 0x03, 0x3d, 0xed,
+  0x44, 0x43, 0x11, 0x00, 0x35, 0x80, 0xd9, 0x5f, 0x21, 0x00, 0x00, 0xd9, 0x0c, 0x0d, 0xc8, 0x78,
+  0xb7, 0xc8, 0x08, 0x1a, 0xbe, 0x28, 0x04, 0x23, 0x10, 0xfa, 0xc9, 0xc5, 0xd5, 0xe5, 0x13, 0x0d,
+  0x28, 0x09, 0x23, 0x05, 0x28, 0x04, 0x1a, 0xbe, 0x28, 0xf4, 0x37, 0xe1, 0xd1, 0xc1, 0x1a, 0x38,
+  0xe6, 0xd9, 0x7b, 0xd9, 0xb8, 0x1a, 0x38, 0xdf, 0x08, 0x90, 0x3c, 0xd9, 0x6f, 0xd9, 0xc9, 0xcd,
+  0x5d, 0x1f, 0xd9, 0x7d, 0x11, 0x00, 0x35, 0x12, 0x1c, 0x3e, 0x80, 0xc9, 0xcd, 0x5d, 0x1f, 0xd9,
+  0xcd, 0xef, 0x2f, 0x11, 0x00, 0x35, 0x12, 0x3e, 0x80, 0xd0, 0x1c, 0xc9, 0xcd, 0xe0, 0xff, 0x37,
+  0x18, 0xf1, 0xcd, 0x36, 0x2f, 0xcd, 0xaa, 0x2d, 0xcd, 0x46, 0x1f, 0xc1, 0xcd, 0xc9, 0x2d, 0xd9,
+  0x7d, 0xd9, 0xb7, 0x28, 0x0d, 0x3d, 0x6f, 0x93, 0x1e, 0x00, 0x30, 0x06, 0xed, 0x44, 0x4f, 0xcd,
+  0x99, 0x26, 0xcd, 0x7f, 0x2f, 0xfe, 0x2c, 0xfd, 0x23, 0x28, 0x0b, 0xfd, 0x2b, 0xcd, 0x45, 0x2f,
+  0x3e, 0x80, 0xc9, 0xcd, 0x36, 0x2f, 0xcd, 0xaa, 0x2d, 0xcd, 0x46, 0x1f, 0xc1, 0xcd, 0xc9, 0x2d,
+  0xcd, 0x45, 0x2f, 0xd9, 0x7d, 0xd9, 0xbb, 0x30, 0x02, 0x6b, 0x5f, 0x3e, 0x80, 0xc9, 0xcd, 0x73,
+  0x26, 0xd0, 0x1c, 0x1d, 0xc8, 0x4b, 0x7d, 0x93, 0x6f, 0x06, 0x00, 0x62, 0x58, 0xed, 0xb0, 0x3e,
+  0x80, 0xc9, 0xcd, 0x46, 0x1f, 0xcd, 0x39, 0x2f, 0xd9, 0x7d, 0xd9, 0xf5, 0xcd, 0x4f, 0x1f, 0xcd,
+  0x45, 0x2f, 0xf1, 0xb7, 0x28, 0xd4, 0x3d, 0x4f, 0x3e, 0x80, 0xc8, 0x1c, 0x1d, 0xc8, 0x43, 0x62,
+  0x2e, 0x00, 0xc5, 0x7e, 0x23, 0x12, 0x1c, 0x3e, 0x13, 0xca, 0xc1, 0x07, 0x10, 0xf5, 0xc1, 0x0d,
+  0x20, 0xf0, 0x3e, 0x80, 0xc9, 0xcd, 0xec, 0x2b, 0x7c, 0xa2, 0x67, 0x7d, 0xa3, 0x6f, 0xd9, 0x7c,
+  0xa2, 0x67, 0x7d, 0xa3, 0x6f, 0xd9, 0xc9, 0xcd, 0xec, 0x2b, 0x7c, 0xaa, 0x67, 0x7d, 0xab, 0x6f,
+  0xd9, 0x7c, 0xaa, 0x67, 0x7d, 0xab, 0x6f, 0xd9, 0xc9, 0xcd, 0xec, 0x2b, 0x7c, 0xb2, 0x67, 0x7d,
+  0xb3, 0x6f, 0xd9, 0x7c, 0xb2, 0x67, 0x7d, 0xb3, 0x6f, 0xd9, 0xc9, 0xcd, 0xec, 0x2b, 0x7c, 0xaa,
+  0xcb, 0x7c, 0x08, 0xcb, 0x7c, 0xc4, 0x04, 0x2c, 0xcd, 0xdb, 0x2c, 0xcb, 0x7c, 0xc4, 0x04, 0x2c,
+  0x44, 0x4d, 0x21, 0x00, 0x00, 0xd9, 0x44, 0x4d, 0x21, 0x00, 0x00, 0x3e, 0xdf, 0xcd, 0x5d, 0x2e,
+  0xd9, 0x0e, 0x00, 0x08, 0xc8, 0xc3, 0x04, 0x2c, 0xcd, 0xec, 0x2b, 0xcd, 0x0e, 0x27, 0xb7, 0xcd,
+  0xdb, 0x2c, 0x0e, 0x00, 0xf0, 0xc3, 0x04, 0x2c, 0xcd, 0x5e, 0x2d, 0xe0, 0xcd, 0x58, 0x2d, 0xcd,
+  0xa8, 0x2c, 0x7a, 0xee, 0x80, 0x57, 0x18, 0x10, 0x7c, 0xee, 0x80, 0x67, 0x18, 0x0a, 0xcd, 0x58,
+  0x2d, 0xe0, 0xcd, 0x5e, 0x2d, 0xcd, 0xa8, 0x2c, 0x05, 0x04, 0xc8, 0x0d, 0x0c, 0xca, 0xdb, 0x2c,
+  0xd9, 0x01, 0x00, 0x00, 0xd9, 0x7c, 0xaa, 0xf5, 0x78, 0xb9, 0xdc, 0xdb, 0x2c, 0x78, 0xcb, 0xfc,
+  0xc4, 0xdc, 0x2b, 0xf1, 0x7a, 0xcb, 0xfa, 0xfa, 0x94, 0x27, 0xcd, 0x58, 0x2d, 0xdc, 0xe3, 0x2c,
+  0xcb, 0xfc, 0x18, 0x0a, 0xcd, 0x5e, 0x2d, 0xdc, 0x18, 0x2c, 0xcd, 0x85, 0x2c, 0x2f, 0xd9, 0xeb,
+  0x21, 0x00, 0x80, 0xb7, 0xed, 0x42, 0xeb, 0xd9, 0xcc, 0xd5, 0x2c, 0xdc, 0xc7, 0x2c, 0xdc, 0xef,
+  0x2c, 0xcb, 0xbc, 0x0d, 0x0c, 0xca, 0x00, 0x2d, 0xb7, 0xf0, 0xcb, 0xfc, 0xc9, 0xcd, 0xa8, 0x2c,
+  0x05, 0x04, 0x3e, 0x12, 0xca, 0xc1, 0x07, 0x0d, 0x0c, 0xc8, 0x7c, 0xaa, 0x08, 0xcb, 0xfa, 0xcb,
+  0xfc, 0xc5, 0x42, 0x4b, 0x11, 0x00, 0x00, 0xd9, 0x42, 0x4b, 0x11, 0x00, 0x00, 0x3e, 0xe0, 0xcd,
+  0x5d, 0x2e, 0xd9, 0xcb, 0x7a, 0xd9, 0xcc, 0x78, 0x2e, 0xeb, 0xd9, 0xcb, 0x38, 0xcb, 0x19, 0xb7,
+  0xed, 0x42, 0x3f, 0xeb, 0xcc, 0xd5, 0x2c, 0xdc, 0xc7, 0x2c, 0xc1, 0xdc, 0xef, 0x2c, 0x1f, 0x79,
+  0x98, 0x3f, 0xc3, 0x8c, 0x28, 0x7c, 0xaa, 0x08, 0xcb, 0x7c, 0xc4, 0x04, 0x2c, 0xcd, 0xdb, 0x2c,
+  0xcb, 0x7c, 0xc4, 0x04, 0x2c, 0x44, 0x4d, 0x21, 0x00, 0x00, 0xd9, 0x44, 0x4d, 0x21, 0x00, 0x00,
+  0x3e, 0xdf, 0xcd, 0x8b, 0x2e, 0xd9, 0x0e, 0xbf, 0xcd, 0xf6, 0x2c, 0x20, 0x0d, 0xcb, 0x7a, 0x20,
+  0x09, 0xcd, 0xdb, 0x2c, 0x4a, 0x08, 0xf0, 0xc3, 0x04, 0x2c, 0x0d, 0xd9, 0xcb, 0x23, 0xcb, 0x12,
+  0xd9, 0xcb, 0x13, 0xcb, 0x12, 0xd9, 0xed, 0x6a, 0xd9, 0xed, 0x6a, 0xf2, 0x3a, 0x28, 0x08, 0xf8,
+  0xcb, 0xbc, 0xc9, 0x05, 0x04, 0xca, 0x00, 0x2d, 0x0d, 0x0c, 0xc8, 0x7c, 0xaa, 0x08, 0xcb, 0xfa,
+  0xcb, 0xfc, 0xc5, 0x44, 0x4d, 0x21, 0x00, 0x00, 0xd9, 0x44, 0x4d, 0x21, 0x00, 0x00, 0x3e, 0xe0,
+  0xcd, 0x8b, 0x2e, 0xdc, 0x9f, 0x2e, 0xd9, 0xe5, 0x21, 0x00, 0x80, 0xb7, 0xed, 0x52, 0xe1, 0xcc,
+  0xd5, 0x2c, 0xdc, 0xc7, 0x2c, 0xc1, 0xdc, 0xef, 0x2c, 0x1f, 0x79, 0x88, 0x38, 0x05, 0xf2, 0x00,
+  0x2d, 0x18, 0x03, 0xfa, 0xf1, 0x2c, 0xc6, 0x80, 0x4f, 0xca, 0x00, 0x2d, 0x08, 0xcb, 0xbc, 0xf0,
+  0xcb, 0xfc, 0xc9, 0xcd, 0xdb, 0x2c, 0xcb, 0x7c, 0xf5, 0xc4, 0x04, 0x2c, 0x48, 0x06, 0x20, 0xcd,
+  0x75, 0x2d, 0x38, 0x08, 0x10, 0xf9, 0xf1, 0xd9, 0x2c, 0xd9, 0x4c, 0xc9, 0xf1, 0xc5, 0xeb, 0xe5,
+  0xd9, 0xeb, 0xe5, 0xd9, 0xdd, 0x21, 0x00, 0x00, 0xdd, 0x39, 0x28, 0x34, 0xc5, 0xd9, 0xd5, 0xd9,
+  0xd5, 0xcd, 0xb1, 0x2c, 0xcd, 0x44, 0x24, 0xcd, 0xdf, 0x15, 0x18, 0x1d, 0xc5, 0xd9, 0xcb, 0x23,
+  0xcb, 0x12, 0xd5, 0xd9, 0xcb, 0x13, 0xcb, 0x12, 0xd5, 0x3e, 0x0a, 0xf5, 0xcd, 0x87, 0x2d, 0xcd,
+  0x98, 0x2f, 0xf1, 0xcd, 0xa6, 0x20, 0xdc, 0x98, 0x2f, 0xd1, 0xd9, 0xd1, 0xd9, 0x79, 0xc1, 0x4f,
+  0x10, 0xda, 0xf1, 0xf1, 0xf1, 0xc9, 0xf1, 0xf1, 0xf1, 0x18, 0xa1, 0xcb, 0x7a, 0xf5, 0xcd, 0xdb,
+  0x2c, 0xcd, 0x95, 0x2d, 0x0d, 0x0c, 0x28, 0xee, 0x3e, 0x9e, 0xb9, 0x38, 0x08, 0x3c, 0xcd, 0xdc,
+  0x2b, 0x08, 0xf2, 0x06, 0x29, 0xcd, 0xdb, 0x2c, 0xcd, 0x5e, 0x24, 0xcd, 0x9e, 0x2d, 0xf1, 0xcd,
+  0x53, 0x28, 0xc3, 0xd0, 0x23, 0xcd, 0x30, 0x2d, 0x18, 0x08, 0xcd, 0x0a, 0x2d, 0x18, 0x03, 0xcd,
+  0xfd, 0x2c, 0xd0, 0x18, 0x51, 0xcd, 0x30, 0x2d, 0x18, 0x08, 0xcd, 0x0a, 0x2d, 0x18, 0x03, 0xcd,
+  0xfd, 0x2c, 0xc8, 0xd8, 0x18, 0x40, 0xcd, 0x30, 0x2d, 0x18, 0x08, 0xcd, 0x0a, 0x2d, 0x18, 0x03,
+  0xcd, 0xfd, 0x2c, 0xd8, 0x18, 0x30, 0xcd, 0x30, 0x2d, 0x18, 0x08, 0xcd, 0x0a, 0x2d, 0x18, 0x03,
+  0xcd, 0xfd, 0x2c, 0x28, 0x21, 0xd0, 0x18, 0x1e, 0xcd, 0x30, 0x2d, 0x18, 0x08, 0xcd, 0x0a, 0x2d,
+  0x18, 0x03, 0xcd, 0xfd, 0x2c, 0xc8, 0x18, 0x0e, 0xcd, 0x30, 0x2d, 0x18, 0x08, 0xcd, 0x0a, 0x2d,
+  0x18, 0x03, 0xcd, 0xfd, 0x2c, 0xc0, 0x21, 0xff, 0xff, 0xd9, 0x21, 0xff, 0xff, 0xd9, 0xaf, 0x4f,
+  0xc9, 0xd9, 0xfd, 0x7e, 0x00, 0xfd, 0x23, 0x17, 0x17, 0x67, 0xe6, 0xc0, 0xfd, 0xae, 0x00, 0xfd,
+  0x23, 0x6f, 0x7c, 0x17, 0x17, 0xe6, 0xc0, 0xfd, 0xae, 0x00, 0xfd, 0x23, 0x67, 0xd9, 0xaf, 0x4f,
+  0x67, 0x6f, 0xc9, 0xfd, 0x23, 0xcd, 0x56, 0x1f, 0xcd, 0xce, 0x29, 0x3e, 0x80, 0xc9, 0xcd, 0xf5,
+  0x2b, 0x01, 0x08, 0x00, 0x11, 0x00, 0x35, 0xc5, 0x06, 0x04, 0xaf, 0xcd, 0x75, 0x2d, 0x17, 0x10,
+  0xfa, 0xc1, 0x0d, 0xf8, 0x28, 0x06, 0xb7, 0x20, 0x03, 0xb8, 0x28, 0xeb, 0xc6, 0x90, 0x27, 0xce,
+  0x40, 0x27, 0x12, 0x13, 0x47, 0x18, 0xe0, 0xcd, 0x7f, 0x2f, 0xfe, 0x7e, 0x28, 0xc5, 0xcd, 0x56,
+  0x1f, 0xdd, 0x21, 0x00, 0x37, 0xdd, 0x7e, 0x03, 0xb7, 0xdd, 0x21, 0x7a, 0x2b, 0x28, 0x04, 0xdd,
+  0x21, 0x00, 0x37, 0x11, 0x00, 0x35, 0xcd, 0xb1, 0x2c, 0x06, 0x00, 0xcb, 0x7c, 0x28, 0x06, 0xcb,
+  0xbc, 0x3e, 0x2d, 0x12, 0x13, 0xaf, 0xb9, 0x28, 0x47, 0xd5, 0x78, 0xf5, 0x79, 0xfe, 0xa1, 0x30,
+  0x1a, 0xfe, 0x9b, 0x30, 0x25, 0x2f, 0xfe, 0xe1, 0x38, 0x02, 0x3e, 0xf8, 0xc6, 0x1c, 0xcd, 0x21,
+  0x2e, 0xf5, 0xcd, 0x53, 0x28, 0xf1, 0x47, 0xf1, 0x90, 0x18, 0xe0, 0xd6, 0x20, 0xcd, 0x21, 0x2e,
+  0xf5, 0xcd, 0xc0, 0x27, 0xf1, 0x47, 0xf1, 0x80, 0x18, 0xd1, 0x3e, 0x09, 0xcd, 0x21, 0x2e, 0xcd,
+  0x0f, 0x2d, 0x79, 0xc1, 0x4f, 0xcb, 0xfc, 0xdc, 0x4c, 0x2d, 0xd1, 0xcb, 0xb9, 0x3e, 0x00, 0x17,
+  0x0c, 0x08, 0x78, 0xdd, 0xcb, 0x02, 0x4e, 0x20, 0x08, 0xaf, 0xdd, 0xbe, 0x01, 0x28, 0x0a, 0x3e,
+  0xf6, 0xdd, 0x86, 0x01, 0xb7, 0xfa, 0x89, 0x2a, 0xaf, 0xf5, 0x08, 0xcd, 0x75, 0x2d, 0x8f, 0xfe,
+  0x0a, 0x38, 0x05, 0xd6, 0x0a, 0xd9, 0x2c, 0xd9, 0x0d, 0x20, 0xf0, 0x4f, 0x7c, 0xe6, 0x3f, 0x67,
+  0xf1, 0xf2, 0xae, 0x2a, 0x3c, 0x20, 0x1c, 0x3e, 0x04, 0xb9, 0x3e, 0x00, 0x18, 0x15, 0xf5, 0x79,
+  0xce, 0x30, 0xfe, 0x30, 0x28, 0x05, 0xfe, 0x3a, 0x3f, 0x30, 0x08, 0xe3, 0xcb, 0x75, 0xe3, 0x20,
+  0x05, 0x3e, 0x30, 0x3c, 0x3d, 0xf5, 0x04, 0xcd, 0xf6, 0x2c, 0x0e, 0x20, 0x3e, 0x00, 0x20, 0xbb,
+  0xf1, 0xf5, 0x3e, 0x00, 0x38, 0xb5, 0xeb, 0x0e, 0xff, 0x16, 0x01, 0xdd, 0x5e, 0x01, 0xdd, 0xcb,
+  0x02, 0x46, 0x20, 0x32, 0xdd, 0xcb, 0x02, 0x4e, 0x28, 0x11, 0x78, 0xb7, 0x28, 0x04, 0xfa, 0xf2,
+  0x2a, 0x50, 0x7a, 0xdd, 0x86, 0x01, 0x5f, 0xfe, 0x0b, 0x38, 0x17, 0x78, 0x11, 0x01, 0x01, 0xb7,
+  0xfa, 0x16, 0x2b, 0x28, 0x0d, 0xdd, 0x7e, 0x01, 0xb7, 0x20, 0x02, 0x3e, 0x0a, 0xb8, 0x38, 0x06,
+  0x50, 0x58, 0x78, 0xc6, 0x81, 0x4f, 0xcb, 0xfa, 0x1d, 0x7a, 0xb9, 0x30, 0x0c, 0xf1, 0x28, 0x03,
+  0xf2, 0x2b, 0x2b, 0xf5, 0x1c, 0x1d, 0xfa, 0x3a, 0x2b, 0x3e, 0x30, 0x15, 0xe2, 0x32, 0x2b, 0x36,
+  0x2e, 0x23, 0x77, 0x23, 0x1d, 0xf2, 0x19, 0x2b, 0x18, 0xe3, 0xf1, 0x0c, 0x4d, 0x20, 0x27, 0x36,
+  0x45, 0x23, 0x78, 0x3d, 0xf2, 0x4c, 0x2b, 0x36, 0x2d, 0x23, 0xed, 0x44, 0x36, 0x30, 0x28, 0x15,
+  0xfe, 0x0a, 0x47, 0x3e, 0x3a, 0x38, 0x03, 0x23, 0x36, 0x30, 0x34, 0xbe, 0x20, 0x05, 0x36, 0x30,
+  0x2b, 0x34, 0x23, 0x10, 0xf5, 0x23, 0xeb, 0xdd, 0xcb, 0x02, 0x46, 0x3e, 0x80, 0xc8, 0x79, 0xc6,
+  0x04, 0xbb, 0x28, 0xf7, 0xeb, 0x36, 0x20, 0x23, 0xeb, 0x18, 0xf6, 0x09, 0x00, 0xc5, 0x47, 0x0e,
+  0x02, 0xfd, 0x23, 0xfd, 0x7e, 0x00, 0xcd, 0x2b, 0x2f, 0x08, 0xfd, 0x7e, 0x00, 0xcd, 0x1b, 0x2f,
+  0x38, 0x17, 0x78, 0x87, 0x87, 0x80, 0x87, 0x47, 0xfd, 0x7e, 0x00, 0xfd, 0x23, 0xe6, 0x0f, 0x80,
+  0x47, 0x0d, 0xf2, 0x8a, 0x2b, 0x06, 0x64, 0x18, 0xe1, 0x08, 0xfe, 0x2d, 0x78, 0xc1, 0xc0, 0xed,
+  0x44, 0xc9, 0xfd, 0x23, 0xfd, 0x7e, 0x00, 0xcd, 0x1b, 0x2f, 0xd8, 0x04, 0xfd, 0x23, 0xcd, 0x66,
+  0x2d, 0x38, 0x13, 0x0d, 0x0c, 0x20, 0x0f, 0xe6, 0x0f, 0xd9, 0x06, 0x00, 0x4f, 0x09, 0xd9, 0x30,
+  0xe3, 0x23, 0x7c, 0xb5, 0x20, 0xde, 0x0c, 0xcd, 0xde, 0x2c, 0x18, 0xd8, 0x08, 0xaf, 0x08, 0xcb,
+  0xfc, 0xcd, 0xe3, 0x2c, 0xb9, 0xc8, 0xd2, 0xe1, 0x2b, 0xc3, 0xf1, 0x2c, 0xcd, 0xdb, 0x2c, 0xcd,
+  0xf5, 0x2b, 0xcd, 0xdb, 0x2c, 0x0d, 0x0c, 0xc8, 0xcb, 0x7c, 0xf5, 0x3e, 0x9f, 0xcd, 0xdc, 0x2b,
+  0xf1, 0x0e, 0x00, 0xc8, 0xb7, 0xd9, 0xd5, 0xeb, 0x21, 0x00, 0x00, 0xed, 0x52, 0xd1, 0xd9, 0xd5,
+  0xeb, 0x21, 0x00, 0x00, 0xed, 0x52, 0xd1, 0xc9, 0xd9, 0x2f, 0xe5, 0xb7, 0x21, 0x00, 0x00, 0xed,
+  0x42, 0x44, 0x4d, 0xe1, 0x18, 0xe0, 0x3e, 0x96, 0xb9, 0x3e, 0x17, 0xda, 0xc1, 0x07, 0xcd, 0xbf,
+  0x23, 0xd9, 0x01, 0x69, 0x21, 0xd9, 0xcb, 0xfa, 0xcb, 0xfc, 0x79, 0x0e, 0x00, 0xdd, 0x21, 0x00,
+  0x00, 0xdd, 0xe5, 0xb8, 0x38, 0x3a, 0xd9, 0xe3, 0xed, 0x42, 0xe3, 0xed, 0x52, 0xd9, 0xed, 0x52,
+  0x30, 0x09, 0xd9, 0xe3, 0x09, 0xe3, 0xed, 0x5a, 0xd9, 0xed, 0x5a, 0x3f, 0xcb, 0x11, 0x30, 0x02,
+  0xcb, 0xf9, 0x3d, 0xb8, 0x38, 0x19, 0xe3, 0x29, 0xe3, 0xd9, 0xed, 0x6a, 0xd9, 0xed, 0x6a, 0x30,
+  0xd5, 0xb7, 0xd9, 0xe3, 0xed, 0x42, 0xe3, 0xed, 0x52, 0xd9, 0xed, 0x52, 0xb7, 0x18, 0xdc, 0x3c,
+  0x59, 0x4f, 0xd9, 0xc1, 0xd9, 0xcb, 0x7c, 0xc0, 0xd9, 0xcb, 0x21, 0xcb, 0x10, 0xed, 0x6a, 0xd9,
+  0xed, 0x6a, 0x0d, 0xc2, 0x85, 0x2c, 0xc9, 0xcb, 0x7c, 0xc0, 0xd9, 0x29, 0xd9, 0xed, 0x6a, 0x0d,
+  0xc2, 0x97, 0x2c, 0xc9, 0x08, 0xc6, 0x10, 0x08, 0xcd, 0xdb, 0x2c, 0xcd, 0xb1, 0x2c, 0xcd, 0xdb,
+  0x2c, 0x0d, 0x0c, 0xc0, 0xcd, 0xf6, 0x2c, 0xc8, 0x7c, 0xb7, 0xfc, 0x04, 0x2c, 0x0e, 0x9f, 0xcd,
+  0x97, 0x2c, 0xb7, 0xf8, 0xcb, 0xbc, 0xc9, 0xd9, 0x01, 0x01, 0x00, 0x09, 0xd9, 0xd0, 0xc5, 0x01,
+  0x01, 0x00, 0x09, 0xc1, 0xc9, 0xb7, 0xd9, 0xcb, 0xc5, 0xd9, 0xc9, 0x79, 0x48, 0x47, 0xeb, 0xd9,
+  0xeb, 0xd9, 0xc9, 0xcd, 0x7c, 0x2d, 0xd9, 0xcb, 0x18, 0xcb, 0x19, 0x08, 0xb0, 0x08, 0xd9, 0x0c,
+  0xc0, 0x3e, 0x14, 0xc3, 0xc1, 0x07, 0x7c, 0xb5, 0xd9, 0xb4, 0xb5, 0xd9, 0xc9, 0xcd, 0x28, 0x2d,
+  0x3e, 0x00, 0xd9, 0x67, 0x6f, 0xd9, 0x67, 0x6f, 0x4f, 0xc9, 0xcd, 0x1c, 0x2d, 0x18, 0xf1, 0x79,
+  0xb8, 0xc0, 0xed, 0x52, 0x19, 0xc0, 0xd9, 0xed, 0x52, 0x19, 0xd9, 0xc9, 0x7c, 0xaa, 0x7c, 0x17,
+  0xf8, 0x30, 0xec, 0xcd, 0x0f, 0x2d, 0x3f, 0xc9, 0x7c, 0xaa, 0xf2, 0x12, 0x2d, 0x7c, 0x17, 0xc9,
+  0xcd, 0x35, 0x2d, 0x18, 0xcb, 0x04, 0x0c, 0x05, 0x28, 0x0a, 0x0d, 0x28, 0x0c, 0x1a, 0xbe, 0xc0,
+  0x13, 0x23, 0x18, 0xf3, 0xb7, 0x0d, 0xc8, 0x37, 0xc9, 0xb7, 0x0c, 0xc9, 0x05, 0x0c, 0xcd, 0x88,
+  0x2d, 0xcd, 0x7b, 0x2d, 0xcd, 0x7b, 0x2d, 0x08, 0xd9, 0x19, 0xd9, 0xed, 0x5a, 0xc9, 0xd9, 0xb7,
+  0xed, 0x52, 0xd9, 0xed, 0x52, 0xc9, 0xcd, 0x88, 0x2d, 0xcd, 0x75, 0x2d, 0xd8, 0xcd, 0x75, 0x2d,
+  0xd8, 0xcd, 0x58, 0x2d, 0xd8, 0xd9, 0x29, 0xd9, 0xed, 0x6a, 0xc9, 0x0c, 0xcb, 0x3c, 0xcb, 0x1d,
+  0xd9, 0xcb, 0x1c, 0xcb, 0x1d, 0xd9, 0xc9, 0x41, 0x54, 0x5d, 0xd9, 0x54, 0x5d, 0xd9, 0xc9, 0xcd,
+  0x87, 0x2d, 0xcd, 0x53, 0x28, 0xdd, 0xe1, 0xc5, 0xe5, 0xd9, 0xe5, 0xd9, 0xdd, 0xe9, 0xdd, 0xe1,
+  0xd9, 0xd1, 0xd9, 0xd1, 0x79, 0xc1, 0x41, 0x4f, 0xdd, 0xe9, 0xcd, 0x39, 0x16, 0xdd, 0xe1, 0xb7,
+  0x21, 0x00, 0x35, 0x54, 0x45, 0xed, 0x52, 0x39, 0xf9, 0x57, 0xd5, 0x28, 0x0a, 0x4b, 0x11, 0x00,
+  0x35, 0xeb, 0xed, 0xb0, 0xcd, 0x39, 0x16, 0xdd, 0xe9, 0xdd, 0xe1, 0x21, 0x00, 0x00, 0x44, 0x39,
+  0x11, 0x00, 0x35, 0x0c, 0x0d, 0x28, 0x02, 0xed, 0xb0, 0xf9, 0xdd, 0xe9, 0xcd, 0x95, 0x2d, 0xcd,
+  0xb4, 0x23, 0xcd, 0x68, 0x27, 0xcd, 0x9e, 0x2d, 0xcd, 0x95, 0x2d, 0xcd, 0xdb, 0x2c, 0xcd, 0xb4,
+  0x23, 0xcd, 0x52, 0x27, 0xcd, 0x9e, 0x2d, 0xc3, 0xc0, 0x27, 0xdd, 0x21, 0x02, 0x00, 0xdd, 0x39,
+  0xdd, 0xe3, 0xcd, 0xa6, 0x20, 0xcd, 0x53, 0x28, 0x11, 0x05, 0x00, 0xdd, 0x19, 0xcd, 0xa6, 0x20,
+  0xdd, 0xe3, 0x04, 0x05, 0xfa, 0x68, 0x27, 0xcd, 0x68, 0x27, 0xcd, 0xa6, 0x20, 0xdd, 0xe3, 0x18,
+  0xe4, 0x3c, 0x08, 0xe5, 0xd9, 0xe5, 0xd9, 0xcd, 0xb4, 0x23, 0xcd, 0xdb, 0x2c, 0xaf, 0x08, 0x3d,
+  0x28, 0x20, 0xf2, 0x39, 0x2e, 0xb9, 0x38, 0x1a, 0x3c, 0x08, 0x3c, 0xcb, 0xfc, 0xcd, 0x4e, 0x2d,
+  0x30, 0x05, 0x08, 0xcd, 0x7b, 0x2d, 0x08, 0x08, 0xdc, 0xc7, 0x2c, 0x0c, 0xfa, 0x2e, 0x2e, 0xc3,
+  0xf1, 0x2c, 0xcd, 0xdb, 0x2c, 0xcb, 0xba, 0xd9, 0xe1, 0xd9, 0xe1, 0x08, 0xc9, 0xb7, 0xed, 0x42,
+  0xd9, 0xed, 0x42, 0xd9, 0x30, 0x05, 0x09, 0xd9, 0xed, 0x4a, 0xd9, 0x3f, 0xcb, 0x13, 0xcb, 0x12,
+  0xd9, 0xcb, 0x13, 0xcb, 0x12, 0xd9, 0x3c, 0xf0, 0xed, 0x6a, 0xd9, 0xed, 0x6a, 0xd9, 0x30, 0xde,
+  0xb7, 0xed, 0x42, 0xd9, 0xed, 0x42, 0xd9, 0x37, 0xc3, 0x6c, 0x2e, 0xb7, 0xd9, 0xcb, 0x1a, 0xcb,
+  0x1b, 0xd9, 0xcb, 0x1a, 0xcb, 0x1b, 0x30, 0x05, 0x09, 0xd9, 0xed, 0x4a, 0xd9, 0x3c, 0xf0, 0xd9,
+  0xcb, 0x1c, 0xcb, 0x1d, 0xd9, 0xcb, 0x1c, 0xcb, 0x1d, 0xc3, 0x8c, 0x2e, 0xed, 0x42, 0xd9, 0xed,
+  0x42, 0xd9, 0x0c, 0x30, 0x07, 0x0d, 0x09, 0xd9, 0xed, 0x4a, 0xd9, 0x0d, 0x3c, 0xf0, 0xcb, 0x21,
+  0xcb, 0x10, 0xd9, 0xcb, 0x11, 0xcb, 0x10, 0xd9, 0x0c, 0xcb, 0x23, 0xcb, 0x12, 0xd9, 0xcb, 0x13,
+  0xcb, 0x12, 0xd9, 0xed, 0x6a, 0xd9, 0xed, 0x6a, 0xd9, 0xcb, 0x23, 0xcb, 0x12, 0xd9, 0xcb, 0x13,
+  0xcb, 0x12, 0xd9, 0xed, 0x6a, 0xd9, 0xed, 0x6a, 0xd9, 0xd2, 0xac, 0x2e, 0xb7, 0xed, 0x42, 0xd9,
+  0xed, 0x42, 0xd9, 0x0c, 0xc3, 0xbc, 0x2e, 0x29, 0xd9, 0xed, 0x6a, 0xd9, 0x38, 0xee, 0x3c, 0x0c,
+  0xed, 0x42, 0xd9, 0xed, 0x42, 0xd9, 0xd0, 0x09, 0xd9, 0xed, 0x4a, 0xd9, 0x0d, 0xc9, 0xfd, 0x7e,
+  0x00, 0xfe, 0x41, 0x38, 0x06, 0xd6, 0x37, 0xfe, 0x10, 0x3f, 0xc9, 0xfe, 0x3a, 0x3f, 0xd8, 0xfe,
+  0x30, 0xc9, 0xfe, 0x3e, 0xd0, 0xfe, 0x3d, 0xd0, 0xfe, 0x3c, 0xc9, 0xfd, 0x23, 0xfe, 0x2b, 0xc8,
+  0xfe, 0x2d, 0xc8, 0xfd, 0x2b, 0xc9, 0xcd, 0x4f, 0x1f, 0xcd, 0x7f, 0x2f, 0xfd, 0x23, 0xfe, 0x2c,
+  0xc8, 0x3e, 0x05, 0x18, 0x0a, 0xcd, 0x7f, 0x2f, 0xfd, 0x23, 0xfe, 0x29, 0xc8, 0x3e, 0x1b, 0xc3,
+  0xc1, 0x07, 0xfd, 0x23, 0x08, 0xfa, 0x6b, 0x1f, 0x08, 0xe3, 0xd9, 0xe5, 0xd9, 0xf5, 0xc5, 0xe9,
+  0x08, 0xfa, 0x6b, 0x1f, 0xd9, 0xc1, 0xd9, 0x79, 0xc1, 0x47, 0xf1, 0xd9, 0xeb, 0xe1, 0xd9, 0xeb,
+  0xe1, 0xd9, 0xc5, 0xd9, 0xe6, 0x0f, 0xcd, 0x98, 0x2f, 0xaf, 0x08, 0xfd, 0x7e, 0x00, 0xc9, 0xfd,
+  0x7e, 0x00, 0xfe, 0x20, 0xc0, 0xfd, 0x23, 0xc3, 0x7f, 0x2f, 0xe5, 0x21, 0x2a, 0x1e, 0x18, 0x13,
+  0xe5, 0xd6, 0x8d, 0x21, 0x78, 0x1d, 0x18, 0x0b, 0x08, 0x78, 0xb1, 0xc4, 0xa4, 0x2c, 0x08, 0xe5,
+  0x21, 0xea, 0x1d, 0xc5, 0x87, 0x4f, 0x06, 0x00, 0x09, 0x7e, 0x23, 0x66, 0x6f, 0xc1, 0xe3, 0xc9,
+  0xdd, 0xe5, 0x3e, 0x01, 0x21, 0xee, 0x34, 0xcd, 0xf1, 0xff, 0xdd, 0x21, 0xee, 0x34, 0xdd, 0x6e,
+  0x00, 0xdd, 0x66, 0x01, 0xdd, 0x5e, 0x02, 0xdd, 0x56, 0x03, 0xdd, 0xe1, 0xc9, 0xdd, 0xe5, 0xdd,
+  0x21, 0xee, 0x34, 0xdd, 0x75, 0x00, 0xdd, 0x74, 0x01, 0xdd, 0x73, 0x02, 0xdd, 0x72, 0x03, 0x3e,
+  0x02, 0x21, 0xee, 0x34, 0xcd, 0xf1, 0xff, 0xdd, 0xe1, 0xc9, 0x3e, 0x0c, 0xc3, 0xee, 0xff, 0x3e,
+  0x81, 0xcd, 0xf4, 0xff, 0x7c, 0xb7, 0xc0, 0x7d, 0x37, 0xc9, 0x3e, 0x1f, 0xcd, 0xee, 0xff, 0x7b,
+  0xcd, 0xee, 0xff, 0x7d, 0xc3, 0xee, 0xff, 0x3e, 0x86, 0xcd, 0xf4, 0xff, 0x5d, 0x6c, 0x16, 0x00,
+  0x62, 0xc9, 0xcd, 0x46, 0x1f, 0xd9, 0xe5, 0xcd, 0x39, 0x2f, 0xcd, 0x46, 0x1f, 0xd9, 0xd1, 0xcd,
+  0x45, 0x2f, 0xdd, 0x21, 0xee, 0x34, 0xdd, 0x73, 0x00, 0xdd, 0x72, 0x01, 0xdd, 0x75, 0x02, 0xdd,
+  0x74, 0x03, 0x21, 0xee, 0x34, 0x3e, 0x09, 0xcd, 0xf1, 0xff, 0xdd, 0x7e, 0x04, 0x6f, 0xc6, 0x01,
+  0x9f, 0x67, 0xd9, 0x67, 0x6f, 0xaf, 0x4f, 0xc9, 0xcd, 0x5d, 0x1f, 0xd9, 0x3e, 0x80, 0xcd, 0xf4,
+  0xff, 0xaf, 0x18, 0xee, 0x06, 0x00, 0xdd, 0x21, 0xee, 0x34, 0xc5, 0xdd, 0xe5, 0xcd, 0x46, 0x1f,
+  0xd9, 0xdd, 0xe1, 0xc1, 0xdd, 0x75, 0x00, 0x78, 0xfe, 0x0d, 0x28, 0x0b, 0x04, 0xdd, 0x23, 0xc5,
+  0xdd, 0xe5, 0xcd, 0x39, 0x2f, 0x18, 0xe6, 0x21, 0xee, 0x34, 0x3e, 0x08, 0xcd, 0xf1, 0xff, 0xc3,
+  0xa2, 0x0d, 0x06, 0x00, 0xdd, 0x21, 0xee, 0x34, 0xc5, 0xdd, 0xe5, 0xcd, 0x46, 0x1f, 0xd9, 0xdd,
+  0xe1, 0xc1, 0xdd, 0x75, 0x00, 0xdd, 0x74, 0x01, 0xdd, 0x23, 0xdd, 0x23, 0x04, 0x04, 0x78, 0xfe,
+  0x08, 0x28, 0x08, 0xc5, 0xdd, 0xe5, 0xcd, 0x39, 0x2f, 0x18, 0xe0, 0x21, 0xee, 0x34, 0x3e, 0x07,
+  0xcd, 0xf1, 0xff, 0xc3, 0xa2, 0x0d, 0x2e, 0x04, 0xe5, 0x18, 0x0d, 0x2e, 0x05, 0xe5, 0x18, 0x08,
+  0xcd, 0x46, 0x1f, 0xd9, 0xe5, 0xcd, 0x39, 0x2f, 0xcd, 0x46, 0x1f, 0xd9, 0xe5, 0xcd, 0x39, 0x2f,
+  0xcd, 0x46, 0x1f, 0xd9, 0xd1, 0x3e, 0x19, 0xcd, 0xee, 0xff, 0xc1, 0x79, 0xcd, 0xee, 0xff, 0x7b,
+  0xcd, 0xee, 0xff, 0x7a, 0xcd, 0xee, 0xff, 0x7d, 0xcd, 0xee, 0xff, 0x7c, 0xcd, 0xee, 0xff, 0xc3,
+  0xa2, 0x0d, 0xcd, 0x46, 0x1f, 0xaf, 0x32, 0xfb, 0x37, 0xd9, 0x3e, 0x16, 0xcd, 0xee, 0xff, 0x7d,
+  0xcd, 0xee, 0xff, 0xc3, 0xa2, 0x0d, 0x3e, 0x10, 0xcd, 0xee, 0xff, 0xc3, 0xa2, 0x0d, 0xcd, 0x46,
+  0x1f, 0xd9, 0x3e, 0x11, 0xcd, 0xee, 0xff, 0x7d, 0xcd, 0xee, 0xff, 0xc3, 0xa2, 0x0d, 0xcd, 0x46,
+  0x1f, 0xd9, 0xe5, 0xcd, 0x39, 0x2f, 0xcd, 0x46, 0x1f, 0xd9, 0xd1, 0x3e, 0x12, 0xcd, 0xee, 0xff,
+  0x7b, 0xcd, 0xee, 0xff, 0x7d, 0xcd, 0xee, 0xff, 0xc3, 0xa2, 0x0d, 0xe1, 0x21, 0x4e, 0x31, 0xe5,
+  0xdd, 0x7e, 0x04, 0xdd, 0x5e, 0x14, 0xdd, 0x66, 0x64, 0xdd, 0x6e, 0x60, 0xfd, 0xe9, 0xf5, 0x7d,
+  0x6c, 0xd9, 0xc1, 0x67, 0x68, 0x79, 0xd9, 0x67, 0xc9, 0x3e, 0x82, 0xcd, 0xf4, 0xff, 0x22, 0xf2,
+  0x34, 0xc9, 0xcd, 0xff, 0x33, 0xd0, 0xcd, 0xff, 0x31, 0x3e, 0x80, 0xcd, 0xce, 0xff, 0xa7, 0xca,
+  0x45, 0x32, 0x67, 0x3e, 0x0d, 0x1b, 0xcd, 0x94, 0x31, 0xaf, 0xc3, 0xce, 0xff, 0x1a, 0xa7, 0x3e,
+  0xff, 0x28, 0x02, 0x13, 0x13, 0xcd, 0x9f, 0x31, 0xfe, 0xff, 0xc8, 0xcd, 0x9e, 0x31, 0xcd, 0x9e,
+  0x31, 0x13, 0x13, 0x13, 0xcd, 0x9f, 0x31, 0x13, 0xfe, 0x0d, 0x20, 0xf8, 0x18, 0xdf, 0x1b, 0x1a,
+  0xc3, 0xd4, 0xff, 0xcd, 0xe7, 0xff, 0xc3, 0xda, 0x0c, 0x22, 0xee, 0x34, 0xed, 0x53, 0xf0, 0x34,
+  0xcd, 0x59, 0x31, 0xaf, 0x32, 0xf4, 0x34, 0x3d, 0xcd, 0x3f, 0x32, 0xd5, 0xe1, 0x1a, 0xfe, 0x0d,
+  0x20, 0x3b, 0x13, 0x13, 0x13, 0x1a, 0x77, 0x1b, 0x1a, 0x47, 0x1b, 0x1a, 0x23, 0x70, 0x23, 0x77,
+  0x3c, 0x28, 0x26, 0x24, 0x28, 0x23, 0x25, 0x18, 0x05, 0xaf, 0x63, 0xc3, 0xce, 0xff, 0x13, 0x13,
+  0x13, 0x2b, 0x2b, 0x1a, 0xfe, 0x20, 0x20, 0x04, 0x35, 0x13, 0x18, 0xf7, 0x23, 0x23, 0x23, 0x1a,
+  0x77, 0x23, 0x13, 0xfe, 0x0d, 0x20, 0xf8, 0x18, 0xca, 0x2b, 0x2b, 0x36, 0x00, 0x37, 0xc9, 0x22,
+  0xee, 0x34, 0xe5, 0xd5, 0xaf, 0x5f, 0xcd, 0xda, 0xff, 0xfe, 0x04, 0x38, 0x2f, 0xd1, 0xd5, 0x13,
+  0xed, 0x53, 0xf8, 0x34, 0xeb, 0x23, 0x09, 0x22, 0xfc, 0x34, 0xcd, 0x59, 0x31, 0x22, 0xfa, 0x34,
+  0x22, 0xfe, 0x34, 0x21, 0xff, 0xff, 0x22, 0xf2, 0x34, 0x22, 0xf6, 0x34, 0x21, 0x00, 0xfb, 0x22,
+  0xf0, 0x34, 0x26, 0x00, 0x22, 0xf4, 0x34, 0xaf, 0xcd, 0x3f, 0x32, 0xa7, 0xd1, 0xe1, 0xc9, 0x21,
+  0xee, 0x34, 0xc3, 0xdd, 0xff, 0x3e, 0xc0, 0xcd, 0xd6, 0x07, 0x43, 0x61, 0x6e, 0x27, 0x74, 0x20,
+  0x73, 0x61, 0x76, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x3e, 0x40, 0x18, 0x06, 0x3e, 0x80,
+  0x18, 0x02, 0x3e, 0xc0, 0xc3, 0x7e, 0x21, 0xc1, 0xed, 0x53, 0xf0, 0x34, 0x5f, 0x79, 0xa7, 0x3e,
+  0x01, 0x20, 0x02, 0x3e, 0x03, 0xcd, 0xe0, 0x32, 0xc3, 0xa2, 0x0d, 0xe5, 0x63, 0xcd, 0xd4, 0xff,
+  0xe1, 0xc9, 0xfe, 0xeb, 0x28, 0x19, 0xfe, 0xe0, 0x28, 0x08, 0xfe, 0xf6, 0xca, 0x3d, 0x33, 0xc3,
+  0x76, 0x21, 0x2a, 0xe2, 0x37, 0xc3, 0x76, 0x21, 0xe5, 0x63, 0xcd, 0xd7, 0xff, 0xe1, 0xc9, 0x3e,
+  0x87, 0xcd, 0xf4, 0xff, 0x6c, 0xc3, 0x74, 0x21, 0x3e, 0x7f, 0x6b, 0xcd, 0xf4, 0xff, 0x7d, 0x2f,
+  0xa7, 0xc9, 0x18, 0xf4, 0x3e, 0x02, 0x21, 0x00, 0x00, 0x22, 0xf0, 0x34, 0xcd, 0xe0, 0x32, 0x2a,
+  0xee, 0x34, 0xed, 0x5b, 0xf0, 0x34, 0xc9, 0x21, 0x00, 0x00, 0xc3, 0xf4, 0xff, 0xaf, 0x18, 0xe6,
+  0xfe, 0x95, 0xca, 0x53, 0x0e, 0xfe, 0xdc, 0xc2, 0x35, 0x0e, 0x0e, 0x00, 0xc5, 0xc3, 0x7c, 0x14,
+  0x22, 0xee, 0x34, 0x21, 0xee, 0x34, 0xc3, 0xda, 0xff, 0xfd, 0x7e, 0x00, 0xfe, 0x24, 0x28, 0x06,
+  0xcd, 0xb0, 0x2f, 0xc3, 0xa2, 0x21, 0xfd, 0x23, 0x21, 0x00, 0x35, 0x36, 0x00, 0x3e, 0x0e, 0xcd,
+  0xf1, 0xff, 0x7e, 0x5f, 0xa7, 0x28, 0x02, 0x1e, 0x18, 0x16, 0x35, 0x3e, 0x80, 0xc9, 0xfd, 0x7e,
+  0x00, 0xfe, 0x24, 0x28, 0x06, 0xcd, 0x48, 0x17, 0xc3, 0xa3, 0x14, 0xfd, 0x23, 0xcd, 0x48, 0x17,
+  0xcd, 0x4f, 0x1f, 0x7b, 0xa7, 0x28, 0x0a, 0xd5, 0x62, 0x6b, 0x4b, 0x06, 0x00, 0x2b, 0xed, 0xb8,
+  0xd1, 0x21, 0x00, 0x35, 0x73, 0x3e, 0x0f, 0xcd, 0xf1, 0xff, 0xc3, 0xa2, 0x0d, 0xfd, 0x7e, 0x00,
+  0xfe, 0x24, 0x20, 0x02, 0xfd, 0x23, 0x2a, 0xee, 0x37, 0x11, 0x00, 0x35, 0x7e, 0x12, 0x13, 0x23,
+  0xcb, 0x7b, 0x20, 0x04, 0xa7, 0x20, 0xf5, 0x1d, 0x3e, 0x80, 0xc9, 0x3e, 0xff, 0xcd, 0x7b, 0x32,
+  0xcd, 0x86, 0x33, 0xcd, 0x80, 0x33, 0xcd, 0x7c, 0x33, 0xcd, 0x78, 0x33, 0xc1, 0x79, 0xa7, 0x28,
+  0x01, 0x3c, 0xcd, 0x7b, 0x32, 0xc3, 0x78, 0x0f, 0x7c, 0xc3, 0x7b, 0x32, 0x7d, 0xc3, 0x7b, 0x32,
+  0xd9, 0x7c, 0xd9, 0xc3, 0x7b, 0x32, 0xd9, 0x7d, 0xd9, 0xc3, 0x7b, 0x32, 0xf1, 0x6f, 0xdd, 0xe1,
+  0xf1, 0xd5, 0xeb, 0xcd, 0x01, 0x16, 0xd1, 0xc3, 0xc7, 0x12, 0xcd, 0xc4, 0x33, 0xcd, 0xbd, 0x33,
+  0xcd, 0xb8, 0x33, 0xcd, 0xb3, 0x33, 0xcd, 0x98, 0x32, 0x4f, 0xfe, 0x02, 0xda, 0xf5, 0x12, 0x0d,
+  0xc3, 0xf5, 0x12, 0xcd, 0x98, 0x32, 0x67, 0xc9, 0xcd, 0x98, 0x32, 0x6f, 0xc9, 0xcd, 0x98, 0x32,
+  0xd9, 0x67, 0xd9, 0xc9, 0xcd, 0x98, 0x32, 0xd9, 0x6f, 0xd9, 0xc9, 0xfd, 0x7e, 0x00, 0xfe, 0x0d,
+  0xc2, 0x4f, 0x1f, 0x2a, 0xdc, 0x37, 0x23, 0x23, 0x23, 0xcd, 0xf5, 0x33, 0xfe, 0xf4, 0xc2, 0x4f,
+  0x1f, 0xcd, 0xf5, 0x33, 0xfe, 0x3e, 0xc2, 0x4f, 0x1f, 0x11, 0x00, 0x35, 0x7e, 0x12, 0x13, 0x23,
+  0xfe, 0x0d, 0x20, 0xf8, 0xc9, 0x7e, 0x23, 0xfe, 0x20, 0x28, 0xfa, 0xc9, 0xe1, 0x37, 0xc9, 0xe5,
+  0x2a, 0xe2, 0x37, 0x09, 0x38, 0xf6, 0x7c, 0x3c, 0x21, 0x00, 0x00, 0x39, 0xbc, 0x30, 0xed, 0xe1,
+  0x22, 0xee, 0x34, 0x2a, 0xe2, 0x37, 0x36, 0x0d, 0x23, 0x13, 0x13, 0x1a, 0x77, 0x23, 0xfe, 0xff,
+  0x28, 0x1d, 0x1b, 0x1a, 0x77, 0x23, 0x1b, 0x1a, 0x77, 0xa7, 0x28, 0x0e, 0x23, 0x13, 0x13, 0x13,
+  0x1a, 0x77, 0x23, 0x13, 0xfe, 0x0d, 0x20, 0xf8, 0x18, 0xdf, 0x2b, 0x2b, 0x36, 0xff, 0x23, 0xed,
+  0x5b, 0xe2, 0x37, 0xed, 0x53, 0xf8, 0x34, 0xe5, 0xe5, 0xc3, 0x17, 0x32, 0x2a, 0x82, 0xff, 0xe5,
+  0xe1, 0x7e, 0x23, 0xe5, 0xc3, 0xd6, 0x07, 0x3a, 0x80, 0xff, 0xb7, 0xf0, 0x3e, 0x7e, 0xcd, 0xf4,
+  0xff, 0xc3, 0x78, 0x0e, 0x3e, 0xc3, 0x32, 0x38, 0x00, 0x21, 0x50, 0x34, 0x22, 0x39, 0x00, 0x21,
+  0x4c, 0x34, 0x22, 0xfa, 0xff, 0x3e, 0xe5, 0xcd, 0xc7, 0x32, 0x3e, 0xe6, 0xcd, 0xc7, 0x32, 0xcd,
+  0xbf, 0x34, 0xf5, 0x3e, 0x84, 0xcd, 0xf4, 0xff, 0xeb, 0x3e, 0x83, 0xcd, 0xf4, 0xff, 0x2e, 0x00,
+  0x7c, 0xfe, 0x38, 0x30, 0x02, 0x26, 0x38, 0xf1, 0xc9, 0xdd, 0x21, 0xee, 0x34, 0xdd, 0x75, 0x00,
+  0xdd, 0x74, 0x01, 0xdd, 0x36, 0x02, 0xff, 0xdd, 0x36, 0x03, 0x20, 0xdd, 0x36, 0x04, 0xff, 0x3e,
+  0xda, 0xcd, 0xc7, 0x32, 0xaf, 0x21, 0xee, 0x34, 0xcd, 0xf1, 0xff, 0x38, 0x9f, 0xaf, 0xc9, 0x11,
+  0x00, 0x35, 0x2a, 0x86, 0xff, 0x7e, 0x12, 0x23, 0x13, 0xfe, 0x0d, 0x20, 0xf8, 0x1d, 0xc9
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jun 29 14:25:56 2011 +0000
@@ -0,0 +1,741 @@
+/* BBC Basic emulator on NXP mbed by Gert van der Knokke
+ * Emulation of the Z80 CPU
+ * The z80 emulator is heavily modified by me (Gert)
+ * original Copyright (C) 1994 Ian Collier.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "mbed.h"
+#include "module.h"
+#include "z80.h"
+
+#define DEBUG false
+
+// define serial port for debug
+Serial linktopc(USBTX,USBRX);
+
+
+// VDU queue
+unsigned char vdu_queue[256];   // a somewhat large queue
+unsigned char queue_bytes=0;    // vdu queue pointer
+unsigned char oldchar;          // which VDU function needs the queue
+
+volatile unsigned char flag,oldy=0;
+
+
+int background_color;   // for clear screen
+int cursor_xpos;
+int cursor_ypos;
+int last_line_processed;
+int previous_line_found;
+
+int current_background_color;
+int current_text_color;
+
+
+// prepare mbed storage for local use
+LocalFileSystem local("local");               // Create the local filesystem under the name "local"
+
+// clear the screen
+void cls() {
+    putchar(0x0c);
+}
+
+// dummy function
+void set_cursor_position() {
+}
+
+// home cursor
+void home_cursor() {
+    cursor_xpos=0x00;  // ypos
+    cursor_ypos=0x00;  // xpos
+    set_cursor_position();
+}
+
+// prepare the screen
+void init_screen() {
+    current_background_color=0;  // set initial background color
+    current_text_color=7;  // initial text color attributes
+    cls();
+    home_cursor();
+}
+
+// handle VDU calls after all bytes are in queue
+// Note! queue is working front to back (255 is first, 0 is last)
+void do_handle_queue(unsigned char code) {
+    switch (code) {
+        case 0x11:  // select text color
+            current_text_color=vdu_queue[255];
+            break;
+        case 0x16:  // Mode
+            current_text_color=7;
+            current_background_color=0;
+            init_screen();
+            home_cursor();
+            break;
+        case 0x17:  // define character n
+            break;
+        case 0x1f:  // move cursor to x,y
+            cursor_xpos=vdu_queue[254];
+            cursor_ypos=vdu_queue[255];
+            set_cursor_position();
+            break;
+    }
+}
+
+// VDU OSWRCHR
+// this routine evaluates the stream characters
+// and prepares the queue if needed
+void printchar(unsigned char ch) {
+
+    // do we need more queue bytes ?
+    if (queue_bytes) {
+        vdu_queue[queue_bytes++]=ch;
+        // all bytes in queue, now handle the call
+        if (queue_bytes==0)
+            do_handle_queue(oldchar);
+
+    } else {
+
+        switch (ch) {
+            case 0x00:  // NULL
+                break;
+            case 0x08:  // CURSOR LEFT
+                putchar(0x08);
+                if (cursor_xpos>0) {
+                    cursor_xpos--;
+                    set_cursor_position();
+                }
+                break;
+            case 0x09:  // CURSOR RIGHT
+                if (cursor_xpos<39) {
+                    cursor_xpos++;
+                    set_cursor_position();
+                }
+                break;
+            case 0x0a:  // CURSOR DOWN
+                if (cursor_ypos<23) {
+                    cursor_ypos++;
+                    set_cursor_position();
+                } else {
+                    cursor_ypos=23;
+                }
+                break;
+            case 0x0b:  // CURSOR UP
+                cursor_ypos++;
+                if (cursor_ypos>0) {
+                    cursor_ypos--;
+                    set_cursor_position();
+                } else {
+                    cursor_ypos=0;
+                }
+                break;
+            case 0x0d:  // Carriage Return
+                cursor_xpos=0;
+                putchar(0x0d);
+                putchar(0x0a);
+                set_cursor_position();
+                break;
+            case 0x0c:  // CLEAR TEXT WINDOW
+            case 0x10:  // CLEAR GRAPHIC WINDOW
+                cls();
+                cursor_xpos=0;
+                cursor_ypos=0;
+                set_cursor_position();
+                break;
+            case 0x11:    // set TEXT color
+                oldchar=ch;         // this was the code of the initial call
+                queue_bytes=256-1;      // for this call we need one more byte
+                break;
+            case 0x14:    // reset colors
+                current_text_color=7;
+                current_background_color=0;
+                break;
+            case 0x16:  // MODE select
+                oldchar=ch;
+                queue_bytes=256-1;
+                break;
+            case 0x17:  // define character n
+                break;
+            case 0x1e:
+                cursor_xpos=0;
+                cursor_ypos=0;
+                set_cursor_position();
+                break;
+            case 0x1f:              // set cursor to position X,Y
+                oldchar=ch;         // this was the code of the initial call
+                queue_bytes=256-2;      // for this call we need two more bytes
+                break;
+                // all else is put on screen literally
+            default:
+                putchar(ch);
+                break;
+        }
+    }
+}
+
+
+void init_ramtop() {
+
+
+    // set all MOS calls to illegal opcode 0xed55
+    // that code is trapped by a mbed routine
+    wrmem(OSWRCH,0xed);
+    wrmem(OSWRCH+1,0x55);
+
+    wrmem(OSWORD,0xed);
+    wrmem(OSWORD+1,0x55);
+
+    wrmem(OSBYTE,0xed);
+    wrmem(OSBYTE+1,0x55);
+
+    wrmem(OSRDCH,0xed);
+    wrmem(OSRDCH+1,0x55);
+
+    wrmem(OSNEWL,0xed);
+    wrmem(OSNEWL+1,0x55);
+
+    wrmem(OSASCI,0xed);
+    wrmem(OSASCI+1,0x55);
+
+    wrmem(OSRDCH,0xed);
+    wrmem(OSRDCH+1,0x55);
+
+    wrmem(MAINVDU,0xed);
+    wrmem(MAINVDU+1,0x55);
+
+    wrmem(GSINIT,0xed);
+    wrmem(GSINIT+1,0x55);
+
+    wrmem(GSREAD,0xed);
+    wrmem(GSREAD+1,0x55);
+
+    wrmem(OSRDRM,0xed);
+    wrmem(OSRDRM+1,0x55);
+
+    wrmem(OSEVEN,0xed);
+    wrmem(OSEVEN+1,0x55);
+
+    wrmem(OSCLI,0xed);
+    wrmem(OSCLI+1,0x55);
+
+    wrmem(OSFILE,0xed);
+    wrmem(OSFILE+1,0x55);
+
+    wrmem(CMDPTR,0xf0); // pointer to CR terminated string (auto start filename)
+    wrmem(CMDPTR+1,0x00); // it is set here to 0x00f0
+
+    wrmem(BRKV,0x00);   // break vector
+    wrmem(BRKV+1,0x00);
+
+    wrmem(FAULT,0x38);  // fault vector
+    wrmem(FAULT+1,0x00);
+}
+
+unsigned char getkey() {
+    unsigned char key=0x00;
+    if (linktopc.readable())        // get USB status
+        key=linktopc.getc();        // get ASCII key
+    return key;
+}
+
+// crude getline routine
+void mygets(int ad,int max,unsigned char minasc,unsigned char maxasc) {
+    int n=0;
+    int key=0;
+
+    bool eflag=1;
+
+    // show cursor
+    set_cursor_position();
+
+    while (eflag) {
+//        key=getkey();
+#if !DEBUG
+        // USB serial data ? then override key  (only when NOT in debug mode)
+        if (linktopc.readable())        // get USB status
+            key=linktopc.getc();        // get ASCII key code
+        else key=0;
+        // key=getchar();  // BLOCKING MODE
+#endif
+
+        if (key)    // printf("got key code: %02x\n\r",key);
+
+            // only ASCII should arrive here
+            switch (key) {
+                case 0x00:  // no key
+                    break;
+                case 0x0d:  // Enter or Return
+                    wrmem(ad+n,key);
+                    h=n;
+                    // clear carry flag
+                    anda(a); // z80 way of clearing carry...
+                    eflag=0; // terminate the loop
+                    printchar(key);
+                    printchar(0x0a);
+                    break;
+                case 0x1b:    // Escape
+                    wrmem(ad+n,key);
+                    // set carry flag
+                    f=(f&0xc4)|1|(a&0x28);
+                    eflag=0;
+                    h=n;
+                    break;
+                case 0x15:    // CTRL-U (clear input)
+                    while (n) {
+
+                        printchar(0x08);
+                        printchar(0x20);
+                        printchar(0x08);
+                        n--;
+                    }
+                    wrmem(ad,0x0d);
+                    break;
+                case 0x7f:   // DELETE
+                    if (n) {
+                        n--;
+                        printchar(0x08);    // cursor left
+                        printchar(0x20);    // delete character by printing a space
+                        printchar(0x08);    // cursor left
+                        wrmem(ad+n,0x20);   // overwrite with space
+                    }
+                    break;
+                default:    // all else
+                    // keep within maximum lenght and given ascii limits
+                    if ((key>=minasc) && (key<=maxasc) && n<max) {
+                        wrmem(ad+n,key);
+                        n++;
+                        printchar(key);
+                    }
+                    break;
+            }
+    }
+}
+
+
+// OSWORD
+void do_osword() {
+    int ad,n;
+    char buf[40];
+    time_t seconds;
+
+    // printf("OSWORD called with PC=%04x A=%02x HL=%02x%02x\n\r",pc,a,h,l);
+    switch (a) {
+
+        case 0x00:  // get a line from the keyboard/input channel
+            ad=(h<<8)+l;
+//        printf("Control block:\n\r");
+//        printf("buffer address %02x%02x\n\r",rdmem(ad+1),rdmem(ad));
+//        printf("maximum length: %d\n\r",rdmem(ad+2));
+//        printf("minimum ASCII value %d\n\r",rdmem(ad+3));
+//        printf("maximum ASCII value %d\n\r",rdmem(ad+4));
+
+            mygets((rdmem(ad+1)<<8)+rdmem(ad),rdmem(ad+2),rdmem(ad+3),rdmem(ad+4));
+
+            break;
+        case 0x01:  // read systemclock (long integer)
+            break;
+        case 0x02:  // write systemclock (long integer)
+            break;
+        case 0x07:  // emit a sound from the sound library (0-7)
+            break;
+        case 0x0e:  // read TIME$ (not present in original BBC Basic)
+            ad=hl;              // get pointer to function number
+            switch (rdmem(hl)) { // select function number
+                case 0:     // return time string
+                    seconds = time(NULL);   // get current time from mbed RTC
+                    strftime(buf,40, "%a,%d %m %Y.%H:%M:%S\r", localtime(&seconds));   // write to temporary buffer
+                    n=0;
+                    while (buf[n]) wrmem(ad++,buf[n++]);    // copy to pointer from HL
+                    break;
+                case 1:     // return BCD values of clock
+                    // On exit:
+                    //  XY?0=year (&00-&99)
+                    //  XY?1=month (&01-&12)
+                    //  XY?2=date (&01-&31)
+                    //  XY?3=day of week (&01-&07, Sun-Sat)
+                    //  XY?4=hours (&00-&23)
+                    //  XY?5=minutes (&00-&59)
+                    //  XY?6=seconds (&00-&59).
+                    //
+                    // A year value of &80-&99 represents 1980-1999, a value of
+                    // &00-&79 represents 2000-2079.
+                    //
+                    break;
+                case 2:     // Convert BCD to string.
+                    // On entry:
+                    //  XY+1..7=BCD value
+                    // On exit:
+                    // XY+1..25=CR-terminated string
+                    break;
+            }
+            break;
+        case 0x0f:  // write TIME$ (not present in original BBC Basic)
+            //        On entry:
+            // XY?0=function code
+            // XY+1.. value to use.
+            // Functions are:
+            // 8 - Set time to value in format "HH:MM:SS"
+            // 16 - Set date to value in format "Day,DD Mon Year"
+            // 24 - Set time and date to value in format
+            // "Day,DD Mon Year.HH:MM:SS"
+            n=0;
+            ad=hl;
+            // printf(" write time$ function %d\n\r",rdmem(ad));
+            ad++;
+            while (rdmem(ad)!=0x0d) buf[n++]=rdmem(ad++);  // copy timestring to buffer
+            buf[n]=0;
+            // printf("trying to set time from %s\n\r",buf);
+            break;
+    }
+}
+
+// OSBYTE
+// on 6502 A register and X,Y are used for Low,High parameters
+// Z80 uses L and H  (so X=L and H=Y <-> L=X and Y=H)
+void do_osbyte() {
+    unsigned char temp;
+
+    // printf("OSBYTE called with PC=%04x A=%02x H=%02x L=%02x\n\r",pc,a,h,l);
+    switch (a) {
+        case 0x00:      // NULL
+            l=0xff;
+            break;
+        case 0x13:      // ASCII 19
+            break;
+        case 0x7c:    // clear ESCAPE state
+            wrmem(0xff80,rdmem(0xff80)&0x7f);
+            break;
+        case 0x7d:    // set ESCAPE state
+            wrmem(0xff80,rdmem(0xff80)|0x80);
+            break;
+        case 0x7e:    // acknowledge ESCAPE state ? (CLOSE ALL!)
+            wrmem(0xff80,rdmem(0xff80)&0x7f);
+            break;
+        case 0x7f:    // read EOF on channel
+            l=0x01;
+            break;
+        case 0x80:    // read ADVAL(hl)
+            h=0;
+            l=0;
+            break;
+        case 0x81:    // read key within time limit 'hl' centiseconds
+            temp=hl;        // get timeout value (100th seconds)
+            do {
+                l=getkey();
+                wait(0.01);
+            } while ((temp--) && (!l));
+
+            if (l) {    // we got a key
+                if (l==0x1b) { // Escape ?
+                    f=(f&0xc4)|1|(a&0x28);  // set carry
+                    h=0x1b;
+                } else {
+                    anda(a); // clear carry
+                    h=0x00; // clear h
+                }
+            } else {    // timeout
+                f=(f&0xc4)|1|(a&0x28);  // set carry
+                h=0xff;                 // signal no key
+            }
+            break;                     // scan keyboard etc
+        case 0x82:
+            h=l=0;
+            break;                              // Machine high order address
+        case 0x83:
+            h=PAGE>>8;
+            l=(PAGE & 0xff);
+            break;                       // lowest available memory address (PAGE)
+        case 0x84:  // highest available memory address (HIMEM)
+            h=RAMEND>>8;
+            l=RAMEND & 0xff;
+            break;
+        case 0x85:  // read bottom of display RAM for a specific mode
+            h=0x80;
+            l=0x00;
+            break;
+        case 0x86:    // return H=VPOS, L=POS
+            h=cursor_ypos;
+            l=cursor_xpos;
+            break;
+        case 0x87:  // L=character on screen at cursor position
+            h=7;
+            l=0;
+            break;
+        case 0xda:    // read/write the number of items in the VDU queue
+            // on return H contains the new value, L the old
+            temp=queue_bytes;
+            queue_bytes=(queue_bytes & h)^l;
+            h=queue_bytes;
+            l=temp;
+            break;   // read/write the number of items in the VDU queue
+    }
+//   show_registers();
+//   wait(0.1);
+}
+
+void do_osreadchar() {
+    a=getchar();
+    // test for ESCAPE
+    if (a==27) {
+        f=(f&0xc4)|1|(a&0x28);
+        wrmem(0xff80,rdmem(0xff80)|0x80);
+    }
+}
+
+void do_osnewline() {
+    printchar(0x0a);
+    printchar(0x0d);
+    a=0x0d;
+}
+
+void do_osasci() {
+    if (a==0x0d) do_osnewline();
+    else printchar(a);
+}
+
+void do_mainvdu() {
+    printchar(a);
+}
+
+void do_gsinit() {
+    printf("GSINIT called with PC=%04x A=%02x\n\r",pc,a);
+}
+
+void do_gsread() {
+}
+
+void do_osrdrm() {
+    printf("OSRDRM called with PC=%04x A=%02x H=%02x L=%02x\n\r",pc,a,h,l);
+}
+
+void do_oseven() {
+    printf("OSEVEN called with PC=%04x A=%02x H=%02x L=%02x\n\r",pc,a,h,l);
+}
+
+void do_oscli() {
+    printf("OSCLI called with PC=%04x A=%02x H=%02x L=%02x\n\r",pc,a,h,l);
+    do {
+        a=rdmem((h<<8)+l);
+        if (!++l)h++;
+        putchar(a);
+    } while (a!=0x0d);
+}
+
+void do_osfile() {
+    char buffer[200];
+    int n=0;
+    FILE *fp;
+    // get address of control block
+    int controlblock=hl;
+    int offset=rdmem(controlblock)+(rdmem(controlblock+1)<<8);
+    // create a kludgy pointer from this offset to the filename
+    char *filename=(char *)(ram+offset-RAMSTART);
+    long load_address=rdmem(controlblock+2)+(rdmem(controlblock+3)<<8)+(rdmem(controlblock+4)<<16)+(rdmem(controlblock+5)<<24);
+    long execution_address=rdmem(controlblock+6)+(rdmem(controlblock+7)<<8)+(rdmem(controlblock+8)<<16)+(rdmem(controlblock+9)<<24);
+    long start_or_length=rdmem(controlblock+10)+(rdmem(controlblock+11)<<8)+(rdmem(controlblock+12)<<16)+(rdmem(controlblock+13)<<24);
+    long end_address_or_attributes=rdmem(controlblock+14)+(rdmem(controlblock+15)<<8)+(rdmem(controlblock+16)<<16)+(rdmem(controlblock+17)<<24);
+
+
+    // printf("OSFILE called with PC=%04x A=%02x H=%02x L=%02x\n\r",pc,a,h,l);
+
+    // for (n=0; n<=0x11; n++) printf("offset %02x value %02x\n\r",n,rdmem(controlblock+n));
+
+    n=0;
+    while (filename[n]!=0x0d) n++;
+    // overwrite 0x0d with end of string
+    filename[n]=0x00;
+
+    // now determine what to do
+    switch (a) {
+        case 0x00: // save a section of memory as a named file
+            sprintf(buffer,"/local/%s",filename);
+            // printf("Saving file %s load adr:%08lx exec adr:%08lx start/length%08lx end/attr:%08lx\n\r",filename,load_address,execution_address,start_or_length,end_address_or_attributes);
+            fp=fopen(buffer, "w");
+            if (fp) {
+                n=start_or_length;
+                while (n!=end_address_or_attributes) fputc(rdmem(n++),fp);
+                fclose(fp);
+                a=1;
+            } else {
+                // printf("could not write %s\n\r",buffer);
+                a=0;
+                pc=rdmem(0xfffa)+(rdmem(0xfffb)<<8);    // do BRK
+            }
+            break;
+        case 0x01: // write the catalogue information (only) for the named file (disc only)
+            break;
+        case 0x02: // write the load address  (only) for the named file (disc only)
+            break;
+        case 0x03: // write the execution address  (only) for the named file (disc only)
+            break;
+        case 0x04: // write the attributes  (only) for the named file (disc only)
+            break;
+        case 0x05: // read the named file's catalogue information, place file type in A (disc only)
+            break;
+        case 0x06: // delete the named file (disc only)
+            break;
+        case 0xff: // load the named file and read the named file's catalogue information
+            sprintf(buffer,"/local/%s",filename);
+            // printf("Loading file %s load adr:%08lx exec adr:%08lx start/length%08lx end/attr:%08lx\n\r",buffer,load_address,execution_address,start_or_length,end_address_or_attributes);
+            fp = fopen(buffer, "r");
+            if (fp) {
+                n=load_address;
+                while (!feof(fp)) wrmem(n++,fgetc(fp));
+                fclose(fp);
+                a=1;    // file found
+            } else {
+                // printf("Could not open %s\n",buffer);
+                a=0;
+                pc=rdmem(0xfffa)+(rdmem(0xfffb)<<8);    // do BRK
+            }
+            break;
+    }
+}
+
+void terminalgets(char *buffer) {
+    int n=0;
+    int key=0;
+    do {
+        key=getchar();
+        buffer[n]=key;
+        putchar(key);
+        if (n<16) n++;
+    } while (key != 0x0d);
+    buffer[n]=0;
+}
+
+
+// here the OS calls are recognized and
+// diverted to the mbed routines.
+// this needs to be replaced by native Z80 code
+void do_mos() {
+    //  printf("Entering MOS emulation with PC %04x\n\r",pc);
+
+    // compensate pc for length of ED55 opcode
+    switch (pc-2) {
+        case OSBYTE:
+            do_osbyte();
+            break;
+        case OSWORD:
+            do_osword();
+            break;
+        case OSWRCH:
+            printchar(a);
+            break;
+        case OSRDCH:
+            do_osreadchar();
+            break;
+        case OSNEWL:
+            do_osnewline();
+            break;
+        case OSASCI:
+            do_osasci();
+            break;
+        case MAINVDU:
+            do_mainvdu();
+            break;
+        case GSINIT:
+            do_gsinit();
+            break;
+        case GSREAD:
+            do_gsread();
+            break;
+        case OSRDRM:
+            do_osrdrm();
+            break;
+        case OSEVEN:
+            do_oseven();
+            break;
+        case OSCLI:
+            do_oscli();
+            break;
+        case OSFILE:
+            do_osfile();
+            break;
+    }
+}
+
+void listdir(void) {
+    DIR *d;
+    struct dirent *p;
+
+    d = opendir("/sd");
+    if (d != NULL) {
+        while ((p = readdir(d)) != NULL) {
+            printf(" - %s\r\n", p->d_name);
+        }
+    } else {
+        printf("Could not open directory!\n");
+    }
+    closedir(d);
+}
+
+
+
+
+
+// ================================================================
+//  main loop
+// ================================================================
+int  main() {
+
+    // serial port on at 115200 baud
+    linktopc.baud(115200);
+    setbuf(stdout, NULL); // no buffering for this filehandle
+
+    // reset all Z80 registers to some initial values
+    a=f=b=c=d=e=h=l=a1=f1=b1=c1=d1=e1=h1=l1=i=iff1=iff2=im=r=0;
+    ixoriy=new_ixoriy=0;
+    ix=iy=sp=pc=0;
+
+    queue_bytes=0;
+
+    // init MOS vectors
+    init_ramtop();
+
+    init_screen();
+    home_cursor();
+
+    // endless loop
+    while (1) {
+        //    wait(0.01);
+        r++;
+        // this is some optimization for the IX and IY opcodes (DD/FD)
+        ixoriy=new_ixoriy;
+        new_ixoriy=0;
+
+        // fetch opcode and execute, the include does all the heavy decoding
+        switch (fetch(pc++)) {
+#include "z80ops.h"
+        }
+
+        // next is the interrupt emulator (only IM1 mode)
+        // interrupt pending? if new_ixoriy is set or iff1==0 don't do interrupt yet (continue DD/FD opcode)
+        //    if (intpend && !new_ixoriy && iff1) {
+        // are we HALT-ed ? then resume
+        //      if (fetch(pc)==0x76) pc++;
+
+        // block further interrupts for now
+        //    iff1=0;
+
+        // do the call to 00x38
+        //   push2(pc);   // save old pc
+        //  pc=0x0038;   // setup new pc
+        //  intpend=0;   // release interrupt pending flag;
+        //   } // if intpend
+    } // while
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jun 29 14:25:56 2011 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/module.h	Wed Jun 29 14:25:56 2011 +0000
@@ -0,0 +1,99 @@
+// -------------------------------------------------------------
+// BBC Basic hardware emulation part
+// -------------------------------------------------------------
+
+#include "bbc_0100.h"
+
+#include "mbed.h"
+#define byte unsigned char
+#define word unsigned short
+
+// some defaults
+#define ESCFLG  0xff80          // escape flag
+#define FAULT   0xff82          // fault address
+#define DEFERR  0xff84          // default error handler
+#define CMDPTR  0xff86          // command line tail
+#define SCRATCHPAD  0xff88      // Basic scratchpad area
+#define RESERVED    0xff9a      
+#define OSRDRM  0xffb9          // read byte in paged ROM
+#define MAINVDU 0xffbc          // main VDU character output entry point
+#define OSEVEN  0xffbf          // generate an event
+#define GSINIT  0xffc2          // general string input initialise routine
+#define GSREAD  0xffc5          // read character from string input
+#define UKCMD   0xffc9          // unknown command
+#define OSFSC   0xffcb          // filing system control
+#define OSFIND  0xffce          // open or close a file
+#define OSGBPB  0xffd1          // multiple byte access
+#define OSBPUT  0xffd4          // put a byte to a file
+#define OSBGET  0xffd7          // get a byte from a file
+#define OSARGS  0xffda          // read or set file arguments
+#define OSFILE  0xffdd          // load or save a file
+#define OSRDCH  0xffe0          // input a character
+#define OSASCI  0xffe3          // print a character with CR converted to LF, CR
+#define OSNEWL  0xffe7          // print a LF, CR sequence
+#define OSWRCH  0xffee          // print a character
+#define OSWORD  0xfff1          // do an OSWORD call
+#define OSBYTE  0xfff4          // do an OSBYTE call
+#define OSCLI   0xfff7          // interpret a command
+#define BRKV    0xfffa          // FAULT vector
+
+// default CP/M ram pages
+#define RAMSIZE (word)0x4000    // 16K ram
+#define RAMSTART 0x34ee
+#define RAMEND   RAMSTART+RAMSIZE
+#define PAGE     0x3800
+
+// the emulated ram space
+volatile unsigned char ram[RAMSIZE];
+
+// ramtop space with vectors
+volatile unsigned char ramtop[0x80];
+
+
+// read from memory space
+unsigned char rdmem(word addr) {
+    extern volatile unsigned short pc;
+ 
+     // all rom space
+    if (addr<RAMSTART) {
+        return rom[addr];
+    }
+
+    // ramtop with vectors
+    if ((addr >=0xff80) && (addr <=0xffff)) {
+        return ramtop[addr-0xff80];
+    }
+
+    // relocate $3400
+    if ((addr >= RAMSTART) && (addr < RAMEND)) {
+        return ram[addr-0x34ee];
+    }
+    return 0xff;   // non existant memory reads as 0xff
+}
+
+// write to memory space
+void wrmem (word addr, byte val) {
+    extern volatile unsigned short pc;
+
+    // memtop vector space
+    if ((addr >=0xff80) && (addr <=0xffff)) {
+        ramtop[addr-0xff80]=val;
+        return;
+    }
+    // printf("MEMW %04x %02x\n\r",addr,val);
+    if ((addr >= RAMSTART) && (addr < RAMEND)) {
+        ram[addr-RAMSTART] = val;
+    } 
+}
+
+// write a byte to IO space
+void out(unsigned char addr, unsigned char val) {
+    printf("IO out called %02d, %02d\n\r",addr,val);
+}
+
+// read a byte from IO space
+unsigned char in(unsigned char addr) {
+    printf("IO in called %02d\n\r",addr);
+    return 0xff;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/z80/cbops.h	Wed Jun 29 14:25:56 2011 +0000
@@ -0,0 +1,174 @@
+/* Emulations of the CB/DD and FD operations of the Z80 instruction set.
+ * Copyright (C) 1994 Ian Collier.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#define var_t   unsigned char t
+#define rlc(x)  (x=(x<<1)|(x>>7),rflags(x,x&1))
+#define rrc(x)  do{var_t=x&1;x=(x>>1)|(t<<7);rflags(x,t);}while(0)
+#define rl(x)   do{var_t=x>>7;x=(x<<1)|(f&1);rflags(x,t);}while(0)
+#define rr(x)   do{var_t=x&1;x=(x>>1)|(f<<7);rflags(x,t);}while(0)
+#define sla(x)  do{var_t=x>>7;x<<=1;rflags(x,t);}while(0)
+#define sra(x)  do{var_t=x&1;x=((signed char)x)>>1;rflags(x,t);}while(0)
+#define sll(x)  do{var_t=x>>7;x=(x<<1)|1;rflags(x,t);}while(0)
+#define srl(x)  do{var_t=x&1;x>>=1;rflags(x,t);}while(0)
+
+#define rflags(x,c) (f=(c)|(x&0xa8)|((!x)<<6)|parity(x))
+
+#define bit(n,x) (f=(f&1)|((x&(1<<n))?0x10:0x54)|(x&0x28))
+#define set(n,x) (x|=(1<<n))
+#define res(n,x) (x&=~(1<<n))
+
+{
+   /* reg/val are initialised to stop gcc's (incorrect) warning,
+    * and static to save initialising them every time.
+    */
+   static unsigned char reg=0,val=0;
+   unsigned short addr;
+   unsigned char op;
+  if(ixoriy){
+    // if IX or IY addressing add the '+d' part
+     addr=(ixoriy==1?ix:iy)+(signed char)fetch(pc);
+     pc++;
+     op=fetch(pc);
+     reg=op&7;
+     op=(op&0xf8)|6;
+  }
+  else{
+      op=fetch(pc);
+      addr=hl;
+  }
+   pc++;
+
+   if(op<64)switch(op){
+   case  0: rlc(b); break;
+   case  1: rlc(c); break;
+   case  2: rlc(d); break;
+   case  3: rlc(e); break;
+   case  4: rlc(h); break;
+   case  5: rlc(l); break;
+   case  6: val=fetch(addr);rlc(val);store(addr,val);break;
+   case  7: rlc(a); break;
+   case  8: rrc(b); break;
+   case  9: rrc(c); break;
+   case 10: rrc(d); break;
+   case 11: rrc(e); break;
+   case 12: rrc(h); break;
+   case 13: rrc(l); break;
+   case 14: val=fetch(addr);rrc(val);store(addr,val);break;
+   case 15: rrc(a); break;
+   case 0x10: rl(b); break;
+   case 0x11: rl(c); break;
+   case 0x12: rl(d); break;
+   case 0x13: rl(e); break;
+   case 0x14: rl(h); break;
+   case 0x15: rl(l); break;
+   case 0x16: val=fetch(addr);rl(val);store(addr,val);break;
+   case 0x17: rl(a); break;
+   case 0x18: rr(b); break;
+   case 0x19: rr(c); break;
+   case 0x1a: rr(d); break;
+   case 0x1b: rr(e); break;
+   case 0x1c: rr(h); break;
+   case 0x1d: rr(l); break;
+   case 0x1e: val=fetch(addr);rr(val);store(addr,val);break;
+   case 0x1f: rr(a); break;
+   case 0x20: sla(b); break;
+   case 0x21: sla(c); break;
+   case 0x22: sla(d); break;
+   case 0x23: sla(e); break;
+   case 0x24: sla(h); break;
+   case 0x25: sla(l); break;
+   case 0x26: val=fetch(addr);sla(val);store(addr,val);break;
+   case 0x27: sla(a); break;
+   case 0x28: sra(b); break;
+   case 0x29: sra(c); break;
+   case 0x2a: sra(d); break;
+   case 0x2b: sra(e); break;
+   case 0x2c: sra(h); break;
+   case 0x2d: sra(l); break;
+   case 0x2e: val=fetch(addr);sra(val);store(addr,val);break;
+   case 0x2f: sra(a); break;
+   case 0x30: sll(b); break;
+   case 0x31: sll(c); break;
+   case 0x32: sll(d); break;
+   case 0x33: sll(e); break;
+   case 0x34: sll(h); break;
+   case 0x35: sll(l); break;
+   case 0x36: val=fetch(addr);sll(val);store(addr,val);break;
+   case 0x37: sll(a); break;
+   case 0x38: srl(b); break;
+   case 0x39: srl(c); break;
+   case 0x3a: srl(d); break;
+   case 0x3b: srl(e); break;
+   case 0x3c: srl(h); break;
+   case 0x3d: srl(l); break;
+   case 0x3e: val=fetch(addr);srl(val);store(addr,val);break;
+   case 0x3f: srl(a); break;
+   }
+   else{
+      unsigned char n=(op>>3)&7;
+      switch(op&0xc7){
+      case 0x40: bit(n,b); break;
+      case 0x41: bit(n,c); break;
+      case 0x42: bit(n,d); break;
+      case 0x43: bit(n,e); break;
+      case 0x44: bit(n,h); break;
+      case 0x45: bit(n,l); break;
+      case 0x46: val=fetch(addr);bit(n,val);break;
+      case 0x47: bit(n,a); break;
+      case 0x80: res(n,b); break;
+      case 0x81: res(n,c); break;
+      case 0x82: res(n,d); break;
+      case 0x83: res(n,e); break;
+      case 0x84: res(n,h); break;
+      case 0x85: res(n,l); break;
+      case 0x86: val=fetch(addr);res(n,val);store(addr,val);break;
+      case 0x87: res(n,a); break;
+      case 0xc0: set(n,b); break;
+      case 0xc1: set(n,c); break;
+      case 0xc2: set(n,d); break;
+      case 0xc3: set(n,e); break;
+      case 0xc4: set(n,h); break;
+      case 0xc5: set(n,l); break;
+      case 0xc6: val=fetch(addr);set(n,val);store(addr,val);break;
+      case 0xc7: set(n,a); break;
+      }
+   }
+   if(ixoriy)switch(reg){
+      case 0:b=val; break;
+      case 1:c=val; break;
+      case 2:d=val; break;
+      case 3:e=val; break;
+      case 4:h=val; break;
+      case 5:l=val; break;
+      case 7:a=val; break;
+   }
+}
+
+#undef var_t
+#undef rlc
+#undef rrc
+#undef rl
+#undef rr
+#undef sla
+#undef sra
+#undef sll
+#undef srl
+#undef rflags
+#undef bit
+#undef set
+#undef res
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/z80/edops.h	Wed Jun 29 14:25:56 2011 +0000
@@ -0,0 +1,590 @@
+/* Emulations of the ED operations of the Z80 instruction set.
+ * Copyright (C) 1994 Ian Collier.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#define input(var) {  var=in(c);\
+                     f=(f&1)|(var&0xa8)|((!var)<<6)|parity(var);\
+                   }
+#define sbchl(x) {    unsigned short z=(x);\
+                      unsigned long t=(hl-z-cy)&0x1ffff;\
+                      f=((t>>8)&0xa8)|(t>>16)|2|\
+                        (((hl&0xfff)<(z&0xfff)+cy)<<4)|\
+                        (((hl^z)&(hl^t)&0x8000)>>13)|\
+                        ((!(t&0xffff))<<6)|2;\
+                      l=t;\
+                      h=t>>8;\
+                   }
+
+#define adchl(x) {    unsigned short z=(x);\
+                      unsigned long t=hl+z+cy;\
+                      f=((t>>8)&0xa8)|(t>>16)|\
+                        (((hl&0xfff)+(z&0xfff)+cy>0xfff)<<4)|\
+                        (((~hl^z)&(hl^t)&0x8000)>>13)|\
+                        ((!(t&0xffff))<<6)|2;\
+                      l=t;\
+                      h=t>>8;\
+                 }
+
+#define neg (a=-a,\
+            f=(a&0xa8)|((!a)<<6)|(((a&15)>0)<<4)|((a==128)<<2)|2|(a>0))
+
+{
+   unsigned char op=fetch(pc);
+   pc++;
+   
+// IN B,(C)   
+   switch(op){
+instr(0x40,8);
+   input(b);
+endinstr;
+
+// OUT (C),B
+instr(0x41,8);
+   out(c,b);
+endinstr;
+
+// SBC HL,BC
+instr(0x42,11);
+   sbchl(bc);
+endinstr;
+
+// LD (nn),BC
+instr(0x43,16);
+   {unsigned short addr=fetch2(pc);
+    pc+=2;
+    store2b(addr,b,c);
+   }
+endinstr;
+
+// NEG
+instr(0x44,4);
+   neg;
+endinstr;
+
+// RETN
+instr(0x45,4);
+   iff1=iff2;
+   ret;
+endinstr;
+
+// IM 0
+instr(0x46,4);
+   im=0;
+endinstr;
+
+// LD I,A
+instr(0x47,5);
+   i=a;
+endinstr;
+
+// IN C,(C)
+instr(0x48,8);
+   input(c);
+endinstr;
+
+// OUT (C),C
+instr(0x49,8);
+   out(c,c);
+endinstr;
+
+// ADC HL,BC
+instr(0x4a,11);
+   adchl(bc);
+endinstr;
+
+// LD BC,(nn)
+instr(0x4b,16);
+   {unsigned short addr=fetch2(pc);
+    pc+=2;
+    c=fetch(addr);
+    b=fetch(addr+1);
+   }
+endinstr;
+
+// ?
+instr(0x4c,4);
+   neg;
+endinstr;
+
+// RETI
+instr(0x4d,4);
+   ret;
+endinstr;
+
+// ?
+instr(0x4e,4);
+   im=1;
+endinstr;
+
+// ?
+instr(0x4f,5);
+   r=a;
+endinstr;
+
+// IN D,(C)
+instr(0x50,8);
+   input(d);
+endinstr;
+
+// OUT (C),D
+instr(0x51,8);
+   out(c,d);
+endinstr;
+
+// SBC HL,DE
+instr(0x52,11);
+   sbchl(de);
+endinstr;
+
+// LD (nn),DE
+instr(0x53,16);
+   {unsigned short addr=fetch2(pc);
+    pc+=2;
+    store2b(addr,d,e);
+   }
+endinstr;
+
+// ?
+instr(0x54,4);
+   neg;
+endinstr;
+
+// my opcode for replacing the MOS routines
+instr(0x55,4);
+   // printf("@ %04x Illegal opcode ED55 (MOS) \n\r",pc);
+   do_mos(); // 
+   ret;
+endinstr;
+
+// IM 1
+instr(0x56,4);
+   im=1;
+endinstr;
+
+// LD A,I
+instr(0x57,5);
+   a=i;
+   f=(f&1)|(a&0xa8)|((!a)<<6)|(iff2<<2);
+endinstr;
+
+// IN E,(C)
+instr(0x58,8);
+   input(e);
+endinstr;
+
+// OUT (C),E
+instr(0x59,8);
+   out(c,e);
+endinstr;
+
+// ADC HL,DE
+instr(0x5a,11);
+   adchl(de);
+endinstr;
+
+// LD DE,(nn)
+instr(0x5b,16);
+   {unsigned short addr=fetch2(pc);
+    pc+=2;
+    e=fetch(addr);
+    d=fetch(addr+1);
+   }
+endinstr;
+
+// ?
+instr(0x5c,4);
+   neg;
+endinstr;
+
+// ?
+instr(0x5d,4);
+   ret;
+endinstr;
+
+// IM 2
+instr(0x5e,4);
+   im=2;
+endinstr;
+
+// LDA A,R (unecessary on static memory)
+instr(0x5f,5);
+   a=r;
+   f=(f&1)|(a&0xa8)|((!a)<<6)|(iff2<<2);
+endinstr;
+
+// IN H,(C)
+instr(0x60,8);
+   input(h);
+endinstr;
+
+// OUT (C),H
+instr(0x61,8);
+   out(c,h);
+endinstr;
+
+// SBC HL,HL
+instr(0x62,11);
+   sbchl(hl);
+endinstr;
+
+// ?
+instr(0x63,16);
+   {unsigned short addr=fetch2(pc);
+    pc+=2;
+    store2b(addr,h,l);
+   }
+endinstr;
+
+// ?
+instr(0x64,4);
+   neg;
+endinstr;
+
+// ? illegal instruction ED65
+instr(0x65,4);
+   ret;
+endinstr;
+
+// ?
+instr(0x66,4);
+   ret; 
+   //  was im=0;
+endinstr;
+
+// RRD
+instr(0x67,14);
+   {unsigned char t=fetch(hl);
+    unsigned char u=(a<<4)|(t>>4);
+    a=(a&0xf0)|(t&0x0f);
+    store(hl,u);
+    f=(f&1)|(a&0xa8)|((!a)<<6)|parity(a);
+   }
+endinstr;
+
+// IN L,(C)
+instr(0x68,8);
+   input(l);
+endinstr;
+
+// OUT (C),L
+instr(0x69,8);
+   out(c,l);
+endinstr;
+
+// ADC HL,HL
+instr(0x6a,11);
+   adchl(hl);
+endinstr;
+
+// ?
+instr(0x6b,16);
+   {unsigned short addr=fetch2(pc);
+    pc+=2;
+    l=fetch(addr);
+    h=fetch(addr+1);
+   }
+endinstr;
+
+// ?
+instr(0x6c,4);
+   neg;
+endinstr;
+
+// ?
+instr(0x6d,4);
+   ret;
+endinstr;
+
+// ?
+instr(0x6e,4);
+   // im=1;
+   ret;
+endinstr;
+
+// RLD
+instr(0x6f,5);
+   {unsigned char t=fetch(hl);
+    unsigned char u=(a&0x0f)|(t<<4);
+    a=(a&0xf0)|(t>>4);
+    store(hl,u);
+    f=(f&1)|(a&0xa8)|((!a)<<6)|parity(a);
+   }
+endinstr;
+
+// ?
+instr(0x70,8);
+   {unsigned char x;input(x);}
+endinstr;
+
+// ?
+instr(0x71,8);
+   out(c,0);
+endinstr;
+
+// SBC HL,SP
+instr(0x72,11);
+   sbchl(sp);
+endinstr;
+
+// LD (nn),SP
+instr(0x73,16);
+   {unsigned short addr=fetch2(pc);
+    pc+=2;
+    store2(addr,sp);
+   }
+endinstr;
+
+// ?
+instr(0x74,4);
+   neg;
+endinstr;
+
+// ?
+instr(0x75,4);
+   ret;
+endinstr;
+
+// ?
+instr(0x76,4);
+   im=2;
+endinstr;
+
+// IN A,(C)
+instr(0x78,8);
+   input(a);
+endinstr;
+
+// OUT (C),A
+instr(0x79,8);
+   out(c,a);
+endinstr;
+
+// ADC HL,SP
+instr(0x7a,11);
+   adchl(sp);
+endinstr;
+
+// LD SP,(nn)
+instr(0x7b,16);
+   {unsigned short addr=fetch2(pc);
+    pc+=2;
+    sp=fetch2(addr);
+   }
+endinstr;
+
+// ?
+instr(0x7c,4);
+   neg;
+endinstr;
+
+// ?
+instr(0x7d,4);
+   ret;
+endinstr;
+
+// ?
+instr(0x7e,4);
+   im=3;
+endinstr;
+
+// LDI
+instr(0xa0,12);
+   {unsigned char x=fetch(hl);
+    store(de,x);
+    if(!++l)h++;
+    if(!++e)d++;
+    if(!c--)b--;
+    f=(f&0xc1)|(x&0x28)|(((b|c)>0)<<2);
+   }
+endinstr;
+
+// CPI
+instr(0xa1,12);
+   {unsigned char carry=cy;
+    cpa(fetch(hl));
+    if(!++l)h++;
+    if(!c--)b--;
+    f=(f&0xfa)|carry|(((b|c)>0)<<2);
+   }
+endinstr;
+
+// INI
+instr(0xa2,12);
+   {unsigned char t=in(c);
+    store(hl,t);
+    if(!++l)h++;
+    b--;
+    f=(b&0xa8)|((!b)<<6)|2|((parity(b)^c)&4);
+    }
+endinstr;
+
+// OUTI
+instr(0xa3,12); /* I can't determine the correct flags outcome for the
+                   block OUT instructions.  Spec says that the carry
+                   flag is left unchanged and N is set to 1, but that
+                   doesn't seem to be the case... */
+   {unsigned char x=fetch(hl);
+   // printf("OUTI %02x %02x\n\r",c,x);
+    out(c,x);
+    if(!++l)h++;
+    b--;
+    f=(f&1)|0x12|(b&0xa8)|((!b)<<6);
+   // f=(f & 0xBF)|2|((b==0)<<6);
+   
+   }
+endinstr;
+
+// LDD
+instr(0xa8,12);
+   {unsigned char x=fetch(hl);
+    store(de,x);
+    if(!l--)h--;
+    if(!e--)d--;
+    if(!c--)b--;
+    f=(f&0xc1)|(x&0x28)|(((b|c)>0)<<2);
+   }
+endinstr;
+
+// CPD
+instr(0xa9,12);
+   {unsigned char carry=cy;
+    cpa(fetch(hl));
+    if(!l--)h--;
+    if(!c--)b--;
+    f=(f&0xfa)|carry|(((b|c)>0)<<2);
+   }
+endinstr;
+
+// IND
+instr(0xaa,12);
+   {unsigned char t=in(c);
+    store(hl,t);
+    if(!l--)h--;
+    b--;
+//    f=(f & 0xBF)|2|((!b)<<6);
+
+    f=(b&0xa8)|((b>0)<<6)|2|((parity(b)^c^4)&4);
+   }
+endinstr;
+
+// OUTD
+instr(0xab,12);
+   {unsigned char x=fetch(hl);
+    out(c,x);
+    if(!l--)h--;
+    b--;
+    f=(f&1)|0x12|(b&0xa8)|((!b)<<6);
+   }
+endinstr;
+
+/* Note: the Z80 implements "*R" as "*" followed by JR -2.  No reason
+   to change this... */
+
+// LDIR
+instr(0xb0,12);
+   {unsigned char x=fetch(hl);
+    store(de,x);
+    if(!++l)h++;
+    if(!++e)d++;
+    if(!c--)b--;
+    f=(f&0xc1)|(x&0x28)|(((b|c)>0)<<2);
+    if(b|c)pc-=2;
+   }
+endinstr;
+
+// CPIR
+instr(0xb1,12);
+   {unsigned char carry=cy;
+    cpa(fetch(hl));
+    if(!++l)h++;
+    if(!c--)b--;
+    f=(f&0xfa)|carry|(((b|c)>0)<<2);
+    if((f&0x44)==4)pc-=2;
+   }
+endinstr;
+
+// INIR
+instr(0xb2,12);
+   {unsigned char t=in(c);
+    store(hl,t);
+    if(!++l)h++;
+    b--;
+    f=(b&0xa8)|((!b)<<6)|2|((parity(b)^c)&4);
+   // f=(f & 0xBF)|2|((!b)<<6);
+    if(b)pc-=2;
+   }
+endinstr;
+
+// OTIR
+instr(0xb3,12);
+   {unsigned char x=fetch(hl);
+    out(c,x);
+    if(!++l)h++;
+    b--;
+    f=(f&1)|0x12|(b&0xa8)|((!b)<<6);
+    if(b)pc-=2;
+   }
+endinstr;
+
+// LDDR
+instr(0xb8,12);
+   {unsigned char x=fetch(hl);
+    store(de,x);
+    if(!l--)h--;
+    if(!e--)d--;
+    if(!c--)b--;
+    f=(f&0xc1)|(x&0x28)|(((b|c)>0)<<2);
+    if(b|c)pc-=2;
+   }
+endinstr;
+
+// CPDR
+instr(0xb9,12);
+   {unsigned char carry=cy;
+    cpa(fetch(hl));
+    if(!l--)h--;
+    if(!c--)b--;
+    f=(f&0xfa)|carry|(((b|c)>0)<<2);
+    if((f&0x44)==4)pc-=2;
+   }
+endinstr;
+
+// INDR
+instr(0xba,12);
+   {unsigned char t=in(c);
+    store(hl,t);
+    if(!l--)h--;
+    b--;
+  f=(b&0xa8)|((!b)<<6)|2|((parity(b)^c^4)&4);
+  // f=(f & 0xBF)|2|((!b)<<6);
+
+    if(b)pc-=2;
+   }
+endinstr;
+
+// OTDR
+instr(0xbb,12);
+   {unsigned char x=fetch(hl);
+    out(c,x);
+    if(!l--)h--;
+    b--;
+    f=(f&1)|0x12|(b&0xa8)|((!b)<<6);
+    if(b)pc-=2;
+   }
+endinstr;
+
+}}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/z80/z80.h	Wed Jun 29 14:25:56 2011 +0000
@@ -0,0 +1,173 @@
+/* z81/xz81, Linux console and X ZX81/ZX80 emulators.
+ * Copyright (C) 1994 Ian Collier. z81 changes (C) 1995-2001 Russell Marks.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+// I have made all Z80 registers global and volatile
+volatile bool iff1, iff2;
+unsigned char im;
+volatile unsigned char a, f, b, c, d, e, h, l;
+volatile unsigned char r, a1, f1, b1, c1, d1, e1, h1, l1, i;
+volatile unsigned short pc;
+volatile unsigned short ix, iy, sp;
+
+// some flags
+volatile   bool intpend=0;
+volatile   unsigned char new_ixoriy=0;
+volatile   unsigned char ixoriy=0;
+
+
+#define Z80_quit  1
+#define Z80_NMI   2
+#define Z80_reset 3
+#define Z80_load  4
+#define Z80_save  5
+#define Z80_log   6
+
+#define parity(a) (partable[a])
+unsigned char partable[256]={
+      4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
+      0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
+      0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
+      4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
+      0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
+      4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
+      4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
+      0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
+      0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
+      4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
+      4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
+      0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
+      4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4,
+      0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
+      0, 4, 4, 0, 4, 0, 0, 4, 4, 0, 0, 4, 0, 4, 4, 0,
+      4, 0, 0, 4, 0, 4, 4, 0, 0, 4, 4, 0, 4, 0, 0, 4
+   };
+
+
+#define fetch(x) (rdmem(x))
+#define fetch2(x) ((fetch((x)+1)<<8)|fetch(x))
+
+// store 8 bit value y at 16 bit location x
+#define store(x,y) (wrmem(x,(y)))
+
+#define store2b(x,hi,lo) do {wrmem(x,lo);wrmem(x+1,hi);}while(0)
+
+#define store2(x,y) store2b(x,(y)>>8,(y)&255)
+
+#define bc ((b<<8)|c)
+#define de ((d<<8)|e)
+#define hl ((h<<8)|l)
+
+#define instr(opcode,cycles) case opcode: {
+#define HLinstr(opcode) \
+                             case opcode: {unsigned short addr; \
+                                if(ixoriy==0)addr=hl; \
+                                else    addr=(ixoriy==1?ix:iy)+ \
+                                        (signed char)fetch(pc),\
+                                   pc++
+#define endinstr             }; break
+
+#define cy (f&1)
+
+#define xh (ixoriy==0?h:ixoriy==1?(ix>>8):(iy>>8))
+#define xl (ixoriy==0?l:ixoriy==1?(ix&0xff):(iy&0xff))
+
+#define setxh(x) (ixoriy==0?(h=(x)):ixoriy==1?(ix=(ix&0xff)|((x)<<8)):\
+                  (iy=(iy&0xff)|((x)<<8)))
+#define setxl(x) (ixoriy==0?(l=(x)):ixoriy==1?(ix=(ix&0xff00)|(x)):\
+                  (iy=(iy&0xff00)|(x)))
+
+#define inc(var) /* 8-bit increment */ ( var++,\
+                                         f=(f&1)|(var&0xa8)|\
+                                           ((!(var&15))<<4)|((!var)<<6)|\
+                                           ((var==128)<<2)\
+                                       )
+#define dec(var) /* 8-bit decrement */ ( f=(f&1)|((!(var&15))<<4)|2,\
+                                         --var,\
+                                         f|=(var&0xa8)|((var==127)<<2)|\
+                                            ((!var)<<6)\
+                                       )
+#define swap(x,y) {unsigned char t=x; x=y; y=t;}
+#define addhl(hi,lo) /* 16-bit add */ if(!ixoriy){\
+                      unsigned short t;\
+                      l=t=l+(lo);\
+                      f=(f&0xc4)|(((t>>=8)+(h&0x0f)+((hi)&0x0f)>15)<<4);\
+                      h=t+=h+(hi);\
+                      f|=(h&0x28)|(t>>8);\
+                   }\
+                   else do{unsigned long t=(ixoriy==1?ix:iy);\
+                      f=(f&0xc4)|(((t&0xfff)+((hi<<8)|lo)>0xfff)<<4);\
+                      t+=(hi<<8)|lo;\
+                      if(ixoriy==1)ix=t; else iy=t;\
+                      f|=((t>>8)&0x28)|(t>>16);\
+                   } while(0)
+
+#define adda(x,c) /* 8-bit add */ do{unsigned short y;\
+                      unsigned char z=(x);\
+                      y=a+z+(c);\
+                      f=(y&0xa8)|(y>>8)|(((a&0x0f)+(z&0x0f)+(c)>15)<<4)|\
+                        (((~a^z)&0x80&(y^a))>>5);\
+                        a=y; \
+                      f|=(!a)<<6;\
+                   } while(0)
+#define suba(x,c) /* 8-bit subtract */ do{unsigned short y;\
+                      unsigned char z=(x);\
+                      y=(a-z-(c))&0x1ff;\
+                      f=(y&0xa8)|(y>>8)|(((a&0x0f)<(z&0x0f)+(c))<<4)|\
+                        (((a^z)&0x80&(y^a))>>5)|2;\
+                        a=y; \
+                      f|=(!a)<<6;\
+                   } while(0)
+#define cpa(x) /* 8-bit compare */ do{unsigned short y;\
+                      unsigned char z=(x);\
+                      y=(a-z)&0x1ff;\
+                      f=(y&0xa8)|(y>>8)|(((a&0x0f)<(z&0x0f))<<4)|\
+                        (((a^z)&0x80&(y^a))>>5)|2|((!y)<<6);\
+                   } while(0)
+#define anda(x) /* logical and */ do{\
+                      a&=(x);\
+                      f=(a&0xa8)|((!a)<<6)|0x10|parity(a);\
+                   } while(0)
+#define xora(x) /* logical xor */ do{\
+                      a^=(x);\
+                      f=(a&0xa8)|((!a)<<6)|parity(a);\
+                   } while(0)
+#define ora(x) /* logical or */ do{\
+                      a|=(x);\
+                      f=(a&0xa8)|((!a)<<6)|parity(a);\
+                   } while(0)
+
+#define jr /* execute relative jump */ do{int j=(signed char)fetch(pc);\
+                      pc+=j+1;\
+                   } while(0)
+#define jp /* execute jump */ (pc=fetch2(pc))
+#define call /* execute call */ do{\
+                      push2(pc+2);\
+                      jp;\
+                   } while(0)
+#define ret /* execute return */ do{\
+                      pop2(pc);\
+                   } while(0)
+#define pop2(var) /* pop 16-bit register */ (var=fetch2(sp),sp+=2)
+#define pop1(v1,v2) /* pop register pair */ (v2=fetch(sp),\
+                                             v1=fetch(sp+1),sp+=2)
+#define push2(val) /* push 16-bit register */ do{sp-=2;store2(sp,(val));}\
+                                              while(0)
+#define push1(v1,v2) /* push register pair */ do{sp-=2;\
+                                                 store2b(sp,v1,v2);\
+                                              }while(0)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/z80/z80ops.h	Wed Jun 29 14:25:56 2011 +0000
@@ -0,0 +1,1218 @@
+/* Emulations of the Z80 CPU instruction set - part of xz80.
+ * Copyright (C) 1994 Ian Collier.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+/* nop */
+case 0:
+break;
+// ld BC,nn
+instr(0x01,10);
+c=fetch(pc),pc++;
+b=fetch(pc),pc++;
+endinstr;
+// ld (BC),A
+instr(0x02,7);
+store(bc,a);
+endinstr;
+// inc BC
+instr(0x03,6);
+if (!++c)b++;
+endinstr;
+// inc B
+instr(0x04,4);
+inc(b);
+endinstr;
+// dec B
+instr(0x05,4);
+dec(b);
+endinstr;
+// ld B,n
+instr(0x06,7);
+b=fetch(pc),pc++;
+endinstr;
+// rlca
+instr(0x07,4);
+a=(a<<1)|(a>>7);
+f=(f&0xc4)|(a&0x29);
+endinstr;
+// ex AF,AF'
+instr(0x08,4);
+swap(a,a1);
+swap(f,f1);
+endinstr;
+// add HL,BC
+instr(0x09,11);
+addhl(b,c);
+endinstr;
+// ld A,(BC)
+instr(0x0a,7);
+a=fetch(bc);
+endinstr;
+// dec BC
+instr(0x0b,6);
+if (!c--)b--;
+endinstr;
+// inc C
+instr(0x0c,4);
+inc(c);
+endinstr;
+// dec C
+instr(0x0d,4);
+dec(c);
+endinstr;
+// ld C,n
+instr(0x0e,4);
+c=fetch(pc),pc++;
+endinstr;
+// rrca
+instr(0x0f,4);
+f=(f&0xc4)|(a&1);
+a=(a>>1)|(a<<7);
+f|=a&0x28;
+endinstr;
+// djnz 
+instr(0x10,8);
+if (!--b)pc++;
+else jr;
+endinstr;
+// ld DE,nn
+instr(0x11,10);
+e=fetch(pc),pc++;
+d=fetch(pc),pc++;
+endinstr;
+// ld (DE),A
+instr(0x12,7);
+store(de,a);
+endinstr;
+// inc DE
+instr(0x13,6);
+if (!++e)d++;
+endinstr;
+// inc D
+instr(0x14,4);
+inc(d);
+endinstr;
+// dec D
+instr(0x15,4);
+dec(d);
+endinstr;
+// ld D,n
+instr(0x16,7);
+d=fetch(pc),pc++;
+endinstr;
+// rla
+instr(0x17,4);
+{
+    int t=a>>7;
+    a=(a<<1)|(f&1);
+    f=(f&0xc4)|(a&0x28)|t;
+}
+endinstr;
+// JR
+instr(0x18,7);
+jr;
+endinstr;
+// add HL,DE
+instr(0x19,11);
+addhl(d,e);
+endinstr;
+// ld A,(DE)
+instr(0x1a,7);
+a=fetch(de);
+endinstr;
+// dec DE
+instr(0x1b,6);
+if (!e--)d--;
+endinstr;
+// inc E
+instr(0x1c,4);
+inc(e);
+endinstr;
+// dec E
+instr(0x1d,4);
+dec(e);
+endinstr;
+// ld E,n
+instr(0x1e,4);
+e=fetch(pc),pc++;
+endinstr;
+// rra
+instr(0x1f,4);
+{
+    int t=a&1;
+    a=(a>>1)|(f<<7);
+    f=(f&0xc4)|(a&0x28)|t;
+}
+endinstr;
+// jr NZ
+instr(0x20,7);
+if (f&0x40)pc++;
+else jr;
+endinstr;
+// ld HL,nn
+instr(0x21,10);
+if (!ixoriy) {
+    l=fetch(pc),pc++;
+    h=fetch(pc),pc++;
+} else {
+    if (ixoriy==1)
+        ix=fetch2(pc);
+    else iy=fetch2(pc);
+    pc+=2;
+}
+endinstr;
+// ld (nn),HL
+instr(0x22,16);
+{
+    unsigned short addr=fetch2(pc);
+    pc+=2;
+    if (!ixoriy) store2b(addr,h,l);
+    else if (ixoriy==1)store2(addr,ix);
+    else store2(addr,iy);
+}
+endinstr;
+// inc HL
+instr(0x23,6);
+if (!ixoriy) {
+    if (!++l)h++;
+} else if (ixoriy==1)ix++;
+else iy++;
+endinstr;
+// inc H
+instr(0x24,4);
+if (ixoriy==0)inc(h);
+else {
+    unsigned char t;
+    t=(ixoriy==1?ix:iy)>>8;
+    inc(t);
+    if (ixoriy==1)ix=(ix&0xff)|(t<<8);
+    else iy=(iy&0xff)|(t<<8);
+}
+endinstr;
+// dec H
+instr(0x25,4);
+if (ixoriy==0)dec(h);
+else {
+    unsigned char t;
+    t=(ixoriy==1?ix:iy)>>8;
+    dec(t);
+    if (ixoriy==1)ix=(ix&0xff)|(t<<8);
+    else iy=(iy&0xff)|(t<<8);
+}
+endinstr;
+// ld H,n
+instr(0x26,7);
+setxh(fetch(pc));
+pc++;
+endinstr;
+// daa
+instr(0x27,4);
+{
+    unsigned char incr=0, carry=cy;
+    if ((f&0x10) || (a&0x0f)>9) incr=6;
+    if ((f&1) || (a>>4)>9) incr|=0x60;
+    if  (f&2)  suba(incr,0);
+
+    else {
+        if (a>0x90 && (a&15)>9)incr|=0x60;
+        adda(incr,0);
+    }
+    f=((f|carry)&0xfb)|parity(a);
+}
+endinstr;
+// jr Z
+instr(0x28,7);
+if (f&0x40)jr;
+else pc++;
+endinstr;
+// add HL,HL
+instr(0x29,11);
+if (!ixoriy)addhl(h,l);
+else if (ixoriy==1)addhl((ix>>8),(ix&0xff));
+else addhl((iy>>8),(iy&0xff));
+endinstr;
+// ld HL,(nn)
+instr(0x2a,16);
+{
+    unsigned short addr=fetch2(pc);
+    pc+=2;
+    if (!ixoriy) {
+        l=fetch(addr);
+        h=fetch(addr+1);
+    } else if (ixoriy==1)ix=fetch2(addr);
+    else iy=fetch2(addr);
+}
+endinstr;
+// dec HL
+instr(0x2b,6);
+if (!ixoriy) {
+    if (!l--)h--;
+} else if (ixoriy==1)ix--;
+else iy--;
+endinstr;
+// inc L
+instr(0x2c,4);
+if (!ixoriy)inc(l);
+else {
+    unsigned char t;
+    t=(ixoriy==1?ix:iy);
+    inc(t);
+    if (ixoriy==1)ix=(ix&0xff00)|t;
+    else iy=(iy&0xff00)|t;
+}
+endinstr;
+// dec L
+instr(0x2d,4);
+if (!ixoriy)dec(l);
+else {
+    unsigned char t;
+    t=(ixoriy==1?ix:iy);
+    dec(t);
+    if (ixoriy==1)ix=(ix&0xff00)|t;
+    else iy=(iy&0xff00)|t;
+}
+endinstr;
+// ld L,n
+instr(0x2e,4);
+setxl(fetch(pc));
+pc++;
+endinstr;
+// cpl
+instr(0x2f,4);
+a=~a;
+f=(f&0xc5)|(a&0x28)|0x12;
+endinstr;
+// jr NC
+instr(0x30,7);
+if (f&1)pc++;
+else jr;
+endinstr;
+// ld SP,nn
+instr(0x31,10);
+sp=fetch2(pc);
+pc+=2;
+endinstr;
+// ld (nn),A
+instr(0x32,13);
+{
+    unsigned short addr=fetch2(pc);
+    pc+=2;
+    store(addr,a);
+}
+endinstr;
+// inc SP
+instr(0x33,6);
+sp++;
+endinstr;
+// inc (HL)
+HLinstr(0x34);
+{
+    unsigned char t=fetch(addr);
+    inc(t);
+    store(addr,t);
+}
+endinstr;
+// dec (HL)
+HLinstr(0x35);
+{
+    unsigned char t=fetch(addr);
+    dec(t);
+    store(addr,t);
+}
+endinstr;
+// ld (HL),n
+HLinstr(0x36);
+store(addr,fetch(pc));
+pc++;
+endinstr;
+// scf
+instr(0x37,4);
+f=(f&0xc4)|1|(a&0x28);
+endinstr;
+// jr C
+instr(0x38,7);
+if (f&1)jr;
+else pc++;
+endinstr;
+// add HL,SP
+instr(0x39,11);
+addhl((sp>>8),(sp&0xff));
+endinstr;
+// ld A,(nn)
+instr(0x3a,13);
+{
+    unsigned short addr=fetch2(pc);
+    pc+=2;
+    a=fetch(addr);
+}
+endinstr;
+// dec SP
+instr(0x3b,6);
+sp--;
+endinstr;
+// inc A
+instr(0x3c,4);
+inc(a);
+endinstr;
+// dec A
+instr(0x3d,4);
+dec(a);
+endinstr;
+// ld A,n
+instr(0x3e,4);
+a=fetch(pc),pc++;
+endinstr;
+// ccf
+instr(0x3f,4);
+f=(f&0xc4)|(cy^1)|(cy<<4)|(a&0x28);
+endinstr;
+// ld B,B
+instr(0x40,4);
+/* ld b,b */
+endinstr;
+
+instr(0x41,4);
+b=c;
+endinstr;
+
+instr(0x42,4);
+b=d;
+endinstr;
+
+instr(0x43,4);
+b=e;
+endinstr;
+
+instr(0x44,4);
+b=xh;
+endinstr;
+
+instr(0x45,4);
+b=xl;
+endinstr;
+
+HLinstr(0x46);
+b=fetch(addr);
+endinstr;
+
+instr(0x47,4);
+b=a;
+endinstr;
+
+instr(0x48,4);
+c=b;
+endinstr;
+
+instr(0x49,4);
+/* ld c,c */
+endinstr;
+
+instr(0x4a,4);
+c=d;
+endinstr;
+
+instr(0x4b,4);
+c=e;
+endinstr;
+
+instr(0x4c,4);
+c=xh;
+endinstr;
+
+instr(0x4d,4);
+c=xl;
+endinstr;
+
+HLinstr(0x4e);
+c=fetch(addr);
+endinstr;
+
+instr(0x4f,4);
+c=a;
+endinstr;
+
+instr(0x50,4);
+d=b;
+endinstr;
+
+instr(0x51,4);
+d=c;
+endinstr;
+
+instr(0x52,4);
+/* ld d,d */
+endinstr;
+
+instr(0x53,4);
+d=e;
+endinstr;
+
+instr(0x54,4);
+d=xh;
+endinstr;
+
+instr(0x55,4);
+d=xl;
+endinstr;
+
+HLinstr(0x56);
+d=fetch(addr);
+endinstr;
+
+instr(0x57,4);
+d=a;
+endinstr;
+
+instr(0x58,4);
+e=b;
+endinstr;
+
+instr(0x59,4);
+e=c;
+endinstr;
+
+instr(0x5a,4);
+e=d;
+endinstr;
+
+instr(0x5b,4);
+/* ld e,e */
+endinstr;
+
+instr(0x5c,4);
+e=xh;
+endinstr;
+
+instr(0x5d,4);
+e=xl;
+endinstr;
+
+HLinstr(0x5e);
+e=fetch(addr);
+endinstr;
+
+instr(0x5f,4);
+e=a;
+endinstr;
+
+instr(0x60,4);
+setxh(b);
+endinstr;
+
+instr(0x61,4);
+setxh(c);
+endinstr;
+
+instr(0x62,4);
+setxh(d);
+endinstr;
+
+instr(0x63,4);
+setxh(e);
+endinstr;
+
+instr(0x64,4);
+/* ld h,h */
+endinstr;
+
+instr(0x65,4);
+setxh(xl);
+endinstr;
+
+HLinstr(0x66);
+h=fetch(addr);
+endinstr;
+
+instr(0x67,4);
+setxh(a);
+endinstr;
+
+instr(0x68,4);
+setxl(b);
+endinstr;
+
+instr(0x69,4);
+setxl(c);
+endinstr;
+
+instr(0x6a,4);
+setxl(d);
+endinstr;
+
+instr(0x6b,4);
+setxl(e);
+endinstr;
+
+instr(0x6c,4);
+setxl(xh);
+endinstr;
+
+instr(0x6d,4);
+/* ld l,l */
+endinstr;
+
+HLinstr(0x6e);
+l=fetch(addr);
+endinstr;
+
+instr(0x6f,4);
+setxl(a);
+endinstr;
+
+HLinstr(0x70);
+store(addr,b);
+endinstr;
+
+HLinstr(0x71);
+store(addr,c);
+endinstr;
+
+HLinstr(0x72);
+store(addr,d);
+endinstr;
+
+HLinstr(0x73);
+store(addr,e);
+endinstr;
+
+HLinstr(0x74);
+store(addr,h);
+endinstr;
+
+HLinstr(0x75);
+store(addr,l);
+endinstr;
+
+// HALT
+instr(0x76,4);
+pc--;        /* keep nopping until int */
+endinstr;
+
+HLinstr(0x77);
+store(addr,a);
+endinstr;
+
+instr(0x78,4);
+a=b;
+endinstr;
+
+instr(0x79,4);
+a=c;
+endinstr;
+
+instr(0x7a,4);
+a=d;
+endinstr;
+
+instr(0x7b,4);
+a=e;
+endinstr;
+
+instr(0x7c,4);
+a=xh;
+endinstr;
+
+instr(0x7d,4);
+a=xl;
+endinstr;
+
+HLinstr(0x7e);
+a=fetch(addr);
+endinstr;
+
+instr(0x7f,4);
+/* ld a,a */
+endinstr;
+
+instr(0x80,4);
+adda(b,0);
+endinstr;
+
+instr(0x81,4);
+adda(c,0);
+endinstr;
+
+instr(0x82,4);
+adda(d,0);
+endinstr;
+
+instr(0x83,4);
+adda(e,0);
+endinstr;
+
+instr(0x84,4);
+adda(xh,0);
+endinstr;
+
+instr(0x85,4);
+adda(xl,0);
+endinstr;
+
+HLinstr(0x86);
+adda(fetch(addr),0);
+endinstr;
+
+instr(0x87,4);
+adda(a,0);
+endinstr;
+
+instr(0x88,4);
+adda(b,cy);
+endinstr;
+
+instr(0x89,4);
+adda(c,cy);
+endinstr;
+
+instr(0x8a,4);
+adda(d,cy);
+endinstr;
+
+instr(0x8b,4);
+adda(e,cy);
+endinstr;
+
+instr(0x8c,4);
+adda(xh,cy);
+endinstr;
+
+instr(0x8d,4);
+adda(xl,cy);
+endinstr;
+
+HLinstr(0x8e);
+adda(fetch(addr),cy);
+endinstr;
+
+instr(0x8f,4);
+adda(a,cy);
+endinstr;
+
+instr(0x90,4);
+suba(b,0);
+endinstr;
+
+instr(0x91,4);
+suba(c,0);
+endinstr;
+
+instr(0x92,4);
+suba(d,0);
+endinstr;
+
+instr(0x93,4);
+suba(e,0);
+endinstr;
+
+instr(0x94,4);
+suba(xh,0);
+endinstr;
+
+instr(0x95,4);
+suba(xl,0);
+endinstr;
+
+HLinstr(0x96);
+suba(fetch(addr),0);
+endinstr;
+
+instr(0x97,4);
+suba(a,0);
+endinstr;
+
+instr(0x98,4);
+suba(b,cy);
+endinstr;
+
+instr(0x99,4);
+suba(c,cy);
+endinstr;
+
+instr(0x9a,4);
+suba(d,cy);
+endinstr;
+
+instr(0x9b,4);
+suba(e,cy);
+endinstr;
+
+instr(0x9c,4);
+suba(xh,cy);
+endinstr;
+
+instr(0x9d,4);
+suba(xl,cy);
+endinstr;
+
+HLinstr(0x9e);
+suba(fetch(addr),cy);
+endinstr;
+
+instr(0x9f,4);
+suba(a,cy);
+endinstr;
+
+instr(0xa0,4);
+anda(b);
+endinstr;
+
+instr(0xa1,4);
+anda(c);
+endinstr;
+
+instr(0xa2,4);
+anda(d);
+endinstr;
+
+instr(0xa3,4);
+anda(e);
+endinstr;
+
+instr(0xa4,4);
+anda(xh);
+endinstr;
+
+instr(0xa5,4);
+anda(xl);
+endinstr;
+
+HLinstr(0xa6);
+anda(fetch(addr));
+endinstr;
+
+instr(0xa7,4);
+anda(a);
+endinstr;
+
+instr(0xa8,4);
+xora(b);
+endinstr;
+
+instr(0xa9,4);
+xora(c);
+endinstr;
+
+instr(0xaa,4);
+xora(d);
+endinstr;
+
+instr(0xab,4);
+xora(e);
+endinstr;
+
+instr(0xac,4);
+xora(xh);
+endinstr;
+
+instr(0xad,4);
+xora(xl);
+endinstr;
+
+HLinstr(0xae);
+xora(fetch(addr));
+endinstr;
+
+instr(0xaf,4);
+xora(a);
+endinstr;
+
+instr(0xb0,4);
+ora(b);
+endinstr;
+
+instr(0xb1,4);
+ora(c);
+endinstr;
+
+instr(0xb2,4);
+ora(d);
+endinstr;
+
+instr(0xb3,4);
+ora(e);
+endinstr;
+
+instr(0xb4,4);
+ora(xh);
+endinstr;
+
+instr(0xb5,4);
+ora(xl);
+endinstr;
+
+HLinstr(0xb6);
+ora(fetch(addr));
+endinstr;
+
+instr(0xb7,4);
+ora(a);
+endinstr;
+
+instr(0xb8,4);
+cpa(b);
+endinstr;
+
+instr(0xb9,4);
+cpa(c);
+endinstr;
+
+instr(0xba,4);
+cpa(d);
+endinstr;
+
+instr(0xbb,4);
+cpa(e);
+endinstr;
+
+instr(0xbc,4);
+cpa(xh);
+endinstr;
+
+instr(0xbd,4);
+cpa(xl);
+endinstr;
+
+HLinstr(0xbe);
+cpa(fetch(addr));
+endinstr;
+
+instr(0xbf,4);
+cpa(a);
+endinstr;
+
+instr(0xc0,5);
+if (!(f&0x40))ret;
+endinstr;
+
+instr(0xc1,10);
+pop1(b,c);
+endinstr;
+
+instr(0xc2,10);
+if (!(f&0x40))jp;
+else pc+=2;
+endinstr;
+
+instr(0xc3,10);
+jp;
+endinstr;
+
+instr(0xc4,10);
+if (!(f&0x40))call;
+else pc+=2;
+endinstr;
+
+instr(0xc5,11);
+push1(b,c);
+endinstr;
+
+instr(0xc6,7);
+adda(fetch(pc),0);
+pc++;
+endinstr;
+
+instr(0xc7,11);
+push2(pc);
+pc=0;
+endinstr;
+
+instr(0xc8,5);
+if (f&0x40)ret;
+endinstr;
+
+instr(0xc9,4);
+ret;
+endinstr;
+
+instr(0xca,10);
+if (f&0x40)jp;
+else pc+=2;
+endinstr;
+
+instr(0xcb,4);
+#include "cbops.h"
+endinstr;
+
+instr(0xcc,10);
+if (f&0x40)call;
+else pc+=2;
+endinstr;
+
+instr(0xcd,10);
+call;
+endinstr;
+
+instr(0xce,7);
+adda(fetch(pc),cy);
+pc++;
+endinstr;
+
+instr(0xcf,11);
+push2(pc);
+pc=8;
+endinstr;
+
+instr(0xd0,5);
+if (!cy)ret;
+endinstr;
+
+instr(0xd1,10);
+pop1(d,e);
+endinstr;
+
+instr(0xd2,10);
+if (!cy)jp;
+else pc+=2;
+endinstr;
+
+// OUT
+instr(0xd3,11);
+out(fetch(pc),a);
+pc++;
+endinstr;
+
+instr(0xd4,10);
+if (!cy)call;
+else pc+=2;
+endinstr;
+
+instr(0xd5,11);
+push1(d,e);
+endinstr;
+
+instr(0xd6,7);
+suba(fetch(pc),0);
+pc++;
+endinstr;
+
+instr(0xd7,11);
+push2(pc);
+pc=16;
+endinstr;
+
+instr(0xd8,5);
+if (cy)ret;
+endinstr;
+
+instr(0xd9,4);
+swap(b,b1);
+swap(c,c1);
+swap(d,d1);
+swap(e,e1);
+swap(h,h1);
+swap(l,l1);
+endinstr;
+
+instr(0xda,10);
+if (cy)jp;
+else pc+=2;
+endinstr;
+
+// IN
+instr(0xdb,11);
+{
+    a=in(fetch(pc));
+    pc++;
+}
+endinstr;
+
+instr(0xdc,10);
+if (cy)call;
+else pc+=2;
+endinstr;
+
+instr(0xdd,4);
+new_ixoriy=1;
+endinstr;
+
+instr(0xde,7);
+suba(fetch(pc),cy);
+pc++;
+endinstr;
+
+// RST 18
+instr(0xdf,11);
+push2(pc);
+pc=0x0018;
+endinstr;
+
+instr(0xe0,5);
+if (!(f&4))ret;
+endinstr;
+
+instr(0xe1,10);
+if (!ixoriy)pop1(h,l);
+else if (ixoriy==1)pop2(ix);
+else pop2(iy);
+endinstr;
+
+instr(0xe2,10);
+if (!(f&4))jp;
+else pc+=2;
+endinstr;
+
+instr(0xe3,19);
+if (!ixoriy) {
+    unsigned short t=fetch2(sp);
+    store2b(sp,h,l);
+    l=t;
+    h=t>>8;
+} else if (ixoriy==1) {
+    unsigned short t=fetch2(sp);
+    store2(sp,ix);
+    ix=t;
+} else {
+    unsigned short t=fetch2(sp);
+    store2(sp,iy);
+    iy=t;
+}
+endinstr;
+
+instr(0xe4,10);
+if (!(f&4))call;
+else pc+=2;
+endinstr;
+
+instr(0xe5,11);
+if (!ixoriy)push1(h,l);
+else if (ixoriy==1)push2(ix);
+else push2(iy);
+endinstr;
+
+instr(0xe6,7);
+anda(fetch(pc));
+pc++;
+endinstr;
+
+instr(0xe7,11);
+push2(pc);
+pc=32;
+endinstr;
+
+instr(0xe8,5);
+if (f&4)ret;
+endinstr;
+
+instr(0xe9,4);
+pc=!ixoriy?hl:ixoriy==1?ix:iy;
+endinstr;
+
+instr(0xea,10);
+if (f&4)jp;
+else pc+=2;
+endinstr;
+
+instr(0xeb,4);
+swap(h,d);
+swap(e,l);
+endinstr;
+
+instr(0xec,10);
+if (f&4)call;
+else pc+=2;
+endinstr;
+
+instr(0xed,4);
+#include"edops.h"
+endinstr;
+
+instr(0xee,7);
+xora(fetch(pc));
+pc++;
+endinstr;
+
+instr(0xef,11);
+push2(pc);
+pc=40;
+endinstr;
+
+instr(0xf0,5);
+if (!(f&0x80))ret;
+endinstr;
+
+instr(0xf1,10);
+pop1(a,f);
+endinstr;
+
+instr(0xf2,10);
+if (!(f&0x80))jp;
+else pc+=2;
+endinstr;
+
+instr(0xf3,4);
+iff1=iff2=0;
+// __disable_irq();
+endinstr;
+
+instr(0xf4,10);
+if (!(f&0x80))call;
+else pc+=2;
+endinstr;
+
+instr(0xf5,11);
+push1(a,f);
+endinstr;
+
+instr(0xf6,7);
+ora(fetch(pc));
+pc++;
+endinstr;
+
+// rst 30
+instr(0xf7,11);
+push2(pc);
+pc=0x30;
+// printf("RST30\n\r");
+endinstr;
+
+instr(0xf8,5);
+if (f&0x80)ret;
+endinstr;
+
+instr(0xf9,6);
+sp=!ixoriy?hl:ixoriy==1?ix:iy;
+endinstr;
+
+instr(0xfa,10);
+if (f&0x80)jp;
+else pc+=2;
+endinstr;
+
+instr(0xfb,4);
+iff1=iff2=1;
+endinstr;
+
+instr(0xfc,10);
+if (f&0x80)call;
+else pc+=2;
+endinstr;
+
+instr(0xfd,4);
+new_ixoriy=2;
+endinstr;
+
+instr(0xfe,7);
+cpa(fetch(pc));
+pc++;
+endinstr;
+
+instr(0xff,11);
+push2(pc);
+pc=56;
+endinstr;
+