From: Jean-Paul Mari Date: Thu, 15 Aug 2019 08:37:27 +0000 (-0400) Subject: Fix specific breakpoint for ROM cartridge or unknown memory location writing X-Git-Tag: v2.1.3-R4a X-Git-Url: http://git.hcoop.net/clinton/Virtual-Jaguar-Rx.git/commitdiff_plain/f04df4f185ed4f3cfc805d0f61b3c019a108ae2c?ds=inline Fix specific breakpoint for ROM cartridge or unknown memory location writing --- diff --git a/Win-VS2017/GeneratedFiles/qrc_virtualjaguar.cpp b/Win-VS2017/GeneratedFiles/qrc_virtualjaguar.cpp index ea925f2..2a4ee8a 100644 --- a/Win-VS2017/GeneratedFiles/qrc_virtualjaguar.cpp +++ b/Win-VS2017/GeneratedFiles/qrc_virtualjaguar.cpp @@ -73021,7 +73021,7 @@ static const unsigned char qt_resource_data[] = { 0x15,0xb0,0x4f,0xd,0x27,0xc4,0xde,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae, 0x42,0x60,0x82, // C:/Projects/Emulators/Virtual-Jaguar-Rx/res/help.html - 0x0,0x0,0x7d,0xc9, + 0x0,0x0,0x7d,0xe6, 0x3c, 0x68,0x74,0x6d,0x6c,0x3e,0xd,0xa,0xd,0xa,0x3c,0x68,0x65,0x61,0x64,0x3e,0xd, 0xa,0x3c,0x74,0x69,0x74,0x6c,0x65,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20, @@ -74797,245 +74797,247 @@ static const unsigned char qt_resource_data[] = { 0x65,0x20,0x73,0x74,0x61,0x74,0x65,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x76, 0x61,0x72,0x69,0x6f,0x75,0x73,0x20,0x43,0x50,0x55,0x73,0x20,0x69,0x6e,0x20,0x74, 0x68,0x65,0x20,0x65,0x6d,0x75,0x6c,0x61,0x74,0x65,0x64,0x20,0x4a,0x61,0x67,0x75, - 0x61,0x72,0x2c,0x20,0x61,0x20,0x62,0x72,0x65,0x61,0x6b,0x70,0x6f,0x69,0x6e,0x74, - 0x20,0x63,0x61,0x6e,0x20,0x61,0x6c,0x73,0x6f,0x20,0x62,0x65,0x20,0x73,0x65,0x74, - 0x20,0x76,0x69,0x61,0x20,0x74,0x68,0x65,0x20,0x42,0x50,0x4d,0x20,0x73,0x65,0x74, - 0x74,0x69,0x6e,0x67,0x2e,0x20,0x54,0x68,0x65,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77, - 0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x64,0x69,0x73,0x6d,0x69,0x73,0x73,0x65, - 0x64,0x20,0x62,0x79,0x20,0x63,0x6c,0x69,0x63,0x6b,0x69,0x6e,0x67,0x20,0x6f,0x6e, - 0x20,0x74,0x68,0x65,0x20,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b,0x58,0x26,0x72,0x64, - 0x71,0x75,0x6f,0x3b,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x75,0x70,0x70,0x65, - 0x72,0x20,0x63,0x6f,0x72,0x6e,0x65,0x72,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20, - 0x64,0x69,0x61,0x6c,0x6f,0x67,0x2c,0x20,0x6f,0x72,0x20,0x62,0x79,0x20,0x70,0x72, - 0x65,0x73,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x3c,0x73,0x74,0x72,0x6f, - 0x6e,0x67,0x3e,0x45,0x73,0x63,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x20, - 0x6b,0x65,0x79,0x20,0x6f,0x6e,0x20,0x79,0x6f,0x75,0x72,0x20,0x6b,0x65,0x79,0x62, - 0x6f,0x61,0x72,0x64,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x68,0x33,0x3e,0x4f, - 0x50,0x20,0x42,0x72,0x6f,0x77,0x73,0x65,0x72,0x3c,0x2f,0x68,0x33,0x3e,0xd,0xa, - 0x3c,0x70,0x3e,0x54,0x68,0x69,0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x73, - 0x68,0x6f,0x77,0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6e,0x74, - 0x20,0x73,0x74,0x61,0x74,0x65,0x20,0x6f,0x66,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74, - 0x20,0x6c,0x69,0x73,0x74,0x20,0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x4f, - 0x62,0x6a,0x65,0x63,0x74,0x20,0x50,0x72,0x6f,0x63,0x65,0x73,0x73,0x6f,0x72,0x20, - 0x69,0x73,0x20,0x70,0x6f,0x69,0x6e,0x74,0x69,0x6e,0x67,0x20,0x74,0x6f,0x2e,0x20, - 0x4e,0x6f,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x6d,0x6f,0x73,0x74,0x20,0x6f, - 0x66,0x20,0x74,0x68,0x65,0x20,0x74,0x69,0x6d,0x65,0x2c,0x20,0x74,0x68,0x69,0x73, - 0x20,0x77,0x69,0x6c,0x6c,0x20,0x6c,0x69,0x6b,0x65,0x6c,0x79,0x20,0x73,0x68,0x6f, - 0x77,0x20,0x61,0x6e,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x6c,0x69,0x73,0x74, - 0x20,0x74,0x68,0x61,0x74,0x20,0x68,0x61,0x73,0x20,0x68,0x61,0x64,0x20,0x69,0x74, - 0x73,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x73,0x20,0x70,0x72,0x6f,0x63,0x65,0x73, - 0x73,0x65,0x64,0x2e,0x20,0x49,0x74,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x64, - 0x69,0x73,0x6d,0x69,0x73,0x73,0x65,0x64,0x20,0x62,0x79,0x20,0x63,0x6c,0x69,0x63, - 0x6b,0x69,0x6e,0x67,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x26,0x6c,0x64,0x71, - 0x75,0x6f,0x3b,0x58,0x26,0x72,0x64,0x71,0x75,0x6f,0x3b,0x20,0x69,0x6e,0x20,0x74, - 0x68,0x65,0x20,0x75,0x70,0x70,0x65,0x72,0x20,0x63,0x6f,0x72,0x6e,0x65,0x72,0x20, - 0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x61,0x6c,0x6f,0x67,0x2c,0x20,0x6f, - 0x72,0x20,0x62,0x79,0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6e,0x67,0x20,0x74,0x68, - 0x65,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x45,0x73,0x63,0x3c,0x2f,0x73, - 0x74,0x72,0x6f,0x6e,0x67,0x3e,0x20,0x6b,0x65,0x79,0x20,0x6f,0x6e,0x20,0x79,0x6f, - 0x75,0x72,0x20,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x2e,0x3c,0x2f,0x70,0x3e, - 0xd,0xa,0x3c,0x68,0x33,0x3e,0x4d,0x36,0x38,0x4b,0x20,0x44,0x69,0x73,0x61,0x73, - 0x73,0x65,0x6d,0x62,0x6c,0x79,0x20,0x42,0x72,0x6f,0x77,0x73,0x65,0x72,0x3c,0x2f, - 0x68,0x33,0x3e,0xd,0xa,0x3c,0x70,0x3e,0x54,0x68,0x69,0x73,0x20,0x77,0x69,0x6e, - 0x64,0x6f,0x77,0x20,0x70,0x72,0x6f,0x76,0x69,0x64,0x65,0x73,0x20,0x61,0x20,0x64, - 0x69,0x73,0x61,0x73,0x73,0x65,0x6d,0x62,0x6c,0x79,0x20,0x6f,0x66,0x20,0x36,0x38, - 0x30,0x30,0x30,0x20,0x6f,0x70,0x63,0x6f,0x64,0x65,0x73,0x2e,0x20,0x49,0x74,0x20, - 0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x64,0x69,0x73,0x6d,0x69,0x73,0x73,0x65,0x64, - 0x20,0x62,0x79,0x20,0x63,0x6c,0x69,0x63,0x6b,0x69,0x6e,0x67,0x20,0x6f,0x6e,0x20, - 0x74,0x68,0x65,0x20,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b,0x58,0x26,0x72,0x64,0x71, - 0x75,0x6f,0x3b,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x75,0x70,0x70,0x65,0x72, - 0x20,0x63,0x6f,0x72,0x6e,0x65,0x72,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x64, - 0x69,0x61,0x6c,0x6f,0x67,0x2c,0x20,0x6f,0x72,0x20,0x62,0x79,0x20,0x70,0x72,0x65, - 0x73,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e, - 0x67,0x3e,0x45,0x73,0x63,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x20,0x6b, - 0x65,0x79,0x20,0x6f,0x6e,0x20,0x79,0x6f,0x75,0x72,0x20,0x6b,0x65,0x79,0x62,0x6f, - 0x61,0x72,0x64,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x68,0x33,0x3e,0x52,0x49, - 0x53,0x43,0x20,0x44,0x69,0x73,0x61,0x73,0x73,0x65,0x6d,0x62,0x6c,0x79,0x20,0x42, + 0x61,0x72,0x3b,0x20,0x61,0x20,0x6d,0x65,0x6d,0x6f,0x72,0x79,0x20,0x62,0x72,0x65, + 0x61,0x6b,0x70,0x6f,0x69,0x6e,0x74,0x20,0x28,0x72,0x65,0x61,0x64,0x20,0x26,0x41, + 0x61,0x63,0x75,0x74,0x65,0x3b,0x20,0x77,0x72,0x69,0x74,0x65,0x29,0x20,0x63,0x61, + 0x6e,0x20,0x61,0x6c,0x73,0x6f,0x20,0x62,0x65,0x20,0x73,0x65,0x74,0x20,0x76,0x69, + 0x61,0x20,0x74,0x68,0x65,0x20,0x42,0x50,0x4d,0x20,0x73,0x65,0x74,0x74,0x69,0x6e, + 0x67,0x2e,0x20,0x54,0x68,0x65,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x63,0x61, + 0x6e,0x20,0x62,0x65,0x20,0x64,0x69,0x73,0x6d,0x69,0x73,0x73,0x65,0x64,0x20,0x62, + 0x79,0x20,0x63,0x6c,0x69,0x63,0x6b,0x69,0x6e,0x67,0x20,0x6f,0x6e,0x20,0x74,0x68, + 0x65,0x20,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b,0x58,0x26,0x72,0x64,0x71,0x75,0x6f, + 0x3b,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x75,0x70,0x70,0x65,0x72,0x20,0x63, + 0x6f,0x72,0x6e,0x65,0x72,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x61, + 0x6c,0x6f,0x67,0x2c,0x20,0x6f,0x72,0x20,0x62,0x79,0x20,0x70,0x72,0x65,0x73,0x73, + 0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e, + 0x45,0x73,0x63,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x20,0x6b,0x65,0x79, + 0x20,0x6f,0x6e,0x20,0x79,0x6f,0x75,0x72,0x20,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72, + 0x64,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x68,0x33,0x3e,0x4f,0x50,0x20,0x42, 0x72,0x6f,0x77,0x73,0x65,0x72,0x3c,0x2f,0x68,0x33,0x3e,0xd,0xa,0x3c,0x70,0x3e, - 0x54,0x68,0x69,0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x70,0x72,0x6f,0x76, - 0x69,0x64,0x65,0x73,0x20,0x61,0x20,0x64,0x69,0x73,0x61,0x73,0x73,0x65,0x6d,0x62, - 0x6c,0x79,0x20,0x6f,0x66,0x20,0x52,0x49,0x53,0x43,0x20,0x6f,0x70,0x63,0x6f,0x64, - 0x65,0x73,0x2e,0x20,0x49,0x74,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x64,0x69, - 0x73,0x6d,0x69,0x73,0x73,0x65,0x64,0x20,0x62,0x79,0x20,0x63,0x6c,0x69,0x63,0x6b, - 0x69,0x6e,0x67,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x26,0x6c,0x64,0x71,0x75, - 0x6f,0x3b,0x58,0x26,0x72,0x64,0x71,0x75,0x6f,0x3b,0x20,0x69,0x6e,0x20,0x74,0x68, - 0x65,0x20,0x75,0x70,0x70,0x65,0x72,0x20,0x63,0x6f,0x72,0x6e,0x65,0x72,0x20,0x6f, - 0x66,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x61,0x6c,0x6f,0x67,0x2c,0x20,0x6f,0x72, - 0x20,0x62,0x79,0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65, - 0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x45,0x73,0x63,0x3c,0x2f,0x73,0x74, - 0x72,0x6f,0x6e,0x67,0x3e,0x20,0x6b,0x65,0x79,0x20,0x6f,0x6e,0x20,0x79,0x6f,0x75, - 0x72,0x20,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x2e,0x3c,0x2f,0x70,0x3e,0xd, - 0xa,0x3c,0x70,0x3e,0x54,0x68,0x65,0x20,0x61,0x66,0x6f,0x72,0x65,0x6d,0x65,0x6e, - 0x74,0x69,0x6f,0x6e,0x65,0x64,0x20,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x73,0x20,0x77, - 0x69,0x6c,0x6c,0x20,0x6f,0x6e,0x6c,0x79,0x20,0x77,0x6f,0x72,0x6b,0x20,0x77,0x68, - 0x65,0x6e,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a, - 0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x69,0x73,0x20,0x72,0x75, - 0x6e,0x20,0x69,0x6e,0x20,0x41,0x6c,0x70,0x69,0x6e,0x65,0x20,0x6f,0x72,0x20,0x44, - 0x65,0x62,0x75,0x67,0x67,0x65,0x72,0x20,0x6d,0x6f,0x64,0x65,0x2c,0x20,0x74,0x68, - 0x61,0x74,0x20,0x69,0x73,0x2c,0x20,0x77,0x68,0x65,0x6e,0x20,0x74,0x68,0x65,0x20, - 0x2d,0x2d,0x61,0x6c,0x70,0x69,0x6e,0x65,0x20,0x6f,0x72,0x20,0x2d,0x2d,0x64,0x65, - 0x62,0x75,0x67,0x67,0x65,0x72,0x20,0x66,0x6c,0x61,0x67,0x20,0x69,0x73,0x20,0x70, - 0x61,0x73,0x73,0x65,0x64,0x20,0x69,0x6e,0x2e,0x20,0x49,0x66,0x20,0x79,0x6f,0x75, - 0x20,0x64,0x6f,0x20,0x6e,0x6f,0x74,0x20,0x70,0x61,0x73,0x73,0x20,0x73,0x75,0x63, - 0x68,0x20,0x66,0x6c,0x61,0x67,0x2c,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74, - 0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20, - 0x77,0x69,0x6c,0x6c,0x20,0x72,0x75,0x6e,0x20,0x61,0x73,0x20,0x69,0x74,0x20,0x6e, - 0x6f,0x72,0x6d,0x61,0x6c,0x6c,0x79,0x20,0x64,0x6f,0x65,0x73,0x2c,0x20,0x69,0x2e, - 0x65,0x2e,0x2c,0x20,0x61,0x73,0x20,0x61,0x20,0x73,0x74,0x6f,0x63,0x6b,0x20,0x4a, - 0x61,0x67,0x75,0x61,0x72,0x2c,0x20,0x61,0x6e,0x64,0x20,0x6e,0x6f,0x74,0x68,0x69, - 0x6e,0x67,0x20,0x77,0x69,0x6c,0x6c,0x20,0x62,0x65,0x20,0x6c,0x6f,0x61,0x64,0x65, - 0x64,0x20,0x62,0x79,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x2e,0x3c,0x2f,0x70, - 0x3e,0xd,0xa,0x3c,0x68,0x32,0x3e,0x46,0x6f,0x72,0x20,0x54,0x68,0x65,0x20,0x43, - 0x75,0x72,0x69,0x6f,0x75,0x73,0x3c,0x2f,0x68,0x32,0x3e,0xd,0xa,0x3c,0x70,0x3e, - 0x49,0x66,0x20,0x79,0x6f,0x75,0x26,0x72,0x73,0x71,0x75,0x6f,0x3b,0x72,0x65,0x20, - 0x77,0x6f,0x6e,0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x77,0x68,0x79,0x20,0x73,0x6f, - 0x6d,0x65,0x20,0x63,0x61,0x72,0x74,0x72,0x69,0x64,0x67,0x65,0x73,0x20,0x68,0x61, - 0x76,0x65,0x20,0x6c,0x61,0x62,0x65,0x6c,0x73,0x20,0x69,0x6e,0x20,0x74,0x68,0x65, - 0x20,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b,0x49,0x6e,0x73,0x65,0x72,0x74,0x20,0x43, - 0x61,0x72,0x74,0x72,0x69,0x64,0x67,0x65,0x2e,0x2e,0x2e,0x26,0x72,0x64,0x71,0x75, - 0x6f,0x3b,0x20,0x64,0x69,0x61,0x6c,0x6f,0x67,0x75,0x65,0x20,0x61,0x6e,0x64,0x20, - 0x73,0x6f,0x6d,0x65,0x20,0x64,0x6f,0x6e,0x26,0x72,0x73,0x71,0x75,0x6f,0x3b,0x74, - 0x2c,0x20,0x72,0x65,0x61,0x64,0x20,0x6f,0x6e,0x2e,0x2e,0x2e,0x3c,0x2f,0x70,0x3e, - 0xd,0xa,0x3c,0x70,0x3e,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c, - 0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x6c,0x6f,0x6f, - 0x6b,0x73,0x20,0x61,0x74,0x20,0x79,0x6f,0x75,0x72,0x20,0x5a,0x49,0x50,0x20,0x66, - 0x69,0x6c,0x65,0x20,0x61,0x73,0x20,0x61,0x20,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e, - 0x65,0x72,0x26,0x6d,0x64,0x61,0x73,0x68,0x3b,0x69,0x66,0x20,0x69,0x74,0x20,0x66, - 0x69,0x6e,0x64,0x73,0x20,0x77,0x68,0x61,0x74,0x20,0x69,0x74,0x20,0x65,0x78,0x70, - 0x65,0x63,0x74,0x73,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x5a,0x49,0x50,0x2c, - 0x20,0x69,0x74,0x20,0x77,0x69,0x6c,0x6c,0x20,0x75,0x73,0x65,0x20,0x69,0x74,0x2e, - 0x20,0x46,0x6f,0x72,0x20,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x2c,0x20,0x6c,0x61, - 0x62,0x65,0x6c,0x20,0x69,0x6d,0x61,0x67,0x65,0x73,0x3a,0x20,0x49,0x66,0x20,0x79, - 0x6f,0x75,0x20,0x70,0x75,0x74,0x20,0x61,0x6e,0x20,0x69,0x6d,0x61,0x67,0x65,0x20, - 0x66,0x69,0x6c,0x65,0x20,0x6f,0x66,0x20,0x61,0x20,0x63,0x61,0x72,0x74,0x72,0x69, - 0x64,0x67,0x65,0x20,0x6c,0x61,0x62,0x65,0x6c,0x20,0x69,0x6e,0x20,0x74,0x68,0x65, - 0x20,0x5a,0x49,0x50,0x20,0x66,0x69,0x6c,0x65,0x20,0x77,0x69,0x74,0x68,0x20,0x79, - 0x6f,0x75,0x72,0x20,0x52,0x4f,0x4d,0x20,0x69,0x6d,0x61,0x67,0x65,0x2c,0x20,0x3c, - 0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61, - 0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x77,0x69,0x6c,0x6c,0x20,0x75,0x73,0x65,0x20, - 0x74,0x68,0x61,0x74,0x20,0x69,0x6d,0x61,0x67,0x65,0x20,0x69,0x6e,0x20,0x74,0x68, - 0x65,0x20,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b,0x49,0x6e,0x73,0x65,0x72,0x74,0x20, - 0x43,0x61,0x72,0x74,0x72,0x69,0x64,0x67,0x65,0x2e,0x2e,0x2e,0x26,0x72,0x64,0x71, - 0x75,0x6f,0x3b,0x20,0x64,0x69,0x61,0x6c,0x6f,0x67,0x75,0x65,0x20,0x26,0x6d,0x64, - 0x61,0x73,0x68,0x3b,0x20,0x61,0x73,0x73,0x75,0x6d,0x69,0x6e,0x67,0x20,0x69,0x74, - 0x26,0x72,0x73,0x71,0x75,0x6f,0x3b,0x73,0x20,0x61,0x20,0x76,0x61,0x6c,0x69,0x64, - 0x20,0x69,0x6d,0x61,0x67,0x65,0x20,0x66,0x69,0x6c,0x65,0x2e,0x20,0x54,0x68,0x65, - 0x20,0x69,0x6d,0x61,0x67,0x65,0x20,0x73,0x68,0x6f,0x75,0x6c,0x64,0x20,0x62,0x65, - 0x20,0x33,0x36,0x35,0x20,0x78,0x20,0x31,0x36,0x38,0x20,0x66,0x6f,0x72,0x20,0x69, - 0x74,0x20,0x74,0x6f,0x20,0x73,0x68,0x6f,0x77,0x20,0x75,0x70,0x20,0x6f,0x6e,0x20, - 0x74,0x68,0x65,0x20,0x62,0x69,0x67,0x20,0x63,0x61,0x72,0x74,0x72,0x69,0x64,0x67, - 0x65,0x20,0x69,0x6d,0x61,0x67,0x65,0x20,0x77,0x69,0x74,0x68,0x6f,0x75,0x74,0x20, - 0x61,0x6e,0x79,0x20,0x73,0x63,0x61,0x6c,0x69,0x6e,0x67,0x3b,0x20,0x61,0x6e,0x79, - 0x20,0x62,0x69,0x67,0x67,0x65,0x72,0x20,0x69,0x73,0x20,0x6a,0x75,0x73,0x74,0x20, - 0x61,0x20,0x77,0x61,0x73,0x74,0x65,0x20,0x6f,0x66,0x20,0x73,0x70,0x61,0x63,0x65, - 0x20,0x61,0x6e,0x64,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c, + 0x54,0x68,0x69,0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x73,0x68,0x6f,0x77, + 0x73,0x20,0x74,0x68,0x65,0x20,0x63,0x75,0x72,0x72,0x65,0x6e,0x74,0x20,0x73,0x74, + 0x61,0x74,0x65,0x20,0x6f,0x66,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x6c,0x69, + 0x73,0x74,0x20,0x74,0x68,0x61,0x74,0x20,0x74,0x68,0x65,0x20,0x4f,0x62,0x6a,0x65, + 0x63,0x74,0x20,0x50,0x72,0x6f,0x63,0x65,0x73,0x73,0x6f,0x72,0x20,0x69,0x73,0x20, + 0x70,0x6f,0x69,0x6e,0x74,0x69,0x6e,0x67,0x20,0x74,0x6f,0x2e,0x20,0x4e,0x6f,0x74, + 0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x6d,0x6f,0x73,0x74,0x20,0x6f,0x66,0x20,0x74, + 0x68,0x65,0x20,0x74,0x69,0x6d,0x65,0x2c,0x20,0x74,0x68,0x69,0x73,0x20,0x77,0x69, + 0x6c,0x6c,0x20,0x6c,0x69,0x6b,0x65,0x6c,0x79,0x20,0x73,0x68,0x6f,0x77,0x20,0x61, + 0x6e,0x20,0x6f,0x62,0x6a,0x65,0x63,0x74,0x20,0x6c,0x69,0x73,0x74,0x20,0x74,0x68, + 0x61,0x74,0x20,0x68,0x61,0x73,0x20,0x68,0x61,0x64,0x20,0x69,0x74,0x73,0x20,0x6f, + 0x62,0x6a,0x65,0x63,0x74,0x73,0x20,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x65,0x64, + 0x2e,0x20,0x49,0x74,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x64,0x69,0x73,0x6d, + 0x69,0x73,0x73,0x65,0x64,0x20,0x62,0x79,0x20,0x63,0x6c,0x69,0x63,0x6b,0x69,0x6e, + 0x67,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b, + 0x58,0x26,0x72,0x64,0x71,0x75,0x6f,0x3b,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20, + 0x75,0x70,0x70,0x65,0x72,0x20,0x63,0x6f,0x72,0x6e,0x65,0x72,0x20,0x6f,0x66,0x20, + 0x74,0x68,0x65,0x20,0x64,0x69,0x61,0x6c,0x6f,0x67,0x2c,0x20,0x6f,0x72,0x20,0x62, + 0x79,0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x3c, + 0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x45,0x73,0x63,0x3c,0x2f,0x73,0x74,0x72,0x6f, + 0x6e,0x67,0x3e,0x20,0x6b,0x65,0x79,0x20,0x6f,0x6e,0x20,0x79,0x6f,0x75,0x72,0x20, + 0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c, + 0x68,0x33,0x3e,0x4d,0x36,0x38,0x4b,0x20,0x44,0x69,0x73,0x61,0x73,0x73,0x65,0x6d, + 0x62,0x6c,0x79,0x20,0x42,0x72,0x6f,0x77,0x73,0x65,0x72,0x3c,0x2f,0x68,0x33,0x3e, + 0xd,0xa,0x3c,0x70,0x3e,0x54,0x68,0x69,0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77, + 0x20,0x70,0x72,0x6f,0x76,0x69,0x64,0x65,0x73,0x20,0x61,0x20,0x64,0x69,0x73,0x61, + 0x73,0x73,0x65,0x6d,0x62,0x6c,0x79,0x20,0x6f,0x66,0x20,0x36,0x38,0x30,0x30,0x30, + 0x20,0x6f,0x70,0x63,0x6f,0x64,0x65,0x73,0x2e,0x20,0x49,0x74,0x20,0x63,0x61,0x6e, + 0x20,0x62,0x65,0x20,0x64,0x69,0x73,0x6d,0x69,0x73,0x73,0x65,0x64,0x20,0x62,0x79, + 0x20,0x63,0x6c,0x69,0x63,0x6b,0x69,0x6e,0x67,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65, + 0x20,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b,0x58,0x26,0x72,0x64,0x71,0x75,0x6f,0x3b, + 0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x75,0x70,0x70,0x65,0x72,0x20,0x63,0x6f, + 0x72,0x6e,0x65,0x72,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x61,0x6c, + 0x6f,0x67,0x2c,0x20,0x6f,0x72,0x20,0x62,0x79,0x20,0x70,0x72,0x65,0x73,0x73,0x69, + 0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x45, + 0x73,0x63,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x20,0x6b,0x65,0x79,0x20, + 0x6f,0x6e,0x20,0x79,0x6f,0x75,0x72,0x20,0x6b,0x65,0x79,0x62,0x6f,0x61,0x72,0x64, + 0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x68,0x33,0x3e,0x52,0x49,0x53,0x43,0x20, + 0x44,0x69,0x73,0x61,0x73,0x73,0x65,0x6d,0x62,0x6c,0x79,0x20,0x42,0x72,0x6f,0x77, + 0x73,0x65,0x72,0x3c,0x2f,0x68,0x33,0x3e,0xd,0xa,0x3c,0x70,0x3e,0x54,0x68,0x69, + 0x73,0x20,0x77,0x69,0x6e,0x64,0x6f,0x77,0x20,0x70,0x72,0x6f,0x76,0x69,0x64,0x65, + 0x73,0x20,0x61,0x20,0x64,0x69,0x73,0x61,0x73,0x73,0x65,0x6d,0x62,0x6c,0x79,0x20, + 0x6f,0x66,0x20,0x52,0x49,0x53,0x43,0x20,0x6f,0x70,0x63,0x6f,0x64,0x65,0x73,0x2e, + 0x20,0x49,0x74,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x64,0x69,0x73,0x6d,0x69, + 0x73,0x73,0x65,0x64,0x20,0x62,0x79,0x20,0x63,0x6c,0x69,0x63,0x6b,0x69,0x6e,0x67, + 0x20,0x6f,0x6e,0x20,0x74,0x68,0x65,0x20,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b,0x58, + 0x26,0x72,0x64,0x71,0x75,0x6f,0x3b,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x75, + 0x70,0x70,0x65,0x72,0x20,0x63,0x6f,0x72,0x6e,0x65,0x72,0x20,0x6f,0x66,0x20,0x74, + 0x68,0x65,0x20,0x64,0x69,0x61,0x6c,0x6f,0x67,0x2c,0x20,0x6f,0x72,0x20,0x62,0x79, + 0x20,0x70,0x72,0x65,0x73,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x3c,0x73, + 0x74,0x72,0x6f,0x6e,0x67,0x3e,0x45,0x73,0x63,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e, + 0x67,0x3e,0x20,0x6b,0x65,0x79,0x20,0x6f,0x6e,0x20,0x79,0x6f,0x75,0x72,0x20,0x6b, + 0x65,0x79,0x62,0x6f,0x61,0x72,0x64,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x70, + 0x3e,0x54,0x68,0x65,0x20,0x61,0x66,0x6f,0x72,0x65,0x6d,0x65,0x6e,0x74,0x69,0x6f, + 0x6e,0x65,0x64,0x20,0x6f,0x70,0x74,0x69,0x6f,0x6e,0x73,0x20,0x77,0x69,0x6c,0x6c, + 0x20,0x6f,0x6e,0x6c,0x79,0x20,0x77,0x6f,0x72,0x6b,0x20,0x77,0x68,0x65,0x6e,0x20, + 0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75, + 0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x69,0x73,0x20,0x72,0x75,0x6e,0x20,0x69, + 0x6e,0x20,0x41,0x6c,0x70,0x69,0x6e,0x65,0x20,0x6f,0x72,0x20,0x44,0x65,0x62,0x75, + 0x67,0x67,0x65,0x72,0x20,0x6d,0x6f,0x64,0x65,0x2c,0x20,0x74,0x68,0x61,0x74,0x20, + 0x69,0x73,0x2c,0x20,0x77,0x68,0x65,0x6e,0x20,0x74,0x68,0x65,0x20,0x2d,0x2d,0x61, + 0x6c,0x70,0x69,0x6e,0x65,0x20,0x6f,0x72,0x20,0x2d,0x2d,0x64,0x65,0x62,0x75,0x67, + 0x67,0x65,0x72,0x20,0x66,0x6c,0x61,0x67,0x20,0x69,0x73,0x20,0x70,0x61,0x73,0x73, + 0x65,0x64,0x20,0x69,0x6e,0x2e,0x20,0x49,0x66,0x20,0x79,0x6f,0x75,0x20,0x64,0x6f, + 0x20,0x6e,0x6f,0x74,0x20,0x70,0x61,0x73,0x73,0x20,0x73,0x75,0x63,0x68,0x20,0x66, + 0x6c,0x61,0x67,0x2c,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c, 0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x77,0x69,0x6c, - 0x6c,0x20,0x73,0x63,0x61,0x6c,0x65,0x20,0x69,0x74,0x20,0x64,0x6f,0x77,0x6e,0x20, - 0x74,0x6f,0x20,0x33,0x36,0x35,0x20,0x78,0x20,0x31,0x36,0x38,0x20,0x61,0x6e,0x79, - 0x77,0x61,0x79,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x70,0x3e,0x55,0x73,0x69, - 0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x5a,0x49,0x50,0x20,0x66,0x69,0x6c,0x65,0x20, - 0x61,0x73,0x20,0x61,0x20,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x20,0x74, - 0x68,0x69,0x73,0x20,0x77,0x61,0x79,0x20,0x6f,0x70,0x65,0x6e,0x73,0x20,0x75,0x70, - 0x20,0x73,0x6f,0x6d,0x65,0x20,0x65,0x78,0x63,0x69,0x74,0x69,0x6e,0x67,0x20,0x70, - 0x6f,0x73,0x73,0x69,0x62,0x69,0x6c,0x69,0x74,0x69,0x65,0x73,0x3a,0x20,0x42,0x6f, - 0x78,0x20,0x61,0x72,0x74,0x2c,0x20,0x6f,0x76,0x65,0x72,0x6c,0x61,0x79,0x73,0x20, - 0x61,0x6e,0x64,0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f, - 0x6e,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65, - 0x64,0x20,0x61,0x6e,0x64,0x20,0x66,0x75,0x74,0x75,0x72,0x65,0x20,0x76,0x65,0x72, - 0x73,0x69,0x6f,0x6e,0x73,0x20,0x6f,0x66,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72, - 0x74,0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e, - 0x20,0x77,0x69,0x6c,0x6c,0x20,0x62,0x65,0x20,0x61,0x62,0x6c,0x65,0x20,0x74,0x6f, - 0x20,0x75,0x74,0x69,0x6c,0x69,0x7a,0x65,0x20,0x74,0x68,0x65,0x6d,0x2e,0x3c,0x2f, - 0x70,0x3e,0xd,0xa,0x3c,0x68,0x32,0x3e,0x4c,0x65,0x67,0x61,0x6c,0x20,0x4e,0x69, - 0x67,0x67,0x6c,0x69,0x6e,0x67,0x73,0x3c,0x2f,0x68,0x32,0x3e,0xd,0xa,0x3c,0x70, - 0x3e,0x4f,0x72,0x2c,0x20,0x61,0x73,0x20,0x69,0x74,0x26,0x72,0x73,0x71,0x75,0x6f, - 0x3b,0x73,0x20,0x6d,0x6f,0x72,0x65,0x20,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x6c,0x79, - 0x20,0x6b,0x6e,0x6f,0x77,0x6e,0x2c,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x73,0x63, - 0x6c,0x61,0x69,0x6d,0x65,0x72,0x3a,0x20,0x3c,0x65,0x6d,0x3e,0x26,0x6c,0x64,0x71, - 0x75,0x6f,0x3b,0x4f,0x20,0x6c,0x69,0x61,0x62,0x69,0x6c,0x69,0x74,0x79,0x2c,0x20, - 0x49,0x20,0x64,0x6f,0x20,0x64,0x69,0x73,0x63,0x6c,0x61,0x69,0x6d,0x20,0x74,0x68, - 0x65,0x65,0x21,0x26,0x72,0x64,0x71,0x75,0x6f,0x3b,0x3c,0x2f,0x65,0x6d,0x3e,0x3c, - 0x2f,0x70,0x3e,0xd,0xa,0x3c,0x70,0x3e,0x54,0x72,0x61,0x64,0x65,0x6d,0x61,0x72, - 0x6b,0x73,0x20,0x75,0x73,0x65,0x64,0x20,0x69,0x6e,0x20,0x3c,0x65,0x6d,0x3e,0x56, - 0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65, - 0x6d,0x3e,0x20,0x61,0x6e,0x64,0x2f,0x6f,0x72,0x20,0x74,0x68,0x69,0x73,0x20,0x64, - 0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x72,0x65, - 0x20,0x74,0x68,0x65,0x20,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x20,0x6f,0x66, - 0x20,0x74,0x68,0x65,0x69,0x72,0x20,0x72,0x65,0x73,0x70,0x65,0x63,0x74,0x69,0x76, - 0x65,0x20,0x6f,0x77,0x6e,0x65,0x72,0x73,0x2e,0x20,0x54,0x68,0x65,0x20,0x75,0x73, - 0x65,0x72,0x28,0x73,0x29,0x20,0x6f,0x66,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72, - 0x74,0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e, - 0x20,0x61,0x73,0x73,0x75,0x6d,0x65,0x73,0x20,0x61,0x6c,0x6c,0x20,0x72,0x69,0x73, - 0x6b,0x20,0x61,0x73,0x73,0x6f,0x63,0x69,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74, - 0x68,0x20,0x75,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x73,0x6f,0x66,0x74, - 0x77,0x61,0x72,0x65,0x3b,0x20,0x74,0x68,0x65,0x20,0x61,0x75,0x74,0x68,0x6f,0x72, - 0x73,0x20,0x61,0x72,0x65,0x20,0x6e,0x6f,0x74,0x20,0x72,0x65,0x73,0x70,0x6f,0x6e, - 0x73,0x69,0x62,0x6c,0x65,0x20,0x66,0x6f,0x72,0x20,0x61,0x6e,0x79,0x74,0x68,0x69, - 0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x75,0x73,0x65,0x72,0x28,0x73,0x29,0x20,0x64, - 0x6f,0x65,0x73,0x20,0x77,0x69,0x74,0x68,0x20,0x73,0x61,0x69,0x64,0x20,0x73,0x6f, - 0x66,0x74,0x77,0x61,0x72,0x65,0x20,0x6f,0x72,0x20,0x77,0x68,0x61,0x74,0x20,0x68, - 0x61,0x70,0x70,0x65,0x6e,0x73,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x75,0x73, - 0x65,0x72,0x28,0x73,0x29,0x20,0x61,0x73,0x20,0x61,0x20,0x72,0x65,0x73,0x75,0x6c, - 0x74,0x20,0x6f,0x66,0x20,0x75,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x69,0x73,0x20, - 0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c, + 0x6c,0x20,0x72,0x75,0x6e,0x20,0x61,0x73,0x20,0x69,0x74,0x20,0x6e,0x6f,0x72,0x6d, + 0x61,0x6c,0x6c,0x79,0x20,0x64,0x6f,0x65,0x73,0x2c,0x20,0x69,0x2e,0x65,0x2e,0x2c, + 0x20,0x61,0x73,0x20,0x61,0x20,0x73,0x74,0x6f,0x63,0x6b,0x20,0x4a,0x61,0x67,0x75, + 0x61,0x72,0x2c,0x20,0x61,0x6e,0x64,0x20,0x6e,0x6f,0x74,0x68,0x69,0x6e,0x67,0x20, + 0x77,0x69,0x6c,0x6c,0x20,0x62,0x65,0x20,0x6c,0x6f,0x61,0x64,0x65,0x64,0x20,0x62, + 0x79,0x20,0x64,0x65,0x66,0x61,0x75,0x6c,0x74,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa, + 0x3c,0x68,0x32,0x3e,0x46,0x6f,0x72,0x20,0x54,0x68,0x65,0x20,0x43,0x75,0x72,0x69, + 0x6f,0x75,0x73,0x3c,0x2f,0x68,0x32,0x3e,0xd,0xa,0x3c,0x70,0x3e,0x49,0x66,0x20, + 0x79,0x6f,0x75,0x26,0x72,0x73,0x71,0x75,0x6f,0x3b,0x72,0x65,0x20,0x77,0x6f,0x6e, + 0x64,0x65,0x72,0x69,0x6e,0x67,0x20,0x77,0x68,0x79,0x20,0x73,0x6f,0x6d,0x65,0x20, + 0x63,0x61,0x72,0x74,0x72,0x69,0x64,0x67,0x65,0x73,0x20,0x68,0x61,0x76,0x65,0x20, + 0x6c,0x61,0x62,0x65,0x6c,0x73,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x26,0x6c, + 0x64,0x71,0x75,0x6f,0x3b,0x49,0x6e,0x73,0x65,0x72,0x74,0x20,0x43,0x61,0x72,0x74, + 0x72,0x69,0x64,0x67,0x65,0x2e,0x2e,0x2e,0x26,0x72,0x64,0x71,0x75,0x6f,0x3b,0x20, + 0x64,0x69,0x61,0x6c,0x6f,0x67,0x75,0x65,0x20,0x61,0x6e,0x64,0x20,0x73,0x6f,0x6d, + 0x65,0x20,0x64,0x6f,0x6e,0x26,0x72,0x73,0x71,0x75,0x6f,0x3b,0x74,0x2c,0x20,0x72, + 0x65,0x61,0x64,0x20,0x6f,0x6e,0x2e,0x2e,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c, 0x70,0x3e,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a,0x61, - 0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x69,0x73,0x20,0x46,0x72,0x65, - 0x65,0x20,0x28,0x61,0x73,0x20,0x69,0x6e,0x20,0x4c,0x69,0x62,0x72,0x65,0x29,0x20, - 0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65,0x20,0x61,0x6e,0x64,0x20,0x69,0x73,0x20, - 0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74, - 0x68,0x65,0x20,0x47,0x50,0x4c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33, - 0x2e,0x20,0x59,0x6f,0x75,0x20,0x73,0x68,0x6f,0x75,0x6c,0x64,0x20,0x68,0x61,0x76, - 0x65,0x20,0x72,0x65,0x63,0x65,0x69,0x76,0x65,0x64,0x20,0x61,0x20,0x63,0x6f,0x70, - 0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65, - 0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x66,0x74,0x77, - 0x61,0x72,0x65,0x3b,0x20,0x69,0x66,0x20,0x79,0x6f,0x75,0x20,0x64,0x69,0x64,0x20, - 0x6e,0x6f,0x74,0x2c,0x20,0x79,0x6f,0x75,0x20,0x6d,0x61,0x79,0x20,0x76,0x69,0x65, - 0x77,0x20,0x61,0x20,0x63,0x6f,0x70,0x79,0x20,0x61,0x74,0x20,0x3c,0x61,0x20,0x68, - 0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e, - 0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x73, - 0x22,0x3e,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x67,0x6e,0x75, - 0x2e,0x6f,0x72,0x67,0x2f,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x73,0x3c,0x2f,0x61, - 0x3e,0x2e,0x20,0x41,0x20,0x63,0x6f,0x70,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x65, - 0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20, - 0x61,0x76,0x61,0x69,0x6c,0x61,0x62,0x6c,0x65,0x20,0x61,0x74,0x20,0x3c,0x61,0x20, - 0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x63,0x63, - 0x75,0x6c,0x75,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x76,0x69,0x72,0x74,0x75,0x61,0x6c, - 0x6a,0x61,0x67,0x75,0x61,0x72,0x22,0x3e,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69, - 0x63,0x63,0x75,0x6c,0x75,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x76,0x69,0x72,0x74,0x75, - 0x61,0x6c,0x6a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x61,0x3e,0x2e,0x20,0x41,0x20, - 0x63,0x6f,0x70,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x52,0x78,0x20,0x76, - 0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f, - 0x64,0x65,0x20,0x69,0x73,0x20,0x61,0x76,0x61,0x69,0x6c,0x61,0x62,0x6c,0x65,0x20, - 0x61,0x74,0x26,0x6e,0x62,0x73,0x70,0x3b,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d, - 0x22,0x68,0x74,0x74,0x70,0x73,0x3a,0x2f,0x2f,0x67,0x69,0x74,0x68,0x75,0x62,0x2e, - 0x63,0x6f,0x6d,0x2f,0x64,0x6a,0x69,0x70,0x69,0x2f,0x56,0x69,0x72,0x74,0x75,0x61, - 0x6c,0x2d,0x4a,0x61,0x67,0x75,0x61,0x72,0x2d,0x52,0x78,0x22,0x3e,0x68,0x74,0x74, - 0x70,0x73,0x3a,0x2f,0x2f,0x67,0x69,0x74,0x68,0x75,0x62,0x2e,0x63,0x6f,0x6d,0x2f, - 0x64,0x6a,0x69,0x70,0x69,0x2f,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x2d,0x4a,0x61, - 0x67,0x75,0x61,0x72,0x2d,0x52,0x78,0x3c,0x2f,0x61,0x3e,0x2e,0x3c,0x2f,0x70,0x3e, - 0xd,0xa,0x3c,0x70,0x3e,0x3c,0x65,0x6d,0x3e,0x44,0x6f,0x77,0x6e,0x66,0x61,0x6c, - 0x6c,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x69,0x73,0x20,0x26,0x63,0x6f,0x70,0x79,0x3b, - 0x20,0x32,0x30,0x31,0x31,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x52,0x65, - 0x62,0x6f,0x6f,0x74,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x2c,0x20,0x41, - 0x6c,0x6c,0x20,0x52,0x69,0x67,0x68,0x74,0x73,0x20,0x52,0x65,0x73,0x65,0x72,0x76, - 0x65,0x64,0x2e,0x20,0x44,0x69,0x73,0x74,0x72,0x69,0x62,0x75,0x74,0x69,0x6f,0x6e, - 0x20,0x6f,0x66,0x20,0x3c,0x65,0x6d,0x3e,0x44,0x6f,0x77,0x6e,0x66,0x61,0x6c,0x6c, - 0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x77,0x69,0x74,0x68,0x20,0x3c,0x65,0x6d,0x3e,0x56, - 0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65, - 0x6d,0x3e,0x20,0x68,0x61,0x73,0x20,0x62,0x65,0x65,0x6e,0x20,0x67,0x72,0x61,0x63, - 0x69,0x6f,0x75,0x73,0x6c,0x79,0x20,0x61,0x75,0x74,0x68,0x6f,0x72,0x69,0x7a,0x65, - 0x64,0x20,0x62,0x79,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x52,0x65,0x62, - 0x6f,0x6f,0x74,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x2c,0x20,0x61,0x6e, - 0x64,0x20,0x6d,0x61,0x79,0x20,0x6e,0x6f,0x74,0x20,0x62,0x65,0x20,0x64,0x69,0x73, - 0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x64,0x20,0x61,0x73,0x20,0x70,0x61,0x72,0x74, - 0x20,0x6f,0x66,0x20,0x61,0x6e,0x79,0x20,0x6f,0x74,0x68,0x65,0x72,0x20,0x70,0x61, - 0x63,0x6b,0x61,0x67,0x65,0x2e,0x20,0x41,0x73,0x20,0x70,0x72,0x65,0x76,0x69,0x6f, - 0x75,0x73,0x6c,0x79,0x20,0x73,0x74,0x61,0x74,0x65,0x64,0x2c,0x20,0x74,0x68,0x65, - 0x26,0x6e,0x62,0x73,0x70,0x3b,0x52,0x78,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e, - 0x20,0x64,0x6f,0x65,0x73,0x6e,0x27,0x74,0x20,0x68,0x61,0x76,0x65,0x20,0x74,0x68, - 0x65,0x20,0x67,0x61,0x6d,0x65,0x20,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x64,0x2e, - 0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0xd,0xa,0x3c, - 0x2f,0x68,0x74,0x6d,0x6c,0x3e,0xd,0xa, + 0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x6c,0x6f,0x6f,0x6b,0x73,0x20, + 0x61,0x74,0x20,0x79,0x6f,0x75,0x72,0x20,0x5a,0x49,0x50,0x20,0x66,0x69,0x6c,0x65, + 0x20,0x61,0x73,0x20,0x61,0x20,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x26, + 0x6d,0x64,0x61,0x73,0x68,0x3b,0x69,0x66,0x20,0x69,0x74,0x20,0x66,0x69,0x6e,0x64, + 0x73,0x20,0x77,0x68,0x61,0x74,0x20,0x69,0x74,0x20,0x65,0x78,0x70,0x65,0x63,0x74, + 0x73,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x5a,0x49,0x50,0x2c,0x20,0x69,0x74, + 0x20,0x77,0x69,0x6c,0x6c,0x20,0x75,0x73,0x65,0x20,0x69,0x74,0x2e,0x20,0x46,0x6f, + 0x72,0x20,0x65,0x78,0x61,0x6d,0x70,0x6c,0x65,0x2c,0x20,0x6c,0x61,0x62,0x65,0x6c, + 0x20,0x69,0x6d,0x61,0x67,0x65,0x73,0x3a,0x20,0x49,0x66,0x20,0x79,0x6f,0x75,0x20, + 0x70,0x75,0x74,0x20,0x61,0x6e,0x20,0x69,0x6d,0x61,0x67,0x65,0x20,0x66,0x69,0x6c, + 0x65,0x20,0x6f,0x66,0x20,0x61,0x20,0x63,0x61,0x72,0x74,0x72,0x69,0x64,0x67,0x65, + 0x20,0x6c,0x61,0x62,0x65,0x6c,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x5a,0x49, + 0x50,0x20,0x66,0x69,0x6c,0x65,0x20,0x77,0x69,0x74,0x68,0x20,0x79,0x6f,0x75,0x72, + 0x20,0x52,0x4f,0x4d,0x20,0x69,0x6d,0x61,0x67,0x65,0x2c,0x20,0x3c,0x65,0x6d,0x3e, + 0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f, + 0x65,0x6d,0x3e,0x20,0x77,0x69,0x6c,0x6c,0x20,0x75,0x73,0x65,0x20,0x74,0x68,0x61, + 0x74,0x20,0x69,0x6d,0x61,0x67,0x65,0x20,0x69,0x6e,0x20,0x74,0x68,0x65,0x20,0x26, + 0x6c,0x64,0x71,0x75,0x6f,0x3b,0x49,0x6e,0x73,0x65,0x72,0x74,0x20,0x43,0x61,0x72, + 0x74,0x72,0x69,0x64,0x67,0x65,0x2e,0x2e,0x2e,0x26,0x72,0x64,0x71,0x75,0x6f,0x3b, + 0x20,0x64,0x69,0x61,0x6c,0x6f,0x67,0x75,0x65,0x20,0x26,0x6d,0x64,0x61,0x73,0x68, + 0x3b,0x20,0x61,0x73,0x73,0x75,0x6d,0x69,0x6e,0x67,0x20,0x69,0x74,0x26,0x72,0x73, + 0x71,0x75,0x6f,0x3b,0x73,0x20,0x61,0x20,0x76,0x61,0x6c,0x69,0x64,0x20,0x69,0x6d, + 0x61,0x67,0x65,0x20,0x66,0x69,0x6c,0x65,0x2e,0x20,0x54,0x68,0x65,0x20,0x69,0x6d, + 0x61,0x67,0x65,0x20,0x73,0x68,0x6f,0x75,0x6c,0x64,0x20,0x62,0x65,0x20,0x33,0x36, + 0x35,0x20,0x78,0x20,0x31,0x36,0x38,0x20,0x66,0x6f,0x72,0x20,0x69,0x74,0x20,0x74, + 0x6f,0x20,0x73,0x68,0x6f,0x77,0x20,0x75,0x70,0x20,0x6f,0x6e,0x20,0x74,0x68,0x65, + 0x20,0x62,0x69,0x67,0x20,0x63,0x61,0x72,0x74,0x72,0x69,0x64,0x67,0x65,0x20,0x69, + 0x6d,0x61,0x67,0x65,0x20,0x77,0x69,0x74,0x68,0x6f,0x75,0x74,0x20,0x61,0x6e,0x79, + 0x20,0x73,0x63,0x61,0x6c,0x69,0x6e,0x67,0x3b,0x20,0x61,0x6e,0x79,0x20,0x62,0x69, + 0x67,0x67,0x65,0x72,0x20,0x69,0x73,0x20,0x6a,0x75,0x73,0x74,0x20,0x61,0x20,0x77, + 0x61,0x73,0x74,0x65,0x20,0x6f,0x66,0x20,0x73,0x70,0x61,0x63,0x65,0x20,0x61,0x6e, + 0x64,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a,0x61, + 0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x77,0x69,0x6c,0x6c,0x20,0x73, + 0x63,0x61,0x6c,0x65,0x20,0x69,0x74,0x20,0x64,0x6f,0x77,0x6e,0x20,0x74,0x6f,0x20, + 0x33,0x36,0x35,0x20,0x78,0x20,0x31,0x36,0x38,0x20,0x61,0x6e,0x79,0x77,0x61,0x79, + 0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x70,0x3e,0x55,0x73,0x69,0x6e,0x67,0x20, + 0x74,0x68,0x65,0x20,0x5a,0x49,0x50,0x20,0x66,0x69,0x6c,0x65,0x20,0x61,0x73,0x20, + 0x61,0x20,0x63,0x6f,0x6e,0x74,0x61,0x69,0x6e,0x65,0x72,0x20,0x74,0x68,0x69,0x73, + 0x20,0x77,0x61,0x79,0x20,0x6f,0x70,0x65,0x6e,0x73,0x20,0x75,0x70,0x20,0x73,0x6f, + 0x6d,0x65,0x20,0x65,0x78,0x63,0x69,0x74,0x69,0x6e,0x67,0x20,0x70,0x6f,0x73,0x73, + 0x69,0x62,0x69,0x6c,0x69,0x74,0x69,0x65,0x73,0x3a,0x20,0x42,0x6f,0x78,0x20,0x61, + 0x72,0x74,0x2c,0x20,0x6f,0x76,0x65,0x72,0x6c,0x61,0x79,0x73,0x20,0x61,0x6e,0x64, + 0x20,0x64,0x6f,0x63,0x75,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x63, + 0x61,0x6e,0x20,0x62,0x65,0x20,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x64,0x20,0x61, + 0x6e,0x64,0x20,0x66,0x75,0x74,0x75,0x72,0x65,0x20,0x76,0x65,0x72,0x73,0x69,0x6f, + 0x6e,0x73,0x20,0x6f,0x66,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61, + 0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x77,0x69, + 0x6c,0x6c,0x20,0x62,0x65,0x20,0x61,0x62,0x6c,0x65,0x20,0x74,0x6f,0x20,0x75,0x74, + 0x69,0x6c,0x69,0x7a,0x65,0x20,0x74,0x68,0x65,0x6d,0x2e,0x3c,0x2f,0x70,0x3e,0xd, + 0xa,0x3c,0x68,0x32,0x3e,0x4c,0x65,0x67,0x61,0x6c,0x20,0x4e,0x69,0x67,0x67,0x6c, + 0x69,0x6e,0x67,0x73,0x3c,0x2f,0x68,0x32,0x3e,0xd,0xa,0x3c,0x70,0x3e,0x4f,0x72, + 0x2c,0x20,0x61,0x73,0x20,0x69,0x74,0x26,0x72,0x73,0x71,0x75,0x6f,0x3b,0x73,0x20, + 0x6d,0x6f,0x72,0x65,0x20,0x63,0x6f,0x6d,0x6d,0x6f,0x6e,0x6c,0x79,0x20,0x6b,0x6e, + 0x6f,0x77,0x6e,0x2c,0x20,0x74,0x68,0x65,0x20,0x64,0x69,0x73,0x63,0x6c,0x61,0x69, + 0x6d,0x65,0x72,0x3a,0x20,0x3c,0x65,0x6d,0x3e,0x26,0x6c,0x64,0x71,0x75,0x6f,0x3b, + 0x4f,0x20,0x6c,0x69,0x61,0x62,0x69,0x6c,0x69,0x74,0x79,0x2c,0x20,0x49,0x20,0x64, + 0x6f,0x20,0x64,0x69,0x73,0x63,0x6c,0x61,0x69,0x6d,0x20,0x74,0x68,0x65,0x65,0x21, + 0x26,0x72,0x64,0x71,0x75,0x6f,0x3b,0x3c,0x2f,0x65,0x6d,0x3e,0x3c,0x2f,0x70,0x3e, + 0xd,0xa,0x3c,0x70,0x3e,0x54,0x72,0x61,0x64,0x65,0x6d,0x61,0x72,0x6b,0x73,0x20, + 0x75,0x73,0x65,0x64,0x20,0x69,0x6e,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74, + 0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20, + 0x61,0x6e,0x64,0x2f,0x6f,0x72,0x20,0x74,0x68,0x69,0x73,0x20,0x64,0x6f,0x63,0x75, + 0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x72,0x65,0x20,0x74,0x68, + 0x65,0x20,0x70,0x72,0x6f,0x70,0x65,0x72,0x74,0x79,0x20,0x6f,0x66,0x20,0x74,0x68, + 0x65,0x69,0x72,0x20,0x72,0x65,0x73,0x70,0x65,0x63,0x74,0x69,0x76,0x65,0x20,0x6f, + 0x77,0x6e,0x65,0x72,0x73,0x2e,0x20,0x54,0x68,0x65,0x20,0x75,0x73,0x65,0x72,0x28, + 0x73,0x29,0x20,0x6f,0x66,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61, + 0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x61,0x73, + 0x73,0x75,0x6d,0x65,0x73,0x20,0x61,0x6c,0x6c,0x20,0x72,0x69,0x73,0x6b,0x20,0x61, + 0x73,0x73,0x6f,0x63,0x69,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x75, + 0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x65,0x20,0x73,0x6f,0x66,0x74,0x77,0x61,0x72, + 0x65,0x3b,0x20,0x74,0x68,0x65,0x20,0x61,0x75,0x74,0x68,0x6f,0x72,0x73,0x20,0x61, + 0x72,0x65,0x20,0x6e,0x6f,0x74,0x20,0x72,0x65,0x73,0x70,0x6f,0x6e,0x73,0x69,0x62, + 0x6c,0x65,0x20,0x66,0x6f,0x72,0x20,0x61,0x6e,0x79,0x74,0x68,0x69,0x6e,0x67,0x20, + 0x74,0x68,0x65,0x20,0x75,0x73,0x65,0x72,0x28,0x73,0x29,0x20,0x64,0x6f,0x65,0x73, + 0x20,0x77,0x69,0x74,0x68,0x20,0x73,0x61,0x69,0x64,0x20,0x73,0x6f,0x66,0x74,0x77, + 0x61,0x72,0x65,0x20,0x6f,0x72,0x20,0x77,0x68,0x61,0x74,0x20,0x68,0x61,0x70,0x70, + 0x65,0x6e,0x73,0x20,0x74,0x6f,0x20,0x74,0x68,0x65,0x20,0x75,0x73,0x65,0x72,0x28, + 0x73,0x29,0x20,0x61,0x73,0x20,0x61,0x20,0x72,0x65,0x73,0x75,0x6c,0x74,0x20,0x6f, + 0x66,0x20,0x75,0x73,0x69,0x6e,0x67,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x66, + 0x74,0x77,0x61,0x72,0x65,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c,0x70,0x3e,0x3c, + 0x65,0x6d,0x3e,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61, + 0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20,0x69,0x73,0x20,0x46,0x72,0x65,0x65,0x20,0x28, + 0x61,0x73,0x20,0x69,0x6e,0x20,0x4c,0x69,0x62,0x72,0x65,0x29,0x20,0x73,0x6f,0x66, + 0x74,0x77,0x61,0x72,0x65,0x20,0x61,0x6e,0x64,0x20,0x69,0x73,0x20,0x6c,0x69,0x63, + 0x65,0x6e,0x73,0x65,0x64,0x20,0x75,0x6e,0x64,0x65,0x72,0x20,0x74,0x68,0x65,0x20, + 0x47,0x50,0x4c,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x2e,0x20,0x59, + 0x6f,0x75,0x20,0x73,0x68,0x6f,0x75,0x6c,0x64,0x20,0x68,0x61,0x76,0x65,0x20,0x72, + 0x65,0x63,0x65,0x69,0x76,0x65,0x64,0x20,0x61,0x20,0x63,0x6f,0x70,0x79,0x20,0x6f, + 0x66,0x20,0x74,0x68,0x65,0x20,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x20,0x77,0x69, + 0x74,0x68,0x20,0x74,0x68,0x69,0x73,0x20,0x73,0x6f,0x66,0x74,0x77,0x61,0x72,0x65, + 0x3b,0x20,0x69,0x66,0x20,0x79,0x6f,0x75,0x20,0x64,0x69,0x64,0x20,0x6e,0x6f,0x74, + 0x2c,0x20,0x79,0x6f,0x75,0x20,0x6d,0x61,0x79,0x20,0x76,0x69,0x65,0x77,0x20,0x61, + 0x20,0x63,0x6f,0x70,0x79,0x20,0x61,0x74,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66, + 0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x67,0x6e,0x75, + 0x2e,0x6f,0x72,0x67,0x2f,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x73,0x22,0x3e,0x68, + 0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x67,0x6e,0x75,0x2e,0x6f,0x72, + 0x67,0x2f,0x6c,0x69,0x63,0x65,0x6e,0x73,0x65,0x73,0x3c,0x2f,0x61,0x3e,0x2e,0x20, + 0x41,0x20,0x63,0x6f,0x70,0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x73,0x6f, + 0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x69,0x73,0x20,0x61,0x76,0x61, + 0x69,0x6c,0x61,0x62,0x6c,0x65,0x20,0x61,0x74,0x20,0x3c,0x61,0x20,0x68,0x72,0x65, + 0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x63,0x63,0x75,0x6c,0x75, + 0x73,0x2e,0x6f,0x72,0x67,0x2f,0x76,0x69,0x72,0x74,0x75,0x61,0x6c,0x6a,0x61,0x67, + 0x75,0x61,0x72,0x22,0x3e,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x69,0x63,0x63,0x75, + 0x6c,0x75,0x73,0x2e,0x6f,0x72,0x67,0x2f,0x76,0x69,0x72,0x74,0x75,0x61,0x6c,0x6a, + 0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x61,0x3e,0x2e,0x20,0x41,0x20,0x63,0x6f,0x70, + 0x79,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x52,0x78,0x20,0x76,0x65,0x72,0x73, + 0x69,0x6f,0x6e,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20, + 0x69,0x73,0x20,0x61,0x76,0x61,0x69,0x6c,0x61,0x62,0x6c,0x65,0x20,0x61,0x74,0x26, + 0x6e,0x62,0x73,0x70,0x3b,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74, + 0x74,0x70,0x73,0x3a,0x2f,0x2f,0x67,0x69,0x74,0x68,0x75,0x62,0x2e,0x63,0x6f,0x6d, + 0x2f,0x64,0x6a,0x69,0x70,0x69,0x2f,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x2d,0x4a, + 0x61,0x67,0x75,0x61,0x72,0x2d,0x52,0x78,0x22,0x3e,0x68,0x74,0x74,0x70,0x73,0x3a, + 0x2f,0x2f,0x67,0x69,0x74,0x68,0x75,0x62,0x2e,0x63,0x6f,0x6d,0x2f,0x64,0x6a,0x69, + 0x70,0x69,0x2f,0x56,0x69,0x72,0x74,0x75,0x61,0x6c,0x2d,0x4a,0x61,0x67,0x75,0x61, + 0x72,0x2d,0x52,0x78,0x3c,0x2f,0x61,0x3e,0x2e,0x3c,0x2f,0x70,0x3e,0xd,0xa,0x3c, + 0x70,0x3e,0x3c,0x65,0x6d,0x3e,0x44,0x6f,0x77,0x6e,0x66,0x61,0x6c,0x6c,0x3c,0x2f, + 0x65,0x6d,0x3e,0x20,0x69,0x73,0x20,0x26,0x63,0x6f,0x70,0x79,0x3b,0x20,0x32,0x30, + 0x31,0x31,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x52,0x65,0x62,0x6f,0x6f, + 0x74,0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x2c,0x20,0x41,0x6c,0x6c,0x20, + 0x52,0x69,0x67,0x68,0x74,0x73,0x20,0x52,0x65,0x73,0x65,0x72,0x76,0x65,0x64,0x2e, + 0x20,0x44,0x69,0x73,0x74,0x72,0x69,0x62,0x75,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x66, + 0x20,0x3c,0x65,0x6d,0x3e,0x44,0x6f,0x77,0x6e,0x66,0x61,0x6c,0x6c,0x3c,0x2f,0x65, + 0x6d,0x3e,0x20,0x77,0x69,0x74,0x68,0x20,0x3c,0x65,0x6d,0x3e,0x56,0x69,0x72,0x74, + 0x75,0x61,0x6c,0x20,0x4a,0x61,0x67,0x75,0x61,0x72,0x3c,0x2f,0x65,0x6d,0x3e,0x20, + 0x68,0x61,0x73,0x20,0x62,0x65,0x65,0x6e,0x20,0x67,0x72,0x61,0x63,0x69,0x6f,0x75, + 0x73,0x6c,0x79,0x20,0x61,0x75,0x74,0x68,0x6f,0x72,0x69,0x7a,0x65,0x64,0x20,0x62, + 0x79,0x20,0x3c,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x52,0x65,0x62,0x6f,0x6f,0x74, + 0x3c,0x2f,0x73,0x74,0x72,0x6f,0x6e,0x67,0x3e,0x2c,0x20,0x61,0x6e,0x64,0x20,0x6d, + 0x61,0x79,0x20,0x6e,0x6f,0x74,0x20,0x62,0x65,0x20,0x64,0x69,0x73,0x74,0x72,0x69, + 0x62,0x75,0x74,0x65,0x64,0x20,0x61,0x73,0x20,0x70,0x61,0x72,0x74,0x20,0x6f,0x66, + 0x20,0x61,0x6e,0x79,0x20,0x6f,0x74,0x68,0x65,0x72,0x20,0x70,0x61,0x63,0x6b,0x61, + 0x67,0x65,0x2e,0x20,0x41,0x73,0x20,0x70,0x72,0x65,0x76,0x69,0x6f,0x75,0x73,0x6c, + 0x79,0x20,0x73,0x74,0x61,0x74,0x65,0x64,0x2c,0x20,0x74,0x68,0x65,0x26,0x6e,0x62, + 0x73,0x70,0x3b,0x52,0x78,0x20,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x64,0x6f, + 0x65,0x73,0x6e,0x27,0x74,0x20,0x68,0x61,0x76,0x65,0x20,0x74,0x68,0x65,0x20,0x67, + 0x61,0x6d,0x65,0x20,0x69,0x6e,0x63,0x6c,0x75,0x64,0x65,0x64,0x2e,0x3c,0x2f,0x70, + 0x3e,0xd,0xa,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0xd,0xa,0x3c,0x2f,0x68,0x74, + 0x6d,0x6c,0x3e,0xd,0xa, // C:/Projects/Emulators/Virtual-Jaguar-Rx/res/debug-callstack.png 0x0,0x0,0x4,0x80, 0x89, @@ -75429,7 +75431,7 @@ static const unsigned char qt_resource_struct[] = { 0x0,0x0,0x1,0x5f,0xa7,0xb3,0xed,0x9b, // :/res/help.html 0x0,0x0,0x7,0x14,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x11,0xc8,0xc8, -0x0,0x0,0x1,0x6c,0x75,0x17,0x9b,0x57, +0x0,0x0,0x1,0x6c,0x8d,0xcf,0x1a,0xbf, // :/res/test-pattern-pal.jpg 0x0,0x0,0x4,0xc6,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0xf,0xcb,0xad, 0x0,0x0,0x1,0x5f,0xa7,0xb3,0xed,0xa1, @@ -75566,7 +75568,7 @@ static const unsigned char qt_resource_struct[] = { 0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x3,0x1a,0x27, 0x0,0x0,0x1,0x5f,0xa7,0xb3,0xed,0xa0, // :/res/debug-callstack.png - 0x0,0x0,0x7,0x2c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x12,0x46,0x95, + 0x0,0x0,0x7,0x2c,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x12,0x46,0xb2, 0x0,0x0,0x1,0x65,0x8e,0x7f,0x88,0xdf, }; diff --git a/docs/vj_HistoryNotes.txt b/docs/vj_HistoryNotes.txt index 5f965e3..06040bb 100644 --- a/docs/vj_HistoryNotes.txt +++ b/docs/vj_HistoryNotes.txt @@ -1,6 +1,12 @@ -Release 4 (TBD) ---------------- -Git commit: TBD +Release 4a (TBA) +---------------- +Git commit: +- +0) Fix specific breakpoint for ROM cartridge or unknown memory location writing + +Release 4 (10th August 2019) +---------------------------- +Git commit: 9b25d85d1ea4a9476b83476bcec65e05464f68da - 0) The zoom value setting has been fixed in the registry 1) Debugger mode now shares the same alpine rom path setting diff --git a/res/help.html b/res/help.html index d0b7ba1..47649cf 100644 --- a/res/help.html +++ b/res/help.html @@ -264,7 +264,7 @@

