From f095e797c6c20fc5adacb5a43b665fcde7c269bc Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Mon, 3 Jun 2013 20:42:48 +0300 Subject: [PATCH] 2610b1 --- a2091.cpp | 40 +- blitter.cpp | 9 +- cfgfile.cpp | 5 + cia.cpp | 25 + debug.cpp | 104 +- drawing.cpp | 18 +- enforcer.cpp | 68 +- filesys.cpp | 22 +- filesys_bootrom.cpp | 1546 +++++++++-------- fpp.cpp | 292 +++- include/inputdevice.h | 2 + include/newcpu.h | 1 - include/options.h | 3 +- inputdevice.cpp | 71 +- memory.cpp | 4 +- newcpu.cpp | 12 +- od-win32/direct3d.cpp | 64 +- od-win32/inttypes.h | 0 od-win32/keyboard_win32.cpp | 5 +- od-win32/resources/resource.h | 1 + od-win32/resources/winuae.rc | 74 +- od-win32/resources/winuae_minimal.rc | 4 +- od-win32/win32.cpp | 8 +- od-win32/win32.h | 6 +- od-win32/win32gui.cpp | 48 +- od-win32/winuae_msvc11/winuae_msvc.vcxproj | 2 +- .../winuae_msvc11/winuae_msvc.vcxproj.filters | 3 + od-win32/winuaechangelog.txt | 31 + 28 files changed, 1470 insertions(+), 998 deletions(-) create mode 100644 od-win32/inttypes.h diff --git a/a2091.cpp b/a2091.cpp index d85681d6..fb6c24d7 100644 --- a/a2091.cpp +++ b/a2091.cpp @@ -8,7 +8,9 @@ */ #define A2091_DEBUG 0 +#define A2091_DEBUG_IO 0 #define A3000_DEBUG 0 +#define A3000_DEBUG_IO 0 #define WD33C93_DEBUG 0 #define WD33C93_DEBUG_PIO 0 @@ -526,7 +528,7 @@ static bool wd_do_transfer_in (void) setphase (0x46); } scsi_start_transfer (scsi); - } else if (wdregs[WD_COMMAND_PHASE] == 0x46) { + } else if (wdregs[WD_COMMAND_PHASE] == 0x46 || wdregs[WD_COMMAND_PHASE] == 0x47) { setphase (0x50); wd_phase = CSR_XFER_DONE | PHS_MESS_IN; scsi_start_transfer (scsi); @@ -750,10 +752,7 @@ static void wd_cmd_trans_info (void) scsi->data_len = gettc (); } else if (wdregs[WD_COMMAND_PHASE] == 0x45) { scsi_emulate_analyze (scsi); - } else if (wdregs[WD_COMMAND_PHASE] == 0x47) { - scsi->direction = -1; // status - scsi->data_len = 1; - } else if (wdregs[WD_COMMAND_PHASE] == 0x46) { + } else if (wdregs[WD_COMMAND_PHASE] == 0x46 || wdregs[WD_COMMAND_PHASE] == 0x47) { scsi->buffer[0] = scsi->status; wdregs[WD_TARGET_LUN] = scsi->status; scsi->direction = -1; // status @@ -821,8 +820,15 @@ static void wd_cmd_reset (bool irq) scsi = NULL; scsidelay_irq[0] = 0; scsidelay_irq[1] = 0; - if (irq) - set_status ((wdregs[0] & 0x08) ? 1 : 0, 200); + auxstatus = 0; + wd_data_avail = 0; + if (irq) { + set_status ((wdregs[0] & 0x08) ? 1 : 0, 50); + } else { + dmac_dma = 0; + dmac_istr = 0; + dmac_cntr = 0; + } } static void wd_cmd_abort (void) @@ -1066,7 +1072,7 @@ static uae_u32 dmac_read_word (uaecptr addr) dmac_istr |= ISTR_FE_FLG; break; } -#if A2091_DEBUG > 0 +#if A2091_DEBUG_IO > 0 write_log (_T("dmac_wget %04X=%04X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; @@ -1103,7 +1109,7 @@ static uae_u32 dmac_read_byte (uaecptr addr) v >>= 8; break; } -#if A2091_DEBUG > 0 +#if A2091_DEBUG_IO > 0 write_log (_T("dmac_bget %04X=%02X PC=%08X\n"), addr, v, M68K_GETPC); #endif return v; @@ -1116,7 +1122,7 @@ static void dmac_write_word (uaecptr addr, uae_u32 b) if (addr >= ROM_OFFSET) return; -#if A2091_DEBUG > 0 +#if A2091_DEBUG_IO > 0 write_log (_T("dmac_wput %04X=%04X PC=%08X\n"), addr, b & 65535, M68K_GETPC); #endif @@ -1174,7 +1180,7 @@ static void dmac_write_byte (uaecptr addr, uae_u32 b) if (addr >= ROM_OFFSET) return; -#if A2091_DEBUG > 0 +#if A2091_DEBUG_IO > 0 write_log (_T("dmac_bput %04X=%02X PC=%08X\n"), addr, b & 255, M68K_GETPC); #endif @@ -1320,7 +1326,7 @@ static void mbdmac_write_word (uae_u32 addr, uae_u32 val) { if (currprefs.cs_mbdmac > 1) return; -#if A3000_DEBUG > 1 +#if A3000_DEBUG_IO > 1 write_log (_T("DMAC_WWRITE %08X=%04X PC=%08X\n"), addr, val & 0xffff, M68K_GETPC); #endif addr &= 0xfffe; @@ -1377,7 +1383,7 @@ static void mbdmac_write_byte (uae_u32 addr, uae_u32 val) { if (currprefs.cs_mbdmac > 1) return; -#if A3000_DEBUG > 1 +#if A3000_DEBUG_IO > 1 write_log (_T("DMAC_BWRITE %08X=%02X PC=%08X\n"), addr, val & 0xff, M68K_GETPC); #endif addr &= 0xffff; @@ -1404,7 +1410,7 @@ static void mbdmac_write_byte (uae_u32 addr, uae_u32 val) static uae_u32 mbdmac_read_word (uae_u32 addr) { -#if A3000_DEBUG > 1 +#if A3000_DEBUG_IO > 1 uae_u32 vaddr = addr; #endif uae_u32 v = 0xffffffff; @@ -1456,7 +1462,7 @@ static uae_u32 mbdmac_read_word (uae_u32 addr) v = 0; break; } -#if A3000_DEBUG > 1 +#if A3000_DEBUG_IO > 1 write_log (_T("DMAC_WREAD %08X=%04X PC=%X\n"), vaddr, v & 0xffff, M68K_GETPC); #endif return v; @@ -1464,7 +1470,7 @@ static uae_u32 mbdmac_read_word (uae_u32 addr) static uae_u32 mbdmac_read_byte (uae_u32 addr) { -#if A3000_DEBUG > 1 +#if A3000_DEBUG_IO > 1 uae_u32 vaddr = addr; #endif uae_u32 v = 0xffffffff; @@ -1489,7 +1495,7 @@ static uae_u32 mbdmac_read_byte (uae_u32 addr) v >>= 8; break; } -#if A3000_DEBUG > 1 +#if A3000_DEBUG_IO > 1 write_log (_T("DMAC_BREAD %08X=%02X PC=%X\n"), vaddr, v & 0xff, M68K_GETPC); #endif return v; diff --git a/blitter.cpp b/blitter.cpp index 4044ab93..12bf642b 100644 --- a/blitter.cpp +++ b/blitter.cpp @@ -7,7 +7,8 @@ * (c) 2002 - 2005 Toni Wilen */ -#define SPEEDUP +#define SPEEDUP 1 +#define BLITTER_DEBUG 0 #include "sysconfig.h" #include "sysdeps.h" @@ -28,7 +29,7 @@ // 4 = no D // 8 = instant -#ifdef BLITTER_DEBUG +#if BLITTER_DEBUG int log_blitter = 1; #else int log_blitter = 0; @@ -399,7 +400,7 @@ static void blitter_dofast (void) bltdpt += (blt_info.hblitsize * 2 + blt_info.bltdmod) * blt_info.vblitsize; } -#ifdef SPEEDUP +#if SPEEDUP if (blitfunc_dofast[mt] && !blitfill) { (*blitfunc_dofast[mt])(bltadatptr, bltbdatptr, bltcdatptr, bltddatptr, &blt_info); } else @@ -498,7 +499,7 @@ static void blitter_dofast_desc (void) bltddatptr = bltdpt; bltdpt -= (blt_info.hblitsize * 2 + blt_info.bltdmod) * blt_info.vblitsize; } -#ifdef SPEEDUP +#if SPEEDUP if (blitfunc_dofast_desc[mt] && !blitfill) { (*blitfunc_dofast_desc[mt])(bltadatptr, bltbdatptr, bltcdatptr, bltddatptr, &blt_info); } else diff --git a/cfgfile.cpp b/cfgfile.cpp index f7e2acb4..ae429583 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -1153,6 +1153,8 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write_bool (f, _T("cpu_cycle_exact"), p->cpu_cycle_exact); cfgfile_write_bool (f, _T("blitter_cycle_exact"), p->blitter_cycle_exact); cfgfile_write_bool (f, _T("cycle_exact"), p->cpu_cycle_exact && p->blitter_cycle_exact ? 1 : 0); + cfgfile_dwrite_bool (f, _T("fpu_no_unimplemented"), p->fpu_no_unimplemented); + cfgfile_write_bool (f, _T("rtg_nocustom"), p->picasso96_nocustom); cfgfile_write (f, _T("rtg_modes"), _T("0x%x"), p->picasso96_modeflags); @@ -2913,6 +2915,7 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH return 1; if (cfgfile_yesno (option, value, _T("immediate_blits"), &p->immediate_blits) + || cfgfile_yesno (option, value, _T("fpu_no_unimplemented"), &p->fpu_no_unimplemented) || cfgfile_yesno (option, value, _T("cd32cd"), &p->cs_cd32cd) || cfgfile_yesno (option, value, _T("cd32c2p"), &p->cs_cd32c2p) || cfgfile_yesno (option, value, _T("cd32nvram"), &p->cs_cd32nvram) @@ -4710,6 +4713,7 @@ void default_prefs (struct uae_prefs *p, int type) p->mmu_model = 0; p->cpu060_revision = 6; p->fpu_revision = -1; + p->fpu_no_unimplemented = false; p->m68k_speed = 0; p->cpu_compatible = 1; p->address_space_24 = 1; @@ -4988,6 +4992,7 @@ static int bip_a3000 (struct uae_prefs *p, int config, int compa, int romcheck) p->chipmem_size = 0x200000; p->cpu_model = 68030; p->fpu_model = 68882; + p->fpu_no_unimplemented = true; if (compa == 0) p->mmu_model = 68030; else diff --git a/cia.cpp b/cia.cpp index 74bc12b0..43c9a23d 100644 --- a/cia.cpp +++ b/cia.cpp @@ -43,8 +43,12 @@ #define CIAA_DEBUG_R 0 #define CIAA_DEBUG_W 0 +#define CIAA_DEBUG_IRQ 0 + #define CIAB_DEBUG_R 0 #define CIAB_DEBUG_W 0 +#define CIAB_DEBUG_IRQ 0 + #define DONGLE_DEBUG 0 #define KB_DEBUG 0 #define CLOCK_DEBUG 0 @@ -122,6 +126,9 @@ static void ICRB(uae_u32 data) static void RethinkICRA (void) { if (ciaaicr) { +#if CIAA_DEBUG_IRQ + write_log (_T("CIAA IRQ %02X\n"), ciaaicr); +#endif if (currprefs.cpu_cycle_exact) event2_newevent_xx (-1, 2 * CYCLE_UNIT + CYCLE_UNIT / 2, 0x0008, ICRA); else @@ -132,6 +139,9 @@ static void RethinkICRA (void) static void RethinkICRB (void) { if (ciabicr) { +#if CIAB_DEBUG_IRQ + write_log (_T("CIAB IRQ %02X\n"), ciabicr); +#endif if (currprefs.cpu_cycle_exact) event2_newevent_xx (-1, 2 * CYCLE_UNIT + CYCLE_UNIT / 2, 0x2000, ICRB); else @@ -441,6 +451,9 @@ static int checkalarm (unsigned long tod, unsigned long alarm, int inc) return 1; if (!inc) return 0; + /* Amix workaround */ + if (currprefs.mmu_model) + return 0; /* emulate buggy TODMED counter. * it counts: .. 29 2A 2B 2C 2D 2E 2F 20 30 31 32 .. * (2F->20->30 only takes couple of cycles but it will trigger alarm.. @@ -464,6 +477,9 @@ STATIC_INLINE void ciab_checkalarm (int inc) return; } if (checkalarm (ciabtod, ciabalarm, inc)) { +#if CIAB_DEBUG_IRQ + write_log (_T("CIAB tod %08x %08x\n"), ciabtod, ciabalarm); +#endif ciabicr |= 4; RethinkICRB (); } @@ -472,6 +488,9 @@ STATIC_INLINE void ciab_checkalarm (int inc) STATIC_INLINE void ciaa_checkalarm (int inc) { if (checkalarm (ciaatod, ciaaalarm, inc)) { +#if CIAA_DEBUG_IRQ + write_log (_T("CIAA tod %08x %08x\n"), ciaatod, ciaaalarm); +#endif ciaaicr |= 4; RethinkICRA (); } @@ -908,6 +927,9 @@ static uae_u8 ReadCIAA (unsigned int addr) } return (uae_u8)(ciaatol >> 16); case 12: +#if KB_DEBUG + write_log (_T("CIAA serial port: %02x %08x\n"), ciaasdr, M68K_GETPC); +#endif return ciaasdr; case 13: tmp = ciaaicr_reg; @@ -1168,6 +1190,9 @@ static void WriteCIAA (uae_u16 addr, uae_u8 val) ciaasdr = val; if ((ciaacra & 0x41) == 0x41 && ciaasdr_cnt == 0) ciaasdr_cnt = 8 * 2; +#if KB_DEBUG + write_log (_T("CIAA serial port write: %02x cnt=%d PC=%08x\n"), ciaasdr, ciaasdr_cnt, M68K_GETPC); +#endif CIA_calctimers (); break; case 13: diff --git a/debug.cpp b/debug.cpp index 303878c7..77805695 100644 --- a/debug.cpp +++ b/debug.cpp @@ -133,7 +133,8 @@ static TCHAR help[] = { _T(" s \"\"/ [] []\n") _T(" Search for string/bytes.\n") _T(" T or Tt Show exec tasks and their PCs.\n") - _T(" Td,Tl,Tr,Ts,Ti,TO Show devices, libraries, resources, residents, interrupts, doslist.\n") + _T(" Td,Tl,Tr,Tp,Ts,TS,Ti,TO,TM Show devs, libs, resources, ports, semaphores,\n") + _T(" residents, interrupts, doslist and memorylist.\n") _T(" b Step to previous state capture position.\n") _T(" M Enable or disable audio channels, bitplanes or sprites.\n") _T(" sp [] Dump sprite information.\n") @@ -2764,25 +2765,25 @@ static void show_exec_tasks (void) } } -static uaecptr get_base (const uae_char *name) +static uaecptr get_base (const uae_char *name, int offset) { uaecptr v = get_long_debug (4); addrbank *b = &get_mem_bank(v); if (!b || !b->check (v, 400) || b->flags != ABFLAG_RAM) return 0; - v += 378; // liblist + v += offset; while (v = get_long_debug (v)) { uae_u32 v2; uae_u8 *p; b = &get_mem_bank (v); - if (!b || !b->check (v, 32) || b->flags != ABFLAG_RAM) + if (!b || !b->check (v, 32) || (b->flags != ABFLAG_RAM && b->flags != ABFLAG_ROMIN)) goto fail; v2 = get_long_debug (v + 10); // name b = &get_mem_bank (v2); if (!b || !b->check (v2, 20)) goto fail; - if (b->flags == ABFLAG_ROM || b->flags == ABFLAG_RAM) { + if (b->flags == ABFLAG_ROM || b->flags == ABFLAG_RAM || b->flags == ABFLAG_ROMIN) { p = b->xlateaddr (v2); if (!memcmp (p, name, strlen (name) + 1)) return v; @@ -2800,14 +2801,15 @@ static TCHAR *getfrombstr(uaecptr pp) return au_copy (s, p[0] + 1, (char*)p + 1); } -static void show_exec_lists (TCHAR t) +static void show_exec_lists (TCHAR *t) { uaecptr execbase = get_long_debug (4); uaecptr list = 0, node; - TCHAR c = _totupper (t); + TCHAR c = t[0]; + TCHAR c2 = t[1]; - if (c == 'O') { // doslist - uaecptr dosbase = get_base ("dos.library"); + if (c == 'o' || c == 'O') { // doslist + uaecptr dosbase = get_base ("dos.library", 378); if (dosbase) { uaecptr rootnode = get_long_debug (dosbase + 34); uaecptr dosinfo = get_long_debug (rootnode + 24) << 2; @@ -2831,7 +2833,7 @@ static void show_exec_lists (TCHAR t) console_out_f (_T("can't find dos.library\n")); } return; - } else if (c == 'I') { // interrupts + } else if (c == 'i' || c == 'I') { // interrupts static const int it[] = { 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0 }; static const int it2[] = { 1, 1, 1, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7 }; list = execbase + 84; @@ -2882,7 +2884,7 @@ static void show_exec_lists (TCHAR t) list += 12; } return; - } else if (c == 'S') { // residents + } else if (c == 'R') { // residents list = get_long (execbase + 300); while (list) { uaecptr resident = get_long_debug (list); @@ -2910,26 +2912,96 @@ static void show_exec_lists (TCHAR t) list += 4; } return; + } else if (c == 'f' || c== 'F') { // filesystem.resource + uaecptr fs = get_base ("FileSystem.resource", 336); + if (fs) { + static const TCHAR *fsnames[] = { + _T("DosType"), + _T("Version"), + _T("PatchFlags"), + _T("Type"), + _T("Task"), + _T("Lock"), + _T("Handler"), + _T("StackSize"), + _T("Priority"), + _T("Startup"), + _T("SegList"), + _T("GlobalVec"), + NULL + }; + uae_u8 *addr = get_real_address (get_long_debug (fs + 14)); + TCHAR *name = addr ? au ((char*)addr) : au (""); + my_trim (name); + console_out_f (_T("%08x: '%s'\n"), fs, name); + xfree (name); + node = get_long_debug (fs + 18); + while (get_long_debug (node)) { + TCHAR *name = au ((char*)get_real_address (get_long_debug (node + 10))); + my_trim (name); + console_out_f (_T("%08x: '%s'\n"), node, name); + xfree (name); + for (int i = 0; fsnames[i]; i++) { + uae_u32 v = get_long_debug (node + 14 + i * 4); + console_out_f (_T("%16s = %08x %d\n"), fsnames[i], v, v); + } + console_out_f (_T("\n")); + node = get_long_debug (node); + } + + } else { + console_out_f (_T("FileSystem.resource not found.\n")); + } + return; + } else if (c == 'm' || c == 'M') { // memory + list = execbase + 322; + node = get_long_debug (list); + while (get_long_debug (node)) { + TCHAR *name = au ((char*)get_real_address (get_long_debug (node + 10))); + uae_u16 v = get_word_debug (node + 8); + console_out_f (_T("%08x %d %d %s\n"), node, (int)((v >> 8) & 0xff), (uae_s8)(v & 0xff), name); + xfree (name); + console_out_f (_T("Attributes %04x First %08x Lower %08x Upper %08x Free %d\n"), + get_word_debug (node + 14), get_long_debug (node + 16), get_long_debug (node + 20), + get_long_debug (node + 24), get_long_debug (node + 28)); + uaecptr mc = get_long_debug (node + 16); + while (mc) { + uae_u32 mc1 = get_long_debug (mc); + uae_u32 mc2 = get_long_debug (mc + 4); + console_out_f (_T(" %08x: %08x-%08x,%08x,%08x (%d)\n"), mc, mc, mc + mc2, mc1, mc2, mc2); + mc = mc1; + } + console_out_f (_T("\n")); + node = get_long_debug (node); + } + return; } switch (c) { - case 'R': + case 'r': // resources list = execbase + 336; break; - case 'D': + case 'd': // devices list = execbase + 350; break; - case 'L': + case 'l': // libraries list = execbase + 378; break; + case 'p': // ports + list = execbase + 392; + break; + case 's': // semaphores + list = execbase + 532; + break; } if (list == 0) return; node = get_long_debug (list); while (get_long_debug (node)) { TCHAR *name = au ((char*)get_real_address (get_long_debug (node + 10))); - console_out_f (_T("%08x %s\n"), node, name); + uae_u16 v = get_word_debug (node + 8); + console_out_f (_T("%08x %d %d %s\n"), node, (int)((v >> 8) & 0xff), (uae_s8)(v & 0xff), name); xfree (name); node = get_long_debug (node); } @@ -3637,7 +3709,7 @@ static BOOL debug_line (TCHAR *input) if (inptr[0] == 't' || inptr[0] == 0) show_exec_tasks (); else - show_exec_lists (inptr[0]); + show_exec_lists (&inptr[0]); break; case 't': no_trace_exceptions = 0; diff --git a/drawing.cpp b/drawing.cpp index 43756176..f0d9bdc0 100644 --- a/drawing.cpp +++ b/drawing.cpp @@ -693,6 +693,7 @@ where do we start drawing the playfield, where do we start drawing the right bor All of these are forced into the visible window (VISIBLE_LEFT_BORDER .. VISIBLE_RIGHT_BORDER). PLAYFIELD_START and PLAYFIELD_END are in window coordinates. */ static int playfield_start, playfield_end; +static int real_playfield_start, real_playfield_end; static int linetoscr_diw_start, linetoscr_diw_end; static int native_ddf_left, native_ddf_right; #if 0 @@ -737,6 +738,11 @@ static void pfield_init_linetoscr (void) native_ddf_left = coord_hw_to_window_x (ddf_left); native_ddf_right = coord_hw_to_window_x (ddf_right); + if (native_ddf_left < 0) + native_ddf_left = 0; + if (native_ddf_right < native_ddf_left) + native_ddf_right = native_ddf_left; + linetoscr_diw_start = dp_for_drawing->diwfirstword; linetoscr_diw_end = dp_for_drawing->diwlastword; @@ -763,6 +769,9 @@ static void pfield_init_linetoscr (void) if (playfield_end > visible_right_border) playfield_end = visible_right_border; + real_playfield_end = playfield_end; + real_playfield_start = playfield_start; + // Sprite hpos don't include DIW_DDF_OFFSET and can appear 1 lores pixel // before first bitplane pixel appears. // This means "bordersprite" condition is possible under OCS/ECS too. Argh! @@ -832,6 +841,7 @@ static void pfield_init_linetoscr (void) if (dip_for_drawing->nr_sprites == 0) return; + /* We need to clear parts of apixels. */ if (linetoscr_diw_start < native_ddf_left) { int size = res_shift_from_window (native_ddf_left - linetoscr_diw_start); @@ -1734,9 +1744,9 @@ STATIC_INLINE void draw_sprites_ecs (struct sprite_entry *e) } } -#if 0 +#ifdef AGA /* clear possible bitplane data outside DIW area */ -static void clear_bitplane_border (void) +static void clear_bitplane_border_aga (void) { int len, shift = res_shift; uae_u8 v = 0; @@ -2320,6 +2330,10 @@ static void pfield_draw_line (struct vidbuffer *vb, int lineno, int gfx_ypos, in if (dip_for_drawing->nr_sprites) { int i; +#ifdef AGA + if (colors_for_drawing.bordersprite) + clear_bitplane_border_aga (); +#endif for (i = 0; i < dip_for_drawing->nr_sprites; i++) { #ifdef AGA diff --git a/enforcer.cpp b/enforcer.cpp index 945c94d7..57438371 100644 --- a/enforcer.cpp +++ b/enforcer.cpp @@ -118,6 +118,7 @@ static int enforcer_decode_hunk_and_offset (TCHAR *buf, uae_u32 pc) { uae_u32 sysbase = get_long (4); uae_u32 semaphore_list = sysbase + 532; + uae_u32 library_list = sysbase + 378; /* First step is searching for the SegTracker semaphore */ uae_u32 node = amiga_list_first (semaphore_list); @@ -179,6 +180,41 @@ static int enforcer_decode_hunk_and_offset (TCHAR *buf, uae_u32 pc) node = amiga_node_next (node); } } + + node = amiga_list_first (library_list); + while (node) { + uae_u32 string = get_long (node + 10); /* ln_Name */ + uae_u8 *native_string = amiga2native (string, 100); + + if (native_string) { + if (!strcmp ((char*)native_string, "debug.library")) + break; + } + node = amiga_node_next (node); + } + + /* AROS debug.library */ + if (node) { + uae_u32 seg_list = node + 34; /* sizeof(struct Library) */ + + node = amiga_list_first (seg_list); + while (node) { + uae_u32 start = get_long (node + 12); + uae_u32 end = get_long (node + 16); + if (pc > start && pc < end) { + TCHAR *native_name; + uae_u32 hunk = get_long (node + 28); + uae_u32 offset = pc - (get_long (node + 8) << 2); + uaecptr mod = get_long (node + 20); + native_name = au ((char*)amiga2native (mod + 24, 100)); + _stprintf (buf, _T("----> %08lx - \"%s\" Hunk %04lx Offset %08lx\n"), pc, native_name, hunk, offset); + xfree (native_name); + return 1; + } + node = amiga_node_next (node); + } + + } return 0; } @@ -255,22 +291,30 @@ static void enforcer_display_hit (const TCHAR *addressmode, uae_u32 pc, uaecptr } /* Segtracker output */ - a7 = m68k_areg (regs, 7); - if (get_long (a7 - 4) != pc) { - if (enforcer_decode_hunk_and_offset (buf, pc)) { - _tcscpy (enforcer_buf_ptr, buf); - enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); - } + if (enforcer_decode_hunk_and_offset (buf, pc)) { + _tcscpy (enforcer_buf_ptr, buf); + enforcer_buf_ptr += _tcslen (enforcer_buf_ptr); } + uae_u32 oldaddrs[BACKTRACELONGS]; + a7 = m68k_areg (regs, 7); for (i = 0; i < BACKTRACELONGS; i++) { + uae_u32 addr; a7 += 4; - if (enforcer_decode_hunk_and_offset (buf, get_long (a7))) { - int l = _tcslen (buf); - - if (ENFORCER_BUF_SIZE - (enforcer_buf_ptr - enforcer_buf) > l + 256) { - _tcscpy (enforcer_buf_ptr, buf); - enforcer_buf_ptr += l; + addr = get_long (a7); + for (j = 0; j < i; j++) { + if (oldaddrs[j] == addr) + break; + } + oldaddrs[i] = addr; + if (j == i && addr != pc) { + if (enforcer_decode_hunk_and_offset (buf, addr)) { + int l = _tcslen (buf); + + if (ENFORCER_BUF_SIZE - (enforcer_buf_ptr - enforcer_buf) > l + 256) { + _tcscpy (enforcer_buf_ptr, buf); + enforcer_buf_ptr += l; + } } } } diff --git a/filesys.cpp b/filesys.cpp index fff08771..c68697b6 100644 --- a/filesys.cpp +++ b/filesys.cpp @@ -6258,8 +6258,9 @@ static uae_u32 REGPARAM2 filesys_diagentry (TrapContext *context) #define PP_FSPTR 404 #define PP_ADDTOFSRES 408 #define PP_FSRES 412 -#define PP_EXPLIB 416 -#define PP_FSHDSTART 420 +#define PP_FSRES_CREATED 416 +#define PP_EXPLIB 420 +#define PP_FSHDSTART 424 static uae_u32 REGPARAM2 filesys_dev_bootfilesys (TrapContext *context) { @@ -6851,7 +6852,10 @@ static void addfakefilesys (uaecptr parmpacket, uae_u32 dostype, int ver, int re put_long (parmpacket + PP_FSHDSTART + 12 + 5 * 4, ci->priority); flags |= 0x20; } - put_long (parmpacket + PP_FSHDSTART + 12 + 8 * 4, kickstart_version < 36 && dostype == 0x444f5300 ? 0 : -1); // globvec + put_long (parmpacket + PP_FSHDSTART + 12 + 8 * 4, dostype == 0x444f5300 ? 0 : -1); // globvec + // if OFS = seglist -> NULL + if ((dostype & 0xffffff00) == 0x444f5300) + flags &= ~0x080; put_long (parmpacket + PP_FSHDSTART + 8, flags); // patchflags } @@ -6905,6 +6909,11 @@ static int dofakefilesys (UnitInfo *uip, uaecptr parmpacket, struct uaedev_confi addfakefilesys (parmpacket, dostype, ver, rev, ci); return FILESYS_HARDFILE; } + if ((dostype & 0xffffff00) == 0x444f5300 && (!uip->filesysdir || !uip->filesysdir[0])) { + write_log (_T("RDB: OFS, using ROM default FS.\n")); + return FILESYS_HARDFILE; + } + tmp[0] = 0; if (uip->filesysdir && _tcslen (uip->filesysdir) > 0) { _tcscpy (tmp, uip->filesysdir); @@ -6928,10 +6937,7 @@ static int dofakefilesys (UnitInfo *uip, uaecptr parmpacket, struct uaedev_confi zf = zfile_fopen (tmp, _T("rb"), ZFD_NORMAL); if (!zf) { addfakefilesys (parmpacket, dostype, ver, rev, ci); - write_log (_T("RDB: filesys not found\n")); - if ((dostype & 0xffffff00) == 0x444f5300) - return FILESYS_HARDFILE; - write_log (_T("RDB: mounted without filesys\n")); + write_log (_T("RDB: filesys not found, mounted without filesys\n")); return FILESYS_HARDFILE; } @@ -7004,7 +7010,7 @@ static int dofakefilesys (UnitInfo *uip, uaecptr parmpacket, struct uaedev_confi zfile_fclose (zf); uip->rdb_filesyssize = size; - // DOS\0 is not in fs.resource + // DOS\0 is not in fs.resource and fs.resource already existed? if (dostype == 0x444f5300 && oldversion < 0) oldversion = 0; put_long (parmpacket + PP_FSSIZE, uip->rdb_filesyssize); diff --git a/filesys_bootrom.cpp b/filesys_bootrom.cpp index c65f0759..ea72d730 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(0x60); db(0x02); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0b); db(0x12); - db(0x00); db(0x00); db(0x08); db(0xae); db(0x00); db(0x00); db(0x00); db(0xe0); - db(0x00); db(0x00); db(0x02); db(0x74); db(0x00); db(0x00); db(0x00); db(0x24); - db(0x00); db(0x00); db(0x03); db(0x82); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x00); db(0x00); db(0x13); db(0xa0); db(0x43); db(0xfa); db(0x18); db(0xa9); + db(0x60); db(0x02); db(0x00); db(0x09); db(0x60); db(0x00); db(0x0b); db(0x4c); + db(0x00); db(0x00); db(0x08); db(0xe8); db(0x00); db(0x00); db(0x00); db(0xe0); + db(0x00); db(0x00); db(0x02); db(0xa8); db(0x00); db(0x00); db(0x00); db(0x24); + db(0x00); db(0x00); db(0x03); db(0xb6); db(0x00); db(0x00); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x13); db(0xda); db(0x43); db(0xfa); db(0x18); db(0xe5); 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(0x17); db(0x92); db(0x4e); db(0x90); + db(0x72); db(0x11); db(0x61); db(0x00); db(0x17); db(0xce); 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,788 +22,796 @@ 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(0xe2); - db(0x61); db(0x00); db(0x16); db(0xa8); db(0x4c); db(0xdf); db(0x7e); db(0xff); + db(0x4e); db(0xae); db(0xfe); db(0x5c); db(0x61); db(0x00); db(0x13); db(0x1c); + db(0x61); db(0x00); db(0x16); db(0xe4); 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(0xec); db(0x61); db(0x00); db(0x16); db(0xe8); - db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x18); db(0x0a); db(0x70); db(0x24); + db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x17); db(0x24); + db(0x2a); db(0x50); db(0x43); db(0xfa); db(0x18); db(0x46); 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(0xfa); db(0x70); db(0x00); + db(0x66); db(0x0c); db(0x43); db(0xfa); db(0x18); db(0x36); 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(0x00); db(0x00); db(0x5c); - db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x30); db(0x22); db(0x3c); + db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x34); 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(0xa0); db(0x7c); db(0x00); + db(0x26); db(0x40); db(0x27); db(0x4c); db(0x01); db(0xa4); 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(0x66); db(0x26); db(0x5f); db(0x0c); db(0x80); db(0xff); db(0xff); + db(0x07); db(0xa0); 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(0x30); db(0x4e); db(0xae); + db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x34); 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(0x16); db(0x38); - 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(0x16); db(0x18); - 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(0x56); - db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x16); db(0xcd); - db(0x43); db(0xfa); db(0x00); db(0x54); db(0x70); db(0x0a); db(0x61); db(0x00); - db(0x0c); db(0x76); db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); - db(0xff); db(0x48); db(0x61); db(0x00); db(0x15); db(0xea); 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(0xc7); 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(0x78); - 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(0x15); db(0x72); db(0x4e); db(0x90); - db(0x22); db(0x00); db(0x6b); db(0x04); db(0x61); db(0x00); db(0x08); db(0x04); - 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(0x15); db(0x58); - 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(0x15); db(0x42); 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(0x14); db(0xb4); 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(0xe0); db(0x30); db(0x3c); db(0xff); db(0x38); - db(0x72); db(0x12); db(0x61); db(0x00); db(0x14); db(0x9a); db(0x4e); db(0x90); - db(0x24); db(0x40); db(0x70); db(0x16); 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(0x13); db(0x7c); db(0x00); db(0x02); db(0x00); db(0x08); db(0x13); db(0x7c); - db(0x00); db(0xf6); db(0x00); db(0x09); db(0x41); db(0xfa); db(0x15); db(0x27); - db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0x16); - db(0x23); db(0x48); db(0x00); db(0x12); db(0x23); db(0x4a); db(0x00); db(0x0e); - db(0x70); db(0x05); db(0x4e); db(0xae); db(0xff); db(0x58); db(0x4c); db(0xdf); - db(0x07); db(0x03); db(0x4e); db(0x75); db(0x52); db(0x91); db(0x70); db(0x00); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); db(0x61); db(0x00); - db(0xfc); db(0xb0); 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(0x14); db(0xfa); db(0x23); db(0x48); db(0x00); db(0x0a); - db(0x41); db(0xfa); db(0xfe); db(0xd2); db(0x23); db(0x48); db(0x00); db(0x0e); - db(0x41); db(0xfa); db(0xfe); db(0xca); 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(0x61); db(0x00); db(0xff); db(0x72); - db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x04); db(0x61); db(0x00); - db(0x14); db(0x0e); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); - db(0x61); db(0x00); db(0x0a); db(0xe0); 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(0xa4); 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(0x7c); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); - db(0x01); db(0x9c); 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(0x66); db(0x04); db(0x42); db(0x9a); - db(0x60); db(0x20); db(0x50); db(0x82); db(0x20); db(0x02); 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(0x91); db(0xc8); - db(0x7e); db(0x00); db(0x60); db(0xf2); 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(0xcc); 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(0xa2); - db(0x25); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x13); db(0x1e); - 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(0x4e); db(0xae); db(0xfe); db(0x62); db(0x30); db(0x3c); db(0xff); db(0x80); + db(0x61); db(0x00); db(0x16); db(0x90); db(0x4e); db(0x90); db(0x4e); db(0xae); + db(0xff); db(0x88); db(0x41); db(0xee); db(0x01); db(0x42); db(0x20); db(0x50); + db(0x4a); db(0x90); db(0x67); db(0x54); db(0x22); db(0x28); db(0x00); db(0x14); + db(0x42); db(0x41); db(0x4a); db(0x81); db(0x66); db(0xf0); db(0x32); db(0x28); + db(0x00); db(0x0e); db(0x02); db(0x41); db(0x00); db(0x02); db(0x67); db(0xe6); + db(0x90); db(0xa8); db(0x00); db(0x18); db(0x6b); db(0x3a); db(0x67); db(0x38); + db(0x42); db(0x78); db(0x01); db(0x40); db(0x22); db(0x28); db(0x00); db(0x18); + db(0xd1); db(0xa8); db(0x00); db(0x18); db(0xd1); db(0xa8); db(0x00); db(0x1c); + db(0xd1); db(0xae); db(0x00); db(0x3e); db(0x20); db(0x68); db(0x00); db(0x10); + db(0x4a); db(0x90); db(0x67); db(0x04); db(0x20); db(0x50); db(0x60); db(0xf8); + db(0x24); db(0x08); db(0xd4); db(0xa8); db(0x00); db(0x04); db(0xb2); db(0x82); + db(0x67); db(0x0a); db(0x20); db(0x81); db(0x22); db(0x41); db(0x42); db(0x99); + db(0x22); db(0x80); db(0x60); db(0x04); db(0xd1); db(0xa8); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0x82); db(0x30); db(0x3c); db(0xff); db(0x80); + db(0x61); db(0x00); db(0x16); db(0x20); 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(0x5e); db(0x4e); db(0xae); db(0xfd); db(0x96); + db(0x41); db(0xfa); db(0x16); db(0xd5); db(0x43); db(0xfa); db(0x00); db(0x54); + db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0c); db(0x7c); db(0x22); db(0x40); + db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); db(0x61); db(0x00); + db(0x15); db(0xf2); 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(0xcf); 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(0x80); 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(0x15); db(0x7a); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); + db(0x61); db(0x00); db(0x08); db(0x0a); 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(0x15); db(0x60); 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(0x15); db(0x4a); 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(0x14); db(0xbc); + 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(0xe0); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x12); db(0x61); db(0x00); + db(0x14); db(0xa2); db(0x4e); db(0x90); db(0x24); db(0x40); db(0x70); db(0x16); + 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(0x13); db(0x7c); db(0x00); db(0x02); + db(0x00); db(0x08); db(0x13); db(0x7c); db(0x00); db(0xf6); db(0x00); db(0x09); + db(0x41); db(0xfa); db(0x15); db(0x2f); db(0x23); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x00); db(0x16); db(0x23); db(0x48); db(0x00); db(0x12); + db(0x23); db(0x4a); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); + db(0xff); db(0x58); db(0x4c); db(0xdf); db(0x07); db(0x03); db(0x4e); db(0x75); + db(0x52); db(0x91); db(0x70); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0xc0); db(0xc0); db(0x61); db(0x00); db(0xfc); db(0x7c); 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(0x02); + db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); db(0xfe); db(0xd2); + db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); db(0xfe); db(0xca); + 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(0x61); db(0x00); db(0xff); db(0x72); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x04); db(0x61); db(0x00); db(0x14); db(0x16); db(0x4e); db(0x90); + db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0x0a); db(0xe6); + 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(0xa8); 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(0x84); db(0x23); db(0x48); + db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x9c); 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(0x66); db(0x04); db(0x42); db(0x9a); db(0x60); db(0x20); db(0x50); db(0x82); + db(0x20); db(0x02); 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(0x91); db(0xc8); db(0x7e); db(0x00); db(0x60); db(0xf2); + db(0x48); db(0xe7); db(0x40); db(0xf2); db(0x26); db(0x48); 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(0xd2); db(0x10); db(0x19); db(0x12); db(0x1a); + db(0xb0); db(0x01); db(0x66); db(0x06); db(0x4a); db(0x00); db(0x67); db(0x46); + 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(0xa8); db(0x25); db(0x48); + db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x13); db(0x24); 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(0x27); db(0x48); db(0x01); db(0xa0); db(0x20); db(0x08); + db(0x4c); db(0xdf); db(0x4f); 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(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(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(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(0x9c); db(0x2f); db(0x08); - db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); db(0x0f); db(0x18); - db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); - db(0x0f); db(0x0e); 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(0x14); 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(0x0e); db(0xce); 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(0x0e); db(0xb4); 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(0x20); db(0x69); db(0x01); db(0x94); - db(0x4a); db(0xa9); db(0x01); db(0x90); db(0x67); db(0x2c); db(0x20); db(0x08); - db(0x67); db(0x32); db(0x61); db(0x00); db(0xfa); db(0xec); 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(0x42); db(0xa9); - db(0x01); db(0x90); db(0x23); db(0x48); db(0x01); db(0x94); db(0x4a); db(0x80); - db(0x67); db(0x0a); db(0x4a); db(0xa9); db(0x01); db(0x98); db(0x67); db(0x04); - db(0x61); db(0x00); db(0xfa); db(0x68); db(0x4a); db(0x83); db(0x6b); db(0x00); - db(0xf8); db(0x7c); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); - db(0x0e); db(0x56); 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(0x64); 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(0x40); db(0x0c); db(0x03); - db(0x00); db(0x80); db(0x67); db(0x3a); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x70); db(0x14); 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(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(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x4e); db(0xae); - db(0xff); db(0x76); 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(0x80); 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(0x83); 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(0x7e); 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(0x6c); 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(0x30); 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(0xa0); db(0x48); db(0xe7); - db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfd); db(0xf2); 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(0x30); 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(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); - db(0x0c); db(0xe6); db(0x70); db(0x03); db(0x4e); db(0x90); db(0x22); db(0x6b); - db(0x00); db(0xa8); db(0x23); db(0x40); db(0x00); db(0x20); db(0x67); db(0x16); - db(0x70); db(0x00); db(0x23); db(0x40); db(0x00); db(0x24); db(0x33); db(0x7c); - db(0x00); db(0x0b); db(0x00); db(0x1c); db(0x13); db(0x7c); db(0x00); db(0x01); + 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(0x76); db(0x21); db(0x40); db(0x01); db(0x9c); + db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xec); db(0x61); db(0x00); + db(0x0f); db(0x1a); db(0x2a); db(0x50); db(0x30); db(0x3c); db(0xff); db(0x28); + db(0x61); db(0x00); db(0x0f); db(0x10); 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(0x0e); 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(0x0e); db(0xd0); 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(0x0e); db(0xb6); 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(0x20); db(0x69); + db(0x01); db(0x94); db(0x4a); db(0xa9); db(0x01); db(0x90); db(0x67); db(0x2c); + db(0x20); db(0x08); db(0x67); db(0x32); db(0x61); db(0x00); db(0xfa); db(0xe6); + 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(0x42); db(0xa9); db(0x01); db(0x90); db(0x23); db(0x48); db(0x01); db(0x94); + db(0x4a); db(0x80); db(0x67); db(0x0a); db(0x4a); db(0xa9); db(0x01); db(0x98); + db(0x67); db(0x04); db(0x61); db(0x00); db(0xfa); db(0x62); db(0x4a); db(0x83); + db(0x6b); db(0x00); db(0xf8); db(0x76); db(0x30); db(0x3c); db(0xff); db(0x18); + db(0x61); db(0x00); db(0x0e); db(0x58); 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(0x2a); 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(0x40); + db(0x0c); db(0x03); db(0x00); db(0x80); db(0x67); db(0x3a); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x70); db(0x14); 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(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(0xff); db(0x7c); db(0x4e); db(0xae); db(0xfe); db(0xf2); + db(0x4e); db(0xae); db(0xff); db(0x76); 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(0x80); + 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(0x85); + 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(0x80); 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(0x6e); 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(0x34); 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(0xa4); + db(0x48); db(0xe7); db(0x00); db(0x8a); db(0x61); db(0x00); db(0xfd); db(0xf2); + 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(0x34); 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(0x30); db(0x3c); db(0xff); db(0x58); + db(0x61); db(0x00); db(0x0c); db(0xe8); db(0x70); db(0x03); db(0x4e); db(0x90); + db(0x22); db(0x6b); db(0x00); db(0xa8); db(0x23); db(0x40); db(0x00); db(0x20); + db(0x67); db(0x16); db(0x70); db(0x00); db(0x23); db(0x40); db(0x00); db(0x24); + db(0x33); db(0x7c); db(0x00); db(0x0b); 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(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(0xa7); 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(0x80); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0x02); db(0xae); db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); + db(0x0c); db(0x7d); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0x02); db(0x9e); 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(0x0c); db(0x3a); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); + db(0x70); db(0x01); db(0x61); db(0x00); db(0xf9); db(0xf2); db(0x08); db(0x02); + db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); + db(0xfb); db(0x5a); db(0x60); db(0x00); db(0x01); db(0x2e); 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(0xad); db(0x67); db(0x08); + db(0x61); db(0x00); db(0xff); db(0x0a); db(0x42); db(0x2b); db(0x00); db(0xad); + db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x24); db(0x30); db(0x3c); + db(0xff); db(0x58); db(0x61); db(0x00); db(0x0b); db(0xe6); db(0x70); db(0x01); + db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); + db(0xfb); db(0xe8); db(0x42); db(0x2b); db(0x00); db(0xac); db(0x30); db(0x3c); + db(0xff); db(0x58); db(0x61); db(0x00); db(0x0b); db(0xce); db(0x70); db(0x02); + db(0x4e); db(0x90); db(0x20); db(0x0c); db(0x67); db(0x56); db(0x0c); db(0x6c); + db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4e); db(0x0c); db(0xac); + db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x44); + db(0x0c); db(0x6c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3c); + 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(0x1a); 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(0x00); db(0xff); db(0x60); + db(0x22); db(0x4c); db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); + db(0x60); db(0x00); db(0xff); db(0x54); 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(0x0b); db(0x5a); 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(0x2e); 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(0x5e); db(0x30); db(0x3c); + db(0xff); db(0x30); db(0x61); db(0x00); db(0x0b); db(0x06); 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(0xfe); db(0xd6); db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); + db(0xfe); db(0xce); 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(0xd0); + db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08); + db(0x66); db(0x14); db(0x61); db(0x00); db(0xfa); db(0xfe); db(0x66); db(0x0e); + db(0x30); db(0x3c); db(0xff); db(0x58); db(0x61); db(0x00); db(0x0a); db(0xc4); + db(0x70); db(0x00); db(0x4e); db(0x90); db(0x60); db(0xec); 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(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(0xc2); + db(0x43); db(0xfa); db(0x01); db(0x30); 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(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(0xa5); 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(0x7e); - db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0xae); - db(0x27); db(0x40); db(0x00); db(0xa4); db(0x41); db(0xfa); db(0x0c); db(0x7b); - db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0x02); db(0x9e); - 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(0x0c); db(0x38); - db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); db(0x70); db(0x01); - db(0x61); db(0x00); db(0xf9); db(0xf2); db(0x08); db(0x02); db(0x00); db(0x01); - db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); db(0xfb); db(0x5a); - db(0x60); db(0x00); db(0x01); db(0x2e); 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(0xad); db(0x67); db(0x08); db(0x61); db(0x00); - db(0xff); db(0x0a); db(0x42); db(0x2b); db(0x00); db(0xad); db(0x4a); db(0x2b); - db(0x00); db(0xac); db(0x67); db(0x24); db(0x30); db(0x3c); db(0xff); db(0x58); - db(0x61); db(0x00); db(0x0b); db(0xe4); db(0x70); db(0x01); db(0x4e); db(0x90); - db(0x4a); db(0x80); db(0x67); db(0x04); db(0x61); db(0x00); db(0xfb); db(0xe8); - db(0x42); db(0x2b); db(0x00); db(0xac); db(0x30); db(0x3c); db(0xff); db(0x58); - db(0x61); db(0x00); db(0x0b); db(0xcc); db(0x70); db(0x02); db(0x4e); db(0x90); - db(0x20); db(0x0c); db(0x67); db(0x56); db(0x0c); db(0x6c); db(0x00); db(0x26); - db(0x00); db(0x12); db(0x66); db(0x4e); db(0x0c); db(0xac); db(0x40); db(0x00); - db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x44); db(0x0c); db(0x6c); - db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3c); 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(0x1a); 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(0x00); db(0xff); db(0x60); db(0x22); db(0x4c); - db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); - db(0xff); db(0x54); 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(0x0b); db(0x58); - 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(0x2e); - 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(0x5e); db(0x30); db(0x3c); db(0xff); db(0x30); - db(0x61); db(0x00); db(0x0b); db(0x04); 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(0xfe); db(0xd6); - db(0x28); db(0x43); db(0x61); db(0x04); db(0x60); db(0x00); db(0xfe); db(0xce); - 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(0xd0); db(0x0c); db(0xac); - db(0x00); db(0x00); db(0x04); db(0x09); db(0x00); db(0x08); db(0x66); db(0x14); - db(0x61); db(0x00); db(0xfa); db(0xfe); db(0x66); db(0x0e); db(0x30); db(0x3c); - db(0xff); db(0x58); db(0x61); db(0x00); db(0x0a); db(0xc2); db(0x70); db(0x00); - db(0x4e); db(0x90); db(0x60); db(0xec); 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(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(0xc0); db(0x43); db(0xfa); - db(0x01); db(0x30); 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(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(0x07); db(0xf8); - 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(0x3c); - 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(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x05); - db(0x61); db(0x00); db(0x07); db(0x9c); db(0x20); db(0x0d); db(0x06); db(0x80); - db(0x00); db(0x00); db(0x02); db(0x10); db(0x4e); db(0x90); 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(0x08); db(0x1c); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); - db(0x02); db(0xf4); 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(0x49); 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(0x3f); - 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(0x07); db(0x10); 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(0xfe); - db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); db(0xfd); db(0x2e); - db(0x2b); db(0x40); db(0x02); db(0x08); db(0x67); db(0x00); db(0x02); db(0x32); - 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(0xdd); 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(0xc9); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); - db(0xfc); db(0xec); db(0x2b); db(0x40); db(0x02); db(0x0c); db(0x67); db(0x00); - db(0x01); db(0xf0); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x00); - db(0x61); db(0x00); db(0x06); db(0x94); 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(0xb4); 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(0x2d); db(0x02); db(0x10); - db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); db(0x01); db(0x52); - db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x00); db(0x01); db(0x4a); - 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(0xa8); db(0x00); db(0x08); db(0x42); db(0x68); - db(0x00); db(0x0c); db(0x42); db(0x6a); db(0x00); db(0x06); db(0x61); db(0x00); - db(0x01); db(0x72); db(0x31); db(0x6d); db(0x02); db(0x1a); db(0x00); db(0x0e); - db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x6d); db(0x02); db(0x1c); - db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); db(0x31); db(0x6d); - db(0x02); db(0x14); db(0x00); db(0x16); db(0x42); db(0x68); db(0x00); db(0x18); - db(0x31); db(0x6d); db(0x02); db(0x16); 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(0x2d); db(0x02); db(0x30); - 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(0xed); db(0x02); db(0x32); - db(0x70); db(0x00); db(0x30); db(0x2d); db(0x02); db(0x20); db(0x6b); db(0x08); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); db(0x22); db(0xc0); - db(0x30); db(0x2d); db(0x02); db(0x22); db(0x6b); db(0x08); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); db(0x30); db(0x2d); - db(0x02); db(0x18); db(0x6b); db(0x14); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x1e); - db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); db(0x22); db(0xc0); - db(0x30); db(0x2d); db(0x02); db(0x24); db(0x6b); db(0x10); db(0x22); db(0xfc); - db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x2d); db(0x02); db(0x2a); + 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(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(0x07); db(0xfa); 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(0x3c); 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(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x05); db(0x61); db(0x00); db(0x07); db(0x9e); db(0x20); db(0x0d); + db(0x06); db(0x80); db(0x00); db(0x00); db(0x02); db(0x10); db(0x4e); db(0x90); + 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(0x08); db(0x1e); db(0x23); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x02); db(0xf4); 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(0x4b); 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(0x41); 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(0x07); db(0x12); + 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(0x07); db(0x00); db(0x70); db(0x00); db(0x72); db(0x00); db(0x61); db(0x00); + db(0xfd); db(0x2e); db(0x2b); db(0x40); db(0x02); db(0x08); db(0x67); db(0x00); + db(0x02); db(0x32); 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(0xdf); + 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(0xcb); db(0x70); db(0x00); db(0x72); db(0x00); + db(0x61); db(0x00); db(0xfc); db(0xec); db(0x2b); db(0x40); db(0x02); db(0x0c); + db(0x67); db(0x00); db(0x01); db(0xf0); db(0x30); db(0x3c); db(0xff); db(0x38); + db(0x72); db(0x00); db(0x61); db(0x00); db(0x06); db(0x96); 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(0xb4); 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(0x2d); + db(0x02); db(0x10); db(0x0c); db(0x47); db(0x00); db(0x27); db(0x65); db(0x00); + db(0x01); db(0x52); db(0x08); db(0x00); db(0x00); db(0x01); db(0x67); db(0x00); + db(0x01); db(0x4a); 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(0xa8); db(0x00); db(0x08); + db(0x42); db(0x68); db(0x00); db(0x0c); db(0x42); db(0x6a); db(0x00); db(0x06); + db(0x61); db(0x00); db(0x01); db(0x72); db(0x31); db(0x6d); db(0x02); db(0x1a); + db(0x00); db(0x0e); db(0x42); db(0x68); db(0x00); db(0x10); db(0x31); db(0x6d); + db(0x02); db(0x1c); db(0x00); db(0x12); db(0x42); db(0x68); db(0x00); db(0x14); + db(0x31); db(0x6d); db(0x02); db(0x14); db(0x00); db(0x16); db(0x42); db(0x68); + db(0x00); db(0x18); db(0x31); db(0x6d); db(0x02); db(0x16); 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(0x2d); + db(0x02); db(0x30); 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(0xed); + db(0x02); db(0x32); db(0x70); db(0x00); db(0x30); db(0x2d); db(0x02); db(0x20); + db(0x6b); db(0x08); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x09); + db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x22); db(0x6b); db(0x08); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x0a); db(0x22); db(0xc0); + db(0x30); db(0x2d); db(0x02); db(0x18); db(0x6b); db(0x14); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x02); db(0x22); db(0xc0); db(0x30); db(0x2d); + db(0x02); db(0x1e); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x01); + db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x24); db(0x6b); db(0x10); + db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x03); db(0x30); db(0x2d); + db(0x02); db(0x2a); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); + db(0x30); db(0x2d); db(0x02); db(0x26); db(0x6b); db(0x10); db(0x22); db(0xfc); + db(0x80); db(0x03); db(0xa0); db(0x04); db(0x30); db(0x2d); db(0x02); db(0x2c); db(0x48); db(0xc0); db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x2d); - db(0x02); db(0x26); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); - db(0xa0); db(0x04); db(0x30); db(0x2d); db(0x02); db(0x2c); db(0x48); db(0xc0); - db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x30); db(0x2d); db(0x02); db(0x28); - db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); db(0xa0); db(0x05); - db(0x30); db(0x2d); db(0x02); db(0x2e); db(0x48); db(0xc0); db(0xe1); db(0x80); - db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x2d); db(0x02); db(0x36); - 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(0x68); - db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); db(0x28); db(0x2d); - db(0x02); db(0x32); 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(0x2e); 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(0x2d); db(0x02); db(0x10); db(0x08); db(0x00); db(0x00); db(0x00); - db(0x67); db(0x00); db(0xfd); db(0x8e); 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(0x61); db(0x00); db(0x00); db(0x38); db(0x20); db(0x6b); db(0x00); db(0x14); - db(0x30); db(0x2d); db(0x02); db(0x38); 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(0x2d); db(0x02); db(0x3a); - 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(0xa0); db(0x60); db(0x00); db(0xfd); db(0x4a); - db(0x4e); db(0x75); db(0x22); db(0x2d); db(0x02); db(0x32); db(0x70); db(0x00); - db(0x08); db(0x01); db(0x00); db(0x00); db(0x67); db(0x04); db(0x08); db(0xc0); - db(0x00); db(0x0e); db(0x08); db(0x01); db(0x00); db(0x01); db(0x67); db(0x04); - db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x08); db(0x01); db(0x00); db(0x02); - db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0c); db(0x35); db(0x40); - db(0x00); db(0x08); 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(0x29); db(0x02); db(0x12); 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(0x04); db(0x44); 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(0x04); db(0x2a); 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(0x03); db(0xf8); - db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa); db(0x04); db(0x78); - db(0x43); db(0xfa); db(0x01); db(0x12); db(0x70); db(0xf6); db(0x22); db(0x3c); - db(0x00); db(0x00); db(0x27); db(0x10); db(0x61); db(0x00); db(0xee); db(0x00); - 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(0x03); db(0xce); 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(0x04); db(0x06); - 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(0x03); db(0x3e); 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(0x7e); 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(0x6e); - 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(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(0x02); db(0xce); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); - db(0xfe); db(0xfe); 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(0xab); 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(0xdc); db(0x2c); db(0x40); db(0x72); db(0x32); - db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x41); db(0xfa); db(0x02); db(0xd4); + db(0x02); db(0x28); db(0x6b); db(0x10); db(0x22); db(0xfc); db(0x80); db(0x03); + db(0xa0); db(0x05); db(0x30); db(0x2d); db(0x02); db(0x2e); db(0x48); db(0xc0); + db(0xe1); db(0x80); db(0x22); db(0xc0); db(0x70); db(0x00); db(0x30); db(0x2d); + db(0x02); db(0x36); 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(0x68); db(0x36); db(0x3c); db(0x00); db(0x68); db(0x74); db(0x01); + db(0x28); db(0x2d); db(0x02); db(0x32); 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(0x2e); 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(0x2d); db(0x02); db(0x10); db(0x08); db(0x00); + db(0x00); db(0x00); db(0x67); db(0x00); db(0xfd); db(0x8e); 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(0x61); db(0x00); db(0x00); db(0x38); db(0x20); db(0x6b); + db(0x00); db(0x14); db(0x30); db(0x2d); db(0x02); db(0x38); 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(0x2d); + db(0x02); db(0x3a); 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(0xa0); db(0x60); db(0x00); + db(0xfd); db(0x4a); db(0x4e); db(0x75); db(0x22); db(0x2d); db(0x02); db(0x32); + db(0x70); db(0x00); db(0x08); db(0x01); db(0x00); db(0x00); db(0x67); db(0x04); + db(0x08); db(0xc0); db(0x00); db(0x0e); db(0x08); db(0x01); db(0x00); db(0x01); + db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0d); db(0x08); db(0x01); + db(0x00); db(0x02); db(0x67); db(0x04); db(0x08); db(0xc0); db(0x00); db(0x0c); + db(0x35); db(0x40); db(0x00); db(0x08); 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(0x29); db(0x02); db(0x12); 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(0x04); db(0x46); 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(0x04); db(0x2c); + 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(0x03); db(0xfa); db(0x20); db(0x0d); db(0x4e); db(0x90); db(0x41); db(0xfa); + db(0x04); db(0x7a); 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(0xed); db(0xfa); 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(0x03); db(0xd0); 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(0x04); db(0x08); 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(0x03); db(0x40); 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(0x80); 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(0x70); 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(0x02); db(0xce); 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(0xab); 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(0xd4); 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(0xbe); 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(0xbe); 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(0xa6); 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(0x86); 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(0x97); 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(0x4a); - db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x60); db(0xf8); - db(0x61); db(0x00); db(0xfe); db(0xe8); 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(0x01); db(0xe4); 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(0x20); 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(0x01); db(0xa4); 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(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(0x1e); db(0x72); db(0x00); db(0x32); db(0x3c); + db(0x00); db(0x34); db(0x61); db(0x00); db(0xf8); db(0x62); 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(0x97); 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(0x01); db(0xe4); + 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(0x01); db(0xa4); + 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(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(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(0x00); db(0xca); 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(0x00); db(0x5e); 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(0x70); - 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(0x00); db(0x26); 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(0x00); db(0x0a); db(0x4e); db(0x90); - db(0x4c); db(0xdf); db(0x01); db(0x03); db(0x4e); db(0x75); db(0x41); db(0xfa); - db(0xe8); db(0x1c); db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); - db(0xd1); db(0xc0); 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(0x68); db(0x65); db(0x61); db(0x72); db(0x74); db(0x20); db(0x62); - db(0x65); db(0x61); db(0x74); 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(0x03); db(0xf2); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x72); db(0x0b); db(0x61); db(0x00); + db(0x00); db(0xca); 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(0x00); db(0x5e); 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(0x70); 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(0x00); db(0x26); 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(0x00); db(0x0a); db(0x4e); db(0x90); db(0x4c); db(0xdf); db(0x01); db(0x03); + db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xe7); db(0xe0); db(0x02); db(0x80); + db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); 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(0x68); db(0x65); db(0x61); + db(0x72); db(0x74); db(0x20); db(0x62); db(0x65); db(0x61); db(0x74); 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(0x03); db(0xf2); diff --git a/fpp.cpp b/fpp.cpp index 185fd100..f89992b6 100644 --- a/fpp.cpp +++ b/fpp.cpp @@ -29,6 +29,7 @@ #include "debug.h" #define DEBUG_FPP 0 +#define EXCEPTION_FPP 1 STATIC_INLINE int isinrom (void) { @@ -189,43 +190,86 @@ static void fpu_format_error (void) #endif } -static void fpu_op_illg2 (uae_u16 opcode, uae_u32 ea, uaecptr oldpc) +#define FPU_EXP_UNIMP_INS 0 +#define FPU_EXP_DISABLED 1 +#define FPU_EXP_UNIMP_DATATYPE 2 + +static void fpu_op_unimp (uae_u16 opcode, uae_u32 ea, uaecptr oldpc, int type) { - if ((currprefs.cpu_model == 68060 && (currprefs.fpu_model == 0 || (regs.pcr & 2))) - || (currprefs.cpu_model == 68040 && currprefs.fpu_model == 0)) { - /* 68040 unimplemented/68060 FPU disabled exception. - * Line F exception with different stack frame.. */ - uaecptr newpc = m68k_getpc (); - regs.t0 = regs.t1 = 0; - MakeSR (); - if (!regs.s) { - regs.usp = m68k_areg (regs, 7); - m68k_areg (regs, 7) = regs.isp; - } - regs.s = 1; - if (currprefs.cpu_model == 68060) { - m68k_areg (regs, 7) -= 4; - x_put_long (m68k_areg (regs, 7), oldpc); - m68k_areg (regs, 7) -= 4; - x_put_long (m68k_areg (regs, 7), ea); - m68k_areg (regs, 7) -= 2; - x_put_word (m68k_areg (regs, 7), 0x4000 + 11 * 4); - } else { - m68k_areg (regs, 7) -= 4; - x_put_long (m68k_areg (regs, 7), ea); - m68k_areg (regs, 7) -= 2; - x_put_word (m68k_areg (regs, 7), 0x2000 + 11 * 4); - } + /* 68040 unimplemented/68060 FPU disabled exception. + * Line F exception with different stack frame.. */ + int vector = 11; + uaecptr newpc = m68k_getpc (); + static int warned = 20; + + regs.t0 = regs.t1 = 0; + MakeSR (); + if (!regs.s) { + regs.usp = m68k_areg (regs, 7); + m68k_areg (regs, 7) = regs.isp; + } + regs.s = 1; + if (currprefs.cpu_model == 68060) { + regs.fpiar = oldpc; + if (type == FPU_EXP_DISABLED) { + m68k_areg (regs, 7) -= 4; + x_put_long (m68k_areg (regs, 7), oldpc); + m68k_areg (regs, 7) -= 4; + x_put_long (m68k_areg (regs, 7), ea); + m68k_areg (regs, 7) -= 2; + x_put_word (m68k_areg (regs, 7), 0x4000 + vector * 4); + } else if (type == FPU_EXP_UNIMP_INS) { + // PC = next instruction + oldpc = newpc; + m68k_areg (regs, 7) -= 4; + x_put_long (m68k_areg (regs, 7), ea); + m68k_areg (regs, 7) -= 2; + x_put_word (m68k_areg (regs, 7), 0x2000 + vector * 4); + //activate_debugger (); + } else { // FPU_EXP_UNIMP_DATATYPE + vector = 60; + m68k_areg (regs, 7) -= 2; + x_put_word (m68k_areg (regs, 7), 0x0000 + vector * 4); + } + } else if (currprefs.cpu_model == 68040) { + regs.fpiar = oldpc; + if (type == FPU_EXP_UNIMP_INS) { + // PC = next instruction + oldpc = newpc; m68k_areg (regs, 7) -= 4; - x_put_long (m68k_areg (regs, 7), newpc); + x_put_long (m68k_areg (regs, 7), ea); m68k_areg (regs, 7) -= 2; - x_put_word (m68k_areg (regs, 7), regs.sr); - write_log (_T("68040/060 FPU disabled exception OP=%04X EA=%08X PC=%08X\n"), opcode, ea, oldpc); - newpc = x_get_long (regs.vbr + 11 * 4); - m68k_setpc (newpc); + x_put_word (m68k_areg (regs, 7), 0x2000 + vector * 4); + } else { // FPU_EXP_UNIMP_DATATYPE + vector = 55; + m68k_areg (regs, 7) -= 4; + x_put_long (m68k_areg (regs, 7), ea); + m68k_areg (regs, 7) -= 2; + x_put_word (m68k_areg (regs, 7), 0x2000 + vector * 4); + } + } + m68k_areg (regs, 7) -= 4; + x_put_long (m68k_areg (regs, 7), newpc); + m68k_areg (regs, 7) -= 2; + x_put_word (m68k_areg (regs, 7), regs.sr); + newpc = x_get_long (regs.vbr + vector * 4); + if (warned > 0) { + write_log (_T("FPU EXCEPTION %d OP=%04X EA=%08X PC=%08X -> %08X\n"), type, opcode, ea, oldpc, newpc); +#if EXCEPTION_FPP == 0 + warned--; +#endif + } + m68k_setpc (newpc); #ifdef JIT - set_special (SPCFLAG_END_COMPILE); + set_special (SPCFLAG_END_COMPILE); #endif +} + +static void fpu_op_illg2 (uae_u16 opcode, uae_u32 ea, uaecptr oldpc) +{ + if ((currprefs.cpu_model == 68060 && (currprefs.fpu_model == 0 || (regs.pcr & 2))) + || (currprefs.cpu_model == 68040 && currprefs.fpu_model == 0)) { + fpu_op_unimp (opcode, ea, oldpc, FPU_EXP_DISABLED); return; } m68k_setpc (oldpc); @@ -237,20 +281,140 @@ static void fpu_op_illg (uae_u16 opcode, uaecptr oldpc) fpu_op_illg2 (opcode, 0, oldpc); } + +static void fpu_noinst (uae_u16 opcode, uaecptr pc) +{ +#if EXCEPTION_FPP + write_log (_T("Unknown FPU instruction %04X %08X\n"), opcode, pc); +#endif + m68k_setpc (pc); + op_illg (opcode); +} + static bool fault_if_no_fpu (uae_u16 opcode, uae_u32 extra, uaecptr ea, uaecptr oldpc) { if ((regs.pcr & 2) || currprefs.fpu_model <= 0) { -// write_log (_T("no FPU: %04x %08x PC=%08x\n"), opcode, extra, oldpc); +#if EXCEPTION_FPP + write_log (_T("no FPU: %04x %08x PC=%08x\n"), opcode, extra, oldpc); +#endif fpu_op_illg2 (opcode, ea, oldpc); return true; } return false; } +static bool fault_if_unimplemented_680x0 (uae_u16 opcode, uae_u32 extra, uaecptr ea, uaecptr oldpc) +{ + if (fault_if_no_fpu (opcode, extra, ea, oldpc)) + return true; + if (currprefs.cpu_model >= 68040 && currprefs.fpu_model && currprefs.fpu_no_unimplemented) { + uae_u16 v = extra & 0x7f; + switch (v) + { + case 0x01: /* FINT */ + case 0x03: /* FINTRZ */ + // Unimplemented only in 68040. + if (currprefs.cpu_model == 68040) { + fpu_op_unimp (opcode, ea, oldpc, FPU_EXP_UNIMP_INS); + return true; + } + return false; + + case 0x02: /* FSINH */ + case 0x06: /* FLOGNP1 */ + case 0x08: /* FETOXM1 */ + case 0x09: /* FTANH */ + case 0x0a: /* FATAN */ + case 0x0c: /* FASIN */ + case 0x0d: /* FATANH */ + case 0x0e: /* FSIN */ + case 0x0f: /* FTAN */ + case 0x10: /* FETOX */ + case 0x11: /* FTWOTOX */ + case 0x12: /* FTENTOX */ + case 0x14: /* FLOGN */ + case 0x15: /* FLOG10 */ + case 0x16: /* FLOG2 */ + case 0x19: /* FCOSH */ + case 0x1c: /* FACOS */ + case 0x1d: /* FCOS */ + case 0x1e: /* FGETEXP */ + case 0x1f: /* FGETMAN */ + case 0x30: /* FSINCOS */ + case 0x31: /* FSINCOS */ + case 0x32: /* FSINCOS */ + case 0x33: /* FSINCOS */ + case 0x34: /* FSINCOS */ + case 0x35: /* FSINCOS */ + case 0x36: /* FSINCOS */ + case 0x37: /* FSINCOS */ + case 0x21: /* FMOD */ + case 0x25: /* FREM */ + case 0x26: /* FSCALE */ + fpu_op_unimp (opcode, ea, oldpc, FPU_EXP_UNIMP_INS); + return true; + } + } + return false; +} + +static bool fault_if_unimplemented_6888x (uae_u16 opcode, uae_u32 extra, uaecptr oldpc) +{ + if ((currprefs.fpu_model == 68881 || currprefs.fpu_model == 68882) && currprefs.fpu_no_unimplemented) { + uae_u16 v = extra & 0x7f; + /* 68040/68060 only variants. 6888x = F-line exception. */ + switch (v) + { + case 0x62: /* FSADD */ + case 0x66: /* FDADD */ + case 0x68: /* FSSUB */ + case 0x6c: /* FDSUB */ + case 0x5a: /* FSNEG */ + case 0x5e: /* FDNEG */ + case 0x58: /* FSABS */ + case 0x5c: /* FDABS */ + case 0x63: /* FSMUL */ + case 0x67: /* FDMUL */ + case 0x41: /* FSSQRT */ + case 0x45: /* FDSQRT */ + fpu_noinst (opcode, oldpc); + return true; + } + } + return false; +} + +static bool fault_if_4060 (uae_u16 opcode, uae_u32 extra, uaecptr ea, uaecptr oldpc, int type) +{ + if (currprefs.cpu_model >= 68040 && currprefs.fpu_model && currprefs.fpu_no_unimplemented) { + // do not emulate missing datatype yet, much more complex + // requires pre and post exceptions.. + if (type == FPU_EXP_UNIMP_DATATYPE) + return false; + fpu_op_unimp (opcode, ea, oldpc, type); + return true; + } + return false; +} + +static bool fault_if_no_fpu_u (uae_u16 opcode, uae_u32 extra, uaecptr ea, uaecptr oldpc) +{ + if (fault_if_no_fpu (opcode, extra, ea, oldpc)) + return true; + if (currprefs.cpu_model == 68060 && currprefs.fpu_model && currprefs.fpu_no_unimplemented) { + // 68060 FTRAP, FDBcc or FScc are not implemented. + fpu_op_unimp (opcode, ea, m68k_getpc (), FPU_EXP_UNIMP_INS); + return true; + } + return false; +} + static bool fault_if_no_6888x (uae_u16 opcode, uae_u32 extra, uaecptr oldpc) { if (currprefs.cpu_model < 68040 && currprefs.fpu_model <= 0) { -// write_log (_T("6888x no FPU: %04x %08x PC=%08x\n"), opcode, extra, oldpc); +#if EXCEPTION_FPP + write_log (_T("6888x no FPU: %04x %08x PC=%08x\n"), opcode, extra, oldpc); +#endif m68k_setpc (oldpc); op_illg (opcode); return true; @@ -258,13 +422,6 @@ static bool fault_if_no_6888x (uae_u16 opcode, uae_u32 extra, uaecptr oldpc) return false; } -static void fpu_noinst (uae_u16 opcode, uaecptr pc) -{ -// write_log (_T("Unknown FPU instruction %04X %08X\n"), opcode, pc); - m68k_setpc (pc); - op_illg (opcode); -} - static int get_fpu_version (void) { @@ -561,7 +718,7 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src, uaec } } - if (fault_if_no_fpu (opcode, extra, ad, oldpc)) + if (fault_if_unimplemented_680x0 (opcode, extra, ad, oldpc)) return -1; switch (size) @@ -574,6 +731,8 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src, uaec break; case 2: { + if (fault_if_4060 (opcode, extra, ad, oldpc, FPU_EXP_UNIMP_DATATYPE)) + return -1; uae_u32 wrd1, wrd2, wrd3; wrd1 = x_cp_get_long (ad); ad += 4; @@ -585,6 +744,8 @@ STATIC_INLINE int get_fp_value (uae_u32 opcode, uae_u16 extra, fptype *src, uaec break; case 3: { + if (fault_if_4060 (opcode, extra, ad, oldpc, FPU_EXP_UNIMP_DATATYPE)) + return -1; uae_u32 wrd1, wrd2, wrd3; wrd1 = x_cp_get_long (ad); ad += 4; @@ -716,6 +877,8 @@ STATIC_INLINE int put_fp_value (fptype value, uae_u32 opcode, uae_u16 extra, uae break; case 2: { + if (fault_if_4060 (opcode, extra, ad, oldpc, FPU_EXP_UNIMP_DATATYPE)) + return -1; uae_u32 wrd1, wrd2, wrd3; from_exten (value, &wrd1, &wrd2, &wrd3); x_cp_put_long (ad, wrd1); @@ -727,6 +890,8 @@ STATIC_INLINE int put_fp_value (fptype value, uae_u32 opcode, uae_u16 extra, uae break; case 3: { + if (fault_if_4060 (opcode, extra, ad, oldpc, FPU_EXP_UNIMP_DATATYPE)) + return -1; uae_u32 wrd1, wrd2, wrd3; from_pack (value, &wrd1, &wrd2, &wrd3); x_cp_put_long (ad, wrd1); @@ -904,7 +1069,7 @@ void fpuop_dbcc (uae_u32 opcode, uae_u16 extra) return; disp = (uae_s32) (uae_s16) x_next_iword (); - if (fault_if_no_fpu (opcode, extra, pc + disp, pc - 4)) + if (fault_if_no_fpu_u (opcode, extra, pc + disp, pc - 4)) return; regs.fpiar = pc - 4; cc = fpp_cond (extra & 0x3f); @@ -930,7 +1095,7 @@ void fpuop_scc (uae_u32 opcode, uae_u16 extra) if (!isinrom ()) write_log (_T("fscc_opp at %08lx\n"), m68k_getpc ()); #endif - if (fault_if_no_fpu (opcode, extra, 0, pc)) + if (fault_if_no_fpu_u (opcode, extra, 0, pc)) return; regs.fpiar = pc; @@ -958,7 +1123,7 @@ void fpuop_trapcc (uae_u32 opcode, uaecptr oldpc, uae_u16 extra) if (!isinrom ()) write_log (_T("ftrapcc_opp at %08lx\n"), m68k_getpc ()); #endif - if (fault_if_no_fpu (opcode, extra, 0, oldpc)) + if (fault_if_no_fpu_u (opcode, extra, 0, oldpc)) return; regs.fpiar = oldpc; @@ -1656,6 +1821,11 @@ static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) MAKE_FPSR (regs.fp[reg]); return; } + + // 6888x does not have special exceptions, check immediately + if (fault_if_unimplemented_6888x (opcode, extra, pc)) + return; + v = get_fp_value (opcode, extra, &src, pc); if (v <= 0) { if (v == 0) @@ -1663,6 +1833,10 @@ static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) return; } + // get_fp_value() checked this, but only if EA was nonzero (non-register) + if (fault_if_unimplemented_680x0 (opcode, extra, 0, pc)) + return; + regs.fpiar = pc; switch (extra & 0x7f) @@ -1717,8 +1891,8 @@ static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) regs.fp[reg] = fp_round_to_zero (src); break; case 0x04: /* FSQRT */ - case 0x41: - case 0x45: + case 0x41: /* FSSQRT */ + case 0x45: /* FDSQRT */ regs.fp[reg] = sqrt (src); if ((extra & 0x44) == 0x40) fround (reg); @@ -1770,8 +1944,8 @@ static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) regs.fp[reg] = *fp_l2_e * log (src); break; case 0x18: /* FABS */ - case 0x58: - case 0x5c: + case 0x58: /* FSABS */ + case 0x5c: /* FDABS */ regs.fp[reg] = src < 0 ? -src : src; if ((extra & 0x44) == 0x40) fround (reg); @@ -1780,8 +1954,8 @@ static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) regs.fp[reg] = cosh (src); break; case 0x1a: /* FNEG */ - case 0x5a: - case 0x5e: + case 0x5a: /* FSNEG */ + case 0x5e: /* FDNEG */ regs.fp[reg] = -src; if ((extra & 0x44) == 0x40) fround (reg); @@ -1814,8 +1988,8 @@ static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) } break; case 0x20: /* FDIV */ - case 0x60: - case 0x64: + case 0x60: /* FSDIV */ + case 0x64: /* FDADD */ regs.fp[reg] /= src; if ((extra & 0x44) == 0x40) fround (reg); @@ -1827,15 +2001,15 @@ static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) } break; case 0x22: /* FADD */ - case 0x62: - case 0x66: + case 0x62: /* FSADD */ + case 0x66: /* FDADD */ regs.fp[reg] += src; if ((extra & 0x44) == 0x40) fround (reg); break; case 0x23: /* FMUL */ - case 0x63: - case 0x67: + case 0x63: /* FSMUL */ + case 0x67: /* FDMUL */ regs.fp[reg] *= src; if ((extra & 0x44) == 0x40) fround (reg); @@ -1862,8 +2036,8 @@ static void fpuop_arithmetic2 (uae_u32 opcode, uae_u16 extra) regs.fp[reg] *= src; break; case 0x28: /* FSUB */ - case 0x68: - case 0x6c: + case 0x68: /* FSSUB */ + case 0x6c: /* FDSUB */ regs.fp[reg] -= src; if ((extra & 0x44) == 0x40) fround (reg); diff --git a/include/inputdevice.h b/include/inputdevice.h index 6daa730e..6db86e0e 100644 --- a/include/inputdevice.h +++ b/include/inputdevice.h @@ -80,6 +80,7 @@ struct inputevent { #define ID_FLAG_GAMEPORTSCUSTOM1 4 #define ID_FLAG_GAMEPORTSCUSTOM2 8 #define ID_FLAG_INVERTTOGGLE 16 +#define ID_FLAG_INVERT 32 #define ID_FLAG_GAMEPORTSCUSTOM_MASK (ID_FLAG_GAMEPORTSCUSTOM1 | ID_FLAG_GAMEPORTSCUSTOM2) #define ID_FLAG_AUTOFIRE_MASK (ID_FLAG_TOGGLE | ID_FLAG_INVERTTOGGLE | ID_FLAG_AUTOFIRE) @@ -114,6 +115,7 @@ struct inputevent { #define IDEV_MAPPED_INVERTTOGGLE 8 #define IDEV_MAPPED_GAMEPORTSCUSTOM1 16 #define IDEV_MAPPED_GAMEPORTSCUSTOM2 32 +#define IDEV_MAPPED_INVERT 64 #define IDEV_MAPPED_QUALIFIER1 0x000000100000000 #define IDEV_MAPPED_QUALIFIER2 0x000000400000000 #define IDEV_MAPPED_QUALIFIER3 0x000001000000000 diff --git a/include/newcpu.h b/include/newcpu.h index 31957fb0..9a9bf476 100644 --- a/include/newcpu.h +++ b/include/newcpu.h @@ -409,7 +409,6 @@ extern void init_m68k_full (void); extern void m68k_go (int); extern void m68k_dumpstate (uaecptr *); extern void m68k_dumpstate (uaecptr, uaecptr *); -extern void m68k_reset (int); extern int getDivu68kCycles (uae_u32 dividend, uae_u16 divisor); extern int getDivs68kCycles (uae_s32 dividend, uae_s16 divisor); extern void divbyzero_special (bool issigned, uae_s32 dst); diff --git a/include/options.h b/include/options.h index da7df1c7..b5218e7a 100644 --- a/include/options.h +++ b/include/options.h @@ -9,7 +9,7 @@ #define UAEMAJOR 2 #define UAEMINOR 6 -#define UAESUBREV 0 +#define UAESUBREV 1 typedef enum { KBD_LANG_US, KBD_LANG_DK, KBD_LANG_DE, KBD_LANG_SE, KBD_LANG_FR, KBD_LANG_IT, KBD_LANG_ES } KbdLang; @@ -447,6 +447,7 @@ struct uae_prefs { int fpu_model; int fpu_revision; bool cpu_compatible; + bool fpu_no_unimplemented; bool address_space_24; bool picasso96_nocustom; int picasso96_modeflags; diff --git a/inputdevice.cpp b/inputdevice.cpp index 29e6f371..6a096855 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -61,6 +61,8 @@ int inputdevice_logging = 0; extern int tablet_log; +#define COMPA_RESERVED_FLAGS ID_FLAG_INVERT + #define ID_FLAG_CANRELEASE 0x1000 #define ID_FLAG_TOGGLED 0x2000 #define ID_FLAG_CUSTOMEVENT_TOGGLED1 0x4000 @@ -2976,7 +2978,7 @@ static int handle_input_event (int nr, int state, int max, int autofire, bool ca return 0; #ifdef _WIN32 - // ignore norrmal GUI event if forced gui key is in use + // ignore normal GUI event if forced gui key is in use if (currprefs.win32_guikey >= 0 && nr == INPUTEVENT_SPC_ENTERGUI) return 0; #endif @@ -3697,23 +3699,23 @@ static bool process_custom_event (struct uae_input_device *id, int offset, int s return true; } -static void setbuttonstateall (struct uae_input_device *id, struct uae_input_device2 *id2, int button, int state) +static void setbuttonstateall (struct uae_input_device *id, struct uae_input_device2 *id2, int button, int buttonstate) { static frame_time_t switchdevice_timeout; int i; uae_u32 mask = 1 << button; uae_u32 omask = id2 ? id2->buttonmask & mask : 0; - uae_u32 nmask = (state ? 1 : 0) << button; + uae_u32 nmask = (buttonstate ? 1 : 0) << button; uae_u64 qualmask[MAX_INPUT_SUB_EVENT]; bool qualonly; - if (input_play && state) + if (input_play && buttonstate) inprec_realtime (); if (input_play) return; if (!id->enabled) { frame_time_t t = read_processor_time (); - if (state) { + if (buttonstate) { switchdevice_timeout = t; } else { int port = button; @@ -3731,7 +3733,7 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev bool didcustom = false; for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { - int sub = sublevdir[state == 0 ? 1 : 0][i]; + int sub = sublevdir[buttonstate == 0 ? 1 : 0][i]; uae_u64 *flagsp = &id->flags[ID_BUTTON_OFFSET + button][sub]; int evt = id->eventid[ID_BUTTON_OFFSET + button][sub]; TCHAR *custom = id->custom[ID_BUTTON_OFFSET + button][sub]; @@ -3739,6 +3741,16 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev int autofire = (flags & ID_FLAG_AUTOFIRE) ? 1 : 0; int toggle = (flags & ID_FLAG_TOGGLE) ? 1 : 0; int inverttoggle = (flags & ID_FLAG_INVERTTOGGLE) ? 1 : 0; + int invert = (flags & ID_FLAG_INVERT) ? 1 : 0; + int state; + + if (buttonstate < 0) { + state = buttonstate; + } else if (invert) { + state = buttonstate ? 0 : 1; + } else { + state = buttonstate; + } if (!state) { didcustom |= process_custom_event (id, ID_BUTTON_OFFSET + button, state, qualmask, autofire, i); @@ -3798,7 +3810,7 @@ static void setbuttonstateall (struct uae_input_device *id, struct uae_input_dev queue_input_event (-1, NULL, -1, 0, 0, 1); if (id2 && ((omask ^ nmask) & mask)) { - if (state) + if (buttonstate) id2->buttonmask |= mask; else id2->buttonmask &= ~mask; @@ -4326,7 +4338,7 @@ static void setcompakb (int *kb, int *srcmap, int index, int af) if (uid->extra[l] == id) { inputdevice_sparecopy (uid, l, 0); uid->eventid[l][0] = srcmap[k]; - uid->flags[l][0] = 0; + uid->flags[l][0] &= COMPA_RESERVED_FLAGS; uid->port[l][0] = index + 1; xfree (uid->custom[l][0]); uid->custom[l][0] = NULL; @@ -4411,7 +4423,7 @@ static void clearevent (struct uae_input_device *uid, int evt) for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (uid->eventid[i][j] == evt) { uid->eventid[i][j] = 0; - uid->flags[i][j] = 0; + uid->flags[i][j] &= COMPA_RESERVED_FLAGS; xfree (uid->custom[i][j]); uid->custom[i][j] = NULL; } @@ -4424,7 +4436,7 @@ static void clearkbrevent (struct uae_input_device *uid, int evt) for (int j = 0; j < MAX_INPUT_SUB_EVENT; j++) { if (uid->eventid[i][j] == evt) { uid->eventid[i][j] = 0; - uid->flags[i][j] = 0; + uid->flags[i][j] &= COMPA_RESERVED_FLAGS; xfree (uid->custom[i][j]); uid->custom[i][j] = NULL; if (j == 0) @@ -4504,7 +4516,7 @@ static void cleardevgp (struct uae_input_device *uid, int num, bool nocustom, in if (nocustom && (uid[num].flags[i][j] & ID_FLAG_GAMEPORTSCUSTOM_MASK)) continue; uid[num].eventid[i][j] = 0; - uid[num].flags[i][j] = 0; + uid[num].flags[i][j] &= COMPA_RESERVED_FLAGS; xfree (uid[num].custom[i][j]); uid[num].custom[i][j] = NULL; uid[num].port[i][j] = 0; @@ -4522,7 +4534,7 @@ static void cleardevkbrgp (struct uae_input_device *uid, int num, bool nocustom, if (nocustom && (uid[num].flags[i][j] & ID_FLAG_GAMEPORTSCUSTOM_MASK)) continue; uid[num].eventid[i][j] = 0; - uid[num].flags[i][j] = 0; + uid[num].flags[i][j] &= COMPA_RESERVED_FLAGS; xfree (uid[num].custom[i][j]); uid[num].custom[i][j] = NULL; uid[num].port[i][j] = 0; @@ -5436,7 +5448,7 @@ static void rqualifiers (uae_u64 flags, bool release) } } -static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state, bool qualifiercheckonly) +static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int keystate, bool qualifiercheckonly) { struct uae_input_device *na = &keyboards[keyboard]; int j, k; @@ -5459,13 +5471,23 @@ static int inputdevice_translatekeycode_2 (int keyboard, int scancode, int state if (qualonly) qualifiercheckonly = true; for (k = 0; k < MAX_INPUT_SUB_EVENT; k++) {/* send key release events in reverse order */ - uae_u64 *flagsp = &na->flags[j][sublevdir[state == 0 ? 1 : 0][k]]; - int evt = na->eventid[j][sublevdir[state == 0 ? 1 : 0][k]]; + uae_u64 *flagsp = &na->flags[j][sublevdir[keystate == 0 ? 1 : 0][k]]; + int evt = na->eventid[j][sublevdir[keystate == 0 ? 1 : 0][k]]; uae_u64 flags = *flagsp; int autofire = (flags & ID_FLAG_AUTOFIRE) ? 1 : 0; int toggle = (flags & ID_FLAG_TOGGLE) ? 1 : 0; int inverttoggle = (flags & ID_FLAG_INVERTTOGGLE) ? 1 : 0; + int invert = (flags & ID_FLAG_INVERT) ? 1 : 0; int toggled; + int state; + + if (keystate < 0) { + state = keystate; + } else if (invert) { + state = keystate ? 0 : 1; + } else { + state = keystate; + } setqualifiers (evt, state > 0); @@ -6031,6 +6053,8 @@ int inputdevice_get_mapping (int devnum, int num, uae_u64 *pflags, int *pport, T flags |= IDEV_MAPPED_TOGGLE; if (flag & ID_FLAG_INVERTTOGGLE) flags |= IDEV_MAPPED_INVERTTOGGLE; + if (flag & ID_FLAG_INVERT) + flags |= IDEV_MAPPED_INVERT; if (flag & ID_FLAG_GAMEPORTSCUSTOM1) flags |= IDEV_MAPPED_GAMEPORTSCUSTOM1; if (flag & ID_FLAG_GAMEPORTSCUSTOM2) @@ -6083,12 +6107,13 @@ int inputdevice_set_mapping (int devnum, int num, const TCHAR *name, TCHAR *cust return 0; if (data >= 0) { amask = events[eid].allow_mask; - flag &= ~(ID_FLAG_AUTOFIRE_MASK | ID_FLAG_GAMEPORTSCUSTOM_MASK | IDEV_MAPPED_QUALIFIER_MASK); + flag &= ~(ID_FLAG_AUTOFIRE_MASK | ID_FLAG_GAMEPORTSCUSTOM_MASK | IDEV_MAPPED_QUALIFIER_MASK | ID_FLAG_INVERT); if (amask & AM_AF) { flag |= (flags & IDEV_MAPPED_AUTOFIRE_SET) ? ID_FLAG_AUTOFIRE : 0; flag |= (flags & IDEV_MAPPED_TOGGLE) ? ID_FLAG_TOGGLE : 0; flag |= (flags & IDEV_MAPPED_INVERTTOGGLE) ? ID_FLAG_INVERTTOGGLE : 0; } + flag |= (flags & IDEV_MAPPED_INVERT) ? ID_FLAG_INVERT : 0; flag |= (flags & IDEV_MAPPED_GAMEPORTSCUSTOM1) ? ID_FLAG_GAMEPORTSCUSTOM1 : 0; flag |= (flags & IDEV_MAPPED_GAMEPORTSCUSTOM2) ? ID_FLAG_GAMEPORTSCUSTOM2 : 0; flag |= flags & IDEV_MAPPED_QUALIFIER_MASK; @@ -6597,8 +6622,12 @@ void setjoystickstate (int joy, int axis, int state, int max) switchdevice (&joysticks[joy], axis * 2 + (v1 < 0 ? 0 : 1), false); return; } - for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) - handle_input_event (id->eventid[ID_AXIS_OFFSET + axis][i], state, max, id->flags[ID_AXIS_OFFSET + axis][i] & ID_FLAG_AUTOFIRE, true, false); + for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { + uae_u64 flags = id->flags[ID_AXIS_OFFSET + axis][i]; + if (flags & ID_FLAG_INVERT) + state = -state; + handle_input_event (id->eventid[ID_AXIS_OFFSET + axis][i], state, max, flags & ID_FLAG_AUTOFIRE, true, false); + } id2->states[axis] = state; } int getjoystickstate (int joy) @@ -6663,8 +6692,12 @@ void setmousestate (int mouse, int axis, int data, int isabs) diff = (int)fract[mouse][axis]; v += diff; fract[mouse][axis] -= diff; - for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) + for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { + uae_u64 flags = id->flags[ID_AXIS_OFFSET + axis][i]; + if (!isabs && (flags & ID_FLAG_INVERT)) + v = -v; handle_input_event (id->eventid[ID_AXIS_OFFSET + axis][i], v, 0, 0, true, false); + } } int getmousestate (int joy) diff --git a/memory.cpp b/memory.cpp index b9a8e7f4..62c23554 100644 --- a/memory.cpp +++ b/memory.cpp @@ -2311,7 +2311,9 @@ static void fill_ce_banks (void) // data cachable regions memset (ce_cachable, 0, sizeof ce_cachable); memset (ce_cachable + (0x00200000 >> 16), 1, currprefs.fastmem_size >> 16); - memset (ce_cachable + (0x10000000 >> 16), 1, currprefs.z3fastmem_size >> 16); + memset (ce_cachable + (0x00c00000 >> 16), 1, currprefs.bogomem_size >> 16); + memset (ce_cachable + (z3fastmem_start >> 16), 1, currprefs.z3fastmem_size >> 16); + memset (ce_cachable + (z3fastmem2_start >> 16), 1, currprefs.z3fastmem2_size >> 16); if (&get_mem_bank (0) == &chipmem_bank) { for (i = 0; i < (0x200000 >> 16); i++) diff --git a/newcpu.cpp b/newcpu.cpp index 39a70dcf..283db3c5 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -3268,7 +3268,7 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra) #endif -void m68k_reset (int hardreset) +static void m68k_reset (bool hardreset) { regs.spcflags = 0; regs.ipl = regs.ipl_pin = 0; @@ -4346,13 +4346,14 @@ retry: f.x = regflags.x; pc = regs.instruction_pc = m68k_getpc (); + do_cycles (cpu_cycles); + mmu_opcode = -1; mmu060_state = 0; mmu_opcode = opcode = x_prefetch (0); mmu060_state = 1; count_instr (opcode); - do_cycles (cpu_cycles); cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); @@ -4406,10 +4407,11 @@ retry: mmu_restart = true; pc = regs.instruction_pc = m68k_getpc (); + do_cycles (cpu_cycles); + mmu_opcode = -1; mmu_opcode = opcode = x_prefetch (0); count_instr (opcode); - do_cycles (cpu_cycles); cpu_cycles = (*cpufunctbl[opcode])(opcode); cpu_cycles = adjust_cycles (cpu_cycles); @@ -4853,7 +4855,7 @@ void m68k_go (int may_quit) #endif set_cycles (start_cycles); custom_reset (hardreset != 0, kbreset); - m68k_reset (hardreset); + m68k_reset (hardreset != 0); if (hardreset) { memory_clear (); write_log (_T("hardreset, memory cleared\n")); @@ -5936,7 +5938,7 @@ void cpureset (void) return; } pc = m68k_getpc (); - if (pc >= currprefs.chipmem_size) { + if (pc >= 0xa00000) { addrbank *b = &get_mem_bank (pc); if (b->check (pc, 2 + 2)) { /* We have memory, hope for the best.. */ diff --git a/od-win32/direct3d.cpp b/od-win32/direct3d.cpp index c293c6cd..9966f9de 100644 --- a/od-win32/direct3d.cpp +++ b/od-win32/direct3d.cpp @@ -60,6 +60,7 @@ struct shaderdata LPDIRECT3DTEXTURE9 lpWorkTexture1; LPDIRECT3DTEXTURE9 lpWorkTexture2; LPDIRECT3DTEXTURE9 lpTempTexture; + LPDIRECT3DVOLUMETEXTURE9 lpHq2xLookupTexture; LPD3DXEFFECT pEffect; // Technique stuff D3DXHANDLE m_PreprocessTechnique1EffectHandle; @@ -82,7 +83,6 @@ struct shaderdata LPDIRECT3DTEXTURE9 masktexture; int masktexture_w, masktexture_h; }; -static LPDIRECT3DVOLUMETEXTURE9 lpHq2xLookupTexture; static LPDIRECT3DTEXTURE9 lpPostTempTexture; #define MAX_SHADERS 10 @@ -777,7 +777,7 @@ static const char *fx20 = { "}\n" }; -static bool psEffect_LoadEffect (const TCHAR *shaderfile, int full, struct shaderdata *s) +static bool psEffect_LoadEffect (const TCHAR *shaderfile, int full, struct shaderdata *s, int num) { int ret = 0; LPD3DXEFFECTCOMPILER EffectCompiler = NULL; @@ -896,9 +896,9 @@ end: } if (ret) - write_log (_T("%s: pixelshader filter '%s' enabled\n"), D3DHEAD, tmp); + write_log (_T("%s: pixelshader filter '%s':%d enabled\n"), D3DHEAD, tmp, num); else - write_log (_T("%s: pixelshader filter '%s' failed to initialize\n"), D3DHEAD, tmp); + write_log (_T("%s: pixelshader filter '%s':%d failed to initialize\n"), D3DHEAD, tmp, num); s->pEffect = effect; return effect != NULL; } @@ -959,7 +959,7 @@ static int psEffect_SetMatrices (D3DXMATRIXA16 *matProj, D3DXMATRIXA16 *matView, return 1; } -static int psEffect_SetTextures (LPDIRECT3DTEXTURE9 lpSource, LPDIRECT3DVOLUMETEXTURE9 lpHq2xLookupTexture, struct shaderdata *s) +static int psEffect_SetTextures (LPDIRECT3DTEXTURE9 lpSource, struct shaderdata *s) { HRESULT hr; D3DXVECTOR4 fDims, fTexelSize; @@ -988,7 +988,7 @@ static int psEffect_SetTextures (LPDIRECT3DTEXTURE9 lpSource, LPDIRECT3DVOLUMETE } } if (m_Hq2xLookupTextureHandle) { - hr = s->pEffect->SetTexture (m_Hq2xLookupTextureHandle, lpHq2xLookupTexture); + hr = s->pEffect->SetTexture (m_Hq2xLookupTextureHandle, s->lpHq2xLookupTexture); if (FAILED (hr)) { write_log (_T("%s: SetTextures:lpHq2xLookupTexture %s\n"), D3DHEAD, D3D_ErrorString (hr)); return 0; @@ -1148,19 +1148,27 @@ static int createamigatexture (int w, int h) return 0; write_log (_T("%s: %d*%d texture allocated, bits per pixel %d\n"), D3DHEAD, w, h, t_depth); if (psActive) { - D3DLOCKED_BOX lockedBox; for (int i = 0; i < MAX_SHADERS; i++) { + int w2, h2; if (shaders[i].type == SHADERTYPE_BEFORE) { + w2 = worktex_width; + h2 = worktex_height; if (!allocextratextures (&shaders[i], w, h)) return 0; + } else { + w2 = window_w; + h2 = window_h; + } + if (shaders[i].type == SHADERTYPE_BEFORE || shaders[i].type == SHADERTYPE_AFTER) { + D3DLOCKED_BOX lockedBox; + if (FAILED (hr = shaders[i].lpHq2xLookupTexture->LockBox (0, &lockedBox, NULL, 0))) { + write_log (_T("%s: Failed to lock box of volume texture: %s\n"), D3DHEAD, D3D_ErrorString (hr)); + return 0; + } + BuildHq2xLookupTexture (w2, h2, w, h, (unsigned char*)lockedBox.pBits); + shaders[i].lpHq2xLookupTexture->UnlockBox (0); } } - if (FAILED (hr = lpHq2xLookupTexture->LockBox (0, &lockedBox, NULL, 0))) { - write_log (_T("%s: Failed to lock box of volume texture: %s\n"), D3DHEAD, D3D_ErrorString (hr)); - return 0; - } - BuildHq2xLookupTexture (worktex_width, worktex_height, w, h, (unsigned char*)lockedBox.pBits); - lpHq2xLookupTexture->UnlockBox (0); } return 1; } @@ -1196,6 +1204,12 @@ static int createtexture (int ow, int oh, int win_w, int win_h) if (!allocextratextures (&shaders[i], window_w, window_h)) return 0; } + if (psActive) { + if (FAILED (hr = d3ddev->CreateVolumeTexture (256, 16, 256, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &shaders[i].lpHq2xLookupTexture, NULL))) { + write_log (_T("%s: Failed to create volume texture: %s\n"), D3DHEAD, D3D_ErrorString (hr)); + return 0; + } + } } } @@ -1208,14 +1222,6 @@ static int createtexture (int ow, int oh, int win_w, int win_h) } write_log (_T("%s: working texture allocated pre %d*%d, post %d*%d, bits per pixel %d\n"), D3DHEAD, w, h, window_w, window_h, t_depth); texelsize.x = 1.0f / w; texelsize.y = 1.0f / h; texelsize.z = 1; texelsize.w = 1; - - if (psActive) { - if (FAILED (hr = d3ddev->CreateVolumeTexture (256, 16, 256, 1, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpHq2xLookupTexture, NULL))) { - write_log (_T("%s: Failed to create volume texture: %s\n"), D3DHEAD, D3D_ErrorString (hr)); - return 0; - } - - } return 1; } @@ -1878,10 +1884,6 @@ static void freetextures (void) texture->Release (); texture = NULL; } - if (lpHq2xLookupTexture) { - lpHq2xLookupTexture->Release (); - lpHq2xLookupTexture = NULL; - } for (int i = 0; i < MAX_SHADERS; i++) { struct shaderdata *s = &shaders[i]; if (s->lpTempTexture) { @@ -1896,6 +1898,10 @@ static void freetextures (void) s->lpWorkTexture2->Release (); s->lpWorkTexture2 = NULL; } + if (s->lpHq2xLookupTexture) { + s->lpHq2xLookupTexture->Release (); + s->lpHq2xLookupTexture = NULL; + } } if (lpPostTempTexture) { lpPostTempTexture->Release(); @@ -1996,14 +2002,14 @@ static int restoredeviceobjects (void) while (shaderon > 0) { shaders[SHADER_POST].type = SHADERTYPE_POST; - if (!psEffect_LoadEffect (psEnabled ? _T("_winuae.fx") : _T("_winuae_old.fx"), false, &shaders[SHADER_POST])) { + if (!psEffect_LoadEffect (psEnabled ? _T("_winuae.fx") : _T("_winuae_old.fx"), false, &shaders[SHADER_POST], -1)) { shaderon = 0; break; } for (int i = 0; i < MAX_FILTERSHADERS; i++) { if (currprefs.gfx_filtershader[i][0]) { struct shaderdata *s = allocshaderslot (SHADERTYPE_BEFORE); - if (!psEffect_LoadEffect (currprefs.gfx_filtershader[i], true, s)) { + if (!psEffect_LoadEffect (currprefs.gfx_filtershader[i], true, s, i)) { currprefs.gfx_filtershader[i][0] = changed_prefs.gfx_filtershader[i][0] = 0; break; } @@ -2016,7 +2022,7 @@ static int restoredeviceobjects (void) for (int i = 0; i < MAX_FILTERSHADERS; i++) { if (currprefs.gfx_filtershader[i + MAX_FILTERSHADERS][0]) { struct shaderdata *s = allocshaderslot (SHADERTYPE_AFTER); - if (!psEffect_LoadEffect (currprefs.gfx_filtershader[i + MAX_FILTERSHADERS], true, s)) { + if (!psEffect_LoadEffect (currprefs.gfx_filtershader[i + MAX_FILTERSHADERS], true, s, i + MAX_FILTERSHADERS)) { currprefs.gfx_filtershader[i + MAX_FILTERSHADERS][0] = changed_prefs.gfx_filtershader[i + MAX_FILTERSHADERS][0] = 0; break; } @@ -2651,7 +2657,7 @@ static LPDIRECT3DTEXTURE9 processshader(LPDIRECT3DTEXTURE9 srctex, struct shader LPDIRECT3DSURFACE9 lpNewRenderTarget; LPDIRECT3DTEXTURE9 lpWorkTexture; - if (!psEffect_SetTextures (srctex, lpHq2xLookupTexture, s)) + if (!psEffect_SetTextures (srctex, s)) return NULL; if (s->psPreProcess) { if (!psEffect_SetMatrices (&m_matPreProj, &m_matPreView, &m_matPreWorld, s)) diff --git a/od-win32/inttypes.h b/od-win32/inttypes.h new file mode 100644 index 00000000..e69de29b diff --git a/od-win32/keyboard_win32.cpp b/od-win32/keyboard_win32.cpp index 3bf98e1b..063855c5 100644 --- a/od-win32/keyboard_win32.cpp +++ b/od-win32/keyboard_win32.cpp @@ -415,7 +415,10 @@ void my_kbd_handler (int keyboard, int scancode, int newstate) if (newstate) { int defaultguikey = amode ? DIK_F12 : DIK_NUMLOCK; - if (currprefs.win32_guikey >= 0) { + if (currprefs.win32_guikey >= 0x100) { + if (scancode == DIK_F12) + return; + } else if (currprefs.win32_guikey >= 0) { if (scancode_new == defaultguikey && currprefs.win32_guikey != scancode_new) { scancode = 0; if (specialpressed () && ctrlpressed() && shiftpressed() && altpressed ()) diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index 4c2b485b..88997cd1 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -500,6 +500,7 @@ #define IDC_FPU1 1225 #define IDC_FPU2 1226 #define IDC_FPU3 1227 +#define IDC_FPU_UNIMPLEMENTED 1228 #define IDC_SOUNDSETTINGS 1229 #define IDC_8BIT 1230 #define IDC_16BIT 1231 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index ee08fe0c..4c6ea1e9 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -192,54 +192,56 @@ BEGIN EDITTEXT IDC_MBRAM2,240,171,40,12,ES_CENTER | ES_READONLY END -IDD_CPU DIALOGEX 0, 0, 396, 259 +IDD_CPU DIALOGEX 0, 0, 396, 270 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x0 BEGIN - GROUPBOX "CPU",IDC_STATIC,1,1,99,160,BS_LEFT + GROUPBOX "CPU",IDC_STATIC,1,1,109,160,BS_LEFT CONTROL "68000",IDC_CPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,15,63,10 CONTROL "68010",IDC_CPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,29,63,10 CONTROL "68020",IDC_CPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,42,63,10 CONTROL "68030",IDC_CPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,56,63,10 CONTROL "68040",IDC_CPU4,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,70,63,10 CONTROL "68060",IDC_CPU5,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,84,63,10 - CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,101,87,11 + CONTROL "24-bit addressing",IDC_COMPATIBLE24,"Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,101,97,12 CONTROL "More compatible [] Emulate 68000's prefetch registers. More compatible but slower.",IDC_COMPATIBLE, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,115,87,11 + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,115,97,11 CONTROL "JIT [] Enable just-in-time CPU emulator. Significantly increases the speed of the CPU emulation. Requires 68020 or higher CPU.",IDC_JITENABLE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,128,87,11 - CONTROL "MMU [] 68030 or 68040 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,142,87,11 - GROUPBOX "CPU Emulation Speed",IDC_STATIC,110,3,284,96 - CONTROL "Fastest possible",IDC_CS_HOST,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,115,18,195,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,128,97,11 + CONTROL "MMU [] 68030, 68040 and 68060 MMU emulation. Not compatible with JIT.",IDC_MMUENABLE, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,142,96,11 + GROUPBOX "CPU Emulation Speed",IDC_STATIC,120,3,274,96 + CONTROL "Fastest possible",IDC_CS_HOST,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_GROUP | WS_TABSTOP,125,18,195,10 CONTROL "Approximate A500/A1200 or cycle-exact",IDC_CS_68000, - "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,115,32,195,10 - CONTROL "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,116,50,192,20 - RTEXT "CPU Speed",IDC_STATIC,115,78,55,9,SS_CENTERIMAGE - EDITTEXT IDC_CPUTEXT,178,77,30,12,ES_CENTER | ES_READONLY - RTEXT "CPU Idle",IDC_STATIC,213,78,62,9 - CONTROL "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,282,73,69,21 - GROUPBOX "Cycle-exact CPU Emulation Speed",IDC_STATIC,110,105,284,55 - RTEXT "CPU Frequency",IDC_STATIC,113,129,67,10,SS_CENTERIMAGE - COMBOBOX IDC_CPU_FREQUENCY,189,128,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - EDITTEXT IDC_CPU_FREQUENCY2,242,127,70,15 - GROUPBOX "FPU",IDC_STATIC,1,167,99,91,BS_LEFT + "Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,125,32,195,10 + CONTROL "Slider1",IDC_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,126,50,192,20 + RTEXT "CPU Speed",IDC_STATIC,125,78,55,9,SS_CENTERIMAGE + EDITTEXT IDC_CPUTEXT,188,77,30,12,ES_CENTER | ES_READONLY + RTEXT "CPU Idle",IDC_STATIC,223,78,62,9 + CONTROL "",IDC_CPUIDLE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,292,73,69,21 + GROUPBOX "Cycle-exact CPU Emulation Speed",IDC_STATIC,120,105,274,55 + RTEXT "CPU Frequency",IDC_STATIC,123,129,67,10,SS_CENTERIMAGE + COMBOBOX IDC_CPU_FREQUENCY,199,128,46,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_CPU_FREQUENCY2,252,127,70,15 + GROUPBOX "FPU",IDC_STATIC,1,167,109,99,BS_LEFT CONTROL "None",IDC_FPU0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,8,182,87,10 CONTROL "68881",IDC_FPU1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,196,87,10 CONTROL "68882",IDC_FPU2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,209,87,10 - CONTROL "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,223,87,10 + CONTROL "CPU internal",IDC_FPU3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,8,223,93,10 CONTROL "More compatible [] More compatible but slower FPU emulation.",IDC_COMPATIBLE_FPU, - "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,242,87,10 - GROUPBOX "Advanced JIT Settings",IDC_STATIC,110,167,284,91 - RTEXT "Cache size:",IDC_STATIC,117,187,66,10,SS_CENTERIMAGE - CONTROL "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,186,181,115,20 - EDITTEXT IDC_CACHETEXT,305,186,30,12,ES_CENTER | ES_READONLY - CONTROL "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,214,84,11 - CONTROL "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,228,84,11 - CONTROL "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,120,242,84,11 - CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,217,214,68,11 - CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,289,214,72,10 - CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,289,228,72,10 + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,239,94,10 + GROUPBOX "Advanced JIT Settings",IDC_STATIC,120,167,274,99 + RTEXT "Cache size:",IDC_STATIC,127,187,66,10,SS_CENTERIMAGE + CONTROL "Slider1",IDC_CACHE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,196,181,115,20 + EDITTEXT IDC_CACHETEXT,315,186,30,12,ES_CENTER | ES_READONLY + CONTROL "Hard flush",IDC_HARDFLUSH,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,214,84,11 + CONTROL "Constant jump",IDC_CONSTJUMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,228,84,11 + CONTROL "FPU support",IDC_JITFPU,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,130,242,84,11 + CONTROL "No flags",IDC_NOFLAGS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,227,214,68,11 + CONTROL "Direct",IDC_TRUST0,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,299,214,72,10 + CONTROL "Indirect",IDC_TRUST1,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,299,228,72,10 + CONTROL "Unimplemented emu [] Emulate 68040/060 FPU unimplemented instructions",IDC_FPU_UNIMPLEMENTED, + "Button",BS_AUTOCHECKBOX | BS_LEFT | WS_GROUP | WS_TABSTOP,8,252,96,10 END IDD_FLOPPY DIALOGEX 0, 0, 396, 261 @@ -1133,8 +1135,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,5,2,0 - PRODUCTVERSION 2,5,2,0 + FILEVERSION 2,6,1,0 + PRODUCTVERSION 2,6,1,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -1150,12 +1152,12 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "WinUAE" - VALUE "FileVersion", "2.6.0.0" + VALUE "FileVersion", "2.6.1.0" VALUE "InternalName", "WinUAE" VALUE "LegalCopyright", "© 1996-2013 under the GNU Public License (GPL)" VALUE "OriginalFilename", "WinUAE.exe" VALUE "ProductName", "WinUAE" - VALUE "ProductVersion", "2.6.0.0" + VALUE "ProductVersion", "2.6.1.0" END END BLOCK "VarFileInfo" diff --git a/od-win32/resources/winuae_minimal.rc b/od-win32/resources/winuae_minimal.rc index eb55c65c..3d161fd3 100644 --- a/od-win32/resources/winuae_minimal.rc +++ b/od-win32/resources/winuae_minimal.rc @@ -1133,8 +1133,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 2,5,2,0 - PRODUCTVERSION 2,5,2,0 + FILEVERSION 2,6,0,0 + PRODUCTVERSION 2,6,0,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 2dfee1e8..a4299752 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -2461,7 +2461,7 @@ void logging_init (void) SystemInfo.wProcessorArchitecture, SystemInfo.wProcessorLevel, SystemInfo.wProcessorRevision, SystemInfo.dwNumberOfProcessors, filedate); write_log (_T("\n(c) 1995-2001 Bernd Schmidt - Core UAE concept and implementation.") - _T("\n(c) 1998-2012 Toni Wilen - Win32 port, core code updates.") + _T("\n(c) 1998-2013 Toni Wilen - Win32 port, core code updates.") _T("\n(c) 1996-2001 Brian King - Win32 port, Picasso96 RTG, and GUI.") _T("\n(c) 1996-1999 Mathias Ortmann - Win32 port and bsdsocket support.") _T("\n(c) 2000-2001 Bernd Meyer - JIT engine.") @@ -4193,11 +4193,13 @@ static void WIN32_HandleRegistryStuff (void) fetch_path (_T("ConfigurationPath"), path, sizeof (path) / sizeof (TCHAR)); path[_tcslen (path) - 1] = 0; if (GetFileAttributes (path) == 0xffffffff) { + TCHAR path2[MAX_DPATH]; + _tcscpy (path2, path); createdir (path); _tcscat (path, _T("\\Host")); createdir (path); - fetch_path (_T("ConfigurationPath"), path, sizeof (path) / sizeof (TCHAR)); - _tcscat (path, _T("Hardware")); + _tcscpy (path, path2); + _tcscat (path, _T("\\Hardware")); createdir (path); } fetch_path (_T("StatefilePath"), path, sizeof (path) / sizeof (TCHAR)); diff --git a/od-win32/win32.h b/od-win32/win32.h index ae9e73c9..0c422d0b 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -15,15 +15,15 @@ #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100) #define GETBDD(x) ((x) % 100) -#define WINUAEPUBLICBETA 0 +#define WINUAEPUBLICBETA 1 #define LANG_DLL 1 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("") +#define WINUAEBETA _T("1") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2013, 5, 16) +#define WINUAEDATE MAKEBD(2013, 6, 3) #define WINUAEEXTRA _T("") //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index fcf05f11..b760030c 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -3420,7 +3420,7 @@ static void set_lventry_input (HWND list, int index) int i, sub, port; TCHAR name[256]; TCHAR custom[MAX_DPATH]; - TCHAR af[32], toggle[32]; + TCHAR af[32], toggle[32], invert[32]; uae_u64 flags; inputdevice_get_mapping (input_selected_device, index, &flags, &port, name, custom, input_selected_sub_num); @@ -3439,15 +3439,19 @@ static void set_lventry_input (HWND list, int index) else if (flags & IDEV_MAPPED_AUTOFIRE_POSSIBLE) WIN32GUI_LoadUIString (IDS_NO, toggle, sizeof toggle / sizeof (TCHAR)); else - _tcscpy (toggle, _T("-")); + _tcscpy (toggle, _T("-")); if (port > 0) { TCHAR tmp[256]; _tcscpy (tmp, name); _stprintf (name, _T("[PORT%d] %s"), port, tmp); } + _tcscpy (invert, _T("-")); + if (flags & IDEV_MAPPED_INVERT) + WIN32GUI_LoadUIString (IDS_YES, invert, sizeof invert / sizeof (TCHAR)); ListView_SetItemText (list, index, 1, custom[0] ? custom : name); ListView_SetItemText (list, index, 2, af); ListView_SetItemText (list, index, 3, toggle); + ListView_SetItemText (list, index, 4, invert); _tcscpy (name, _T("-")); if (flags & IDEV_MAPPED_QUALIFIER_MASK) { TCHAR *p; @@ -3462,14 +3466,14 @@ static void set_lventry_input (HWND list, int index) } } } - ListView_SetItemText (list, index, 4, name); + ListView_SetItemText (list, index, 5, name); sub = 0; for (i = 0; i < MAX_INPUT_SUB_EVENT; i++) { if (inputdevice_get_mapping (input_selected_device, index, &flags, NULL, name, custom, i) || custom[0]) sub++; } _stprintf (name, _T("%d"), sub); - ListView_SetItemText (list, index, 5, name); + ListView_SetItemText (list, index, 6, name); } static void update_listview_input (HWND hDlg) @@ -3622,7 +3626,7 @@ static void update_listview_inputmap (HWND hDlg, int deleteindex) static int clicked_entry = -1; #define LOADSAVE_COLUMNS 2 -#define INPUT_COLUMNS 6 +#define INPUT_COLUMNS 7 #define HARDDISK_COLUMNS 8 #define DISK_COLUMNS 3 #define MISC2_COLUMNS 2 @@ -3731,8 +3735,9 @@ void InitializeListView (HWND hDlg) WIN32GUI_LoadUIString (IDS_INPUTAMIGAEVENT, column_heading[1], MAX_COLUMN_HEADING_WIDTH); WIN32GUI_LoadUIString (IDS_INPUTAUTOFIRE, column_heading[2], MAX_COLUMN_HEADING_WIDTH); WIN32GUI_LoadUIString (IDS_INPUTTOGGLE, column_heading[3], MAX_COLUMN_HEADING_WIDTH); - WIN32GUI_LoadUIString (IDS_INPUTQUALIFIER, column_heading[4], MAX_COLUMN_HEADING_WIDTH); - _tcscpy (column_heading[5], _T("#")); + _tcscpy (column_heading[4], _T("Invert")); + WIN32GUI_LoadUIString (IDS_INPUTQUALIFIER, column_heading[5], MAX_COLUMN_HEADING_WIDTH); + _tcscpy (column_heading[6], _T("#")); list = GetDlgItem (hDlg, IDC_INPUTLIST); } else if (hDlg == pages[INPUTMAP_ID]) { @@ -3835,7 +3840,8 @@ void InitializeListView (HWND hDlg) listview_column_width[2] = 65; listview_column_width[3] = 65; listview_column_width[4] = 65; - listview_column_width[5] = 30; + listview_column_width[5] = 65; + listview_column_width[6] = 30; update_listview_input (hDlg); } else if (lv_type == LV_INPUTMAP) { @@ -8466,6 +8472,7 @@ static void enable_for_cpudlg (HWND hDlg) ew (hDlg, IDC_JITENABLE, jitenable); ew (hDlg, IDC_COMPATIBLE, !workprefs.cpu_cycle_exact); ew (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_model > 0); + ew (hDlg, IDC_FPU_UNIMPLEMENTED, workprefs.fpu_model); #if 0 ew (hDlg, IDC_CPU_MULTIPLIER, workprefs.cpu_cycle_exact); #endif @@ -8500,6 +8507,7 @@ static void values_to_cpudlg (HWND hDlg) CheckDlgButton (hDlg, IDC_COMPATIBLE, workprefs.cpu_compatible); CheckDlgButton (hDlg, IDC_COMPATIBLE24, workprefs.address_space_24); CheckDlgButton (hDlg, IDC_COMPATIBLE_FPU, workprefs.fpu_strict); + CheckDlgButton (hDlg, IDC_FPU_UNIMPLEMENTED, !workprefs.fpu_no_unimplemented); SendDlgItemMessage (hDlg, IDC_CPUIDLE, TBM_SETPOS, TRUE, workprefs.cpu_idle == 0 ? 0 : 12 - workprefs.cpu_idle / 15); cpu = (workprefs.cpu_model - 68000) / 10; if (cpu >= 5) @@ -8548,6 +8556,7 @@ static void values_from_cpudlg (HWND hDlg) workprefs.cpu_compatible = workprefs.cpu_cycle_exact | (ischecked (hDlg, IDC_COMPATIBLE) ? 1 : 0); workprefs.fpu_strict = ischecked (hDlg, IDC_COMPATIBLE_FPU) ? 1 : 0; + workprefs.fpu_no_unimplemented = ischecked (hDlg, IDC_FPU_UNIMPLEMENTED) ? 0 : 1; workprefs.address_space_24 = ischecked (hDlg, IDC_COMPATIBLE24) ? 1 : 0; workprefs.m68k_speed = ischecked (hDlg, IDC_CS_HOST) ? -1 : 0; workprefs.m68k_speed_throttle = SendMessage (GetDlgItem (hDlg, IDC_SPEED), TBM_GETPOS, 0, 0) * 100; @@ -13464,6 +13473,25 @@ static void input_qualifiers (HWND hDlg) name, custom, flags, -1, input_selected_sub_num); #endif } + +static void input_invert (void) +{ + int evt; + uae_u64 flags; + TCHAR name[256]; + TCHAR custom[MAX_DPATH]; + + if (input_selected_device < 0 || input_selected_widget < 0) + return; + evt = inputdevice_get_mapping (input_selected_device, input_selected_widget, + &flags, NULL, name, custom, input_selected_sub_num); + if (evt <= 0) + return; + flags ^= IDEV_MAPPED_INVERT; + inputdevice_set_mapping (input_selected_device, input_selected_widget, + name, custom, flags, -1, input_selected_sub_num); +} + static void input_toggletoggle (void) { int evt; @@ -13610,8 +13638,10 @@ static INT_PTR CALLBACK InputDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM } else if (column == 3 && entry == oldentry) { input_toggletoggle (); } else if (column == 4 && entry == oldentry) { + input_invert (); + } else if (column == 5 && entry == oldentry) { input_qualifiers (hDlg); - } else if (column == 5) { + } else if (column == 6) { input_selected_sub_num++; if (input_selected_sub_num >= MAX_INPUT_SUB_EVENT) input_selected_sub_num = 0; diff --git a/od-win32/winuae_msvc11/winuae_msvc.vcxproj b/od-win32/winuae_msvc11/winuae_msvc.vcxproj index c831dd70..58258992 100644 --- a/od-win32/winuae_msvc11/winuae_msvc.vcxproj +++ b/od-win32/winuae_msvc11/winuae_msvc.vcxproj @@ -187,7 +187,7 @@ %(AdditionalOptions) Disabled - ..\..\include;..\..;..\;..\resources;..\osdep;..\sounddep;..\..\prowizard\include;..\tun;%(AdditionalIncludeDirectories) + ..\..\include;..\..;..\;..\resources;..\osdep;..\sounddep;..\..\prowizard\include;..\..\slirp;%(AdditionalIncludeDirectories) WINVER=0x0500;_DEBUG;WIN32_IE=0x0700;WIN32;_CRT_SECURE_NO_WARNINGS;D3D_DEBUG_INFO;%(PreprocessorDefinitions) false false diff --git a/od-win32/winuae_msvc11/winuae_msvc.vcxproj.filters b/od-win32/winuae_msvc11/winuae_msvc.vcxproj.filters index 93a5175c..c1c7459d 100644 --- a/od-win32/winuae_msvc11/winuae_msvc.vcxproj.filters +++ b/od-win32/winuae_msvc11/winuae_msvc.vcxproj.filters @@ -44,6 +44,9 @@ {dd8bf794-572a-4d08-9cae-b280eb493e54} + + {7abef0b5-1d8e-4f43-baa6-ff61760bc330} + diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index b8386a6d..cad0528d 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,6 +1,37 @@ - restore only single input target to default. +- KS 1.3 OFS hardfile fix. Apparently 1.3 L:FastFileSystem does not support OFS. + Use ROM built-in FS if OFS partition and hardfile FileSys path is empty. (2.6.0) +- Added emulation of unimplemented FPU instruction exceptions. + New FPU "Unimplemented emu" option added to GUI: ticked = emulate all instructions + (old behavior), Unticked = instructions not emulated, unimplemented instructions + generate exceptions: + 6888x: S or D variants are not supported (FSADD, FDADD etc..), 68040/060 only. + 68040: usual removed instructions and FINT/FINTZ + 68060: usual removed instructions, FTRAP, FDBcc and FScc. FINT and FINTZ are back. + 68040/060 unimplemented datatype (packed decimal) is still emulated normally because + unimplemented datatype exception requires special pre and post FPU-only exceptions. + (This is not guaranteed to be perfect, not that easy to test fully) +- Hardware/software reset didn't reset SCSI emulation fully. +- A3000 KS 1.4 scsi driver wasn't fully compatible with SCSI emulation, write command + got stuck in never ending loop. Only reads worked. (WD SCSI chip is quite flexible, + it allows multiple and very different ways to send and process SCSI commands) +- Non-prefetch CPU mode RESET/JMP (An) combination detection did only check if it was + located in chip ram, it didn't check Z2 Fast. +- Input panel Invert option added. Button and key presses become releases and vice versa. + Joystick and mouse (if relative) movement is inverted. +- winuaeenforcer aros m68k debug.library segtracker-like support added. +- Added Tf debugger command that lists FileSystem.resource contents. +- Added system memory list dump option to debugger ('Tm') +- Merge >2M chip RAM with original chip ram pool instead of creating new one. +- Bitplane data (usually horizontally repeating) was visible if sprites were visible + in border regions. (2.6.0) +- Do not emulate CIA TOD bug if MMU emulation is enabled, workaround for Amix boot hang. + (Until real problem is found) + +2.6.0 + Beta 21 (RC2) - Ultimate Body Blows CD32 pad button problem fix. Hopefully this last minute update does not -- 2.47.3