From bf6216632125f5f1849ae9d453c0f4ed15ce498f Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 18 Dec 2011 16:48:52 +0200 Subject: [PATCH] 2400b5 --- audio.cpp | 4 +- autoconf.cpp | 13 + cdrom-handler.cpp | 1179 +++++++++++++++ custom.cpp | 23 +- filesys.cpp | 231 ++- filesys_bootrom.cpp | 1507 ++++++++++---------- include/autoconf.h | 1 + include/filesys.h | 1 + include/scsidev.h | 1 + include/xwin.h | 4 +- include/zfile.h | 3 +- od-win32/blkdev_win32_ioctl.cpp | 22 +- od-win32/direct3d.cpp | 43 +- od-win32/direct3d.h | 3 +- od-win32/dxwrap.cpp | 95 +- od-win32/dxwrap.h | 13 +- od-win32/picasso96_win.cpp | 14 +- od-win32/sounddep/sound.cpp | 446 ++++-- od-win32/win32.cpp | 11 +- od-win32/win32.h | 4 +- od-win32/win32_filesys.cpp | 2 +- od-win32/win32_scaler.cpp | 9 +- od-win32/win32gfx.cpp | 502 +++---- od-win32/win32gfx.h | 2 +- od-win32/win32gui.cpp | 130 +- od-win32/winuae_msvc10/winuae_msvc.vcxproj | 6 +- od-win32/winuaechangelog.txt | 22 + scsiemul.cpp | 26 +- zfile.cpp | 20 +- 29 files changed, 2907 insertions(+), 1430 deletions(-) create mode 100644 cdrom-handler.cpp diff --git a/audio.cpp b/audio.cpp index a9d61cf7..457ada09 100644 --- a/audio.cpp +++ b/audio.cpp @@ -1984,12 +1984,13 @@ void led_filter_audio (void) void audio_vsync (void) { +#if 0 #if SOUNDSTUFF > 0 int max, min; int vsync = isvsync (); static int lastdir; - if (!vsync) { + if (1 || !vsync) { extrasamples = 0; return; } @@ -2015,6 +2016,7 @@ void audio_vsync (void) if (extrasamples < -99) extrasamples = -99; #endif +#endif } void restore_audio_finish (void) diff --git a/autoconf.cpp b/autoconf.cpp index 9c239d28..8c6256a3 100644 --- a/autoconf.cpp +++ b/autoconf.cpp @@ -167,6 +167,19 @@ uae_u32 ds (const TCHAR *str) return v; } +uae_u32 ds_bstr_ansi (const uae_char *str) +{ + int len; + + len = strlen (str) + 2; + rt_straddr -= len; + while (rt_straddr & 3) + rt_straddr--; + rtarea[rt_straddr] = len - 2; + strcpy ((uae_char*)rtarea + rt_straddr + 1, str); + return addr (rt_straddr); +} + void calltrap (uae_u32 n) { dw (0xA000 + n); diff --git a/cdrom-handler.cpp b/cdrom-handler.cpp new file mode 100644 index 00000000..a25b02ce --- /dev/null +++ b/cdrom-handler.cpp @@ -0,0 +1,1179 @@ +unsigned char cdfs_rom[] = { +0x1f, 0x8b, 0x08, 0x08, 0x95, 0xa0, 0xed, 0x4e, 0x00, 0x03, 0x63, 0x64, 0x72, 0x6f, 0x6d, 0x2d, +0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x2e, 0x68, 0x75, 0x6e, 0x6b, 0x00, 0x9d, 0xbd, 0x0f, +0x78, 0x53, 0xc7, 0x95, 0x37, 0x3c, 0x57, 0x92, 0x85, 0x2c, 0x14, 0x23, 0x8c, 0x70, 0x15, 0xe2, +0xc2, 0x45, 0x91, 0x15, 0x61, 0x64, 0xcb, 0x71, 0x81, 0x75, 0x5c, 0x87, 0xc8, 0xb2, 0x6c, 0x64, +0x61, 0x64, 0x57, 0xb6, 0x89, 0x93, 0x52, 0xb8, 0x01, 0x5b, 0x32, 0xc6, 0x7f, 0x14, 0x21, 0x28, +0xc9, 0xe3, 0x2f, 0x95, 0x8d, 0x93, 0x9a, 0x24, 0x6f, 0x4d, 0x80, 0xf0, 0x66, 0xf3, 0xe4, 0xe9, +0xe6, 0xcb, 0xd7, 0xaf, 0xa5, 0x26, 0x4d, 0x5d, 0x4a, 0xb3, 0xac, 0x97, 0x2f, 0x38, 0x34, 0x9b, +0x97, 0x66, 0xb3, 0x79, 0x4d, 0x4a, 0x59, 0x36, 0x4b, 0x13, 0x42, 0xd9, 0x24, 0x4b, 0x13, 0x20, +0x94, 0x10, 0xe2, 0x18, 0xdd, 0xef, 0x77, 0xe6, 0x5e, 0xc9, 0x32, 0x49, 0xba, 0xd9, 0x17, 0x9e, +0xd1, 0xbd, 0x33, 0x77, 0xe6, 0xcc, 0x99, 0x33, 0x67, 0xce, 0x9c, 0x73, 0xe6, 0x8f, 0x19, 0xd3, +0xfe, 0x85, 0x29, 0xff, 0xb4, 0xea, 0x53, 0xc3, 0xd8, 0xbc, 0xd7, 0xf0, 0x78, 0x4a, 0x79, 0xd7, +0xfe, 0x27, 0xc5, 0xdd, 0x65, 0x4c, 0x17, 0xfc, 0x07, 0xc6, 0x2c, 0xaf, 0xb5, 0x0c, 0x05, 0xb7, +0xec, 0xdc, 0x19, 0x6c, 0x96, 0x4f, 0xf8, 0xdf, 0x2f, 0x2b, 0xf7, 0x6f, 0x63, 0x76, 0xef, 0xcf, +0xfc, 0x5d, 0xf2, 0x09, 0xfa, 0xda, 0xde, 0x22, 0x56, 0xa0, 0xd4, 0xb6, 0x73, 0x83, 0x8b, 0x3d, +0xf2, 0xa9, 0xc5, 0xbd, 0x04, 0x4e, 0x3e, 0xbb, 0xb8, 0xb7, 0xca, 0xb7, 0xda, 0x27, 0xbf, 0xc7, +0xbf, 0x0d, 0xf2, 0x6f, 0xe7, 0x6f, 0xe9, 0x65, 0x46, 0xf9, 0xa2, 0x9a, 0xe3, 0x8a, 0xf7, 0x17, +0xf2, 0x35, 0x84, 0xc9, 0xaa, 0xcf, 0x18, 0xd3, 0x0d, 0xb8, 0x1e, 0x40, 0xa2, 0x2e, 0xf8, 0x42, +0x32, 0xa7, 0xfe, 0x22, 0x33, 0x05, 0x12, 0x11, 0x26, 0xe8, 0x57, 0x7c, 0x24, 0xff, 0x31, 0xce, +0x9c, 0x80, 0x10, 0x1e, 0x2c, 0xeb, 0x65, 0xb9, 0xff, 0x36, 0x16, 0x5d, 0x1e, 0x13, 0xfc, 0x95, +0xa9, 0xbc, 0x72, 0xb9, 0xdd, 0x43, 0x39, 0xd9, 0x69, 0x5b, 0x91, 0x7c, 0x45, 0x2c, 0x92, 0xcf, +0x6e, 0x65, 0x92, 0x7e, 0xa4, 0x2f, 0x62, 0xd8, 0x2a, 0x1c, 0xdc, 0xde, 0x7d, 0x55, 0xd2, 0x6c, +0x65, 0xa2, 0x76, 0x7c, 0xfb, 0x78, 0x62, 0xd5, 0x27, 0x86, 0x6b, 0x81, 0xbd, 0x61, 0x8b, 0xa8, +0x7d, 0x7f, 0x90, 0xe2, 0xee, 0xa5, 0x86, 0xb3, 0xa2, 0x2f, 0xb8, 0xd3, 0x95, 0x68, 0x19, 0x3a, +0xb9, 0xfd, 0xe4, 0x76, 0x71, 0x69, 0xd9, 0xb5, 0xb0, 0xc5, 0x16, 0x30, 0x57, 0xb0, 0xe5, 0x69, +0xe8, 0xc5, 0x12, 0x63, 0xfd, 0x05, 0xc0, 0x56, 0xf7, 0x14, 0x33, 0xce, 0xdd, 0x24, 0xcb, 0x2c, +0xbb, 0x60, 0x93, 0xfc, 0x29, 0xcb, 0x41, 0x9a, 0xc0, 0xf4, 0x2c, 0x97, 0xbe, 0x09, 0xfb, 0x58, +0x9e, 0x6d, 0x31, 0x13, 0x22, 0x26, 0x1e, 0x3b, 0xc4, 0xf2, 0x0a, 0x2a, 0x59, 0x21, 0xf2, 0x7d, +0xce, 0x1c, 0xb9, 0x73, 0xfc, 0x7d, 0x25, 0x95, 0x05, 0x7e, 0x56, 0x5c, 0xe0, 0x61, 0xcb, 0xa2, +0x32, 0x7e, 0xcb, 0xd3, 0xd0, 0x7b, 0xc5, 0x3a, 0x5b, 0x20, 0xdd, 0xea, 0xcb, 0xe9, 0xf4, 0xad, +0xa1, 0xfe, 0x15, 0x7f, 0x66, 0xb9, 0x51, 0xcd, 0x48, 0x7f, 0x98, 0xc9, 0xe6, 0xba, 0x8f, 0xd6, +0xe4, 0xcb, 0x87, 0x82, 0xdf, 0x0b, 0x6e, 0x71, 0x1b, 0xdd, 0x1a, 0x3b, 0xf3, 0x23, 0x9f, 0xae, +0x97, 0xe8, 0xbe, 0x49, 0x6c, 0x19, 0x42, 0xeb, 0x2b, 0xd0, 0x1b, 0x02, 0x0f, 0x04, 0xc1, 0x5a, +0x0d, 0x6a, 0x76, 0x1c, 0x0e, 0xee, 0x52, 0xa9, 0x38, 0x1f, 0xfd, 0xb4, 0x4d, 0x96, 0xf9, 0x37, +0x43, 0x70, 0x57, 0x70, 0x34, 0x59, 0x41, 0x5f, 0x44, 0x8d, 0x7d, 0x81, 0x7d, 0x5d, 0x70, 0x0b, +0x7d, 0x55, 0x4b, 0xb2, 0x54, 0xc9, 0x8c, 0x12, 0xe6, 0xe0, 0xae, 0x8c, 0xfa, 0xec, 0x28, 0x99, +0x1f, 0x67, 0xd2, 0x51, 0x77, 0x8e, 0xab, 0x07, 0xd0, 0xd0, 0x06, 0x17, 0x60, 0xb8, 0x73, 0x6c, +0x88, 0x21, 0xc5, 0x84, 0x76, 0xac, 0x57, 0x52, 0xc4, 0x74, 0xca, 0x75, 0x89, 0x52, 0xfc, 0xef, +0xb3, 0x52, 0x7b, 0x0f, 0xb3, 0x88, 0x1d, 0x4c, 0x67, 0x0b, 0x39, 0x7a, 0x98, 0x39, 0xba, 0x66, +0x7c, 0x3f, 0xab, 0x00, 0x45, 0x74, 0xb7, 0x06, 0x98, 0xd1, 0xfb, 0x84, 0xf7, 0xe7, 0x4c, 0x97, +0xa6, 0xc6, 0xae, 0xba, 0x77, 0xea, 0x18, 0x95, 0x12, 0x6d, 0x80, 0x64, 0xa6, 0x92, 0xc7, 0x8f, +0x1d, 0x3f, 0x16, 0x67, 0x16, 0xab, 0x2d, 0x20, 0x6a, 0x52, 0xf9, 0xae, 0xef, 0xf4, 0x96, 0x3a, +0x59, 0xdd, 0x3b, 0x3e, 0x5d, 0xaa, 0x4e, 0x5b, 0x3b, 0x6b, 0xfa, 0x56, 0x2f, 0xcb, 0x66, 0xf9, +0xf4, 0x16, 0x15, 0x6e, 0xf5, 0x30, 0x91, 0xde, 0x00, 0xdd, 0x4e, 0xcf, 0x74, 0x0d, 0xa5, 0x0a, +0x56, 0x65, 0xcb, 0x0b, 0x7b, 0x98, 0x1d, 0xf0, 0x9d, 0xc0, 0xc9, 0x05, 0x8c, 0x4b, 0xec, 0x8b, +0x99, 0x21, 0xda, 0x31, 0xd2, 0xdf, 0xa9, 0x89, 0x77, 0x04, 0xf6, 0x33, 0x5d, 0xc4, 0x10, 0xd3, +0xa2, 0x47, 0x75, 0x52, 0x4e, 0x60, 0x77, 0x44, 0x17, 0xd5, 0x48, 0x9a, 0xe8, 0x75, 0xc2, 0x3a, +0x2a, 0xa0, 0x7f, 0xca, 0x4c, 0x8b, 0x59, 0x39, 0x33, 0x85, 0x4b, 0x28, 0x45, 0xec, 0x62, 0x4b, +0xcc, 0x66, 0x0b, 0xf3, 0xf7, 0xfb, 0x8f, 0xce, 0xf5, 0x30, 0x43, 0xed, 0x79, 0x96, 0xed, 0xd6, +0xd8, 0x8a, 0xd8, 0x92, 0x50, 0x9f, 0x5b, 0x70, 0x9b, 0x88, 0x86, 0x1b, 0xe3, 0x44, 0x7d, 0x69, +0x5b, 0xe0, 0x17, 0xec, 0x74, 0x24, 0x47, 0xb2, 0x86, 0x12, 0xa6, 0x6f, 0xb1, 0x6f, 0x1b, 0x66, +0x86, 0x75, 0x92, 0x31, 0xca, 0x6c, 0xec, 0x60, 0xa2, 0xfb, 0x43, 0x49, 0x63, 0x17, 0xe6, 0x7a, +0x53, 0xe5, 0xfd, 0x9b, 0x98, 0x29, 0xb3, 0x6c, 0xa0, 0x8b, 0xbd, 0x19, 0x31, 0xa0, 0xf6, 0x17, +0x98, 0x21, 0xe2, 0x44, 0x6c, 0x3c, 0x52, 0x18, 0x78, 0x81, 0x59, 0x23, 0xf9, 0x92, 0x4d, 0xac, +0x32, 0x9b, 0xfd, 0x09, 0xff, 0x98, 0xab, 0x8b, 0x28, 0x2f, 0xd7, 0x89, 0x55, 0xa1, 0xed, 0xe6, +0xb1, 0xd0, 0x80, 0xa4, 0x73, 0x98, 0xb6, 0xb1, 0x83, 0x03, 0xdd, 0x6f, 0x7b, 0x97, 0x38, 0x59, +0x01, 0xfa, 0x80, 0x6d, 0x2b, 0xd8, 0x24, 0x58, 0x58, 0x1c, 0xbf, 0x66, 0xd6, 0x2b, 0x2e, 0x16, +0xcc, 0xb1, 0x99, 0x67, 0xf7, 0xa1, 0x15, 0x89, 0x95, 0xe0, 0x82, 0x8d, 0xe3, 0xee, 0x0a, 0x26, +0x7c, 0x27, 0xe1, 0x5e, 0x2c, 0x98, 0x82, 0x4f, 0x36, 0x0c, 0x21, 0x7d, 0xa0, 0x96, 0xb8, 0x63, +0x4d, 0x46, 0xfa, 0x9e, 0x86, 0x21, 0xf0, 0x4e, 0x85, 0x9b, 0xa9, 0x39, 0x06, 0x79, 0x4c, 0xfd, +0x62, 0x63, 0x6f, 0x26, 0xde, 0x4c, 0xbc, 0xbf, 0x63, 0xbc, 0x6f, 0x3c, 0x81, 0x6f, 0x8f, 0xdb, +0x17, 0x0b, 0xd6, 0x68, 0x90, 0x53, 0x35, 0x88, 0xb6, 0xed, 0xac, 0x3e, 0xcf, 0x9e, 0xa0, 0xb6, +0x09, 0xf9, 0x6e, 0xa3, 0xd2, 0x36, 0xea, 0x49, 0x6a, 0x5f, 0xdd, 0x3b, 0xbd, 0xf9, 0x4a, 0xcf, +0xdb, 0xa9, 0xe7, 0xdd, 0xcc, 0xe2, 0xd6, 0x28, 0x79, 0x6e, 0x39, 0x14, 0x33, 0xba, 0x3a, 0x88, +0xef, 0xae, 0xc7, 0x1a, 0x88, 0xf3, 0xe7, 0xdb, 0x34, 0x6a, 0x5c, 0x4a, 0xbf, 0x79, 0xd3, 0x79, +0x3a, 0x15, 0xbe, 0xa8, 0xbf, 0x28, 0x7f, 0x00, 0x68, 0xa5, 0x69, 0x9e, 0x09, 0xdb, 0x19, 0x24, +0xc6, 0x5e, 0xd1, 0x13, 0x2d, 0x49, 0xa7, 0xc5, 0xb8, 0x1c, 0x89, 0x55, 0x92, 0x24, 0x3a, 0x82, +0x7e, 0x08, 0xc4, 0x58, 0x9a, 0x53, 0x7c, 0x81, 0x44, 0xb8, 0x6e, 0xc5, 0x45, 0x96, 0x8b, 0xf6, +0xe5, 0x79, 0x7f, 0xe6, 0x9e, 0xa9, 0xc8, 0x3c, 0xde, 0x17, 0xbf, 0x64, 0xae, 0xbb, 0xc7, 0xf4, +0x18, 0x27, 0x0b, 0x3c, 0x2c, 0x6f, 0x69, 0x2f, 0x9b, 0xc9, 0xf2, 0x0b, 0x56, 0x32, 0x67, 0x34, +0x0f, 0x6d, 0xb6, 0x67, 0x8c, 0xee, 0xb2, 0x8c, 0xf7, 0xe5, 0x62, 0xfa, 0xfd, 0x7a, 0xa7, 0xfb, +0x0e, 0x7a, 0x73, 0x6b, 0x82, 0xa3, 0x93, 0xaf, 0x37, 0x0c, 0x81, 0xeb, 0x75, 0x80, 0x6b, 0xa5, +0xb1, 0x8e, 0xd6, 0x1b, 0x30, 0x5a, 0x9c, 0x0b, 0xdb, 0x99, 0x8b, 0x95, 0x28, 0x14, 0x08, 0xcf, +0xc7, 0x88, 0x1f, 0x66, 0x75, 0x11, 0xaf, 0xbb, 0x90, 0x95, 0x50, 0x8a, 0xfb, 0x0d, 0xe4, 0x71, +0x21, 0x75, 0x1f, 0xcb, 0x0f, 0x8b, 0xf8, 0x15, 0xc3, 0xf3, 0xf0, 0xad, 0x0e, 0xf9, 0x47, 0x93, +0x87, 0xf1, 0xe6, 0xe2, 0xb9, 0x06, 0x39, 0xd7, 0x11, 0xbc, 0x3a, 0xef, 0x3e, 0x66, 0xf0, 0x02, +0x86, 0xf7, 0x67, 0xc8, 0x71, 0x0e, 0x6f, 0x28, 0x6d, 0x57, 0x46, 0x68, 0x39, 0x8d, 0x33, 0x47, +0x28, 0x6a, 0xb1, 0xa1, 0x97, 0x99, 0x90, 0xc6, 0xb2, 0xc9, 0xe9, 0x41, 0x49, 0x73, 0x08, 0x75, +0x28, 0x78, 0x94, 0xbe, 0xb4, 0x08, 0xfc, 0xee, 0x7c, 0x34, 0x9a, 0xc4, 0xd3, 0xa0, 0x8c, 0x64, +0xbc, 0x99, 0xc4, 0xc5, 0xac, 0xee, 0xdc, 0x20, 0xde, 0xcc, 0x0a, 0xc7, 0x5a, 0xef, 0x6d, 0x18, +0x12, 0xd1, 0xa3, 0x6b, 0x30, 0x96, 0x21, 0xbb, 0xdc, 0xcc, 0x00, 0x1a, 0x96, 0xa3, 0xb5, 0xd4, +0x96, 0x2b, 0xbc, 0x0f, 0xf5, 0x3b, 0xfb, 0x43, 0x09, 0x8c, 0x29, 0x66, 0x5f, 0xc0, 0xfb, 0xea, +0xb4, 0xff, 0xfd, 0x92, 0xe5, 0xc0, 0xc3, 0x07, 0xdc, 0x9d, 0x94, 0x2f, 0x78, 0x94, 0x4b, 0x39, +0x8b, 0x52, 0x73, 0x5b, 0xef, 0x14, 0x4d, 0x5a, 0x86, 0x4a, 0x3a, 0xd8, 0x1b, 0x6e, 0x03, 0x7e, +0x5f, 0x77, 0x1b, 0x52, 0xf9, 0x8b, 0xf7, 0x82, 0xf6, 0x2e, 0x6a, 0x2f, 0x66, 0x90, 0xab, 0x51, +0x01, 0xb1, 0x33, 0x19, 0x74, 0x4c, 0x51, 0x64, 0x04, 0xe9, 0x80, 0x80, 0x3c, 0x6f, 0x02, 0x27, +0x11, 0xfd, 0x7b, 0xab, 0x7b, 0x66, 0xea, 0x6b, 0xe9, 0x48, 0x61, 0x07, 0x5b, 0xe2, 0x9e, 0x49, +0x3c, 0xbf, 0xd1, 0x15, 0xdc, 0x33, 0x2f, 0x51, 0xfc, 0x58, 0x70, 0x8f, 0xb8, 0xd2, 0x86, 0xd4, +0xd0, 0x8e, 0x29, 0xe9, 0x43, 0x71, 0xd4, 0x64, 0x0e, 0xcc, 0x0e, 0xe7, 0x72, 0xde, 0x79, 0x3d, +0x6a, 0x98, 0xfa, 0x8a, 0x5a, 0x97, 0xd0, 0x78, 0xf4, 0x96, 0x30, 0x81, 0x7a, 0x29, 0xd0, 0xa1, +0x8e, 0x5c, 0xf4, 0x40, 0xc4, 0x86, 0xd8, 0x78, 0xa4, 0x04, 0x3d, 0x66, 0x8d, 0xe4, 0x49, 0xce, +0x7f, 0xfd, 0xad, 0x79, 0x0e, 0x1f, 0xb9, 0x1d, 0xca, 0xc8, 0xcd, 0x4b, 0x28, 0x73, 0x97, 0x83, +0x6a, 0xdc, 0xae, 0xcc, 0x23, 0xbf, 0x1a, 0xeb, 0x3e, 0x85, 0xb8, 0x4b, 0xa1, 0xc4, 0xcd, 0xad, +0xb7, 0x79, 0x58, 0xfe, 0x54, 0x7c, 0xde, 0x07, 0x88, 0x8b, 0xe9, 0x16, 0xf4, 0x3a, 0x98, 0x58, +0x88, 0xb2, 0x09, 0x37, 0x53, 0xbe, 0xe7, 0x3b, 0x1d, 0x1e, 0xe0, 0x6a, 0x01, 0x2d, 0x9d, 0x0a, +0xd7, 0x05, 0x47, 0x27, 0xca, 0xc0, 0xad, 0x75, 0xe8, 0xbf, 0x61, 0x56, 0x81, 0xd2, 0x86, 0xa9, +0x39, 0xa8, 0x65, 0x08, 0x73, 0xdf, 0xd3, 0x36, 0x82, 0xd0, 0x17, 0x4f, 0x8d, 0x2d, 0xbf, 0xc3, +0x03, 0xaa, 0x65, 0xe4, 0xbf, 0x0d, 0x73, 0x7c, 0x4d, 0x23, 0x13, 0xa7, 0xc9, 0x0c, 0x2d, 0xc9, +0x03, 0x7c, 0x35, 0x4f, 0x93, 0x18, 0xda, 0xe9, 0xf2, 0x02, 0xdf, 0x2d, 0x3c, 0xa6, 0xbd, 0x51, +0x5a, 0xe0, 0x8b, 0xd5, 0x36, 0x53, 0xad, 0xf1, 0xde, 0x74, 0x1b, 0x66, 0xaa, 0x32, 0xa0, 0x89, +0xcf, 0x5e, 0x68, 0xf5, 0x42, 0xf0, 0x32, 0xb3, 0x4f, 0xf5, 0x2c, 0xcd, 0x63, 0x18, 0x45, 0xb9, +0x2d, 0x18, 0x45, 0xbd, 0x26, 0xe4, 0xb2, 0xa7, 0x46, 0x11, 0x46, 0xcc, 0x99, 0xb0, 0x2b, 0xc5, +0x1f, 0x35, 0xa3, 0x9c, 0x9f, 0x44, 0x85, 0x33, 0x68, 0x9c, 0x5c, 0x7f, 0x54, 0x19, 0x55, 0xab, +0xc7, 0xa8, 0x07, 0x7c, 0x09, 0x49, 0x1f, 0x15, 0x38, 0x47, 0xf2, 0x99, 0x8c, 0xc3, 0x30, 0x4d, +0x95, 0xa6, 0x1a, 0x5b, 0x86, 0x6c, 0x4e, 0xe6, 0x3a, 0xb0, 0x8f, 0x95, 0x44, 0x9a, 0x00, 0x6b, +0x99, 0x02, 0x8b, 0x8f, 0x4c, 0x03, 0x41, 0x9c, 0xf4, 0xb6, 0x0c, 0xc5, 0x4a, 0x95, 0x36, 0xc8, +0xe5, 0xa9, 0xb2, 0x81, 0xbd, 0x2d, 0x43, 0xee, 0x00, 0x33, 0xd9, 0xd7, 0xb9, 0xd6, 0x49, 0xec, +0xba, 0x05, 0x63, 0xef, 0x8c, 0xb7, 0x50, 0x58, 0xc2, 0x4b, 0x98, 0x33, 0xf9, 0x9a, 0x72, 0xd0, +0x68, 0x98, 0x84, 0xb6, 0x75, 0x17, 0x46, 0x83, 0x76, 0x8d, 0xc3, 0xad, 0x95, 0x44, 0xed, 0xd8, +0x30, 0x93, 0x22, 0x16, 0xd4, 0xe3, 0x8c, 0xe4, 0xe0, 0xf7, 0x68, 0x98, 0xd7, 0x26, 0xaf, 0x69, +0x19, 0xe2, 0xdf, 0x5a, 0x22, 0x34, 0x3a, 0x1a, 0xd2, 0x92, 0xe6, 0x71, 0x50, 0xaf, 0x33, 0x44, +0xf2, 0xb7, 0x93, 0xca, 0x84, 0x2d, 0x06, 0x7c, 0x88, 0xe4, 0xd0, 0xec, 0xae, 0x50, 0x33, 0x74, +0xba, 0x61, 0x88, 0x43, 0xab, 0x08, 0x0c, 0x0b, 0xdb, 0x22, 0xc6, 0xd4, 0x18, 0xe3, 0xf4, 0x68, +0xed, 0x71, 0xa0, 0x7c, 0x7b, 0x4c, 0x38, 0x90, 0x08, 0xe7, 0x4d, 0xd5, 0x96, 0xbc, 0xd0, 0x32, +0x84, 0x19, 0xa4, 0x95, 0xb5, 0x4b, 0xfa, 0x46, 0x82, 0xdd, 0x4e, 0xa9, 0xd7, 0xfa, 0x15, 0x1c, +0x84, 0x78, 0x98, 0xb1, 0x1f, 0x81, 0x77, 0x5e, 0xa1, 0x51, 0xc5, 0x75, 0x88, 0xa7, 0xdc, 0xba, +0xe0, 0x6e, 0x9b, 0x37, 0x8d, 0xd5, 0x23, 0x5c, 0x72, 0x16, 0xb2, 0x73, 0x11, 0x07, 0xe4, 0x0c, +0xd3, 0xfd, 0xc1, 0x8e, 0x5f, 0xed, 0x47, 0x2a, 0xb5, 0xce, 0xba, 0xa1, 0x23, 0xd9, 0xf4, 0x76, +0x9d, 0xca, 0x01, 0xcf, 0x49, 0xad, 0x01, 0xd0, 0x28, 0x92, 0xee, 0x81, 0xba, 0x49, 0x49, 0xcf, +0xdf, 0x9f, 0xa4, 0x7e, 0x0c, 0xe7, 0xba, 0xb3, 0xb8, 0x86, 0xf2, 0x16, 0xb0, 0xd8, 0xc3, 0xa5, +0xdc, 0x12, 0xca, 0x7f, 0xf7, 0x98, 0x8f, 0xcd, 0xf5, 0x08, 0x4b, 0x24, 0xc7, 0xb6, 0x65, 0xa7, +0x86, 0x56, 0x80, 0x13, 0x23, 0x15, 0x85, 0xb3, 0xf4, 0x0f, 0xa3, 0xa6, 0xd5, 0xc4, 0x97, 0xad, +0x13, 0xc4, 0xb3, 0xf5, 0x79, 0x2e, 0xa3, 0xfe, 0x11, 0xe0, 0x75, 0x4e, 0xec, 0x10, 0x3a, 0xa7, +0xe8, 0x66, 0x67, 0xd0, 0xbc, 0x3c, 0xaf, 0x0e, 0x33, 0x5f, 0x84, 0x65, 0xef, 0x79, 0x48, 0x20, +0x0d, 0xd4, 0x30, 0x56, 0x88, 0xdf, 0xac, 0x0f, 0xb7, 0x2e, 0x3b, 0x39, 0x54, 0x7b, 0x51, 0xb3, +0xba, 0x30, 0x20, 0xb1, 0xec, 0x5c, 0xd1, 0xe3, 0x68, 0x67, 0xc6, 0xa8, 0x0c, 0xae, 0x35, 0x79, +0xf7, 0x33, 0x33, 0x24, 0xa0, 0x01, 0x73, 0xbb, 0x33, 0x3c, 0x2f, 0x96, 0x75, 0x80, 0x34, 0xd3, +0xe7, 0xed, 0xab, 0x90, 0x6e, 0xba, 0x8d, 0x74, 0xde, 0x37, 0x99, 0x19, 0x94, 0x79, 0x1c, 0xdf, +0x8f, 0x46, 0x0a, 0xe3, 0xb9, 0x07, 0xe9, 0xfb, 0xe3, 0x5d, 0xba, 0x58, 0x96, 0x64, 0x88, 0xdf, +0x8c, 0xd8, 0x43, 0xb1, 0x05, 0x28, 0xb3, 0x2d, 0xa3, 0xc4, 0xbb, 0x28, 0x71, 0x2f, 0xf2, 0xd7, +0x85, 0xd7, 0xf3, 0x1c, 0x6b, 0xba, 0x2c, 0xb1, 0x59, 0xc8, 0xd3, 0x64, 0xa9, 0x60, 0x54, 0xbe, +0x2e, 0xb7, 0x82, 0x65, 0x49, 0xc6, 0xf8, 0x02, 0xbc, 0x7b, 0xba, 0x0c, 0xb1, 0x5b, 0xd0, 0x57, +0xb9, 0xd2, 0x32, 0x53, 0x02, 0x0d, 0xd1, 0x46, 0x8a, 0xe9, 0x69, 0xd0, 0x44, 0x1c, 0x0a, 0x44, +0xc0, 0x39, 0x73, 0x37, 0x78, 0xbc, 0xa4, 0x97, 0xbd, 0xbb, 0x73, 0xec, 0x36, 0x3f, 0xa4, 0x34, +0x8d, 0xaa, 0xd1, 0xab, 0xad, 0x0d, 0x18, 0xed, 0x86, 0xe7, 0x63, 0xdf, 0x24, 0x8c, 0xb5, 0xd7, +0xba, 0xd0, 0x83, 0xf1, 0x39, 0x84, 0x5d, 0x96, 0xad, 0xcb, 0x83, 0x1a, 0xb2, 0x29, 0xdd, 0xf0, +0x5c, 0x57, 0x3e, 0x6a, 0x9d, 0xc1, 0xd3, 0xcf, 0x75, 0x31, 0xdd, 0x1a, 0xaa, 0x1b, 0xf5, 0x31, +0xc3, 0x4e, 0x94, 0x7e, 0x28, 0x3e, 0x8b, 0x7f, 0xa9, 0xe8, 0x66, 0x86, 0x44, 0x6c, 0xf6, 0x81, +0x44, 0x17, 0x33, 0x6c, 0x43, 0x7a, 0x67, 0xdc, 0x4a, 0xe9, 0x9a, 0x96, 0xae, 0xbc, 0xd8, 0xdc, +0x03, 0x09, 0x7c, 0x5d, 0x0f, 0x28, 0x79, 0x07, 0x13, 0x9d, 0xcc, 0xd0, 0x20, 0x31, 0xcd, 0x8f, +0x63, 0xf3, 0x08, 0xba, 0xe6, 0x6a, 0x37, 0xd3, 0x5c, 0x8b, 0xdf, 0x42, 0x79, 0x67, 0xfc, 0x04, +0x90, 0xf3, 0x39, 0xe4, 0x65, 0x80, 0x50, 0x48, 0xad, 0xd0, 0x5e, 0x84, 0xa4, 0x7e, 0xae, 0xfb, +0xde, 0x78, 0x88, 0x72, 0x08, 0xad, 0x5d, 0x62, 0xcc, 0xc6, 0xb1, 0x32, 0x01, 0x9a, 0x93, 0xd7, +0x3c, 0x81, 0x52, 0x0b, 0x78, 0x29, 0x26, 0xb1, 0xac, 0x56, 0x5e, 0xea, 0x43, 0xa4, 0x0f, 0x77, +0x9b, 0xe2, 0x77, 0x1f, 0x44, 0xfa, 0x8c, 0x0f, 0x24, 0x36, 0xe3, 0x34, 0x4f, 0xff, 0x08, 0x94, +0x1f, 0xe4, 0x6f, 0x17, 0x90, 0x3e, 0x8e, 0xfc, 0x03, 0x9c, 0x66, 0x8c, 0xe0, 0x74, 0xe7, 0xf3, +0x2f, 0x97, 0x50, 0xcf, 0x7a, 0x7d, 0x42, 0x96, 0x27, 0xb5, 0x34, 0x06, 0xda, 0xd8, 0x8c, 0x7d, +0x28, 0xff, 0x0c, 0xcf, 0x37, 0x03, 0x18, 0x8f, 0x77, 0xe7, 0x28, 0x74, 0x06, 0x04, 0x70, 0xbc, +0xfe, 0x02, 0x8f, 0x19, 0x51, 0xea, 0x35, 0x85, 0xee, 0x48, 0xdf, 0xea, 0x5e, 0x8c, 0x39, 0x73, +0x31, 0xb3, 0x22, 0x58, 0xdc, 0x37, 0x11, 0xff, 0xae, 0x3e, 0x5b, 0x4a, 0x7a, 0x8e, 0x39, 0xc2, +0xf4, 0x87, 0x51, 0xea, 0x05, 0xf7, 0x4d, 0x64, 0x87, 0xb4, 0x0c, 0x95, 0x56, 0xb0, 0xb3, 0x64, +0xcb, 0xe8, 0x9f, 0x11, 0x37, 0x31, 0x2b, 0x69, 0xbb, 0x23, 0x93, 0xe0, 0x5a, 0x9d, 0xbd, 0x41, +0xd2, 0xd9, 0xbb, 0x58, 0x09, 0xbe, 0xbf, 0x85, 0xf9, 0xc6, 0xfc, 0xeb, 0x8f, 0x98, 0x2b, 0xcc, +0xf4, 0x5b, 0xdd, 0x26, 0x82, 0x1d, 0x1c, 0xbd, 0x72, 0x1a, 0x73, 0xed, 0xe8, 0xb5, 0xe7, 0x5a, +0x86, 0xfc, 0x71, 0x83, 0x2a, 0xeb, 0x4b, 0x2e, 0xf1, 0x59, 0x89, 0xa0, 0xe5, 0xa3, 0xdc, 0x7f, +0x8a, 0x1e, 0xcc, 0x33, 0x06, 0x94, 0x42, 0x6f, 0xca, 0x27, 0xf0, 0xae, 0xc3, 0xfb, 0x12, 0xe8, +0xab, 0x2e, 0xcc, 0xe9, 0x22, 0xea, 0x83, 0x76, 0xbd, 0x30, 0x31, 0x88, 0x09, 0x9a, 0xcf, 0x2c, +0x67, 0x40, 0x8f, 0x33, 0x94, 0x0a, 0x6e, 0xb6, 0xda, 0x36, 0x31, 0x82, 0xf1, 0x96, 0xdd, 0xc9, +0xcc, 0x07, 0x7f, 0x41, 0x75, 0x67, 0x4d, 0xb8, 0xb3, 0x21, 0x91, 0x0d, 0x7c, 0x1e, 0xbd, 0x42, +0x9c, 0xcf, 0xc7, 0x1d, 0xc6, 0x86, 0x1d, 0x65, 0x28, 0x2f, 0x69, 0x0b, 0xbf, 0xe2, 0x78, 0x66, +0xbd, 0xa1, 0xce, 0x4e, 0xeb, 0x95, 0x27, 0xf4, 0x15, 0xd4, 0xda, 0x88, 0x5a, 0x89, 0xe7, 0xb2, +0x46, 0xff, 0x4a, 0x2d, 0x7b, 0x6e, 0x6b, 0x67, 0x16, 0x48, 0xde, 0x74, 0x5d, 0xa5, 0xe3, 0x54, +0x0f, 0x72, 0xfd, 0x3b, 0xb5, 0x2c, 0x2b, 0x8e, 0xf2, 0x0f, 0x42, 0x5b, 0xb7, 0x2a, 0xf8, 0x7f, +0x19, 0xbd, 0x32, 0xf0, 0xa8, 0xe1, 0x2d, 0x1f, 0x86, 0x3e, 0xcf, 0xb2, 0xca, 0x4f, 0xf4, 0x9f, +0xe8, 0x87, 0x56, 0xa9, 0x55, 0xa9, 0x65, 0x55, 0xe1, 0x7e, 0xc0, 0xe1, 0xe6, 0x43, 0xba, 0x98, +0xf1, 0x4d, 0x23, 0x85, 0x5c, 0xe8, 0x09, 0x6a, 0x93, 0xda, 0xb3, 0xb9, 0x7f, 0x78, 0xed, 0x0f, +0xaf, 0x1d, 0x54, 0x6a, 0x09, 0x7d, 0x59, 0xaf, 0xe8, 0xce, 0xfc, 0xf1, 0x8d, 0x3f, 0xbe, 0xe1, +0xdd, 0x9b, 0x86, 0xac, 0xe7, 0x3a, 0x0e, 0xcb, 0xda, 0xaa, 0xc2, 0xcc, 0x01, 0x0f, 0x8c, 0xfe, +0xe5, 0x51, 0xea, 0x1d, 0x89, 0xe9, 0x0e, 0x03, 0xb6, 0x15, 0x70, 0x50, 0x03, 0x41, 0x56, 0xac, +0x6a, 0xa5, 0x64, 0x7b, 0x4b, 0x49, 0x17, 0x1b, 0x83, 0xe5, 0xa8, 0xe3, 0xd2, 0x92, 0x24, 0x86, +0xb1, 0xa0, 0xd7, 0xdb, 0xdc, 0x78, 0x0f, 0x4a, 0x04, 0xdc, 0x37, 0xd9, 0x7c, 0xc1, 0x27, 0xf8, +0x3c, 0x56, 0x56, 0xd0, 0xeb, 0xab, 0x6f, 0x84, 0xaa, 0xe5, 0x2e, 0x52, 0x67, 0xfe, 0x3d, 0x90, +0xc9, 0xa6, 0x74, 0xec, 0x39, 0xc4, 0x2c, 0x62, 0x11, 0xe9, 0x65, 0x78, 0xcb, 0x8f, 0x36, 0xe0, +0xd7, 0x00, 0xda, 0xeb, 0x63, 0x32, 0xac, 0x1a, 0x2b, 0x24, 0xb9, 0x89, 0xe3, 0x52, 0x72, 0x23, +0x1f, 0xea, 0x2c, 0x84, 0x17, 0xa8, 0xf6, 0x2f, 0xbc, 0xc5, 0x4c, 0xa7, 0x33, 0xed, 0x27, 0xce, +0x87, 0xee, 0xf2, 0x5f, 0xd2, 0x41, 0x7b, 0x4a, 0x6d, 0xff, 0xdb, 0x1c, 0x47, 0x03, 0x49, 0x46, +0x89, 0x09, 0x56, 0x35, 0xf5, 0x39, 0x2e, 0xb9, 0x19, 0x4b, 0xa2, 0xd4, 0xbf, 0xc0, 0xe2, 0x16, +0x46, 0x7e, 0x21, 0xb4, 0xa3, 0xd4, 0x73, 0x18, 0xc1, 0x11, 0x89, 0x69, 0x9f, 0x4e, 0xb5, 0x2f, +0x85, 0x8b, 0x76, 0xf0, 0xaf, 0xf4, 0x31, 0x28, 0x3b, 0xc2, 0x39, 0x46, 0xbb, 0x9e, 0x8f, 0x09, +0x6b, 0x70, 0xf4, 0xe3, 0x63, 0x34, 0x26, 0x3e, 0xf9, 0x51, 0xcb, 0x50, 0xe5, 0x45, 0xad, 0x74, +0x7c, 0x0c, 0xbd, 0xe0, 0x4c, 0x26, 0xc3, 0x26, 0xb5, 0xfe, 0x42, 0x68, 0x37, 0x39, 0x99, 0xa3, +0x85, 0xf7, 0x92, 0x35, 0x73, 0xa4, 0x68, 0xf3, 0xdc, 0xcc, 0x56, 0x1d, 0x7c, 0x02, 0x58, 0xeb, +0xc5, 0x22, 0xa1, 0x9d, 0xb8, 0x2e, 0xae, 0xe1, 0x92, 0x6c, 0x12, 0x34, 0x79, 0x13, 0x52, 0x47, +0x07, 0xe9, 0x75, 0x0c, 0xbc, 0x6b, 0x89, 0x2c, 0x1f, 0x4f, 0x88, 0x9e, 0xe3, 0x63, 0x0a, 0x6e, +0x22, 0x70, 0x13, 0x53, 0x14, 0x69, 0x4f, 0x51, 0x44, 0xf3, 0xaa, 0xc2, 0xc3, 0x54, 0x37, 0x6f, +0x51, 0x87, 0x9b, 0x89, 0xd5, 0x41, 0x48, 0x4e, 0xf6, 0x53, 0x92, 0xcd, 0x80, 0xf5, 0x82, 0x0b, +0xb0, 0x4e, 0x3f, 0x72, 0xfa, 0x11, 0x5b, 0x8d, 0x7d, 0xb6, 0xe8, 0x75, 0x35, 0xb8, 0xf5, 0x5c, +0x87, 0x3e, 0x6f, 0xf3, 0x8a, 0x1b, 0x99, 0x19, 0x63, 0x26, 0xdf, 0x8e, 0x67, 0xcb, 0xd0, 0x6f, +0x2e, 0x30, 0x57, 0xa4, 0x06, 0xbc, 0x9c, 0x1f, 0xf6, 0xe0, 0x57, 0x0c, 0x97, 0xa7, 0xf4, 0xb9, +0x4b, 0xed, 0xe0, 0x33, 0xbb, 0x3b, 0x27, 0x38, 0x7a, 0x79, 0x6c, 0x4a, 0x97, 0x53, 0xf4, 0x6d, +0xb7, 0x3a, 0x12, 0xdd, 0x83, 0xa4, 0xf9, 0x5f, 0x3e, 0x4f, 0x76, 0x86, 0x64, 0x4c, 0x7d, 0x83, +0x46, 0x53, 0x93, 0xd6, 0x5c, 0x83, 0xc0, 0x46, 0xe4, 0x2d, 0xcb, 0x51, 0x24, 0xc2, 0x2d, 0xc5, +0xe7, 0x06, 0x41, 0x89, 0x63, 0x0a, 0x1f, 0xd1, 0x88, 0x47, 0x2c, 0x09, 0xeb, 0xd8, 0x12, 0x71, +0x86, 0xc0, 0x9b, 0x34, 0x43, 0x41, 0xf3, 0x21, 0xde, 0xf6, 0x43, 0xc7, 0xb9, 0x49, 0xb1, 0x55, +0x40, 0x05, 0x67, 0x34, 0xb9, 0x10, 0x7a, 0x36, 0x72, 0xef, 0x44, 0xd9, 0xa3, 0x11, 0x68, 0x0c, +0x8b, 0x3d, 0x3c, 0xff, 0xd1, 0x30, 0x13, 0x0e, 0x7b, 0x31, 0x23, 0x51, 0xa9, 0xab, 0x4f, 0x23, +0x47, 0x77, 0x4a, 0xa2, 0x5d, 0x32, 0x52, 0xef, 0xfd, 0x25, 0x35, 0xda, 0x4f, 0x72, 0x5f, 0xd0, +0x23, 0xe8, 0xc9, 0x96, 0xe3, 0x63, 0x7c, 0x14, 0xa3, 0x2f, 0x91, 0x12, 0xc7, 0xfb, 0x49, 0x94, +0xeb, 0x9c, 0xce, 0x1b, 0xa2, 0x19, 0xf4, 0x2f, 0x62, 0x25, 0xd3, 0xa5, 0xa8, 0x0d, 0xa9, 0xb0, +0xc4, 0x4b, 0x60, 0x87, 0xf3, 0x16, 0x95, 0xae, 0xa6, 0x3e, 0x27, 0x8d, 0xaf, 0xc4, 0x83, 0x99, +0x90, 0xda, 0x53, 0x7c, 0x03, 0x8f, 0xa1, 0x84, 0x1d, 0x25, 0x30, 0x0a, 0xf2, 0x21, 0x07, 0x44, +0xde, 0x9f, 0x5e, 0xdb, 0xc6, 0x54, 0x8f, 0xb2, 0x2b, 0x2e, 0x92, 0xeb, 0x7a, 0x60, 0xea, 0x80, +0xee, 0xe3, 0xf1, 0x47, 0xdb, 0x99, 0x42, 0xcd, 0x92, 0x4b, 0x76, 0xd6, 0x00, 0xcb, 0x82, 0x3d, +0xeb, 0xdf, 0x26, 0x30, 0x8c, 0x7a, 0x5e, 0xe3, 0xf7, 0x9e, 0x52, 0x3d, 0x32, 0xc5, 0x6e, 0x6d, +0x25, 0xb7, 0x2b, 0xdc, 0x7e, 0x56, 0x1a, 0xdc, 0x09, 0x7d, 0x67, 0x99, 0x8b, 0x7c, 0x04, 0x8f, +0x14, 0x3f, 0x22, 0xf6, 0x50, 0x0a, 0xfa, 0x02, 0xcf, 0xca, 0x8f, 0x0d, 0xc2, 0xff, 0x77, 0x6c, +0xbd, 0xd5, 0xdf, 0xad, 0xf8, 0x62, 0x74, 0xd7, 0x53, 0x96, 0x32, 0x97, 0xb6, 0x76, 0x93, 0x9b, +0x95, 0xb3, 0x65, 0xe1, 0x1c, 0xb7, 0x5e, 0x4d, 0xb7, 0x62, 0x54, 0x6b, 0xbc, 0xb9, 0x29, 0xd9, +0xd3, 0x0e, 0xdd, 0xce, 0x5b, 0xfa, 0x81, 0x3c, 0xbd, 0xf7, 0x37, 0xc2, 0xda, 0xa3, 0xfe, 0xc3, +0x08, 0xa8, 0x50, 0xf9, 0xfa, 0xcd, 0xb8, 0x0e, 0x7c, 0x6d, 0xa7, 0x91, 0x0e, 0xae, 0xd6, 0xe3, +0xdd, 0x4a, 0xf3, 0x1d, 0xf0, 0x7f, 0xb5, 0xb4, 0x42, 0x58, 0x85, 0xb4, 0x6c, 0xcc, 0x9e, 0x3a, +0x1a, 0x1d, 0xc4, 0xa9, 0x25, 0x95, 0xa4, 0x39, 0x44, 0xb3, 0x46, 0xf6, 0x43, 0x12, 0x98, 0xa0, +0x41, 0xa0, 0xff, 0x2e, 0xd8, 0x50, 0xb7, 0x6e, 0xf1, 0x4a, 0xe6, 0x87, 0x6e, 0xb1, 0xe6, 0xf8, +0x47, 0xac, 0x62, 0x4a, 0x97, 0xa2, 0x91, 0x7e, 0xf5, 0xad, 0xc0, 0x8c, 0x70, 0x20, 0xd6, 0xea, +0xea, 0x52, 0x35, 0x62, 0x95, 0x5f, 0x3f, 0x3a, 0x84, 0xd1, 0x00, 0x6d, 0x29, 0x52, 0x0a, 0x5e, +0xa9, 0xa8, 0xfa, 0x80, 0xc5, 0x7f, 0xfd, 0x01, 0x8b, 0x86, 0xf3, 0x68, 0x8e, 0xe0, 0xbd, 0x30, +0x8f, 0xdb, 0xb5, 0x7a, 0xb2, 0x6b, 0x23, 0x39, 0x53, 0x1c, 0xad, 0xe8, 0xe7, 0xd0, 0xf3, 0x27, +0xeb, 0x2f, 0x6a, 0x5d, 0xc1, 0x2d, 0xde, 0x19, 0x12, 0x93, 0xbb, 0x89, 0x57, 0xf0, 0x5c, 0x83, +0xe7, 0x71, 0x3c, 0x9b, 0x62, 0x32, 0x7e, 0x83, 0x31, 0x48, 0x14, 0xd9, 0x4f, 0x1e, 0x00, 0xf2, +0x25, 0x90, 0x37, 0x52, 0x33, 0x5f, 0xb5, 0x6f, 0xbd, 0x69, 0x0f, 0xa2, 0x81, 0x7c, 0x77, 0x59, +0x46, 0x56, 0x46, 0xfa, 0xf8, 0xee, 0xdf, 0xd1, 0x97, 0xe4, 0x5b, 0x90, 0x94, 0x15, 0xe4, 0x9b, +0xcc, 0x32, 0x47, 0x0b, 0x28, 0xe5, 0xfa, 0x29, 0x92, 0x9d, 0x3c, 0x25, 0x3f, 0x23, 0xc5, 0x04, +0x3d, 0x3e, 0x9f, 0xc7, 0xc2, 0x05, 0x1e, 0x8d, 0x9e, 0xdb, 0xd6, 0xc3, 0x42, 0xd2, 0x3b, 0xac, +0xd1, 0x70, 0x6a, 0x9c, 0x07, 0x35, 0x08, 0x5e, 0x62, 0x5a, 0xec, 0x71, 0x45, 0x73, 0x04, 0xcf, +0xe5, 0x13, 0xcf, 0x41, 0xd2, 0x7b, 0x14, 0xbb, 0x0a, 0xe3, 0xc5, 0xa0, 0xf4, 0xd5, 0x06, 0x3f, +0xd7, 0xc3, 0x61, 0xc7, 0x72, 0xdb, 0xc2, 0x80, 0xe7, 0xa9, 0xc0, 0xb0, 0x46, 0x8f, 0xe7, 0xb8, +0xc2, 0xdd, 0xfe, 0xe8, 0x20, 0xcb, 0xd0, 0xe4, 0xa9, 0xcf, 0x5e, 0x8c, 0xc9, 0xb7, 0x55, 0x2a, +0xba, 0x28, 0x30, 0x39, 0x1a, 0x95, 0x79, 0x6d, 0x2f, 0x92, 0x65, 0x03, 0x5c, 0xd7, 0xc4, 0x84, +0x77, 0x7f, 0x0e, 0xb9, 0x2f, 0xe1, 0x5b, 0xcb, 0x94, 0x47, 0x04, 0x5f, 0x1a, 0x50, 0xf6, 0xac, +0xe8, 0x89, 0x3a, 0xa7, 0x7c, 0x22, 0x36, 0xb2, 0xf6, 0x9a, 0x22, 0x0d, 0xc4, 0xad, 0x59, 0xae, +0xa8, 0x70, 0x83, 0x4f, 0xa4, 0x90, 0x6c, 0x8d, 0x18, 0xcb, 0x75, 0xb2, 0x59, 0x24, 0xc3, 0xff, +0x44, 0xde, 0xa3, 0x16, 0xd2, 0x27, 0x3f, 0xdc, 0xaa, 0xd8, 0x07, 0xa8, 0xa3, 0x93, 0xdb, 0x91, +0x8f, 0x22, 0x67, 0xd3, 0x17, 0x7c, 0x1e, 0x85, 0xac, 0x21, 0x38, 0xfa, 0xe7, 0x93, 0xe0, 0x9c, +0xf6, 0x94, 0xbe, 0x2b, 0xac, 0x62, 0x64, 0x07, 0x79, 0xc8, 0x47, 0xa1, 0xe8, 0xa6, 0x7f, 0x3e, +0x46, 0xbe, 0x91, 0x3f, 0xef, 0xe4, 0x63, 0x87, 0xd3, 0x40, 0xd8, 0xa7, 0xb4, 0xb8, 0x75, 0x44, +0x2c, 0xd4, 0xe8, 0x61, 0xc1, 0x43, 0x86, 0x61, 0x84, 0x8d, 0xfe, 0xf9, 0xf1, 0x86, 0x21, 0xcc, +0x05, 0xa6, 0x74, 0xbc, 0xa3, 0x61, 0x08, 0x6f, 0x85, 0xe0, 0xb8, 0xd1, 0x3f, 0xaf, 0x25, 0x6d, +0x43, 0xe8, 0x8e, 0xfe, 0xa0, 0x86, 0x4d, 0xf5, 0xfd, 0xf5, 0x26, 0x60, 0xbc, 0x04, 0xf5, 0x55, +0xf0, 0x56, 0x6c, 0x8a, 0x2a, 0x6d, 0xf0, 0xa9, 0x35, 0x07, 0x95, 0x7a, 0xee, 0x7b, 0x95, 0xec, +0x34, 0xb5, 0x7e, 0xa7, 0x62, 0xdf, 0x7d, 0xbc, 0xaf, 0x65, 0x68, 0xc5, 0xc4, 0x65, 0x09, 0xf5, +0xb5, 0x24, 0x60, 0x25, 0x24, 0x60, 0xf7, 0xe0, 0x29, 0x71, 0x5a, 0x1f, 0xe5, 0x16, 0xf7, 0x6e, +0xea, 0x8f, 0xf0, 0xdb, 0x01, 0xb2, 0xca, 0xee, 0xb5, 0x65, 0xb4, 0x3f, 0xe9, 0x42, 0x7a, 0xce, +0xb4, 0x14, 0x71, 0x5a, 0xcc, 0x31, 0x2d, 0xb6, 0xfc, 0xab, 0x69, 0x77, 0xfe, 0x69, 0xd5, 0x7a, +0xe3, 0x38, 0x7d, 0x44, 0x32, 0xbc, 0x83, 0x2d, 0xe1, 0x2d, 0x0b, 0x02, 0x33, 0x27, 0x28, 0xc1, +0x25, 0xcf, 0x8a, 0x6d, 0x2d, 0x44, 0x99, 0x35, 0x31, 0x19, 0xa3, 0x5a, 0xcf, 0x71, 0x1c, 0x49, +0xd1, 0x10, 0x90, 0xfc, 0x54, 0xfa, 0xbc, 0xa4, 0xa4, 0xac, 0xb7, 0x11, 0xcd, 0x34, 0x90, 0x6a, +0xe7, 0x2b, 0x50, 0x26, 0x9f, 0x66, 0x89, 0x14, 0x45, 0xcf, 0x5b, 0x55, 0x8a, 0x9a, 0x56, 0x4c, +0x9c, 0x37, 0x05, 0x77, 0xab, 0xd4, 0xdd, 0x6d, 0x0b, 0x28, 0xa3, 0x6a, 0xca, 0x6f, 0x4e, 0xfa, +0x0d, 0x8d, 0xcf, 0x3a, 0x5d, 0xca, 0x3b, 0x2c, 0xba, 0x99, 0xc9, 0xd5, 0xc3, 0xcc, 0xf4, 0x55, +0xf5, 0x07, 0x2f, 0x77, 0xf6, 0x30, 0x6b, 0x61, 0x93, 0xa3, 0x39, 0x6a, 0x8e, 0xa5, 0x7d, 0x4d, +0xea, 0x78, 0xec, 0x80, 0x1e, 0x54, 0x84, 0x99, 0x9c, 0xfc, 0x16, 0xad, 0x34, 0xea, 0x30, 0x1b, +0x71, 0x3f, 0x80, 0x22, 0xc3, 0x42, 0x89, 0xcc, 0x12, 0xe4, 0x7b, 0xa5, 0xfe, 0x09, 0xe7, 0x29, +0xd4, 0x81, 0x1e, 0x65, 0xe6, 0x76, 0x31, 0xb7, 0x34, 0xa5, 0xf9, 0xb6, 0xc5, 0xaa, 0x07, 0x56, +0x29, 0x6d, 0xb5, 0x3f, 0x5e, 0xb0, 0x49, 0xb8, 0x0a, 0x8e, 0x0b, 0x08, 0x57, 0xc9, 0xe7, 0xd6, +0xab, 0x78, 0x9a, 0x4b, 0xc8, 0x2b, 0x2d, 0x36, 0xda, 0x1a, 0xec, 0x1b, 0x85, 0xab, 0x4f, 0x1c, +0x93, 0xee, 0xfd, 0xfb, 0x37, 0xc3, 0x0d, 0xc4, 0x51, 0x5c, 0x12, 0xe9, 0x17, 0xd2, 0xac, 0xa7, +0xbb, 0xd5, 0x23, 0x5c, 0xe5, 0xad, 0x06, 0xa4, 0x6f, 0x6a, 0xec, 0x85, 0xdc, 0x77, 0xc7, 0x71, +0x2a, 0xfe, 0x07, 0xaa, 0x9b, 0xfb, 0x2a, 0x34, 0x2b, 0x26, 0x64, 0x70, 0xc0, 0x34, 0x6c, 0x76, +0x93, 0xef, 0x5c, 0x32, 0x89, 0x01, 0x3b, 0x34, 0x2e, 0xd2, 0x9d, 0xc2, 0xcf, 0xd6, 0xbd, 0x63, +0xe2, 0xfe, 0xc9, 0xe4, 0x09, 0xf2, 0x79, 0x39, 0x7a, 0x84, 0x3a, 0x3b, 0xf0, 0x8a, 0xb3, 0x55, +0x18, 0x6f, 0xed, 0xd7, 0xb6, 0xe6, 0x9f, 0x1c, 0x22, 0x1b, 0xf5, 0x9b, 0xdc, 0x5e, 0x2d, 0xb9, +0x24, 0x79, 0x50, 0xaf, 0x2e, 0x4d, 0x87, 0xbd, 0x9c, 0xbf, 0x9c, 0xa1, 0x7e, 0xcc, 0x31, 0x2e, +0xc8, 0x7c, 0xc2, 0xe9, 0x49, 0x75, 0x86, 0xc9, 0x47, 0x7c, 0x31, 0x2b, 0x21, 0xcf, 0x0a, 0x62, +0x3a, 0x31, 0x24, 0x26, 0xd2, 0xb5, 0x8e, 0x8a, 0x1a, 0xc5, 0x3f, 0x22, 0xb8, 0x14, 0x9f, 0x9f, +0x93, 0x7c, 0x7e, 0x4d, 0x5f, 0xd2, 0x07, 0x6b, 0xa7, 0xd3, 0xbc, 0x65, 0x68, 0x3a, 0xd5, 0xed, +0x89, 0x1b, 0xe9, 0x9d, 0xcc, 0xe3, 0xf4, 0x76, 0xdc, 0x48, 0xef, 0x82, 0x3a, 0xa6, 0x2b, 0xd8, +0xc4, 0xea, 0x98, 0x01, 0x74, 0xbf, 0xcc, 0xe9, 0x7e, 0x99, 0xe8, 0xbe, 0x86, 0x29, 0x7c, 0x50, +0x08, 0x3e, 0x70, 0x34, 0xa3, 0xed, 0x97, 0xff, 0xf6, 0x75, 0xa5, 0xed, 0xd2, 0xfa, 0x7f, 0x3c, +0x0f, 0x1b, 0x65, 0xb5, 0x3b, 0xf7, 0x86, 0xf6, 0xfa, 0xa8, 0x3f, 0x0e, 0xf1, 0xfe, 0x58, 0xc4, +0xfb, 0xe3, 0x36, 0x8f, 0x70, 0xd9, 0x11, 0x52, 0x7c, 0xb2, 0xd3, 0xfa, 0x60, 0xe6, 0x8a, 0x89, +0xeb, 0x8f, 0x7c, 0x49, 0x1f, 0x58, 0x25, 0x93, 0x73, 0xaa, 0x0f, 0x9e, 0x4a, 0xf7, 0x7e, 0x19, +0x7a, 0xdf, 0x42, 0x38, 0xc4, 0x59, 0xad, 0x82, 0x83, 0x2d, 0xa3, 0x76, 0x4e, 0xc9, 0xb0, 0x29, +0xd4, 0x4f, 0xeb, 0x17, 0x0b, 0x37, 0x31, 0x17, 0x33, 0xa7, 0x61, 0x9c, 0x22, 0x8a, 0xe6, 0xa3, +0x27, 0xc1, 0xe7, 0x3a, 0xf1, 0x3b, 0x62, 0xbb, 0x70, 0x59, 0x32, 0x63, 0x1e, 0xd3, 0x85, 0xf5, +0xa2, 0x13, 0xbd, 0xb2, 0x45, 0x6c, 0x57, 0x78, 0x28, 0x7c, 0x3e, 0xca, 0xeb, 0x2a, 0x29, 0x75, +0x50, 0x8b, 0xa1, 0x00, 0x46, 0x4d, 0x5f, 0xa0, 0xfa, 0xf2, 0x82, 0x1e, 0x96, 0x0f, 0xae, 0xd2, +0xa6, 0xa8, 0x6e, 0x67, 0xa8, 0x55, 0x33, 0x9d, 0xf2, 0x62, 0x95, 0xcd, 0x93, 0xb9, 0x0a, 0x02, +0xba, 0x4e, 0x30, 0x03, 0xe8, 0x3a, 0x81, 0x31, 0x67, 0x52, 0xb8, 0xd9, 0x46, 0xdc, 0x8c, 0x19, +0x0f, 0xdc, 0x3c, 0x01, 0x6e, 0x6e, 0x18, 0x81, 0xed, 0xc3, 0xe9, 0x67, 0x48, 0xf3, 0xb3, 0x81, +0xf3, 0xf3, 0x84, 0x3d, 0xf7, 0xcb, 0x79, 0x78, 0xb2, 0x26, 0x83, 0x7e, 0xa6, 0x29, 0xfa, 0x71, +0x1e, 0x36, 0xf0, 0xb6, 0x0f, 0x2b, 0x3c, 0x4c, 0xb3, 0x2b, 0xa7, 0x9f, 0x9b, 0xec, 0x25, 0x61, +0x42, 0x9a, 0x27, 0x86, 0x6c, 0x5e, 0x68, 0x4d, 0xe4, 0xcb, 0x5c, 0x0b, 0xca, 0xe9, 0x51, 0xaf, +0x4e, 0x32, 0xa5, 0xcb, 0x9d, 0x49, 0x49, 0x87, 0xe0, 0xfd, 0xc0, 0x51, 0x17, 0x99, 0x1f, 0xf8, +0x25, 0x64, 0xbb, 0x5e, 0xf4, 0x10, 0xc5, 0x44, 0x8f, 0xa4, 0x0f, 0xed, 0x04, 0xd5, 0x38, 0xa6, +0xe1, 0x2b, 0xc1, 0x2d, 0x51, 0x75, 0x2d, 0x88, 0x66, 0xf0, 0x2f, 0xa1, 0x59, 0x28, 0x2a, 0xd8, +0x13, 0xa9, 0x36, 0xdc, 0xc8, 0xa7, 0x24, 0x1d, 0xd4, 0x95, 0x3d, 0xd3, 0x94, 0x84, 0x7a, 0xf2, +0x35, 0x29, 0x9f, 0x4b, 0x35, 0xce, 0xa1, 0x90, 0x36, 0x6e, 0xd2, 0x3c, 0xe5, 0x38, 0xc9, 0x1a, +0x92, 0x5e, 0xa2, 0x51, 0x59, 0x3d, 0xa0, 0xde, 0xb2, 0xa3, 0xb7, 0x56, 0x70, 0x8d, 0x8d, 0xe3, +0xae, 0x93, 0xca, 0xec, 0x5e, 0x8c, 0x7c, 0x83, 0x98, 0xdb, 0x98, 0xc0, 0x28, 0x70, 0x38, 0x0a, +0x79, 0x7f, 0xed, 0x86, 0xfc, 0xad, 0x0a, 0x25, 0xa6, 0xea, 0xb0, 0x05, 0xa2, 0x19, 0x35, 0x06, +0xfa, 0xc3, 0xc7, 0x52, 0xbd, 0x53, 0xb2, 0x1c, 0x2d, 0x11, 0x31, 0xf2, 0xec, 0xe1, 0x5c, 0xd2, +0xed, 0xb2, 0xee, 0x50, 0x57, 0x78, 0x48, 0x87, 0x7b, 0xd0, 0xe1, 0x5d, 0xd2, 0xcb, 0x84, 0x95, +0x8a, 0x8e, 0xb8, 0x18, 0xa5, 0x9f, 0x6c, 0x19, 0xaa, 0xbe, 0x6c, 0x10, 0x1c, 0x9b, 0x98, 0xe1, +0x45, 0xce, 0x47, 0xbf, 0xb9, 0xc8, 0x9c, 0xdd, 0xab, 0x1d, 0x5e, 0x25, 0x8f, 0x63, 0x31, 0xaf, +0x1f, 0xb9, 0x6c, 0xc6, 0x5d, 0xe0, 0x8d, 0xaa, 0x2b, 0x56, 0x79, 0x8a, 0x37, 0x2a, 0xaf, 0xec, +0x93, 0x0f, 0x3e, 0x16, 0xd6, 0x79, 0x19, 0x74, 0x26, 0xb7, 0x39, 0x91, 0x82, 0x58, 0x93, 0x00, +0x4c, 0x96, 0x86, 0x39, 0x6a, 0x3d, 0xcc, 0xca, 0xd3, 0x7a, 0x95, 0xe9, 0xab, 0xe4, 0xb6, 0xba, +0xca, 0xd6, 0xc3, 0x4c, 0xf8, 0x62, 0xc6, 0x17, 0x0b, 0xd5, 0xc1, 0xbf, 0xa4, 0x38, 0x65, 0x58, +0x24, 0x7f, 0x29, 0xec, 0x78, 0xd0, 0xf3, 0x30, 0x49, 0x04, 0x7c, 0xc3, 0x8c, 0xea, 0xa0, 0xd4, +0x54, 0x9e, 0x67, 0x49, 0xd3, 0xaf, 0x9e, 0x90, 0x9f, 0x09, 0xee, 0x4a, 0xa7, 0x89, 0x18, 0xc5, +0xb4, 0x6a, 0x69, 0xb5, 0xaf, 0x73, 0x00, 0xde, 0x3d, 0x43, 0xee, 0x9c, 0xe8, 0xba, 0x1a, 0x96, +0xd9, 0x97, 0xe4, 0xb7, 0xcd, 0x80, 0xc1, 0xd0, 0x6b, 0x56, 0xe8, 0xcf, 0x16, 0xd4, 0xd4, 0xce, +0x7b, 0x0d, 0xbc, 0xe4, 0x5a, 0x47, 0x6b, 0xd5, 0x22, 0x8d, 0xc5, 0x76, 0xd8, 0xbb, 0xe4, 0x6d, +0xd7, 0xdd, 0xad, 0x7a, 0x76, 0xd3, 0xe9, 0x66, 0xf0, 0x99, 0x46, 0x9f, 0x88, 0xbf, 0x61, 0x9e, +0x9e, 0x66, 0x89, 0x65, 0x9f, 0xdd, 0x17, 0x63, 0xa5, 0x4e, 0x96, 0x9b, 0x96, 0x5f, 0xcf, 0x37, +0x10, 0x3c, 0x9a, 0xe1, 0xd8, 0x14, 0xdc, 0xc0, 0xce, 0x08, 0x8d, 0xee, 0x26, 0xa4, 0x38, 0xd9, +0x5a, 0x25, 0x1d, 0xd6, 0x5e, 0xbe, 0x79, 0x11, 0x2b, 0x27, 0x0a, 0x51, 0x9e, 0x11, 0x27, 0x2b, +0x0f, 0xdb, 0x4d, 0x50, 0x6b, 0xc2, 0x26, 0xd8, 0x0d, 0x1e, 0xc8, 0x04, 0xcf, 0xdd, 0x63, 0x92, +0x11, 0xef, 0x41, 0xbc, 0x07, 0xa7, 0xb0, 0x22, 0xfe, 0x4e, 0xfb, 0xaa, 0x75, 0x91, 0xfc, 0x4c, +0xeb, 0x39, 0x6c, 0x84, 0xcc, 0xc9, 0x47, 0x2d, 0x1e, 0xc9, 0x14, 0x65, 0x7c, 0x0d, 0x87, 0x62, +0x41, 0xee, 0x9d, 0x56, 0xe9, 0x4a, 0x2b, 0x65, 0xd0, 0x52, 0x74, 0xf6, 0xfd, 0x7c, 0x86, 0xc8, +0x6f, 0x48, 0x4b, 0x6d, 0xe2, 0x67, 0x65, 0x54, 0xbb, 0x99, 0xbf, 0x83, 0xaf, 0xd0, 0x28, 0x5f, +0x47, 0x93, 0xcb, 0xb8, 0x8f, 0x68, 0x57, 0x24, 0x07, 0xda, 0xaa, 0x99, 0xf4, 0x50, 0x40, 0xf5, +0x49, 0xf3, 0xe9, 0x0d, 0xad, 0x33, 0x14, 0xb4, 0xb3, 0x26, 0xc1, 0x2c, 0xe9, 0xf1, 0x5c, 0x9b, +0xfe, 0x1e, 0x56, 0x68, 0x56, 0xe0, 0x11, 0x4c, 0x18, 0x73, 0xbc, 0x9f, 0xf8, 0xba, 0x8e, 0x89, +0xda, 0x1c, 0x63, 0xa4, 0x1b, 0xb3, 0x43, 0xd2, 0x32, 0xb3, 0xb9, 0xd3, 0xa4, 0x49, 0xd0, 0x22, +0xbf, 0xf9, 0x57, 0x86, 0x84, 0x64, 0x03, 0x0d, 0xca, 0xc3, 0x7a, 0xf3, 0x61, 0x56, 0x2c, 0xe5, +0xe1, 0xdd, 0xcd, 0xdf, 0x8b, 0x24, 0x23, 0xde, 0x17, 0xac, 0xd7, 0x99, 0x0f, 0xcb, 0x47, 0x42, +0x7d, 0xa1, 0xc1, 0x83, 0x7d, 0xdd, 0xaf, 0xd2, 0x2a, 0x90, 0x5b, 0x43, 0x9c, 0xc7, 0xa1, 0xd6, +0xa2, 0xc5, 0x79, 0xb9, 0x56, 0x93, 0x00, 0xfd, 0x5f, 0x6f, 0x12, 0xe4, 0x67, 0xc3, 0xfa, 0x39, +0x87, 0xd9, 0x3a, 0x03, 0x0b, 0x25, 0x0e, 0x26, 0xba, 0xdf, 0xa3, 0xdc, 0x24, 0xeb, 0x52, 0x6b, +0xc4, 0x8e, 0x06, 0xea, 0xc7, 0x28, 0x33, 0x3b, 0x99, 0x9d, 0x64, 0x51, 0x63, 0x3f, 0xad, 0x38, +0xda, 0x59, 0x6a, 0x95, 0xcd, 0x6d, 0xf4, 0xb7, 0xb3, 0x82, 0xe0, 0xe8, 0xf5, 0x72, 0x75, 0xb5, +0xd1, 0x1c, 0xd8, 0x2f, 0x48, 0x5c, 0xbf, 0x21, 0x7d, 0x61, 0x19, 0xa4, 0xfc, 0x7e, 0xa1, 0x35, +0x62, 0x76, 0x7b, 0x99, 0xc5, 0x1d, 0x60, 0x66, 0x92, 0x6e, 0xb0, 0x1e, 0xa2, 0x8a, 0x94, 0xe3, +0xeb, 0xef, 0x44, 0x6d, 0x70, 0xbe, 0xa8, 0x39, 0x37, 0x98, 0x5a, 0x59, 0x59, 0xb9, 0x8c, 0xcf, +0xb3, 0xb9, 0x51, 0xed, 0x2b, 0x09, 0x48, 0x99, 0xec, 0x77, 0x87, 0x49, 0xda, 0x8d, 0xf7, 0x2b, +0xab, 0x5a, 0xbc, 0x9f, 0x34, 0x2a, 0x4f, 0x98, 0xe3, 0x6c, 0x89, 0x93, 0xe5, 0x9f, 0xd8, 0xc7, +0x9e, 0x4b, 0x71, 0x1b, 0xe7, 0x62, 0x73, 0x8a, 0xd3, 0xc6, 0xfb, 0x95, 0x36, 0x91, 0xd7, 0x9f, +0x95, 0x38, 0x43, 0xbc, 0xb7, 0xcd, 0x11, 0x7d, 0x21, 0x78, 0x4d, 0xd2, 0xe1, 0x77, 0x2d, 0x24, +0x8f, 0x65, 0xb4, 0x9f, 0xef, 0x79, 0xe8, 0x60, 0x66, 0xc7, 0x46, 0xa6, 0x23, 0xfb, 0x25, 0x8a, +0xcc, 0x6c, 0x40, 0xd2, 0xf3, 0xe7, 0x4e, 0xc0, 0xcc, 0x46, 0x7b, 0x1e, 0x6d, 0x18, 0x42, 0x0d, +0xc3, 0x27, 0x12, 0x4e, 0x37, 0x2b, 0xdb, 0xca, 0xf5, 0x8a, 0x95, 0xcb, 0x56, 0x4e, 0x4c, 0x56, +0x48, 0xb4, 0xfe, 0xa9, 0xb4, 0x60, 0xa6, 0x3a, 0xb3, 0x9a, 0x7a, 0x35, 0x8b, 0x6a, 0x84, 0xf6, +0xad, 0xb0, 0x99, 0xd8, 0x00, 0xf0, 0xb7, 0xd8, 0x98, 0xa6, 0x0f, 0xac, 0x2b, 0x8b, 0x95, 0xae, +0xac, 0x67, 0x12, 0xc5, 0xba, 0xc3, 0x03, 0x9d, 0x9a, 0x62, 0x3d, 0x8d, 0x83, 0x04, 0xdb, 0x39, +0x68, 0xd3, 0xf4, 0x66, 0x7f, 0xf4, 0x73, 0xca, 0xf1, 0x03, 0x79, 0x67, 0xdf, 0xc8, 0x0f, 0xf1, +0x2d, 0x45, 0xe5, 0x19, 0xe8, 0xbd, 0x0a, 0xff, 0xfd, 0x65, 0x2c, 0xaa, 0x1d, 0xeb, 0x8f, 0x65, +0xff, 0x69, 0x9f, 0x6d, 0x13, 0xd3, 0xfd, 0x7e, 0xcc, 0x7f, 0xff, 0x20, 0x0b, 0x3e, 0x79, 0xf2, +0x87, 0xe2, 0x0c, 0x58, 0x39, 0x16, 0xf2, 0x4a, 0x11, 0xfd, 0x47, 0x13, 0x1b, 0x2c, 0x4f, 0xfd, +0xb0, 0xd7, 0x73, 0xe2, 0x91, 0xe8, 0xd8, 0x2b, 0x89, 0xc0, 0x40, 0x98, 0xc9, 0xed, 0xca, 0xca, +0x17, 0x59, 0x77, 0x7c, 0x85, 0xbe, 0x0c, 0x33, 0x65, 0x3e, 0xad, 0xee, 0xb8, 0xb5, 0xd5, 0x13, +0xc9, 0xde, 0xe0, 0x2e, 0xd1, 0xa3, 0xda, 0x3a, 0xcf, 0x98, 0xcc, 0xac, 0x01, 0x96, 0xf8, 0x1e, +0x93, 0x93, 0xad, 0xc2, 0x28, 0x83, 0xa5, 0xe1, 0x74, 0x32, 0x5d, 0x9c, 0x39, 0x03, 0xdc, 0xe3, +0x6f, 0x91, 0xe2, 0x21, 0xee, 0xe7, 0x0b, 0xee, 0xb1, 0x2b, 0x65, 0xda, 0x4d, 0xb9, 0x28, 0xb1, +0xde, 0x54, 0xc8, 0xf3, 0xdf, 0x0b, 0xa8, 0xd9, 0x5c, 0xfe, 0x7e, 0x1b, 0x63, 0xa3, 0x84, 0xcf, +0x6f, 0xd0, 0x9f, 0xc2, 0xcb, 0x49, 0xba, 0x37, 0x29, 0x25, 0x47, 0x93, 0x46, 0x5e, 0xb2, 0x58, +0xf4, 0xa0, 0x36, 0x6f, 0xd8, 0x81, 0xba, 0x7c, 0x28, 0x3b, 0x3f, 0x2d, 0x87, 0x9e, 0x43, 0xff, +0x39, 0x69, 0x44, 0x4d, 0x9c, 0xe3, 0x7e, 0x3d, 0xfd, 0xa1, 0xfe, 0xee, 0xc1, 0xb8, 0xcc, 0xb5, +0x82, 0x7c, 0xcc, 0x70, 0xcd, 0xf2, 0x1a, 0x7f, 0x97, 0xbc, 0x16, 0xfa, 0x2c, 0x2c, 0x11, 0xb9, +0x04, 0x7d, 0x42, 0x7a, 0xb8, 0x09, 0x36, 0xae, 0xa9, 0x39, 0x21, 0x26, 0x14, 0x99, 0xcb, 0xf7, +0x77, 0x10, 0x97, 0xa8, 0x1c, 0xd2, 0xdc, 0x3f, 0x4d, 0x1a, 0xed, 0xcd, 0x94, 0x46, 0xe3, 0xfd, +0xe3, 0xbf, 0x84, 0x2c, 0x25, 0xbe, 0x31, 0x81, 0x97, 0x3b, 0x38, 0x7e, 0xf9, 0x69, 0x7c, 0x5c, +0x34, 0x97, 0x71, 0x7c, 0x9a, 0xb8, 0x1e, 0x2e, 0xa4, 0x56, 0x57, 0xfd, 0xef, 0x2f, 0xaf, 0x70, +0x01, 0x57, 0xcc, 0x3b, 0x2e, 0xe2, 0xae, 0x42, 0x37, 0x5b, 0x82, 0xb9, 0xcb, 0x12, 0xcd, 0x3e, +0xb3, 0xdf, 0x11, 0x88, 0xb3, 0x6d, 0x8c, 0xcf, 0x27, 0xcf, 0x4b, 0x1a, 0x27, 0x03, 0x1f, 0x2d, +0x66, 0x4f, 0x71, 0xdf, 0xc5, 0x93, 0xa8, 0x71, 0x60, 0xe4, 0xe1, 0xf5, 0xb9, 0xa1, 0xfe, 0x96, +0xc7, 0x62, 0xda, 0x03, 0xfd, 0xca, 0xec, 0x5d, 0xd1, 0x4b, 0x72, 0xab, 0x04, 0x36, 0x42, 0xe5, +0x15, 0x43, 0xf2, 0xad, 0x41, 0xf2, 0xa9, 0xfe, 0xe1, 0x28, 0xe2, 0x7b, 0x81, 0x99, 0x36, 0x85, +0xeb, 0x5b, 0x89, 0xa7, 0x07, 0xdc, 0xd5, 0xc0, 0xa9, 0x86, 0x39, 0xa9, 0x8c, 0xc4, 0x26, 0x47, +0x55, 0x59, 0x69, 0x06, 0x9e, 0x06, 0x77, 0xb6, 0xb8, 0x88, 0x3d, 0xd7, 0x44, 0x1a, 0x87, 0x93, +0x3c, 0x02, 0xf2, 0x1a, 0xc2, 0x59, 0xa5, 0x85, 0xc9, 0xe6, 0xa6, 0xd1, 0x5c, 0xc3, 0x76, 0xf6, +0x8d, 0x27, 0x4a, 0xa3, 0x06, 0x66, 0x2e, 0x79, 0x8a, 0xf9, 0x13, 0x55, 0x1f, 0x33, 0x41, 0xcc, +0xe6, 0x6b, 0x59, 0x1a, 0xe8, 0x2a, 0xbc, 0xdd, 0x71, 0xa1, 0x46, 0xb3, 0xa7, 0xcf, 0xa6, 0x79, +0xb3, 0xbf, 0x34, 0x6a, 0x65, 0xbb, 0xc7, 0xdc, 0xd9, 0x34, 0xaa, 0xfc, 0x28, 0x13, 0x1c, 0xfd, +0xac, 0x8e, 0x60, 0xaa, 0xb2, 0xa2, 0x82, 0xeb, 0x28, 0xd0, 0xb1, 0xdc, 0xb9, 0x5c, 0x4f, 0x8f, +0x07, 0x77, 0x3b, 0x53, 0xfc, 0xf4, 0x2c, 0xb0, 0xd7, 0x85, 0x3c, 0x4b, 0xa1, 0x31, 0x8c, 0x74, +0x32, 0x63, 0x78, 0x9e, 0x68, 0x41, 0xea, 0xa3, 0x76, 0xae, 0x0f, 0xa5, 0xf3, 0x6d, 0xf3, 0x42, +0x07, 0xe4, 0x2d, 0xd7, 0xc5, 0x58, 0x8d, 0x80, 0x19, 0x57, 0x18, 0xef, 0x2b, 0x27, 0x6f, 0x62, +0xaa, 0x07, 0x72, 0xc0, 0x4d, 0x7a, 0x37, 0xac, 0xa4, 0x6b, 0x6f, 0x06, 0x77, 0x57, 0x5e, 0x39, +0xa5, 0x7e, 0xa1, 0xb5, 0xe0, 0x52, 0x8f, 0x7f, 0x23, 0x13, 0xf0, 0xfd, 0x41, 0xb7, 0x81, 0xf3, +0x9b, 0xa8, 0x40, 0x42, 0x0d, 0x26, 0xa4, 0xd2, 0x4c, 0xa6, 0x27, 0x2e, 0x04, 0x87, 0xce, 0x67, +0x89, 0x0d, 0xe6, 0xb9, 0xbd, 0xf4, 0xf4, 0x16, 0xb2, 0xbf, 0x93, 0x50, 0x27, 0x7a, 0x52, 0x00, +0x15, 0xb9, 0x5e, 0xc2, 0x2a, 0x48, 0x2f, 0x41, 0x2b, 0xdc, 0xe4, 0xf1, 0x4c, 0x3e, 0xef, 0x00, +0x76, 0x51, 0x46, 0x73, 0x79, 0x44, 0xba, 0x01, 0xb7, 0xcd, 0x5f, 0xc0, 0x6d, 0x66, 0xed, 0xc4, +0xb5, 0x65, 0xc1, 0x3d, 0x95, 0x7f, 0xf9, 0x4a, 0xdc, 0xf6, 0x4c, 0xc3, 0x6d, 0xa6, 0x82, 0x5b, +0xb2, 0x83, 0x70, 0xe3, 0x38, 0x28, 0x9a, 0x2c, 0xd9, 0x70, 0x22, 0xf0, 0xb0, 0x63, 0x8c, 0x3a, +0x1d, 0x4d, 0x62, 0x27, 0xe8, 0xec, 0x64, 0x3f, 0xc5, 0xc8, 0x31, 0xad, 0x9c, 0x48, 0x5a, 0x25, +0x9f, 0xb9, 0x98, 0x19, 0xc2, 0x2e, 0xf0, 0x70, 0x31, 0x33, 0x56, 0x5d, 0xd0, 0xb0, 0xb8, 0x4c, +0x12, 0xbd, 0xe4, 0xbe, 0xca, 0xab, 0x83, 0x2c, 0x60, 0x8e, 0x18, 0x5f, 0xdc, 0xc7, 0x34, 0x1b, +0x2c, 0x28, 0xe3, 0x08, 0x25, 0x0e, 0x40, 0xa2, 0x4b, 0x06, 0x13, 0x93, 0xe5, 0x70, 0x5c, 0xb2, +0x46, 0xe5, 0x91, 0xfe, 0x48, 0x27, 0x41, 0x0a, 0x3e, 0xe9, 0xe2, 0x94, 0x0f, 0x1f, 0x88, 0x6a, +0xa4, 0x6e, 0x7b, 0x3f, 0xd1, 0xff, 0x86, 0xf6, 0xe4, 0xac, 0x9c, 0xf8, 0x34, 0x1c, 0x7c, 0x52, +0x6d, 0x4b, 0x31, 0x52, 0x13, 0x25, 0x1e, 0xc8, 0x7a, 0xde, 0x1a, 0x7f, 0x37, 0xcb, 0xe1, 0xb6, +0x51, 0xbe, 0xf7, 0x7f, 0xba, 0x73, 0x94, 0x96, 0x5c, 0x7f, 0x96, 0x5a, 0xb2, 0x72, 0xe2, 0xfa, +0x05, 0xc8, 0xba, 0xde, 0x17, 0x13, 0x91, 0xf9, 0xad, 0xba, 0xa8, 0x51, 0x82, 0x95, 0xe0, 0xe6, +0x3b, 0x5e, 0x50, 0xdb, 0x7b, 0x90, 0xe5, 0x46, 0xd8, 0x17, 0xed, 0xd0, 0x9c, 0x2c, 0x6a, 0x7f, +0x18, 0xa7, 0xfa, 0x83, 0xa8, 0x40, 0x7a, 0x12, 0x1f, 0xdf, 0xef, 0xdf, 0x55, 0xee, 0xe8, 0xc2, +0x9c, 0x85, 0x31, 0x5d, 0x5c, 0x84, 0xe9, 0xa7, 0xd1, 0x7e, 0x93, 0xbe, 0x5f, 0x96, 0xe5, 0xb5, +0xb4, 0x66, 0x68, 0x1f, 0xa7, 0xf5, 0xc3, 0x82, 0xa7, 0x57, 0x4d, 0x24, 0xdf, 0x10, 0x57, 0x38, +0xcc, 0x61, 0x5a, 0x71, 0xc9, 0x07, 0xbf, 0x7b, 0xd0, 0xba, 0xc5, 0xe0, 0xf6, 0xbd, 0xe9, 0x1d, +0x6f, 0x7b, 0xf3, 0x2a, 0x98, 0x56, 0x6a, 0x12, 0xb5, 0x67, 0x68, 0xbf, 0xdc, 0xda, 0x12, 0xad, +0xc6, 0xc3, 0xee, 0xfa, 0xb6, 0x47, 0x5e, 0x1f, 0xbd, 0xab, 0x86, 0xbd, 0x9a, 0xf8, 0xf0, 0xb1, +0x40, 0x55, 0xd8, 0xa2, 0x94, 0x22, 0x6f, 0x3d, 0xc7, 0xd3, 0x21, 0x31, 0x61, 0xad, 0x92, 0x46, +0x1e, 0x6b, 0x85, 0x97, 0x85, 0x3a, 0x3e, 0x63, 0x17, 0xc9, 0x6f, 0x41, 0xff, 0xf1, 0x84, 0x99, +0x50, 0x61, 0x2e, 0x92, 0x63, 0xa4, 0x8b, 0x44, 0xe6, 0xe1, 0x57, 0x13, 0xce, 0x0f, 0x54, 0x45, +0xf4, 0x81, 0x5f, 0xc8, 0x8f, 0x87, 0x73, 0xf0, 0xbb, 0x37, 0x62, 0xda, 0x2a, 0x48, 0xc6, 0xad, +0x1a, 0x49, 0xef, 0xad, 0x82, 0xfc, 0xd5, 0xf6, 0xb2, 0x8a, 0x22, 0x79, 0xbd, 0xad, 0x48, 0x5e, +0xfb, 0xee, 0x0e, 0xb1, 0xe6, 0xf8, 0xcb, 0xa5, 0x5a, 0xff, 0xcb, 0x1f, 0xed, 0x38, 0xfe, 0xb2, +0x6d, 0x85, 0x6d, 0xd0, 0x54, 0xc5, 0xb4, 0x11, 0x26, 0x2f, 0x23, 0x8d, 0x83, 0x20, 0xf2, 0x35, +0x45, 0x8f, 0x7d, 0xd0, 0xb7, 0x0b, 0x33, 0x6f, 0x91, 0xfc, 0x36, 0xe9, 0x1c, 0x2b, 0xce, 0xa7, +0xb4, 0x3d, 0xce, 0x3d, 0x5d, 0xf2, 0x3b, 0xc1, 0xd1, 0x4f, 0x5e, 0xe1, 0x33, 0xee, 0xf3, 0x98, +0x71, 0x69, 0x35, 0xd7, 0x80, 0xb9, 0x67, 0xf4, 0xd3, 0xa3, 0xc0, 0xf7, 0x79, 0xcc, 0xb9, 0xe9, +0x94, 0x6b, 0x1a, 0xa4, 0xec, 0x8a, 0x18, 0xb9, 0x56, 0x52, 0x24, 0xf7, 0x4a, 0xdd, 0x8a, 0xee, +0x1d, 0x37, 0x9d, 0x18, 0x86, 0x7e, 0x54, 0x15, 0x76, 0xd5, 0x7e, 0x28, 0x2c, 0x47, 0x2f, 0xed, +0x4e, 0xeb, 0x35, 0x31, 0x27, 0xe3, 0xfe, 0xfe, 0x56, 0x4a, 0x6d, 0x19, 0x3a, 0x8e, 0x7c, 0x05, +0x5d, 0xf2, 0xe3, 0xd0, 0x5e, 0x0a, 0x91, 0xb7, 0xfe, 0x4b, 0xf3, 0x96, 0x4d, 0xcb, 0xbb, 0x57, +0x30, 0x73, 0xfd, 0xb1, 0x48, 0xfe, 0xf1, 0x94, 0x86, 0xe3, 0x1d, 0xd6, 0xe4, 0xab, 0x1a, 0xf1, +0x47, 0x6b, 0x26, 0xe5, 0x25, 0x24, 0xa3, 0x95, 0x1d, 0x90, 0x62, 0xa9, 0x9d, 0x7a, 0xbb, 0x88, +0x99, 0x1c, 0xa1, 0xc0, 0x62, 0x61, 0x79, 0xd8, 0x8a, 0xdf, 0x7a, 0x55, 0x97, 0xaf, 0xf6, 0x6f, +0x12, 0xea, 0x53, 0xda, 0x3c, 0xdf, 0x13, 0x58, 0x86, 0x31, 0xd3, 0x3c, 0x5d, 0x93, 0x05, 0x8d, +0xcc, 0x61, 0x13, 0xf9, 0xcd, 0x54, 0x0e, 0xdb, 0x26, 0x7a, 0x16, 0x7a, 0x21, 0x09, 0xfb, 0xb9, +0x57, 0x05, 0x92, 0xf0, 0xd3, 0x5d, 0xca, 0xbc, 0x93, 0x31, 0xcf, 0xd0, 0x1a, 0x12, 0xe4, 0xd9, +0x95, 0x5e, 0xda, 0x79, 0xc9, 0x63, 0x6a, 0xde, 0xcf, 0x5e, 0xa5, 0xd1, 0x0a, 0x5e, 0xb0, 0x01, +0xa2, 0x86, 0x20, 0x4e, 0x69, 0xe3, 0x94, 0x0f, 0x65, 0x4a, 0xf9, 0xc8, 0x65, 0x12, 0xf9, 0xd7, +0xcc, 0x0b, 0xbb, 0xe4, 0x73, 0xec, 0xa7, 0x7c, 0xd7, 0x82, 0xb5, 0xee, 0xa3, 0x3a, 0x9d, 0xfc, +0x0a, 0xb5, 0x8d, 0xf6, 0xe8, 0xf1, 0x9d, 0x79, 0xe2, 0xf4, 0xfd, 0x3f, 0x8a, 0x95, 0x15, 0x36, +0x44, 0x39, 0xae, 0xd2, 0x32, 0xfb, 0x63, 0xa4, 0x97, 0xdf, 0x98, 0x87, 0x56, 0x97, 0xc2, 0xd6, +0x0c, 0x6d, 0x1e, 0x1a, 0xd5, 0x5f, 0xb8, 0xfe, 0x0f, 0x5b, 0x4b, 0x63, 0x7f, 0x8c, 0x2c, 0x2a, +0xda, 0xd3, 0x97, 0xb6, 0x05, 0xe6, 0x40, 0xd6, 0xfd, 0xc8, 0xee, 0xe1, 0xeb, 0x21, 0xa5, 0x1c, +0x17, 0x5d, 0xc1, 0x4a, 0xee, 0xff, 0xcb, 0x87, 0x6d, 0xaa, 0xe3, 0xb4, 0x5c, 0x49, 0x3e, 0xa8, +0xb4, 0x36, 0x6b, 0xa5, 0x6f, 0x51, 0x0d, 0xbe, 0x42, 0x1e, 0x88, 0x46, 0x45, 0xff, 0x44, 0x8f, +0xb8, 0x68, 0xfc, 0x39, 0xd1, 0x23, 0x4e, 0xea, 0x11, 0x8c, 0x3f, 0x7b, 0x93, 0x5b, 0xab, 0x8e, +0x40, 0x17, 0x97, 0x20, 0xa3, 0x9f, 0x37, 0xa5, 0xc7, 0x98, 0xb4, 0xe2, 0x23, 0xf9, 0x0d, 0x1a, +0x97, 0xf3, 0x73, 0x95, 0xd5, 0x7f, 0x61, 0x79, 0xb1, 0x51, 0xff, 0x43, 0x3c, 0xeb, 0x2d, 0x45, +0xb2, 0xc7, 0xac, 0x69, 0x64, 0xc4, 0xd5, 0xeb, 0xa1, 0xc9, 0xbe, 0xf8, 0x0b, 0x79, 0x5f, 0xc4, +0x18, 0xd5, 0x17, 0x50, 0xbb, 0x99, 0xe0, 0x50, 0x5a, 0xc7, 0xb9, 0xfc, 0x79, 0x95, 0xaf, 0x7f, +0x41, 0xab, 0x38, 0x4a, 0x8a, 0x77, 0xa9, 0xe1, 0x0d, 0xce, 0xe1, 0xc3, 0x5c, 0xa7, 0x24, 0xdd, +0x6a, 0xf4, 0xca, 0x59, 0xf2, 0xd1, 0x91, 0x4e, 0x39, 0x55, 0x0a, 0xdc, 0x37, 0xbf, 0x61, 0xc8, +0xa4, 0x81, 0x16, 0x91, 0x2b, 0xfa, 0x6c, 0x2b, 0xd5, 0x3d, 0x3f, 0x64, 0x27, 0xfb, 0xa4, 0xb5, +0x6e, 0xbd, 0xba, 0xc3, 0xec, 0x74, 0xe6, 0x37, 0xce, 0x0b, 0xe5, 0x53, 0xf5, 0xb8, 0x67, 0x7c, +0x65, 0xae, 0x79, 0xc0, 0xca, 0x45, 0x6d, 0xfe, 0x2c, 0x97, 0xcb, 0x07, 0x26, 0x17, 0x4a, 0x1d, +0x71, 0xcd, 0x36, 0x41, 0xd2, 0xe1, 0x97, 0x29, 0x9e, 0x1a, 0xa2, 0x3b, 0x61, 0xa0, 0x8c, 0x5d, +0x5a, 0x67, 0xf4, 0x61, 0x34, 0x17, 0xd4, 0x29, 0xf4, 0x17, 0x07, 0x78, 0x2f, 0x54, 0xa1, 0x17, +0xba, 0xe4, 0x37, 0xa6, 0xf7, 0x41, 0xba, 0x87, 0xc3, 0xd1, 0x72, 0x68, 0x72, 0xd0, 0x34, 0x90, +0xc7, 0x13, 0x1c, 0xfd, 0xf8, 0x3d, 0xee, 0x1d, 0xd0, 0x3c, 0xf9, 0x1a, 0x7a, 0x9a, 0xc6, 0x8b, +0x4e, 0x1d, 0x2f, 0x2e, 0xf2, 0xae, 0xd0, 0x78, 0x71, 0x84, 0x54, 0xdb, 0x45, 0x17, 0xd3, 0x1c, +0x48, 0x84, 0x73, 0x14, 0xce, 0xbc, 0x7e, 0x89, 0xfb, 0x88, 0xc7, 0xdc, 0x2c, 0xa3, 0xc7, 0xf8, +0x97, 0xcf, 0x9e, 0x4d, 0xf5, 0x19, 0x7b, 0x16, 0xf3, 0x95, 0x8f, 0x97, 0x2e, 0x92, 0xf7, 0x91, +0x45, 0x17, 0x31, 0xc6, 0x8c, 0xb7, 0x55, 0x52, 0xaf, 0xb0, 0x01, 0x53, 0x11, 0xd3, 0xca, 0x9e, +0x70, 0x7b, 0x46, 0xef, 0x04, 0xdd, 0xac, 0x16, 0xbd, 0x8c, 0x39, 0xb5, 0x4b, 0xae, 0x07, 0x6e, +0x01, 0x25, 0x35, 0xdd, 0x43, 0xfb, 0xd5, 0x1e, 0xa2, 0x75, 0x26, 0x8f, 0xaa, 0xf5, 0xe7, 0xa6, +0x4a, 0x52, 0x9b, 0x91, 0xfe, 0x60, 0xc3, 0x90, 0xbb, 0x48, 0x0e, 0x50, 0x4c, 0xc5, 0x94, 0xcb, +0x69, 0xc9, 0xa2, 0xe2, 0xb7, 0x47, 0xa5, 0x6e, 0x87, 0x22, 0x21, 0xf2, 0x75, 0x72, 0x3e, 0xb5, +0x38, 0x65, 0x09, 0xba, 0x17, 0x41, 0xbe, 0xbb, 0x53, 0x96, 0xf0, 0xf5, 0x7b, 0x15, 0x4b, 0x38, +0x78, 0xff, 0x97, 0xdb, 0xd5, 0xf5, 0x17, 0x93, 0xa7, 0xa0, 0xeb, 0x96, 0x38, 0xdc, 0x82, 0xc7, +0xde, 0x23, 0x34, 0x38, 0x7a, 0x84, 0xa6, 0xa8, 0xd9, 0x91, 0x08, 0xfc, 0x52, 0xf0, 0x45, 0x3c, +0xee, 0x2a, 0x66, 0x25, 0x59, 0x01, 0x5b, 0x37, 0x9f, 0xfb, 0xb2, 0x72, 0xbd, 0x3f, 0x8b, 0x8b, +0x27, 0x86, 0x14, 0x9f, 0x47, 0x79, 0xd8, 0xed, 0x16, 0xd6, 0x28, 0xef, 0xf7, 0x1c, 0x85, 0x7c, +0x23, 0xdd, 0xa9, 0x42, 0x6c, 0x08, 0x92, 0xd7, 0x3c, 0x1f, 0x3a, 0xb5, 0x08, 0x28, 0xfe, 0xc8, +0x7c, 0x8c, 0xbc, 0x5c, 0x45, 0x33, 0x93, 0xda, 0x55, 0x4d, 0x37, 0x87, 0xa0, 0x4a, 0xc6, 0xa8, +0x56, 0xdd, 0xf3, 0x94, 0x05, 0x4b, 0x27, 0xbf, 0xfe, 0xa2, 0xe0, 0xe4, 0xda, 0x62, 0x09, 0x66, +0x76, 0x11, 0xaa, 0xad, 0x1d, 0x9a, 0xa2, 0x13, 0x7a, 0x93, 0x0b, 0xb3, 0x7c, 0x89, 0x8b, 0xb4, +0xc6, 0x10, 0x28, 0x96, 0x88, 0x98, 0x53, 0x3b, 0x33, 0x6f, 0xf5, 0x71, 0x5a, 0xac, 0x4d, 0xad, +0x3d, 0x95, 0x8d, 0x72, 0x4e, 0x14, 0xa1, 0xf5, 0x2d, 0x01, 0xee, 0x25, 0xb0, 0xa7, 0x5c, 0xd0, +0x02, 0x9d, 0x6e, 0x1f, 0xb3, 0xc3, 0xae, 0x12, 0x51, 0x0b, 0x34, 0x41, 0x59, 0x5d, 0x8f, 0x2d, +0xe7, 0xfb, 0x98, 0x21, 0x43, 0x01, 0x33, 0x9c, 0x77, 0x03, 0x4c, 0x23, 0xb0, 0xd3, 0x90, 0x5d, +0x03, 0xec, 0x74, 0x54, 0x8e, 0xef, 0x12, 0xbc, 0xe2, 0x7f, 0xbf, 0x82, 0x2c, 0xa4, 0x25, 0xc0, +0x8a, 0xec, 0x83, 0x0a, 0xf0, 0x16, 0x46, 0xb4, 0xe0, 0xcc, 0x94, 0xb1, 0x4e, 0x92, 0x5a, 0x46, +0x55, 0x6a, 0x31, 0x36, 0xe2, 0x7c, 0x6c, 0x51, 0x80, 0xe9, 0xbc, 0xcf, 0x43, 0x0f, 0x78, 0x9e, +0x89, 0x0f, 0xba, 0xde, 0x1a, 0x72, 0x67, 0x6d, 0x73, 0x9d, 0x1a, 0x72, 0xeb, 0x56, 0x5e, 0x04, +0x7e, 0x37, 0xd1, 0x9a, 0xbf, 0xdb, 0x08, 0x9d, 0x50, 0x1f, 0xdc, 0xbd, 0x48, 0xf1, 0x03, 0x59, +0x81, 0x4f, 0x96, 0x5b, 0x97, 0xfa, 0x36, 0x95, 0x2e, 0xba, 0x60, 0xef, 0x6a, 0xa1, 0xc7, 0xe7, +0xb5, 0xe9, 0x73, 0x39, 0x0d, 0x63, 0x3a, 0xc4, 0x6c, 0xea, 0x9e, 0x18, 0xd2, 0xc1, 0xa7, 0x82, +0x49, 0xe9, 0x25, 0x6e, 0x1d, 0xe4, 0x20, 0xc5, 0xae, 0xa4, 0x2c, 0x52, 0xc6, 0x67, 0xda, 0x8b, +0x2a, 0x38, 0x89, 0x1f, 0xaf, 0xf3, 0xb5, 0x86, 0xbf, 0x7d, 0x9d, 0xf6, 0x4d, 0xf6, 0x56, 0xa8, +0xfe, 0x93, 0xd4, 0x6e, 0x50, 0x50, 0x8c, 0xfa, 0x35, 0xa3, 0x04, 0xed, 0x5f, 0x7b, 0x81, 0xeb, +0xb7, 0xeb, 0xd2, 0xbc, 0x67, 0x72, 0x1b, 0x44, 0xd8, 0x85, 0xb4, 0x92, 0x48, 0x3b, 0x2c, 0x45, +0x5a, 0x4f, 0x49, 0xef, 0x29, 0x05, 0xef, 0x5a, 0x15, 0xef, 0x75, 0xcb, 0x10, 0xcd, 0x05, 0xe4, +0x9d, 0x44, 0x9f, 0xd0, 0xce, 0x69, 0x82, 0x71, 0x3c, 0xa5, 0x9d, 0xdb, 0x36, 0x32, 0xf2, 0x5a, +0x58, 0xbe, 0x90, 0x62, 0xfd, 0x42, 0x4a, 0x7e, 0xf0, 0xf8, 0xd4, 0xdc, 0xf1, 0x05, 0xef, 0x5c, +0x93, 0xb8, 0xd2, 0xe6, 0x89, 0x8a, 0x19, 0xfb, 0x22, 0x37, 0xa9, 0xb5, 0x2e, 0xc6, 0x78, 0x6e, +0x67, 0x62, 0x70, 0x27, 0xcd, 0x1d, 0x2d, 0x43, 0x37, 0xce, 0x1e, 0x93, 0x27, 0xd5, 0xd9, 0x03, +0xdc, 0xce, 0xd7, 0xf5, 0x53, 0xab, 0x01, 0x56, 0x92, 0xfe, 0xd3, 0x67, 0x93, 0x34, 0xcc, 0x99, +0xf4, 0x1b, 0xdc, 0xa9, 0xce, 0x2b, 0x16, 0x6e, 0x37, 0x7e, 0xa1, 0xac, 0x32, 0x73, 0xdc, 0xd0, +0x0a, 0x7b, 0xf0, 0x38, 0x38, 0x8b, 0x11, 0x67, 0x89, 0x3d, 0x82, 0x13, 0x23, 0xd0, 0xe5, 0x6a, +0x28, 0xc4, 0x77, 0xd3, 0x1c, 0x74, 0x1e, 0xad, 0x66, 0x9b, 0xdc, 0x37, 0x01, 0xba, 0x2e, 0x0d, +0x5d, 0x07, 0x0d, 0xc8, 0x1a, 0x7a, 0x0c, 0x33, 0x03, 0xed, 0x50, 0x19, 0x4d, 0x4e, 0x2a, 0xe9, +0xb0, 0x43, 0x2f, 0x45, 0x85, 0x22, 0x65, 0xce, 0x30, 0x90, 0xbf, 0x23, 0x62, 0xb0, 0xad, 0xac, +0xbc, 0xc8, 0xec, 0x52, 0x10, 0xfd, 0x57, 0xad, 0xf6, 0x0b, 0xe6, 0x15, 0x25, 0x0f, 0x3b, 0xcb, +0x61, 0x1b, 0x15, 0xcc, 0x9d, 0x0a, 0x6c, 0xc6, 0x5e, 0xe7, 0xb8, 0xa3, 0xb7, 0x48, 0xd3, 0x03, +0xdf, 0x59, 0x91, 0xc3, 0x1b, 0xdc, 0x19, 0x7a, 0x4c, 0xd9, 0x6d, 0xc3, 0x06, 0xcd, 0x63, 0x8e, +0x5a, 0xf3, 0xcd, 0x11, 0x3d, 0xf7, 0xa8, 0x5c, 0xf6, 0x9a, 0x03, 0x64, 0x0f, 0x3d, 0x46, 0xb0, +0xfc, 0xd0, 0xc8, 0x39, 0x3c, 0x03, 0xc1, 0xe3, 0x63, 0x31, 0xc8, 0xd3, 0x08, 0x5a, 0x55, 0x26, +0x34, 0x2e, 0x07, 0xe6, 0x44, 0xca, 0x03, 0xcf, 0x33, 0x43, 0xc4, 0xcc, 0xf1, 0x30, 0x91, 0x9f, +0x02, 0x73, 0x5a, 0xb6, 0x64, 0x41, 0xaa, 0x4e, 0x6d, 0x79, 0x2a, 0x55, 0xc1, 0x59, 0xcf, 0xf9, +0x6e, 0x04, 0x92, 0xdb, 0x6e, 0xaf, 0x93, 0xac, 0x34, 0x9b, 0x96, 0xbc, 0x4d, 0x5a, 0x6e, 0x7e, +0x2b, 0xed, 0xe6, 0x73, 0xbf, 0xe1, 0xa0, 0xf7, 0xc7, 0xcd, 0x73, 0x20, 0x1f, 0x99, 0x3a, 0x27, +0x70, 0x6e, 0x16, 0xb8, 0xa7, 0x2b, 0xe5, 0x43, 0xb4, 0x03, 0xe6, 0x6f, 0xfe, 0x93, 0x34, 0x21, +0xf2, 0xa6, 0xdb, 0x3a, 0x20, 0x65, 0xc0, 0x81, 0xca, 0xce, 0xcb, 0x14, 0x2f, 0xa3, 0x67, 0x5c, +0x07, 0xc8, 0xaa, 0xd1, 0xd0, 0x97, 0x69, 0xe9, 0x25, 0x69, 0x4e, 0xe4, 0xfe, 0xb5, 0x69, 0xb1, +0x25, 0x5f, 0xe0, 0xd2, 0x32, 0xe2, 0xd2, 0x12, 0x92, 0x69, 0xdc, 0x4f, 0x4d, 0x5e, 0x05, 0x3e, +0x23, 0x29, 0x7c, 0x43, 0xd4, 0xaa, 0xe0, 0x3d, 0x43, 0x1e, 0x38, 0x5d, 0xd4, 0x20, 0xcd, 0x0b, +0x6c, 0x8f, 0xcc, 0x8f, 0x09, 0x07, 0xb6, 0x47, 0x3c, 0xb0, 0xd8, 0xb7, 0x87, 0x03, 0x81, 0xfe, +0x2e, 0xdd, 0x48, 0x7f, 0x6b, 0x5d, 0x74, 0x86, 0xaa, 0xb3, 0xf9, 0x03, 0xfd, 0x9d, 0x26, 0x51, +0xe3, 0x4b, 0x8c, 0x0c, 0x33, 0xcb, 0x06, 0x8b, 0x94, 0x13, 0xe8, 0x8f, 0xe4, 0xc0, 0x06, 0x45, +0x6c, 0xa4, 0xaf, 0x55, 0x17, 0x9b, 0x21, 0x59, 0xa1, 0xb3, 0x5a, 0x00, 0xa9, 0xbf, 0xfb, 0x35, +0x9b, 0xc6, 0xd7, 0x37, 0xd2, 0xd7, 0x76, 0xf4, 0x44, 0x02, 0xb2, 0xc2, 0x40, 0x73, 0x17, 0x64, +0x9a, 0xbe, 0xc0, 0x0b, 0xfb, 0x1b, 0x96, 0x84, 0xc9, 0xa4, 0xb4, 0xcc, 0xdd, 0xce, 0xac, 0xe0, +0x30, 0xbe, 0xee, 0xf3, 0x55, 0x73, 0xc5, 0x7f, 0xed, 0x83, 0x35, 0xe8, 0xbf, 0xda, 0x07, 0xcb, +0xed, 0x82, 0x86, 0xf4, 0x5c, 0x69, 0xa6, 0xdd, 0x55, 0xd5, 0x13, 0xf2, 0xde, 0x0c, 0x4f, 0xac, +0x81, 0xef, 0xc3, 0xf8, 0xa2, 0x67, 0xd6, 0xae, 0x8c, 0x9b, 0xf4, 0x58, 0x37, 0x7c, 0x71, 0xcd, +0x28, 0x03, 0x06, 0xd7, 0x74, 0xe4, 0x26, 0xb1, 0x91, 0x6a, 0x99, 0xbe, 0x7e, 0x41, 0xf2, 0x2a, +0x63, 0xb4, 0x2b, 0xbb, 0x58, 0x2d, 0xea, 0x68, 0x9f, 0x27, 0x36, 0x2a, 0x5f, 0x62, 0x2c, 0xd7, +0x4c, 0x7e, 0x0f, 0x1a, 0x5b, 0xb2, 0x29, 0xe5, 0x95, 0xa7, 0x51, 0x4f, 0x2b, 0x2d, 0x81, 0x9f, +0xa3, 0x9f, 0x68, 0x67, 0x0c, 0x5a, 0xc3, 0x3d, 0x7e, 0xfa, 0x77, 0xfd, 0x7e, 0x8f, 0xd7, 0xc3, +0xd7, 0x72, 0x67, 0xf8, 0x2b, 0xbd, 0x95, 0xfd, 0x09, 0x9e, 0x6e, 0x78, 0x77, 0x30, 0xd1, 0x97, +0x70, 0xb2, 0x6c, 0xda, 0x45, 0x43, 0x5c, 0x0c, 0xfd, 0xe1, 0xb9, 0x1b, 0x7c, 0xaf, 0x29, 0xff, +0x1c, 0x60, 0xf1, 0xf2, 0xfa, 0x77, 0x6b, 0x09, 0x02, 0x2f, 0x3f, 0x83, 0xa0, 0x26, 0xfa, 0x78, +0xba, 0xe1, 0xdd, 0x1d, 0xfd, 0x89, 0x7e, 0x82, 0x45, 0x94, 0x6c, 0xbf, 0xb1, 0xee, 0x38, 0xb3, +0x50, 0x7e, 0xaf, 0xd7, 0x3b, 0x30, 0x55, 0x77, 0x3f, 0xd5, 0x3d, 0xd2, 0x97, 0xaa, 0x91, 0xfc, +0x10, 0x19, 0x1e, 0xe7, 0xa6, 0xa9, 0x18, 0xf7, 0xdd, 0xf5, 0x4f, 0xf9, 0x98, 0xbf, 0x6e, 0xbb, +0xbe, 0x50, 0x22, 0x27, 0xa3, 0xc4, 0xac, 0x8c, 0x12, 0x66, 0xb5, 0xc4, 0xec, 0x29, 0x0f, 0x63, +0x31, 0x66, 0x73, 0x67, 0xa8, 0x90, 0x3c, 0x89, 0x5d, 0x18, 0x2d, 0x1d, 0xfc, 0x84, 0xce, 0xd7, +0x86, 0x33, 0xb2, 0x03, 0xfa, 0x74, 0xa8, 0xb0, 0x8b, 0x99, 0x97, 0x14, 0x19, 0x74, 0x5b, 0x59, +0x9e, 0x93, 0x09, 0xdb, 0x98, 0x95, 0x70, 0xae, 0xf3, 0xfb, 0xbc, 0xbe, 0x0c, 0x9c, 0x07, 0xa6, +0xe3, 0x3c, 0xbe, 0x3d, 0xe0, 0x8d, 0x58, 0x4a, 0x35, 0xfe, 0x97, 0x7b, 0x85, 0x3f, 0xbd, 0xd0, +0xf8, 0xc8, 0xeb, 0x89, 0xad, 0x33, 0xf7, 0xf6, 0xbd, 0xff, 0x82, 0xa4, 0xe9, 0x65, 0xa7, 0x77, +0x38, 0xf4, 0xb1, 0x99, 0x67, 0xf7, 0xfb, 0x8f, 0x9e, 0xdb, 0x77, 0x32, 0xa1, 0x81, 0x86, 0x3e, +0x43, 0x2e, 0xe4, 0x7e, 0xc7, 0xa7, 0x1f, 0x11, 0xb5, 0x7f, 0xda, 0x47, 0x9e, 0xe5, 0x1f, 0xc8, +0x4f, 0x73, 0xaf, 0x66, 0x7c, 0xca, 0xab, 0x79, 0x1e, 0x32, 0xf1, 0x25, 0xcc, 0xd3, 0x69, 0x8f, +0xe6, 0x56, 0xcd, 0xa2, 0x2a, 0xa1, 0x3d, 0x4e, 0x1e, 0xcd, 0x91, 0x43, 0x0f, 0x77, 0x6a, 0x0a, +0x75, 0xff, 0x9d, 0xb6, 0xed, 0xa4, 0x51, 0x4c, 0xa5, 0x52, 0x7e, 0xcd, 0x2c, 0x71, 0x85, 0x3f, +0xea, 0x64, 0xa7, 0xf7, 0xe3, 0x5d, 0x1f, 0x7c, 0xf2, 0xc4, 0xc3, 0xb6, 0xea, 0xdf, 0x9f, 0x67, +0x96, 0x82, 0xda, 0xff, 0x1e, 0xcd, 0x88, 0x8f, 0x47, 0x76, 0x6c, 0xc8, 0x7f, 0xea, 0xe1, 0xa8, +0xf9, 0x64, 0x22, 0x76, 0xe9, 0xd5, 0x3e, 0xa5, 0x6d, 0xbd, 0x8c, 0x7b, 0x3f, 0x3d, 0x92, 0x26, +0xce, 0xf8, 0x1a, 0xed, 0x64, 0x8a, 0x2f, 0x6d, 0x18, 0xff, 0x51, 0xe7, 0xf8, 0x3e, 0x66, 0x8e, +0x67, 0x1d, 0xa4, 0xdd, 0x69, 0x79, 0x7c, 0x4c, 0xd2, 0xc8, 0xe0, 0x7e, 0x63, 0x89, 0xef, 0xf6, +0x94, 0x32, 0x67, 0x4f, 0xf2, 0x16, 0x8e, 0x7e, 0x7e, 0x8a, 0xfb, 0xff, 0x44, 0xe2, 0x38, 0xe8, +0xe1, 0x67, 0xb8, 0xff, 0x1a, 0xb2, 0x1c, 0x76, 0xab, 0x99, 0xef, 0xce, 0xee, 0x42, 0x9a, 0xe2, +0x95, 0xe4, 0x7b, 0x93, 0x24, 0xa3, 0x69, 0x29, 0x13, 0x0d, 0xef, 0x84, 0xf5, 0x8d, 0x09, 0xd0, +0xef, 0xf2, 0x08, 0xe4, 0x5d, 0x63, 0x3f, 0x6c, 0x37, 0x16, 0xe8, 0xef, 0xc9, 0xcb, 0xf0, 0xa1, +0xa3, 0x1c, 0xa0, 0x3f, 0x48, 0xd0, 0xc9, 0x8f, 0x6e, 0x2f, 0x92, 0x4f, 0xd9, 0xbb, 0xe4, 0xd3, +0xa4, 0xfd, 0xde, 0x33, 0x44, 0x72, 0x26, 0xed, 0x8f, 0xef, 0xc1, 0x7c, 0xe3, 0x54, 0x35, 0x25, +0xbb, 0xaa, 0x1b, 0x2d, 0x01, 0x3d, 0x0a, 0x81, 0xa3, 0xe2, 0x55, 0x5a, 0x38, 0xad, 0x0d, 0x15, +0xdc, 0x77, 0x09, 0x08, 0xca, 0x6e, 0xb9, 0xef, 0x3e, 0xad, 0xec, 0x63, 0xed, 0xb6, 0xab, 0x65, +0xa6, 0x3c, 0x0a, 0x54, 0xd2, 0x43, 0x9e, 0xaf, 0x89, 0xcb, 0xea, 0xca, 0x8f, 0xc1, 0xfb, 0x2d, +0x03, 0x23, 0x09, 0x45, 0xeb, 0x3f, 0x68, 0xef, 0x24, 0xa4, 0x7d, 0x39, 0xb7, 0x3b, 0x68, 0x46, +0xec, 0x92, 0x27, 0x15, 0xbd, 0x72, 0xd5, 0x55, 0xda, 0x9d, 0xd5, 0xe9, 0xf1, 0xee, 0x56, 0x57, +0x85, 0xa7, 0x3c, 0xf8, 0x4c, 0xb0, 0x23, 0x8d, 0xef, 0x27, 0xcf, 0x5a, 0x45, 0x3e, 0xfc, 0xf4, +0xea, 0xb7, 0x47, 0xd1, 0x97, 0x53, 0x63, 0x18, 0x1c, 0x35, 0xc9, 0xe7, 0xe8, 0x2b, 0xa9, 0x73, +0x09, 0xdf, 0x29, 0xe1, 0x10, 0x96, 0x44, 0xcd, 0xe3, 0xbb, 0x6f, 0x58, 0x17, 0x10, 0xff, 0x3a, +0xcc, 0x88, 0xbf, 0xb1, 0xdf, 0xa1, 0x39, 0xd9, 0x7f, 0x72, 0xbb, 0xc2, 0xc9, 0xfc, 0xcc, 0x89, +0x47, 0x04, 0xbe, 0x62, 0xb4, 0x8c, 0x39, 0x06, 0xfd, 0xed, 0x1c, 0xcb, 0xbd, 0x8a, 0x37, 0xe0, +0x4b, 0x60, 0xed, 0x51, 0x75, 0xf9, 0x5c, 0x1b, 0xca, 0x4c, 0xed, 0xe1, 0x83, 0x3e, 0xbf, 0xfa, +0x9e, 0xed, 0xdf, 0x79, 0x4d, 0x7e, 0xd1, 0xeb, 0x6d, 0xec, 0x6f, 0x7d, 0x61, 0xfa, 0xd7, 0x2f, +0xb4, 0xdd, 0xf9, 0xd7, 0xb1, 0x0c, 0x1b, 0xbc, 0xbb, 0xb9, 0xad, 0xa0, 0x78, 0x43, 0x4c, 0xf2, +0x39, 0xe5, 0x44, 0x22, 0x69, 0x94, 0x7f, 0x05, 0x56, 0x63, 0x34, 0x1b, 0x36, 0xa2, 0xee, 0x2b, +0xa8, 0xa8, 0x9e, 0xb1, 0x80, 0x7d, 0x48, 0x27, 0x8f, 0xac, 0x8e, 0x10, 0xf7, 0x96, 0xf4, 0x42, +0xb2, 0xd2, 0x7e, 0x7b, 0xfd, 0x17, 0xfc, 0x25, 0x39, 0x19, 0xfe, 0x12, 0x26, 0xd0, 0x3a, 0x8c, +0xfd, 0xc4, 0x2f, 0x99, 0x58, 0xcb, 0xe9, 0xa6, 0xfa, 0x42, 0x14, 0xab, 0xcc, 0x10, 0xd3, 0x70, +0xeb, 0xb0, 0x9d, 0xd6, 0xeb, 0x49, 0x67, 0x33, 0x9b, 0x73, 0x59, 0xa3, 0x60, 0x12, 0x60, 0xd7, +0x7b, 0xd2, 0xb3, 0x24, 0xe3, 0x3e, 0x14, 0xf0, 0xff, 0xb5, 0x17, 0xb8, 0x57, 0xa4, 0x87, 0xb9, +0x0c, 0x8c, 0xde, 0x88, 0xa3, 0x48, 0x16, 0x9b, 0x3c, 0x1a, 0x16, 0xf1, 0x99, 0x3c, 0x3a, 0x46, +0x38, 0xfb, 0x3c, 0xb7, 0x7b, 0x0c, 0x3a, 0xa9, 0x9c, 0x3c, 0x94, 0x11, 0x83, 0xa9, 0x9f, 0x31, +0xed, 0x07, 0x3d, 0x62, 0x54, 0x9b, 0xe9, 0x6f, 0x31, 0xe8, 0x15, 0x5b, 0xf1, 0x5a, 0x8d, 0xea, +0x6f, 0x69, 0x0d, 0xf5, 0xc3, 0xd2, 0x69, 0xbd, 0xbd, 0x97, 0x69, 0x0c, 0x3a, 0x5a, 0x7d, 0xe7, +0x63, 0xc1, 0xa3, 0x8c, 0x85, 0x48, 0x99, 0x1d, 0xb9, 0x1b, 0xfa, 0x41, 0x2f, 0xc5, 0xdf, 0x71, +0x8f, 0x5b, 0xc3, 0xbd, 0x5d, 0x9e, 0xd4, 0x5a, 0x44, 0x24, 0x2f, 0x4d, 0xcb, 0xb5, 0xe4, 0x83, +0x4e, 0xf5, 0x86, 0xe2, 0xbb, 0x91, 0x68, 0xb7, 0x99, 0x95, 0xf4, 0x87, 0x35, 0x8a, 0x4f, 0xb8, +0x9c, 0x56, 0xe1, 0xff, 0x0b, 0xff, 0xcd, 0x56, 0xfb, 0x63, 0xd3, 0x67, 0x6e, 0xa7, 0x87, 0xfb, +0x6e, 0xf2, 0xa6, 0x6b, 0xdf, 0x9f, 0x0e, 0x70, 0x99, 0x50, 0x83, 0x91, 0x65, 0x9d, 0x96, 0x3b, +0x41, 0xd2, 0x2e, 0xb0, 0x33, 0x5c, 0xac, 0xc0, 0xcb, 0x98, 0xc5, 0x0b, 0x59, 0xfe, 0x8a, 0x89, +0x4f, 0xeb, 0x32, 0x76, 0x0d, 0x88, 0xa9, 0x5d, 0x03, 0x8a, 0x06, 0xb8, 0x46, 0xd5, 0xd8, 0x69, +0x15, 0x8d, 0xe8, 0xcc, 0x25, 0xe3, 0x33, 0x18, 0x2f, 0xb9, 0x90, 0x41, 0x5e, 0x87, 0xa2, 0xa9, +0x96, 0x12, 0x5c, 0xa6, 0xbb, 0x2d, 0x00, 0xe9, 0xb2, 0x9f, 0xcb, 0x56, 0x73, 0x5a, 0x5b, 0xe1, +0xb9, 0x69, 0xaf, 0xb8, 0x7b, 0x36, 0xc6, 0xc5, 0x33, 0xc1, 0xd1, 0xab, 0x57, 0xf8, 0xe8, 0x9f, +0xa9, 0x68, 0x26, 0x8a, 0xfe, 0x5e, 0x52, 0xee, 0xec, 0x11, 0xf2, 0x61, 0x45, 0xdb, 0x1d, 0x4d, +0xb4, 0x03, 0x93, 0x76, 0xd2, 0x60, 0x5e, 0x70, 0x2b, 0xf6, 0xd5, 0xe7, 0x6b, 0xed, 0x4c, 0xac, +0xb2, 0x05, 0xd4, 0xdd, 0x09, 0x2d, 0x8a, 0x84, 0x09, 0xeb, 0x03, 0x90, 0x64, 0x91, 0x60, 0x54, +0x3b, 0x02, 0x4d, 0x38, 0x2c, 0x56, 0x5e, 0x14, 0xac, 0xc7, 0x8f, 0x9a, 0x9c, 0xec, 0xdb, 0xc9, +0x64, 0xb8, 0x02, 0xcf, 0xdb, 0x93, 0x72, 0x78, 0x89, 0x64, 0x30, 0xfd, 0x0d, 0xfb, 0xb6, 0xd3, +0x1a, 0xd1, 0x37, 0xf6, 0x77, 0x5c, 0x91, 0xec, 0x04, 0x47, 0xd4, 0xa4, 0x20, 0xd1, 0x18, 0x24, +0x28, 0x77, 0xdf, 0x70, 0x8e, 0x08, 0xed, 0x36, 0x29, 0x9a, 0x6f, 0x4a, 0xff, 0x24, 0x9a, 0xda, +0xb9, 0xfe, 0x69, 0xd3, 0x6c, 0x9d, 0xf9, 0xde, 0xcf, 0xa9, 0x8d, 0x5b, 0xd9, 0x32, 0xa7, 0x41, +0xf7, 0xde, 0x3e, 0xb1, 0x92, 0x56, 0x2d, 0x38, 0x2f, 0xa7, 0x47, 0x14, 0xf7, 0x14, 0x6a, 0x54, +0xce, 0x2f, 0x23, 0x9e, 0xd6, 0xf4, 0xd3, 0xac, 0x48, 0x9c, 0x7d, 0xfc, 0x28, 0xe9, 0x57, 0xb4, +0x7f, 0x39, 0x25, 0x1d, 0x21, 0x1b, 0x9d, 0xc4, 0xd5, 0x9f, 0x70, 0xf9, 0x2f, 0xe9, 0xbc, 0x85, +0xcc, 0x89, 0xf9, 0xe3, 0x51, 0x45, 0xcb, 0xc4, 0xcc, 0x4f, 0x7b, 0x5d, 0x9c, 0xb0, 0xe9, 0x5d, +0xae, 0x39, 0x64, 0x37, 0x8d, 0x42, 0x1f, 0x0a, 0x1b, 0xea, 0xde, 0xc9, 0x9f, 0x94, 0x58, 0x72, +0x3d, 0x6c, 0xad, 0x2c, 0xf7, 0x4c, 0x68, 0x84, 0x4d, 0xe9, 0x33, 0xc4, 0x4c, 0xd0, 0x88, 0x1e, +0x55, 0x57, 0xcc, 0x22, 0x5d, 0x50, 0x4c, 0xc9, 0x2e, 0xc6, 0x3e, 0xf8, 0x2a, 0x7d, 0x89, 0x6b, +0x03, 0x86, 0x77, 0x1f, 0x7b, 0x24, 0xf1, 0x08, 0xe6, 0x7b, 0x9e, 0x2b, 0x27, 0x23, 0xd7, 0x2c, +0x25, 0x17, 0xd7, 0x98, 0xcc, 0xef, 0x3e, 0x3a, 0x90, 0x18, 0xc0, 0xdc, 0xb8, 0x8d, 0x39, 0x03, +0x07, 0x07, 0x36, 0x30, 0xb6, 0x0b, 0x36, 0x37, 0xcd, 0xe4, 0x7b, 0xec, 0xa9, 0x9a, 0x1e, 0x9a, +0x9f, 0x1b, 0x36, 0x69, 0x7c, 0xd7, 0x98, 0x7e, 0x80, 0xd1, 0x09, 0x8f, 0x53, 0x7c, 0x46, 0x98, +0xd2, 0x8d, 0x0a, 0x33, 0x74, 0xa3, 0x42, 0x55, 0xcf, 0x28, 0xe4, 0xf5, 0xce, 0x18, 0x85, 0xa5, +0x76, 0xaa, 0x4f, 0xfa, 0x29, 0x66, 0x45, 0x3d, 0xac, 0xca, 0xb7, 0x54, 0x8b, 0x08, 0xfc, 0x4b, +0xa7, 0x18, 0x17, 0xad, 0x04, 0x9f, 0x3d, 0xcf, 0x2c, 0x69, 0x1e, 0xcb, 0x75, 0x33, 0xb1, 0x13, +0x1c, 0xc6, 0xf7, 0x34, 0x5d, 0xd9, 0xc3, 0x69, 0xa8, 0x51, 0xec, 0xf1, 0xfc, 0xc9, 0xa9, 0xbd, +0x42, 0x7c, 0x9d, 0x9c, 0xce, 0x07, 0x97, 0x8a, 0x0d, 0xbc, 0x15, 0xc2, 0xd7, 0xd3, 0xd6, 0xa0, +0xff, 0xeb, 0xec, 0x4e, 0xa6, 0x03, 0x9d, 0xb9, 0xcf, 0xbe, 0x76, 0xe2, 0xfa, 0xf9, 0x8c, 0x76, +0x76, 0x73, 0x98, 0x4b, 0x14, 0x3c, 0xd4, 0xf5, 0x81, 0xa9, 0xaf, 0x0d, 0xd4, 0x5f, 0xe0, 0x51, +0xd2, 0x02, 0xcc, 0xa9, 0x59, 0x52, 0x2a, 0xa5, 0xf6, 0x74, 0x3a, 0xbe, 0x1e, 0x45, 0x00, 0x75, +0x31, 0xf7, 0x48, 0x5d, 0xa3, 0xfd, 0xc2, 0xc4, 0x9d, 0xf9, 0x5c, 0x76, 0x54, 0xd0, 0x5a, 0x0e, +0xe7, 0x8a, 0x42, 0x5a, 0xc7, 0x81, 0x3e, 0xc3, 0x35, 0xb9, 0xaf, 0xd9, 0xaa, 0x53, 0x89, 0xaf, +0xd7, 0xc3, 0x68, 0xb5, 0xce, 0xed, 0x62, 0xe6, 0xea, 0x89, 0xc9, 0x2b, 0x19, 0xfc, 0xe5, 0x13, +0x3d, 0xe0, 0x17, 0x3a, 0x21, 0xc1, 0xbf, 0x66, 0x7c, 0x29, 0x54, 0x38, 0xef, 0x64, 0x62, 0xd5, +0xc4, 0xa4, 0xed, 0xe0, 0xf6, 0xf5, 0xb0, 0x9a, 0x17, 0x2b, 0x96, 0x75, 0x46, 0x6e, 0xc7, 0x14, +0x3f, 0x4e, 0x04, 0xe6, 0x80, 0x4f, 0xaa, 0xc0, 0x27, 0xdb, 0x39, 0x9f, 0xbc, 0x6e, 0x58, 0xcc, +0x34, 0xec, 0x66, 0x3a, 0x27, 0x86, 0x96, 0xbb, 0xa6, 0x56, 0x5b, 0x20, 0x0f, 0x99, 0x79, 0xce, +0xc9, 0x84, 0x34, 0x4c, 0xab, 0x56, 0x90, 0xca, 0x44, 0x53, 0x1b, 0xa4, 0x13, 0xa7, 0xe9, 0xba, +0x24, 0xd1, 0xb4, 0x2b, 0x17, 0x3a, 0x86, 0xcb, 0x8d, 0xef, 0xb4, 0x7a, 0xd9, 0x5b, 0x21, 0xb1, +0x49, 0x1a, 0x6d, 0x73, 0x00, 0xe9, 0x26, 0x68, 0x1e, 0x3b, 0xed, 0xa9, 0x95, 0xc3, 0x47, 0x90, +0xba, 0x98, 0xdd, 0x1c, 0xd3, 0x1c, 0x4d, 0xd0, 0x59, 0x71, 0xda, 0x67, 0x8a, 0x7a, 0x19, 0xea, +0x05, 0x85, 0x69, 0x8f, 0x30, 0xd5, 0xa1, 0xf6, 0x9b, 0x48, 0xfb, 0x30, 0x52, 0xf5, 0x7c, 0x4f, +0xa7, 0x62, 0x6e, 0x8c, 0x09, 0x28, 0x49, 0x27, 0x73, 0x75, 0x69, 0x4e, 0x44, 0x3d, 0x24, 0x6b, +0xc1, 0x89, 0xb0, 0xa4, 0x2e, 0x1b, 0x0b, 0x08, 0x0f, 0xda, 0xe7, 0x61, 0x51, 0xbc, 0xcc, 0xb0, +0xcd, 0x4d, 0xdc, 0x4f, 0xeb, 0x63, 0xba, 0x29, 0x1b, 0x9b, 0x4b, 0xc1, 0x4b, 0xea, 0xb9, 0xc5, +0x7c, 0x68, 0x62, 0xa2, 0xd7, 0x83, 0xde, 0xf8, 0xc6, 0x5d, 0x1e, 0x66, 0xe4, 0x6f, 0x79, 0x77, +0xd1, 0x9e, 0x65, 0x7a, 0x9b, 0x8b, 0xb7, 0x1c, 0xfe, 0x66, 0xc1, 0x9b, 0xd9, 0xdb, 0xc3, 0xf2, +0x78, 0x6c, 0x0e, 0x62, 0xb9, 0xfc, 0x2d, 0x57, 0xef, 0x99, 0xd1, 0x89, 0x98, 0xa5, 0xf2, 0x22, +0x33, 0xaa, 0x5e, 0xe6, 0x5e, 0x60, 0x9b, 0x93, 0x11, 0x57, 0xf6, 0x39, 0xac, 0x73, 0xad, 0x53, +0x56, 0x6e, 0x33, 0x57, 0x05, 0x0b, 0xc1, 0x51, 0xae, 0x26, 0xf2, 0x22, 0x44, 0xf4, 0xdc, 0xc3, +0x60, 0x8a, 0x1a, 0x8a, 0xd4, 0xf9, 0x5b, 0xd3, 0x1a, 0x78, 0x32, 0xcc, 0xd8, 0xb0, 0xc2, 0x6b, +0xde, 0x9f, 0xfd, 0x77, 0xc6, 0x90, 0xe8, 0xe5, 0x32, 0x12, 0xbd, 0xb9, 0x62, 0x62, 0xe2, 0xf9, +0xf4, 0x5c, 0xc9, 0x34, 0x39, 0x22, 0xd9, 0x60, 0x66, 0x05, 0xa6, 0x5b, 0xa3, 0x58, 0x24, 0x5f, +0x13, 0x66, 0x55, 0x0a, 0xe6, 0x14, 0x3c, 0xe1, 0x25, 0x85, 0xfb, 0xc6, 0xfb, 0x0b, 0x13, 0xe4, +0xd7, 0xb8, 0xb3, 0x41, 0x81, 0x6c, 0x6b, 0xfe, 0x7a, 0xba, 0xfe, 0xaf, 0xc7, 0x5a, 0x99, 0xf0, +0xa0, 0x3b, 0xfb, 0xff, 0x0c, 0x0f, 0xf2, 0xcf, 0x4c, 0x71, 0xb6, 0x50, 0x6a, 0x9e, 0x13, 0xce, +0x15, 0xe7, 0x6a, 0x3c, 0xe0, 0x6d, 0x3a, 0x5f, 0xc6, 0x0a, 0x13, 0xb4, 0x37, 0x45, 0xd9, 0x67, +0x73, 0xfc, 0x49, 0x95, 0xcf, 0x99, 0xbc, 0x96, 0xe6, 0x3c, 0x95, 0xc7, 0x5c, 0x7c, 0xed, 0xa7, +0x33, 0xb5, 0xab, 0xed, 0x46, 0xbe, 0x14, 0x2c, 0xd3, 0xf9, 0x52, 0xb0, 0x7c, 0x05, 0x5f, 0xea, +0xbc, 0xbb, 0xa4, 0x8a, 0x69, 0x79, 0x49, 0x23, 0x69, 0x4d, 0x8f, 0x96, 0xb3, 0x6a, 0x6e, 0xce, +0xbf, 0x31, 0x41, 0xca, 0xa1, 0xe7, 0xd4, 0x98, 0xb0, 0xf7, 0xf1, 0xf7, 0x29, 0x7a, 0x2d, 0xce, +0xa0, 0xd7, 0x62, 0x95, 0x5e, 0x8b, 0xd9, 0x6c, 0x60, 0x44, 0x67, 0x12, 0x73, 0x20, 0x9d, 0x2a, +0x68, 0x05, 0x8e, 0x6a, 0x6c, 0x18, 0x52, 0xeb, 0xb4, 0x2b, 0xed, 0x12, 0xf2, 0x33, 0xf1, 0x5c, +0x53, 0xa8, 0x9c, 0x69, 0xee, 0xa1, 0x35, 0x1a, 0x2b, 0xe6, 0xba, 0x61, 0xc1, 0x5a, 0xb0, 0x32, +0xbd, 0x6e, 0xc7, 0x57, 0x68, 0x53, 0x7b, 0x7b, 0x69, 0xe6, 0xa5, 0x91, 0x74, 0x51, 0x39, 0x51, +0x5e, 0xcc, 0x75, 0x28, 0xc3, 0xdc, 0x5e, 0xba, 0xc1, 0xc1, 0x9e, 0xa0, 0xf5, 0x46, 0x2e, 0x19, +0xff, 0x81, 0x4e, 0x4f, 0x2b, 0xeb, 0x7f, 0x82, 0x85, 0xe0, 0xf1, 0xf5, 0x89, 0x9f, 0x92, 0xbc, +0xb7, 0x9b, 0xd3, 0xb4, 0x55, 0x24, 0xf3, 0xe8, 0x5f, 0xcc, 0x04, 0x83, 0xf6, 0x5d, 0x15, 0x6c, +0x42, 0x97, 0xe8, 0x14, 0xef, 0xca, 0xd7, 0xe3, 0x0e, 0x6a, 0x2d, 0x5f, 0x09, 0x36, 0xd3, 0x5a, +0xd8, 0x64, 0x80, 0xea, 0x04, 0x14, 0x93, 0x40, 0x73, 0x0b, 0xe9, 0xa0, 0xd6, 0x2f, 0x6d, 0xb9, +0xe6, 0xab, 0x5b, 0xce, 0x3d, 0x49, 0xba, 0xe9, 0x7b, 0xb2, 0xa0, 0x83, 0x5a, 0x6d, 0x9e, 0xdf, +0x8f, 0xfd, 0xfe, 0x77, 0xe3, 0x3b, 0xe8, 0x69, 0xb6, 0xf2, 0x1d, 0x14, 0xe3, 0x62, 0x76, 0xa8, +0xef, 0x60, 0x5f, 0xf7, 0x39, 0xf5, 0xdc, 0xfd, 0x25, 0xd2, 0x1e, 0x45, 0xba, 0x0b, 0xa3, 0xc1, +0xd9, 0xce, 0xed, 0x43, 0x8d, 0xbf, 0x53, 0x7b, 0xc7, 0x8a, 0x09, 0xf9, 0x20, 0xed, 0x65, 0x27, +0x89, 0xa0, 0xa6, 0xfd, 0x8d, 0x1a, 0xb7, 0xa8, 0xf1, 0xa5, 0x6a, 0x3c, 0x4f, 0x8d, 0x7f, 0x4b, +0x8d, 0x5b, 0x21, 0x4f, 0xe6, 0xab, 0x69, 0xb7, 0xab, 0x69, 0xf3, 0xb8, 0xa6, 0xdb, 0xa9, 0x2d, +0x52, 0xe3, 0xf9, 0x90, 0x23, 0xb9, 0x37, 0xc8, 0x95, 0xdc, 0x4c, 0xb9, 0x42, 0x3a, 0xa3, 0xba, +0x23, 0x24, 0xe3, 0x96, 0x91, 0xeb, 0x41, 0xd5, 0x0f, 0x56, 0x6b, 0xdb, 0xc8, 0x2a, 0x60, 0x61, +0x4a, 0xe9, 0xfd, 0xf2, 0x87, 0xa3, 0xcc, 0x95, 0x71, 0x6e, 0x1b, 0xf2, 0xd1, 0x07, 0xdd, 0xfb, +0x26, 0x96, 0x6f, 0xc3, 0xdb, 0xd4, 0x7d, 0x0c, 0x90, 0xff, 0xb4, 0xf3, 0xdf, 0x57, 0xd0, 0xce, +0x44, 0xe6, 0x42, 0x8e, 0x9c, 0x2f, 0xc9, 0x91, 0x4b, 0x39, 0xe8, 0xec, 0xc9, 0x74, 0x8b, 0x45, +0xd9, 0xbf, 0x2e, 0x96, 0x91, 0xcd, 0x42, 0x3b, 0x52, 0xf5, 0xd0, 0xc5, 0xd8, 0x5e, 0x68, 0x64, +0xb2, 0x2c, 0x73, 0xeb, 0x6d, 0xdc, 0xbf, 0x6d, 0xf6, 0x1e, 0x68, 0xeb, 0xb0, 0x45, 0x2c, 0x09, +0xd2, 0xe7, 0x3b, 0xd6, 0xa8, 0x29, 0x68, 0xb5, 0x9d, 0x81, 0x06, 0x2b, 0x95, 0x3d, 0xc5, 0x73, +0x3d, 0xfc, 0xe6, 0x96, 0x95, 0xca, 0x17, 0xc4, 0xd4, 0x9d, 0xc4, 0x19, 0xd8, 0xb7, 0xf3, 0xdd, +0xba, 0xe5, 0xd1, 0xbc, 0x85, 0x1e, 0x7e, 0xda, 0xbd, 0xbd, 0xea, 0x3c, 0xeb, 0x5c, 0x58, 0xcb, +0x9c, 0xf4, 0x0e, 0xbc, 0xe7, 0x72, 0xbc, 0xdb, 0xa7, 0xf0, 0x4e, 0x9f, 0x10, 0x68, 0x0f, 0x8e, +0x26, 0x5f, 0xc7, 0xfc, 0xd4, 0xc1, 0xc2, 0x91, 0x9c, 0x69, 0x6d, 0xa3, 0x33, 0x05, 0x3e, 0x0e, +0xd7, 0x38, 0x75, 0xb2, 0x80, 0xce, 0x5d, 0xdc, 0x90, 0x46, 0xe7, 0x1b, 0xca, 0x22, 0x39, 0x29, +0xbd, 0x12, 0xf0, 0x7a, 0xf9, 0x19, 0x8b, 0x25, 0xd3, 0xd2, 0xda, 0x79, 0x9a, 0x61, 0x5a, 0x5a, +0x13, 0x4f, 0x33, 0x4f, 0x4b, 0xf3, 0xa8, 0xe7, 0x33, 0x32, 0xd3, 0x5c, 0x0d, 0x43, 0x6a, 0x8c, +0x56, 0x25, 0xe7, 0x37, 0x0c, 0xa5, 0xa8, 0x5b, 0x46, 0x1e, 0xc6, 0x7c, 0x07, 0x2c, 0x3c, 0xa7, +0xba, 0xf6, 0x14, 0xfd, 0xbf, 0x6a, 0x98, 0x4d, 0xc7, 0xfa, 0xa6, 0xdf, 0x4c, 0xa1, 0xdc, 0xff, +0x23, 0x9c, 0xb6, 0x3f, 0xb6, 0xd4, 0xcb, 0x0a, 0x45, 0x4d, 0x6c, 0xd6, 0x9f, 0xf6, 0x8d, 0xf7, +0xd1, 0x8a, 0x4c, 0xff, 0xc0, 0x54, 0x2e, 0x9a, 0x81, 0x91, 0xeb, 0x45, 0x6e, 0x57, 0x02, 0xca, +0xb4, 0x2f, 0x66, 0x7c, 0x79, 0x86, 0x76, 0x2f, 0x65, 0xee, 0xb2, 0xe6, 0x5f, 0xe8, 0xb4, 0xc9, +0x17, 0x53, 0x97, 0x44, 0xe8, 0xcc, 0x99, 0xe6, 0xc6, 0x3b, 0x32, 0xf0, 0xa5, 0x8c, 0xbc, 0x61, +0xa0, 0xa3, 0x21, 0x3a, 0x0b, 0x56, 0xaf, 0x29, 0x7e, 0xe9, 0x95, 0x84, 0x48, 0x3b, 0xc6, 0x97, +0x44, 0x65, 0x31, 0x11, 0x25, 0xb9, 0x28, 0x52, 0x2c, 0x2e, 0x2f, 0xec, 0xe7, 0x76, 0xa6, 0xc1, +0x5e, 0x62, 0x98, 0x24, 0xee, 0x49, 0x30, 0x4a, 0x09, 0xf5, 0xb5, 0x24, 0x4a, 0x3a, 0x58, 0xe1, +0xaf, 0x5e, 0xee, 0x3e, 0x35, 0xed, 0x6c, 0x8e, 0x87, 0xf4, 0x1a, 0xcc, 0x44, 0x65, 0x37, 0x9c, +0xcd, 0xf1, 0xf1, 0x33, 0x3b, 0x98, 0x6b, 0x45, 0xed, 0x0d, 0x67, 0x73, 0x18, 0x7b, 0x6d, 0x29, +0xdd, 0x51, 0x14, 0x86, 0x36, 0xd9, 0xda, 0x19, 0x83, 0xf5, 0x50, 0x76, 0x43, 0x2b, 0xda, 0x23, +0x24, 0xd3, 0xc0, 0x07, 0xb6, 0x4c, 0xb8, 0x3b, 0x21, 0x0d, 0x35, 0x2c, 0xce, 0x4f, 0x43, 0x45, +0xd8, 0xd6, 0x82, 0x95, 0xec, 0x41, 0x7a, 0xaf, 0xf9, 0x31, 0x7b, 0x88, 0xf8, 0xed, 0x2b, 0xb9, +0xd0, 0x72, 0x03, 0x17, 0x96, 0xaa, 0xe3, 0x2e, 0xeb, 0xc6, 0x51, 0xc5, 0xef, 0x40, 0x72, 0xc5, +0x92, 0x98, 0x53, 0xe8, 0xc6, 0x06, 0xa3, 0xb2, 0x1e, 0xd9, 0xe1, 0xe2, 0x77, 0x43, 0xa8, 0xe7, +0x55, 0x3a, 0x1e, 0x6f, 0x18, 0x5a, 0xea, 0x61, 0x4e, 0xcc, 0x21, 0x15, 0x92, 0x91, 0xaf, 0x04, +0x5d, 0x6a, 0x19, 0x52, 0xf4, 0x9b, 0xba, 0xfc, 0x94, 0x57, 0x8c, 0x4b, 0xb6, 0x1c, 0x5b, 0x3b, +0xd1, 0xf3, 0xd6, 0x7e, 0x2b, 0x0b, 0x25, 0x5a, 0xfa, 0x4a, 0xdb, 0x59, 0xe1, 0xaf, 0xc7, 0xba, +0xcf, 0xab, 0x7b, 0xbd, 0xf8, 0x0d, 0x32, 0x36, 0xd8, 0x59, 0xb0, 0xb7, 0x88, 0xf2, 0xbe, 0xf8, +0xcc, 0xff, 0xd8, 0xa7, 0xb6, 0xc0, 0x07, 0x6b, 0xdf, 0xc2, 0xf1, 0xf7, 0x89, 0x02, 0x4f, 0x75, +0xd1, 0xbb, 0xb7, 0xd2, 0x5f, 0x79, 0xbe, 0x76, 0x61, 0xa5, 0x92, 0x9f, 0x9f, 0x3b, 0xd3, 0x45, +0xad, 0x18, 0xf7, 0x9a, 0xdb, 0x3d, 0x5f, 0x94, 0x10, 0x11, 0x13, 0xf7, 0x5c, 0x47, 0x5b, 0x86, +0x52, 0x7b, 0xb3, 0x94, 0x3d, 0xe3, 0x65, 0x24, 0x1b, 0x88, 0x7b, 0x45, 0x47, 0xa8, 0x14, 0x3d, +0xfa, 0xc4, 0xb1, 0x28, 0x8b, 0x5d, 0x3a, 0xba, 0x5d, 0x6a, 0xb2, 0x1b, 0x5a, 0xfa, 0x9d, 0xe0, +0x81, 0x03, 0x07, 0x07, 0x59, 0x44, 0x1f, 0x4a, 0x88, 0x5e, 0xc9, 0x63, 0xe3, 0x1c, 0xf3, 0x6a, +0x22, 0x36, 0xf3, 0x4f, 0xfb, 0x4f, 0xfe, 0x6a, 0x90, 0x15, 0x54, 0xc1, 0xaa, 0x3b, 0xcf, 0xca, +0x9a, 0x76, 0x3e, 0x71, 0x0c, 0x9a, 0x52, 0x2e, 0xbe, 0x97, 0xfd, 0xfe, 0x98, 0x6d, 0x76, 0x44, +0xd7, 0xd8, 0x67, 0xeb, 0x43, 0x3b, 0x07, 0x09, 0x26, 0xda, 0xf9, 0x1e, 0x66, 0x39, 0xc6, 0x46, +0xf1, 0xb6, 0x2f, 0xca, 0xe2, 0xc8, 0x49, 0xdc, 0x65, 0x2b, 0x31, 0xb0, 0x96, 0xc4, 0x36, 0xf9, +0x50, 0x1f, 0xe0, 0xf7, 0xff, 0xfa, 0x68, 0xf7, 0x79, 0xa7, 0xe6, 0xd7, 0x47, 0xc3, 0x0e, 0x29, +0x8f, 0xe0, 0xd8, 0xee, 0xb7, 0xb2, 0x5f, 0xfd, 0x6e, 0x83, 0x4e, 0xac, 0xb5, 0x73, 0x8a, 0x49, +0xc6, 0x18, 0x2b, 0xe9, 0x95, 0xe5, 0x38, 0xa8, 0x79, 0x28, 0xd1, 0x7d, 0x7a, 0xdb, 0xa5, 0x63, +0xdb, 0xc5, 0xc5, 0xcc, 0x15, 0xc9, 0x53, 0xcf, 0x49, 0xee, 0x51, 0x4e, 0xf0, 0xee, 0x1c, 0xa0, +0x7b, 0x07, 0x3a, 0x35, 0x51, 0x33, 0x3f, 0x3b, 0xcd, 0xdc, 0xdc, 0x7f, 0x42, 0x3c, 0xec, 0x2e, +0x71, 0x2a, 0x7b, 0x0a, 0x76, 0xa6, 0x6e, 0x17, 0x21, 0x2c, 0x16, 0x42, 0xd9, 0xa7, 0xaf, 0xdb, +0x66, 0xbd, 0x3a, 0xc0, 0xdb, 0x35, 0xe2, 0xe4, 0xed, 0x42, 0x5a, 0xd9, 0xc2, 0xc3, 0xe4, 0x39, +0xa1, 0x7b, 0x9b, 0xf2, 0xf3, 0xd3, 0x37, 0x43, 0x99, 0xd1, 0xa7, 0x9c, 0xbe, 0xd1, 0xf9, 0xb7, +0xd2, 0xdd, 0x39, 0x78, 0x5b, 0x71, 0x9e, 0xf9, 0x6f, 0x5d, 0xc9, 0x9c, 0xf4, 0xfe, 0xad, 0x5e, +0x96, 0xcf, 0xf2, 0x0b, 0xa8, 0xcf, 0xfc, 0xf8, 0xb5, 0xb2, 0x3a, 0x18, 0xa3, 0xb7, 0xa1, 0x27, +0x34, 0x90, 0x9a, 0x6b, 0xaa, 0x14, 0x3f, 0xec, 0xda, 0xa5, 0xc4, 0x89, 0xeb, 0xbd, 0x1d, 0xac, +0xb5, 0xc0, 0xcf, 0x9a, 0x96, 0xf6, 0x30, 0x1b, 0x6b, 0x29, 0x81, 0xf5, 0xeb, 0x1f, 0xfb, 0xf3, +0x60, 0x1f, 0x34, 0xb0, 0x2f, 0x48, 0x78, 0x7d, 0xa0, 0x90, 0x7d, 0x4f, 0xe9, 0xc5, 0xeb, 0xc3, +0x53, 0xbd, 0x48, 0x6b, 0x0c, 0xc1, 0x66, 0x7e, 0x3b, 0xd9, 0x84, 0xb7, 0x4b, 0x4e, 0xde, 0xd2, +0xcb, 0x6e, 0x91, 0x27, 0xd4, 0x7b, 0xb6, 0xf4, 0xfe, 0x2e, 0xa4, 0xfe, 0x8c, 0x9f, 0x50, 0x22, +0xdf, 0xa9, 0x87, 0xdf, 0xd8, 0xa3, 0xec, 0x75, 0xb8, 0xc2, 0x7d, 0x30, 0x5d, 0xcc, 0x50, 0xfb, +0x91, 0x7c, 0x95, 0x38, 0x1a, 0xb9, 0x4c, 0xca, 0x79, 0x6e, 0x3b, 0xe6, 0x74, 0xc0, 0xa9, 0x92, +0xaf, 0xe2, 0x57, 0x27, 0x27, 0x55, 0x68, 0x46, 0xb7, 0x89, 0xe6, 0x44, 0xd8, 0x72, 0xd0, 0x4c, +0x92, 0xe4, 0xcd, 0xb0, 0x83, 0x86, 0x51, 0xb2, 0xff, 0xa0, 0x27, 0x14, 0x32, 0xa1, 0x09, 0x7c, +0x71, 0x20, 0xd1, 0x66, 0xe1, 0x56, 0x9c, 0x96, 0xdb, 0x75, 0x9a, 0x9d, 0x7d, 0xef, 0x0f, 0xc6, +0x2c, 0xe3, 0x7d, 0xfc, 0x9e, 0x01, 0x34, 0xd8, 0xc6, 0xce, 0xec, 0xb8, 0xa5, 0x52, 0xbe, 0x7e, +0x8b, 0x67, 0x0a, 0x2e, 0xb0, 0xbc, 0x4a, 0x9e, 0x48, 0x0e, 0xf7, 0x19, 0xc2, 0x91, 0x7c, 0x04, +0x62, 0xc0, 0xd6, 0xc5, 0x4c, 0x51, 0x5d, 0xc6, 0x6a, 0xac, 0xb1, 0x25, 0xa1, 0x7a, 0xf5, 0x98, +0xe2, 0xd5, 0x4b, 0xf9, 0x4e, 0xd3, 0x7e, 0x53, 0xa5, 0x9d, 0xb6, 0xd4, 0x2e, 0xc9, 0x65, 0x45, +0xf2, 0xe4, 0x7b, 0x2b, 0x35, 0xb0, 0xaf, 0x64, 0xd9, 0xee, 0x21, 0x0d, 0x19, 0xbc, 0x97, 0x67, +0x72, 0xb2, 0x0d, 0x4c, 0xb3, 0xde, 0x68, 0x70, 0x42, 0x82, 0x08, 0x11, 0x4d, 0xa8, 0x3f, 0x94, +0x68, 0x18, 0x7c, 0x31, 0xd1, 0xfd, 0x5e, 0xa0, 0x3f, 0x02, 0x79, 0x39, 0xde, 0x3f, 0x9e, 0xc8, +0x94, 0x41, 0x8e, 0x44, 0xa4, 0xe9, 0x89, 0x63, 0xbb, 0x7f, 0x27, 0xf9, 0x4d, 0x85, 0xbc, 0x64, +0x85, 0xa1, 0x90, 0x97, 0x54, 0xfc, 0xc3, 0xba, 0x0c, 0x3b, 0x36, 0x2b, 0xc3, 0x8e, 0xd5, 0x93, +0xf6, 0xe4, 0x6c, 0xb4, 0x19, 0xde, 0x1c, 0x7c, 0x93, 0xec, 0xd9, 0x19, 0x8b, 0x12, 0x18, 0xfb, +0x83, 0xa1, 0x1d, 0x0d, 0x8f, 0xbe, 0xb8, 0xa3, 0xfb, 0xa0, 0xa4, 0xe1, 0x3b, 0x6f, 0xd3, 0x1e, +0x4a, 0x6a, 0x8b, 0x5b, 0x33, 0xd5, 0x8a, 0xe4, 0x1a, 0xc5, 0xc7, 0x54, 0x4a, 0x6d, 0xa8, 0x8d, +0xb3, 0x25, 0x82, 0x88, 0x3a, 0xa4, 0xf9, 0xd0, 0xcb, 0x34, 0x26, 0xc6, 0x36, 0xac, 0x37, 0x2b, +0xf8, 0x87, 0x0d, 0x8a, 0x5e, 0x2d, 0x19, 0x43, 0x7d, 0x0d, 0xb4, 0x33, 0xfd, 0xed, 0x28, 0xf9, +0xb9, 0xaf, 0xa9, 0x30, 0xa1, 0x2d, 0x95, 0x89, 0xf6, 0x22, 0xee, 0xfb, 0x34, 0xf2, 0x9b, 0xf0, +0x2e, 0x2b, 0xbd, 0x8c, 0xbe, 0x5d, 0x21, 0x5f, 0xe6, 0xf5, 0x69, 0xc0, 0x53, 0x17, 0x6c, 0xa9, +0x3b, 0x77, 0x18, 0x7b, 0xa3, 0x84, 0xea, 0x44, 0x81, 0x32, 0x26, 0xd6, 0xa2, 0x4e, 0x9f, 0x4a, +0xb1, 0x32, 0xb5, 0xc6, 0x12, 0x6e, 0x25, 0xe8, 0xde, 0x5d, 0xe9, 0xaf, 0xf2, 0x56, 0x71, 0x4d, +0x31, 0x8b, 0x5b, 0xd0, 0xdb, 0x79, 0xba, 0x5e, 0xf5, 0xa4, 0xcc, 0x88, 0xca, 0x23, 0xdb, 0x21, +0xdf, 0x1f, 0x97, 0x7a, 0x09, 0xb3, 0x43, 0x7d, 0xdd, 0x87, 0xa4, 0x98, 0xc9, 0x9c, 0xc2, 0x5c, +0x96, 0xc3, 0x06, 0x35, 0xfd, 0xfc, 0xfb, 0x3b, 0x60, 0xc1, 0xdf, 0x6e, 0xd5, 0x29, 0x6b, 0x31, +0x80, 0x78, 0xbb, 0x55, 0x81, 0x38, 0xc0, 0xd3, 0xf5, 0xef, 0x3e, 0x3e, 0x98, 0x18, 0xbc, 0xdd, +0x3a, 0x03, 0xd8, 0x7e, 0x42, 0x7b, 0xab, 0x3f, 0x75, 0x05, 0x77, 0xe1, 0xfd, 0x9a, 0xe8, 0xf3, +0xb7, 0xcb, 0x32, 0xde, 0xa7, 0x38, 0xe9, 0x32, 0xe7, 0x77, 0xba, 0xa5, 0x2a, 0x84, 0xf6, 0x38, +0x15, 0x7e, 0xd1, 0xe5, 0xcb, 0x67, 0xf8, 0x8e, 0x17, 0xe1, 0xfd, 0xc1, 0xca, 0x8f, 0x0d, 0x1a, +0x58, 0x23, 0xdb, 0x68, 0xd4, 0x70, 0xed, 0x05, 0x63, 0x20, 0x63, 0xf4, 0xe4, 0xca, 0x13, 0xf8, +0x95, 0xd2, 0xdc, 0xc9, 0xc7, 0x10, 0x9e, 0x12, 0xf7, 0xc0, 0x62, 0xf4, 0x7d, 0x3e, 0x91, 0xe6, +0xd0, 0x0e, 0xc8, 0x6c, 0xe2, 0x51, 0xfb, 0x14, 0x8f, 0xaa, 0x7b, 0x98, 0xbb, 0xe4, 0x4b, 0xae, +0x2e, 0xf9, 0x8a, 0xda, 0x07, 0x1f, 0x66, 0xec, 0xc3, 0x33, 0xa7, 0xea, 0x5a, 0xf1, 0x91, 0x7c, +0x81, 0x4e, 0x2b, 0x4d, 0xdd, 0xd3, 0x85, 0x7a, 0xe7, 0xf2, 0xda, 0xcd, 0xf2, 0xe7, 0xfc, 0xfe, +0x41, 0xc2, 0xc7, 0x20, 0x7f, 0x7c, 0x4b, 0x17, 0x9b, 0x25, 0x5f, 0x16, 0x35, 0x7e, 0x8f, 0x7f, +0x0c, 0xe3, 0xe6, 0x53, 0x51, 0x73, 0x26, 0x81, 0xe7, 0xb5, 0x5b, 0xbc, 0xf2, 0x67, 0xfc, 0xa6, +0x27, 0xf3, 0xd4, 0xe9, 0x9d, 0xeb, 0x3b, 0xf9, 0x3d, 0x79, 0x29, 0xac, 0x4d, 0x69, 0xac, 0x7d, +0x34, 0x5e, 0xf9, 0x0e, 0x3a, 0xbe, 0xfa, 0xa1, 0xec, 0x4c, 0x61, 0x15, 0x64, 0xff, 0x42, 0x7f, +0xb1, 0xaf, 0x54, 0x6e, 0x0d, 0x23, 0x29, 0x70, 0x93, 0x2a, 0x05, 0x60, 0xd1, 0x2c, 0x80, 0x14, +0x60, 0xf3, 0x17, 0xd0, 0xfc, 0x2c, 0x7a, 0x77, 0xe3, 0x69, 0x62, 0x8e, 0xb4, 0x34, 0xb8, 0x49, +0x39, 0x6b, 0x45, 0x9e, 0xca, 0x89, 0xf7, 0x54, 0x69, 0xb0, 0x9c, 0x73, 0x7e, 0x56, 0x4c, 0x5b, +0x23, 0x8c, 0x91, 0x6e, 0x63, 0x39, 0x90, 0x08, 0x17, 0xab, 0x5e, 0x9d, 0xa9, 0x51, 0x92, 0x4d, +0xa3, 0x84, 0xfb, 0x78, 0x66, 0xf2, 0xb8, 0xf1, 0xdd, 0x1d, 0x89, 0x3e, 0x47, 0x22, 0x63, 0xdf, +0x30, 0x4b, 0xed, 0x41, 0xfa, 0xce, 0x90, 0xea, 0x85, 0xb5, 0x40, 0xc6, 0x46, 0xd1, 0x9a, 0x53, +0x08, 0xb4, 0xa3, 0xf0, 0x55, 0xe8, 0x1f, 0x63, 0x6e, 0x43, 0x6a, 0x55, 0xc3, 0xbf, 0x0d, 0xb3, +0xb5, 0x93, 0x9f, 0x01, 0x2d, 0x76, 0x33, 0xd2, 0x64, 0x6b, 0x46, 0x69, 0xd7, 0x24, 0x24, 0xa7, +0x85, 0xdf, 0xc1, 0xc3, 0xdf, 0x57, 0x4f, 0x69, 0xc7, 0xfc, 0x1e, 0x24, 0x3a, 0x5d, 0x00, 0xad, +0xf3, 0xb5, 0xc8, 0x3c, 0xb1, 0x50, 0x58, 0xc6, 0xcf, 0x92, 0x9b, 0x81, 0xb5, 0x06, 0x4f, 0x03, +0x9e, 0x5a, 0x60, 0x1f, 0xa7, 0x2f, 0x8d, 0x09, 0xda, 0x33, 0xd3, 0xd6, 0x39, 0x9e, 0x28, 0xf9, +0xb6, 0x41, 0x1f, 0xfc, 0x1c, 0xa3, 0xc0, 0xc8, 0xf2, 0x20, 0xb3, 0x8b, 0x59, 0x8d, 0x9f, 0xd6, +0x15, 0xc8, 0xc6, 0xdc, 0x2a, 0x95, 0xa7, 0xdf, 0x8f, 0x48, 0xc5, 0xe9, 0xf7, 0x3f, 0x4a, 0x36, +0xf7, 0x4a, 0x66, 0xe0, 0xf8, 0xfa, 0xf9, 0x8e, 0x07, 0x9e, 0xae, 0xd7, 0x49, 0xc6, 0xf4, 0xfb, +0x7c, 0xf5, 0x94, 0xeb, 0x04, 0xf7, 0x64, 0xeb, 0x52, 0xb7, 0x3a, 0x39, 0xd6, 0x35, 0xf0, 0x15, +0xa2, 0xe4, 0x98, 0xff, 0xfd, 0x0a, 0xbe, 0x42, 0xe4, 0x24, 0x49, 0xb7, 0x8d, 0x79, 0xf8, 0x48, +0x3e, 0xac, 0xf4, 0x14, 0xf7, 0xdf, 0xcb, 0x23, 0x8f, 0x47, 0x98, 0x76, 0x1c, 0x76, 0xa8, 0x8e, +0x4e, 0x69, 0x63, 0xdc, 0x98, 0x63, 0xf5, 0x07, 0x06, 0xda, 0x98, 0xf6, 0xb0, 0xa3, 0x93, 0x19, +0xfe, 0xf5, 0x9f, 0xff, 0xf5, 0x9f, 0x43, 0x83, 0x98, 0x7d, 0xa2, 0x62, 0x86, 0x44, 0xf5, 0x96, +0xfa, 0xa3, 0x4b, 0x3b, 0xd1, 0x9a, 0xb1, 0x02, 0x3a, 0x29, 0x78, 0x82, 0xff, 0x9e, 0xc2, 0x6f, +0x09, 0x7b, 0x15, 0x73, 0xd3, 0x6b, 0x08, 0x6f, 0x72, 0xed, 0x6c, 0x9c, 0xff, 0xbe, 0xce, 0x7f, +0xdf, 0x80, 0xb6, 0x73, 0x1a, 0x36, 0x5c, 0xa2, 0xf6, 0xbc, 0xb0, 0x9c, 0x63, 0x5f, 0xe7, 0x36, +0xd1, 0x8a, 0xd0, 0x46, 0x6b, 0x70, 0xaf, 0xd3, 0x48, 0x5e, 0x4f, 0xa1, 0x9e, 0xa7, 0x87, 0xdc, +0xba, 0xe0, 0x5e, 0xe4, 0x94, 0x10, 0x5a, 0xa3, 0x5a, 0x50, 0xbc, 0xd5, 0x5b, 0xc8, 0xce, 0x15, +0xf4, 0x92, 0xc0, 0x12, 0xce, 0xab, 0xcf, 0x0b, 0xb0, 0x21, 0xfd, 0x7c, 0xad, 0x91, 0xdf, 0xde, +0xa1, 0xd5, 0x10, 0xfe, 0x0f, 0xb2, 0x79, 0x66, 0xd3, 0xc3, 0xf8, 0xfc, 0xd9, 0x06, 0xdd, 0x83, +0xfa, 0x9a, 0x2c, 0xe0, 0xfe, 0x51, 0xf2, 0xa8, 0x98, 0x95, 0x71, 0x5a, 0xec, 0x93, 0x16, 0xe6, +0x75, 0x26, 0x8f, 0x52, 0xfa, 0x13, 0xc7, 0xa4, 0x7c, 0xf3, 0xcd, 0x90, 0x8a, 0x62, 0x24, 0x17, +0xbf, 0xb6, 0x70, 0x6e, 0xe5, 0x27, 0x83, 0x6c, 0x76, 0x2f, 0x13, 0x93, 0x47, 0x25, 0x7d, 0x68, +0x70, 0x74, 0xb0, 0xfb, 0x8c, 0x98, 0xd5, 0x98, 0xa8, 0x44, 0x5e, 0xc9, 0x9e, 0x0b, 0xbd, 0x83, +0x9f, 0xd3, 0xa1, 0xd3, 0x3a, 0xb6, 0xb0, 0xb1, 0xf2, 0x13, 0x83, 0x9a, 0x37, 0xca, 0x78, 0x8e, +0xe5, 0xe8, 0x6f, 0x19, 0x7d, 0x7f, 0x52, 0xba, 0x50, 0x85, 0x6f, 0xb9, 0x8b, 0x92, 0x47, 0x91, +0x73, 0x71, 0xd8, 0x66, 0x83, 0xe6, 0x3b, 0xda, 0xd7, 0x63, 0xa9, 0xfa, 0xc4, 0xca, 0x4c, 0x8b, +0xd8, 0xe2, 0xe4, 0xd1, 0xb0, 0xc1, 0x3c, 0xc9, 0x16, 0x8b, 0x82, 0x44, 0x4f, 0x51, 0xd2, 0x98, +0x5f, 0x0e, 0x25, 0x46, 0x13, 0xdd, 0xc7, 0xcc, 0x87, 0x31, 0x96, 0x30, 0x8f, 0xc7, 0xb2, 0xe2, +0x4c, 0xbd, 0x2f, 0x2a, 0xdf, 0xc1, 0x2d, 0x00, 0x8d, 0x31, 0xaa, 0xeb, 0xdb, 0x0f, 0x7b, 0x12, +0x35, 0x39, 0x06, 0x15, 0x0b, 0x59, 0xbd, 0xeb, 0x40, 0xe7, 0xdd, 0xcf, 0x0c, 0x74, 0xd3, 0x94, +0xbe, 0x25, 0x7e, 0xf8, 0xc4, 0xff, 0x70, 0xa8, 0x77, 0x8b, 0x4d, 0xf2, 0x9b, 0x45, 0x84, 0x44, +0xe0, 0x17, 0xf2, 0x61, 0xe2, 0x60, 0x68, 0x9c, 0xaf, 0xf9, 0xd0, 0x3b, 0x88, 0x8f, 0xad, 0x7e, +0xd9, 0xdf, 0xe7, 0xab, 0x5c, 0x5a, 0xc9, 0xde, 0x44, 0xec, 0x95, 0xd5, 0x7c, 0xed, 0x07, 0xdf, +0xc7, 0x03, 0x95, 0x91, 0xf9, 0x01, 0x0f, 0xdf, 0x61, 0x39, 0x49, 0x7d, 0x31, 0xa3, 0x3a, 0x93, +0xc3, 0x1e, 0xc4, 0x38, 0x7b, 0x50, 0x40, 0x89, 0x63, 0x2a, 0xbc, 0xd7, 0x01, 0xef, 0x75, 0xc4, +0x5f, 0x57, 0xe3, 0x6f, 0x20, 0xfe, 0x06, 0xe2, 0xa7, 0x56, 0xa7, 0x76, 0x5d, 0x9e, 0xf6, 0xa1, +0xd7, 0x91, 0x72, 0x3a, 0x95, 0x22, 0x24, 0x7c, 0xe0, 0x01, 0xb1, 0x4b, 0x3e, 0xc3, 0xfb, 0xcd, +0x2e, 0x92, 0x7f, 0xe1, 0x54, 0x77, 0xbe, 0xb8, 0x6a, 0x21, 0x8d, 0x50, 0xce, 0xd7, 0x33, 0xba, +0xa7, 0xd7, 0x2a, 0x16, 0xc9, 0xe7, 0x22, 0x26, 0xbe, 0x9b, 0xf1, 0x1f, 0x94, 0x5d, 0xc7, 0x48, +0xf9, 0x80, 0xa7, 0xe8, 0x52, 0x29, 0xa8, 0x63, 0x3c, 0x5d, 0x87, 0x84, 0x3a, 0x24, 0xa4, 0x9c, +0x48, 0xa7, 0xb4, 0x22, 0xa5, 0x15, 0xb5, 0x7e, 0xa8, 0xdc, 0x7d, 0x51, 0xd0, 0xc0, 0x5a, 0x9d, +0x45, 0xf2, 0xa5, 0x48, 0x99, 0x0a, 0x01, 0x94, 0x04, 0xdf, 0x27, 0x5a, 0xa7, 0x5a, 0xbe, 0xeb, +0x86, 0x96, 0xe7, 0x40, 0x23, 0xec, 0x60, 0xe7, 0xd2, 0x18, 0x40, 0x4e, 0xa7, 0x60, 0x09, 0xe7, +0x11, 0xbb, 0x96, 0x8e, 0x5d, 0x48, 0xdd, 0xee, 0x36, 0xf9, 0x53, 0xc9, 0x53, 0x08, 0x19, 0xe6, +0xaa, 0x26, 0xeb, 0xdf, 0xc6, 0xc8, 0xc3, 0x36, 0xe3, 0x57, 0x8e, 0x9b, 0xf4, 0xdb, 0x65, 0x39, +0x79, 0x74, 0x5b, 0x56, 0x8d, 0x8e, 0xbe, 0x24, 0x5d, 0xe2, 0xaa, 0xa6, 0xed, 0x0b, 0xb5, 0x6a, +0xdb, 0x0f, 0x4c, 0xaf, 0x37, 0x96, 0x65, 0x57, 0xa1, 0xc9, 0x79, 0x81, 0x87, 0xc3, 0xf3, 0x24, +0x5b, 0x1a, 0xc3, 0xf7, 0xa7, 0x8d, 0x7e, 0x6e, 0x47, 0x7c, 0x6e, 0x68, 0x19, 0x52, 0x75, 0x9d, +0x8a, 0xe4, 0xb3, 0xe9, 0x33, 0x37, 0x7c, 0x2f, 0x0d, 0x9d, 0x35, 0x21, 0xfb, 0x50, 0xfb, 0x7e, +0x5c, 0x7f, 0x70, 0x47, 0x5b, 0xf0, 0xf7, 0xbf, 0x2b, 0xf9, 0xf6, 0x53, 0x8a, 0x54, 0xca, 0x81, +0x56, 0x39, 0x8f, 0x89, 0xcc, 0x81, 0x71, 0xbc, 0xe4, 0x76, 0x70, 0x85, 0x54, 0xbc, 0xb0, 0x52, +0x90, 0x24, 0x27, 0x7e, 0x5b, 0x25, 0x1b, 0xac, 0x85, 0xd3, 0x52, 0x3e, 0xde, 0x13, 0x52, 0x9e, +0x5b, 0xf0, 0xb7, 0x0b, 0xcb, 0x25, 0x3d, 0x7f, 0xa6, 0x77, 0x81, 0x2b, 0xe7, 0x6f, 0xdc, 0x1a, +0xd4, 0x61, 0xe0, 0x36, 0xe8, 0x77, 0xe2, 0xdf, 0x3c, 0xd8, 0x07, 0xae, 0xf5, 0x76, 0x31, 0xc1, +0xc8, 0x53, 0xee, 0xb7, 0x54, 0xb0, 0x39, 0x3c, 0xad, 0xb8, 0x6b, 0x2b, 0x4f, 0xf9, 0x19, 0xbf, +0x79, 0x83, 0x52, 0xf2, 0xbb, 0x0a, 0x29, 0x25, 0xfb, 0x56, 0x7e, 0xff, 0x16, 0xa5, 0x28, 0x65, +0x3a, 0x0f, 0xf6, 0xa1, 0x7c, 0x92, 0xde, 0x67, 0x7c, 0x62, 0xa1, 0x9b, 0xc0, 0x52, 0xd0, 0xbe, +0x1b, 0x37, 0x53, 0x3e, 0xe1, 0x6c, 0x57, 0x0e, 0x8f, 0x3f, 0x80, 0xaf, 0xb3, 0x20, 0x97, 0x3f, +0xe4, 0xb1, 0xa7, 0xe2, 0xb3, 0xf9, 0xd7, 0x57, 0x78, 0xec, 0xd7, 0x74, 0x97, 0x98, 0x44, 0x77, +0x4a, 0x50, 0x6c, 0x51, 0xdc, 0xca, 0xbf, 0xed, 0xeb, 0x2a, 0xe7, 0xf1, 0x7e, 0x7c, 0x9d, 0xcb, +0x53, 0xf6, 0xf2, 0xf8, 0x4b, 0xd0, 0x85, 0x98, 0xf0, 0x28, 0x7f, 0x57, 0x6e, 0xf2, 0xa2, 0x6f, +0x0f, 0xf2, 0xf8, 0x32, 0xc4, 0xbf, 0x01, 0x48, 0x8f, 0xf0, 0x98, 0x37, 0x3e, 0x8f, 0x7f, 0x5b, +0xcb, 0x63, 0x2b, 0x78, 0x39, 0xbe, 0x4b, 0xd3, 0xf0, 0x3a, 0xf2, 0xdd, 0xc2, 0xbf, 0x79, 0x79, +0xfc, 0x7f, 0x20, 0x9e, 0x2f, 0x05, 0xf9, 0xfb, 0x7c, 0x53, 0x9f, 0x7a, 0xdb, 0x97, 0xa3, 0x9b, +0xb1, 0x9d, 0x3c, 0xcd, 0x1a, 0xbf, 0x9b, 0xe7, 0xb6, 0x74, 0x2d, 0xe1, 0xf1, 0x3f, 0xf3, 0x3b, +0xbf, 0xfa, 0xf8, 0xba, 0x14, 0xc5, 0xe7, 0x20, 0x1e, 0xa2, 0x38, 0xbb, 0xcc, 0xe3, 0x7f, 0x87, +0xf8, 0x82, 0x83, 0x7d, 0xd0, 0x92, 0x4e, 0x03, 0x9b, 0xb7, 0x39, 0x7d, 0x3e, 0xe3, 0x70, 0x3f, +0x24, 0x3d, 0xac, 0x9b, 0xdf, 0x02, 0x62, 0x78, 0x93, 0xa7, 0x9c, 0x45, 0xae, 0x17, 0x91, 0xeb, +0x10, 0x4f, 0x13, 0x78, 0x1a, 0xdd, 0x0e, 0xb6, 0x8f, 0xc7, 0x8d, 0x3c, 0x7e, 0x01, 0x79, 0x76, +0x21, 0xcf, 0x1e, 0x9e, 0xf6, 0x47, 0x4a, 0xd3, 0x69, 0x91, 0x67, 0xa0, 0x7b, 0x39, 0xef, 0x97, +0x0a, 0x9e, 0xeb, 0x7a, 0x24, 0xd6, 0xcd, 0x39, 0xc8, 0x60, 0xe7, 0xf1, 0x4b, 0xe1, 0x35, 0x92, +0xc4, 0xbf, 0x97, 0xf2, 0x12, 0x2c, 0xc2, 0x5b, 0x9f, 0x9d, 0xc7, 0x63, 0x9a, 0xf0, 0x72, 0x89, +0xb7, 0x3e, 0x9b, 0xd7, 0xa9, 0x9b, 0x11, 0x59, 0xa2, 0x96, 0xfe, 0x84, 0xc7, 0xf5, 0xe1, 0xf9, +0x92, 0x8d, 0x7f, 0x9f, 0xc9, 0xe3, 0xc6, 0x08, 0xc7, 0x3a, 0xbb, 0x86, 0x62, 0x06, 0x4d, 0x84, +0x9f, 0xc4, 0xcb, 0x5e, 0xc9, 0xf7, 0x76, 0xdc, 0xff, 0xd5, 0x3b, 0xc2, 0x68, 0x67, 0x90, 0xf7, +0x67, 0xfc, 0xb4, 0xd5, 0x22, 0xf6, 0x9c, 0x22, 0x17, 0xef, 0x6c, 0x50, 0xbd, 0xb5, 0x61, 0x51, +0xf1, 0x4e, 0x8a, 0xb6, 0xca, 0xca, 0xff, 0x64, 0x0b, 0x6d, 0x06, 0x83, 0x40, 0x63, 0x14, 0xef, +0x36, 0x1b, 0x7d, 0x99, 0x7d, 0x60, 0xb0, 0xc7, 0x5b, 0x79, 0x09, 0x72, 0xdd, 0xcc, 0x1a, 0xc3, +0x65, 0xd0, 0x57, 0x1b, 0x48, 0x4f, 0xc5, 0x73, 0x06, 0xd3, 0x84, 0x9d, 0x78, 0x0a, 0x4c, 0x1b, +0x16, 0x4d, 0x4e, 0xf9, 0x25, 0xa6, 0x0b, 0x5b, 0xa3, 0x0c, 0x6f, 0x17, 0x59, 0x56, 0x38, 0x97, +0xfc, 0xdc, 0x7c, 0x47, 0x55, 0x22, 0x2a, 0x28, 0x3b, 0xac, 0x52, 0xba, 0xd1, 0x5d, 0xcb, 0x1d, +0xb4, 0x37, 0xb9, 0x87, 0x79, 0xa0, 0x23, 0xf9, 0xec, 0x6e, 0xd6, 0xc0, 0xd7, 0x15, 0x61, 0x7d, +0xa3, 0x8c, 0x68, 0xf7, 0x60, 0x2e, 0x5d, 0xe8, 0xc8, 0x36, 0x68, 0x09, 0x0f, 0xbc, 0xdb, 0xc8, +0x6a, 0x2a, 0xcc, 0x7e, 0x6b, 0xd8, 0xc0, 0x5c, 0x86, 0x6d, 0x25, 0xa7, 0x86, 0xaa, 0x27, 0x64, +0xcb, 0xaa, 0x8b, 0xcc, 0xb5, 0x92, 0xaf, 0xf9, 0xa3, 0x4f, 0xce, 0x88, 0x35, 0xc0, 0xb4, 0xa4, +0x45, 0x73, 0xfc, 0x9f, 0xcc, 0xe6, 0x87, 0xd8, 0x7c, 0x96, 0x67, 0xf1, 0x6f, 0x2f, 0xad, 0xfa, +0xf5, 0xff, 0x0a, 0x7b, 0x6d, 0x35, 0x88, 0xdf, 0xde, 0x22, 0xe4, 0xb9, 0xa0, 0x5b, 0x29, 0x69, +0xc5, 0xb0, 0x45, 0x68, 0x4f, 0x8b, 0xba, 0x93, 0xff, 0xc0, 0x2f, 0x59, 0x43, 0x8f, 0x0e, 0xa3, +0xb2, 0xc1, 0x2d, 0xb8, 0xe9, 0x97, 0x2c, 0x84, 0x83, 0xea, 0xa9, 0x39, 0xf4, 0x39, 0x66, 0xbd, +0xaa, 0x70, 0x87, 0x58, 0x63, 0x2a, 0x61, 0xd5, 0x2d, 0x42, 0x38, 0x9a, 0x5e, 0xd7, 0xd6, 0x41, +0xda, 0x45, 0x5b, 0x0c, 0x19, 0x7b, 0xe4, 0x74, 0xd0, 0x3a, 0xea, 0x6c, 0x35, 0xfe, 0xfb, 0x5b, +0x94, 0xd5, 0xab, 0x7c, 0xe5, 0xc4, 0x09, 0xcf, 0x9b, 0x23, 0xd6, 0x20, 0xb7, 0x15, 0xb9, 0xdd, +0xcc, 0xa3, 0x9c, 0xbf, 0x56, 0xb5, 0x5d, 0x17, 0x66, 0x69, 0x9d, 0x0b, 0x5a, 0x3f, 0x9d, 0xc5, +0x93, 0x68, 0x96, 0x6d, 0x0c, 0x1b, 0x6d, 0x35, 0xa6, 0xdb, 0x59, 0x53, 0x8b, 0x10, 0xc9, 0x79, +0xab, 0x4f, 0xcc, 0x5a, 0x9d, 0x18, 0xf9, 0x25, 0x73, 0xb5, 0x31, 0xd9, 0x9a, 0xba, 0xf1, 0x86, +0x74, 0x38, 0x50, 0xd3, 0x49, 0xd4, 0x2c, 0xec, 0x11, 0x0c, 0xce, 0x1e, 0xc1, 0x54, 0xe8, 0x16, +0xcc, 0x0e, 0xb7, 0x60, 0xa1, 0x53, 0x7c, 0xbd, 0x45, 0xa7, 0x87, 0x56, 0x4c, 0x24, 0x77, 0x16, +0xeb, 0xef, 0xfd, 0x61, 0xf5, 0xc4, 0xf5, 0x73, 0x64, 0xab, 0xb3, 0x7f, 0x75, 0xeb, 0x49, 0x2a, +0x66, 0x6f, 0x70, 0x9b, 0xa0, 0x8b, 0xee, 0x56, 0xeb, 0xa7, 0x13, 0x05, 0x98, 0x26, 0xbe, 0x9b, +0x70, 0x55, 0x8d, 0x6c, 0xef, 0xd4, 0xb8, 0x3c, 0x87, 0x49, 0x4a, 0xe7, 0xaa, 0x3e, 0xb9, 0x1c, +0x77, 0x96, 0x7b, 0x06, 0x6f, 0x8d, 0xf9, 0xc4, 0x8f, 0x0c, 0x6e, 0xa4, 0xdd, 0x1e, 0x31, 0xbe, +0xf5, 0xa3, 0xbd, 0x3f, 0x0a, 0x0d, 0x48, 0xc3, 0xca, 0x09, 0x47, 0x8e, 0xcf, 0x29, 0x8e, 0x8f, +0x48, 0xf8, 0x14, 0xbb, 0x05, 0x2b, 0x70, 0xc9, 0x07, 0x2e, 0x22, 0xe1, 0x52, 0x7d, 0x91, 0xdd, +0xbe, 0x6a, 0x22, 0xa9, 0xab, 0x3d, 0xcf, 0xb2, 0x5c, 0xb3, 0xf8, 0x69, 0x0b, 0xc3, 0x8a, 0x89, +0xeb, 0x0d, 0x2b, 0xe9, 0x6e, 0x63, 0x05, 0x2f, 0x23, 0xc7, 0x8b, 0xf6, 0xb0, 0xdb, 0x29, 0xf0, +0xf5, 0x39, 0xc2, 0x6d, 0x1b, 0xaf, 0x71, 0x69, 0xc4, 0x96, 0x41, 0x75, 0x3d, 0x9d, 0xda, 0x89, +0x4e, 0x8c, 0xfd, 0x52, 0xb0, 0x8a, 0x2b, 0x44, 0xbe, 0x8f, 0xd0, 0xb6, 0x4a, 0xd2, 0xd8, 0xea, +0x90, 0x57, 0x40, 0x5e, 0x9f, 0x79, 0x36, 0xcd, 0x68, 0x8d, 0x83, 0x2f, 0x0e, 0x76, 0x6a, 0xc4, +0x2a, 0x3e, 0xe7, 0xa8, 0x27, 0x23, 0xa1, 0xd5, 0x66, 0xd1, 0xf9, 0x36, 0x68, 0x8b, 0x15, 0xbc, +0xfd, 0xe4, 0x71, 0x70, 0x9d, 0x18, 0x44, 0x49, 0x0d, 0x4a, 0x9a, 0xde, 0x1a, 0xdc, 0x3b, 0x88, +0x76, 0x31, 0xb9, 0x23, 0xa3, 0x65, 0x67, 0xb8, 0xa5, 0x71, 0x9a, 0xdb, 0x33, 0x66, 0x6e, 0x03, +0xd8, 0x31, 0xbf, 0x9c, 0xe6, 0x18, 0x6f, 0x84, 0x45, 0x69, 0x52, 0xac, 0xca, 0xeb, 0x76, 0x15, +0xe7, 0x35, 0xde, 0x5d, 0x34, 0x1b, 0x1b, 0xa0, 0x6c, 0x84, 0x75, 0x31, 0x8d, 0xbd, 0x0f, 0x6f, +0x06, 0xbc, 0x19, 0xb6, 0xef, 0xf2, 0x8d, 0x75, 0xe8, 0x59, 0x87, 0x86, 0x31, 0x8d, 0x81, 0x9c, +0x6b, 0x78, 0x37, 0x28, 0xef, 0x8c, 0xde, 0x45, 0xbc, 0xfb, 0xc6, 0xc2, 0x78, 0x83, 0xf6, 0xa6, +0x81, 0xed, 0xa9, 0xbd, 0xc4, 0xc8, 0xba, 0x7f, 0x96, 0x4d, 0xf3, 0x3d, 0x77, 0xc9, 0xa7, 0x14, +0x3b, 0xe3, 0xf3, 0x0f, 0x88, 0xda, 0xce, 0x1e, 0x9d, 0xdf, 0xe5, 0xd6, 0x35, 0x78, 0xdd, 0xac, +0x34, 0xce, 0x8a, 0x67, 0xd1, 0x29, 0x16, 0x8d, 0x0f, 0x34, 0x2f, 0xe5, 0x9a, 0x23, 0x1f, 0x25, +0x25, 0xcf, 0x39, 0x66, 0xd1, 0x5a, 0xa8, 0xd6, 0x07, 0x3b, 0x98, 0xee, 0xa3, 0x9a, 0xc1, 0xb1, +0xef, 0x54, 0xd7, 0xb8, 0xf9, 0x0a, 0xd1, 0x64, 0xab, 0x82, 0x7f, 0x38, 0x27, 0xd0, 0x9f, 0xd6, +0xe6, 0x99, 0xf0, 0xd6, 0xb2, 0x5e, 0x96, 0x45, 0x7b, 0x8f, 0x5a, 0x86, 0x08, 0x17, 0x81, 0xad, +0xc7, 0x9c, 0x11, 0xe8, 0x87, 0x34, 0x7c, 0x3b, 0x9a, 0x35, 0xf2, 0x18, 0x9e, 0x27, 0x89, 0x7f, +0x34, 0xb5, 0xc0, 0x7c, 0x35, 0x9d, 0x9b, 0x2b, 0x64, 0xfc, 0x46, 0xdd, 0x67, 0xe9, 0xd4, 0xa8, +0x53, 0x79, 0xdf, 0x93, 0x79, 0x07, 0xd6, 0xb7, 0xba, 0xd3, 0xab, 0x59, 0xbd, 0xee, 0xac, 0x42, +0xbe, 0x53, 0x98, 0xf6, 0x43, 0xbb, 0x75, 0x74, 0x72, 0x8d, 0x4e, 0x0f, 0xd0, 0x1e, 0x62, 0x3a, +0xd3, 0xc2, 0x77, 0x26, 0x9b, 0x25, 0x09, 0x54, 0xe3, 0xf3, 0x7e, 0xf6, 0xfd, 0x92, 0x09, 0xb4, +0xd2, 0x45, 0xcc, 0x3c, 0xb6, 0x35, 0x75, 0xc7, 0x95, 0xd4, 0x40, 0xf5, 0xaa, 0x75, 0x39, 0xbf, +0xa2, 0x2e, 0xb3, 0xa2, 0xc5, 0xb8, 0xdf, 0xf8, 0x42, 0x0d, 0xa6, 0x80, 0x9b, 0x7d, 0x2b, 0x92, +0xc3, 0x61, 0xf6, 0xb8, 0x8d, 0x74, 0xeb, 0x1c, 0x74, 0x25, 0x50, 0x33, 0xe2, 0x52, 0xda, 0x5d, +0x79, 0x51, 0xe7, 0x3b, 0x3e, 0x66, 0x76, 0x7e, 0xfe, 0x11, 0x9d, 0x61, 0x8f, 0xf0, 0xd3, 0xeb, +0x2a, 0x0e, 0x3d, 0x53, 0xf7, 0x6c, 0xf1, 0x5c, 0xff, 0x0c, 0xfb, 0x3b, 0x2b, 0xc9, 0xd4, 0xaf, +0xdb, 0xa6, 0xbe, 0x12, 0xa4, 0x42, 0xa6, 0xc8, 0x83, 0xaa, 0x8b, 0xba, 0xda, 0xca, 0x8f, 0x0f, +0x31, 0xb2, 0xef, 0x93, 0x8c, 0xce, 0xa3, 0xb5, 0x30, 0xff, 0xe6, 0x6d, 0xfc, 0x8e, 0xfb, 0x7b, +0xf6, 0x81, 0x37, 0x97, 0x13, 0x0e, 0xe0, 0xcc, 0xe5, 0x24, 0x99, 0x93, 0x0c, 0x90, 0x9b, 0x8e, +0xff, 0xd3, 0xf1, 0x97, 0xbd, 0xce, 0xcf, 0x2f, 0xac, 0xf8, 0x8b, 0x55, 0xc3, 0xe9, 0xbd, 0x9a, +0xeb, 0xf5, 0x8f, 0x75, 0xb3, 0x64, 0x2b, 0x8d, 0x11, 0x8d, 0x9f, 0x3c, 0x7d, 0x12, 0x4b, 0xaa, +0xfb, 0xe3, 0x20, 0x6d, 0x60, 0xbf, 0xbb, 0xdd, 0xba, 0x26, 0xa5, 0x45, 0x62, 0x8f, 0x6e, 0x8d, +0xb7, 0xa4, 0x5d, 0x9e, 0x3a, 0x0d, 0xac, 0x70, 0xb7, 0xce, 0x4a, 0xf7, 0xbf, 0x73, 0xcb, 0x9e, +0xee, 0x51, 0x50, 0x03, 0xec, 0xce, 0xd5, 0xdc, 0xa3, 0xc5, 0xfd, 0x59, 0x9c, 0xe7, 0xc9, 0x0b, +0x74, 0x85, 0xb7, 0xea, 0xa1, 0x29, 0x9e, 0x9f, 0x28, 0x51, 0x79, 0x5e, 0x0f, 0x8e, 0x9f, 0x04, +0x54, 0x39, 0xe5, 0x03, 0xbb, 0xa1, 0x4c, 0xdf, 0x54, 0x99, 0xcf, 0x26, 0xbf, 0xb4, 0xcc, 0xfd, +0xb0, 0xe4, 0x69, 0xcd, 0x38, 0x9f, 0x6e, 0xc5, 0x58, 0xd2, 0xcb, 0x66, 0xab, 0x7b, 0x3a, 0xf9, +0x4e, 0x28, 0xf5, 0xc4, 0x9e, 0xb2, 0xff, 0x6d, 0x35, 0xac, 0x2e, 0x5d, 0x6a, 0x47, 0x54, 0xf6, +0x80, 0x7f, 0x13, 0x13, 0x52, 0xb7, 0xde, 0x84, 0xcb, 0xcd, 0x73, 0xf8, 0xce, 0xac, 0x52, 0x7e, +0xbe, 0xd1, 0x69, 0xda, 0x54, 0xe0, 0x66, 0x2d, 0x61, 0xd1, 0xbc, 0x98, 0xdd, 0x8b, 0x14, 0x4f, +0xc4, 0x44, 0xd2, 0x9c, 0xef, 0x96, 0xaf, 0x0e, 0xd3, 0x0e, 0x45, 0xbb, 0xf8, 0x28, 0xa8, 0xa1, +0x0f, 0x3d, 0x2a, 0x3d, 0xc3, 0x29, 0xa2, 0x78, 0x6e, 0x19, 0xad, 0xe8, 0x38, 0x40, 0x07, 0xd8, +0x7a, 0x6e, 0xb6, 0x80, 0xef, 0x43, 0xd1, 0xf0, 0xdb, 0x41, 0xd0, 0x7f, 0xeb, 0xf9, 0x49, 0x0b, +0x6e, 0xc5, 0xd8, 0x6c, 0x55, 0xa2, 0x17, 0x96, 0x75, 0x6e, 0xc0, 0x1c, 0xd6, 0x63, 0x0e, 0x05, +0x5d, 0x63, 0xeb, 0x72, 0x61, 0xa7, 0x34, 0x0d, 0xd2, 0x6d, 0xc6, 0x87, 0xfa, 0xba, 0xdf, 0xab, +0x7b, 0x87, 0xa9, 0xfe, 0xcd, 0xdd, 0xbf, 0x4b, 0x7b, 0x1d, 0xdf, 0x42, 0xfb, 0xd6, 0xfc, 0x61, +0x6c, 0xea, 0x0e, 0xf0, 0x64, 0x22, 0xe3, 0xfd, 0x71, 0x9b, 0xc7, 0xbe, 0x91, 0xa5, 0x57, 0x60, +0x92, 0x8f, 0x90, 0xcd, 0xbd, 0x3e, 0x4a, 0xbb, 0xa8, 0x68, 0xbe, 0x2f, 0x99, 0xf2, 0xf2, 0x1f, +0x6d, 0x19, 0xc2, 0x78, 0x30, 0x45, 0xce, 0x65, 0xfc, 0x3d, 0x81, 0x0e, 0x8d, 0xbe, 0xea, 0xbc, +0x66, 0xaa, 0xb4, 0x7a, 0x8b, 0x7e, 0x6a, 0x35, 0x89, 0x6c, 0x20, 0x61, 0x4c, 0xd1, 0x96, 0x93, +0x39, 0x05, 0x1e, 0x21, 0x19, 0x29, 0x2f, 0x40, 0x19, 0x8d, 0xb5, 0x20, 0xa0, 0xb1, 0xf0, 0xdb, +0xc9, 0xc6, 0xa6, 0x97, 0x27, 0x88, 0x19, 0x78, 0x66, 0xc6, 0x1e, 0x57, 0x56, 0x6a, 0xd2, 0xb0, +0x3b, 0x84, 0x24, 0xdf, 0xa5, 0xbf, 0x8c, 0xf0, 0x34, 0x4f, 0xe1, 0x79, 0xf8, 0xaf, 0xc1, 0x88, +0xb5, 0xa6, 0xee, 0x48, 0x9e, 0x0e, 0x8d, 0xdf, 0x6d, 0x58, 0x48, 0xb7, 0x49, 0x64, 0xff, 0x5d, +0x34, 0x0d, 0x8b, 0xdf, 0xb6, 0x96, 0x1f, 0xe1, 0x37, 0x6d, 0x67, 0x8f, 0x80, 0xa6, 0x1e, 0x94, +0x7c, 0xba, 0xc0, 0xa3, 0xd1, 0xa4, 0xee, 0x4b, 0xe6, 0x67, 0x33, 0xc9, 0xeb, 0x5f, 0x91, 0xeb, +0x66, 0x2b, 0xa3, 0xb2, 0x9b, 0xee, 0xf7, 0x2a, 0xd4, 0x68, 0x22, 0xdd, 0xee, 0xde, 0xe4, 0xef, +0x84, 0xcf, 0xc1, 0x87, 0x74, 0x37, 0x39, 0xbd, 0x5f, 0x65, 0x16, 0x37, 0xb4, 0x10, 0x74, 0x32, +0xc5, 0x3e, 0x61, 0xf9, 0x18, 0x59, 0x74, 0xbe, 0x4a, 0xe4, 0xf1, 0x09, 0x66, 0x8f, 0x2e, 0x19, +0x1f, 0x72, 0xd3, 0x2a, 0x04, 0x66, 0xdf, 0x4a, 0x70, 0x18, 0x30, 0xcd, 0xa7, 0x33, 0x76, 0x76, +0x16, 0x11, 0x45, 0x0f, 0x74, 0x2d, 0x1f, 0x74, 0xad, 0x25, 0x19, 0x7e, 0x54, 0x2f, 0x30, 0x52, +0xf2, 0xfc, 0x94, 0xbe, 0xd0, 0x5a, 0x00, 0xb8, 0xc5, 0xa5, 0xe8, 0x67, 0x4a, 0xbb, 0x78, 0x8b, +0xfe, 0x3e, 0x5a, 0x30, 0xad, 0x45, 0x66, 0x9e, 0xfa, 0xbb, 0x1b, 0x52, 0xad, 0x3c, 0xf5, 0xdf, +0x6f, 0x48, 0xb5, 0x44, 0xcc, 0xbc, 0xf5, 0x1f, 0xf0, 0xb6, 0x1f, 0x40, 0x1f, 0xf6, 0xa2, 0x4e, +0x0b, 0x9f, 0xb5, 0x4d, 0x62, 0x87, 0xd0, 0xcb, 0x6f, 0xcc, 0x81, 0x2e, 0x7f, 0xa3, 0x37, 0xc0, +0xdb, 0x21, 0x0c, 0x20, 0x3c, 0xb2, 0xb4, 0x97, 0xb9, 0x85, 0x41, 0xfc, 0xda, 0x85, 0x47, 0xf1, +0xab, 0x15, 0x1e, 0xe7, 0x7b, 0x2e, 0xaf, 0x08, 0x3f, 0x6a, 0x38, 0x2f, 0xec, 0xf2, 0x16, 0x0a, +0xbb, 0xbd, 0xc3, 0xc2, 0x9e, 0xa5, 0xbd, 0x7f, 0x32, 0x0b, 0xcf, 0x90, 0x5f, 0x42, 0xf8, 0x31, +0xe2, 0xcf, 0xa2, 0xe4, 0x4f, 0x10, 0x7e, 0xca, 0x4b, 0xef, 0xc3, 0x6f, 0x81, 0x30, 0x8c, 0x5f, +0x9d, 0xf0, 0x3c, 0x87, 0xf1, 0x02, 0xcf, 0x39, 0x52, 0x79, 0x5e, 0x18, 0x80, 0x2d, 0x79, 0x00, +0x25, 0x5e, 0x44, 0x18, 0x45, 0x78, 0x09, 0xe1, 0x28, 0x4a, 0xbe, 0x8a, 0xe7, 0x31, 0x40, 0x7f, +0x9d, 0x6a, 0xcb, 0xfe, 0x58, 0x78, 0x03, 0x79, 0x9f, 0x42, 0xde, 0x37, 0x55, 0xfc, 0x4e, 0xaa, +0xcf, 0xb7, 0x90, 0xef, 0x6d, 0x84, 0xb3, 0x08, 0xef, 0x21, 0xcf, 0x33, 0xc8, 0xd3, 0x2b, 0xe5, +0x89, 0xed, 0x6c, 0x19, 0xa7, 0xc7, 0x65, 0xb4, 0xfa, 0x59, 0x3a, 0x79, 0x43, 0xab, 0x6d, 0xc8, +0xd3, 0x89, 0x10, 0x47, 0x88, 0xde, 0xc8, 0x8d, 0xcc, 0x7a, 0x60, 0xda, 0x5a, 0x66, 0x72, 0x3d, +0xed, 0x6d, 0xff, 0x92, 0x34, 0xf3, 0x8d, 0x69, 0x69, 0x5e, 0xfa, 0x90, 0x46, 0x2e, 0xe6, 0x52, +0xf2, 0x0c, 0x59, 0x48, 0xde, 0x08, 0x67, 0x14, 0x99, 0x1e, 0x21, 0xfd, 0xb5, 0xc4, 0xd5, 0xce, +0xd7, 0xe8, 0x4d, 0x87, 0x95, 0x7b, 0x0a, 0x5f, 0x60, 0x15, 0x11, 0xe2, 0x28, 0x27, 0xb3, 0x3e, +0x71, 0xcc, 0x16, 0x78, 0xf2, 0x35, 0xfa, 0x7b, 0x12, 0xe8, 0xb5, 0x83, 0x34, 0x06, 0xc9, 0x07, +0x3c, 0x75, 0xd7, 0x55, 0x94, 0xc5, 0x98, 0xd8, 0xc5, 0xca, 0x6c, 0x5d, 0x42, 0x27, 0xf2, 0x75, +0x09, 0xbd, 0x7f, 0xfb, 0xba, 0xab, 0x0b, 0x12, 0xf7, 0x05, 0xf9, 0x95, 0xc5, 0x1e, 0x21, 0xaa, +0xdc, 0x49, 0xc5, 0x3d, 0xd7, 0xaa, 0x27, 0x15, 0xe3, 0x81, 0x6e, 0x22, 0x18, 0xc0, 0xd3, 0x1a, +0xe9, 0x0d, 0xa0, 0xbd, 0x91, 0x3c, 0xc8, 0xd7, 0x24, 0x61, 0x65, 0x9c, 0xcb, 0xd7, 0xa0, 0xb8, +0x4e, 0x0f, 0x7b, 0x03, 0x3c, 0xb0, 0xb0, 0x43, 0x38, 0xcf, 0xca, 0xd5, 0xb7, 0x0b, 0x53, 0x7f, +0xcf, 0x84, 0xd6, 0x12, 0x85, 0x4e, 0x60, 0xaf, 0xee, 0x49, 0x50, 0xee, 0xbb, 0x13, 0xe2, 0xbc, +0x7c, 0x2b, 0x9d, 0x7c, 0x11, 0xa2, 0xe1, 0x79, 0x99, 0x37, 0x61, 0x5f, 0x27, 0x1f, 0x53, 0x27, +0x79, 0xf5, 0x84, 0x6d, 0x7c, 0x87, 0xc1, 0x36, 0x68, 0x20, 0x57, 0x5c, 0x5d, 0x8a, 0x1f, 0x3c, +0x45, 0x6d, 0x4a, 0xe7, 0x18, 0x86, 0xc0, 0x8b, 0x56, 0x4e, 0x0f, 0x3f, 0xa0, 0x44, 0x15, 0x8b, +0x1f, 0xad, 0x7a, 0x09, 0x90, 0x3b, 0xc3, 0x06, 0xc9, 0x61, 0xf3, 0x90, 0x4c, 0x9b, 0x7e, 0xd7, +0xb6, 0xf2, 0x06, 0xf9, 0x7d, 0x96, 0xd2, 0x53, 0x75, 0x7e, 0xb1, 0x5f, 0xa3, 0x39, 0x53, 0x6b, +0x9c, 0xea, 0x69, 0x93, 0x80, 0x37, 0xd7, 0x5b, 0x08, 0x23, 0xb2, 0x90, 0x69, 0xe6, 0xd2, 0x0a, +0xbe, 0x16, 0x6f, 0xb4, 0xdb, 0x31, 0x0b, 0x41, 0x8f, 0x30, 0x63, 0x69, 0x6f, 0xf0, 0x33, 0x66, +0x28, 0x00, 0x8e, 0xcc, 0x58, 0x79, 0x9e, 0x19, 0xa2, 0x7a, 0x92, 0x81, 0x86, 0xa9, 0x3b, 0xfa, +0x1f, 0xa2, 0xd5, 0x8f, 0x73, 0x83, 0x53, 0xeb, 0xfa, 0x18, 0xab, 0xe9, 0xbd, 0x13, 0xa2, 0x21, +0xd7, 0x1c, 0x1a, 0x3c, 0x28, 0x44, 0xf4, 0x01, 0x21, 0x7c, 0x59, 0xb1, 0xe1, 0xe9, 0x3b, 0x79, +0x0a, 0xf8, 0xb9, 0x1c, 0xc0, 0x95, 0x34, 0x8d, 0x7d, 0x51, 0x16, 0xe8, 0x8b, 0x18, 0xcd, 0x37, +0xd3, 0x5f, 0x27, 0xd9, 0xd9, 0x1f, 0xb9, 0xa0, 0xe4, 0xf3, 0xbf, 0x5f, 0x51, 0x02, 0x39, 0xc0, +0xe7, 0x34, 0x94, 0xb0, 0x93, 0xb5, 0xca, 0x6f, 0xfc, 0x9e, 0x74, 0x78, 0x37, 0xc4, 0x1c, 0x9a, +0x47, 0x12, 0xdb, 0xb4, 0xaf, 0x0e, 0x44, 0x96, 0x38, 0x34, 0xbf, 0xda, 0xfe, 0xea, 0x40, 0x38, +0xf7, 0x50, 0x5f, 0x6b, 0x0e, 0x9d, 0xfe, 0x7f, 0xb5, 0xbf, 0x14, 0x23, 0x6b, 0xf7, 0x6f, 0xa1, +0xd5, 0x56, 0xee, 0xda, 0x21, 0xd6, 0xda, 0x3d, 0x96, 0x7f, 0x6f, 0x1c, 0xe4, 0xe3, 0xfa, 0x6a, +0xe5, 0xc7, 0x06, 0x76, 0x62, 0x87, 0xa4, 0x11, 0x3d, 0x0e, 0xe1, 0xdc, 0x63, 0x11, 0xab, 0xad, +0xca, 0xe1, 0xb5, 0xfb, 0xed, 0xff, 0xde, 0xb8, 0xe3, 0x00, 0xff, 0x4e, 0x7f, 0xc9, 0xe6, 0xc4, +0xf6, 0xe3, 0xbf, 0x7d, 0x50, 0x7b, 0xf4, 0x61, 0xd4, 0xb4, 0xcb, 0xe6, 0x35, 0xff, 0x5b, 0x63, +0x5f, 0x78, 0x82, 0x6c, 0xf2, 0x13, 0x7d, 0x0e, 0x76, 0xb2, 0xcf, 0xa9, 0x1d, 0xec, 0x7f, 0x50, +0x7b, 0xec, 0xe1, 0x48, 0x89, 0x53, 0xfb, 0x9b, 0x81, 0x63, 0x0f, 0x87, 0x73, 0xac, 0x15, 0x4c, +0x87, 0xba, 0xf5, 0xaf, 0xf5, 0x8b, 0xd5, 0x80, 0x5c, 0xb9, 0x6b, 0xd0, 0x69, 0xf0, 0x0d, 0x9c, +0x18, 0x38, 0x39, 0x30, 0x7b, 0xc4, 0x29, 0x97, 0xc9, 0x6a, 0xdd, 0x97, 0x9d, 0xc2, 0xb9, 0xc7, +0x23, 0xf3, 0x6d, 0xbe, 0x27, 0x8e, 0x2d, 0x1c, 0x71, 0x4e, 0x96, 0x4d, 0x36, 0xee, 0xb8, 0x67, +0x90, 0xd7, 0x7a, 0xc9, 0x37, 0x70, 0x0a, 0xff, 0xa9, 0xc4, 0x36, 0xed, 0xd1, 0x81, 0xc8, 0x3c, +0xb1, 0xd2, 0xd7, 0x67, 0xf7, 0xfe, 0xe1, 0x65, 0x5b, 0xd5, 0xef, 0x5f, 0x9e, 0x3d, 0xb2, 0x4f, +0x7e, 0x2a, 0x0d, 0xa3, 0xee, 0x1d, 0x53, 0x85, 0x42, 0x9b, 0x92, 0x12, 0x7e, 0x37, 0x19, 0xe6, +0x59, 0xbe, 0xee, 0xe7, 0x91, 0x74, 0xb9, 0x47, 0x1b, 0x07, 0x6d, 0xd9, 0xdc, 0x02, 0x55, 0xee, +0xfd, 0xba, 0x20, 0x05, 0xed, 0xfe, 0x98, 0xee, 0xc0, 0x60, 0x6b, 0xcd, 0x56, 0x56, 0x03, 0xba, +0xd8, 0xb4, 0xef, 0xee, 0xe8, 0xdf, 0xee, 0x10, 0x68, 0x7d, 0xe4, 0x91, 0x3e, 0x47, 0xad, 0xe3, +0xb7, 0xf7, 0x0c, 0xd2, 0xf7, 0xb6, 0xab, 0x36, 0xe3, 0x77, 0xfb, 0xce, 0xed, 0x70, 0x08, 0xa1, +0xed, 0x62, 0xd5, 0xf1, 0xdf, 0x3a, 0x0c, 0x27, 0x07, 0x7d, 0x7d, 0x6f, 0xf6, 0x89, 0x95, 0xc7, +0x5f, 0xae, 0xbc, 0x3c, 0x38, 0xf9, 0xfb, 0xdf, 0x2a, 0xd0, 0x15, 0x1a, 0x2a, 0xbb, 0x60, 0x95, +0x7b, 0xc7, 0x6c, 0x1e, 0xb1, 0x36, 0xb4, 0x03, 0x33, 0xf8, 0x35, 0xea, 0xcf, 0xdc, 0x9b, 0xcd, +0x2f, 0x87, 0x27, 0xd4, 0x3e, 0x56, 0xfb, 0x37, 0xf7, 0x66, 0x9a, 0x17, 0x94, 0x9e, 0x0d, 0xeb, +0xc0, 0x07, 0xbc, 0x77, 0x79, 0x59, 0xca, 0xe1, 0x99, 0x2a, 0xc3, 0x4f, 0x9b, 0x19, 0x44, 0x21, +0xd4, 0x67, 0xf3, 0x04, 0x66, 0x87, 0xaf, 0xee, 0x1c, 0x04, 0xdf, 0x6a, 0x39, 0xb7, 0x58, 0xb8, +0x65, 0xde, 0x43, 0xfb, 0x48, 0x1b, 0xfb, 0xc0, 0x2b, 0x16, 0x0b, 0x41, 0xa5, 0xdd, 0x69, 0xd6, +0x9d, 0xdb, 0xc3, 0x86, 0x80, 0x26, 0xfc, 0x81, 0x72, 0x47, 0x8b, 0x63, 0x81, 0x72, 0xcb, 0x10, +0x9d, 0xf8, 0xa2, 0x72, 0x7c, 0x5d, 0xd4, 0x43, 0xa5, 0x6c, 0x7e, 0x94, 0x33, 0x59, 0xe6, 0x99, +0x8f, 0x86, 0x2f, 0x63, 0x24, 0xde, 0x4c, 0x70, 0xc2, 0xd7, 0x94, 0xdb, 0x85, 0x82, 0xf7, 0x93, +0x85, 0x5d, 0x02, 0x9c, 0xc6, 0x2e, 0x32, 0x63, 0xa9, 0x9b, 0xe9, 0x8f, 0x5e, 0x64, 0x86, 0xf1, +0x4a, 0x5a, 0x19, 0x50, 0x63, 0xc6, 0xf1, 0xbe, 0x34, 0xef, 0x92, 0x8f, 0xc0, 0x60, 0xa2, 0x7d, +0x14, 0xac, 0x35, 0xcf, 0xce, 0xbc, 0x5e, 0xbf, 0x77, 0xe0, 0xe5, 0x12, 0x8d, 0xdf, 0xb3, 0xc4, +0xcd, 0x8c, 0xf4, 0x26, 0x95, 0xd8, 0x85, 0xb3, 0x3b, 0xce, 0x0e, 0xaa, 0x79, 0xae, 0x24, 0x5e, +0xa6, 0xb5, 0x30, 0x59, 0xb6, 0x69, 0x8e, 0x8e, 0xf9, 0xbd, 0xaf, 0x20, 0x04, 0xbc, 0x61, 0xe3, +0x9b, 0xfd, 0x6d, 0x7a, 0xd8, 0xcf, 0x86, 0x0d, 0x9a, 0xc6, 0x84, 0xe2, 0xdd, 0x8a, 0x0b, 0x04, +0xbd, 0x43, 0xe7, 0xeb, 0xf3, 0x51, 0x0b, 0x0c, 0x78, 0x4b, 0xf8, 0x34, 0xe9, 0x9b, 0x6b, 0xc6, +0xa1, 0xc1, 0x69, 0x3a, 0x34, 0xca, 0x09, 0xa8, 0xe0, 0xfd, 0xdc, 0x17, 0x06, 0x9c, 0x33, 0xbf, +0x53, 0x5a, 0xe6, 0x4d, 0x37, 0x88, 0xeb, 0xe8, 0x0e, 0x93, 0x2f, 0xcb, 0x4f, 0x7b, 0x06, 0xfe, +0x5a, 0x7e, 0x8c, 0x3f, 0xda, 0x83, 0x68, 0x75, 0x62, 0x0c, 0xc2, 0xba, 0x16, 0x03, 0x03, 0x9d, +0x3a, 0x7b, 0xae, 0x94, 0x17, 0x17, 0xa0, 0xb3, 0x3d, 0x1c, 0x31, 0x04, 0x77, 0x42, 0xe6, 0xe8, +0xa4, 0xd2, 0xe0, 0xce, 0x13, 0xdb, 0x25, 0xa3, 0x43, 0x77, 0x72, 0xfb, 0xff, 0xdc, 0x1e, 0x15, +0x1e, 0x49, 0x28, 0x2b, 0x95, 0x62, 0xcc, 0xc0, 0x02, 0x03, 0x5d, 0x9c, 0x13, 0x57, 0xbf, 0x2c, +0xe9, 0x60, 0x17, 0xbd, 0xec, 0x13, 0xc2, 0xaf, 0xa6, 0xf4, 0x67, 0x1d, 0xe7, 0x63, 0xf2, 0x6e, +0x04, 0xb7, 0x40, 0x96, 0x30, 0xed, 0x87, 0xf8, 0x89, 0xd2, 0x14, 0xc6, 0x58, 0xdb, 0x73, 0x08, +0x50, 0x33, 0x5b, 0x7f, 0x84, 0xd0, 0xc4, 0xd8, 0x86, 0xf7, 0x10, 0xf6, 0x22, 0x3c, 0x84, 0xd0, +0x8e, 0x10, 0x82, 0x4e, 0xf7, 0x14, 0x02, 0xa8, 0x7a, 0xdf, 0x38, 0x63, 0xd2, 0x33, 0x08, 0x5e, +0x84, 0x1c, 0xc6, 0xd6, 0x95, 0x21, 0xcc, 0x63, 0x6c, 0xed, 0x79, 0x04, 0x94, 0x59, 0x3b, 0xc8, +0xd8, 0xf7, 0x4e, 0x21, 0x20, 0x6d, 0x0d, 0xca, 0x7e, 0x17, 0xf9, 0xef, 0xf9, 0x31, 0xc2, 0x4e, +0x84, 0x7e, 0x84, 0x18, 0xc2, 0x7a, 0x04, 0xc0, 0xbc, 0xc7, 0x87, 0xb0, 0x04, 0xc1, 0x8e, 0x90, +0xcb, 0x58, 0x4b, 0x12, 0xe1, 0x02, 0xc2, 0x5b, 0x08, 0xc7, 0x10, 0x0e, 0x22, 0xfc, 0x04, 0x61, +0x0f, 0xc2, 0x00, 0x02, 0xf0, 0x6d, 0x69, 0x45, 0x00, 0x8e, 0x2d, 0x7e, 0x84, 0x72, 0x04, 0x17, +0x42, 0x3e, 0x82, 0x19, 0x01, 0xcd, 0xb9, 0xfb, 0x12, 0xc2, 0x59, 0x84, 0x13, 0x08, 0xaf, 0x22, +0xbc, 0x88, 0xb0, 0x0f, 0x01, 0x38, 0xdf, 0xfd, 0x38, 0xc2, 0x83, 0x08, 0xc0, 0xeb, 0xee, 0xd5, +0xa0, 0xd3, 0x28, 0x02, 0xf0, 0x5a, 0x0d, 0xb8, 0xab, 0xad, 0x8c, 0x35, 0xa3, 0x9e, 0xe6, 0xf9, +0x8c, 0x35, 0xbd, 0xce, 0x58, 0xe3, 0x2e, 0x04, 0xe4, 0x0d, 0x1d, 0x46, 0x18, 0x41, 0x40, 0xfb, +0x43, 0x28, 0x1f, 0x02, 0x0d, 0x6a, 0x27, 0x18, 0xf3, 0xa1, 0xce, 0x6f, 0x3f, 0x8a, 0xd0, 0x0d, +0x33, 0x0b, 0x6d, 0x2a, 0x5f, 0xce, 0xd8, 0x1d, 0x97, 0x11, 0x90, 0xef, 0x8e, 0x3a, 0xc6, 0xca, +0xae, 0x31, 0x56, 0x08, 0xfa, 0x2d, 0x42, 0x1b, 0x17, 0x95, 0x32, 0x66, 0x03, 0x4d, 0x45, 0x3c, +0xbf, 0x09, 0x65, 0x27, 0x0f, 0x8a, 0xf0, 0xdc, 0x3c, 0x04, 0x1d, 0x63, 0x16, 0xf4, 0xc3, 0x1c, +0xc0, 0x31, 0x02, 0x47, 0x23, 0xe8, 0x62, 0x04, 0x5d, 0x67, 0x14, 0x43, 0xd8, 0x03, 0x96, 0x46, +0x8f, 0xee, 0x49, 0x92, 0x56, 0x84, 0x00, 0x9c, 0x04, 0xe0, 0x21, 0x80, 0xc6, 0x02, 0xd2, 0x19, +0xda, 0xc0, 0x6a, 0x10, 0x0a, 0x11, 0x4e, 0x33, 0xfe, 0xaf, 0x63, 0x18, 0xe1, 0x69, 0x04, 0xe0, +0xdd, 0xd1, 0x81, 0x10, 0x40, 0xbf, 0x5a, 0xd0, 0x67, 0xa0, 0xdd, 0x7d, 0xe8, 0x2b, 0x09, 0xb8, +0x4b, 0xf8, 0xb6, 0xae, 0x13, 0xc1, 0x83, 0x60, 0x43, 0x7f, 0x9d, 0x44, 0x00, 0xec, 0xb5, 0xa0, +0xc5, 0x5a, 0xf4, 0xd3, 0xda, 0x38, 0x02, 0xc4, 0xef, 0xda, 0x20, 0xfa, 0xf0, 0x28, 0x02, 0xda, +0x7f, 0x2f, 0x68, 0x77, 0x0f, 0xd1, 0x13, 0xb8, 0xad, 0x46, 0xda, 0x6a, 0xb4, 0x71, 0x35, 0xfa, +0x6d, 0xb5, 0x88, 0x00, 0x5c, 0x9a, 0x5f, 0x41, 0x38, 0x80, 0x80, 0x7c, 0xcd, 0x0e, 0xd0, 0x0f, +0x65, 0x1a, 0xd1, 0xd7, 0x21, 0xd0, 0x20, 0x84, 0x6f, 0x21, 0xf4, 0xcd, 0x77, 0xd0, 0x8e, 0xef, +0x00, 0x66, 0xc3, 0x18, 0x63, 0xf5, 0x68, 0xdf, 0x2a, 0xf4, 0x1f, 0xc8, 0xc4, 0x02, 0xa8, 0x2f, +0x00, 0x9a, 0x04, 0x00, 0x67, 0x05, 0xda, 0xb3, 0x02, 0x70, 0xab, 0xd1, 0x06, 0xdf, 0x55, 0x84, +0x67, 0x11, 0x00, 0xaf, 0x0a, 0x70, 0xaa, 0x80, 0x7f, 0x25, 0xf0, 0xf2, 0xe0, 0xfd, 0x2e, 0xf0, +0xc4, 0x9d, 0x68, 0xcb, 0xb7, 0xb7, 0x82, 0xee, 0xa0, 0x5b, 0x39, 0x00, 0x95, 0x03, 0x26, 0xd8, +0x81, 0xdd, 0x81, 0xbe, 0xbf, 0x03, 0xe9, 0x77, 0xa0, 0x4f, 0xef, 0xb8, 0x17, 0x01, 0xf3, 0xe7, +0x1d, 0x4e, 0x04, 0xc0, 0x2f, 0x43, 0x1f, 0x94, 0xbd, 0x89, 0x80, 0x7e, 0x29, 0x03, 0xfd, 0xfe, +0x06, 0x70, 0x96, 0xfd, 0x14, 0x96, 0x37, 0x68, 0x52, 0x8a, 0x7c, 0xa5, 0xcb, 0x10, 0x4a, 0x10, +0x40, 0xd3, 0x12, 0xd0, 0xa4, 0x04, 0xbc, 0xe1, 0x06, 0x2f, 0xba, 0xd7, 0x20, 0x80, 0x96, 0xc5, +0xc8, 0x57, 0x0c, 0xfe, 0x2b, 0x46, 0xbe, 0x62, 0xe0, 0x55, 0x04, 0xda, 0x15, 0xa1, 0x4f, 0x8a, +0x00, 0xc7, 0x85, 0x36, 0x2e, 0x06, 0xbe, 0x8b, 0x91, 0xa7, 0x10, 0xfd, 0x51, 0x08, 0x5e, 0x59, +0x04, 0x98, 0x4e, 0x8c, 0x87, 0xdb, 0x50, 0xf6, 0x36, 0xf0, 0x01, 0xad, 0x17, 0xdc, 0x8a, 0x7e, +0xbd, 0x15, 0x70, 0x6d, 0xa0, 0xd1, 0x42, 0x8c, 0x8d, 0x85, 0xe8, 0x8b, 0x85, 0xe0, 0xff, 0x05, +0x2f, 0x21, 0x40, 0xd7, 0x5c, 0xa0, 0x01, 0x8f, 0x60, 0x3c, 0x7e, 0x13, 0x38, 0x7e, 0x13, 0xbc, +0xf5, 0x4d, 0x8c, 0xcb, 0xfc, 0x73, 0x08, 0xa8, 0xe7, 0x16, 0xf0, 0xca, 0x2d, 0x48, 0x9f, 0x07, +0x1a, 0xcc, 0x7b, 0x1e, 0x01, 0xb4, 0x9b, 0x87, 0x3e, 0x99, 0x07, 0x7e, 0xba, 0x19, 0xf5, 0xdc, +0x0c, 0x9a, 0xdf, 0xbc, 0x0d, 0x01, 0xed, 0xbd, 0x19, 0xfc, 0x69, 0x45, 0x5b, 0xad, 0xe0, 0x69, +0x2b, 0xd2, 0xbf, 0x81, 0x71, 0xf1, 0x8d, 0xb7, 0x11, 0xd0, 0x1f, 0xdf, 0x40, 0x1d, 0x79, 0xa0, +0xf1, 0x5c, 0xd0, 0x0e, 0x7a, 0x08, 0x9b, 0x03, 0x3c, 0xe6, 0x60, 0xbc, 0xcd, 0x01, 0x0f, 0xcc, +0x01, 0x0f, 0xcd, 0x01, 0xef, 0xcf, 0x01, 0xed, 0xe6, 0x00, 0xef, 0x39, 0xe8, 0x8f, 0x5c, 0x8c, +0xe7, 0x5c, 0x10, 0x37, 0x17, 0x34, 0x9c, 0x0d, 0x1a, 0xce, 0x06, 0xdc, 0xd9, 0xaf, 0x21, 0x00, +0xee, 0xec, 0x06, 0x58, 0x4f, 0xc0, 0xcf, 0x0c, 0xfe, 0x30, 0x63, 0x5c, 0x9a, 0x31, 0x0e, 0x66, +0xa1, 0x8f, 0x67, 0x81, 0x1f, 0x66, 0x01, 0x97, 0x59, 0x88, 0xe7, 0xe0, 0x7b, 0x0e, 0xe8, 0x91, +0x83, 0xbc, 0x39, 0xe8, 0xf7, 0x1c, 0xf0, 0xcd, 0x4d, 0x57, 0x10, 0x30, 0x36, 0x6f, 0x82, 0x1c, +0x98, 0x09, 0xda, 0xcd, 0x34, 0x82, 0xf7, 0x81, 0x9f, 0x11, 0x75, 0x19, 0x01, 0xdb, 0x08, 0x1c, +0xb2, 0x91, 0x27, 0x1b, 0x69, 0xd9, 0xe8, 0xdf, 0x6c, 0x33, 0x79, 0xc0, 0x11, 0x40, 0x3b, 0x03, +0x78, 0xd7, 0x80, 0x3e, 0x9a, 0x81, 0x7c, 0x33, 0x0e, 0x21, 0x00, 0xe7, 0x19, 0x68, 0xcf, 0x0c, +0xb4, 0x4b, 0x0f, 0xbe, 0xd1, 0x03, 0x86, 0x1e, 0xf5, 0xeb, 0x91, 0x97, 0x76, 0xab, 0xe9, 0xd1, +0x16, 0x3d, 0xf0, 0xd0, 0x63, 0xcc, 0x65, 0x41, 0x26, 0x64, 0xa1, 0x9f, 0xb2, 0x20, 0xeb, 0xb2, +0x30, 0xe6, 0x75, 0xc0, 0x4b, 0x07, 0x5e, 0xd0, 0x81, 0xbf, 0xb4, 0x28, 0xab, 0x45, 0x5c, 0x0b, +0x3c, 0x69, 0x73, 0x85, 0x00, 0x9a, 0x09, 0xc0, 0x51, 0x00, 0x5f, 0x33, 0xd0, 0x97, 0x0b, 0x18, +0xf4, 0x3d, 0x43, 0x7f, 0x31, 0xbd, 0x32, 0xe6, 0xb4, 0xe8, 0x4f, 0xed, 0x79, 0xf5, 0xef, 0x10, +0xfe, 0xf5, 0x7f, 0xf6, 0xd5, 0xd5, 0xa1, 0x72, 0x71, 0x43, 0x6b, 0xac, 0xa7, 0xab, 0xb8, 0xfd, +0xbe, 0xee, 0xd6, 0xce, 0xb6, 0x98, 0x78, 0x7b, 0xf1, 0x32, 0xd1, 0x79, 0xfb, 0xb2, 0xe2, 0xdb, +0x4b, 0x8b, 0x4b, 0x4b, 0x6e, 0xbf, 0x7d, 0xd1, 0x4d, 0x46, 0xc6, 0x33, 0x14, 0xa9, 0x19, 0x58, +0x00, 0xf2, 0x9c, 0x41, 0x56, 0x6d, 0xdc, 0x27, 0x08, 0x06, 0x19, 0xef, 0xa0, 0x1f, 0xed, 0x23, +0x12, 0x7e, 0x94, 0x02, 0x6b, 0xaa, 0xf2, 0xd5, 0x6c, 0xec, 0x6c, 0x6b, 0x7c, 0x60, 0x73, 0xbc, +0xad, 0x0b, 0xf1, 0x9b, 0xa6, 0x03, 0x60, 0x18, 0x28, 0x0b, 0x29, 0x1f, 0x9e, 0x36, 0xf5, 0x79, +0xab, 0x22, 0xf7, 0x95, 0x7f, 0xaf, 0xfc, 0xd3, 0xff, 0xfa, 0xdd, 0xf1, 0x93, 0xa7, 0xdf, 0x3d, +0x73, 0xf6, 0xdc, 0x9f, 0xfe, 0xe3, 0xfd, 0xff, 0xfc, 0xe0, 0xfc, 0x9f, 0x3f, 0xfa, 0xf0, 0xc2, +0xc5, 0x8f, 0xff, 0x72, 0xf9, 0xca, 0xd5, 0x4f, 0x26, 0x3e, 0xfb, 0x7c, 0xf2, 0xc8, 0xc8, 0x73, +0xff, 0xcf, 0xcf, 0xfe, 0xfe, 0xc5, 0x77, 0x5e, 0xf8, 0xf9, 0x91, 0x83, 0xfb, 0x8e, 0xbc, 0x7a, +0xea, 0xc8, 0xaf, 0x8e, 0x1c, 0xf9, 0x7f, 0x7f, 0x73, 0xe9, 0x08, 0xfe, 0x0d, 0x8f, 0x1e, 0x79, +0xef, 0xda, 0x91, 0xff, 0xfb, 0x79, 0x7a, 0xdf, 0xff, 0x8f, 0x47, 0x9e, 0x1d, 0xfb, 0xed, 0x1f, +0x8e, 0x1c, 0xf9, 0x45, 0x91, 0xcd, 0x26, 0x1d, 0xfc, 0xf4, 0x88, 0x7c, 0xc4, 0xfd, 0x13, 0xfa, +0x70, 0xa4, 0xf8, 0xd0, 0x91, 0x23, 0x47, 0x5f, 0x7b, 0xf9, 0x9f, 0x8f, 0xfd, 0xcb, 0x1b, 0xff, +0xfb, 0xf5, 0xdf, 0x9f, 0x38, 0xf2, 0xe6, 0x5b, 0xff, 0xfe, 0x6f, 0x47, 0xd6, 0x3e, 0xf4, 0x8b, +0x23, 0x7f, 0x3f, 0x72, 0xc4, 0x56, 0x7c, 0x84, 0xb1, 0xf9, 0x90, 0xe1, 0x85, 0xe0, 0x9d, 0x22, +0xf0, 0x9a, 0x0b, 0xfc, 0x3c, 0x1f, 0x6d, 0x5c, 0x08, 0xde, 0x59, 0x80, 0x7e, 0xba, 0x0d, 0xb4, +0x9e, 0x0f, 0x1e, 0x9d, 0x0f, 0xde, 0x5c, 0x80, 0x3e, 0x9f, 0x0f, 0x1e, 0x98, 0x4f, 0xb2, 0x14, +0x63, 0x6e, 0x01, 0xc6, 0xce, 0x02, 0xcc, 0x1b, 0x0b, 0xc0, 0x3b, 0xdf, 0xc2, 0xf8, 0xa8, 0x00, +0x8c, 0xbb, 0xd0, 0x17, 0x77, 0x41, 0xe6, 0x7d, 0x0b, 0xe3, 0x77, 0x29, 0xc6, 0xae, 0x0f, 0xfd, +0xed, 0x05, 0xdc, 0x25, 0xe8, 0xfb, 0x25, 0xe8, 0xa3, 0x25, 0x1f, 0x40, 0xbe, 0x20, 0x2c, 0x45, +0x5f, 0xfe, 0x0d, 0xf8, 0x67, 0x29, 0x64, 0xc5, 0x52, 0x8c, 0x83, 0xa5, 0xe1, 0x04, 0xd3, 0xfe, +0x19, 0x72, 0xd2, 0x87, 0x27, 0xf1, 0xdd, 0xa3, 0x09, 0xfe, 0x37, 0x27, 0xcd, 0x99, 0x3d, 0x68, +0x51, 0x1e, 0xd9, 0x9f, 0x2b, 0x4f, 0xe3, 0xac, 0x69, 0xfd, 0x2b, 0x7c, 0x73, 0x1d, 0x31, 0x4e, +0x82, 0xde, 0x95, 0xdf, 0xf9, 0xff, 0xf0, 0x31, 0x58, 0xa8, 0xe4, 0xe2, 0x2c, 0x30, 0x5a, 0xf1, +0xf0, 0x65, 0x54, 0x5b, 0x7c, 0xe1, 0x2a, 0x18, 0xb6, 0x78, 0xff, 0x3c, 0x7c, 0x2f, 0xfe, 0xf9, +0xf9, 0x43, 0xfc, 0x17, 0xe9, 0x25, 0xc3, 0xb7, 0x20, 0xcf, 0x82, 0x3b, 0x28, 0xff, 0x17, 0xff, +0x69, 0xe5, 0xfd, 0x4f, 0x98, 0xd9, 0x2c, 0xdd, 0x1f, 0x36, 0x96, 0xf8, 0x4a, 0x86, 0x87, 0x1f, +0xfb, 0x09, 0xf3, 0x34, 0x9d, 0x68, 0xf2, 0x34, 0xed, 0x33, 0xee, 0xdb, 0xd7, 0x9b, 0xdd, 0xec, +0xfb, 0x43, 0x93, 0x3f, 0x34, 0xfc, 0x6c, 0x61, 0xc2, 0x62, 0x1b, 0xfe, 0xd9, 0x09, 0xb6, 0xbe, +0x41, 0x58, 0xd5, 0x31, 0x7c, 0x62, 0x78, 0x78, 0xc6, 0x3b, 0xcd, 0x81, 0x50, 0xc3, 0xa0, 0x3b, +0x79, 0xe2, 0x50, 0xd6, 0xdd, 0xdf, 0xb8, 0x3e, 0xd1, 0x5c, 0xf8, 0xc2, 0xcc, 0xcf, 0x4f, 0x5c, +0x7c, 0x72, 0x4d, 0xf5, 0x9f, 0x2e, 0x7c, 0x6f, 0xfd, 0x21, 0xe3, 0x82, 0x35, 0xf2, 0x1f, 0x9b, +0x9b, 0x3f, 0x4f, 0x7e, 0xff, 0xfb, 0x9f, 0x7e, 0xff, 0x5f, 0xb7, 0xca, 0x49, 0x39, 0xf9, 0x83, +0xa4, 0x4c, 0xff, 0x92, 0xd3, 0xab, 0xb7, 0xdc, 0x64, 0x66, 0x4d, 0xcd, 0x1e, 0xa6, 0x6b, 0x52, +0xb8, 0xa6, 0xb9, 0xb2, 0x53, 0x97, 0xd5, 0x34, 0x38, 0x64, 0xbe, 0x74, 0x66, 0xb0, 0xf9, 0xbb, +0xcd, 0x59, 0x73, 0x9b, 0x86, 0x9f, 0x98, 0x7d, 0xbf, 0x66, 0xb8, 0xf9, 0x3b, 0x4d, 0xff, 0xd1, +0xdc, 0x74, 0xe1, 0x78, 0xf3, 0x93, 0x35, 0x17, 0x9a, 0xbf, 0xdb, 0x34, 0x77, 0x6e, 0x93, 0xfc, +0xbf, 0x9b, 0xcf, 0xbd, 0x9f, 0x6c, 0xf6, 0x50, 0x7e, 0x05, 0xf2, 0x1f, 0xe9, 0xdf, 0x69, 0xe5, +0x5d, 0x9e, 0x6c, 0x4e, 0x76, 0x5f, 0x90, 0xaf, 0xbe, 0xf0, 0xf9, 0xdb, 0x17, 0xfe, 0xf1, 0xef, +0xe4, 0x4f, 0xb7, 0xdc, 0x2b, 0xcb, 0x2f, 0x5d, 0xf8, 0xe5, 0x4b, 0xc3, 0xf2, 0xa7, 0x7f, 0x5c, +0x77, 0xf4, 0x53, 0x79, 0x62, 0x54, 0x7e, 0xf1, 0xe7, 0xb2, 0xfc, 0xa9, 0x7c, 0xfe, 0x9d, 0xe6, +0x96, 0xbb, 0xe4, 0xc3, 0xc3, 0xc3, 0x2f, 0xbe, 0x23, 0x0f, 0x37, 0x7e, 0xf2, 0xf9, 0xf0, 0xf0, +0x89, 0xfd, 0x17, 0x7f, 0x70, 0x25, 0x2b, 0x50, 0xfd, 0xf9, 0xf5, 0x09, 0xcd, 0x2b, 0xfb, 0xdf, +0xf9, 0xec, 0xfa, 0x4d, 0x85, 0xe6, 0x8b, 0x97, 0x5f, 0x1a, 0x35, 0x3f, 0xf7, 0xc7, 0xff, 0xf8, +0xf4, 0xfc, 0x73, 0x6c, 0xce, 0xc4, 0x7e, 0x3f, 0x1b, 0xfc, 0xa1, 0xe1, 0x51, 0x3f, 0xc6, 0xed, +0xb8, 0x31, 0xa1, 0xb6, 0x44, 0xad, 0x57, 0xf9, 0x4d, 0x9e, 0x7d, 0xf6, 0x97, 0xc0, 0xe1, 0x07, +0x1c, 0x13, 0xfe, 0x7b, 0xa6, 0x26, 0x67, 0x56, 0x52, 0x1e, 0xaf, 0xce, 0xfa, 0x46, 0x52, 0x1e, +0xf3, 0x99, 0x66, 0x24, 0xe5, 0x57, 0x7c, 0xa6, 0x15, 0xf8, 0xad, 0xb6, 0x80, 0x32, 0xaf, 0xd4, +0xe8, 0xf0, 0x3e, 0x56, 0xa3, 0x43, 0xfa, 0xb8, 0x6f, 0x2e, 0xf2, 0x9c, 0x79, 0x95, 0xf2, 0x67, +0xc2, 0x4c, 0xfd, 0xee, 0xa7, 0xdf, 0xef, 0xfc, 0x01, 0xa5, 0x2e, 0xb1, 0x7d, 0x8f, 0xbd, 0x24, +0x8f, 0x55, 0x1e, 0x6f, 0x7a, 0x48, 0xde, 0x67, 0x78, 0x6e, 0xdf, 0x43, 0x72, 0x73, 0xf5, 0x3f, +0x35, 0x3d, 0x94, 0xa4, 0xfe, 0x5a, 0x9e, 0x1c, 0xfe, 0x49, 0x13, 0x7b, 0xe8, 0x7a, 0xf3, 0xca, +0xe1, 0xe1, 0x64, 0xd2, 0xa8, 0x5b, 0xd7, 0xbc, 0x3c, 0x69, 0xde, 0xe7, 0x4e, 0xbe, 0x94, 0xd4, +0x69, 0xef, 0xbe, 0xbe, 0x3c, 0x29, 0xea, 0xf7, 0x4f, 0x3c, 0x24, 0x9b, 0x6f, 0x6a, 0x3e, 0x97, +0x94, 0x9f, 0x9b, 0x37, 0x3c, 0x3b, 0x29, 0x7f, 0xd4, 0xdc, 0xfc, 0xc3, 0xa4, 0x7c, 0x4d, 0x9e, +0xbc, 0x0b, 0xf0, 0x99, 0x20, 0xdf, 0xd0, 0x5f, 0x53, 0x82, 0xa0, 0x38, 0xd6, 0xb6, 0xb9, 0x67, +0x4b, 0x6c, 0x43, 0xdb, 0xd7, 0x15, 0x3b, 0x1b, 0xbb, 0xa3, 0x5b, 0xe2, 0xc5, 0xad, 0x6d, 0x5b, +0x37, 0xa2, 0xcc, 0x8c, 0xe6, 0xee, 0xee, 0xfb, 0xba, 0xda, 0x5a, 0x59, 0xb0, 0xb6, 0xae, 0x9c, +0x55, 0xdd, 0xd7, 0xdd, 0xdd, 0x13, 0x17, 0xa3, 0x6d, 0xb1, 0x70, 0x4f, 0xac, 0x4b, 0x8c, 0x76, +0xde, 0xf7, 0x80, 0x78, 0xdf, 0x96, 0xd6, 0x8d, 0x3d, 0xe2, 0x86, 0x9e, 0xae, 0x2e, 0x80, 0x5c, +0xc8, 0x36, 0x76, 0x76, 0xb6, 0x45, 0xee, 0xeb, 0x5c, 0xd7, 0xb9, 0xb1, 0x7b, 0x13, 0xab, 0xf2, +0x15, 0xf9, 0x2a, 0x59, 0x6b, 0xcf, 0xe6, 0xe2, 0xce, 0x8d, 0xeb, 0x63, 0xf7, 0xc5, 0x1e, 0x60, +0x5b, 0xe2, 0x1b, 0x3b, 0x37, 0xc6, 0x1f, 0x48, 0xc7, 0xe3, 0x1b, 0xbb, 0xda, 0x62, 0xa9, 0xca, +0xca, 0x59, 0x65, 0x34, 0xda, 0xd9, 0xb6, 0xce, 0x5f, 0xd3, 0xc8, 0x8a, 0x63, 0x9b, 0x63, 0x1b, +0x90, 0x52, 0xe5, 0x2b, 0x29, 0xb9, 0x1d, 0xbf, 0xa1, 0xfa, 0x55, 0xf8, 0x6d, 0x5a, 0xcd, 0x2a, +0x57, 0xd5, 0xae, 0xa8, 0x64, 0x55, 0x75, 0x8c, 0xfe, 0x80, 0x9b, 0x58, 0x85, 0x86, 0x44, 0xda, +0x6a, 0xbb, 0xe3, 0xac, 0x7e, 0x4b, 0x5c, 0xec, 0x09, 0x8b, 0x5d, 0x6d, 0x5d, 0x3d, 0xb1, 0x07, +0xd0, 0x4c, 0x05, 0xd5, 0xfb, 0x3a, 0x3b, 0x7b, 0x36, 0xdc, 0x17, 0x6f, 0x13, 0xd7, 0x6f, 0x09, +0x87, 0xdb, 0x62, 0x9b, 0x8d, 0xce, 0xa6, 0xd8, 0x03, 0xe2, 0x06, 0x2a, 0xb5, 0xb1, 0x3b, 0x22, +0x7a, 0xb7, 0x84, 0x57, 0xb5, 0x75, 0x35, 0x3d, 0x10, 0x6d, 0x13, 0x7b, 0xa2, 0xf1, 0x8d, 0x3d, +0xdd, 0xc5, 0x8b, 0x52, 0x8d, 0xec, 0x89, 0xb6, 0x75, 0x8b, 0xf1, 0xf6, 0x36, 0x40, 0xdc, 0xbc, +0xf9, 0xbe, 0x48, 0x9b, 0x18, 0xed, 0x89, 0xc5, 0x8b, 0xbf, 0xf0, 0xb5, 0xd6, 0x5d, 0x2f, 0xc6, +0xda, 0xee, 0xdf, 0xd2, 0xb6, 0x39, 0x2e, 0x6e, 0x8e, 0xc7, 0xb6, 0x6c, 0x88, 0x6f, 0x89, 0xb5, +0x4d, 0xcf, 0x66, 0x2b, 0xd8, 0x6c, 0x13, 0xb7, 0x74, 0x6f, 0x8c, 0x8b, 0x05, 0x9d, 0xad, 0xa9, +0x2f, 0xf7, 0x6d, 0xd8, 0x00, 0xb8, 0x22, 0x6f, 0x98, 0xd8, 0x1a, 0xdb, 0xb8, 0xb5, 0xad, 0x5c, +0x54, 0x69, 0x27, 0xae, 0x07, 0xce, 0x9b, 0x36, 0x6f, 0x7c, 0x10, 0x70, 0x5a, 0x41, 0xe8, 0x4d, +0x2c, 0xc6, 0x7f, 0x43, 0xd5, 0x4d, 0xa1, 0x7b, 0xdc, 0x8d, 0xae, 0xba, 0x3b, 0xeb, 0xea, 0xef, +0xae, 0x0e, 0x55, 0x55, 0x36, 0x56, 0x23, 0xb6, 0xaa, 0xee, 0xce, 0x55, 0x95, 0xf7, 0x78, 0xab, +0x33, 0xd3, 0x42, 0x77, 0x86, 0xea, 0xab, 0x56, 0x86, 0x6a, 0x7d, 0x2b, 0x28, 0x16, 0xb8, 0x33, +0x50, 0x5f, 0x57, 0x5b, 0xdd, 0x44, 0x99, 0x6b, 0x91, 0xb9, 0xaa, 0xa9, 0xbe, 0xb6, 0xb1, 0x1e, +0xb1, 0xaa, 0xc6, 0x3b, 0xab, 0xea, 0x83, 0xe0, 0x8a, 0xa6, 0xc6, 0x86, 0xca, 0xaa, 0xea, 0x46, +0x24, 0x35, 0xae, 0xbe, 0xb3, 0xd1, 0x5f, 0x7f, 0x37, 0xd2, 0x1a, 0x6b, 0xeb, 0x83, 0x48, 0xf0, +0xd7, 0xdc, 0x89, 0xee, 0xa8, 0xa9, 0x0d, 0x35, 0x52, 0xf9, 0x1a, 0xef, 0x9d, 0x35, 0xb5, 0x75, +0xd5, 0xde, 0xe6, 0x9a, 0x1a, 0xe4, 0x70, 0xaf, 0x74, 0x07, 0x5d, 0xbe, 0xea, 0x3b, 0x7d, 0x95, +0x4d, 0x95, 0xd5, 0x2d, 0x4d, 0xee, 0x95, 0xae, 0x50, 0xf5, 0x9d, 0xa1, 0xea, 0xc6, 0xfa, 0xe6, +0x50, 0x55, 0xb5, 0x92, 0xd0, 0x58, 0x7b, 0x67, 0x63, 0x55, 0x65, 0xb0, 0x36, 0xd8, 0x54, 0x1d, +0x5a, 0x5d, 0x59, 0xc7, 0x4b, 0x34, 0x54, 0xdd, 0xd9, 0x50, 0x57, 0x79, 0x4f, 0x95, 0xcf, 0x57, +0x89, 0x1c, 0x2d, 0x77, 0xb6, 0x34, 0xd4, 0x2b, 0xa0, 0xee, 0xb9, 0xf3, 0x9e, 0xd4, 0x2b, 0xab, +0xe7, 0xdd, 0xb1, 0x59, 0xac, 0x13, 0xc1, 0x56, 0xe2, 0x2a, 0x3c, 0x62, 0xe8, 0x8a, 0x2d, 0xf1, +0x2d, 0xe8, 0xd1, 0x07, 0xc4, 0xb6, 0x6d, 0x1b, 0x3a, 0xb7, 0x6c, 0x06, 0xd1, 0x16, 0xb2, 0x5a, +0x95, 0x68, 0xdd, 0x5b, 0xba, 0xd6, 0x83, 0xa1, 0xc1, 0x02, 0x61, 0xf0, 0x7e, 0xaa, 0xbf, 0xcb, +0x39, 0xcd, 0x53, 0xd5, 0xa5, 0xd8, 0x54, 0x24, 0x9e, 0x16, 0xe3, 0x3d, 0x3d, 0x62, 0x67, 0x4f, +0x77, 0x04, 0xf3, 0x40, 0x2c, 0xd6, 0x13, 0x13, 0xbf, 0xdf, 0x4e, 0x05, 0xa3, 0xf7, 0xc5, 0x36, +0x13, 0x6b, 0xd8, 0xaa, 0x7a, 0xba, 0xe3, 0xb1, 0x9e, 0x4e, 0x1b, 0xe0, 0xb5, 0x75, 0xb6, 0x8a, +0x1b, 0xbb, 0xc5, 0x55, 0x3d, 0x5b, 0xba, 0xe3, 0x9d, 0x1b, 0x37, 0xc7, 0xcb, 0x8d, 0x05, 0x9b, +0xa7, 0x33, 0x1c, 0xf3, 0xd5, 0x56, 0xb3, 0xfa, 0x86, 0xea, 0x60, 0x51, 0xe8, 0x6e, 0xe5, 0x59, +0x5f, 0xe7, 0x53, 0x5e, 0x82, 0xd5, 0x77, 0xa3, 0xeb, 0x2a, 0x7d, 0xec, 0xee, 0x50, 0x6d, 0x53, +0x35, 0x38, 0xb7, 0xbe, 0xb1, 0x9a, 0x35, 0x56, 0x57, 0xaf, 0x64, 0xd5, 0x2d, 0x60, 0xe6, 0x60, +0xb5, 0x18, 0x04, 0xad, 0xd2, 0x91, 0x7a, 0x6f, 0x80, 0xd5, 0x06, 0x6b, 0xea, 0x01, 0xb1, 0x71, +0xa5, 0xc8, 0xdf, 0x1a, 0x2a, 0x43, 0xd5, 0xc1, 0x26, 0x5f, 0x6d, 0x88, 0xf9, 0xaa, 0xeb, 0xaa, +0x09, 0x06, 0xe0, 0x35, 0x55, 0x53, 0x42, 0x1d, 0xfa, 0x99, 0xf9, 0x9a, 0x1b, 0xf8, 0xb3, 0x26, +0x54, 0x5d, 0xcd, 0x5f, 0x1a, 0xab, 0x9b, 0x1a, 0x42, 0xf5, 0x4d, 0xd5, 0x55, 0x4d, 0xf4, 0x5a, +0x55, 0xbf, 0x6a, 0x15, 0xca, 0x03, 0x89, 0x60, 0xe5, 0xaa, 0x6a, 0x00, 0xf7, 0xd7, 0x7a, 0x6b, +0x53, 0x51, 0x91, 0xaa, 0x61, 0xab, 0xea, 0x43, 0xd5, 0x62, 0x55, 0x65, 0x95, 0xbf, 0x9a, 0xdd, +0x5d, 0x59, 0xdb, 0x24, 0xd6, 0xd4, 0x87, 0xc4, 0x2a, 0x7f, 0x65, 0x88, 0xd5, 0xd4, 0x35, 0x37, +0xfa, 0x59, 0x23, 0x2a, 0xac, 0x0e, 0xae, 0xaa, 0xf7, 0xa1, 0x74, 0xe3, 0x3a, 0xe2, 0x80, 0xc6, +0x7b, 0x1a, 0x9b, 0xaa, 0x57, 0xb1, 0x46, 0x40, 0x58, 0xc7, 0xab, 0xac, 0xaa, 0x6f, 0xb8, 0x67, +0x1d, 0x30, 0x5a, 0x57, 0xe3, 0x57, 0xf1, 0xa5, 0x37, 0xb5, 0x51, 0xf4, 0x5a, 0xe3, 0x5f, 0x57, +0x03, 0x5e, 0x57, 0x73, 0x37, 0x87, 0x78, 0x96, 0xd5, 0xf5, 0x75, 0xcd, 0x40, 0x89, 0xc8, 0x23, +0xd6, 0xd5, 0x06, 0x81, 0x48, 0xe5, 0xca, 0x6a, 0xe5, 0xad, 0xb9, 0xb1, 0x3a, 0xc4, 0x8a, 0x52, +0xff, 0x9a, 0x83, 0x2b, 0x83, 0xf5, 0x77, 0x07, 0xd5, 0x18, 0x0b, 0xae, 0x62, 0x95, 0x8d, 0xac, +0xa1, 0x85, 0x35, 0xd6, 0x31, 0x37, 0xdb, 0xfc, 0xc0, 0xe6, 0x72, 0x12, 0x1e, 0x29, 0xc9, 0xd0, +0x50, 0x97, 0x16, 0x1b, 0xab, 0x49, 0x48, 0x44, 0x63, 0x6d, 0xe1, 0xcd, 0x62, 0x57, 0x0f, 0x86, +0x60, 0x4f, 0x8c, 0x6d, 0xe8, 0x69, 0x6d, 0xdb, 0xdc, 0x16, 0x9f, 0x92, 0x49, 0xcd, 0x4d, 0x35, +0x45, 0xb7, 0x2f, 0x83, 0xdc, 0x8b, 0x6f, 0xd9, 0xc8, 0x65, 0x40, 0xea, 0xc3, 0xf7, 0x31, 0xea, +0xd6, 0xb7, 0x75, 0x6f, 0x68, 0x4f, 0xa7, 0x6c, 0xdc, 0x90, 0xf1, 0xb9, 0xad, 0x7b, 0x6b, 0xf9, +0x86, 0xd6, 0xd6, 0xfb, 0x60, 0x07, 0x62, 0x18, 0x71, 0xda, 0x2a, 0xc3, 0xd9, 0xaf, 0x0a, 0x57, +0xce, 0x56, 0xac, 0x72, 0x3d, 0x04, 0x07, 0x6b, 0x6c, 0xef, 0xf9, 0xfe, 0x3a, 0xe2, 0xc1, 0x75, +0xb5, 0x80, 0x01, 0xf1, 0x04, 0xb6, 0x6d, 0x15, 0xe3, 0xdf, 0x87, 0xdc, 0x5b, 0xf8, 0x25, 0x1a, +0x22, 0x42, 0x81, 0xfa, 0xcc, 0x0c, 0x29, 0x35, 0x80, 0x6c, 0x76, 0xbd, 0xa2, 0xbb, 0x71, 0xdd, +0xf4, 0x03, 0xc5, 0x2e, 0xe4, 0xb6, 0x20, 0xec, 0x12, 0xae, 0x9f, 0x16, 0xa8, 0xca, 0x08, 0xf4, +0x7c, 0xe1, 0x30, 0xff, 0xfb, 0xce, 0x4c, 0x38, 0xa8, 0xda, 0x8e, 0xcf, 0xf3, 0xbf, 0xfe, 0xcc, +0x04, 0xe8, 0x4e, 0xc2, 0xb3, 0x8a, 0x5e, 0x2b, 0x40, 0x27, 0x12, 0x60, 0x23, 0x08, 0xd0, 0x95, +0x05, 0xe8, 0xbe, 0x02, 0xe6, 0x4b, 0x81, 0xf6, 0xee, 0x25, 0xf8, 0xcd, 0x06, 0x74, 0x3d, 0x0a, +0x13, 0x60, 0x67, 0x08, 0xb0, 0xa7, 0x04, 0xe8, 0x5b, 0x02, 0xea, 0x12, 0x50, 0x17, 0x6d, 0x37, +0x10, 0x60, 0x17, 0x09, 0xa8, 0x53, 0x80, 0xde, 0x25, 0x40, 0xf5, 0x11, 0xa0, 0xa7, 0x0b, 0xd0, +0xdd, 0x04, 0xd8, 0x3a, 0x82, 0x07, 0xa1, 0x82, 0xdf, 0x25, 0xc9, 0x18, 0xca, 0xb1, 0x35, 0x6a, +0x1b, 0x54, 0x7d, 0x99, 0xfe, 0x66, 0x77, 0xba, 0x5d, 0x97, 0xff, 0x7f, 0xe3, 0x21, 0x4e, 0x37, +0xe0, 0x7b, 0x00, 0x00 +}; +unsigned int cdfs_rom_len = 18804; diff --git a/custom.cpp b/custom.cpp index 9840e7ac..df6ae35d 100644 --- a/custom.cpp +++ b/custom.cpp @@ -5116,7 +5116,7 @@ static void framewait (void) if (vs == -2) { - vsync_busywait_end (); + curr_time = vsync_busywait_end (); vsync_busywait_do (&freetime); curr_time = read_processor_time (); vsyncmintime = curr_time + vsynctime; @@ -5203,8 +5203,6 @@ static void fpscounter (void) // vsync functions that are not hardware timing related static void vsync_handler_pre (void) { - vsync_rendered = false; - if (bogusframe > 0) bogusframe--; @@ -5234,7 +5232,9 @@ static void vsync_handler_pre (void) sampler_vsync (); - vsync_handle_redraw (lof_store, lof_changed); + if (!vsync_rendered) + vsync_handle_redraw (lof_store, lof_changed); + vsync_rendered = true; } // emulated hardware vsync @@ -5242,6 +5242,8 @@ static void vsync_handler_post (void) { static frame_time_t prevtime; + vsync_rendered = false; + //write_log (L"%d %d %d\n", vsynctime, read_processor_time () - vsyncmintime, read_processor_time () - prevtime); prevtime = read_processor_time (); @@ -5757,10 +5759,6 @@ static void hsync_handler_post (bool onvsync) #ifdef JIT } #endif - if (is_lastline && isvsync () == -2 && !vsync_rendered) { - vsync_rendered = true; - render_screen (); - } if (!nocustom ()) { int lineno = vpos; @@ -5862,6 +5860,13 @@ static void hsync_handler_post (bool onvsync) diw_change--; + if (is_lastline && isvsync () == -2 && !vsync_rendered) { + /* last line, render the frame as early as possible */ + vsync_rendered = true; + vsync_handle_redraw (lof_store, lof_changed); + render_screen (); + } + #if 0 { static int skip; @@ -7312,6 +7317,8 @@ STATIC_INLINE int dma_cycle (void) blitter_nasty = 1; if (cpu_tracer == -1) return current_hpos (); + if (!currprefs.cpu_cycle_exact) + return current_hpos (); while (currprefs.cpu_cycle_exact) { int bpldma; int blitpri = dmacon & DMA_BLITPRI; diff --git a/filesys.cpp b/filesys.cpp index df62665f..ab90caf0 100644 --- a/filesys.cpp +++ b/filesys.cpp @@ -103,6 +103,7 @@ static void aino_test_init (a_inode *aino) uaecptr filesys_initcode; static uae_u32 fsdevname, filesys_configdev; +static uae_u32 cdfs_devname, cdfs_control; static int filesys_in_interrupt; static uae_u32 mountertask; static int automountunit = -1; @@ -5202,7 +5203,11 @@ static void init_filesys_diagentry (void) do_put_mem_long ((uae_u32 *)(filesysory + 0x2100), EXPANSION_explibname); do_put_mem_long ((uae_u32 *)(filesysory + 0x2104), filesys_configdev); do_put_mem_long ((uae_u32 *)(filesysory + 0x2108), EXPANSION_doslibname); - do_put_mem_long ((uae_u32 *)(filesysory + 0x210c), nr_units ()); + if (currprefs.scsi && currprefs.win32_automount_cddrives) + do_put_mem_word ((uae_u16 *)(filesysory + 0x210c), scsi_get_cd_drive_mask ()); + else + do_put_mem_word ((uae_u16 *)(filesysory + 0x210c), 0); + do_put_mem_word ((uae_u16 *)(filesysory + 0x210e), nr_units ()); native2amiga_startup (); } @@ -5402,15 +5407,22 @@ static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context) static uae_u32 REGPARAM2 filesys_dev_bootfilesys (TrapContext *context) { + int iscd = (m68k_dreg (regs, 6) & 0x80000000) != 0; uaecptr devicenode = m68k_areg (regs, 3); uaecptr parmpacket = m68k_areg (regs, 1); uaecptr fsres = get_long (parmpacket + PP_FSRES); uaecptr fsnode; uae_u32 dostype, dostype2; UnitInfo *uip = mountinfo.ui; - int no = m68k_dreg (regs, 6); + int no = m68k_dreg (regs, 6) & 0x7fffffff; int unit_no = no & 65535; - int type = is_hardfile (unit_no); + int type; + + if (iscd) { + type = FILESYS_CD; + } else { + type = is_hardfile (unit_no); + } if (type == FILESYS_VIRTUAL) return 0; @@ -5452,28 +5464,51 @@ static uae_u32 REGPARAM2 filesys_init_storeinfo (TrapContext *context) return ret; } + +#define CDFS_DOSTYPE 0x43445644 +static uae_u8 *cdfs_handler; +static int cdfs_handler_len; + /* Remember a pointer AmigaOS gave us so we can later use it to identify * which unit a given startup message belongs to. */ static uae_u32 REGPARAM2 filesys_dev_remember (TrapContext *context) { - int no = m68k_dreg (regs, 6); + int iscd = (m68k_dreg (regs, 6) & 0x80000000) != 0; + int no = m68k_dreg (regs, 6) & 0x7fffffff; int unit_no = no & 65535; int sub_no = no >> 16; - UnitInfo *uip = &mountinfo.ui[unit_no]; + UnitInfo *uip = NULL; int i; uaecptr devicenode = m68k_areg (regs, 3); uaecptr parmpacket = m68k_areg (regs, 1); + int fssize; + uae_u8 *fs; + + if (iscd) { + fssize = cdfs_handler_len; + fs = cdfs_handler; + if (get_long (devicenode + 5 * 4) < 10000) // stack + put_long (devicenode + 5 * 4, 10000); + } else { + uip = &mountinfo.ui[unit_no]; + fssize = uip->rdb_filesyssize; + fs = uip->rdb_filesysstore; + } /* copy filesystem loaded from RDB */ if (get_long (parmpacket + PP_FSPTR)) { - for (i = 0; i < uip->rdb_filesyssize; i++) - put_byte (get_long (parmpacket + PP_FSPTR) + i, uip->rdb_filesysstore[i]); - xfree (uip->rdb_filesysstore); + for (i = 0; i < fssize; i++) + put_byte (get_long (parmpacket + PP_FSPTR) + i, fs[i]); + } + + if (!iscd) { + xfree (fs); uip->rdb_filesysstore = 0; uip->rdb_filesyssize = 0; + if (m68k_dreg (regs, 3) >= 0) + uip->startup = get_long (devicenode + 28); } - if (m68k_dreg (regs, 3) >= 0) - uip->startup = get_long (devicenode + 28); + return devicenode; } @@ -5905,7 +5940,7 @@ static void get_new_device (int type, uaecptr parmpacket, TCHAR **devname, uaecp if (*devname == 0 || _tcslen (*devname) == 0) { int un = unit_no; for (;;) { - _stprintf (buffer, L"DH%d", un++); + _stprintf (buffer, type == FILESYS_CD ? L"CD%d" : L"DH%d", un++); if (!device_isdup (expbase, buffer)) break; } @@ -5913,7 +5948,9 @@ static void get_new_device (int type, uaecptr parmpacket, TCHAR **devname, uaecp _tcscpy (buffer, *devname); } *devname_amiga = ds (device_dupfix (expbase, buffer)); - if (type == FILESYS_VIRTUAL) + if (type == FILESYS_CD) + write_log (L"FS: mounted CD unit %s\n", buffer); + else if (type == FILESYS_VIRTUAL) write_log (L"FS: mounted virtual unit %s (%s)\n", buffer, mountinfo.ui[unit_no].rootdir); else write_log (L"FS: mounted HDF unit %s (%04x-%08x, %s)\n", buffer, @@ -5926,61 +5963,121 @@ static void get_new_device (int type, uaecptr parmpacket, TCHAR **devname, uaecp static uae_u32 REGPARAM2 filesys_dev_storeinfo (TrapContext *context) { UnitInfo *uip = mountinfo.ui; - int no = m68k_dreg (regs, 6); + int no = m68k_dreg (regs, 6) & 0x7fffffff; + int iscd = (m68k_dreg (regs, 6) & 0x80000000) != 0; int unit_no = no & 65535; int sub_no = no >> 16; - int type = is_hardfile (unit_no); + int type; uaecptr parmpacket = m68k_areg (regs, 0); - if (type == FILESYS_HARDFILE_RDB || type == FILESYS_HARDDRIVE) { - /* RDB hardfile */ - uip[unit_no].devno = unit_no; - return rdb_mount (&uip[unit_no], unit_no, sub_no, parmpacket); - } - if (sub_no) - return -2; - write_log (L"Mounting uaehf.device %d (%d):\n", unit_no, sub_no); - get_new_device (type, parmpacket, &uip[unit_no].devname, &uip[unit_no].devname_amiga, unit_no); - uip[unit_no].devno = unit_no; - put_long (parmpacket, uip[unit_no].devname_amiga); - put_long (parmpacket + 8, uip[unit_no].devno); - put_long (parmpacket + 12, 0); /* Device flags */ - put_long (parmpacket + 16, 16); /* Env. size */ - put_long (parmpacket + 24, 0); /* unused */ - put_long (parmpacket + 44, 0); /* unused */ - put_long (parmpacket + 48, 0); /* interleave */ - put_long (parmpacket + 60, 50); /* Number of buffers */ - put_long (parmpacket + 64, 0); /* Buffer mem type */ - put_long (parmpacket + 68, 0x7FFFFFFF); /* largest transfer */ - put_long (parmpacket + 72, ~1); /* addMask (?) */ - put_long (parmpacket + 76, uip[unit_no].bootpri); /* bootPri */ - put_long (parmpacket + 80, 0x444f5300); /* DOS\0 */ - if (type == FILESYS_VIRTUAL) { - put_long (parmpacket + 4, fsdevname); - put_long (parmpacket + 20, 1024 >> 2); /* longwords per block */ - put_long (parmpacket + 28, 15); /* heads */ + if (iscd) { + + TCHAR *cdname = NULL; + uaecptr cdname_amiga; + type = FILESYS_CD; + write_log (L"Mounting uaescsi.device %d:\n", unit_no); + get_new_device (type, parmpacket, &cdname, &cdname_amiga, unit_no); + put_long (parmpacket, cdname_amiga); + put_long (parmpacket + 4, cdfs_devname); + put_long (parmpacket + 8, unit_no); + put_long (parmpacket + 12, 0); /* Device flags */ + put_long (parmpacket + 16, 19); /* Env. size */ + put_long (parmpacket + 20, 2048 >> 2); /* longwords per block */ + put_long (parmpacket + 24, 0); /* unused */ + put_long (parmpacket + 28, 1); /* heads */ put_long (parmpacket + 32, 1); /* sectors per block */ - put_long (parmpacket + 36, 127); /* sectors per track */ - put_long (parmpacket + 40, 2); /* reserved blocks */ + put_long (parmpacket + 36, 1); /* sectors per track */ + put_long (parmpacket + 40, 0); /* reserved blocks */ + put_long (parmpacket + 44, 0); /* unused */ + put_long (parmpacket + 48, 0); /* interleave */ put_long (parmpacket + 52, 0); /* lowCyl */ - put_long (parmpacket + 56, 1); /* hiCyl */ + put_long (parmpacket + 56, 0); /* hiCyl */ + put_long (parmpacket + 60, 50); /* Number of buffers */ + put_long (parmpacket + 64, 0); /* Buffer mem type */ + put_long (parmpacket + 68, 0x7FFFFFFF); /* largest transfer */ + put_long (parmpacket + 72, ~1); /* addMask (?) */ + put_long (parmpacket + 76, -128); /* bootPri */ + put_long (parmpacket + 80, CDFS_DOSTYPE); + put_long (parmpacket + 84, 0); /* baud */ + put_long (parmpacket + 88, cdfs_control >> 2); /* Control. BSTR! */ + put_long (parmpacket + 92, 0); /* bootblocks */ + + uaecptr fsres = get_long (parmpacket + PP_FSRES); + bool cdfs = false; + if (fsres) { + uaecptr fsnode = get_long (fsres + 18); + while (get_long (fsnode)) { + if (get_long (fsnode + 14) == CDFS_DOSTYPE) { + cdfs = true; + break; + } + fsnode = get_long (fsnode); + } + } else { + write_log (L"CDFS: FileSystem.resource not found, this shouldn't happen!\n"); + cdfs = true; + } + + if (!cdfs) { + put_long (parmpacket + PP_FSSIZE, cdfs_handler_len); + addfakefilesys (parmpacket, CDFS_DOSTYPE); + } + + return type; + } else { - put_long (parmpacket + 4, ROM_hardfile_resname); - put_long (parmpacket + 20, uip[unit_no].hf.blocksize >> 2); /* longwords per block */ - put_long (parmpacket + 28, uip[unit_no].hf.surfaces); /* heads */ - put_long (parmpacket + 32, 1); /* sectors per block */ - put_long (parmpacket + 36, uip[unit_no].hf.secspertrack); /* sectors per track */ - put_long (parmpacket + 40, uip[unit_no].hf.reservedblocks); /* reserved blocks */ - put_long (parmpacket + 52, 0); /* lowCyl */ - put_long (parmpacket + 56, uip[unit_no].hf.nrcyls <= 0 ? 0 : uip[unit_no].hf.nrcyls - 1); /* hiCyl */ + + type = is_hardfile (unit_no); + if (type == FILESYS_HARDFILE_RDB || type == FILESYS_HARDDRIVE) { + /* RDB hardfile */ + uip[unit_no].devno = unit_no; + return rdb_mount (&uip[unit_no], unit_no, sub_no, parmpacket); + } + if (sub_no) + return -2; + write_log (L"Mounting uaehf.device %d (%d):\n", unit_no, sub_no); + get_new_device (type, parmpacket, &uip[unit_no].devname, &uip[unit_no].devname_amiga, unit_no); + uip[unit_no].devno = unit_no; + put_long (parmpacket, uip[unit_no].devname_amiga); + put_long (parmpacket + 8, uip[unit_no].devno); + put_long (parmpacket + 12, 0); /* Device flags */ + put_long (parmpacket + 16, 16); /* Env. size */ + put_long (parmpacket + 24, 0); /* unused */ + put_long (parmpacket + 44, 0); /* unused */ + put_long (parmpacket + 48, 0); /* interleave */ + put_long (parmpacket + 60, 50); /* Number of buffers */ + put_long (parmpacket + 64, 0); /* Buffer mem type */ + put_long (parmpacket + 68, 0x7FFFFFFF); /* largest transfer */ + put_long (parmpacket + 72, ~1); /* addMask (?) */ + put_long (parmpacket + 76, uip[unit_no].bootpri); /* bootPri */ + put_long (parmpacket + 80, 0x444f5300); /* DOS\0 */ + if (type == FILESYS_VIRTUAL) { + put_long (parmpacket + 4, fsdevname); + put_long (parmpacket + 20, 1024 >> 2); /* longwords per block */ + put_long (parmpacket + 28, 15); /* heads */ + put_long (parmpacket + 32, 1); /* sectors per block */ + put_long (parmpacket + 36, 127); /* sectors per track */ + put_long (parmpacket + 40, 2); /* reserved blocks */ + put_long (parmpacket + 52, 0); /* lowCyl */ + put_long (parmpacket + 56, 1); /* hiCyl */ + } else { + put_long (parmpacket + 4, ROM_hardfile_resname); + put_long (parmpacket + 20, uip[unit_no].hf.blocksize >> 2); /* longwords per block */ + put_long (parmpacket + 28, uip[unit_no].hf.surfaces); /* heads */ + put_long (parmpacket + 32, 1); /* sectors per block */ + put_long (parmpacket + 36, uip[unit_no].hf.secspertrack); /* sectors per track */ + put_long (parmpacket + 40, uip[unit_no].hf.reservedblocks); /* reserved blocks */ + put_long (parmpacket + 52, 0); /* lowCyl */ + put_long (parmpacket + 56, uip[unit_no].hf.nrcyls <= 0 ? 0 : uip[unit_no].hf.nrcyls - 1); /* hiCyl */ + } + if (type == FILESYS_HARDFILE) + type = dofakefilesys (&uip[unit_no], parmpacket); + if (uip[unit_no].bootpri < -127) + m68k_dreg (regs, 7) = m68k_dreg (regs, 7) & ~1; /* do not boot */ + if (uip[unit_no].bootpri < -128) + return -1; /* do not mount */ + return type; } - if (type == FILESYS_HARDFILE) - type = dofakefilesys (&uip[unit_no], parmpacket); - if (uip[unit_no].bootpri < -127) - m68k_dreg (regs, 7) = m68k_dreg (regs, 7) & ~1; /* do not boot */ - if (uip[unit_no].bootpri < -128) - return -1; /* do not mount */ - return type; } static uae_u32 REGPARAM2 mousehack_done (TrapContext *context) @@ -6052,10 +6149,12 @@ void filesys_install (void) uae_sem_init (&singlethread_int_sem, 0, 1); uae_sem_init (&test_sem, 0, 1); - ROM_filesys_resname = ds(L"UAEunixfs.resource"); - ROM_filesys_resid = ds(L"UAE unixfs 0.4"); + ROM_filesys_resname = ds_ansi ("UAEunixfs.resource"); + ROM_filesys_resid = ds_ansi ("UAE unixfs 0.4"); - fsdevname = ds (L"uae.device"); /* does not really exist */ + fsdevname = ds_ansi ("uae.device"); /* does not really exist */ + cdfs_devname = ds_ansi ("uaescsi.device"); + cdfs_control = ds_bstr_ansi ("ROCKRIDGE JOLIET MAYBELOWERCASE SCANINTERVAL=-1 DE=.1 RE=.2"); ROM_filesys_diagentry = here (); calltrap (deftrap2 (filesys_diagentry, 0, L"filesys_diagentry")); @@ -6103,6 +6202,9 @@ void filesys_install (void) org (loop); } +extern unsigned char cdfs_rom[]; +extern unsigned int cdfs_rom_len; + void filesys_install_code (void) { uae_u32 a, b; @@ -6117,8 +6219,13 @@ void filesys_install_code (void) EXPANSION_bootcode = a + bootrom_header + bootrom_items * 4 - 4; b = a + bootrom_header + 3 * 4 - 4; filesys_initcode = a + dlg (b) + bootrom_header - 4; + + cdfs_handler = zfile_load_data (L"cdfs.gz", cdfs_rom, cdfs_rom_len, &cdfs_handler_len); + } +#include "cdrom-handler.cpp" + #include "od-win32/win32_filesys.cpp" static uae_u8 *restore_filesys_hardfile (UnitInfo *ui, uae_u8 *src) diff --git a/filesys_bootrom.cpp b/filesys_bootrom.cpp index 4a40c40e..191e5c18 100644 --- a/filesys_bootrom.cpp +++ b/filesys_bootrom.cpp @@ -1,13 +1,13 @@ db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0a); db(0x66); - db(0x00); db(0x00); db(0x08); db(0x48); db(0x00); db(0x00); db(0x00); db(0xe0); - db(0x00); db(0x00); db(0x02); db(0x70); db(0x00); db(0x00); db(0x00); db(0x24); - db(0x00); db(0x00); db(0x03); db(0x2c); db(0x00); db(0x00); db(0x0e); db(0x42); - db(0x00); db(0x00); db(0x12); db(0xd2); db(0x43); db(0xfa); db(0x17); db(0xc0); + db(0x00); db(0x00); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0b); db(0x4a); + db(0x00); db(0x00); db(0x09); db(0x2c); db(0x00); db(0x00); db(0x00); db(0xe0); + db(0x00); db(0x00); db(0x02); db(0x9c); db(0x00); db(0x00); db(0x00); db(0x24); + db(0x00); db(0x00); db(0x03); db(0x58); db(0x00); db(0x00); db(0x0f); db(0x26); + db(0x00); db(0x00); db(0x13); db(0xb6); db(0x43); db(0xfa); db(0x18); db(0xa4); db(0x4e); db(0xae); db(0xff); db(0xa0); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x16); db(0x20); db(0x40); db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xe0); db(0xe2); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x11); db(0x61); db(0x00); db(0x0c); db(0x6a); db(0x4e); db(0x90); + db(0x72); db(0x11); db(0x61); db(0x00); db(0x0d); db(0x4e); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x4c); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x40); db(0x70); db(0x14); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); @@ -22,759 +22,788 @@ db(0x20); db(0x68); db(0x00); db(0x02); db(0x2f); db(0x08); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x58); db(0x8f); db(0x48); db(0xe7); db(0xff); db(0x7e); db(0x22); db(0x4e); db(0x20); db(0x08); db(0x30); db(0x7c); db(0xff); db(0xb8); - db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x12); db(0x14); - db(0x61); db(0x00); db(0x15); db(0xdc); db(0x4c); db(0xdf); db(0x7e); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x12); db(0xf8); + db(0x61); db(0x00); db(0x16); db(0xc0); db(0x4c); db(0xdf); db(0x7e); db(0xff); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x08); db(0x00); db(0x00); db(0x02); db(0x67); db(0x06); db(0x4e); db(0xb9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x4e); db(0xf9); db(0x00); db(0xf0); db(0x00); db(0x00); db(0x00); db(0x00); db(0x48); db(0xe7); db(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0b); db(0xc0); - db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x17); db(0x21); db(0x70); db(0x24); + db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); db(0x0c); db(0xa4); + db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x18); db(0x05); db(0x70); db(0x24); db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); - db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x17); db(0x11); db(0x70); db(0x00); + db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x17); db(0xf5); db(0x70); db(0x00); db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); - db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x5a); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); - db(0x27); db(0x4c); db(0x01); db(0x9c); db(0x7c); db(0x00); db(0xbc); db(0xad); - db(0x01); db(0x0c); db(0x64); db(0x2c); db(0x2f); db(0x06); db(0x7e); db(0x01); - db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7); db(0x00); db(0x02); - db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); db(0x07); db(0x02); - db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); - db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); - db(0x60); db(0xdc); db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xce); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4b); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c); db(0x4e); db(0xae); - db(0xfe); db(0x62); db(0x78); db(0x03); db(0x0c); db(0x6e); db(0x00); db(0x24); - db(0x00); db(0x14); db(0x65); db(0x04); db(0x00); db(0x44); db(0x01); db(0x00); - db(0x43); db(0xf9); db(0x00); db(0x21); db(0x00); db(0x00); db(0x4e); db(0xae); - db(0xfd); db(0xea); db(0x4a); db(0x80); db(0x66); db(0x20); db(0x30); db(0x3c); - db(0xff); db(0x80); db(0x61); db(0x00); db(0x0b); db(0x12); db(0x4e); db(0x90); - db(0x22); db(0x04); db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); - db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x08); db(0x67); db(0x06); - db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x30); db(0x3c); - db(0xff); db(0x80); db(0x61); db(0x00); db(0x0a); db(0xf2); db(0x4e); db(0x90); - db(0x20); db(0x49); db(0x20); db(0x01); db(0x67); db(0x0c); db(0x22); db(0x04); - db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x16); db(0x6f); db(0x4e); db(0xae); - db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x15); db(0xe6); db(0x43); db(0xfa); - db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0b); db(0xac); - db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); - db(0x61); db(0x00); db(0x0a); db(0xc4); db(0x4e); db(0x90); db(0x4c); db(0xdf); - db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x22); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); db(0x28); db(0x01); - db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); db(0x15); db(0xe0); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); - db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0xe4); db(0x8b); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); - db(0x44); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x15); db(0x91); db(0x43); db(0xfa); - db(0x00); db(0x14); db(0x70); db(0x0f); db(0x22); db(0x3c); db(0x00); db(0x00); - db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x60); db(0xdc); - db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x72); db(0x02); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); - db(0x0a); db(0x4e); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); - db(0x61); db(0x00); db(0x07); db(0x8a); db(0x70); db(0x00); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x00); db(0x20); db(0x30); db(0x3c); db(0xff); db(0x50); - db(0x61); db(0x00); db(0x0a); db(0x34); db(0x70); db(0x00); db(0x4e); db(0x90); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa2); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); - db(0x0a); db(0x1e); db(0x70); db(0x02); db(0x4e); db(0x90); db(0x0c); db(0x40); - db(0x00); db(0x01); db(0x6d); db(0x00); db(0x00); db(0x7c); db(0x6e); db(0x06); - db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe4); db(0x0c); db(0x40); - db(0x00); db(0x02); db(0x6e); db(0x08); db(0x20); db(0x01); db(0x4e); db(0xae); - db(0xfe); db(0xbc); db(0x60); db(0xd6); db(0x0c); db(0x40); db(0x00); db(0x03); - db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x86); db(0x60); db(0xca); - db(0x0c); db(0x40); db(0x00); db(0x04); db(0x6e); db(0x06); db(0x4e); db(0xae); - db(0xff); db(0x4c); db(0x60); db(0xbe); db(0x0c); db(0x40); db(0x00); db(0x05); - db(0x6e); db(0x46); db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x70); db(0x26); - db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x40); - db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08); db(0x25); db(0x48); - db(0x00); db(0x0e); db(0x35); db(0x7c); db(0x00); db(0x26); db(0x00); db(0x12); - db(0x25); db(0x7c); db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); - db(0x35); db(0x7c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x25); db(0x49); - db(0x00); db(0x1a); db(0x20); db(0x69); db(0x00); db(0x10); db(0x22); db(0x4a); - db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x00); db(0xff); db(0x74); - db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x09); db(0x90); - db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x4c); db(0xdf); - db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); - db(0x61); db(0x00); db(0xfd); db(0x06); db(0x70); db(0x1a); db(0x22); db(0x3c); + db(0x4a); db(0xad); db(0x01); db(0x0c); db(0x67); db(0x00); db(0x00); db(0x84); + db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x22); db(0x40); db(0x41); db(0xfa); db(0x14); db(0x67); db(0x23); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0xff); db(0x24); db(0x23); db(0x48); - db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xff); db(0x1c); db(0x23); db(0x48); - db(0x00); db(0x12); db(0x33); db(0x7c); db(0x02); db(0x14); db(0x00); db(0x08); - db(0x70); db(0x03); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x30); db(0x3a); - db(0x0a); db(0xda); db(0x67); db(0x04); db(0x61); db(0x00); db(0x0a); db(0x78); - db(0x4c); db(0xdf); db(0x03); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); - db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xbe); + db(0x26); db(0x40); db(0x27); db(0x4c); db(0x01); db(0x9c); db(0x7c); db(0x00); + db(0xbc); db(0x6d); db(0x01); db(0x0e); db(0x64); db(0x2c); db(0x2f); db(0x06); + db(0x7e); db(0x01); db(0x4a); db(0x45); db(0x67); db(0x04); db(0x08); db(0xc7); + db(0x00); db(0x02); db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); + db(0x07); db(0xe4); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); + db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); + db(0x48); db(0x46); db(0x60); db(0xdc); db(0x2c); db(0x1f); db(0x52); db(0x46); + db(0x60); db(0xce); db(0x4a); db(0x45); db(0x67); db(0x24); db(0x7c); db(0x00); + db(0x30); db(0x2d); db(0x01); db(0x0c); db(0x0d); db(0x00); db(0x67); db(0x12); + db(0x48); db(0xe7); db(0x02); db(0x10); db(0x20); db(0x4b); db(0x08); db(0xc6); + db(0x00); db(0x1f); db(0x61); db(0x00); db(0x06); db(0xf8); db(0x4c); db(0xdf); + db(0x08); db(0x40); db(0x52); db(0x46); db(0x0c); db(0x46); db(0x00); db(0x08); + db(0x66); db(0xde); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4b); + db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); + db(0xff); db(0x2e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x78); db(0x03); db(0x0c); db(0x6e); + db(0x00); db(0x24); db(0x00); db(0x14); db(0x65); db(0x04); db(0x00); db(0x44); + db(0x01); db(0x00); db(0x43); db(0xf9); db(0x00); db(0x21); db(0x00); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xea); db(0x4a); db(0x80); db(0x66); db(0x20); + db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0b); db(0xcc); + db(0x4e); db(0x90); db(0x22); db(0x04); db(0x74); db(0xf6); db(0x20); db(0x7c); + db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x08); + db(0x67); db(0x06); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfd); db(0x96); + db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x0b); db(0xac); + db(0x4e); db(0x90); db(0x20); db(0x49); db(0x20); db(0x01); db(0x67); db(0x0c); + db(0x22); db(0x04); db(0x74); db(0xfb); db(0x43); db(0xfa); db(0x17); db(0x29); + db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x16); db(0xa0); + db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00); + db(0x0c); db(0x66); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); + db(0xff); db(0x48); db(0x61); db(0x00); db(0x0b); db(0x7e); db(0x4e); db(0x90); + db(0x4c); db(0xdf); db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x38); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x00); + db(0x28); db(0x01); db(0x26); db(0x09); db(0x24); db(0x48); db(0x43); db(0xfa); + db(0x16); db(0x9a); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x4a); db(0x80); db(0x67); db(0x14); db(0x2c); db(0x40); db(0x22); db(0x0a); + db(0xe4); db(0x8b); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x22); db(0x4e); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); + db(0x4c); db(0xdf); db(0x44); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x41); db(0xfa); db(0x16); db(0x4b); + db(0x43); db(0xfa); db(0x00); db(0x16); db(0x70); db(0x0f); db(0x22); db(0x3c); + db(0x00); db(0x00); db(0x1f); db(0x40); db(0x61); db(0x00); db(0xff); db(0xa8); + db(0x60); db(0xdc); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x72); db(0x02); db(0x30); db(0x3c); + db(0xff); db(0x48); db(0x61); db(0x00); db(0x0b); db(0x06); db(0x4e); db(0x90); + db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x08); db(0x42); + db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x20); + db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x0a); db(0xec); + db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0x00); db(0xa2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); + db(0xff); db(0x50); db(0x61); db(0x00); db(0x0a); db(0xd6); db(0x70); db(0x02); + db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x00); + db(0x00); db(0x7c); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); + db(0x60); db(0xe4); db(0x0c); db(0x40); db(0x00); db(0x02); db(0x6e); db(0x08); + db(0x20); db(0x01); db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x60); db(0xd6); + db(0x0c); db(0x40); db(0x00); db(0x03); db(0x6e); db(0x06); db(0x4e); db(0xae); + db(0xfe); db(0x86); db(0x60); db(0xca); db(0x0c); db(0x40); db(0x00); db(0x04); + db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xff); db(0x4c); db(0x60); db(0xbe); + db(0x0c); db(0x40); db(0x00); db(0x05); db(0x6e); db(0x46); db(0x48); db(0xe7); + db(0x00); db(0xc0); db(0x70); db(0x26); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4c); db(0xdf); + db(0x03); db(0x00); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); + db(0x00); db(0x08); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x35); db(0x7c); + db(0x00); db(0x26); db(0x00); db(0x12); db(0x25); db(0x7c); db(0x40); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x14); db(0x35); db(0x7c); db(0x12); db(0x34); + db(0x00); db(0x18); db(0x25); db(0x49); db(0x00); db(0x1a); db(0x20); db(0x69); + db(0x00); db(0x10); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0x92); + db(0x60); db(0x00); db(0xff); db(0x74); db(0x30); db(0x3c); db(0xff); db(0x50); + db(0x61); db(0x00); db(0x0a); db(0x48); db(0x70); db(0x04); db(0x4e); db(0x90); + db(0x70); db(0x01); db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfc); db(0xda); + db(0x70); db(0x1a); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); db(0x41); db(0xfa); + db(0x15); db(0x1f); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0xff); db(0x24); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); + db(0xff); db(0x1c); db(0x23); db(0x48); db(0x00); db(0x12); db(0x33); db(0x7c); + db(0x02); db(0x14); db(0x00); db(0x08); db(0x70); db(0x03); db(0x4e); db(0xae); + db(0xff); db(0x58); db(0x30); db(0x3a); db(0x0b); db(0x92); db(0x67); db(0x04); + db(0x61); db(0x00); db(0x0b); db(0x30); db(0x4c); db(0xdf); db(0x03); db(0x03); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); + db(0x00); db(0x00); db(0x00); db(0xbe); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); + db(0x70); db(0x00); db(0x43); db(0xeb); db(0x01); db(0xa0); db(0x11); db(0xb1); + db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); + db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); + db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); + db(0x14); db(0xaf); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); + db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); + db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x24); db(0x48); db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3); + db(0x66); db(0x00); db(0x00); db(0xe4); db(0x50); db(0x8a); db(0x2e); db(0x2a); + db(0x00); db(0x04); db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87); + db(0x26); db(0x4a); db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80); + db(0xd7); db(0xc0); db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00); + db(0x24); db(0x12); db(0x72); db(0x01); db(0x08); db(0x02); db(0x00); db(0x1e); + db(0x67); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x01); db(0x08); db(0xc1); + db(0x00); db(0x10); db(0xe5); db(0x8a); db(0x20); db(0x02); db(0x66); db(0x04); + db(0x42); db(0x9a); db(0x60); db(0x1e); db(0x50); db(0x80); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0); + db(0x20); db(0x40); db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d); + db(0x67); db(0x06); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80); + db(0x2a); db(0x48); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xc0); + db(0x7c); db(0x00); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); + db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b); + db(0x28); db(0x1b); db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00); + db(0x03); db(0xe9); db(0x67); db(0x08); db(0x0c); db(0x83); db(0x00); db(0x00); + db(0x03); db(0xea); db(0x66); db(0x0c); db(0x20); db(0x04); db(0x4a); db(0x80); + db(0x67); db(0x0e); db(0x10); db(0xdb); db(0x53); db(0x80); db(0x60); db(0xf6); + db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xeb); db(0x66); db(0x4e); + db(0x26); db(0x1b); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xec); + db(0x66); db(0x28); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); + db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x20); db(0x1b); + db(0x67); db(0xe6); db(0x22); db(0x1b); db(0xd2); db(0x81); db(0xd2); db(0x81); + db(0x26); db(0x34); db(0x18); db(0x00); db(0x58); db(0x83); db(0x24); db(0x1b); + db(0xd7); db(0xb0); db(0x28); db(0x00); db(0x53); db(0x80); db(0x66); db(0xf6); + db(0x60); db(0xe4); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x66); db(0x14); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0x00); + db(0xff); db(0x8a); db(0x7e); db(0x01); db(0x20); db(0x54); db(0x20); db(0x07); + db(0x4c); db(0xdf); db(0x7e); db(0xfe); db(0x4e); db(0x75); db(0x7e); db(0x00); + db(0x60); db(0xf4); db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); + db(0x4a); db(0x90); db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); + db(0x45); db(0xfa); db(0x14); db(0x01); db(0x10); db(0x19); db(0x12); db(0x1a); + db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x42); + db(0x60); db(0xf2); db(0x20); db(0x50); db(0x60); db(0xe2); db(0x70); db(0x20); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x20); db(0x40); db(0x70); db(0x00); db(0x43); db(0xeb); - db(0x01); db(0xa0); db(0x11); db(0xb1); db(0x00); db(0x00); db(0x00); db(0x0e); - db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x8c); db(0x66); db(0xf2); - db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x36); - db(0x22); db(0x48); db(0x41); db(0xfa); db(0x13); db(0xf7); db(0x23); db(0x48); - db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98); db(0x41); db(0xe8); - db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10); db(0x4c); db(0xdf); - db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x7f); db(0x7e); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); db(0x0c); db(0x9a); - db(0x00); db(0x00); db(0x03); db(0xf3); db(0x66); db(0x00); db(0x00); db(0xe4); - db(0x50); db(0x8a); db(0x2e); db(0x2a); db(0x00); db(0x04); db(0x9e); db(0x92); - db(0x50); db(0x8a); db(0x52); db(0x87); db(0x26); db(0x4a); db(0x20); db(0x07); - db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xd7); db(0xc0); db(0x28); db(0x4a); - db(0x9b); db(0xcd); db(0x7c); db(0x00); db(0x24); db(0x12); db(0x72); db(0x01); - db(0x08); db(0x02); db(0x00); db(0x1e); db(0x67); db(0x04); db(0x08); db(0xc1); - db(0x00); db(0x01); db(0x08); db(0xc1); db(0x00); db(0x10); db(0xe5); db(0x8a); - db(0x20); db(0x02); db(0x66); db(0x04); db(0x42); db(0x9a); db(0x60); db(0x1e); - db(0x50); db(0x80); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); - db(0x67); db(0x00); db(0x00); db(0xa0); db(0x20); db(0x40); db(0x20); db(0xc2); - db(0x24); db(0xc8); db(0x22); db(0x0d); db(0x67); db(0x06); db(0x20); db(0x08); - db(0xe4); db(0x88); db(0x2a); db(0x80); db(0x2a); db(0x48); db(0x52); db(0x86); - db(0xbe); db(0x86); db(0x66); db(0xc0); db(0x7c); db(0x00); db(0x22); db(0x06); - db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); - db(0x58); db(0x88); db(0x26); db(0x1b); db(0x28); db(0x1b); db(0xe5); db(0x8c); - db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xe9); db(0x67); db(0x08); - db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xea); db(0x66); db(0x0c); - db(0x20); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x10); db(0xdb); - db(0x53); db(0x80); db(0x60); db(0xf6); db(0x0c); db(0x83); db(0x00); db(0x00); - db(0x03); db(0xeb); db(0x66); db(0x4e); db(0x26); db(0x1b); db(0x0c); db(0x83); - db(0x00); db(0x00); db(0x03); db(0xec); db(0x66); db(0x28); db(0x22); db(0x06); - db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); db(0x18); db(0x00); - db(0x58); db(0x88); db(0x20); db(0x1b); db(0x67); db(0xe6); db(0x22); db(0x1b); - db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x26); db(0x34); db(0x18); db(0x00); - db(0x58); db(0x83); db(0x24); db(0x1b); db(0xd7); db(0xb0); db(0x28); db(0x00); - db(0x53); db(0x80); db(0x66); db(0xf6); db(0x60); db(0xe4); db(0x0c); db(0x83); - db(0x00); db(0x00); db(0x03); db(0xf2); db(0x66); db(0x14); db(0x52); db(0x86); - db(0xbe); db(0x86); db(0x66); db(0x00); db(0xff); db(0x8a); db(0x7e); db(0x01); - db(0x20); db(0x54); db(0x20); db(0x07); db(0x4c); db(0xdf); db(0x7e); db(0xfe); - db(0x4e); db(0x75); db(0x7e); db(0x00); db(0x60); db(0xf4); db(0x48); db(0xe7); - db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x41); db(0xee); - db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90); db(0x67); db(0x1a); - db(0x22); db(0x68); db(0x00); db(0x0a); db(0x45); db(0xfa); db(0x13); db(0x49); - db(0x10); db(0x19); db(0x12); db(0x1a); db(0xb0); db(0x01); db(0x66); db(0x06); - db(0x4a); db(0x00); db(0x67); db(0x42); db(0x60); db(0xf2); db(0x20); db(0x50); - db(0x60); db(0xe2); db(0x70); db(0x20); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x24); db(0x40); - db(0x15); db(0x7c); db(0x00); db(0x08); db(0x00); db(0x08); db(0x41); db(0xfa); - db(0x13); db(0x1f); db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); - db(0x12); db(0x9b); db(0x25); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xea); - db(0x00); db(0x12); db(0x20); db(0x88); db(0x58); db(0x90); db(0x21); db(0x48); - db(0x00); db(0x08); db(0x41); db(0xee); db(0x01); db(0x50); db(0x22); db(0x4a); - db(0x4e); db(0xae); db(0xff); db(0x0a); db(0x20); db(0x4a); db(0x20); db(0x08); - db(0x4c); db(0xdf); db(0x47); db(0x02); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x01); db(0x02); db(0x2e); db(0x00); db(0x4a); db(0x2b); db(0x00); db(0x4c); - db(0x67); db(0x7c); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); - db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e); - db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); - db(0xff); db(0xfe); db(0x67); db(0x62); db(0x08); db(0x07); db(0x00); db(0x00); - db(0x67); db(0x0a); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); - db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x08); db(0x07); db(0x00); db(0x01); - db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); - db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4); - db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x72); db(0x0e); db(0x4e); db(0xae); - db(0xfd); db(0x6c); db(0x60); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); - db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); - db(0x00); db(0xac); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); - db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x66); db(0x0c); db(0x50); db(0xeb); - db(0x00); db(0x9e); db(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); - db(0x00); db(0x94); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); - db(0x40); db(0x80); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x22); - db(0x2e); db(0x00); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); - db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x3e); db(0x72); db(0x0e); - db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); - db(0xff); db(0xfe); db(0x67); db(0x62); db(0x08); db(0x07); db(0x00); db(0x00); - db(0x67); db(0x0a); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x22); db(0x08); - db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x08); db(0x07); db(0x00); db(0x01); - db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c); - db(0x42); db(0x2b); db(0x00); db(0x9e); db(0x22); db(0x2b); db(0x00); db(0xb4); - db(0x4e); db(0xae); db(0xfd); db(0x60); db(0x72); db(0x0e); db(0x4e); db(0xae); - db(0xfd); db(0x6c); db(0x60); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x08); db(0x07); db(0x00); db(0x00); - db(0x67); db(0x08); db(0x41); db(0xeb); db(0x00); db(0x20); db(0x61); db(0x00); - db(0x00); db(0x44); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); - db(0x4a); db(0x2b); db(0x00); db(0x9e); db(0x67); db(0x0c); db(0x42); db(0x2b); - db(0x00); db(0x9e); db(0x20); db(0x6b); db(0x00); db(0xb4); db(0x61); db(0x00); - db(0x00); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); - db(0x44); db(0x80); db(0x4e); db(0x75); db(0x22); db(0x48); db(0x20); db(0x6b); - db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); - db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0xa8); - db(0x00); db(0x04); db(0x20); db(0x09); db(0xe4); db(0x88); db(0x21); db(0x40); - db(0x00); db(0x04); db(0x4e); db(0x75); db(0x24); db(0x48); db(0x20); db(0x6b); - db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0x20); db(0x68); - db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x22); db(0x68); - db(0x00); db(0x04); db(0xd3); db(0xc9); db(0xd3); db(0xc9); db(0xb3); db(0xca); - db(0x66); db(0x06); db(0x21); db(0x52); db(0x00); db(0x04); db(0x60); db(0x18); - db(0x20); db(0x09); db(0x67); db(0x0e); db(0x20); db(0x11); db(0xd0); db(0x80); - db(0xd0); db(0x80); db(0xb5); db(0xc0); db(0x67); db(0x04); db(0x22); db(0x40); - db(0x60); db(0xee); db(0x20); db(0x09); db(0x67); db(0x02); db(0x22); db(0x92); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x74); db(0x16); - db(0x9f); db(0xc2); db(0x24); db(0x4f); db(0x32); db(0x02); db(0x42); db(0x32); - db(0x10); db(0xff); db(0x53); db(0x41); db(0x66); db(0xf8); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x72); db(0x0f); db(0x4a); db(0x80); db(0x67); db(0x02); - db(0x72); db(0x10); db(0x15); db(0x41); db(0x00); db(0x04); db(0x35); db(0x7c); - db(0x08); db(0x00); db(0x00); db(0x08); db(0x22); db(0x6b); db(0x00); db(0xa4); - db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); - db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); - db(0x00); db(0x28); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); - db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x33); db(0x7c); db(0x00); db(0x0a); - db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6b); db(0x00); db(0xa8); - db(0x25); db(0x69); db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); - db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6b); db(0x00); db(0xa4); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0xdf); db(0xc2); db(0x4c); db(0xdf); - db(0x44); db(0x04); db(0x4e); db(0x75); db(0x4a); db(0x00); db(0x67); db(0x26); - db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x66); db(0x36); db(0x70); db(0x00); - db(0x4a); db(0x33); db(0x00); db(0x4d); db(0x67); db(0x04); db(0x52); db(0x00); - db(0x60); db(0xf6); db(0x17); db(0x40); db(0x00); db(0x4c); db(0x67); db(0x24); - db(0x20); db(0x01); db(0x61); db(0x00); db(0xfd); db(0xf2); db(0x70); db(0x01); - db(0x61); db(0x00); db(0xff); db(0x60); db(0x60); db(0x16); db(0x4a); db(0x2b); - db(0x00); db(0x4c); db(0x67); db(0x10); db(0x42); db(0x2b); db(0x00); db(0x4c); - db(0x20); db(0x01); db(0x61); db(0x00); db(0xfe); db(0x68); db(0x70); db(0x00); - db(0x61); db(0x00); db(0xff); db(0x48); db(0x4e); db(0x75); db(0x4a); db(0xac); - db(0x00); db(0x14); db(0x67); db(0x0a); db(0x70); db(0x00); db(0x72); db(0x01); - db(0x61); db(0x00); db(0xff); db(0xb2); db(0x4e); db(0x75); db(0x70); db(0x01); - db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0xa8); db(0x4e); db(0x75); - db(0x10); db(0x2b); db(0x00); db(0xac); db(0x6b); db(0x0a); db(0x70); db(0x01); - db(0x72); db(0x03); db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); - db(0x72); db(0x01); db(0x0c); db(0x00); db(0x00); db(0xfe); db(0x66); db(0x02); - db(0x72); db(0x03); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x86); - db(0x4e); db(0x75); db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); - db(0x67); db(0x0c); db(0x4a); db(0xa8); db(0x00); db(0x08); db(0x66); db(0x0a); - db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x04); db(0x70); db(0x01); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2a); db(0x48); - db(0x24); db(0x6c); db(0x00); db(0x18); db(0x2e); db(0x15); db(0x7a); db(0x00); - db(0x4a); db(0x87); db(0x67); db(0x70); db(0x20); db(0x0a); db(0x67); db(0x6c); - db(0x7c); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x08); db(0x67); db(0x12); - db(0x24); db(0x2a); db(0x00); db(0x04); db(0x2c); db(0x6b); db(0x00); db(0xa0); - db(0x4e); db(0xae); db(0xfc); db(0x34); db(0x4a); db(0x80); db(0x66); db(0x02); - db(0x50); db(0xc6); db(0x22); db(0x2d); db(0x00); db(0x0c); db(0x67); db(0x1c); - db(0x20); db(0x41); db(0x22); db(0x4a); db(0x2f); db(0x0a); db(0x45); db(0xec); - db(0x00); db(0x20); db(0x48); db(0x7a); db(0x00); db(0x08); db(0x2f); db(0x28); - db(0x00); db(0x08); db(0x4e); db(0x75); db(0x24); db(0x5f); db(0x4a); db(0x80); - db(0x66); db(0x02); db(0x50); db(0xc6); db(0x4a); db(0x06); db(0x67); db(0x24); - db(0x20); db(0x2a); db(0x00); db(0x04); db(0x90); db(0x8a); db(0x4a); db(0x92); - db(0x66); db(0x0a); db(0x20); db(0x05); db(0x67); db(0x10); db(0x20); db(0x40); - db(0x42); db(0x90); db(0x60); db(0x0a); db(0x20); db(0x52); db(0x22); db(0x4a); - db(0x22); db(0xd8); db(0x59); db(0x80); db(0x6a); db(0xfa); db(0x53); db(0x95); - db(0x53); db(0x87); db(0x60); db(0x94); db(0x2a); db(0x0a); db(0x24); db(0x52); - db(0x53); db(0x87); db(0x60); db(0x8c); db(0x4c); db(0xdf); db(0x7c); db(0xfc); - db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0x90); db(0x4e); db(0x75); - db(0x61); db(0x00); db(0xfc); db(0x7c); db(0x21); db(0x40); db(0x01); db(0x98); - db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xfc); db(0x61); db(0x00); - db(0x04); db(0x56); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); - db(0x61); db(0x00); db(0x04); db(0x4c); db(0x22); db(0x48); db(0x20); db(0x5f); - db(0x42); db(0xa8); db(0x01); db(0x90); db(0x42); db(0xa8); db(0x01); db(0x94); - db(0x4e); db(0x91); db(0x26); db(0x00); db(0x0c); db(0x43); db(0xff); db(0xfe); - db(0x67); db(0x00); db(0xf9); db(0x78); db(0x20); db(0x28); db(0x01); db(0x90); - db(0x67); db(0x14); db(0x6b); db(0x12); db(0x2f); db(0x08); db(0x72); db(0x01); + db(0xff); db(0x3a); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); + db(0x00); db(0x08); db(0x41); db(0xfa); db(0x13); db(0xd7); db(0x25); db(0x48); + db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x13); db(0x53); db(0x25); db(0x48); + db(0x00); db(0x0e); db(0x41); db(0xea); db(0x00); db(0x12); db(0x20); db(0x88); + db(0x58); db(0x90); db(0x21); db(0x48); db(0x00); db(0x08); db(0x41); db(0xee); + db(0x01); db(0x50); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xff); db(0x0a); + db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x47); db(0x02); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x01); db(0x02); db(0x2e); db(0x00); + db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x7c); db(0x2c); db(0x6b); + db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); + db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); + db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x62); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); + db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x5a); + db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); + db(0x00); db(0x9e); db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); + db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x5a); + db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x32); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); + db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0xac); db(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); + db(0x66); db(0x0c); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x20); db(0x6b); + db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x94); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x40); db(0x80); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x01); db(0x22); db(0x2e); db(0x00); db(0x2c); db(0x6b); + db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); + db(0x65); db(0x3e); db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x66); + db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x62); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x0a); db(0x41); db(0xeb); + db(0x00); db(0x20); db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x60); + db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); + db(0x00); db(0x9e); db(0x67); db(0x0c); db(0x42); db(0x2b); db(0x00); db(0x9e); + db(0x22); db(0x2b); db(0x00); db(0xb4); db(0x4e); db(0xae); db(0xfd); db(0x60); + db(0x72); db(0x0e); db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x32); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x08); db(0x41); db(0xeb); + db(0x00); db(0x20); db(0x61); db(0x00); db(0x00); db(0x44); db(0x08); db(0x07); + db(0x00); db(0x01); db(0x67); db(0x12); db(0x4a); db(0x2b); db(0x00); db(0x9e); + db(0x67); db(0x0c); db(0x42); db(0x2b); db(0x00); db(0x9e); db(0x20); db(0x6b); + db(0x00); db(0xb4); db(0x61); db(0x00); db(0x00); db(0x2c); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x44); db(0x80); db(0x4e); db(0x75); + db(0x22); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); + db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); + db(0xd1); db(0xc8); db(0x22); db(0xa8); db(0x00); db(0x04); db(0x20); db(0x09); + db(0xe4); db(0x88); db(0x21); db(0x40); db(0x00); db(0x04); db(0x4e); db(0x75); + db(0x24); db(0x48); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); + db(0x00); db(0x22); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); + db(0xd1); db(0xc8); db(0x22); db(0x68); db(0x00); db(0x04); db(0xd3); db(0xc9); + db(0xd3); db(0xc9); db(0xb3); db(0xca); db(0x66); db(0x06); db(0x21); db(0x52); + db(0x00); db(0x04); db(0x60); db(0x18); db(0x20); db(0x09); db(0x67); db(0x0e); + db(0x20); db(0x11); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xb5); db(0xc0); + db(0x67); db(0x04); db(0x22); db(0x40); db(0x60); db(0xee); db(0x20); db(0x09); + db(0x67); db(0x02); db(0x22); db(0x92); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x20); db(0x22); db(0x74); db(0x16); db(0x9f); db(0xc2); db(0x24); db(0x4f); + db(0x32); db(0x02); db(0x42); db(0x32); db(0x10); db(0xff); db(0x53); db(0x41); + db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x72); db(0x0f); + db(0x4a); db(0x80); db(0x67); db(0x02); db(0x72); db(0x10); db(0x15); db(0x41); + db(0x00); db(0x04); db(0x35); db(0x7c); db(0x08); db(0x00); db(0x00); db(0x08); + db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x33); db(0x7c); db(0x00); db(0x0b); + db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); + db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); db(0x13); db(0x7c); + db(0x00); db(0x01); db(0x00); db(0x1e); db(0x22); db(0x6b); db(0x00); db(0xa8); + db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); + db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x25); db(0x69); db(0x00); db(0x20); + db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); + db(0x22); db(0x6b); db(0x00); db(0xa4); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0xdf); db(0xc2); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); + db(0x4a); db(0x00); db(0x67); db(0x26); db(0x4a); db(0x2b); db(0x00); db(0x4c); + db(0x66); db(0x36); db(0x70); db(0x00); db(0x4a); db(0x33); db(0x00); db(0x4d); + db(0x67); db(0x04); db(0x52); db(0x00); db(0x60); db(0xf6); db(0x17); db(0x40); + db(0x00); db(0x4c); db(0x67); db(0x24); db(0x20); db(0x01); db(0x61); db(0x00); + db(0xfd); db(0xf2); db(0x70); db(0x01); db(0x61); db(0x00); db(0xff); db(0x60); + db(0x60); db(0x16); db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x67); db(0x10); + db(0x42); db(0x2b); db(0x00); db(0x4c); db(0x20); db(0x01); db(0x61); db(0x00); + db(0xfe); db(0x68); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x48); + db(0x4e); db(0x75); db(0x4a); db(0xac); db(0x00); db(0x14); db(0x67); db(0x0a); + db(0x70); db(0x00); db(0x72); db(0x01); db(0x61); db(0x00); db(0xff); db(0xb2); + db(0x4e); db(0x75); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); + db(0xff); db(0xa8); db(0x4e); db(0x75); db(0x10); db(0x2b); db(0x00); db(0xac); + db(0x6b); db(0x0a); db(0x70); db(0x01); db(0x72); db(0x03); db(0x61); db(0x00); + db(0xff); db(0x98); db(0x4e); db(0x75); db(0x72); db(0x01); db(0x0c); db(0x00); + db(0x00); db(0xfe); db(0x66); db(0x02); db(0x72); db(0x03); db(0x70); db(0x00); + db(0x61); db(0x00); db(0xff); db(0x86); db(0x4e); db(0x75); db(0x20); db(0x6c); + db(0x00); db(0x24); db(0x4a); db(0x90); db(0x67); db(0x0c); db(0x4a); db(0xa8); + db(0x00); db(0x08); db(0x66); db(0x0a); db(0x4a); db(0xa8); db(0x00); db(0x0c); + db(0x66); db(0x04); db(0x70); db(0x01); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x3f); db(0x3e); db(0x2a); db(0x48); db(0x24); db(0x6c); db(0x00); db(0x18); + db(0x2e); db(0x15); db(0x7a); db(0x00); db(0x4a); db(0x87); db(0x67); db(0x70); + db(0x20); db(0x0a); db(0x67); db(0x6c); db(0x7c); db(0x00); db(0x22); db(0x2d); + db(0x00); db(0x08); db(0x67); db(0x12); db(0x24); db(0x2a); db(0x00); db(0x04); + db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x4e); db(0xae); db(0xfc); db(0x34); + db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); db(0x22); db(0x2d); + db(0x00); db(0x0c); db(0x67); db(0x1c); db(0x20); db(0x41); db(0x22); db(0x4a); + db(0x2f); db(0x0a); db(0x45); db(0xec); db(0x00); db(0x20); db(0x48); db(0x7a); + db(0x00); db(0x08); db(0x2f); db(0x28); db(0x00); db(0x08); db(0x4e); db(0x75); + db(0x24); db(0x5f); db(0x4a); db(0x80); db(0x66); db(0x02); db(0x50); db(0xc6); + db(0x4a); db(0x06); db(0x67); db(0x24); db(0x20); db(0x2a); db(0x00); db(0x04); + db(0x90); db(0x8a); db(0x4a); db(0x92); db(0x66); db(0x0a); db(0x20); db(0x05); + db(0x67); db(0x10); db(0x20); db(0x40); db(0x42); db(0x90); db(0x60); db(0x0a); + db(0x20); db(0x52); db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x80); + db(0x6a); db(0xfa); db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x94); + db(0x2a); db(0x0a); db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x8c); + db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x20); db(0x6c); db(0x00); db(0x24); + db(0x4a); db(0x90); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfc); db(0x7c); + db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); + db(0xff); db(0xfc); db(0x61); db(0x00); db(0x05); db(0x0e); db(0x2a); db(0x50); + db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x05); db(0x04); + db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); + db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x4a); db(0x80); + db(0x67); db(0x00); db(0x00); db(0x88); db(0x20); db(0x28); db(0x01); db(0x90); + db(0x67); db(0x16); db(0x6b); db(0x14); db(0x2f); db(0x08); db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x4a); db(0x83); - db(0x6a); db(0x0e); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); - db(0x61); db(0x00); db(0x04); db(0x0c); db(0x4e); db(0x90); db(0x60); db(0x26); + db(0x20); db(0x5f); db(0x21); db(0x40); db(0x01); db(0x94); db(0x67); db(0x6a); db(0x2c); db(0x4c); db(0x2f); db(0x08); db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48); db(0x26); db(0x40); db(0x30); db(0x3c); - db(0xff); db(0x20); db(0x61); db(0x00); db(0x03); db(0xf2); db(0x4e); db(0x90); + db(0xff); db(0x20); db(0x61); db(0x00); db(0x04); db(0xbe); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); - db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9); - db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94); - db(0x61); db(0x00); db(0xfa); db(0xf2); db(0x48); db(0xe7); db(0x80); db(0xc0); - db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04); - db(0x61); db(0x00); db(0xfa); db(0x7c); db(0x4a); db(0x83); db(0x6b); db(0x00); - db(0xf8); db(0xf2); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); - db(0x03); db(0xa6); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29); - db(0x00); db(0x4f); db(0x4a); db(0x80); db(0x66); db(0x1a); db(0x27); db(0x7c); - db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); db(0x41); db(0xfa); - db(0xf6); db(0xdc); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x27); db(0x40); - db(0x00); db(0x20); db(0x70); db(0xff); db(0x27); db(0x40); db(0x00); db(0x24); - db(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x3a); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x70); db(0x14); db(0x72); db(0x00); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x22); db(0x40); db(0x70); db(0x00); db(0x22); db(0x80); - db(0x23); db(0x40); db(0x00); db(0x04); db(0x33); db(0x40); db(0x00); db(0x0e); - db(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); - db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); - db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); - db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x70); db(0x00); db(0x4e); db(0x75); + db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x20); db(0x29); + db(0x01); db(0x94); db(0x67); db(0x22); db(0x20); db(0x40); db(0x61); db(0x00); + db(0xfb); db(0x08); db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x20); db(0x29); + db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); + db(0x03); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x96); db(0x30); db(0x3c); + db(0xff); db(0x18); db(0x61); db(0x00); db(0x04); db(0x7e); db(0x4e); db(0x90); db(0x24); db(0x49); db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); - db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08); db(0x08); db(0x07); - db(0x00); db(0x02); db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0xec); - db(0x2c); db(0x4c); db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x08); db(0x07); - db(0x00); db(0x01); db(0x67); db(0x5c); db(0x08); db(0x07); db(0x00); db(0x02); - db(0x66); db(0x56); db(0x20); db(0x52); db(0x74); db(0x02); db(0x52); db(0x82); - db(0x4a); db(0x30); db(0x28); db(0xfd); db(0x66); db(0xf8); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x20); db(0x02); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x3a); db(0x20); db(0x52); - db(0x24); db(0x40); db(0x22); db(0x4a); db(0x12); db(0xd8); db(0x66); db(0xfc); - db(0x13); db(0x7c); db(0x00); db(0x3a); db(0xff); db(0xff); db(0x42); db(0x11); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0e); db(0x18); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2c); db(0x40); - db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xff); db(0x52); db(0x22); db(0x4e); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xfe); db(0x62); - db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x3f); db(0x3e); - db(0x2c); db(0x01); db(0x7e); db(0x06); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x43); db(0xfa); db(0x0e); db(0x13); db(0x70); db(0x24); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0e); db(0x08); db(0x87); - db(0x00); db(0x02); db(0x43); db(0xfa); db(0x0e); db(0x01); db(0x70); db(0x00); - db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); - db(0x4a); db(0x80); db(0x67); db(0x2c); db(0x21); db(0x4c); db(0x01); db(0x9c); - db(0x48); db(0xe7); db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfe); db(0x0a); - db(0x4c); db(0xdf); db(0x51); db(0x00); db(0x0c); db(0x80); db(0xff); db(0xff); - db(0xff); db(0xfe); db(0x67); db(0x08); db(0x48); db(0x46); db(0x52); db(0x46); - db(0x48); db(0x46); db(0x60); db(0xe4); db(0x22); db(0x48); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x02); db(0x2c); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x4c); db(0xdf); - db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x20); db(0x40); - db(0x4b); db(0xe8); db(0x00); db(0x5c); db(0x43); db(0xfa); db(0x0d); db(0x68); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x24); db(0x40); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0xb9); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x26); db(0x40); db(0x7c); db(0x00); db(0x26); db(0x86); db(0x27); db(0x46); - db(0x00); db(0x04); db(0x27); db(0x46); db(0x00); db(0x08); db(0x27); db(0x4a); - db(0x00); db(0xa0); db(0x50); db(0xeb); db(0x00); db(0x9e); db(0x93); db(0xc9); - db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); - db(0x41); db(0xfa); db(0x0c); db(0x50); db(0x70); db(0x00); db(0x72); db(0x00); - db(0x61); db(0x00); db(0x02); db(0x8e); db(0x27); db(0x40); db(0x00); db(0xa4); - db(0x41); db(0xfa); db(0x0c); db(0x4d); db(0x70); db(0x00); db(0x72); db(0x00); - db(0x61); db(0x00); db(0x02); db(0x7e); db(0x27); db(0x40); db(0x00); db(0xa8); - db(0x7a); db(0x00); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); - db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); - db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); - db(0x61); db(0x00); db(0x01); db(0xbc); db(0x70); db(0x00); db(0x4e); db(0x90); - db(0x24); db(0x00); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfa); db(0x38); - db(0x08); db(0x02); db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); - db(0x61); db(0x00); db(0xfb); db(0xa0); db(0x60); db(0x00); db(0x01); db(0x02); - db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); - db(0x4a); db(0x80); db(0x66); db(0x10); db(0x70); db(0x00); db(0x12); db(0x2d); - db(0x00); db(0x0f); db(0x03); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xac); - db(0x67); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x4c); db(0x42); db(0x2b); - db(0x00); db(0xac); db(0x20); db(0x0c); db(0x67); db(0x54); db(0x0c); db(0x6c); - db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4c); db(0x0c); db(0xac); - db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x42); - db(0x0c); db(0x6c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3a); - db(0x20); db(0x6c); db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); - db(0x02); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); - db(0x80); db(0x00); db(0x00); db(0x08); db(0x66); db(0x18); db(0x02); db(0xa8); - db(0x7f); db(0xff); db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); - db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); - db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x8a); db(0x22); db(0x4c); - db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); - db(0xff); db(0x80); db(0x74); db(0xfe); db(0x20); db(0x0c); db(0x67); db(0x14); - db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x42); db(0x74); db(0xff); - db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x01); db(0x08); - db(0x70); db(0x01); db(0x4e); db(0x90); db(0x45); db(0xeb); db(0x00); db(0x04); - db(0x20); db(0x52); db(0x20); db(0x08); db(0x67); db(0x00); db(0xff); db(0x5a); - db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); - db(0xb4); db(0x80); db(0x66); db(0x16); db(0x48); db(0xe7); db(0x00); db(0xc0); - db(0x28); db(0x68); db(0x00); db(0x0a); db(0x61); db(0x4a); db(0x53); db(0x85); - db(0x4c); db(0xdf); db(0x03); db(0x00); db(0x24); db(0x89); db(0x20); db(0x49); - db(0x60); db(0xd8); db(0x24); db(0x48); db(0x20); db(0x49); db(0x60); db(0xd2); - db(0x0c); db(0x85); db(0x00); db(0x00); db(0x00); db(0x14); db(0x65); db(0x00); - db(0x00); db(0x0a); db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x04); - db(0x60); db(0x12); db(0x61); db(0x5c); db(0x30); db(0x3c); db(0xff); db(0x30); - db(0x61); db(0x00); db(0x00); db(0xb4); db(0x4e); db(0x90); db(0x4a); db(0x80); - db(0x67); db(0x0e); db(0x52); db(0x85); db(0x28); db(0xab); db(0x00); db(0x04); - db(0x27); db(0x4c); db(0x00); db(0x04); db(0x60); db(0x00); db(0xff); db(0x02); - db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); db(0xfe); db(0xfa); - db(0x0c); db(0xac); db(0x00); db(0x00); db(0x00); db(0x1f); db(0x00); db(0x08); - db(0x66); db(0x04); db(0x61); db(0x00); db(0xfb); db(0x42); db(0x0c); db(0xac); - db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08); db(0x66); db(0x12); - db(0x61); db(0x00); db(0xfb); db(0x70); db(0x66); db(0x0c); db(0x30); db(0x3c); - db(0xff); db(0x58); db(0x61); db(0x00); db(0x00); db(0x72); db(0x4e); db(0x90); - db(0x60); db(0xee); db(0x22); db(0x54); db(0x20); db(0x6c); db(0x00); db(0x04); - db(0x29); db(0x4d); db(0x00); db(0x04); db(0x4e); db(0xee); db(0xfe); db(0x92); - db(0x2f); db(0x05); db(0x7a); db(0xfc); db(0x24); db(0x53); db(0x2e); db(0x0a); - db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c); db(0x52); db(0x85); - db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52); db(0x60); db(0xf0); - db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47); db(0x70); db(0x18); - db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x52); db(0x46); - db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a); db(0x60); db(0xe8); - db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40); db(0x20); db(0x10); - db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x18); - db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a); db(0x24); db(0x51); - db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x06); db(0x86); - db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a); db(0x66); db(0xec); - db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x41); db(0xfa); - db(0xf3); db(0x44); db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); - db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x20); db(0x88); db(0x58); db(0x90); - db(0x42); db(0xa8); db(0x00); db(0x04); db(0x21); db(0x48); db(0x00); db(0x08); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); - db(0x91); db(0xc8); db(0x24); db(0x00); db(0x6b); db(0x32); db(0x70); db(0x22); + db(0x72); db(0x01); db(0x70); db(0xec); db(0x2c); db(0x4c); db(0x4e); db(0xae); + db(0xff); db(0x6a); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfb); db(0xc4); + db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); + db(0xff); db(0xfc); db(0x61); db(0x00); db(0x04); db(0x56); db(0x2a); db(0x50); + db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x04); db(0x4c); + db(0x22); db(0x48); db(0x20); db(0x5f); db(0x42); db(0xa8); db(0x01); db(0x90); + db(0x42); db(0xa8); db(0x01); db(0x94); db(0x4e); db(0x91); db(0x26); db(0x00); + db(0x0c); db(0x43); db(0xff); db(0xfe); db(0x67); db(0x00); db(0xf8); db(0xbe); + db(0x20); db(0x28); db(0x01); db(0x90); db(0x67); db(0x14); db(0x6b); db(0x12); + db(0x2f); db(0x08); db(0x72); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x5f); db(0x21); db(0x40); + db(0x01); db(0x94); db(0x4a); db(0x83); db(0x6a); db(0x0e); db(0x22); db(0x48); + db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); db(0x04); db(0x0c); + db(0x4e); db(0x90); db(0x60); db(0x26); db(0x2c); db(0x4c); db(0x2f); db(0x08); + db(0x4e); db(0xae); db(0xff); db(0x70); db(0x20); db(0x5f); db(0x22); db(0x48); + db(0x26); db(0x40); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); + db(0x03); db(0xf2); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); + db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40); + db(0x00); db(0x20); db(0x4a); db(0xa9); db(0x01); db(0x94); db(0x67); db(0x28); + db(0x20); db(0x69); db(0x01); db(0x94); db(0x61); db(0x00); db(0xfa); db(0x3a); + db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x20); db(0x29); db(0x01); db(0x90); + db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01); + db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0xf9); db(0xc4); + db(0x4a); db(0x83); db(0x6b); db(0x00); db(0xf8); db(0x38); db(0x30); db(0x3c); + db(0xff); db(0x18); db(0x61); db(0x00); db(0x03); db(0xa6); db(0x4e); db(0x90); + db(0x20); db(0x03); db(0x16); db(0x29); db(0x00); db(0x4f); db(0x4a); db(0x80); + db(0x66); db(0x1a); db(0x27); db(0x7c); db(0x00); db(0x00); db(0x17); db(0x70); + db(0x00); db(0x14); db(0x41); db(0xfa); db(0xf5); db(0xf8); db(0x20); db(0x08); + db(0xe4); db(0x88); db(0x27); db(0x40); db(0x00); db(0x20); db(0x70); db(0xff); + db(0x27); db(0x40); db(0x00); db(0x24); db(0x08); db(0x07); db(0x00); db(0x00); + db(0x67); db(0x3a); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0x14); + db(0x72); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x22); db(0x40); + db(0x70); db(0x00); db(0x22); db(0x80); db(0x23); db(0x40); db(0x00); db(0x04); + db(0x33); db(0x40); db(0x00); db(0x0e); db(0x30); db(0x3c); db(0x10); db(0x00); + db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); db(0x23); db(0x6d); + db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); db(0x00); db(0x10); + db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0xf2); + db(0x70); db(0x00); db(0x4e); db(0x75); db(0x24); db(0x49); db(0x20); db(0x4b); + db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); db(0x00); db(0x01); + db(0x67); db(0x08); db(0x08); db(0x07); db(0x00); db(0x02); db(0x67); db(0x02); + db(0x72); db(0x01); db(0x70); db(0xec); db(0x2c); db(0x4c); db(0x4e); db(0xae); + db(0xff); db(0x6a); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x5c); + db(0x08); db(0x07); db(0x00); db(0x02); db(0x66); db(0x56); db(0x20); db(0x52); + db(0x74); db(0x02); db(0x52); db(0x82); db(0x4a); db(0x30); db(0x28); db(0xfd); + db(0x66); db(0xf8); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x02); + db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); + db(0x67); db(0x3a); db(0x20); db(0x52); db(0x24); db(0x40); db(0x22); db(0x4a); + db(0x12); db(0xd8); db(0x66); db(0xfc); db(0x13); db(0x7c); db(0x00); db(0x3a); + db(0xff); db(0xff); db(0x42); db(0x11); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x43); db(0xfa); db(0x0e); db(0x18); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x2c); db(0x40); db(0x22); db(0x0a); db(0x4e); db(0xae); + db(0xff); db(0x52); db(0x22); db(0x4e); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4a); db(0x20); db(0x02); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x3f); db(0x3e); db(0x2c); db(0x01); db(0x7e); db(0x06); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x0e); db(0x13); + db(0x70); db(0x24); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); + db(0x66); db(0x0e); db(0x08); db(0x87); db(0x00); db(0x02); db(0x43); db(0xfa); + db(0x0e); db(0x01); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x91); db(0xc8); db(0x24); db(0x40); db(0x4a); db(0x80); - db(0x67); db(0x1e); db(0x15); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x08); - db(0x15); db(0x42); db(0x00); db(0x0f); db(0x93); db(0xc9); db(0x4e); db(0xae); - db(0xfe); db(0xda); db(0x25); db(0x40); db(0x00); db(0x10); db(0x41); db(0xea); - db(0x00); db(0x14); db(0x61); db(0x00); db(0xff); db(0xb0); db(0x20); db(0x4a); - db(0x20); db(0x08); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x4a); db(0x80); db(0x67); db(0x24); db(0x24); db(0x40); db(0x24); db(0x01); - db(0x66); db(0x02); db(0x74); db(0x30); db(0x20); db(0x02); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x20); db(0x40); db(0x11); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x08); - db(0x31); db(0x42); db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); - db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x04); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x30); db(0x22); db(0x24); db(0x48); db(0x24); db(0x00); - db(0x26); db(0x01); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); - db(0xff); db(0x6a); db(0x22); db(0x03); db(0x61); db(0x00); db(0xff); db(0xb2); - db(0x67); db(0x18); db(0x20); db(0x4a); db(0x22); db(0x40); db(0x24); db(0x40); - db(0x20); db(0x02); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0x44); - db(0x22); db(0x00); db(0x70); db(0x00); db(0x4a); db(0x81); db(0x66); db(0x02); - db(0x20); db(0x0a); db(0x4a); db(0x80); db(0x4c); db(0xdf); db(0x44); db(0x0c); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x32); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x28); db(0x00); db(0x24); db(0x08); db(0x26); db(0x09); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x08); db(0x5c); db(0x22); db(0x3c); - db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x34); db(0x24); db(0x40); - db(0x15); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x08); db(0x15); db(0x44); - db(0x00); db(0x09); db(0x25); db(0x42); db(0x00); db(0x0a); db(0x47); db(0xea); - db(0x00); db(0x5c); db(0x25); db(0x4b); db(0x00); db(0x3a); db(0x47); db(0xeb); - db(0x08); db(0x00); db(0x25); db(0x4b); db(0x00); db(0x3e); db(0x25); db(0x4b); - db(0x00); db(0x36); db(0x22); db(0x4a); db(0x24); db(0x43); db(0x97); db(0xcb); - db(0x24); db(0x09); db(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x20); db(0x02); - db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x41); db(0xfa); - db(0x09); db(0xb2); db(0x43); db(0xfa); db(0x01); db(0x5c); db(0x70); db(0x13); - db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x22); db(0x6d); - db(0x02); db(0x0c); db(0x33); db(0x7c); db(0x00); db(0x0a); db(0x00); db(0x1c); - db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); - db(0xfe); db(0x38); db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x25); db(0x69); - db(0x00); db(0x20); db(0x00); db(0x0e); db(0x25); db(0x69); db(0x00); db(0x24); - db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); - db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x4e); db(0x75); db(0x42); db(0xaa); db(0x00); db(0x0e); db(0x42); db(0xaa); - db(0x00); db(0x12); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x13); db(0x7c); - db(0x00); db(0x01); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x4e); db(0x75); db(0x00); db(0x00); db(0xff); db(0xff); db(0x00); db(0x00); + db(0xff); db(0x3a); db(0x20); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x2c); + db(0x21); db(0x4c); db(0x01); db(0x9c); db(0x48); db(0xe7); db(0x00); db(0x8a); + db(0x61); db(0x00); db(0xfe); db(0x0a); db(0x4c); db(0xdf); db(0x51); db(0x00); + db(0x0c); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x08); + db(0x48); db(0x46); db(0x52); db(0x46); db(0x48); db(0x46); db(0x60); db(0xe4); + db(0x22); db(0x48); db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x22); db(0x4c); db(0x4e); db(0xae); + db(0xfe); db(0x62); db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); + db(0xfe); db(0xda); db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x00); db(0x5c); + db(0x43); db(0xfa); db(0x0d); db(0x68); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x24); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x00); db(0xb9); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x7c); db(0x00); + db(0x26); db(0x86); db(0x27); db(0x46); db(0x00); db(0x04); db(0x27); db(0x46); + db(0x00); db(0x08); db(0x27); db(0x4a); db(0x00); db(0xa0); db(0x50); db(0xeb); + db(0x00); db(0x9e); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); + db(0x27); db(0x40); db(0x00); db(0xb0); db(0x41); db(0xfa); db(0x0c); db(0x50); + db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x8e); + db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0c); db(0x4d); + db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x7e); + db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); db(0x20); db(0x4d); + db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); db(0x4e); db(0xae); + db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); db(0x00); db(0x0a); + db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); db(0x01); db(0xbc); + db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); db(0x70); db(0x01); + db(0x61); db(0x00); db(0xf9); db(0x80); db(0x08); db(0x02); db(0x00); db(0x01); + db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfa); db(0xe8); + db(0x60); db(0x00); db(0x01); db(0x02); db(0x20); db(0x4d); db(0x4e); db(0xae); + db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x66); db(0x10); + db(0x70); db(0x00); db(0x12); db(0x2d); db(0x00); db(0x0f); db(0x03); db(0xc0); + db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); + db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x08); db(0x61); db(0x00); + db(0xfb); db(0x94); db(0x42); db(0x2b); db(0x00); db(0xac); db(0x20); db(0x0c); + db(0x67); db(0x54); db(0x0c); db(0x6c); db(0x00); db(0x26); db(0x00); db(0x12); + db(0x66); db(0x4c); db(0x0c); db(0xac); db(0x40); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x14); db(0x66); db(0x42); db(0x0c); db(0x6c); db(0x12); db(0x34); + db(0x00); db(0x18); db(0x66); db(0x3a); db(0x20); db(0x6c); db(0x00); db(0x1a); + db(0x20); db(0x28); db(0x00); db(0x0c); db(0x02); db(0x80); db(0x80); db(0x00); + db(0x00); db(0x08); db(0x0c); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); + db(0x66); db(0x18); db(0x02); db(0xa8); db(0x7f); db(0xff); db(0xff); db(0xff); + db(0x00); db(0x0c); db(0x20); db(0x68); db(0x00); db(0x10); db(0x22); db(0x4c); + db(0x12); db(0xbc); db(0x00); db(0x08); db(0x4e); db(0xae); db(0xfe); db(0x92); + db(0x60); db(0x8a); db(0x22); db(0x4c); db(0x70); db(0x26); db(0x4e); db(0xae); + db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x80); db(0x74); db(0xfe); + db(0x20); db(0x0c); db(0x67); db(0x14); db(0x26); db(0x2c); db(0x00); db(0x0a); + db(0x66); db(0x42); db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x50); + db(0x61); db(0x00); db(0x01); db(0x08); db(0x70); db(0x01); db(0x4e); db(0x90); + db(0x45); db(0xeb); db(0x00); db(0x04); db(0x20); db(0x52); db(0x20); db(0x08); + db(0x67); db(0x00); db(0xff); db(0x5a); db(0x22); db(0x50); db(0x20); db(0x40); + db(0x20); db(0x28); db(0x00); db(0x04); db(0xb4); db(0x80); db(0x66); db(0x16); + db(0x48); db(0xe7); db(0x00); db(0xc0); db(0x28); db(0x68); db(0x00); db(0x0a); + db(0x61); db(0x4a); db(0x53); db(0x85); db(0x4c); db(0xdf); db(0x03); db(0x00); + db(0x24); db(0x89); db(0x20); db(0x49); db(0x60); db(0xd8); db(0x24); db(0x48); + db(0x20); db(0x49); db(0x60); db(0xd2); db(0x0c); db(0x85); db(0x00); db(0x00); + db(0x00); db(0x14); db(0x65); db(0x00); db(0x00); db(0x0a); db(0x70); db(0x01); + db(0x29); db(0x40); db(0x00); db(0x04); db(0x60); db(0x12); db(0x61); db(0x5c); + db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); db(0x00); db(0xb4); + db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x52); db(0x85); + db(0x28); db(0xab); db(0x00); db(0x04); db(0x27); db(0x4c); db(0x00); db(0x04); + db(0x60); db(0x00); db(0xff); db(0x02); db(0x28); db(0x43); db(0x61); db(0x04); + db(0x60); db(0x00); db(0xfe); db(0xfa); db(0x0c); db(0xac); db(0x00); db(0x00); + db(0x00); db(0x1f); db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); + db(0xfa); db(0x8a); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09); + db(0x00); db(0x08); db(0x66); db(0x12); db(0x61); db(0x00); db(0xfa); db(0xb8); + db(0x66); db(0x0c); db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); + db(0x00); db(0x72); db(0x4e); db(0x90); db(0x60); db(0xee); db(0x22); db(0x54); + db(0x20); db(0x6c); db(0x00); db(0x04); db(0x29); db(0x4d); db(0x00); db(0x04); + db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x2f); db(0x05); db(0x7a); db(0xfc); + db(0x24); db(0x53); db(0x2e); db(0x0a); db(0x22); db(0x0a); db(0x67); db(0x00); + db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); db(0x22); db(0x4a); + db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); db(0x67); db(0x3c); + db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); db(0x24); db(0x87); + db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); db(0x67); db(0x24); + db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); db(0x20); db(0x40); + db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); db(0x22); db(0x80); + db(0x22); db(0x4a); db(0x24); db(0x51); db(0x70); db(0x18); db(0x4e); db(0xae); + db(0xff); db(0x2e); db(0x06); db(0x86); db(0x00); db(0x01); db(0x00); db(0x00); + db(0x20); db(0x0a); db(0x66); db(0xec); db(0x26); db(0x87); db(0x2a); db(0x1f); + db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xf2); db(0x60); db(0x02); db(0x80); + db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); db(0x4e); db(0x75); + db(0x20); db(0x88); db(0x58); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); + db(0x21); db(0x48); db(0x00); db(0x08); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x20); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x70); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x91); db(0xc8); db(0x24); db(0x00); + db(0x6b); db(0x32); db(0x70); db(0x22); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x91); db(0xc8); + db(0x24); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x15); db(0x7c); + db(0x00); db(0x04); db(0x00); db(0x08); db(0x15); db(0x42); db(0x00); db(0x0f); + db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x25); db(0x40); + db(0x00); db(0x10); db(0x41); db(0xea); db(0x00); db(0x14); db(0x61); db(0x00); + db(0xff); db(0xb0); db(0x20); db(0x4a); db(0x20); db(0x08); db(0x4c); db(0xdf); + db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x20); db(0x22); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x24); + db(0x24); db(0x40); db(0x24); db(0x01); db(0x66); db(0x02); db(0x74); db(0x30); + db(0x20); db(0x02); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x11); db(0x7c); + db(0x00); db(0x0a); db(0x00); db(0x08); db(0x31); db(0x42); db(0x00); db(0x12); + db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4a); db(0x80); db(0x4c); db(0xdf); + db(0x44); db(0x04); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x30); db(0x22); + db(0x24); db(0x48); db(0x24); db(0x00); db(0x26); db(0x01); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x6a); db(0x22); db(0x03); + db(0x61); db(0x00); db(0xff); db(0xb2); db(0x67); db(0x18); db(0x20); db(0x4a); + db(0x22); db(0x40); db(0x24); db(0x40); db(0x20); db(0x02); db(0x72); db(0x00); + db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x22); db(0x00); db(0x70); db(0x00); + db(0x4a); db(0x81); db(0x66); db(0x02); db(0x20); db(0x0a); db(0x4a); db(0x80); + db(0x4c); db(0xdf); db(0x44); db(0x0c); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x38); db(0x32); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x28); db(0x00); + db(0x24); db(0x08); db(0x26); db(0x09); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x08); db(0x5c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0x00); db(0x34); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x08); db(0x15); db(0x44); db(0x00); db(0x09); db(0x25); db(0x42); + db(0x00); db(0x0a); db(0x47); db(0xea); db(0x00); db(0x5c); db(0x25); db(0x4b); + db(0x00); db(0x3a); db(0x47); db(0xeb); db(0x08); db(0x00); db(0x25); db(0x4b); + db(0x00); db(0x3e); db(0x25); db(0x4b); db(0x00); db(0x36); db(0x22); db(0x4a); + db(0x24); db(0x43); db(0x97); db(0xcb); db(0x24); db(0x09); db(0x4e); db(0xae); + db(0xfe); db(0xe6); db(0x20); db(0x02); db(0x4c); db(0xdf); db(0x4c); db(0x1c); + db(0x4e); db(0x75); db(0x41); db(0xfa); db(0x09); db(0xb2); db(0x43); db(0xfa); + db(0x01); db(0x5c); db(0x70); db(0x13); db(0x61); db(0x00); db(0xff); db(0x98); + db(0x4e); db(0x75); db(0x22); db(0x6d); db(0x02); db(0x0c); db(0x33); db(0x7c); + db(0x00); db(0x0a); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); + db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x22); db(0x6d); + db(0x02); db(0x0c); db(0x25); db(0x69); db(0x00); db(0x20); db(0x00); db(0x0e); + db(0x25); db(0x69); db(0x00); db(0x24); db(0x00); db(0x12); db(0x22); db(0x6d); + db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x42); db(0xaa); + db(0x00); db(0x0e); db(0x42); db(0xaa); db(0x00); db(0x12); db(0x22); db(0x6d); + db(0x02); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x01); db(0x00); db(0x1e); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x4e); db(0x75); db(0x00); db(0x00); + db(0xff); db(0xff); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x48); db(0xe7); - db(0xf8); db(0xfe); db(0x2a); db(0x48); db(0x95); db(0xca); db(0x97); db(0xcb); - db(0x99); db(0xcc); db(0x78); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x18); - db(0x20); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x28); db(0x00); db(0x3c); - db(0x67); db(0x5c); db(0x20); db(0x40); db(0x41); db(0xe8); db(0x00); db(0x2c); - db(0x28); db(0x48); db(0x4e); db(0xae); db(0xfc); db(0xe8); db(0x72); db(0xff); - db(0x74); db(0xff); db(0xb2); db(0x80); db(0x67); db(0x48); db(0x26); db(0x00); - db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x41); db(0xed); db(0x00); db(0xc0); - db(0x70); db(0x66); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xed); - db(0x00); db(0xc0); db(0x38); db(0x28); db(0x00); db(0x64); db(0x2c); db(0x6d); - db(0x00); db(0x18); db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x38); - db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); - db(0x80); db(0x00); db(0x10); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); - db(0xfd); db(0x0c); db(0x72); db(0xff); db(0x74); db(0xff); db(0x4a); db(0x80); - db(0x6b); db(0x0c); db(0x45); db(0xed); db(0x00); db(0x38); db(0x22); db(0x2a); - db(0x00); db(0x32); db(0x24); db(0x2a); db(0x00); db(0x36); db(0x20); db(0x2c); - db(0x00); db(0x1c); db(0xb8); db(0x6d); db(0x00); db(0x2c); db(0x66); db(0x12); - db(0xb0); db(0xad); db(0x00); db(0x28); db(0x66); db(0x0c); db(0xb2); db(0xad); - db(0x00); db(0x20); db(0x66); db(0x06); db(0xb4); db(0xad); db(0x00); db(0x24); - db(0x67); db(0x40); db(0x2b); db(0x40); db(0x00); db(0x28); db(0x2b); db(0x41); - db(0x00); db(0x20); db(0x2b); db(0x42); db(0x00); db(0x24); db(0x3b); db(0x44); - db(0x00); db(0x2c); db(0x91); db(0xc8); db(0x43); db(0xed); db(0x00); db(0x90); - db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x58); db(0x22); db(0x3c); - db(0x80); db(0x00); db(0x00); db(0x00); db(0x24); db(0x03); db(0x4e); db(0xae); - db(0xfd); db(0x0c); db(0x4a); db(0x80); db(0x6b); db(0x04); db(0x47); db(0xed); - db(0x00); db(0x90); db(0x34); db(0x2d); db(0x00); db(0x2c); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x01); db(0x61); db(0x00); db(0xfd); db(0x70); - db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x7f); db(0x1f); db(0x4e); db(0x75); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x3e); db(0x2e); db(0x00); db(0x14); - db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x7c); db(0x00); - db(0x01); db(0xc6); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); - db(0x28); db(0x40); db(0x70); db(0x14); db(0x22); db(0x4c); db(0x4e); db(0xae); - db(0xfe); db(0xd4); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x02); db(0x10); - db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x2a); db(0x40); db(0x47); db(0xed); db(0x00); db(0x16); - db(0x27); db(0x4e); db(0x00); db(0x10); db(0x27); db(0x4c); db(0x00); db(0x08); - db(0x27); db(0x46); db(0x00); db(0x0c); db(0x70); db(0xff); db(0x37); db(0x40); - db(0x00); db(0x00); db(0x43); db(0xed); db(0x00); db(0x00); db(0x13); db(0x7c); - db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0x05); - db(0x00); db(0x09); db(0x41); db(0xfa); db(0x07); db(0xf6); db(0x23); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x02); db(0xda); db(0x23); db(0x48); - db(0x00); db(0x12); db(0x23); db(0x4d); db(0x00); db(0x0e); db(0x70); db(0x05); - db(0x4e); db(0xae); db(0xff); db(0x58); db(0x20); db(0x06); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x70); db(0x00); db(0x53); db(0xab); db(0x00); db(0x1c); - db(0x6a); db(0x06); db(0x70); db(0x0a); db(0x27); db(0x40); db(0x00); db(0x1c); - db(0x4a); db(0xab); db(0x00); db(0x14); db(0x66); db(0x16); db(0x4a); db(0xab); - db(0x00); db(0x1c); db(0x66); db(0xe0); db(0x43); db(0xfa); db(0x08); db(0x14); + db(0x00); db(0x00); db(0x48); db(0xe7); db(0xf8); db(0xfe); db(0x2a); db(0x48); + db(0x95); db(0xca); db(0x97); db(0xcb); db(0x99); db(0xcc); db(0x78); db(0x00); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x20); db(0x6d); db(0x00); db(0x14); + db(0x20); db(0x28); db(0x00); db(0x3c); db(0x67); db(0x5c); db(0x20); db(0x40); + db(0x41); db(0xe8); db(0x00); db(0x2c); db(0x28); db(0x48); db(0x4e); db(0xae); + db(0xfc); db(0xe8); db(0x72); db(0xff); db(0x74); db(0xff); db(0xb2); db(0x80); + db(0x67); db(0x48); db(0x26); db(0x00); db(0x2c); db(0x6d); db(0x00); db(0x14); + db(0x41); db(0xed); db(0x00); db(0xc0); db(0x70); db(0x66); db(0x4e); db(0xae); + db(0xff); db(0x7c); db(0x41); db(0xed); db(0x00); db(0xc0); db(0x38); db(0x28); + db(0x00); db(0x64); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x91); db(0xc8); + db(0x43); db(0xed); db(0x00); db(0x38); db(0x70); db(0x00); db(0x30); db(0x3c); + db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); db(0x10); db(0x00); + db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x72); db(0xff); + db(0x74); db(0xff); db(0x4a); db(0x80); db(0x6b); db(0x0c); db(0x45); db(0xed); + db(0x00); db(0x38); db(0x22); db(0x2a); db(0x00); db(0x32); db(0x24); db(0x2a); + db(0x00); db(0x36); db(0x20); db(0x2c); db(0x00); db(0x1c); db(0xb8); db(0x6d); + db(0x00); db(0x2c); db(0x66); db(0x12); db(0xb0); db(0xad); db(0x00); db(0x28); + db(0x66); db(0x0c); db(0xb2); db(0xad); db(0x00); db(0x20); db(0x66); db(0x06); + db(0xb4); db(0xad); db(0x00); db(0x24); db(0x67); db(0x40); db(0x2b); db(0x40); + db(0x00); db(0x28); db(0x2b); db(0x41); db(0x00); db(0x20); db(0x2b); db(0x42); + db(0x00); db(0x24); db(0x3b); db(0x44); db(0x00); db(0x2c); db(0x91); db(0xc8); + db(0x43); db(0xed); db(0x00); db(0x90); db(0x70); db(0x00); db(0x30); db(0x3c); + db(0x00); db(0x58); db(0x22); db(0x3c); db(0x80); db(0x00); db(0x00); db(0x00); + db(0x24); db(0x03); db(0x4e); db(0xae); db(0xfd); db(0x0c); db(0x4a); db(0x80); + db(0x6b); db(0x04); db(0x47); db(0xed); db(0x00); db(0x90); db(0x34); db(0x2d); + db(0x00); db(0x2c); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x01); + db(0x61); db(0x00); db(0xfd); db(0x70); db(0x4e); db(0x90); db(0x4c); db(0xdf); + db(0x7f); db(0x1f); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x3e); db(0x2e); db(0x00); db(0x14); db(0x70); db(0xff); db(0x4e); db(0xae); + db(0xfe); db(0xb6); db(0x7c); db(0x00); db(0x01); db(0xc6); db(0x93); db(0xc9); + db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x28); db(0x40); db(0x70); db(0x14); + db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x70); db(0x00); + db(0x30); db(0x3c); db(0x02); db(0x10); db(0x22); db(0x3c); db(0x00); db(0x01); + db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2a); db(0x40); + db(0x47); db(0xed); db(0x00); db(0x16); db(0x27); db(0x4e); db(0x00); db(0x10); + db(0x27); db(0x4c); db(0x00); db(0x08); db(0x27); db(0x46); db(0x00); db(0x0c); + db(0x70); db(0xff); db(0x37); db(0x40); db(0x00); db(0x00); db(0x43); db(0xed); + db(0x00); db(0x00); db(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); + db(0x13); db(0x7c); db(0x00); db(0x05); db(0x00); db(0x09); db(0x41); db(0xfa); + db(0x07); db(0xf6); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0x02); db(0xda); db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4d); + db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); + db(0x20); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x70); db(0x00); + db(0x53); db(0xab); db(0x00); db(0x1c); db(0x6a); db(0x06); db(0x70); db(0x0a); + db(0x27); db(0x40); db(0x00); db(0x1c); db(0x4a); db(0xab); db(0x00); db(0x14); + db(0x66); db(0x16); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xe0); + db(0x43); db(0xfa); db(0x08); db(0x14); db(0x70); db(0x00); db(0x4e); db(0xae); + db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x14); db(0x67); db(0xd0); + db(0x4a); db(0xab); db(0x00); db(0x18); db(0x66); db(0x18); db(0x4a); db(0xab); + db(0x00); db(0x1c); db(0x66); db(0xc4); db(0x43); db(0xfa); db(0x08); db(0x0a); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x27); db(0x40); - db(0x00); db(0x14); db(0x67); db(0xd0); db(0x4a); db(0xab); db(0x00); db(0x18); - db(0x66); db(0x18); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xc4); - db(0x43); db(0xfa); db(0x08); db(0x0a); db(0x70); db(0x00); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x27); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); - db(0xff); db(0xb4); db(0x4a); db(0xad); db(0x02); db(0x08); db(0x66); db(0x38); - db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0xa6); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); - db(0x06); db(0xea); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x8c); - db(0x41); db(0xfa); db(0x06); db(0xd8); db(0x70); db(0x00); db(0x72); db(0x00); - db(0x61); db(0x00); db(0xfd); db(0x16); db(0x2b); db(0x40); db(0x02); db(0x08); - db(0x67); db(0x00); db(0x02); db(0x42); db(0x60); db(0x00); db(0xff); db(0x76); - db(0x4a); db(0xad); db(0x02); db(0x0c); db(0x66); db(0x48); db(0x4a); db(0xab); - db(0x00); db(0x1c); db(0x66); db(0x00); db(0xff); db(0x68); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); - db(0x06); db(0xb7); db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x24); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4a); db(0x82); db(0x67); db(0x00); - db(0xff); db(0x4c); db(0x41); db(0xfa); db(0x06); db(0xa3); db(0x70); db(0x00); - db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0xd4); db(0x2b); db(0x40); - db(0x02); db(0x0c); db(0x67); db(0x00); db(0x02); db(0x00); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfc); db(0x20); - db(0x4e); db(0x90); db(0x60); db(0x00); db(0xff); db(0x28); db(0x0c); db(0x47); - db(0x00); db(0x24); db(0x65); db(0x12); db(0x53); db(0xab); db(0x00); db(0x34); - db(0x6a); db(0x0c); db(0x20); db(0x4b); db(0x61); db(0x00); db(0xfd); db(0xc8); - db(0x70); db(0x32); db(0x27); db(0x40); db(0x00); db(0x34); db(0x22); db(0x6d); - db(0x02); db(0x08); db(0x45); db(0xed); db(0x01); db(0x3c); db(0x33); db(0x7c); - db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x23); db(0x7c); db(0x00); db(0x00); - db(0x00); db(0x16); db(0x00); db(0x24); db(0x23); db(0x4a); db(0x00); db(0x28); - db(0x10); db(0x3a); db(0xfd); db(0x78); db(0x0c); db(0x47); db(0x00); db(0x27); - db(0x65); db(0x00); db(0x01); db(0x62); db(0x08); db(0x00); db(0x00); db(0x01); - db(0x67); db(0x00); db(0x01); db(0x5a); db(0x41); db(0xed); db(0x01); db(0x68); - db(0x25); db(0x48); db(0x00); db(0x0a); db(0x15); db(0x7c); db(0x00); db(0x13); - db(0x00); db(0x04); db(0x15); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x05); - db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x6a); - db(0x00); db(0x06); db(0x42); db(0xa8); db(0x00); db(0x08); db(0x42); db(0x68); - db(0x00); db(0x0c); db(0x22); db(0x3a); db(0xfd); db(0x60); db(0x02); db(0x41); - db(0x00); db(0x07); db(0x70); db(0x07); db(0x90); db(0x41); db(0xe1); db(0x48); - db(0xe9); db(0x48); db(0x35); db(0x40); db(0x00); db(0x08); db(0x31); db(0x7a); - db(0xfd); db(0x34); db(0x00); db(0x0e); db(0x42); db(0x68); db(0x00); db(0x10); - db(0x31); db(0x7a); db(0xfd); db(0x2c); db(0x00); db(0x12); db(0x42); db(0x68); - db(0x00); db(0x14); db(0x31); db(0x7a); db(0xfd); db(0x1a); db(0x00); db(0x16); - db(0x42); db(0x68); db(0x00); db(0x18); db(0x31); db(0x7a); db(0xfd); db(0x12); - db(0x00); db(0x1a); db(0x43); db(0xed); db(0x01); db(0x88); db(0x21); db(0x49); - db(0x00); db(0x1c); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x06); - db(0x30); db(0x3a); db(0xfd); db(0x18); db(0x48); db(0xc0); db(0xe1); db(0x80); - db(0x22); db(0xc0); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x07); - db(0x22); db(0xfa); db(0xfd); db(0x0a); db(0x70); db(0x00); db(0x30); db(0x3a); - db(0xfc); db(0xf2); db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x09); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xe6); - db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x0a); - db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xce); db(0x6b); db(0x14); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x02); db(0x22); db(0xc0); - db(0x30); db(0x3a); db(0xfc); db(0xc6); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x01); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xc0); - db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x03); - db(0x30); db(0x3a); db(0xfc); db(0xba); db(0x48); db(0xc0); db(0xe1); db(0x80); - db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xac); db(0x6b); db(0x10); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x04); db(0x30); db(0x3a); - db(0xfc); db(0xa6); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); - db(0x30); db(0x3a); db(0xfc); db(0x98); db(0x6b); db(0x10); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x05); db(0x30); db(0x3a); db(0xfc); db(0x92); - db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x70); db(0x00); - db(0x30); db(0x3a); db(0xfc); db(0x8e); db(0x6b); db(0x08); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x08); db(0x22); db(0xc0); db(0x42); db(0x91); - db(0x61); db(0x00); db(0xfc); db(0x40); db(0x36); db(0x3c); db(0x00); db(0x68); - db(0x74); db(0x01); db(0x28); db(0x3a); db(0xfc); db(0x70); db(0x20); db(0x04); - db(0xc0); db(0x82); db(0x22); db(0x2b); db(0x00); db(0x04); db(0xc2); db(0x82); - db(0xb2); db(0x80); db(0x67); db(0x22); db(0x42); db(0x92); db(0x35); db(0x7c); - db(0x02); db(0x00); db(0x00); db(0x04); db(0x42); db(0xaa); db(0x00); db(0x0a); - db(0x32); db(0x03); db(0x4a); db(0x00); db(0x66); db(0x04); db(0x08); db(0xc1); - db(0x00); db(0x07); db(0x35); db(0x41); db(0x00); db(0x06); db(0x42); db(0x6a); - db(0x00); db(0x08); db(0x61); db(0x00); db(0xfc); db(0x06); db(0x52); db(0x43); - db(0xd4); db(0x42); db(0x0c); db(0x42); db(0x00); db(0x08); db(0x66); db(0xc6); - db(0x27); db(0x44); db(0x00); db(0x04); db(0x10); db(0x3a); db(0xfc); db(0x0c); - db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x00); db(0xfd); db(0x7e); - db(0x42); db(0x92); db(0x35); db(0x7c); db(0x04); db(0x00); db(0x00); db(0x04); - db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); - db(0x20); db(0x6b); db(0x00); db(0x14); db(0x30); db(0x3a); db(0xfc); db(0x14); - db(0x32); db(0x28); db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); - db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0a); - db(0x30); db(0x3a); db(0xfc); db(0x02); db(0x32); db(0x28); db(0x00); db(0x2e); + db(0x00); db(0x18); db(0x67); db(0x00); db(0xff); db(0xb4); db(0x4a); db(0xad); + db(0x02); db(0x08); db(0x66); db(0x38); db(0x4a); db(0xab); db(0x00); db(0x1c); + db(0x66); db(0xa6); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); + db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xea); db(0x4e); db(0xae); + db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); + db(0x4a); db(0x82); db(0x67); db(0x8c); db(0x41); db(0xfa); db(0x06); db(0xd8); + db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfd); db(0x16); + db(0x2b); db(0x40); db(0x02); db(0x08); db(0x67); db(0x00); db(0x02); db(0x42); + db(0x60); db(0x00); db(0xff); db(0x76); db(0x4a); db(0xad); db(0x02); db(0x0c); + db(0x66); db(0x48); db(0x4a); db(0xab); db(0x00); db(0x1c); db(0x66); db(0x00); + db(0xff); db(0x68); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); + db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x06); db(0xb7); db(0x4e); db(0xae); + db(0xfe); db(0xec); db(0x24); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x76); + db(0x4a); db(0x82); db(0x67); db(0x00); db(0xff); db(0x4c); db(0x41); db(0xfa); + db(0x06); db(0xa3); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0xfc); db(0xd4); db(0x2b); db(0x40); db(0x02); db(0x0c); db(0x67); db(0x00); + db(0x02); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x00); + db(0x61); db(0x00); db(0xfc); db(0x20); db(0x4e); db(0x90); db(0x60); db(0x00); + db(0xff); db(0x28); db(0x0c); db(0x47); db(0x00); db(0x24); db(0x65); db(0x12); + db(0x53); db(0xab); db(0x00); db(0x34); db(0x6a); db(0x0c); db(0x20); db(0x4b); + db(0x61); db(0x00); db(0xfd); db(0xc8); db(0x70); db(0x32); db(0x27); db(0x40); + db(0x00); db(0x34); db(0x22); db(0x6d); db(0x02); db(0x08); db(0x45); db(0xed); + db(0x01); db(0x3c); db(0x33); db(0x7c); db(0x00); db(0x0b); db(0x00); db(0x1c); + db(0x23); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x16); db(0x00); db(0x24); + db(0x23); db(0x4a); db(0x00); db(0x28); db(0x10); db(0x3a); db(0xfd); db(0x78); + db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); db(0x01); db(0x62); + db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x00); db(0x01); db(0x5a); + db(0x41); db(0xed); db(0x01); db(0x68); db(0x25); db(0x48); db(0x00); db(0x0a); + db(0x15); db(0x7c); db(0x00); db(0x13); db(0x00); db(0x04); db(0x15); db(0x7c); + db(0x00); db(0x03); db(0x00); db(0x05); db(0x42); db(0x90); db(0x42); db(0xa8); + db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0xa8); + db(0x00); db(0x08); db(0x42); db(0x68); db(0x00); db(0x0c); db(0x22); db(0x3a); + db(0xfd); db(0x60); db(0x02); db(0x41); db(0x00); db(0x07); db(0x70); db(0x07); + db(0x90); db(0x41); db(0xe1); db(0x48); db(0xe9); db(0x48); db(0x35); db(0x40); + db(0x00); db(0x08); db(0x31); db(0x7a); db(0xfd); db(0x34); db(0x00); db(0x0e); + db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x7a); db(0xfd); db(0x2c); + db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); db(0x31); db(0x7a); + db(0xfd); db(0x1a); db(0x00); db(0x16); db(0x42); db(0x68); db(0x00); db(0x18); + db(0x31); db(0x7a); db(0xfd); db(0x12); db(0x00); db(0x1a); db(0x43); db(0xed); + db(0x01); db(0x88); db(0x21); db(0x49); db(0x00); db(0x1c); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x06); db(0x30); db(0x3a); db(0xfd); db(0x18); + db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x07); db(0x22); db(0xfa); db(0xfd); db(0x0a); + db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfc); db(0xf2); db(0x6b); db(0x08); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); db(0x22); db(0xc0); + db(0x30); db(0x3a); db(0xfc); db(0xe6); db(0x6b); db(0x08); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfc); db(0xce); db(0x6b); db(0x14); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0xc6); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); db(0x22); db(0xc0); + db(0x30); db(0x3a); db(0xfc); db(0xc0); db(0x6b); db(0x10); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x3a); db(0xfc); db(0xba); + db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); + db(0xfc); db(0xac); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x04); db(0x30); db(0x3a); db(0xfc); db(0xa6); db(0x48); db(0xc0); + db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x3a); db(0xfc); db(0x98); + db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x05); + db(0x30); db(0x3a); db(0xfc); db(0x92); db(0x48); db(0xc0); db(0xe1); db(0x80); + db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x3a); db(0xfc); db(0x8e); + db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x08); + db(0x22); db(0xc0); db(0x42); db(0x91); db(0x61); db(0x00); db(0xfc); db(0x40); + db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); db(0x28); db(0x3a); + db(0xfc); db(0x70); db(0x20); db(0x04); db(0xc0); db(0x82); db(0x22); db(0x2b); + db(0x00); db(0x04); db(0xc2); db(0x82); db(0xb2); db(0x80); db(0x67); db(0x22); + db(0x42); db(0x92); db(0x35); db(0x7c); db(0x02); db(0x00); db(0x00); db(0x04); + db(0x42); db(0xaa); db(0x00); db(0x0a); db(0x32); db(0x03); db(0x4a); db(0x00); + db(0x66); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x07); db(0x35); db(0x41); + db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x61); db(0x00); + db(0xfc); db(0x06); db(0x52); db(0x43); db(0xd4); db(0x42); db(0x0c); db(0x42); + db(0x00); db(0x08); db(0x66); db(0xc6); db(0x27); db(0x44); db(0x00); db(0x04); + db(0x10); db(0x3a); db(0xfc); db(0x0c); db(0x08); db(0x00); db(0x00); db(0x00); + db(0x67); db(0x00); db(0xfd); db(0x7e); db(0x42); db(0x92); db(0x35); db(0x7c); + db(0x04); db(0x00); db(0x00); db(0x04); db(0x42); db(0x6a); db(0x00); db(0x06); + db(0x42); db(0x6a); db(0x00); db(0x08); db(0x20); db(0x6b); db(0x00); db(0x14); + db(0x30); db(0x3a); db(0xfc); db(0x14); db(0x32); db(0x28); db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x6a); db(0x02); db(0x70); db(0x00); - db(0x35); db(0x40); db(0x00); db(0x0c); db(0x61); db(0x00); db(0xfb); db(0x78); - db(0x60); db(0x00); db(0xfd); db(0x3a); db(0x4e); db(0x75); db(0x4a); db(0xa9); - db(0x02); db(0x08); db(0x67); db(0x14); db(0x4a); db(0xa9); db(0x02); db(0x0c); - db(0x67); db(0x0e); db(0x30); db(0x3a); db(0xfb); db(0xb0); db(0xb0); db(0x69); - db(0x00); db(0x16); db(0x67); db(0x14); db(0x33); db(0x40); db(0x00); db(0x16); - db(0x2c); db(0x69); db(0x00); db(0x26); db(0x20); db(0x29); db(0x00); db(0x22); - db(0x22); db(0x69); db(0x00); db(0x1e); db(0x4e); db(0xae); db(0xfe); db(0xbc); - db(0x53); db(0x69); db(0x00); db(0x46); db(0x6a); db(0x12); db(0x33); db(0x7c); - db(0x00); db(0x32); db(0x00); db(0x46); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x02); db(0x61); db(0x00); db(0xf9); db(0xea); db(0x4e); db(0x90); - db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); db(0x70); db(0x00); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x06); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); db(0xf9); db(0xd0); - db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x00); db(0x67); db(0x42); - db(0x2c); db(0x78); db(0x00); db(0x04); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x00); db(0x88); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); - db(0x00); db(0x40); db(0x2a); db(0x40); db(0x2b); db(0x4e); db(0x00); db(0x14); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0e); db(0x61); db(0x00); - db(0xf9); db(0x9e); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa); - db(0x04); db(0x6c); db(0x43); db(0xfa); db(0x01); db(0x14); db(0x70); db(0xf6); - db(0x22); db(0x3c); db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00); - db(0xee); db(0xcc); db(0x70); db(0x00); db(0x4c); db(0xdf); db(0x60); db(0x00); - db(0x4e); db(0x75); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0a); - db(0x61); db(0x00); db(0xf9); db(0x74); db(0x4e); db(0x90); db(0x4e); db(0x75); - db(0x61); db(0xf0); db(0x20); db(0x0d); db(0x67); db(0x1c); db(0x2c); db(0x6d); - db(0x00); db(0x14); db(0x20); db(0x2d); db(0x00); db(0x18); db(0x67); db(0x06); - db(0x22); db(0x40); db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x22); db(0x4d); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x4e); db(0xae); - db(0xff); db(0x2e); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x38); db(0x3e); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); - db(0x03); db(0xfa); db(0x22); db(0x08); db(0x24); db(0x3c); db(0x00); db(0x00); - db(0x03); db(0xed); db(0x4e); db(0xae); db(0xff); db(0xe2); db(0x28); db(0x00); - db(0x67); db(0x4c); db(0x45); db(0xed); db(0x00); db(0x68); db(0x42); db(0x92); - db(0x34); db(0xaa); db(0x00); db(0x02); db(0x24); db(0x0a); db(0x54); db(0x82); - db(0x76); db(0x02); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); - db(0xb6); db(0x80); db(0x66); db(0x32); db(0x0c); db(0x92); db(0x50); db(0x4e); - db(0x54); db(0x52); db(0x66); db(0xe4); db(0x24); db(0x0a); db(0x76); db(0x04); - db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); db(0x24); db(0x0a); - db(0x76); db(0x20); db(0x22); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xd6); - db(0xb6); db(0x80); db(0x66); db(0x12); db(0x4a); db(0x6a); db(0x00); db(0x10); - db(0x66); db(0xc4); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x10); - db(0x61); db(0x00); db(0xf8); db(0xe4); db(0x4e); db(0x90); db(0x22); db(0x04); - db(0x67); db(0x04); db(0x4e); db(0xae); db(0xff); db(0xdc); db(0x4c); db(0xdf); - db(0x7c); db(0x1c); db(0x4e); db(0x75); db(0x2c); db(0x6d); db(0x00); db(0x18); - db(0x41); db(0xfa); db(0x03); db(0x72); db(0x22); db(0x08); db(0x74); db(0xfe); - db(0x4e); db(0xae); db(0xff); db(0xac); db(0x22); db(0x00); db(0x67); db(0x34); - db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x45); db(0xed); db(0x00); db(0x38); db(0x70); db(0xff); db(0x4e); db(0xae); - db(0xfe); db(0xb6); db(0x15); db(0x40); db(0x00); db(0x14); db(0x41); db(0xfa); - db(0x03); db(0x62); db(0x24); db(0x88); db(0x25); db(0x7c); db(0x00); db(0x00); - db(0x00); db(0x12); db(0x00); db(0x0c); db(0x25); db(0x6d); db(0x00); db(0x08); - db(0x00); db(0x10); db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x22); db(0x0a); - db(0x4e); db(0xae); db(0xfc); db(0x88); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x10); - db(0x00); db(0x00); db(0x00); db(0x00); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x0d); db(0x61); db(0x00); db(0xf8); db(0x72); db(0x4e); db(0x90); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xfc); db(0x2a); db(0x40); - db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x93); db(0xc9); db(0x4e); db(0xae); - db(0xfe); db(0xda); db(0x2b); db(0x40); db(0x00); db(0x08); db(0x43); db(0xfa); - db(0x03); db(0x8e); db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); - db(0x2b); db(0x40); db(0x00); db(0x18); db(0x67); db(0x00); db(0xfe); db(0xda); - db(0x2c); db(0x40); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x41); db(0xfa); db(0x02); db(0xc6); db(0x22); db(0x08); db(0x74); db(0xfe); - db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0xea); - db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x72); db(0x32); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xb0); + db(0x35); db(0x40); db(0x00); db(0x0a); db(0x30); db(0x3a); db(0xfc); db(0x02); + db(0x32); db(0x28); db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); + db(0x6a); db(0x02); db(0x70); db(0x00); db(0x35); db(0x40); db(0x00); db(0x0c); + db(0x61); db(0x00); db(0xfb); db(0x78); db(0x60); db(0x00); db(0xfd); db(0x3a); + db(0x4e); db(0x75); db(0x4a); db(0xa9); db(0x02); db(0x08); db(0x67); db(0x14); + db(0x4a); db(0xa9); db(0x02); db(0x0c); db(0x67); db(0x0e); db(0x30); db(0x3a); + db(0xfb); db(0xb0); db(0xb0); db(0x69); db(0x00); db(0x16); db(0x67); db(0x14); + db(0x33); db(0x40); db(0x00); db(0x16); db(0x2c); db(0x69); db(0x00); db(0x26); + db(0x20); db(0x29); db(0x00); db(0x22); db(0x22); db(0x69); db(0x00); db(0x1e); + db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x53); db(0x69); db(0x00); db(0x46); + db(0x6a); db(0x12); db(0x33); db(0x7c); db(0x00); db(0x32); db(0x00); db(0x46); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x02); db(0x61); db(0x00); + db(0xf9); db(0xea); db(0x4e); db(0x90); db(0x41); db(0xf9); db(0x00); db(0xdf); + db(0xf0); db(0x00); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x00); db(0x06); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x11); + db(0x61); db(0x00); db(0xf9); db(0xd0); db(0x4e); db(0x90); db(0x08); db(0x00); + db(0x00); db(0x00); db(0x67); db(0x42); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x20); db(0x3c); db(0x00); db(0x00); db(0x00); db(0x88); db(0x22); db(0x3c); + db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0x40); db(0x2a); db(0x40); + db(0x2b); db(0x4e); db(0x00); db(0x14); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x0e); db(0x61); db(0x00); db(0xf9); db(0x9e); db(0x20); db(0x0d); + db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x04); db(0x6c); db(0x43); db(0xfa); + db(0x01); db(0x14); db(0x70); db(0xf6); db(0x22); db(0x3c); db(0x00); db(0x00); + db(0x27); db(0x10); db(0x61); db(0x00); db(0xee); db(0x12); db(0x70); db(0x00); + db(0x4c); db(0xdf); db(0x60); db(0x00); db(0x4e); db(0x75); db(0x30); db(0x3c); + db(0xff); db(0x38); db(0x72); db(0x0a); db(0x61); db(0x00); db(0xf9); db(0x74); + db(0x4e); db(0x90); db(0x4e); db(0x75); db(0x61); db(0xf0); db(0x20); db(0x0d); + db(0x67); db(0x1c); db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x20); db(0x2d); + db(0x00); db(0x18); db(0x67); db(0x06); db(0x22); db(0x40); db(0x4e); db(0xae); + db(0xfe); db(0x62); db(0x22); db(0x4d); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x00); db(0x88); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x3e); db(0x2c); db(0x6d); + db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0xfa); db(0x22); db(0x08); + db(0x24); db(0x3c); db(0x00); db(0x00); db(0x03); db(0xed); db(0x4e); db(0xae); + db(0xff); db(0xe2); db(0x28); db(0x00); db(0x67); db(0x4c); db(0x45); db(0xed); + db(0x00); db(0x68); db(0x42); db(0x92); db(0x34); db(0xaa); db(0x00); db(0x02); + db(0x24); db(0x0a); db(0x54); db(0x82); db(0x76); db(0x02); db(0x22); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); db(0x66); db(0x32); + db(0x0c); db(0x92); db(0x50); db(0x4e); db(0x54); db(0x52); db(0x66); db(0xe4); + db(0x24); db(0x0a); db(0x76); db(0x04); db(0x22); db(0x04); db(0x4e); db(0xae); + db(0xff); db(0xd6); db(0x24); db(0x0a); db(0x76); db(0x20); db(0x22); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0xd6); db(0xb6); db(0x80); db(0x66); db(0x12); + db(0x4a); db(0x6a); db(0x00); db(0x10); db(0x66); db(0xc4); db(0x30); db(0x3c); + db(0xff); db(0x38); db(0x72); db(0x10); db(0x61); db(0x00); db(0xf8); db(0xe4); + db(0x4e); db(0x90); db(0x22); db(0x04); db(0x67); db(0x04); db(0x4e); db(0xae); + db(0xff); db(0xdc); db(0x4c); db(0xdf); db(0x7c); db(0x1c); db(0x4e); db(0x75); + db(0x2c); db(0x6d); db(0x00); db(0x18); db(0x41); db(0xfa); db(0x03); db(0x72); db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0xa4); db(0x22); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0xa6); db(0x2c); db(0x6d); db(0x00); db(0x14); - db(0x61); db(0x00); db(0xf8); db(0x20); db(0x72); db(0x00); db(0x32); db(0x3c); - db(0x00); db(0x34); db(0x61); db(0x00); db(0xf8); db(0x64); db(0x28); db(0x40); - db(0x4a); db(0x80); db(0x67); db(0x00); db(0xfe); db(0x84); db(0x70); db(0x00); - db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); - db(0x72); db(0x00); db(0x20); db(0x2d); db(0x00); db(0x0c); db(0x41); db(0xfa); - db(0x02); db(0x89); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x44); - db(0x4a); db(0x80); db(0x66); db(0xe2); db(0x20); db(0x6c); db(0x00); db(0x14); - db(0x0c); db(0x68); db(0x00); db(0x25); db(0x00); db(0x14); db(0x64); db(0x0c); - db(0x61); db(0x00); db(0xfe); db(0x48); db(0x70); db(0x00); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x60); db(0xf8); db(0x61); db(0x00); db(0xfe); db(0xe6); - db(0x41); db(0xed); db(0x00); db(0x1c); db(0x29); db(0x48); db(0x00); db(0x28); - db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x39); db(0x7c); - db(0x00); db(0x0c); db(0x00); db(0x1c); db(0x2b); db(0x4d); db(0x00); db(0x2c); - db(0x41); db(0xfa); db(0x01); db(0x60); db(0x2b); db(0x48); db(0x00); db(0x24); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0f); db(0x61); db(0x00); db(0xf7); db(0x88); - db(0x4e); db(0x90); db(0x4a); db(0xad); db(0x00); db(0x00); db(0x66); db(0x1c); - db(0x70); db(0x00); db(0x74); db(0x00); db(0x14); db(0x2d); db(0x00); db(0x4c); - db(0x05); db(0xc0); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); - db(0xfe); db(0xc2); db(0x05); db(0x00); db(0x67); db(0x06); db(0x61); db(0x00); - db(0xfe); db(0x1e); db(0x60); db(0xe4); db(0x20); db(0x2d); db(0x00); db(0x00); - db(0x67); db(0x00); db(0x00); db(0x76); db(0x72); db(0x01); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x2b); db(0x40); db(0x00); db(0x04); db(0x30); db(0x3c); - db(0xff); db(0x38); db(0x72); db(0x0c); db(0x61); db(0x00); db(0xf7); db(0x48); - db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x40); db(0x4a); db(0xad); - db(0x00); db(0x04); db(0x67); db(0x3a); db(0x39); db(0x7c); db(0x00); db(0x03); - db(0x00); db(0x1c); db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); - db(0x00); db(0x20); db(0x29); db(0x6d); db(0x00); db(0x00); db(0x00); db(0x24); - db(0x29); db(0x6d); db(0x00); db(0x04); db(0x00); db(0x28); db(0x42); db(0xac); - db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x2b); db(0x6c); db(0x00); db(0x30); - db(0x00); db(0x10); db(0x39); db(0x7c); db(0x00); db(0x04); db(0x00); db(0x1c); - db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x20); db(0x2d); - db(0x00); db(0x00); db(0x42); db(0xad); db(0x00); db(0x00); db(0x22); db(0x2d); - db(0x00); db(0x04); db(0x67); db(0x00); db(0xff); db(0x74); db(0x22); db(0x41); - db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x6a); - db(0x39); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x1c); db(0x41); db(0xed); - db(0x00); db(0x30); db(0x42); db(0x90); db(0x42); db(0xa8); db(0x00); db(0x04); - db(0x42); db(0x2c); db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x2c); - db(0x42); db(0xac); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); - db(0x70); db(0x08); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x0c); db(0xad); db(0x46); db(0x4f); - db(0x52); db(0x4d); db(0x00); db(0x30); db(0x66); db(0x52); db(0x20); db(0x2d); - db(0x00); db(0x34); db(0x67); db(0x4c); db(0x6b); db(0x4a); db(0x2b); db(0x6c); - db(0x00); db(0x30); db(0x00); db(0x10); db(0x50); db(0x80); db(0x24); db(0x00); - db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x4a); db(0x80); - db(0x67); db(0x36); db(0x24); db(0x40); db(0x20); db(0x4a); db(0x20); db(0xed); - db(0x00); db(0x30); db(0x20); db(0xed); db(0x00); db(0x34); db(0x29); db(0x48); - db(0x00); db(0x28); db(0x20); db(0x02); db(0x51); db(0x80); db(0x29); db(0x40); + db(0x22); db(0x00); db(0x67); db(0x34); db(0x4e); db(0xae); db(0xff); db(0xa6); + db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x45); db(0xed); db(0x00); db(0x38); + db(0x70); db(0xff); db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x15); db(0x40); + db(0x00); db(0x14); db(0x41); db(0xfa); db(0x03); db(0x62); db(0x24); db(0x88); + db(0x25); db(0x7c); db(0x00); db(0x00); db(0x00); db(0x12); db(0x00); db(0x0c); + db(0x25); db(0x6d); db(0x00); db(0x08); db(0x00); db(0x10); db(0x2c); db(0x6d); + db(0x00); db(0x18); db(0x22); db(0x0a); db(0x4e); db(0xae); db(0xfc); db(0x88); + db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x4e); db(0x75); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0d); db(0x61); db(0x00); + db(0xf8); db(0x72); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0xfc); db(0x2a); db(0x40); db(0x2c); db(0x6d); db(0x00); db(0x14); + db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x2b); db(0x40); + db(0x00); db(0x08); db(0x43); db(0xfa); db(0x03); db(0x8e); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x2b); db(0x40); db(0x00); db(0x18); + db(0x67); db(0x00); db(0xfe); db(0xda); db(0x2c); db(0x40); db(0x72); db(0x32); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xc6); + db(0x22); db(0x08); db(0x74); db(0xfe); db(0x4e); db(0xae); db(0xff); db(0xac); + db(0x4a); db(0x80); db(0x67); db(0xea); db(0x22); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0xa6); db(0x72); db(0x32); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x41); db(0xfa); db(0x02); db(0xb0); db(0x22); db(0x08); db(0x74); db(0xfe); + db(0x4e); db(0xae); db(0xff); db(0xac); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0xa4); db(0x22); db(0x00); db(0x4e); db(0xae); db(0xff); db(0xa6); + db(0x2c); db(0x6d); db(0x00); db(0x14); db(0x61); db(0x00); db(0xf8); db(0x20); + db(0x72); db(0x00); db(0x32); db(0x3c); db(0x00); db(0x34); db(0x61); db(0x00); + db(0xf8); db(0x64); db(0x28); db(0x40); db(0x4a); db(0x80); db(0x67); db(0x00); + db(0xfe); db(0x84); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x72); db(0x00); db(0x20); db(0x2d); + db(0x00); db(0x0c); db(0x41); db(0xfa); db(0x02); db(0x89); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x44); db(0x4a); db(0x80); db(0x66); db(0xe2); + db(0x20); db(0x6c); db(0x00); db(0x14); db(0x0c); db(0x68); db(0x00); db(0x25); + db(0x00); db(0x14); db(0x64); db(0x0c); db(0x61); db(0x00); db(0xfe); db(0x48); + db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x60); db(0xf8); + db(0x61); db(0x00); db(0xfe); db(0xe6); db(0x41); db(0xed); db(0x00); db(0x1c); + db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); + db(0x00); db(0x24); db(0x39); db(0x7c); db(0x00); db(0x0c); db(0x00); db(0x1c); + db(0x2b); db(0x4d); db(0x00); db(0x2c); db(0x41); db(0xfa); db(0x01); db(0x60); + db(0x2b); db(0x48); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); + db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0f); + db(0x61); db(0x00); db(0xf7); db(0x88); db(0x4e); db(0x90); db(0x4a); db(0xad); + db(0x00); db(0x00); db(0x66); db(0x1c); db(0x70); db(0x00); db(0x74); db(0x00); + db(0x14); db(0x2d); db(0x00); db(0x4c); db(0x05); db(0xc0); db(0x08); db(0xc0); + db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x05); db(0x00); + db(0x67); db(0x06); db(0x61); db(0x00); db(0xfe); db(0x1e); db(0x60); db(0xe4); + db(0x20); db(0x2d); db(0x00); db(0x00); db(0x67); db(0x00); db(0x00); db(0x76); + db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x2b); db(0x40); + db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0c); + db(0x61); db(0x00); db(0xf7); db(0x48); db(0x4e); db(0x90); db(0x4a); db(0x80); + db(0x67); db(0x40); db(0x4a); db(0xad); db(0x00); db(0x04); db(0x67); db(0x3a); + db(0x39); db(0x7c); db(0x00); db(0x03); db(0x00); db(0x1c); db(0x42); db(0x2c); + db(0x00); db(0x1f); db(0x42); db(0xac); db(0x00); db(0x20); db(0x29); db(0x6d); + db(0x00); db(0x00); db(0x00); db(0x24); db(0x29); db(0x6d); db(0x00); db(0x04); + db(0x00); db(0x28); db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); + db(0x00); db(0x30); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); + db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); db(0x39); db(0x7c); + db(0x00); db(0x04); db(0x00); db(0x1c); db(0x22); db(0x4c); db(0x4e); db(0xae); + db(0xfe); db(0x38); db(0x20); db(0x2d); db(0x00); db(0x00); db(0x42); db(0xad); + db(0x00); db(0x00); db(0x22); db(0x2d); db(0x00); db(0x04); db(0x67); db(0x00); + db(0xff); db(0x74); db(0x22); db(0x41); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x60); db(0x00); db(0xff); db(0x6a); db(0x39); db(0x7c); db(0x00); db(0x02); + db(0x00); db(0x1c); db(0x41); db(0xed); db(0x00); db(0x30); db(0x42); db(0x90); + db(0x42); db(0xa8); db(0x00); db(0x04); db(0x42); db(0x2c); db(0x00); db(0x1f); + db(0x42); db(0xac); db(0x00); db(0x2c); db(0x42); db(0xac); db(0x00); db(0x30); + db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x08); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0b); db(0x61); db(0x00); - db(0xf6); db(0x6e); db(0x20); db(0x2c); db(0x00); db(0x20); db(0x4e); db(0x90); - db(0x22); db(0x4a); db(0x20); db(0x02); db(0x4e); db(0xae); db(0xff); db(0x2e); - db(0x4a); db(0xac); db(0x00); db(0x20); db(0x67); db(0x00); db(0xfe); db(0xda); - db(0x41); db(0xed); db(0x00); db(0x30); db(0x29); db(0x48); db(0x00); db(0x28); - db(0x70); db(0x01); db(0x29); db(0x40); db(0x00); db(0x24); db(0x42); db(0xac); - db(0x00); db(0x20); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x60); db(0xde); db(0x41); db(0xe8); db(0xff); db(0xe4); db(0x20); db(0x29); - db(0x00); db(0x08); db(0xb0); db(0xa8); db(0x00); db(0x10); db(0x67); db(0x1a); - db(0x21); db(0x40); db(0x00); db(0x10); db(0x2f); db(0x0e); db(0x2c); db(0x68); - db(0x00); db(0x14); db(0x22); db(0x68); db(0x00); db(0x08); db(0x70); db(0x00); - db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x4e); db(0xae); db(0xfe); db(0xbc); - db(0x2c); db(0x5f); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x74); db(0xff); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x11); db(0x61); db(0x00); db(0xf6); db(0x02); db(0x4e); db(0x90); - db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x38); db(0x74); db(0x00); - db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x41); db(0xee); db(0x01); db(0x5e); - db(0x43); db(0xfa); db(0x00); db(0x62); db(0x4e); db(0xae); db(0xfe); db(0xec); - db(0x4a); db(0x80); db(0x67); db(0x1e); db(0x20); db(0x40); db(0x43); db(0xfa); - db(0x00); db(0x22); db(0x24); db(0x68); db(0xff); db(0xe4); db(0x21); db(0x49); - db(0xff); db(0xe4); db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x65); db(0x61); db(0x00); db(0xf5); db(0xca); db(0x4e); db(0x90); - db(0x74); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x76); db(0x20); db(0x02); - db(0x4e); db(0x75); db(0x59); db(0x8f); db(0x48); db(0xe7); db(0xc0); db(0x80); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x66); db(0x61); db(0x00); - db(0xf5); db(0xae); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03); - db(0x4e); db(0x75); db(0x69); db(0x6e); db(0x70); db(0x75); db(0x74); db(0x2e); - db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x74); - db(0x69); db(0x6d); db(0x65); db(0x72); db(0x2e); db(0x64); db(0x65); db(0x76); - db(0x69); db(0x63); db(0x65); db(0x00); db(0x63); db(0x6f); db(0x6e); db(0x73); - db(0x6f); db(0x6c); db(0x65); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); - db(0x63); db(0x65); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x00); - db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x00); db(0x44); db(0x45); - db(0x56); db(0x53); db(0x3a); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); - db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); - db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); - db(0x00); db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); - db(0x72); db(0x64); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); - db(0x65); db(0x00); db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x45); db(0x6e); - db(0x76); db(0x2f); db(0x53); db(0x79); db(0x73); db(0x2f); db(0x50); db(0x6f); - db(0x69); db(0x6e); db(0x74); db(0x65); db(0x72); db(0x2e); db(0x70); db(0x72); - db(0x65); db(0x66); db(0x73); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); - db(0x63); db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); - db(0x64); db(0x20); db(0x73); db(0x68); db(0x61); db(0x72); db(0x69); db(0x6e); - db(0x67); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); - db(0x75); db(0x73); db(0x65); db(0x20); db(0x64); db(0x72); db(0x69); db(0x76); - db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); - db(0x69); db(0x6c); db(0x65); db(0x73); db(0x79); db(0x73); db(0x74); db(0x65); - db(0x6d); db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); - db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); - db(0x6e); db(0x74); db(0x65); db(0x72); db(0x00); db(0x55); db(0x41); db(0x45); - db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); db(0x6f); - db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x20); db(0x70); db(0x72); - db(0x6f); db(0x63); db(0x65); db(0x73); db(0x73); db(0x00); db(0x64); db(0x6f); - db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); - db(0x79); db(0x00); db(0x69); db(0x6e); db(0x74); db(0x75); db(0x69); db(0x74); - db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); - db(0x61); db(0x72); db(0x79); db(0x00); db(0x67); db(0x72); db(0x61); db(0x70); - db(0x68); db(0x69); db(0x63); db(0x73); db(0x2e); db(0x6c); db(0x69); db(0x62); - db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x65); db(0x78); db(0x70); - db(0x61); db(0x6e); db(0x73); db(0x69); db(0x6f); db(0x6e); db(0x2e); db(0x6c); - db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x46); - db(0x69); db(0x6c); db(0x65); db(0x53); db(0x79); db(0x73); db(0x74); db(0x65); - db(0x6d); db(0x2e); db(0x72); db(0x65); db(0x73); db(0x6f); db(0x75); db(0x72); - db(0x63); db(0x65); db(0x00); db(0x6d); db(0x65); db(0x67); db(0x61); db(0x63); - db(0x68); db(0x69); db(0x70); db(0x20); db(0x6d); db(0x65); db(0x6d); db(0x6f); - db(0x72); db(0x79); db(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x0c); db(0xad); db(0x46); db(0x4f); db(0x52); db(0x4d); db(0x00); db(0x30); + db(0x66); db(0x52); db(0x20); db(0x2d); db(0x00); db(0x34); db(0x67); db(0x4c); + db(0x6b); db(0x4a); db(0x2b); db(0x6c); db(0x00); db(0x30); db(0x00); db(0x10); + db(0x50); db(0x80); db(0x24); db(0x00); db(0x72); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x36); db(0x24); db(0x40); + db(0x20); db(0x4a); db(0x20); db(0xed); db(0x00); db(0x30); db(0x20); db(0xed); + db(0x00); db(0x34); db(0x29); db(0x48); db(0x00); db(0x28); db(0x20); db(0x02); + db(0x51); db(0x80); db(0x29); db(0x40); db(0x00); db(0x24); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x0b); db(0x61); db(0x00); db(0xf6); db(0x6e); db(0x20); db(0x2c); + db(0x00); db(0x20); db(0x4e); db(0x90); db(0x22); db(0x4a); db(0x20); db(0x02); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4a); db(0xac); db(0x00); db(0x20); + db(0x67); db(0x00); db(0xfe); db(0xda); db(0x41); db(0xed); db(0x00); db(0x30); + db(0x29); db(0x48); db(0x00); db(0x28); db(0x70); db(0x01); db(0x29); db(0x40); + db(0x00); db(0x24); db(0x42); db(0xac); db(0x00); db(0x20); db(0x22); db(0x4c); + db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x60); db(0xde); db(0x41); db(0xe8); + db(0xff); db(0xe4); db(0x20); db(0x29); db(0x00); db(0x08); db(0xb0); db(0xa8); + db(0x00); db(0x10); db(0x67); db(0x1a); db(0x21); db(0x40); db(0x00); db(0x10); + db(0x2f); db(0x0e); db(0x2c); db(0x68); db(0x00); db(0x14); db(0x22); db(0x68); + db(0x00); db(0x08); db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x0d); + db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x2c); db(0x5f); db(0x70); db(0x00); + db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x74); db(0xff); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x11); db(0x61); db(0x00); + db(0xf6); db(0x02); db(0x4e); db(0x90); db(0x08); db(0x00); db(0x00); db(0x01); + db(0x67); db(0x38); db(0x74); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x41); db(0xee); db(0x01); db(0x5e); db(0x43); db(0xfa); db(0x00); db(0x62); + db(0x4e); db(0xae); db(0xfe); db(0xec); db(0x4a); db(0x80); db(0x67); db(0x1e); + db(0x20); db(0x40); db(0x43); db(0xfa); db(0x00); db(0x22); db(0x24); db(0x68); + db(0xff); db(0xe4); db(0x21); db(0x49); db(0xff); db(0xe4); db(0x22); db(0x48); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x65); db(0x61); db(0x00); + db(0xf5); db(0xca); db(0x4e); db(0x90); db(0x74); db(0x01); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x20); db(0x02); db(0x4e); db(0x75); db(0x59); db(0x8f); + db(0x48); db(0xe7); db(0xc0); db(0x80); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x66); db(0x61); db(0x00); db(0xf5); db(0xae); db(0x4e); db(0x90); + db(0x4c); db(0xdf); db(0x01); db(0x03); db(0x4e); db(0x75); db(0x69); db(0x6e); + db(0x70); db(0x75); db(0x74); db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); + db(0x63); db(0x65); db(0x00); db(0x74); db(0x69); db(0x6d); db(0x65); db(0x72); + db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); + db(0x63); db(0x6f); db(0x6e); db(0x73); db(0x6f); db(0x6c); db(0x65); db(0x2e); + db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x44); + db(0x45); db(0x56); db(0x53); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); + db(0x3a); db(0x00); db(0x44); db(0x45); db(0x56); db(0x53); db(0x3a); db(0x63); + db(0x6c); db(0x69); db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); + db(0x2e); db(0x64); db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); + db(0x52); db(0x41); db(0x4d); db(0x3a); db(0x00); db(0x63); db(0x6c); db(0x69); + db(0x70); db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x2e); db(0x64); + db(0x65); db(0x76); db(0x69); db(0x63); db(0x65); db(0x00); db(0x52); db(0x41); + db(0x4d); db(0x3a); db(0x45); db(0x6e); db(0x76); db(0x2f); db(0x53); db(0x79); + db(0x73); db(0x2f); db(0x50); db(0x6f); db(0x69); db(0x6e); db(0x74); db(0x65); + db(0x72); db(0x2e); db(0x70); db(0x72); db(0x65); db(0x66); db(0x73); db(0x00); + db(0x55); db(0x41); db(0x45); db(0x20); db(0x63); db(0x6c); db(0x69); db(0x70); + db(0x62); db(0x6f); db(0x61); db(0x72); db(0x64); db(0x20); db(0x73); db(0x68); + db(0x61); db(0x72); db(0x69); db(0x6e); db(0x67); db(0x00); db(0x55); db(0x41); + db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); + db(0x64); db(0x72); db(0x69); db(0x76); db(0x65); db(0x72); db(0x00); db(0x55); + db(0x41); db(0x45); db(0x20); db(0x66); db(0x69); db(0x6c); db(0x65); db(0x73); + db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x00); db(0x55); db(0x41); + db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); db(0x61); db(0x75); db(0x74); + db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); db(0x74); db(0x65); db(0x72); + db(0x00); db(0x55); db(0x41); db(0x45); db(0x20); db(0x66); db(0x73); db(0x20); + db(0x61); db(0x75); db(0x74); db(0x6f); db(0x6d); db(0x6f); db(0x75); db(0x6e); + db(0x74); db(0x20); db(0x70); db(0x72); db(0x6f); db(0x63); db(0x65); db(0x73); + db(0x73); db(0x00); db(0x64); db(0x6f); db(0x73); db(0x2e); db(0x6c); db(0x69); + db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); db(0x69); db(0x6e); + db(0x74); db(0x75); db(0x69); db(0x74); db(0x69); db(0x6f); db(0x6e); db(0x2e); + db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); db(0x00); + db(0x67); db(0x72); db(0x61); db(0x70); db(0x68); db(0x69); db(0x63); db(0x73); + db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); db(0x72); db(0x79); + db(0x00); db(0x65); db(0x78); db(0x70); db(0x61); db(0x6e); db(0x73); db(0x69); + db(0x6f); db(0x6e); db(0x2e); db(0x6c); db(0x69); db(0x62); db(0x72); db(0x61); + db(0x72); db(0x79); db(0x00); db(0x46); db(0x69); db(0x6c); db(0x65); db(0x53); + db(0x79); db(0x73); db(0x74); db(0x65); db(0x6d); db(0x2e); db(0x72); db(0x65); + db(0x73); db(0x6f); db(0x75); db(0x72); db(0x63); db(0x65); db(0x00); db(0x6d); + db(0x65); db(0x67); db(0x61); db(0x63); db(0x68); db(0x69); db(0x70); db(0x20); + db(0x6d); db(0x65); db(0x6d); db(0x6f); db(0x72); db(0x79); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x03); db(0xf2); diff --git a/include/autoconf.h b/include/autoconf.h index 4cb9cb55..d1b8bbbc 100644 --- a/include/autoconf.h +++ b/include/autoconf.h @@ -15,6 +15,7 @@ extern void dw (uae_u16); extern void dl (uae_u32); extern uae_u32 ds_ansi (const uae_char*); extern uae_u32 ds (const TCHAR*); +extern uae_u32 ds_bstr_ansi (const uae_char*); extern uae_u8 dbg (uaecptr); extern void calltrap (uae_u32); extern void org (uae_u32); diff --git a/include/filesys.h b/include/filesys.h index 94ad61b8..dbed529c 100644 --- a/include/filesys.h +++ b/include/filesys.h @@ -88,6 +88,7 @@ struct hd_hardfiledata { #define FILESYS_HARDFILE 1 #define FILESYS_HARDFILE_RDB 2 #define FILESYS_HARDDRIVE 3 +#define FILESYS_CD 4 #define MAX_FILESYSTEM_UNITS 30 diff --git a/include/scsidev.h b/include/scsidev.h index ddd14cb2..495f0c59 100644 --- a/include/scsidev.h +++ b/include/scsidev.h @@ -14,6 +14,7 @@ void scsidev_reset (void); void scsidev_start_threads (void); int scsi_do_disk_change (int unitnum, int insert, int *pollmode); int scsi_do_disk_device_change (void); +uae_u16 scsi_get_cd_drive_mask (void); extern int log_scsi; diff --git a/include/xwin.h b/include/xwin.h index b5e43d0b..85440ea1 100644 --- a/include/xwin.h +++ b/include/xwin.h @@ -6,6 +6,8 @@ * Copyright 1995-1997 Bernd Schmidt */ +#include "machdep/rpt.h" + typedef uae_u32 xcolnr; typedef int (*allocfunc_type)(int, int, int, xcolnr *); @@ -26,7 +28,7 @@ extern void toggle_fullscreen (int); extern void toggle_mousegrab (void); extern void desktop_coords (int *dw, int *dh, int *x, int *y, int *w, int *h); extern bool vsync_switchmode (int); -extern void vsync_busywait_end (void); +extern frame_time_t vsync_busywait_end (void); extern bool vsync_busywait_do (int*); extern void vsync_busywait_start (void); extern double vblank_calibrate (double, bool); diff --git a/include/zfile.h b/include/zfile.h index 5a9cd702..bba717a8 100644 --- a/include/zfile.h +++ b/include/zfile.h @@ -34,7 +34,8 @@ extern struct zfile *zfile_fopen (const TCHAR *, const TCHAR *); extern struct zfile *zfile_fopen (const TCHAR *, const TCHAR *, int mask, int index); extern struct zfile *zfile_fopen_empty (struct zfile*, const TCHAR *name, uae_u64 size); extern struct zfile *zfile_fopen_empty (struct zfile*, const TCHAR *name); -extern struct zfile *zfile_fopen_data (const TCHAR *name, uae_u64 size, uae_u8 *data); +extern struct zfile *zfile_fopen_data (const TCHAR *name, uae_u64 size, const uae_u8 *data); +extern uae_u8 *zfile_load_data (const TCHAR *name, const uae_u8 *data,int datalen, int *outlen); extern struct zfile *zfile_fopen_parent (struct zfile*, const TCHAR*, uae_u64 offset, uae_u64 size); extern int zfile_exists (const TCHAR *name); diff --git a/od-win32/blkdev_win32_ioctl.cpp b/od-win32/blkdev_win32_ioctl.cpp index cdcacc05..d97daff4 100644 --- a/od-win32/blkdev_win32_ioctl.cpp +++ b/od-win32/blkdev_win32_ioctl.cpp @@ -1038,8 +1038,11 @@ static int fetch_geometry (struct dev_info_ioctl *ciw, int unitnum, struct devic seterrormode (ciw); while (cnt-- > 0) { if (!DeviceIoControl (ciw->h, IOCTL_CDROM_GET_DRIVE_GEOMETRY, NULL, 0, &geom, sizeof (geom), &len, NULL)) { - if (win32_error (ciw, unitnum, L"IOCTL_CDROM_GET_DRIVE_GEOMETRY") < 0) - continue; + DWORD err = GetLastError (); + if (err == ERROR_WRONG_DISK) { + if (win32_error (ciw, unitnum, L"IOCTL_CDROM_GET_DRIVE_GEOMETRY") < 0) + continue; + } reseterrormode (ciw); uae_sem_post (&ciw->sub_sem); return 0; @@ -1084,7 +1087,7 @@ static int eject (int unitnum, bool eject) } /* read toc */ -static int ioctl_command_toc (int unitnum, struct cd_toc_head *tocout) +static int ioctl_command_toc2 (int unitnum, struct cd_toc_head *tocout, bool hide_errors) { struct dev_info_ioctl *ciw = unitisopen (unitnum); if (!ciw) @@ -1105,9 +1108,12 @@ static int ioctl_command_toc (int unitnum, struct cd_toc_head *tocout) while (cnt-- > 0) { seterrormode (ciw); if (!DeviceIoControl (ciw->h, IOCTL_CDROM_READ_TOC, NULL, 0, toc, sizeof (CDROM_TOC), &len, NULL)) { + DWORD err = GetLastError (); reseterrormode (ciw); - if (win32_error (ciw, unitnum, L"IOCTL_CDROM_READ_TOC") < 0) - continue; + if (!hide_errors || (hide_errors && err == ERROR_WRONG_DISK)) { + if (win32_error (ciw, unitnum, L"IOCTL_CDROM_READ_TOC") < 0) + continue; + } return 0; } reseterrormode (ciw); @@ -1151,6 +1157,10 @@ static int ioctl_command_toc (int unitnum, struct cd_toc_head *tocout) memcpy (tocout, th, sizeof (struct cd_toc_head)); return 1; } +static int ioctl_command_toc (int unitnum, struct cd_toc_head *tocout) +{ + return ioctl_command_toc2 (unitnum, tocout, false); +} static void update_device_info (int unitnum) { @@ -1167,7 +1177,7 @@ static void update_device_info (int unitnum) if (fetch_geometry (ciw, unitnum, di)) { // || ioctl_command_toc (unitnum)) di->media_inserted = 1; } - ioctl_command_toc (unitnum, &di->toc); + ioctl_command_toc2 (unitnum, &di->toc, true); di->removable = ciw->type == DRIVE_CDROM ? 1 : 0; di->write_protected = ciw->type == DRIVE_CDROM ? 1 : 0; di->type = ciw->type == DRIVE_CDROM ? INQ_ROMD : INQ_DASD; diff --git a/od-win32/direct3d.cpp b/od-win32/direct3d.cpp index 7012c8d3..3d1f1f0f 100644 --- a/od-win32/direct3d.cpp +++ b/od-win32/direct3d.cpp @@ -1838,12 +1838,14 @@ void D3D_free (void) ddraw_fs_hack_free (); } -static bool getvblankstate (int *vpos) +static int prevvblankpos; + +bool D3D_getvblankpos (int *vpos) { HRESULT hr; D3DRASTER_STATUS rt; - *vpos = 0; + *vpos = -2; if (!isd3d ()) return false; hr = d3ddev->GetRasterStatus (0, &rt); @@ -1851,24 +1853,30 @@ static bool getvblankstate (int *vpos) write_log (L"%s: GetRasterStatus %s\n", D3DHEAD, D3D_ErrorString (hr)); return false; } + if (rt.ScanLine > maxscanline) + maxscanline = rt.ScanLine; *vpos = rt.ScanLine; + prevvblankpos = rt.ScanLine; if (rt.InVBlank != 0) *vpos = -1; return true; } -bool D3D_waitvblankstate (bool state) +bool D3D_waitvblankstate (bool state, int *maxvpos) { int vpos; for (;;) { - if (!getvblankstate (&vpos)) + int omax = maxscanline; + if (!D3D_getvblankpos (&vpos)) return false; - while (vpos > maxscanline) { - maxscanline = vpos; - if (!getvblankstate (&vpos)) + while (omax != maxscanline) { + omax = maxscanline; + if (!D3D_getvblankpos (&vpos)) return false; } - if (vpos < 0 || vpos >= maxscanline - 5) { + if (maxvpos) + *maxvpos = maxscanline; + if (vpos < 0) { if (state) return true; } else { @@ -1883,19 +1891,28 @@ bool D3D_vblank_busywait (void) int vpos; for (;;) { - if (!getvblankstate (&vpos)) + int opos = prevvblankpos; + if (!D3D_getvblankpos (&vpos)) return false; - if (vpos <= 0 || vpos >= maxscanline - 5) + if (opos > maxscanline / 2 && vpos < maxscanline / 5) + return true; + if (vpos <= 0) return true; } } bool D3D_vblank_getstate (bool *state) { - int vpos; - if (!getvblankstate (&vpos)) + int vpos, opos; + + opos = prevvblankpos; + if (!D3D_getvblankpos (&vpos)) return false; - if (vpos <= 0 || vpos >= maxscanline - 5) { + if (opos > maxscanline / 2 && vpos < maxscanline / 5) { + *state = true; + return true; + } + if (vpos <= 0) { *state = true; return true; } diff --git a/od-win32/direct3d.h b/od-win32/direct3d.h index f903b5cd..25b01f2a 100644 --- a/od-win32/direct3d.h +++ b/od-win32/direct3d.h @@ -17,8 +17,9 @@ extern int D3D_canshaders (void); extern int D3D_goodenough (void); extern void D3D_setcursor (int x, int y, int visible); extern bool D3D_vblank_busywait (void); -extern bool D3D_waitvblankstate (bool); +extern bool D3D_waitvblankstate (bool, int*); extern bool D3D_vblank_getstate (bool *state); +extern bool D3D_getvblankpos (int *vpos); extern double D3D_getrefreshrate (void); extern LPDIRECT3DTEXTURE9 cursorsurfaced3d; diff --git a/od-win32/dxwrap.cpp b/od-win32/dxwrap.cpp index 0d4a1556..4b5ce790 100644 --- a/od-win32/dxwrap.cpp +++ b/od-win32/dxwrap.cpp @@ -1075,15 +1075,70 @@ static void getcaps (void) showcaps (&hc); } -int DirectDraw_Start (GUID *guid) +static int guidcounter; +static GUID monitorguids[MAX_DISPLAYS]; + +static BOOL CALLBACK displaysCallback (GUID *guid, char *adesc, char *aname, LPVOID ctx, HMONITOR hm) { - static int d3ddone; - static int first; + if (guidcounter >= MAX_DISPLAYS) + return FALSE; + if (guid == NULL) + return TRUE; + memcpy (&monitorguids[guidcounter], guid, sizeof GUID); + guidcounter++; + return TRUE; +} + +int DirectDraw_Start (void) +{ + static int first, firstdd; HRESULT ddrval; LPDIRECT3D9 d3d; D3DCAPS9 d3dCaps; HINSTANCE d3dDLL; + GUID *guid; + + dxdata.statuswidth = 800; + dxdata.statusheight = TD_TOTAL_HEIGHT; + + if (!first) { + d3dDLL = LoadLibrary (L"D3D9.DLL"); + if (d3dDLL) { + d3d = Direct3DCreate9 (D3D9b_SDK_VERSION); + if (d3d) { + if (SUCCEEDED (IDirect3D9_GetDeviceCaps (d3d, 0, D3DDEVTYPE_HAL, &d3dCaps))) { + dxcaps.maxwidth = d3dCaps.MaxTextureWidth; + dxcaps.maxheight = d3dCaps.MaxTextureHeight; + write_log (L"Max hardware surface size: %dx%d\n", dxcaps.maxwidth, dxcaps.maxheight); + } + IDirect3D9_Release (d3d); + } + FreeLibrary (d3dDLL); + } + if (dxcaps.maxwidth < 2048) + dxcaps.maxwidth = 2048; + if (dxcaps.maxheight < 2048) + dxcaps.maxheight = 2048; + + first = 1; + } + + if (currprefs.gfx_api) { + return 1; + } + if (!guidcounter) + DirectDrawEnumerateExA (displaysCallback, 0, DDENUM_DETACHEDSECONDARYDEVICES | DDENUM_ATTACHEDSECONDARYDEVICES); + + guid = NULL; + if (isfullscreen () > 0) { + int disp = currprefs.gfx_display - 1; + if (disp < 0) + disp = 0; + if (disp >= guidcounter) + disp = 0; + guid = &monitorguids[disp]; + } dxdata.islost = 0; if (dxdata.ddinit) { if (guid == NULL && dxdata.ddzeroguid) @@ -1117,33 +1172,9 @@ int DirectDraw_Start (GUID *guid) } #endif - dxdata.statuswidth = 800; - dxdata.statusheight = TD_TOTAL_HEIGHT; - if (!d3ddone) { - d3dDLL = LoadLibrary (L"D3D9.DLL"); - if (d3dDLL) { - d3d = Direct3DCreate9 (D3D9b_SDK_VERSION); - if (d3d) { - if (SUCCEEDED (IDirect3D9_GetDeviceCaps (d3d, 0, D3DDEVTYPE_HAL, &d3dCaps))) { - dxcaps.maxwidth = d3dCaps.MaxTextureWidth; - dxcaps.maxheight = d3dCaps.MaxTextureHeight; - write_log (L"Max hardware surface size: %dx%d\n", dxcaps.maxwidth, dxcaps.maxheight); - } - IDirect3D9_Release (d3d); - } - FreeLibrary (d3dDLL); - } - d3ddone = 1; - } - if (dxcaps.maxwidth < 2048) - dxcaps.maxwidth = 2048; - if (dxcaps.maxheight < 2048) - dxcaps.maxheight = 2048; - - if (!first) { - first = 1; + if (!firstdd) getcaps (); - } + firstdd = 1; if (SUCCEEDED (DirectDraw_GetDisplayMode ())) { dxdata.ddinit = 1; @@ -1177,11 +1208,13 @@ void dx_check (void) dxdata.islost = 1; } -bool DirectDraw_waitvblankstate (bool state) +bool DirectDraw_waitvblankstate (bool state, int *maxvpos) { BOOL vb; HRESULT hr; + if (maxvpos) + *maxvpos = -1; if ((dxdata.primary == NULL && dxdata.fsmodeset > 0) || dxdata.islost || !dxdata.maindd) return false; for (;;) { @@ -1197,7 +1230,7 @@ bool DirectDraw_waitvblankstate (bool state) bool DirectDraw_vblank_busywait (void) { - if (!DirectDraw_waitvblankstate (true)) + if (!DirectDraw_waitvblankstate (true, NULL)) return false; return true; } diff --git a/od-win32/dxwrap.h b/od-win32/dxwrap.h index f683b9da..ba67a1f8 100644 --- a/od-win32/dxwrap.h +++ b/od-win32/dxwrap.h @@ -5,6 +5,8 @@ #include #include +#define MAX_DISPLAYS 10 + extern int ddforceram; extern int useoverlay; @@ -56,15 +58,14 @@ struct PicassoResolution int depth; /* depth in bytes-per-pixel */ int residx; int refresh[MAX_REFRESH_RATES]; /* refresh-rates in Hz */ - int refreshtype[MAX_REFRESH_RATES]; /* 0=dx,1=enumdisplaysettings */ + int refreshtype[MAX_REFRESH_RATES]; /* 0=normal,1=enumdisplaysettings+raw */ TCHAR name[25]; /* Bit mask of RGBFF_xxx values. */ uae_u32 colormodes; - int nondx; + int rawmode; }; extern GUID *displayGUID; -#define MAX_DISPLAYS 10 struct MultiDisplay { int primary, disabled, gdi; GUID guid; @@ -86,7 +87,7 @@ extern TCHAR *outGUID (const GUID *guid); HRESULT DirectDraw_GetDisplayMode (void); void DirectDraw_Release(void); -int DirectDraw_Start(GUID *guid); +int DirectDraw_Start(void); void clearsurface(LPDIRECTDRAWSURFACE7 surf); int locksurface (LPDIRECTDRAWSURFACE7 surf, LPDDSURFACEDESC2 desc); void unlocksurface (LPDIRECTDRAWSURFACE7 surf); @@ -102,8 +103,6 @@ HRESULT DirectDraw_SetCooperativeLevel (HWND window, int fullscreen, int doset); HRESULT DirectDraw_CreateClipper (void); HRESULT DirectDraw_SetClipper(HWND hWnd); RGBFTYPE DirectDraw_GetSurfacePixelFormat(LPDDSURFACEDESC2 surface); -HRESULT DirectDraw_EnumDisplayModes(DWORD flags, LPDDENUMMODESCALLBACK2 callback, void *context); -HRESULT DirectDraw_EnumDisplays(LPDDENUMCALLBACKEXA callback); DWORD DirectDraw_CurrentWidth (void); DWORD DirectDraw_CurrentHeight (void); DWORD DirectDraw_GetCurrentDepth (void); @@ -131,7 +130,7 @@ void DirectDraw_FillSurface (LPDIRECTDRAWSURFACE7 dst, RECT *rect, uae_u32 color void DirectDraw_Fill (RECT *rect, uae_u32 color); void DirectDraw_FillPrimary (void); bool DirectDraw_vblank_busywait (void); -bool DirectDraw_waitvblankstate (bool); +bool DirectDraw_waitvblankstate (bool, int*); bool DirectDraw_getvblankstate (bool*); void dx_check (void); diff --git a/od-win32/picasso96_win.cpp b/od-win32/picasso96_win.cpp index 448054b0..05d9fda8 100644 --- a/od-win32/picasso96_win.cpp +++ b/od-win32/picasso96_win.cpp @@ -1964,12 +1964,10 @@ static void picasso96_alloc2 (TrapContext *ctx) i = 0; while (DisplayModes[i].depth >= 0) { - if (DisplayModes[i].nondx == 0) { - for (j = 0; missmodes[j * 2] >= 0; j++) { - if (DisplayModes[i].res.width == missmodes[j * 2 + 0] && DisplayModes[i].res.height == missmodes[j * 2 + 1]) { - missmodes[j * 2 + 0] = 0; - missmodes[j * 2 + 1] = 0; - } + for (j = 0; missmodes[j * 2] >= 0; j++) { + if (DisplayModes[i].res.width == missmodes[j * 2 + 0] && DisplayModes[i].res.height == missmodes[j * 2 + 1]) { + missmodes[j * 2 + 0] = 0; + missmodes[j * 2 + 1] = 0; } } i++; @@ -1977,10 +1975,6 @@ static void picasso96_alloc2 (TrapContext *ctx) i = 0; while (DisplayModes[i].depth >= 0) { - if (DisplayModes[i].nondx) { - i++; - continue; - } j = i; size += PSSO_LibResolution_sizeof; while (missmodes[misscnt * 2] == 0) diff --git a/od-win32/sounddep/sound.cpp b/od-win32/sounddep/sound.cpp index 6a8e1d66..e2e54459 100644 --- a/od-win32/sounddep/sound.cpp +++ b/od-win32/sounddep/sound.cpp @@ -46,6 +46,9 @@ #include "sounddep/sound.h" +#define PA_BUFFERSIZE (262144 * 4) +#define PA_CALLBACKBUFFERS 8 + struct sound_dp { // directsound @@ -77,16 +80,15 @@ struct sound_dp // portaudio - volatile int patoggle; - volatile int pacounter; - uae_u8 *pasoundbuffer[2]; + uae_u8 *pasoundbuffer; + volatile int pareadoffset, pawriteoffset; int pasndbufsize; int paframesperbuffer; PaStream *pastream; - HANDLE paevent; - int opacounter; int pablocking; int pavolume; + int pacallbacksize; + bool pafinishsb; // wasapi @@ -103,17 +105,22 @@ struct sound_dp UINT32 bufferFrameCount; UINT64 wasapiframes; int wasapiexclusive; - int framecounter; int sndbuf; int wasapigoodsize; int sndbufframes; + + + double avg_correct; + double cnt_correct; }; +#define SND_STATUSCNT 10 + #define ADJUST_SIZE 30 #define EXP 2.1 #define ADJUST_VSSIZE 10 -#define EXPVS 1.3 +#define EXPVS 1.7 int sound_debug = 0; int sound_mode_skip = 0; @@ -134,6 +141,7 @@ static uae_sem_t sound_sem, sound_init_sem; struct sound_device *sound_devices[MAX_SOUND_DEVICES]; struct sound_device *record_devices[MAX_SOUND_DEVICES]; static int num_sound_devices, num_record_devices; +static time_t delayed_start; static struct sound_data sdpaula; static struct sound_data *sdp = &sdpaula; @@ -183,6 +191,65 @@ void update_sound (double freq, int longframe, int linetoggle) #endif } +extern int vsynctime_orig; + +#ifndef AVIOUTPUT +static int avioutput_audio; +#endif + +void sound_setadjust (double v) +{ + float mult; + + if (v < -5) + v = -5; + if (v > 5) + v = 5; + + mult = (1000.0 + v); + if (avioutput_audio && avioutput_enabled && avioutput_nosoundsync) + mult = 1000.0; + if (isvsync () || (avioutput_audio && avioutput_enabled && !currprefs.cachesize)) { + vsynctime = vsynctime_orig; + scaled_sample_evtime = scaled_sample_evtime_orig * mult / 1000.0; + } else if (currprefs.cachesize || currprefs.m68k_speed != 0) { + vsynctime = (long)(((double)vsynctime_orig) * mult / 1000.0); + scaled_sample_evtime = scaled_sample_evtime_orig; + } else { + vsynctime = (long)(((double)vsynctime_orig) * mult / 1000.0); + scaled_sample_evtime = scaled_sample_evtime_orig; + } +} + +static void docorrection (struct sound_dp *s, int sndbuf, double sync, int granulaty) +{ + static int tfprev; + + s->avg_correct += sync; + s->cnt_correct++; + + if (granulaty < 10) + granulaty = 10; + + if (tfprev != timeframes) { + double skipmode; + double avg = s->avg_correct / s->cnt_correct; + if ((0 || sound_debug) && (tfprev % 10) == 0) { + write_log (L"%+4d %7.1f %7.1f %6d\n", sndbuf, avg, sync, granulaty); + } + gui_data.sndbuf = sndbuf; + skipmode = sync / 100.0; + + if (skipmode > 1) + skipmode = 1; + if (skipmode < -1) + skipmode = -1; + + sound_setadjust (avg / (5000 / granulaty)); + tfprev = timeframes; + } +} + static void clearbuffer_ds (struct sound_data *sd) { void *buffer; @@ -236,7 +303,6 @@ static void resume_audio_wasapi (struct sound_data *sd) if (FAILED (hr)) write_log (L"WASAPI: Start() %08X\n", hr); s->wasapiframes = 0; - s->framecounter = 0; s->sndbuf = 0; } @@ -256,9 +322,12 @@ static void pause_audio_ds (struct sound_data *sd) } static void resume_audio_ds (struct sound_data *sd) { + struct sound_dp *s = sd->data; sd->paused = 0; clearbuffer (sd); sd->waiting_for_buffer = 1; + s->avg_correct = 0; + s->cnt_correct = 0; } static void pause_audio_pa (struct sound_data *sd) { @@ -270,6 +339,10 @@ static void pause_audio_pa (struct sound_data *sd) static void resume_audio_pa (struct sound_data *sd) { struct sound_dp *s = sd->data; + s->pawriteoffset = 0; + s->pareadoffset = 0; + s->pacallbacksize = 0; + s->pafinishsb = false; PaError err = Pa_StartStream (s->pastream); if (err != paNoError) write_log (L"PASOUND: Pa_StartStream() error %d (%s)\n", err, Pa_GetErrorText (err)); @@ -472,10 +545,23 @@ static DWORD fillsupportedmodes (struct sound_data *sd, int freq, struct dsaudio return speakerconfig; } +static int padiff (int write, int read) +{ + int diff; + diff = write - read; + if (diff > PA_BUFFERSIZE / 2) + diff = PA_BUFFERSIZE - write + read; + else if (diff < -PA_BUFFERSIZE / 2) + diff = PA_BUFFERSIZE - read + write; + return diff; +} static void finish_sound_buffer_pa (struct sound_data *sd, uae_u16 *sndbuffer) { struct sound_dp *s = sd->data; + + s->pafinishsb = true; + if (s->pavolume) { int vol = 65536 - s->pavolume * 655; for (int i = 0; i < sd->sndbufsize / sizeof (uae_u16); i++) { @@ -484,17 +570,52 @@ static void finish_sound_buffer_pa (struct sound_data *sd, uae_u16 *sndbuffer) } } if (s->pablocking) { - if (s->paframesperbuffer != sd->sndbufsize / (sd->channels * 2)) { - write_log (L"sound buffer size mistmatch %d <> %d\n", s->paframesperbuffer, sd->sndbufsize / (sd->channels * 2)); - } else { - Pa_WriteStream (s->pastream, sndbuffer, s->paframesperbuffer); + + int avail; + time_t t = 0; + for (;;) { + avail = Pa_GetStreamWriteAvailable (s->pastream); + if (avail < 0 || avail >= s->pasndbufsize) + break; + if (!t) { + t = time (NULL) + 2; + } else if (time (NULL) >= t) { + write_log (L"PA: audio stuck!? %d\n", avail); + break; + } + sleep_millis (1); } + int pos = avail - s->paframesperbuffer; + docorrection (s, -pos * 1000 / (s->paframesperbuffer), -pos, 100); + Pa_WriteStream (s->pastream, sndbuffer, s->pasndbufsize); + } else { - int cnt = 2000 / 10; - while (s->opacounter == s->pacounter && s->pastream && !sd->paused && cnt-- >= 0) - WaitForSingleObject (s->paevent, 10); - s->opacounter = s->pacounter; - memcpy (s->pasoundbuffer[s->patoggle], sndbuffer, sd->sndbufsize); + + if (!s->pacallbacksize) + return; + + int diff = padiff (s->pawriteoffset, s->pareadoffset); + int samplediff = diff / sd->samplesize; + samplediff -= s->pacallbacksize * PA_CALLBACKBUFFERS; + docorrection (s, samplediff * 1000 / (s->pacallbacksize * PA_CALLBACKBUFFERS / 2), samplediff, s->pacallbacksize); + + while (diff > PA_BUFFERSIZE / 4 && s->pastream && !sd->paused) { + gui_data.sndbuf_status = 1; + statuscnt = SND_STATUSCNT; + sleep_millis (1); + diff = padiff (s->pawriteoffset, s->pareadoffset); + } + + if (sd->sndbufsize + s->pawriteoffset > PA_BUFFERSIZE) { + int partsize = PA_BUFFERSIZE - s->pawriteoffset; + memcpy (s->pasoundbuffer + s->pawriteoffset, sndbuffer, partsize); + memcpy (s->pasoundbuffer, (uae_u8*)sndbuffer + partsize, sd->sndbufsize - partsize); + s->pawriteoffset = sd->sndbufsize - partsize; + } else { + memcpy (s->pasoundbuffer + s->pawriteoffset, sndbuffer, sd->sndbufsize); + s->pawriteoffset = s->pawriteoffset + sd->sndbufsize; + } + } } @@ -506,44 +627,56 @@ static int _cdecl portAudioCallback (const void *inputBuffer, void *outputBuffer { struct sound_data *sd = (struct sound_data*)userData; struct sound_dp *s = sd->data; + int bytestocopy; + int diff; - if (framesPerBuffer != sd->sndbufsize / (sd->channels * 2)) { - write_log (L"sound buffer size mistmatch %d <> %d\n", framesPerBuffer, sd->sndbufsize / (sd->channels * 2)); - } else { - memcpy (outputBuffer, s->pasoundbuffer[s->patoggle], sd->sndbufsize); + if (!framesPerBuffer || !s->pafinishsb) + return paContinue; + + if (!s->pacallbacksize) + s->pawriteoffset = (PA_CALLBACKBUFFERS + 1) * framesPerBuffer * sd->samplesize; + + s->pacallbacksize = framesPerBuffer; + + bytestocopy = framesPerBuffer * sd->samplesize; + diff = padiff (s->pawriteoffset, s->pareadoffset + bytestocopy); + if (diff <= 0) { + memset (outputBuffer, 0, bytestocopy); + gui_data.sndbuf_status = 2; + bytestocopy -= -diff; + statuscnt = SND_STATUSCNT; } - s->patoggle ^= 1; - s->pacounter++; - SetEvent (s->paevent); + if (bytestocopy > 0) { + if (bytestocopy + s->pareadoffset > PA_BUFFERSIZE) { + int partsize = PA_BUFFERSIZE - s->pareadoffset; + memcpy (outputBuffer, s->pasoundbuffer + s->pareadoffset, partsize); + memcpy ((uae_u8*)outputBuffer + partsize, s->pasoundbuffer, bytestocopy - partsize); + s->pareadoffset = bytestocopy - partsize; + } else { + memcpy (outputBuffer, s->pasoundbuffer + s->pareadoffset, bytestocopy); + s->pareadoffset = s->pareadoffset + bytestocopy; + } + } + return paContinue; } static void close_audio_pa (struct sound_data *sd) { struct sound_dp *s = sd->data; - int i; if (s->pastream) Pa_CloseStream (s->pastream); s->pastream = NULL; - for (i = 0; i < 2; i++) { - xfree (s->pasoundbuffer[i]); - s->pasoundbuffer[i] = NULL; - } - if (s->paevent) { - SetEvent (s->paevent); - CloseHandle (s->paevent); - } - s->paevent = NULL; + xfree (s->pasoundbuffer); + s->pasoundbuffer = NULL; } static int open_audio_pa (struct sound_data *sd, int index) { struct sound_dp *s = sd->data; - int i; int freq = sd->freq; int ch = sd->channels; - int size; int dev = sound_devices[index]->panum; const PaDeviceInfo *di; PaStreamParameters p; @@ -552,71 +685,89 @@ static int open_audio_pa (struct sound_data *sd, int index) TCHAR *errtxt; int defaultrate = 0; - size = sd->sndbufsize; - s->paframesperbuffer = size; + s->paframesperbuffer = sd->sndbufsize; + s->pasndbufsize = sd->sndbufsize / 32; + sd->sndbufsize = s->pasndbufsize * ch * 2; + if (sd->sndbufsize > SND_MAX_BUFFER) + sd->sndbufsize = SND_MAX_BUFFER; + sd->devicetype = SOUND_DEVICE_PA; memset (&p, 0, sizeof p); di = Pa_GetDeviceInfo (dev); for (;;) { - int err2; - p.channelCount = ch; - p.device = dev; - p.hostApiSpecificStreamInfo = NULL; - p.sampleFormat = paInt16; - p.suggestedLatency = di->defaultLowOutputLatency; - p.hostApiSpecificStreamInfo = NULL; - - err = Pa_IsFormatSupported (NULL, &p, freq); - if (err == paFormatIsSupported) - break; - err2 = err; - errtxt = au (Pa_GetErrorText (err)); - write_log (L"PASOUND: sound format not supported, ch=%d, rate=%d. %s\n", freq, ch, errtxt); - xfree (errtxt); - if (err == paInvalidChannelCount) { - if (ch > 2) { - ch = sd->channels = 2; + for (;;) { + int err2; + p.channelCount = ch; + p.device = dev; + p.hostApiSpecificStreamInfo = NULL; + p.sampleFormat = paInt16; + p.suggestedLatency = di->defaultLowOutputLatency; + p.hostApiSpecificStreamInfo = NULL; + + err = Pa_IsFormatSupported (NULL, &p, freq); + if (err == paFormatIsSupported) + break; +fixfreq: + err2 = err; + errtxt = au (Pa_GetErrorText (err)); + write_log (L"PASOUND: sound format not supported, ch=%d, rate=%d. %s\n", freq, ch, errtxt); + xfree (errtxt); + if (err == paInvalidChannelCount) { + if (ch > 2) { + ch = sd->channels = 2; + continue; + } + goto end; + } + if (freq < 44000 && err == paInvalidSampleRate) { + freq = 44000; + sd->freq = freq; + continue; + } + if (freq < 48000 && err == paInvalidSampleRate) { + freq = 48000; + sd->freq = freq; + continue; + } + if (freq != di->defaultSampleRate && err == paInvalidSampleRate && !defaultrate) { + freq = di->defaultSampleRate; + sd->freq = freq; + defaultrate = 1; continue; } goto end; } - if (freq < 44000 && err == paInvalidSampleRate) { - freq = 44000; - sd->freq = freq; - continue; - } - if (freq < 48000 && err == paInvalidSampleRate) { - freq = 48000; - sd->freq = freq; - continue; + + sd->samplesize = ch * 16 / 8; +#if 0 + s->pablocking = 1; + err = Pa_OpenStream (&s->pastream, NULL, &p, freq, s->paframesperbuffer, paNoFlag, NULL, NULL); +#else + err = paUnanticipatedHostError; +#endif + if (err == paUnanticipatedHostError) { // could be "blocking not supported" + s->pablocking = 0; + err = Pa_OpenStream (&s->pastream, NULL, &p, freq, paFramesPerBufferUnspecified, paNoFlag, portAudioCallback, sd); } - if (freq != di->defaultSampleRate && err == paInvalidSampleRate && !defaultrate) { - freq = di->defaultSampleRate; - sd->freq = freq; - defaultrate = 1; - continue; + if (err == paInvalidSampleRate || err == paInvalidChannelCount) + goto fixfreq; + if (err != paNoError) { + errtxt = au (Pa_GetErrorText (err)); + write_log (L"PASOUND: Pa_OpenStream() error %d (%s)\n", err, errtxt); + xfree (errtxt); + goto end; } - goto end; - } - sd->sndbufsize = size * ch * 2; - // s->pablocking = 1; - // err = Pa_OpenStream (&s->pastream, NULL, &p, freq, s->paframesperbuffer, paNoFlag, NULL, NULL); - // if (err != paNoError) { - s->pablocking = 0; - err = Pa_OpenStream (&s->pastream, NULL, &p, freq, s->paframesperbuffer, paNoFlag, portAudioCallback, sd); - if (err != paNoError) { - errtxt = au (Pa_GetErrorText (err)); - write_log (L"PASOUND: Pa_OpenStream() error %d (%s)\n", err, errtxt); - xfree (errtxt); - goto end; + break; } - // } - s->paevent = CreateEvent (NULL, FALSE, FALSE, NULL); - for (i = 0; i < 2; i++) - s->pasoundbuffer[i] = xcalloc (uae_u8, sd->sndbufsize); + + if (!s->pablocking) { + s->pasoundbuffer = xcalloc (uae_u8, PA_BUFFERSIZE); + } + name = au (di->name); - write_log (L"PASOUND: CH=%d,FREQ=%d (%s) '%s' buffer %d\n", - ch, freq, sound_devices[index]->name, name, sd->sndbufsize); + write_log (L"PASOUND: CH=%d,FREQ=%d (%s) '%s' buffer %d/%d (%s)\n", + ch, freq, sound_devices[index]->name, name, + s->pasndbufsize, s->paframesperbuffer, s->pablocking ? L"push" : L"pull"); xfree (name); return 1; end: @@ -868,10 +1019,11 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive) sd->freq = pwfx_saved->nSamplesPerSec; } - size = sd->sndbufsize * sd->channels * 16 / 8; + sd->samplesize = sd->channels * 16 / 8; + size = sd->sndbufsize * sd->samplesize; s->snd_configsize = size; sd->sndbufsize = size / 32; - size /= (sd->channels * 16 / 8); + size /= sd->samplesize; s->bufferFrameCount = (UINT32)( // frames = 1.0 * s->hnsRequestedDuration * // hns * @@ -959,12 +1111,12 @@ static int open_audio_wasapi (struct sound_data *sd, int index, int exclusive) } } #endif - v = s->bufferFrameCount * sd->channels * 16 / 8; + v = s->bufferFrameCount * sd->samplesize; v /= 2; if (sd->sndbufsize > v) sd->sndbufsize = v; s->wasapigoodsize =s->bufferFrameCount / 2; - s->sndbufframes = sd->sndbufsize / (sd->channels * 16 / 8); + s->sndbufframes = sd->sndbufsize / sd->samplesize; write_log(L"WASAPI: '%s'\nWASAPI: EX=%d CH=%d FREQ=%d BUF=%d (%d)\n", name, s->wasapiexclusive, sd->channels, sd->freq, sd->sndbufsize, s->bufferFrameCount); @@ -1265,6 +1417,7 @@ int init_sound (void) return 0; sdp->paused = 1; driveclick_reset (); + reset_sound (); resume_sound (); return 1; } @@ -1292,6 +1445,10 @@ void reset_sound (void) if (!have_sound) return; clearbuffer (sdp); + if (isvsync ()) + delayed_start = time (NULL) + 1; + else + delayed_start = 0; } static void disable_sound (void) @@ -1306,37 +1463,6 @@ static void reopen_sound (void) open_sound (); } - -extern int vsynctime_orig; - -#ifndef AVIOUTPUT -static int avioutput_audio; -#endif - -void sound_setadjust (double v) -{ - float mult; - - if (v >= -5 && v <= 5) - v = 0; - - mult = (1000.0 + v); - if (avioutput_audio && avioutput_enabled && avioutput_nosoundsync) - mult = 1000.0; - if (isvsync () || (avioutput_audio && avioutput_enabled && !currprefs.cachesize)) { - vsynctime = vsynctime_orig; - scaled_sample_evtime = scaled_sample_evtime_orig * mult / 1000.0; - } else if (currprefs.cachesize || currprefs.m68k_speed != 0) { - vsynctime = (long)(((double)vsynctime_orig) * mult / 1000.0); - scaled_sample_evtime = scaled_sample_evtime_orig; - } else { - vsynctime = (long)(((double)vsynctime_orig) * mult / 1000.0); - scaled_sample_evtime = scaled_sample_evtime_orig; - } -} - -#define SND_STATUSCNT 10 - #define cf(x) if ((x) >= s->dsoundbuf) (x) -= s->dsoundbuf; static void restart_sound_buffer2 (struct sound_data *sd) @@ -1386,24 +1512,13 @@ static void finish_sound_buffer_al (struct sound_data *sd, uae_u16 *sndbuffer) { struct sound_dp *s = sd->data; static int tfprev; - static int statuscnt; int v, v2; - double m, skipmode; if (!sd->waiting_for_buffer) return; if (savestate_state) return; - if (sd == sdp) { - if (statuscnt > 0) { - statuscnt--; - if (statuscnt == 0) - gui_data.sndbuf_status = 0; - } - if (gui_data.sndbuf_status == 3) - gui_data.sndbuf_status = 0; - } alGetError (); memcpy (s->al_bigbuffer + s->al_offset, sndbuffer, sd->sndbufsize); @@ -1463,6 +1578,10 @@ static void finish_sound_buffer_al (struct sound_data *sd, uae_u16 *sndbuffer) alGetSourcei (s->al_Source, AL_BYTE_OFFSET, &v); alcheck (sd, 7); v -= s->al_offset; + + docorrection (s, 100 * v / sd->sndbufsize, v / sd->samplesize, 100); + +#if 0 gui_data.sndbuf = 100 * v / sd->sndbufsize; m = gui_data.sndbuf / 100.0; @@ -1493,6 +1612,7 @@ static void finish_sound_buffer_al (struct sound_data *sd, uae_u16 *sndbuffer) tfprev = timeframes; sound_setadjust (skipmode); } +#endif } alcheck (sd, 0); @@ -1572,9 +1692,9 @@ int get_offset_sound_device (struct sound_data *sd) static double sync_sound (double m) { double skipmode; - if (isvsync ()) { + if (isvsync () || 1) { - skipmode = pow (m < 0 ? -m : m, EXP) / 10; + skipmode = pow (m < 0 ? -m : m, EXPVS) / 10; if (m < 0) skipmode = -skipmode; if (skipmode < -ADJUST_VSSIZE) @@ -1601,7 +1721,6 @@ static void finish_sound_buffer_wasapi (struct sound_data *sd, uae_u16 *sndbuffe struct sound_dp *s = sd->data; HRESULT hr; BYTE *pData; - double skipmode; UINT32 numFramesPadding; int avail; int stuck = 2000; @@ -1610,12 +1729,6 @@ static void finish_sound_buffer_wasapi (struct sound_data *sd, uae_u16 *sndbuffe if (sd->paused) return; - s->framecounter++; - if (s->framecounter > 50) { - s->sndbuf = s->sndbuf / s->framecounter; - s->framecounter = 2; - } - for (;;) { hr = s->pAudioClient->GetCurrentPadding (&numFramesPadding); if (FAILED (hr)) { @@ -1623,8 +1736,13 @@ static void finish_sound_buffer_wasapi (struct sound_data *sd, uae_u16 *sndbuffe return; } avail = s->bufferFrameCount - numFramesPadding; - if (avail >= s->sndbufframes) + if (avail >= s->sndbufframes) { + if (avail >= s->wasapigoodsize * 2 - s->sndbufframes * 1) { + statuscnt = SND_STATUSCNT; + gui_data.sndbuf_status = 2; + } break; + } gui_data.sndbuf_status = 1; statuscnt = SND_STATUSCNT; sleep_millis (1); @@ -1637,12 +1755,9 @@ static void finish_sound_buffer_wasapi (struct sound_data *sd, uae_u16 *sndbuffe } oldpadding = numFramesPadding; } - s->sndbuf += (s->wasapigoodsize - avail) * 1000 / s->wasapigoodsize; - gui_data.sndbuf = s->sndbuf / s->framecounter; - if (s->framecounter == 2) { - skipmode = sync_sound (gui_data.sndbuf / 70.0); - sound_setadjust (skipmode); - } + + docorrection (s, (s->wasapigoodsize - avail) * 1000 / s->wasapigoodsize, s->wasapigoodsize - avail, 100); + hr = s->pRenderClient->GetBuffer (s->sndbufframes, &pData); if (SUCCEEDED (hr)) { memcpy (pData, sndbuffer, sd->sndbufsize); @@ -1809,18 +1924,25 @@ static void finish_sound_buffer_ds (struct sound_data *sd, uae_u16 *sndbuffer) if (sd == sdp) { double vdiff, m, skipmode; - vdiff = diff - s->snd_writeoffset; - m = 100.0 * vdiff / s->max_sndbufsize; + vdiff = (diff - s->snd_writeoffset) / sd->samplesize; + m = 100.0 * vdiff / (s->max_sndbufsize / sd->samplesize); skipmode = sync_sound (m); if (tfprev != timeframes) { gui_data.sndbuf = vdiff * 1000 / (s->snd_maxoffset - s->snd_writeoffset); + s->avg_correct += vdiff; + s->cnt_correct++; + double adj = (s->avg_correct / s->cnt_correct) / 50.0; if ((0 || sound_debug) && !(tfprev % 10)) - write_log (L"b=%4d,%5d,%5d,%5d d=%5d vd=%5.0f s=%+02.1f\n", + write_log (L"%d,%d,%d,%d d%5d vd%5.0f s%+02.1f %.0f %+02.1f\n", sd->sndbufsize / sd->samplesize, s->snd_configsize / sd->samplesize, s->max_sndbufsize / sd->samplesize, - s->dsoundbuf / sd->samplesize, diff / sd->samplesize, vdiff, skipmode); + s->dsoundbuf / sd->samplesize, diff / sd->samplesize, vdiff, skipmode, s->avg_correct / s->cnt_correct, adj); tfprev = timeframes; - sound_setadjust (skipmode); + if (skipmode > 1) + skipmode = 1; + if (skipmode < -1) + skipmode = -1; + sound_setadjust (skipmode + adj); } } @@ -1868,6 +1990,8 @@ void send_sound (struct sound_data *sd, uae_u16 *sndbuffer) void finish_sound_buffer (void) { + static unsigned long tframe; + if (currprefs.turbo_emulation) return; if (currprefs.sound_stereo_swap_paula) { @@ -1887,7 +2011,15 @@ void finish_sound_buffer (void) #endif if (!have_sound) return; - if (statuscnt > 0) { + + if (delayed_start) { + if (delayed_start > time (NULL)) + return; + delayed_start = 0; + } + + if (statuscnt > 0 && tframe != timeframes) { + tframe = timeframes; statuscnt--; if (statuscnt == 0) gui_data.sndbuf_status = 0; diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 3772702e..7a0ea4bf 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -175,7 +175,6 @@ TCHAR help_file[MAX_DPATH]; int af_path_2005; int quickstart = 1, configurationcache = 1, relativepaths = 0; -static int multi_display = 1; static TCHAR *inipath = NULL; static int guijoybutton[MAX_JPORTS]; @@ -2970,7 +2969,6 @@ int target_parse_option (struct uae_prefs *p, const TCHAR *option, const TCHAR * || cfgfile_intval (option, value, L"midi_device", &p->win32_midioutdev, 1) || cfgfile_intval (option, value, L"midiout_device", &p->win32_midioutdev, 1) || cfgfile_intval (option, value, L"midiin_device", &p->win32_midiindev, 1) - || cfgfile_intval (option, value, L"soundcard", &p->win32_soundcard, 1) || cfgfile_intval (option, value, L"samplersoundcard", &p->win32_samplersoundcard, 1) || cfgfile_yesno (option, value, L"soundcard_exclusive", &p->win32_soundexclusive) || cfgfile_yesno (option, value, L"notaskbarbutton", &p->win32_notaskbarbutton) @@ -2993,6 +2991,12 @@ int target_parse_option (struct uae_prefs *p, const TCHAR *option, const TCHAR * if (cfgfile_yesno (option, value, L"rtg_scale_allow", &p->win32_rtgallowscaling)) return 1; + if (cfgfile_intval (option, value, L"soundcard", &p->win32_soundcard, 1)) { + if (p->win32_soundcard < 0 || p->win32_soundcard >= MAX_SOUND_DEVICES || sound_devices[p->win32_soundcard] == NULL) + p->win32_soundcard = 0; + return 1; + } + if (cfgfile_string (option, value, L"soundcardname", tmpbuf, sizeof tmpbuf / sizeof (TCHAR))) { int i, num; @@ -4629,7 +4633,6 @@ static int parseargs (const TCHAR *argx, const TCHAR *np, const TCHAR *np2) return 1; } if (!_tcscmp (arg, L"nomultidisplay")) { - multi_display = 0; return 1; } if (!_tcscmp (arg, L"legacypaths")) { @@ -4986,7 +4989,7 @@ static int PASCAL WinMain2 (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR WIN32_HandleRegistryStuff (); write_log (L"Enumerating display devices.. \n"); - enumeratedisplays (multi_display); + enumeratedisplays (); write_log (L"Sorting devices and modes..\n"); sortdisplays (); write_log (L"Display buffer mode = %d\n", ddforceram); diff --git a/od-win32/win32.h b/od-win32/win32.h index 66e3bf84..bc1b96b0 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -19,8 +19,8 @@ #define LANG_DLL 1 //#define WINUAEBETA L"" -#define WINUAEBETA L"Beta 4" -#define WINUAEDATE MAKEBD(2011, 12, 12) +#define WINUAEBETA L"Beta 5" +#define WINUAEDATE MAKEBD(2011, 12, 18) #define WINUAEEXTRA L"" #define WINUAEREV L"" diff --git a/od-win32/win32_filesys.cpp b/od-win32/win32_filesys.cpp index bd8b7662..641298e8 100644 --- a/od-win32/win32_filesys.cpp +++ b/od-win32/win32_filesys.cpp @@ -164,7 +164,7 @@ static void filesys_addexternals (void) } devname[0] = 0; for (;;) { - if (drivetype == DRIVE_CDROM && currprefs.win32_automount_cddrives) { + if (drivetype == DRIVE_CDROM && currprefs.win32_automount_cddrives && !currprefs.scsi) { _stprintf (devname, L"WinCD_%c", drive); rw = 0; break; diff --git a/od-win32/win32_scaler.cpp b/od-win32/win32_scaler.cpp index 51b6ec3d..9de04bd3 100644 --- a/od-win32/win32_scaler.cpp +++ b/od-win32/win32_scaler.cpp @@ -114,7 +114,7 @@ static int vblscale2 (int v) return v; } -static void fixh (int *ah, int *th, int minh) +static void fixh (int *ah, int minh) { if (!isnativevidbuf ()) return; @@ -124,8 +124,7 @@ static void fixh (int *ah, int *th, int minh) max = minh; if (*ah > max) *ah = max; - if (*th > max) - *th = max; + } } @@ -133,7 +132,7 @@ static uae_u8 *getfilterrect1 (RECT *sr, RECT *dr, int dst_width, int dst_height { int aws, ahs; - fixh (&ah, &temp_height, dst_height); + fixh (&ah, dst_height); aws = aw * scale; ahs = ah * scale; @@ -220,7 +219,7 @@ void getfilterrect2 (RECT *sr, RECT *dr, RECT *zr, int dst_width, int dst_height fpux_save (&fpuv); - fixh (&ah, &temp_height, dst_height); + fixh (&ah, dst_height); getinit (); ahs2 = vblscale (ah) * scale; diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index 28bf738e..5f7ddc98 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -92,7 +92,6 @@ struct winuae_currentmode { }; struct MultiDisplay Displays[MAX_DISPLAYS]; -static GUID *displayGUID; static struct winuae_currentmode currentmodestruct; static int screen_is_initialized; @@ -105,7 +104,7 @@ int window_extra_width, window_extra_height; static struct winuae_currentmode *currentmode = ¤tmodestruct; static int wasfullwindow_a, wasfullwindow_p; -static int vblankbasewait, vblankbasewait2, vblankbasefull; +static int vblankbasewait, vblankbasewait2, vblankbasewait3, vblankbasefull; int screen_is_picasso = 0; @@ -203,7 +202,7 @@ static uae_u8 scrlinebuf[4096 * 4]; /* this is too large, but let's rather play struct MultiDisplay *getdisplay (struct uae_prefs *p) { int i; - int display = p->gfx_display; + int display = p->gfx_display - 1; i = 0; while (Displays[i].name) { @@ -220,6 +219,8 @@ struct MultiDisplay *getdisplay (struct uae_prefs *p) } if (display >= i) display = 0; + if (display < 0) + display = 0; return &Displays[display]; } @@ -394,7 +395,7 @@ oops: return 0; } -static void addmode (struct MultiDisplay *md, int w, int h, int d, int rate, int nondx) +static void addmode (struct MultiDisplay *md, int w, int h, int d, int rate, int rawmode) { int ct; int i, j; @@ -422,7 +423,7 @@ static void addmode (struct MultiDisplay *md, int w, int h, int d, int rate, int } if (j < MAX_REFRESH_RATES) { md->DisplayModes[i].refresh[j] = rate; - md->DisplayModes[i].refreshtype[j] = nondx; + md->DisplayModes[i].refreshtype[j] = rawmode; md->DisplayModes[i].refresh[j + 1] = 0; return; } @@ -434,12 +435,12 @@ static void addmode (struct MultiDisplay *md, int w, int h, int d, int rate, int i++; if (i >= MAX_PICASSO_MODES - 1) return; - md->DisplayModes[i].nondx = nondx; + md->DisplayModes[i].rawmode = rawmode; md->DisplayModes[i].res.width = w; md->DisplayModes[i].res.height = h; md->DisplayModes[i].depth = d; md->DisplayModes[i].refresh[0] = rate; - md->DisplayModes[i].refreshtype[0] = nondx; + md->DisplayModes[i].refreshtype[0] = rawmode; md->DisplayModes[i].refresh[1] = 0; md->DisplayModes[i].colormodes = ct; md->DisplayModes[i + 1].depth = -1; @@ -447,35 +448,6 @@ static void addmode (struct MultiDisplay *md, int w, int h, int d, int rate, int md->DisplayModes[i].res.width, md->DisplayModes[i].res.height, md->DisplayModes[i].depth * 8); } -static HRESULT CALLBACK modesCallback (LPDDSURFACEDESC2 modeDesc, LPVOID context) -{ - struct MultiDisplay *md = (struct MultiDisplay*)context; - RGBFTYPE colortype; - int depth, ct; - - colortype = DirectDraw_GetSurfacePixelFormat (modeDesc); - ct = 1 << colortype; - depth = 0; - if (ct & RGBMASK_8BIT) - return DDENUMRET_OK; - else if (ct & RGBMASK_15BIT) - depth = 15; - else if (ct & RGBMASK_16BIT) - depth = 16; - else if (ct & RGBMASK_24BIT) - return DDENUMRET_OK; - else if (ct & RGBMASK_32BIT) - depth = 32; - if (depth == 0) - return DDENUMRET_OK; - if (colortype == RGBFB_NONE) - return DDENUMRET_OK; - if (modeDesc->dwWidth > 2560 || modeDesc->dwHeight > 2048) - return DDENUMRET_OK; - addmode (md, modeDesc->dwWidth, modeDesc->dwHeight, depth, modeDesc->dwRefreshRate, 0); - return DDENUMRET_OK; -} - static int _cdecl resolution_compare (const void *a, const void *b) { struct PicassoResolution *ma = (struct PicassoResolution *)a; @@ -529,7 +501,7 @@ static void modesList (struct MultiDisplay *md) i = 0; while (md->DisplayModes[i].depth >= 0) { - write_log (L"%d: %s%s (", i, md->DisplayModes[i].nondx ? L"!" : L"", md->DisplayModes[i].name); + write_log (L"%d: %s%s (", i, md->DisplayModes[i].rawmode ? L"!" : L"", md->DisplayModes[i].name); j = 0; while (md->DisplayModes[i].refresh[j] > 0) { if (j > 0) @@ -545,71 +517,55 @@ static void modesList (struct MultiDisplay *md) } } -BOOL CALLBACK displaysCallback (GUID *guid, char *adesc, char *aname, LPVOID ctx, HMONITOR hm) +static BOOL CALLBACK monitorEnumProc (HMONITOR h, HDC hdc, LPRECT rect, LPARAM data) { struct MultiDisplay *md = Displays; MONITORINFOEX lpmi; - TCHAR tmp[200]; - TCHAR *desc = au (adesc); - TCHAR *name = au (aname); - int ret = 0; - - while (md->name) { - if (md - Displays >= MAX_DISPLAYS) - goto end; + lpmi.cbSize = sizeof lpmi; + GetMonitorInfo(h, (LPMONITORINFO)&lpmi); + while (md - Displays < MAX_DISPLAYS) { + if (!_tcscmp (md->name3, lpmi.szDevice)) { + TCHAR tmp[1000]; + md->rect = lpmi.rcMonitor; + if (md->rect.left == 0 && md->rect.top == 0) + _stprintf (tmp, L"%s (%d*%d)", md->name, md->rect.right - md->rect.left, md->rect.bottom - md->rect.top); + else + _stprintf (tmp, L"%s (%d*%d) [%d*%d]", md->name, md->rect.right - md->rect.left, md->rect.bottom - md->rect.top, md->rect.left, md->rect.top); + xfree (md->name); + md->name = my_strdup (tmp); + return TRUE; + } md++; } - lpmi.cbSize = sizeof (lpmi); - if (guid == 0) { - POINT pt = { 0, 0 }; - md->primary = 1; - GetMonitorInfo (MonitorFromPoint(pt, MONITOR_DEFAULTTOPRIMARY), (LPMONITORINFO)&lpmi); - } else { - memcpy (&md->guid, guid, sizeof (GUID)); - GetMonitorInfo (hm, (LPMONITORINFO)&lpmi); - } - md->rect = lpmi.rcMonitor; - if (md->rect.left == 0 && md->rect.top == 0) - _stprintf (tmp, L"%s (%d*%d)", desc, md->rect.right - md->rect.left, md->rect.bottom - md->rect.top); - else - _stprintf (tmp, L"%s (%d*%d) [%d*%d]", desc, md->rect.right - md->rect.left, md->rect.bottom - md->rect.top, md->rect.left, md->rect.top); - md->name = my_strdup (tmp); - md->name2 = my_strdup (desc); - md->name3 = my_strdup (name); - write_log (L"'%s' '%s' %s\n", desc, name, outGUID(guid)); - ret = 1; -end: - xfree (name); - xfree (desc); - return ret; -} - -static BOOL CALLBACK monitorEnumProc (HMONITOR h, HDC hdc, LPRECT rect, LPARAM data) -{ - MONITORINFOEX lpmi; - int cnt = *((int*)data); - if (!Displays[cnt].name) - return FALSE; - lpmi.cbSize = sizeof (lpmi); - GetMonitorInfo(h, (LPMONITORINFO)&lpmi); - Displays[cnt].rect = *rect; - Displays[cnt].gdi = TRUE; - (*((int*)data))++; return TRUE; } -void enumeratedisplays (int multi) +void enumeratedisplays (void) { - if (multi) { - int cnt = 1; - DirectDraw_EnumDisplays (displaysCallback); - EnumDisplayMonitors (NULL, NULL, monitorEnumProc, (LPARAM)&cnt); - } else { - write_log (L"Multimonitor detection disabled\n"); - Displays[0].primary = 1; - Displays[0].name = L"Display"; - Displays[0].disabled = 0; + struct MultiDisplay *md = Displays; + int adapterindex = 0; + DISPLAY_DEVICE add; + add.cb = sizeof add; + while (EnumDisplayDevices (NULL, adapterindex, &add, 0)) { + int monitorindex = 0; + adapterindex++; + if (add.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) + continue; + DISPLAY_DEVICE mdd; + mdd.cb = sizeof mdd; + while (EnumDisplayDevices (add.DeviceName, monitorindex, &mdd, 0)) { + monitorindex++; + if (md - Displays >= MAX_DISPLAYS) + return; + md->name3 = my_strdup (add.DeviceName); + md->name2 = my_strdup (mdd.DeviceKey); + md->name = my_strdup (mdd.DeviceString); + if (add.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) + md->primary = 1; + md++; + } } + EnumDisplayMonitors (NULL, NULL, monitorEnumProc, NULL); } static int makesort (struct MultiDisplay *md) @@ -627,7 +583,7 @@ static int makesort (struct MultiDisplay *md) void sortdisplays (void) { struct MultiDisplay *md1, *md2, tmp; - int i, idx, idx2; + int i, idx; md1 = Displays; while (md1->name) { @@ -660,61 +616,45 @@ void sortdisplays (void) ReleaseDC (NULL, hdc); } - int maxw = 0, maxh = 0; - if (DirectDraw_Start (NULL)) { - DirectDraw_EnumDisplayModes (DDEDM_REFRESHRATES, modesCallback, md1); - idx2 = 0; - while (md1->DisplayModes[idx2].depth >= 0) { - struct PicassoResolution *pr = &md1->DisplayModes[idx2]; - if (pr->res.width > maxw) - maxw = pr->res.width; - if (pr->res.height > maxh) - maxh = pr->res.height; - idx2++; - } - DirectDraw_Release (); - } - write_log (L"Desktop: W=%d H=%d B=%d. MaxW=%d MaxH=%d CXVS=%d CYVS=%d\n", w, h, b, maxw, maxh, + write_log (L"Desktop: W=%d H=%d B=%d. CXVS=%d CYVS=%d\n", w, h, b, GetSystemMetrics (SM_CXVIRTUALSCREEN), GetSystemMetrics (SM_CYVIRTUALSCREEN)); - idx = 0; - for (;;) { - int found; + for (int mode = 0; mode < 2; mode++) { DEVMODE dm; dm.dmSize = sizeof dm; dm.dmDriverExtra = 0; - if (!EnumDisplaySettingsEx (md1->primary ? NULL : md1->name3, idx, &dm, EDS_RAWMODE)) - break; - idx2 = 0; - found = 0; - while (md1->DisplayModes[idx2].depth >= 0 && !found) { - struct PicassoResolution *pr = &md1->DisplayModes[idx2]; - if (pr->res.width == dm.dmPelsWidth && pr->res.height == dm.dmPelsHeight && pr->depth == dm.dmBitsPerPel / 8) { - for (i = 0; pr->refresh[i]; i++) { - if (pr->refresh[i] == dm.dmDisplayFrequency) { - found = 1; - break; + idx = 0; + while (EnumDisplaySettingsEx (md1->name3, idx, &dm, mode ? EDS_RAWMODE : 0)) { + int found = 0; + int idx2 = 0; + while (md1->DisplayModes[idx2].depth >= 0 && !found) { + struct PicassoResolution *pr = &md1->DisplayModes[idx2]; + if (pr->res.width == dm.dmPelsWidth && pr->res.height == dm.dmPelsHeight && pr->depth == dm.dmBitsPerPel / 8) { + for (i = 0; pr->refresh[i]; i++) { + if (pr->refresh[i] == dm.dmDisplayFrequency) { + found = 1; + break; + } } } + idx2++; } - idx2++; - } - if (!found && dm.dmBitsPerPel > 8) { - int freq = 0; + if (!found && dm.dmBitsPerPel > 8) { + int freq = 0; #if 0 - write_log (L"EnumDisplaySettings(%dx%dx%d %dHz %08x)\n", - dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, dm.dmDisplayFrequency, dm.dmFields); + write_log (L"EnumDisplaySettings(%dx%dx%d %dHz %08x)\n", + dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, dm.dmDisplayFrequency, dm.dmFields); #endif - if (dm.dmFields & DM_DISPLAYFREQUENCY) { - freq = dm.dmDisplayFrequency; - if (freq < 10) - freq = 0; - } - if (freq < 75 && dm.dmPelsWidth <= maxw && dm.dmPelsHeight <= maxh) { - if ((dm.dmFields & DM_PELSWIDTH) && (dm.dmFields & DM_PELSHEIGHT) && (dm.dmFields & DM_BITSPERPEL)) - addmode (md1, dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, freq, 1); + if (dm.dmFields & DM_DISPLAYFREQUENCY) { + freq = dm.dmDisplayFrequency; + if (freq < 10) + freq = 0; + } + if ((dm.dmFields & DM_PELSWIDTH) && (dm.dmFields & DM_PELSHEIGHT) && (dm.dmFields & DM_BITSPERPEL)) { + addmode (md1, dm.dmPelsWidth, dm.dmPelsHeight, dm.dmBitsPerPel, freq, mode); + } } + idx++; } - idx++; } //dhack(); sortmodes (md1); @@ -727,7 +667,6 @@ void sortdisplays (void) write_log (L"'%s', %d display modes (%s)\n", md1->name, i, md1->disabled ? L"disabled" : L"enabled"); md1++; } - displayGUID = NULL; } /* DirectX will fail with "Mode not supported" if we try to switch to a full @@ -1270,9 +1209,8 @@ static int open_windows (int full) #ifdef OPENGL OGL_free (); #endif - if (!DirectDraw_Start (displayGUID)) + if (!DirectDraw_Start ()) return 0; - write_log (L"DirectDraw GUID=%s\n", outGUID (displayGUID)); init_round = 0; ret = -2; @@ -1285,7 +1223,7 @@ static int open_windows (int full) init_round++; if (ret < -9) { DirectDraw_Release (); - if (!DirectDraw_Start (displayGUID)) + if (!DirectDraw_Start ()) return 0; } } while (ret < 0); @@ -1464,6 +1402,7 @@ int check_prefs_changed_gfx (void) init_custom (); if (c & 4) { pause_sound (); + reset_sound (); resume_sound (); } inputdevice_acquire (TRUE); @@ -1626,13 +1565,10 @@ static int alpha; void init_colors (void) { /* init colors */ - switch(currentmode->current_depth / 8) - { - case 1: - break; - case 2: - case 3: - case 4: + if (currentmode->flags & DM_D3D) { + D3D_getpixelformat (currentmode->current_depth, + &red_bits, &green_bits, &blue_bits, &red_shift, &green_shift, &blue_shift, &alpha_bits, &alpha_shift, &alpha); + } else { red_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (red_mask)); green_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (green_mask)); blue_bits = bits_in_mask (DirectDraw_GetPixelFormatBitMask (blue_mask)); @@ -1641,14 +1577,6 @@ void init_colors (void) blue_shift = mask_shift (DirectDraw_GetPixelFormatBitMask (blue_mask)); alpha_bits = 0; alpha_shift = 0; - break; - } - - if (currentmode->flags & DM_D3D) { -#ifdef D3D - D3D_getpixelformat (currentmode->current_depth, - &red_bits, &green_bits, &blue_bits, &red_shift, &green_shift, &blue_shift, &alpha_bits, &alpha_shift, &alpha); -#endif } if (!(currentmode->flags & (DM_D3D))) { @@ -1997,9 +1925,6 @@ int graphics_init (void) int graphics_setup (void) { - if (!DirectDraw_Start (NULL)) - return 0; - DirectDraw_Release (); #ifdef PICASSO96 InitPicasso96 (); #endif @@ -2218,15 +2143,14 @@ static int getbestmode (int nextbest) } -static bool waitvblankstate (bool state) +static bool waitvblankstate (bool state, int *maxvpos) { if (currprefs.gfx_api) { - return D3D_waitvblankstate (state); + return D3D_waitvblankstate (state, maxvpos); } else { - return DirectDraw_waitvblankstate (state); + return DirectDraw_waitvblankstate (state, maxvpos); } } - static bool getvblankstate (bool *state) { if (currprefs.gfx_api) { @@ -2239,7 +2163,6 @@ static bool getvblankstate (bool *state) return true; } } - double getcurrentvblankrate (void) { if (remembered_vblank) @@ -2249,6 +2172,20 @@ double getcurrentvblankrate (void) else return DirectDraw_CurrentRefreshRate (); } +static int getvblankpos (void) +{ + int vpos = -2; + if (currprefs.gfx_api) { + if (!D3D_getvblankpos (&vpos)) + return -2; + return vpos; + } else { + bool state; + if (!DirectDraw_getvblankstate (&state)) + return -2; + return state ? -1 : 0; + } +} static bool threaded_vsync = false; volatile bool thread_vblank_found; @@ -2265,15 +2202,16 @@ static void _cdecl vblankthread (void *dummy) SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_LOWEST); while (vblankthread_mode == 0) vblankthread_counter++; - SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_ABOVE_NORMAL); + SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_HIGHEST); } else if (vblankthread_mode == VBLANKTH_IDLE) { // idle mode - Sleep(20); + Sleep (100); } else if (vblankthread_mode == VBLANKTH_ACTIVE_WAIT) { sleep_millis (1); } else if (vblankthread_mode == VBLANKTH_ACTIVE_START) { // do not start until vblank has been passed bool vb = false; + getvblankstate (&vb); bool ok = getvblankstate (&vb); if (vb == false) vblankthread_mode = VBLANKTH_ACTIVE; @@ -2292,8 +2230,10 @@ static void _cdecl vblankthread (void *dummy) show_screen (); //write_log (L"%d\n", t - thread_vblank_time); thread_vblank_time = t; + vblankthread_mode = VBLANKTH_ACTIVE_WAIT; } - donotwait = true; + if (t - thread_vblank_time > vblankbasewait3 && cpu_number > 2) + donotwait = true; } } if (t - vblank_prev_time > vblankbasefull * 3) @@ -2307,114 +2247,22 @@ static void _cdecl vblankthread (void *dummy) vblankthread_mode = -1; } - -double vblank_calibrate (double approx_vblank, bool waitonly) -{ - frame_time_t t1, t2; - double tsum, tsum2, tval, tfirst; - int maxcnt, maxtotal, total, cnt, tcnt2; - HANDLE th; - - threaded_vsync = (cpu_number > 1 && currprefs.m68k_speed < 0); - - if (remembered_vblank > 0 && (!threaded_vsync || (threaded_vsync && vblankthread_mode > 0))) - return remembered_vblank; - if (waitonly) { - vblankbasefull = syncbase / approx_vblank; - vblankbasewait = (syncbase / approx_vblank) * 3 / 4; - vblankbasewait2 = (syncbase / approx_vblank) * 7 / 10; - remembered_vblank = -1; - return -1; - } - - th = GetCurrentThread (); - int oldpri = GetThreadPriority (th); - SetThreadPriority (th, THREAD_PRIORITY_HIGHEST); - if (vblankthread_mode <= VBLANKTH_KILL) { - vblankthread_mode = VBLANKTH_CALIBRATE; - _beginthread (&vblankthread, 0, 0); - } else { - changevblankthreadmode (VBLANKTH_CALIBRATE); - } - sleep_millis (100); - maxtotal = 10; - maxcnt = maxtotal; - tsum2 = 0; - tcnt2 = 0; - for (maxcnt = 0; maxcnt < maxtotal; maxcnt++) { - total = 10; - tsum = 0; - cnt = total; - for (cnt = 0; cnt < total; cnt++) { - if (!waitvblankstate (true)) - goto fail; - if (!waitvblankstate (false)) - goto fail; - if (!waitvblankstate (true)) - goto fail; - t1 = read_processor_time (); - if (!waitvblankstate (false)) - goto fail; - if (!waitvblankstate (true)) - goto fail; - t2 = read_processor_time (); - tval = (double)syncbase / (t2 - t1); - if (cnt == 0) - tfirst = tval; - if (abs (tval - tfirst) > 1) { - write_log (L"Very unstable vsync! %.6f vs %.6f, retrying..\n", tval, tfirst); - break; - } - tsum2 += tval; - tcnt2++; - if (abs (tval - tfirst) > 0.1) { - write_log (L"Unstable vsync! %.6f vs %.6f\n", tval, tfirst); - break; - } - tsum += tval; - } - if (cnt >= total) - break; - } - changevblankthreadmode (threaded_vsync ? VBLANKTH_IDLE : VBLANKTH_KILL); - SetThreadPriority (th, oldpri); - if (maxcnt >= maxtotal) { - tsum = tsum2 / tcnt2; - write_log (L"Unstable vsync reporting, using average value\n"); - } else { - tsum /= total; - } - if (tsum >= 85) - tsum /= 2; - vblankbasefull = (syncbase / tsum); - vblankbasewait = (syncbase / tsum) * 3 / 4; - vblankbasewait2 = (syncbase / tsum) * 5 / 10; - write_log (L"VSync calibration: %.6fHz. Units = %d Mode = %s\n", tsum, vblankbasefull, threaded_vsync ? L"threaded" : L"normal"); - remembered_vblank = tsum; - vblank_prev_time = read_processor_time (); - return tsum; -fail: - write_log (L"VSync calibration failed\n"); - changed_prefs.gfx_avsync = 0; - return -1; -} - static int frame_missed, frame_counted, frame_errors; static int frame_usage, frame_usage_avg, frame_usage_total; extern int log_vsync; -void vsync_busywait_end (void) +frame_time_t vsync_busywait_end (void) { -// frame_time_t t = read_processor_time (); - + while (!thread_vblank_found && vblankthread_mode == VBLANKTH_ACTIVE) + sleep_millis (1); changevblankthreadmode (VBLANKTH_ACTIVE_WAIT); - -// write_log (L"%d\n", t - thread_vblank_time); - -// if (t - vblank_prev_time > vblankbasefull + vblankbasefull * 1 / 3) { -// frame_missed++; -// waitvblankstate (true); -// } + for (;;) { + int vpos = getvblankpos (); + if (vpos != -1) { + break; + } + } + return thread_vblank_time; } void vsync_busywait_start (void) @@ -2434,7 +2282,7 @@ bool vsync_busywait_do (int *freetime) t = read_processor_time (); ti = t - prevtime; if (ti > 2 * vblankbasefull || ti < -2 * vblankbasefull) { - waitvblankstate (false); + waitvblankstate (false, NULL); t = read_processor_time (); vblank_prev_time = t; thread_vblank_time = t; @@ -2497,6 +2345,102 @@ bool vsync_busywait_do (int *freetime) return false; } +double vblank_calibrate (double approx_vblank, bool waitonly) +{ + frame_time_t t1, t2; + double tsum, tsum2, tval, tfirst; + int maxcnt, maxtotal, total, cnt, tcnt2; + HANDLE th; + int maxvpos, div; + + threaded_vsync = (cpu_number > 1 && currprefs.m68k_speed < 0); + + if (remembered_vblank > 0 && (!threaded_vsync || (threaded_vsync && vblankthread_mode > 0))) + return remembered_vblank; + if (waitonly) { + vblankbasefull = syncbase / approx_vblank; + vblankbasewait = (syncbase / approx_vblank) * 3 / 4; + vblankbasewait2 = (syncbase / approx_vblank) * 7 / 10; + vblankbasewait3 = (syncbase / approx_vblank) * 9 / 10; + remembered_vblank = -1; + return -1; + } + + th = GetCurrentThread (); + int oldpri = GetThreadPriority (th); + SetThreadPriority (th, THREAD_PRIORITY_HIGHEST); + if (vblankthread_mode <= VBLANKTH_KILL) { + vblankthread_mode = VBLANKTH_CALIBRATE; + _beginthread (&vblankthread, 0, 0); + } else { + changevblankthreadmode (VBLANKTH_CALIBRATE); + } + sleep_millis (100); + maxtotal = 10; + maxcnt = maxtotal; + tsum2 = 0; + tcnt2 = 0; + for (maxcnt = 0; maxcnt < maxtotal; maxcnt++) { + total = 10; + tsum = 0; + cnt = total; + for (cnt = 0; cnt < total; cnt++) { + if (!waitvblankstate (true, NULL)) + goto fail; + if (!waitvblankstate (false, NULL)) + goto fail; + if (!waitvblankstate (true, NULL)) + goto fail; + t1 = read_processor_time (); + if (!waitvblankstate (false, NULL)) + goto fail; + if (!waitvblankstate (true, &maxvpos)) + goto fail; + t2 = read_processor_time (); + tval = (double)syncbase / (t2 - t1); + if (cnt == 0) + tfirst = tval; + if (abs (tval - tfirst) > 1) { + write_log (L"Very unstable vsync! %.6f vs %.6f, retrying..\n", tval, tfirst); + break; + } + tsum2 += tval; + tcnt2++; + if (abs (tval - tfirst) > 0.1) { + write_log (L"Unstable vsync! %.6f vs %.6f\n", tval, tfirst); + break; + } + tsum += tval; + } + if (cnt >= total) + break; + } + changevblankthreadmode (VBLANKTH_IDLE); + SetThreadPriority (th, oldpri); + if (maxcnt >= maxtotal) { + tsum = tsum2 / tcnt2; + write_log (L"Unstable vsync reporting, using average value\n"); + } else { + tsum /= total; + } + div = 1; + if (tsum >= 85) + div = 2; + tsum2 = tsum / div; + vblankbasefull = (syncbase / tsum2); + vblankbasewait = (syncbase / tsum2) * 3 / 4; + vblankbasewait2 = (syncbase / tsum2) * 70 / 100; + vblankbasewait3 = (syncbase / tsum2) * 90 / 100; + write_log (L"VSync calibration: %.6fHz/%d=%.6fHz. MaxV=%d Units=%d Mode=%s\n", tsum, div, tsum2, maxvpos, vblankbasefull, threaded_vsync ? L"threaded" : L"normal"); + remembered_vblank = tsum2; + vblank_prev_time = read_processor_time (); + return tsum; +fail: + write_log (L"VSync calibration failed\n"); + changed_prefs.gfx_avsync = 0; + return -1; +} + static int create_windows_2 (void) { static int firstwindow = 1; @@ -2807,7 +2751,6 @@ static BOOL doInit (void) { int fs_warning = -1; TCHAR tmpstr[300]; - RGBFTYPE colortype; int tmp_depth; int ret = 0; @@ -2816,7 +2759,6 @@ static BOOL doInit (void) wasfullwindow_a = currprefs.gfx_afullscreen == GFX_FULLWINDOW ? 1 : -1; if (wasfullwindow_p == 0) wasfullwindow_p = currprefs.gfx_pfullscreen == GFX_FULLWINDOW ? 1 : -1; - colortype = DirectDraw_GetPixelFormat (); gfxmode_reset (); for (;;) { @@ -2830,9 +2772,6 @@ static BOOL doInit (void) currentmode->native_height = rc.bottom - rc.top; } - write_log (L"W=%d H=%d B=%d CT=%d\n", - DirectDraw_CurrentWidth (), DirectDraw_CurrentHeight (), DirectDraw_GetCurrentDepth (), colortype); - if (isfullscreen() <= 0 && !(currentmode->flags & (DM_D3D))) { currentmode->current_depth = DirectDraw_GetCurrentDepth (); updatemodes (); @@ -2841,11 +2780,7 @@ static BOOL doInit (void) updatemodes (); } - if (colortype == RGBFB_NONE) { - fs_warning = IDS_UNSUPPORTEDSCREENMODE_1; - } else if (colortype == RGBFB_CLUT) { - fs_warning = IDS_UNSUPPORTEDSCREENMODE_2; - } else if (currentmode->current_width > GetSystemMetrics(SM_CXVIRTUALSCREEN) || + if (currentmode->current_width > GetSystemMetrics(SM_CXVIRTUALSCREEN) || currentmode->current_height > GetSystemMetrics(SM_CYVIRTUALSCREEN)) { if (!console_logging) fs_warning = IDS_UNSUPPORTEDSCREENMODE_3; @@ -2858,7 +2793,7 @@ static BOOL doInit (void) DirectDraw_Release (); _stprintf (tmpstr, szMessage, szMessage2); gui_message (tmpstr); - DirectDraw_Start (displayGUID); + DirectDraw_Start (); if (screen_is_picasso) changed_prefs.gfx_pfullscreen = currprefs.gfx_pfullscreen = GFX_FULLSCREEN; else @@ -3056,16 +2991,11 @@ void updatewinfsmode (struct uae_prefs *p) } else { p->gfx_size = p->gfx_size_win; } - displayGUID = NULL; md = getdisplay (p); if (md->disabled) { p->gfx_display = 0; md = getdisplay (p); } - if (!md->primary) - displayGUID = &md->guid; - if (isfullscreen () == 0) - displayGUID = NULL; config_changed = 1; } diff --git a/od-win32/win32gfx.h b/od-win32/win32gfx.h index 879ad095..2ad4261e 100644 --- a/od-win32/win32gfx.h +++ b/od-win32/win32gfx.h @@ -4,7 +4,7 @@ #include extern void sortdisplays (void); -extern void enumeratedisplays (int); +extern void enumeratedisplays (void); int WIN32GFX_IsPicassoScreen (void); int WIN32GFX_GetWidth (void); diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index a8dacad2..0bc09c9b 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -1832,6 +1832,7 @@ void gui_display (int shortcut) savestate_state = STATE_DORESTORE; } manual_painting_needed--; /* So that WM_PAINT doesn't need to use custom refreshing */ + reset_sound (); resumepaused (9); inputdevice_copyconfig (&changed_prefs, &currprefs); inputdevice_config_change_test (); @@ -5336,67 +5337,26 @@ static void enable_for_chipsetdlg (HWND hDlg) ew (hDlg, IDC_CS_EXT, workprefs.cs_compatible ? TRUE : FALSE); } -static int fakerefreshrates[] = { 50, 60, 100, 120, 0 }; -struct storedrefreshrate -{ - int rate, type; -}; -static struct storedrefreshrate storedrefreshrates[MAX_REFRESH_RATES + 1]; - static void init_frequency_combo (HWND hDlg, int dmode) { - int i, j, freq; + int i; TCHAR hz[20], hz2[20], txt[100]; LRESULT index; struct MultiDisplay *md = getdisplay (&workprefs); - i = 0; index = 0; - while (dmode >= 0 && (freq = md->DisplayModes[dmode].refresh[i]) > 0 && index < MAX_REFRESH_RATES) { - storedrefreshrates[index].rate = freq; - storedrefreshrates[index++].type = md->DisplayModes[dmode].refreshtype[i]; - i++; - } - i = 0; - while ((freq = fakerefreshrates[i]) > 0 && index < MAX_REFRESH_RATES) { - for (j = 0; j < index; j++) { - if (storedrefreshrates[j].rate == freq) - break; - } - if (j == index) { - storedrefreshrates[index].rate = -freq; - storedrefreshrates[index++].type = 0; - } - i++; - } - storedrefreshrates[index].rate = 0; - for (i = 0; i < index; i++) { - for (j = i + 1; j < index; j++) { - if (abs (storedrefreshrates[i].rate) >= abs (storedrefreshrates[j].rate)) { - struct storedrefreshrate srr; - memcpy (&srr, &storedrefreshrates[i], sizeof (struct storedrefreshrate)); - memcpy (&storedrefreshrates[i], &storedrefreshrates[j], sizeof (struct storedrefreshrate)); - memcpy (&storedrefreshrates[j], &srr, sizeof (struct storedrefreshrate)); - } - } - } - hz[0] = hz2[0] = 0; SendDlgItemMessage(hDlg, IDC_REFRESHRATE, CB_RESETCONTENT, 0, 0); WIN32GUI_LoadUIString (IDS_VSYNC_DEFAULT, txt, sizeof (txt) / sizeof (TCHAR)); SendDlgItemMessage(hDlg, IDC_REFRESHRATE, CB_ADDSTRING, 0, (LPARAM)txt); - for (i = 0; i < index; i++) { - freq = storedrefreshrates[i].rate; - if (freq < 0) { - freq = -freq; - _stprintf (hz, L"(%dHz)", freq); - } else { - _stprintf (hz, L"%dHz", freq); - } + for (i = 0; md->DisplayModes[dmode].refresh[i] > 0; i++) { + int freq = md->DisplayModes[dmode].refresh[i]; + int type = md->DisplayModes[dmode].refreshtype[i]; + _stprintf (hz, L"%dHz", freq); if (freq == 50 || freq == 100) _tcscat (hz, L" PAL"); if (freq == 60 || freq == 120) _tcscat (hz, L" NTSC"); - if (storedrefreshrates[i].type) + if (type) _tcscat (hz, L" (*)"); if (abs (workprefs.gfx_refreshrate) == freq) _tcscpy (hz2, hz); @@ -5768,7 +5728,7 @@ static void init_resolution_combo (HWND hDlg) for (i = 0; md->DisplayModes[i].depth >= 0; i++) { if (md->DisplayModes[i].depth > 1 && md->DisplayModes[i].residx != idx) { _stprintf (tmp, L"%dx%d", md->DisplayModes[i].res.width, md->DisplayModes[i].res.height); - if (md->DisplayModes[i].nondx) + if (md->DisplayModes[i].rawmode) _tcscat (tmp, L" (*)"); SendDlgItemMessage(hDlg, IDC_RESOLUTION, CB_ADDSTRING, 0, (LPARAM)tmp); idx = md->DisplayModes[i].residx; @@ -5783,15 +5743,17 @@ static void init_displays_combo (HWND hDlg) SendDlgItemMessage (hDlg, IDC_DISPLAYSELECT, CB_ADDSTRING, 0, (LPARAM)Displays[i].name); i++; } - if (workprefs.gfx_display >= i) + if (workprefs.gfx_display > i) workprefs.gfx_display = 0; - SendDlgItemMessage (hDlg, IDC_DISPLAYSELECT, CB_SETCURSEL, workprefs.gfx_display, 0); + if (workprefs.gfx_display < 1) + workprefs.gfx_display = 1; + SendDlgItemMessage (hDlg, IDC_DISPLAYSELECT, CB_SETCURSEL, workprefs.gfx_display - 1, 0); } static void values_from_displaydlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { BOOL success = FALSE; - int i, j; + int i; int gfx_width = workprefs.gfx_size_win.width; int gfx_height = workprefs.gfx_size_win.height; LRESULT posn; @@ -5893,14 +5855,35 @@ static void values_from_displaydlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l workprefs.gfx_ycenter = ischecked (hDlg, IDC_YCENTER) ? 2 : 0; /* Smart centering */ workprefs.gfx_autoresolution = ischecked (hDlg, IDC_AUTORESOLUTION); + int dmode = -1; + struct MultiDisplay *md = getdisplay (&workprefs); + LRESULT posn1 = SendDlgItemMessage (hDlg, IDC_RESOLUTION, CB_GETCURSEL, 0, 0); + LRESULT posn2 = SendDlgItemMessage (hDlg, IDC_RESOLUTIONDEPTH, CB_GETCURSEL, 0, 0); + if (posn1 != CB_ERR && posn2 != CB_ERR) { + for (dmode = 0; md->DisplayModes[dmode].depth >= 0; dmode++) { + if (md->DisplayModes[dmode].residx == posn1) + break; + } + if (md->DisplayModes[dmode].depth > 0) { + i = dmode; + while (md->DisplayModes[dmode].residx == posn1) { + if (md->DisplayModes[dmode].depth == gui_display_depths[posn2]) + break; + dmode++; + } + if (md->DisplayModes[dmode].residx != posn1) + dmode = i; + } + } + if (msg == WM_COMMAND && HIWORD (wParam) == CBN_SELCHANGE) { if (LOWORD (wParam) == IDC_DISPLAYSELECT) { posn = SendDlgItemMessage (hDlg, IDC_DISPLAYSELECT, CB_GETCURSEL, 0, 0); - if (posn != CB_ERR && posn != workprefs.gfx_display) { + if (posn != CB_ERR && posn + 1 != workprefs.gfx_display) { if (Displays[posn].disabled) posn = 0; - workprefs.gfx_display = posn; + workprefs.gfx_display = posn + 1; init_resolution_combo (hDlg); init_display_mode (hDlg); } @@ -5909,32 +5892,10 @@ static void values_from_displaydlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l posn = SendDlgItemMessage (hDlg, IDC_LORES, CB_GETCURSEL, 0, 0); if (posn != CB_ERR) workprefs.gfx_resolution = posn; - } else if (LOWORD (wParam) == IDC_RESOLUTION || LOWORD(wParam) == IDC_RESOLUTIONDEPTH) { - struct MultiDisplay *md = getdisplay (&workprefs); - LRESULT posn1, posn2; - posn1 = SendDlgItemMessage (hDlg, IDC_RESOLUTION, CB_GETCURSEL, 0, 0); - if (posn1 == CB_ERR) - return; - posn2 = SendDlgItemMessage (hDlg, IDC_RESOLUTIONDEPTH, CB_GETCURSEL, 0, 0); - if (posn2 == CB_ERR) - return; - for (i = 0; md->DisplayModes[i].depth >= 0; i++) { - if (md->DisplayModes[i].residx == posn1) - break; - } - if (md->DisplayModes[i].depth < 0) - return; - j = i; - while (md->DisplayModes[i].residx == posn1) { - if (md->DisplayModes[i].depth == gui_display_depths[posn2]) - break; - i++; - } - if (md->DisplayModes[i].residx != posn1) - i = j; - workprefs.gfx_size_fs.width = md->DisplayModes[i].res.width; - workprefs.gfx_size_fs.height = md->DisplayModes[i].res.height; - switch(md->DisplayModes[i].depth) + } else if ((LOWORD (wParam) == IDC_RESOLUTION || LOWORD(wParam) == IDC_RESOLUTIONDEPTH) && dmode >= 0) { + workprefs.gfx_size_fs.width = md->DisplayModes[dmode].res.width; + workprefs.gfx_size_fs.height = md->DisplayModes[dmode].res.height; + switch(md->DisplayModes[dmode].depth) { case 2: workprefs.color_mode = 2; @@ -5951,19 +5912,16 @@ static void values_from_displaydlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l SetDlgItemInt (hDlg, IDC_XSIZE, workprefs.gfx_size_win.width, FALSE); SetDlgItemInt (hDlg, IDC_YSIZE, workprefs.gfx_size_win.height, FALSE); init_frequency_combo (hDlg, i); - } else if (LOWORD (wParam) == IDC_REFRESHRATE) { - LRESULT posn1, posn2; + } else if (LOWORD (wParam) == IDC_REFRESHRATE && dmode >= 0) { + LRESULT posn1; posn1 = SendDlgItemMessage (hDlg, IDC_REFRESHRATE, CB_GETCURSEL, 0, 0); if (posn1 == CB_ERR) return; - posn2 = SendDlgItemMessage (hDlg, IDC_RESOLUTION, CB_GETCURSEL, 0, 0); - if (posn2 == CB_ERR) - return; if (posn1 == 0) { workprefs.gfx_refreshrate = 0; } else { posn1--; - workprefs.gfx_refreshrate = storedrefreshrates[posn1].rate; + workprefs.gfx_refreshrate = md->DisplayModes[dmode].refresh[posn1]; } values_to_displaydlg (hDlg); } else if (LOWORD (wParam) == IDC_DA_MODE) { @@ -14737,6 +14695,7 @@ int gui_message_multibutton (int flags, const TCHAR *format,...) if (!gui_active) { if (flipflop) ShowWindow (hAmigaWnd, SW_RESTORE); + reset_sound (); resume_sound (); setmouseactive (focuso > 0 ? 1 : 0); } @@ -14790,6 +14749,7 @@ void gui_message (const TCHAR *format,...) if (!gui_active) { if (flipflop) ShowWindow (hAmigaWnd, SW_RESTORE); + reset_sound (); resume_sound (); setmouseactive (focuso > 0 ? 1 : 0); } diff --git a/od-win32/winuae_msvc10/winuae_msvc.vcxproj b/od-win32/winuae_msvc10/winuae_msvc.vcxproj index ca5057b6..5301a791 100644 --- a/od-win32/winuae_msvc10/winuae_msvc.vcxproj +++ b/od-win32/winuae_msvc10/winuae_msvc.vcxproj @@ -164,7 +164,7 @@ $(OutDir)$(TargetName)$(TargetExt) true LIBCMT;%(IgnoreSpecificDefaultLibraries) - wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;%(DelayLoadDLLs) + wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;ddraw.dll;%(DelayLoadDLLs) true .\Debug/winuae.pdb Windows @@ -291,7 +291,7 @@ %(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\ %(AdditionalManifestDependencies) %(IgnoreSpecificDefaultLibraries) - wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;wininet.dll;avrt.dll;%(DelayLoadDLLs) + wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;wininet.dll;avrt.dll;ddraw.dll;%(DelayLoadDLLs) true .\Release/winuae.pdb Windows @@ -435,7 +435,7 @@ %(AdditionalLibraryDirectories);$(SolutionDir)\..\lib\ %(AdditionalManifestDependencies) %(IgnoreSpecificDefaultLibraries) - wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;wininet.dll;avrt.dll;%(DelayLoadDLLs) + wpcap.dll;packet.dll;d3dx9_43.dll;openal32.dll;wintab32.dll;portaudio_x86.dll;ws2_32.dll;msacm32.dll;wtsapi32.dll;dsound.dll;wininet.dll;avrt.dll;ddraw.dll;%(DelayLoadDLLs) true .\FullRelease/winuae.pdb Windows diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index e3a85ef2..66528833 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,26 @@ +Beta 5: + +- Removed obsolete fake (50), (60), (100) and (120) refresh rates. +- Primary Display Driver monitor selection removed. +- Only primary monitor allowed >75Hz modes. +- Does not load or use ddraw.dll anymore if D3D mode enabled. +- Display and mode enumeration rewritten (does not use ddraw aymore). +- DirectDraw mode vertical positioning fixed (was always on top of screen) +- Fixed Sound panel crash if sound card id stored in configuration file was larger than available number of sound card drivers. +- Handle situation where PortAudio Pa_IsFormatSupported() returns true but Pa_OpenStream() fails with paInvalidSampleRate. + (Usually seems to happen when requesting 44100Hz but hardware supports only 48000Hz) +- VSync sound syncronization improved (All types: DirectSound, WASAPI, OpenAL and PortAudio) +- SND% blue/yellow/red flickering fix, previously flickering speed changed depending on buffer size. +- More fastest possible/JIT low latency vsync updates. + +- AROS CDFS is now UAE boot ROM built-in. "Include CD/DVD drives.." now has two modes: + - if uaescsi.device is not enabled: mount as Windows drive (same as previously) This mode may disappear in the future. + - if uaescsi.device is enabled: mount using built-in CDFS. (Correct file names, protection flags, audio tracks etc..) There is no need to install + Amiga-side CDFS anymore. I am not sure if AROS CDFS if good enough but at least it appears to work.. + + "Include CD/DVD drives.." (+uaescsi.device) can now be used to install OS3.0+ safely. KS2.0+ only. (CDFS requires 2.0+ features) + Beta 4: - Another switching from CE mode to non-CE hang fix. (Blitter nasty related) diff --git a/scsiemul.cpp b/scsiemul.cpp index f4148d45..cca8b927 100644 --- a/scsiemul.cpp +++ b/scsiemul.cpp @@ -527,7 +527,6 @@ static int dev_do_io (struct devstruct *dev, uaecptr request) switch (command) { case CMD_READ: - //write_log (L"CMD_READ %08x %d %d %08x\n", io_data, io_offset, io_length, bmask); if (dev->di.media_inserted <= 0) goto no_media; if (dev->drivetype == INQ_ROMD) { @@ -899,8 +898,13 @@ static int dev_can_quick (uae_u32 command) case CMD_CHANGESTATE: case CMD_PROTSTATUS: case CMD_GETDRIVETYPE: - case CMD_GETNUMTRACKS: return 1; + case CMD_GETNUMTRACKS: + case CMD_ADDCHANGEINT: + case CMD_REMCHANGEINT: + case CD_ADDFRAMEINT: + case CD_REMFRAMEINT: + return -1; } return 0; } @@ -918,6 +922,7 @@ static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) int command = get_word (request + 28); struct priv_devstruct *pdev = getpdevstruct (request); struct devstruct *dev; + int canquick; put_byte (request + 8, NT_MESSAGE); if (!pdev) { @@ -930,9 +935,9 @@ static uae_u32 REGPARAM2 dev_beginio (TrapContext *context) return get_byte (request + 31); } put_byte (request + 31, 0); - if ((flags & 1) && dev_canquick (dev, request)) { - if (dev_do_io (dev, request)) - write_log (L"device %s command %d bug with IO_QUICK\n", getdevname (pdev->type), command); + canquick = dev_canquick (dev, request); + if (((flags & 1) && canquick) || (canquick < 0)) { + dev_do_io (dev, request); return get_byte (request + 31); } else { add_async_request (dev, request, ASYNC_REQUEST_TEMP, 0); @@ -1011,6 +1016,17 @@ static uae_u32 REGPARAM2 dev_abortio (TrapContext *context) #define BTL2UNIT(bus, target, lun) (2 * (bus) + (target) / 8) * 100 + (lun) * 10 + (target % 8) +uae_u16 scsi_get_cd_drive_mask (void) +{ + uae_u16 mask = 0; + for (int i = 0; i < MAX_TOTAL_SCSI_DEVICES; i++) { + struct devstruct *dev = &devst[i]; + if (dev->iscd) + mask |= 1 << i; + } + return mask; +} + static void dev_reset (void) { int i, j; diff --git a/zfile.cpp b/zfile.cpp index 242d1c04..6c61017a 100644 --- a/zfile.cpp +++ b/zfile.cpp @@ -2032,7 +2032,7 @@ struct zfile *zfile_fopen_parent (struct zfile *z, const TCHAR *name, uae_u64 of return l; } -struct zfile *zfile_fopen_data (const TCHAR *name, uae_u64 size, uae_u8 *data) +struct zfile *zfile_fopen_data (const TCHAR *name, uae_u64 size, const uae_u8 *data) { struct zfile *l; @@ -2045,6 +2045,24 @@ struct zfile *zfile_fopen_data (const TCHAR *name, uae_u64 size, uae_u8 *data) return l; } +uae_u8 *zfile_load_data (const TCHAR *name, const uae_u8 *data,int datalen, int *outlen) +{ + struct zfile *zf, *f; + int size; + uae_u8 *out; + + zf = zfile_fopen_data (name, datalen, data); + f = zfile_gunzip (zf); + size = f->datasize; + zfile_fseek (f, 0, SEEK_SET); + out = xmalloc (uae_u8, size); + zfile_fread (out, 1, size, f); + zfile_fclose (f); + *outlen = size; + return out; +} + + int zfile_truncate (struct zfile *z, uae_s64 size) { if (z->data) { -- 2.47.3