Stack Browser

This window lets you inspect Virtual Jaguar’s emulated memory stack (SP) space. The PgDn key will advance the top of the window’s memory location by 480 bytes, and PgUp will go back by the same amount. The Plus (+) key will advance the top of the window’s memory location by 16 bytes, and Minus (-) will go back by the same amount. Entering a memory location, in hexadecimal, in the edit field and pressing the Go button will display memory from that location. It can be dismissed by clicking on the “X” in the upper corner of the dialog, or by pressing the Esc key on your keyboard.

CPU Browser

-

This window shows the state of the various CPUs in the emulated Jaguar, a breakpoint can also be set via the BPM setting. The window can be dismissed by clicking on the “X” in the upper corner of the dialog, or by pressing the Esc key on your keyboard.

+

This window shows the state of the various CPUs in the emulated Jaguar; a memory breakpoint (read Á write) can also be set via the BPM setting. The window can be dismissed by clicking on the “X” in the upper corner of the dialog, or by pressing the Esc key on your keyboard.

OP Browser

This window shows the current state of object list that the Object Processor is pointing to. Note that most of the time, this will likely show an object list that has had its objects processed. It can be dismissed by clicking on the “X” in the upper corner of the dialog, or by pressing the Esc key on your keyboard.

M68K Disassembly Browser

diff --git a/src/jaguar.cpp b/src/jaguar.cpp index fe3aa9b..638cfe3 100644 --- a/src/jaguar.cpp +++ b/src/jaguar.cpp @@ -1460,7 +1460,7 @@ unsigned int m68k_read_memory_32(unsigned int address) } -// +// Alert message in case of writing to unknown memory location bool m68k_write_unknown_alert(unsigned int address, char *bits, unsigned int value) { QString msg; @@ -1468,58 +1468,55 @@ bool m68k_write_unknown_alert(unsigned int address, char *bits, unsigned int val msg.sprintf("$%06x: Writing at this unknown memory location $%06x with a (%s bits) value of $%0x", pcQueue[pcQPtr ? (pcQPtr - 1) : 0x3FF], address, bits, value); msgBox.setText(msg); - msgBox.setStandardButtons(QMessageBox::Cancel); - msgBox.setDefaultButton(QMessageBox::Cancel); + msgBox.setStandardButtons(QMessageBox::Abort); + msgBox.setDefaultButton(QMessageBox::Abort); msgBox.exec(); return M68KDebugHalt(); } -// +// Alert message in case of writing to cartridge/ROM memory location bool m68k_write_cartridge_alert(unsigned int address, char *bits, unsigned int value) { - QString msg; - QMessageBox msgBox; + if (!M68KDebugHaltStatus()) + { + QString msg; + QMessageBox msgBox; - msg.sprintf("$%06x: Writing at this ROM cartridge location $%06x with a (%s bits) value of $%0x", pcQueue[pcQPtr ? (pcQPtr - 1) : 0x3FF], address, bits, value); -#if 1 - msgBox.setText(msg); + msg.sprintf("$%06x: Writing at this ROM cartridge location $%06x with a (%s bits) value of $%0x", pcQueue[pcQPtr ? (pcQPtr - 1) : 0x3FF], address, bits, value); + msgBox.setText(msg); - if (!M68KDebugHaltStatus() && !strstr(bits, "32")) - { msgBox.setInformativeText("Do you want to continue?"); - msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); - msgBox.setDefaultButton(QMessageBox::Cancel); - } - else - { - msgBox.setStandardButtons(QMessageBox::Cancel); - msgBox.setDefaultButton(QMessageBox::Cancel); - } + msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); + msgBox.setDefaultButton(QMessageBox::No); - int retVal = msgBox.exec(); -#endif -#if 0 - QMessageBox::StandardButton retVal = QMessageBox::question(this, tr("Remove Mapping"), msg, QMessageBox::No | QMessageBox::Yes, QMessageBox::No); -#endif + int retVal = msgBox.exec(); - if (retVal == QMessageBox::Ok) - { - return false; + if (retVal == QMessageBox::Yes) + { + return false; + } + else + { + return M68KDebugHalt(); + } } else { - return M68KDebugHalt(); + return 1; } } -// +// Check memory write location +// BPM & cartridge/ROM detections bool m68k_write_memory_check(unsigned int address, char *bits, unsigned int value) { + unsigned int address1; + #ifdef ALPINE_FUNCTIONS // Check if breakpoint on memory is active, and deal with it - if (bpmActive && (address == bpmAddress1)) + if (!M68KDebugHaltStatus() && bpmActive && (address == bpmAddress1)) { return M68KDebugHalt(); } @@ -1527,223 +1524,203 @@ bool m68k_write_memory_check(unsigned int address, char *bits, unsigned int valu #endif { // Rom writing authorisation detection - if (!vjs.allowWritesToROM && ((address >= 0x800000) && (address < 0xDFFF00))) - { - return m68k_write_cartridge_alert(address, bits, value); - } - else + if (!vjs.allowWritesToROM) { - //if ((address & 0xFF000000)) - //{ - // return m68k_write_unknown_alert(address, bits, value); - //} - //else - //{ - return false; - //} + // Calcul the end address + if (strstr(bits, "32")) + { + address1 = address + 3; + } + else + { + if (strstr(bits, "16")) + { + address1 = address + 1; + } + else + { + address1 = address; + } + } + + // Rom writing detection + if ((address >= 0x800000) && (address1 < 0xDFFF00)) + { + return m68k_write_cartridge_alert(address, bits, value); + } } + + return false; } } -// +// Memory write location on 8 bits void m68k_write_memory_8(unsigned int address, unsigned int value) { -#if 1 - m68k_write_memory_check(address, "8", value); -#else -#ifdef ALPINE_FUNCTIONS - // Check if breakpoint on memory is active, and deal with it - if (bpmActive && (address == bpmAddress1)) - { - M68KDebugHalt(); - } - else -#endif + // Check memory write location on 8 bits + if (!m68k_write_memory_check(address, "8", value)) { - // Rom writing authorisation detection - if (!vjs.allowWritesToROM && ((address >= 0x800000) && (address < 0xe00000))) - { - m68k_write_cartridge_alert(address, "8", value); - } - } -#endif - - // Musashi does this automagically for you, UAE core does not :-P - //address &= 0x00FFFFFF; + // Musashi does this automagically for you, UAE core does not :-P + //address &= 0x00FFFFFF; #ifdef CPU_DEBUG_MEMORY // Note that the Jaguar only has 2M of RAM, not 4! - if ((address >= 0x000000) && (address <= 0x1FFFFF)) - { - if (startMemLog) + if ((address >= 0x000000) && (address <= 0x1FFFFF)) { - if (value > writeMemMax[address]) - writeMemMax[address] = value; - if (value < writeMemMin[address]) - writeMemMin[address] = value; + if (startMemLog) + { + if (value > writeMemMax[address]) + writeMemMax[address] = value; + if (value < writeMemMin[address]) + writeMemMin[address] = value; + } } - } #endif -/*if (address == 0x4E00) - WriteLog("M68K: Writing %02X at %08X, PC=%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ -//if ((address >= 0x1FF020 && address <= 0x1FF03F) || (address >= 0x1FF820 && address <= 0x1FF83F)) -// WriteLog("M68K: Writing %02X at %08X\n", value, address); -//WriteLog("[WM8 PC=%08X] Addr: %08X, val: %02X\n", m68k_get_reg(NULL, M68K_REG_PC), address, value); -/*if (effect_start) - if (address >= 0x18FA70 && address < (0x18FA70 + 8000)) - WriteLog("M68K: Byte %02X written at %08X by 68K\n", value, address);//*/ -//$53D0 -/*if (address >= 0x53D0 && address <= 0x53FF) - printf("M68K: Writing byte $%02X at $%08X, PC=$%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ -//Testing AvP on UAE core... -//000075A0: FFFFF80E B6320220 (BITMAP) -/*if (address == 0x75A0 && value == 0xFF) - printf("M68K: (8) Tripwire hit...\n");//*/ + /*if (address == 0x4E00) + WriteLog("M68K: Writing %02X at %08X, PC=%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ + //if ((address >= 0x1FF020 && address <= 0x1FF03F) || (address >= 0x1FF820 && address <= 0x1FF83F)) + // WriteLog("M68K: Writing %02X at %08X\n", value, address); + //WriteLog("[WM8 PC=%08X] Addr: %08X, val: %02X\n", m68k_get_reg(NULL, M68K_REG_PC), address, value); + /*if (effect_start) + if (address >= 0x18FA70 && address < (0x18FA70 + 8000)) + WriteLog("M68K: Byte %02X written at %08X by 68K\n", value, address);//*/ + //$53D0 + /*if (address >= 0x53D0 && address <= 0x53FF) + printf("M68K: Writing byte $%02X at $%08X, PC=$%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ + //Testing AvP on UAE core... + //000075A0: FFFFF80E B6320220 (BITMAP) + /*if (address == 0x75A0 && value == 0xFF) + printf("M68K: (8) Tripwire hit...\n");//*/ #ifndef USE_NEW_MMU - // Note that the Jaguar only has 2M of RAM, not 4! - if ((address >= 0x000000) && (address <= (vjs.DRAM_size - 1))) - { - jaguarMainRAM[address] = value; - } - else - { - if ((address >= 0xDFFF00) && (address <= 0xDFFFFF)) + // Note that the Jaguar only has 2M of RAM, not 4! + if ((address >= 0x000000) && (address <= (vjs.DRAM_size - 1))) { - CDROMWriteByte(address, value, M68K); + jaguarMainRAM[address] = value; } else { - if ((address >= 0xF00000) && (address <= 0xF0FFFF)) + if ((address >= 0xDFFF00) && (address <= 0xDFFFFF)) { - TOMWriteByte(address, value, M68K); + CDROMWriteByte(address, value, M68K); } else { - if ((address >= 0xF10000) && (address <= 0xF1FFFF)) + if ((address >= 0xF00000) && (address <= 0xF0FFFF)) { - JERRYWriteByte(address, value, M68K); + TOMWriteByte(address, value, M68K); } else { - jaguar_unknown_writebyte(address, value, M68K); + if ((address >= 0xF10000) && (address <= 0xF1FFFF)) + { + JERRYWriteByte(address, value, M68K); + } + else + { + if ((address >= 0x800000) && (address <= 0xDFFEFF)) + { + jagMemSpace[address] = (uint8_t)value; + } + else + { + jaguar_unknown_writebyte(address, value, M68K); + } + } } } } - } #else - MMUWrite8(address, value, M68K); + MMUWrite8(address, value, M68K); #endif + } } -// +// Memory write location on 16 bits void m68k_write_memory_16(unsigned int address, unsigned int value) { -#if 1 - if (!M68KDebugHaltStatus()) - { - m68k_write_memory_check(address, "16", value); - } -#else -#ifdef ALPINE_FUNCTIONS - // Check if breakpoint on memory is active, and deal with it - if (bpmActive && address == bpmAddress1) - { - M68KDebugHalt(); - } - else -#endif + // Check memory write location on 16 bits + if (!m68k_write_memory_check(address, "16", value)) { - // Rom writing authorisation detection - if (!vjs.allowWritesToROM && ((address >= 0x800000) && (address < 0xe00000))) - { - if (!M68KDebugHaltStatus()) - { - m68k_write_cartridge_alert(address, "16", value); - } - } - } -#endif - - // Musashi does this automagically for you, UAE core does not :-P - //address &= 0x00FFFFFF; + // Musashi does this automagically for you, UAE core does not :-P + //address &= 0x00FFFFFF; #ifdef CPU_DEBUG_MEMORY // Note that the Jaguar only has 2M of RAM, not 4! - if ((address >= 0x000000) && (address <= 0x1FFFFE)) - { - if (startMemLog) + if ((address >= 0x000000) && (address <= 0x1FFFFE)) { - uint8_t hi = value >> 8, lo = value & 0xFF; + if (startMemLog) + { + uint8_t hi = value >> 8, lo = value & 0xFF; - if (hi > writeMemMax[address]) - writeMemMax[address] = hi; - if (hi < writeMemMin[address]) - writeMemMin[address] = hi; + if (hi > writeMemMax[address]) + writeMemMax[address] = hi; + if (hi < writeMemMin[address]) + writeMemMin[address] = hi; - if (lo > writeMemMax[address+1]) - writeMemMax[address+1] = lo; - if (lo < writeMemMin[address+1]) - writeMemMin[address+1] = lo; + if (lo > writeMemMax[address + 1]) + writeMemMax[address + 1] = lo; + if (lo < writeMemMin[address + 1]) + writeMemMin[address + 1] = lo; + } } - } #endif -/*if (address == 0x4E00) - WriteLog("M68K: Writing %02X at %08X, PC=%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ -//if ((address >= 0x1FF020 && address <= 0x1FF03F) || (address >= 0x1FF820 && address <= 0x1FF83F)) -// WriteLog("M68K: Writing %04X at %08X\n", value, address); -//WriteLog("[WM16 PC=%08X] Addr: %08X, val: %04X\n", m68k_get_reg(NULL, M68K_REG_PC), address, value); -//if (address >= 0xF02200 && address <= 0xF0229F) -// WriteLog("M68K: Writing to blitter --> %04X at %08X\n", value, address); -//if (address >= 0x0E75D0 && address <= 0x0E75E7) -// WriteLog("M68K: Writing %04X at %08X, M68K PC=%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC)); -/*extern uint32_t totalFrames; -if (address == 0xF02114) - WriteLog("M68K: Writing to GPU_CTRL (frame:%u)... [M68K PC:%08X]\n", totalFrames, m68k_get_reg(NULL, M68K_REG_PC)); -if (address == 0xF02110) - WriteLog("M68K: Writing to GPU_PC (frame:%u)... [M68K PC:%08X]\n", totalFrames, m68k_get_reg(NULL, M68K_REG_PC));//*/ -//if (address >= 0xF03B00 && address <= 0xF03DFF) -// WriteLog("M68K: Writing %04X to %08X...\n", value, address); - -/*if (address == 0x0100)//64*4) - WriteLog("M68K: Wrote word to VI vector value %04X...\n", value);//*/ -/*if (effect_start) - if (address >= 0x18FA70 && address < (0x18FA70 + 8000)) - WriteLog("M68K: Word %04X written at %08X by 68K\n", value, address);//*/ -/* if (address == 0x51136 || address == 0x51138 || address == 0xFB074 || address == 0xFB076 - || address == 0x1AF05E) - WriteLog("[WM16 PC=%08X] Addr: %08X, val: %04X\n", m68k_get_reg(NULL, M68K_REG_PC), address, value);//*/ -//$53D0 -/*if (address >= 0x53D0 && address <= 0x53FF) - printf("M68K: Writing word $%04X at $%08X, PC=$%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ -//Testing AvP on UAE core... -//000075A0: FFFFF80E B6320220 (BITMAP) -/*if (address == 0x75A0 && value == 0xFFFF) -{ - printf("\nM68K: (16) Tripwire hit...\n"); - ShowM68KContext(); -}//*/ + /*if (address == 0x4E00) + WriteLog("M68K: Writing %02X at %08X, PC=%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ + //if ((address >= 0x1FF020 && address <= 0x1FF03F) || (address >= 0x1FF820 && address <= 0x1FF83F)) + // WriteLog("M68K: Writing %04X at %08X\n", value, address); + //WriteLog("[WM16 PC=%08X] Addr: %08X, val: %04X\n", m68k_get_reg(NULL, M68K_REG_PC), address, value); + //if (address >= 0xF02200 && address <= 0xF0229F) + // WriteLog("M68K: Writing to blitter --> %04X at %08X\n", value, address); + //if (address >= 0x0E75D0 && address <= 0x0E75E7) + // WriteLog("M68K: Writing %04X at %08X, M68K PC=%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC)); + /*extern uint32_t totalFrames; + if (address == 0xF02114) + WriteLog("M68K: Writing to GPU_CTRL (frame:%u)... [M68K PC:%08X]\n", totalFrames, m68k_get_reg(NULL, M68K_REG_PC)); + if (address == 0xF02110) + WriteLog("M68K: Writing to GPU_PC (frame:%u)... [M68K PC:%08X]\n", totalFrames, m68k_get_reg(NULL, M68K_REG_PC));//*/ + //if (address >= 0xF03B00 && address <= 0xF03DFF) + // WriteLog("M68K: Writing %04X to %08X...\n", value, address); + + /*if (address == 0x0100)//64*4) + WriteLog("M68K: Wrote word to VI vector value %04X...\n", value);//*/ + /*if (effect_start) + if (address >= 0x18FA70 && address < (0x18FA70 + 8000)) + WriteLog("M68K: Word %04X written at %08X by 68K\n", value, address);//*/ + /* if (address == 0x51136 || address == 0x51138 || address == 0xFB074 || address == 0xFB076 + || address == 0x1AF05E) + WriteLog("[WM16 PC=%08X] Addr: %08X, val: %04X\n", m68k_get_reg(NULL, M68K_REG_PC), address, value);//*/ + //$53D0 + /*if (address >= 0x53D0 && address <= 0x53FF) + printf("M68K: Writing word $%04X at $%08X, PC=$%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ + //Testing AvP on UAE core... + //000075A0: FFFFF80E B6320220 (BITMAP) + /*if (address == 0x75A0 && value == 0xFFFF) + { + printf("\nM68K: (16) Tripwire hit...\n"); + ShowM68KContext(); + }//*/ #ifndef USE_NEW_MMU - // Note that the Jaguar only has 2M of RAM, not 4! - if ((address >= 0x000000) && (address <= (vjs.DRAM_size - 2))) - { -/* jaguar_mainRam[address] = value >> 8; - jaguar_mainRam[address + 1] = value & 0xFF;*/ - SET16(jaguarMainRAM, address, value); - } - // Memory Track device writes.... - else - { - if ((address >= 0x800000) && (address <= 0x87FFFE)) + // Note that the Jaguar only has 2M of RAM, not 4! + if ((address >= 0x000000) && (address <= (vjs.DRAM_size - 2))) { - if (((TOMGetMEMCON1() & 0x0006) == (2 << 1)) && (jaguarMainROMCRC32 == 0xFDF37F47)) - { - MTWriteWord(address, value); - } + /* jaguar_mainRam[address] = value >> 8; + jaguar_mainRam[address + 1] = value & 0xFF;*/ + SET16(jaguarMainRAM, address, value); } else { + // Memory Track device writes.... + if ((address >= 0x800000) && (address <= 0x87FFFE)) + { + if (((TOMGetMEMCON1() & 0x0006) == (2 << 1)) && (jaguarMainROMCRC32 == 0xFDF37F47)) + { + MTWriteWord(address, value); + return; + } + } + if ((address >= 0xDFFF00) && (address <= 0xDFFFFE)) { CDROMWriteWord(address, value, M68K); @@ -1762,76 +1739,65 @@ if (address == 0xF02110) } else { - jaguar_unknown_writeword(address, value, M68K); + if ((address >= 0x800000) && (address <= 0xDFFEFE)) + { + SET16(jagMemSpace, address, value); + } + else + { + jaguar_unknown_writeword(address, value, M68K); #ifdef LOG_UNMAPPED_MEMORY_ACCESSES - WriteLog("\tA0=%08X, A1=%08X, D0=%08X, D1=%08X\n", - m68k_get_reg(NULL, M68K_REG_A0), m68k_get_reg(NULL, M68K_REG_A1), - m68k_get_reg(NULL, M68K_REG_D0), m68k_get_reg(NULL, M68K_REG_D1)); + WriteLog("\tA0=%08X, A1=%08X, D0=%08X, D1=%08X\n", m68k_get_reg(NULL, M68K_REG_A0), m68k_get_reg(NULL, M68K_REG_A1), m68k_get_reg(NULL, M68K_REG_D0), m68k_get_reg(NULL, M68K_REG_D1)); #endif + } } } } } - } #else - MMUWrite16(address, value, M68K); + MMUWrite16(address, value, M68K); #endif + } } -// +// Memory write location on 32 bits void m68k_write_memory_32(unsigned int address, unsigned int value) { -#if 1 - m68k_write_memory_check(address, "32", value); -#else -#ifdef ALPINE_FUNCTIONS - // Check if breakpoint on memory is active, and deal with it - if (bpmActive && address == bpmAddress1) - { - M68KDebugHalt(); - } - else -#endif - { - // Rom writing authorisation detection - if (!vjs.allowWritesToROM && ((address >= 0x800000) && (address < 0xe00000))) - { - m68k_write_cartridge_alert(address, "32", value); - } - } -#endif - - // Musashi does this automagically for you, UAE core does not :-P - //address &= 0x00FFFFFF; -/*if (address == 0x4E00) - WriteLog("M68K: Writing %02X at %08X, PC=%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ -//WriteLog("--> [WM32]\n"); -/*if (address == 0x0100)//64*4) - WriteLog("M68K: Wrote dword to VI vector value %08X...\n", value);//*/ -/*if (address >= 0xF03214 && address < 0xF0321F) - WriteLog("M68K: Writing DWORD (%08X) to GPU RAM (%08X)...\n", value, address);//*/ -//M68K: Writing DWORD (88E30047) to GPU RAM (00F03214)... -/*extern bool doGPUDis; -if (address == 0xF03214 && value == 0x88E30047) -// start = true; - doGPUDis = true;//*/ -/* if (address == 0x51136 || address == 0xFB074) - WriteLog("[WM32 PC=%08X] Addr: %08X, val: %02X\n", m68k_get_reg(NULL, M68K_REG_PC), address, value);//*/ -//Testing AvP on UAE core... -//000075A0: FFFFF80E B6320220 (BITMAP) -/*if (address == 0x75A0 && (value & 0xFFFF0000) == 0xFFFF0000) -{ - printf("\nM68K: (32) Tripwire hit...\n"); - ShowM68KContext(); -}//*/ + // Check memory write location on 32 bits + if (!m68k_write_memory_check(address, "32", value)) + { + // Musashi does this automagically for you, UAE core does not :-P + //address &= 0x00FFFFFF; + /*if (address == 0x4E00) + WriteLog("M68K: Writing %02X at %08X, PC=%08X\n", value, address, m68k_get_reg(NULL, M68K_REG_PC));//*/ + //WriteLog("--> [WM32]\n"); + /*if (address == 0x0100)//64*4) + WriteLog("M68K: Wrote dword to VI vector value %08X...\n", value);//*/ + /*if (address >= 0xF03214 && address < 0xF0321F) + WriteLog("M68K: Writing DWORD (%08X) to GPU RAM (%08X)...\n", value, address);//*/ + //M68K: Writing DWORD (88E30047) to GPU RAM (00F03214)... + /*extern bool doGPUDis; + if (address == 0xF03214 && value == 0x88E30047) + // start = true; + doGPUDis = true;//*/ + /* if (address == 0x51136 || address == 0xFB074) + WriteLog("[WM32 PC=%08X] Addr: %08X, val: %02X\n", m68k_get_reg(NULL, M68K_REG_PC), address, value);//*/ + //Testing AvP on UAE core... + //000075A0: FFFFF80E B6320220 (BITMAP) + /*if (address == 0x75A0 && (value & 0xFFFF0000) == 0xFFFF0000) + { + printf("\nM68K: (32) Tripwire hit...\n"); + ShowM68KContext(); + }//*/ #ifndef USE_NEW_MMU - m68k_write_memory_16(address, value >> 16); - m68k_write_memory_16(address + 2, value & 0xFFFF); + m68k_write_memory_16(address, value >> 16); + m68k_write_memory_16(address + 2, value & 0xFFFF); #else - MMUWrite32(address, value, M68K); + MMUWrite32(address, value, M68K); #endif + } }