From 01de2fc1f58f09b446afffac908eab71b918ab42 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Wed, 5 Sep 2007 20:31:04 +0300 Subject: [PATCH] imported winuaesrc1440b4.zip --- akiko.c | 51 ++- compemu_support.c | 6 +- expansion.c | 2 + filesys.asm | 514 +++++++++++++++++++--- filesys.c | 190 +++++--- filesys_bootrom.c | 827 ++++++++++++++++++----------------- gencomp.c | 6 +- newcpu.c | 30 +- od-win32/win32.h | 4 +- od-win32/win32_filesys.c | 2 +- od-win32/winuaechangelog.txt | 15 + 11 files changed, 1093 insertions(+), 554 deletions(-) diff --git a/akiko.c b/akiko.c index 7824fdcd..c982494a 100755 --- a/akiko.c +++ b/akiko.c @@ -365,7 +365,8 @@ static uae_u8 cdrom_command; static int cdrom_toc_entries; static int cdrom_toc_counter; static uae_u32 cdrom_toc_crc; -static uae_u8 cdrom_toc_buffer[MAX_TOC_ENTRIES*13]; +static uae_u8 cdrom_toc_buffer[MAX_TOC_ENTRIES * 13]; +static uae_u8 cdrom_toc_cd_buffer[4 + MAX_TOC_ENTRIES * 11]; static int cdrom_disk, cdrom_paused, cdrom_playing; static int cdrom_command_active; @@ -442,8 +443,37 @@ static void cdaudiostop (void) static uae_u32 last_play_end; static int cd_play_audio (uae_u32 startmsf, uae_u32 endmsf, int scan) { - if (endmsf >= lsn2msf (cdrom_leadout)) +#if 0 + uae_u8 *buf = cdrom_toc_cd_buffer; + uae_u8 *s; + uae_u32 addr; + int i, changed; + + changed = 0; + for (i = 0; i < cdrom_toc_entries; i++) { + s = buf + 4 + i * 11; + addr = (s[8] << 16) | (s[9] << 8) | (s[10] << 0); + if (s[3] > 0 && s[3] < 100 && addr >= startmsf) + break; + } + addr = lsn2msf (cdrom_leadout); + if (i + 1 < cdrom_toc_entries) { + s += 11; + addr =(s[8] << 16) | (s[9] << 8) | (s[10] << 0); + } + if (endmsf >= addr) { + endmsf = addr; + changed = 1; + } + if (endmsf >= lsn2msf (cdrom_leadout)) { endmsf = lsn2msf (cdrom_leadout); + changed = 1; + } +#if AKIKO_DEBUG_IO_CMD + if (changed) + write_log ("Adjusted from %06.6X to %06.6X\n", startmsf, endmsf); +#endif +#endif last_play_end = endmsf; return sys_command_cd_play (DF_IOCTL, unitnum, startmsf, endmsf, scan); } @@ -516,11 +546,15 @@ static int cdrom_toc (void) i /= 11; if (i > MAX_TOC_ENTRIES) return -1; + cdrom_toc_entries = i; memset (cdrom_toc_buffer, 0, MAX_TOC_ENTRIES * 13); + memcpy (cdrom_toc_cd_buffer, buf, 4 + cdrom_toc_entries * 11); cdrom_data_end = -1; - for (j = 0; j < i; j++) { + for (j = 0; j < cdrom_toc_entries; j++) { + uae_u32 addr; s = buf + 4 + j * 11; d = &cdrom_toc_buffer[j * 13]; + addr = msf2lsn ((s[8] << 16) | (s[9] << 8) | (s[10] << 0)); d[1] = (s[1] >> 4) | (s[1] << 4); d[3] = s[3] < 100 ? tobcd(s[3]) : s[3]; d[8] = tobcd (s[8]); @@ -529,11 +563,10 @@ static int cdrom_toc (void) if (s[3] == 1 && (s[1] & 0x0f) == 0x04) datatrack = 1; if (s[3] == 2) - secondtrack = msf2lsn ((s[8] << 16) | (s[9] << 8) | (s[10] << 0)); + secondtrack = addr; if (s[3] == 0xa2) - cdrom_leadout = msf2lsn ((s[8] << 16) | (s[9] << 8) | (s[10] << 0)); + cdrom_leadout = addr; } - cdrom_toc_entries = i; cdrom_toc_crc = get_crc32(cdrom_toc_buffer, cdrom_toc_entries * 13); if (datatrack) { if (secondtrack) @@ -748,7 +781,8 @@ static int cdrom_command_multi (void) else if (cdrom_command_buffer[7] & 0x08) scan = -1; #if AKIKO_DEBUG_IO_CMD - write_log ("PLAY FROM %06.6X to %06.6X SCAN=%d\n", seekpos, endpos, scan); + write_log ("PLAY FROM %06.6X (%d) to %06.6X (%d) SCAN=%d\n", + seekpos, msf2lsn (seekpos), endpos, msf2lsn (endpos), scan); #endif if (!cd_play_audio (seekpos, endpos, 0)) { cdrom_result_buffer[1] = CDS_ERROR; @@ -1020,7 +1054,8 @@ void AKIKO_hsync_handler (void) uae_u8 as = s[1]; if (as == AUDIO_STATUS_IN_PROGRESS) { int lsn = msf2lsn ((s[5 + 4] << 16) | (s[6 + 4] << 8) | (s[7 + 4] << 0)); - if (lsn >= cdrom_leadout - 75 || lsn >= msf2lsn(last_play_end) - 75) { + //write_log("%d %d (%d %d)\n", lsn, msf2lsn (last_play_end) - lsn, cdrom_leadout, msf2lsn (last_play_end)); + if (lsn >= cdrom_leadout - 100 || lsn >= msf2lsn(last_play_end) - 100) { set_status(CDSTATUS_DATA_AVAILABLE); cdrom_playing = 0; cdrom_result_buffer[1] = 0; diff --git a/compemu_support.c b/compemu_support.c index 9c05a1a9..e63189ef 100755 --- a/compemu_support.c +++ b/compemu_support.c @@ -5769,9 +5769,9 @@ void build_comp(void) int isjmp,isaddx,iscjmp; int lvl; - lvl = 5 - (currprefs.cpu_model - 68000) / 10; - if (lvl < 0) - lvl = 0; + lvl = (currprefs.cpu_model - 68000) / 10; + if (lvl > 4) + lvl--; if (table68k[opcode].mnemo == i_ILLG || table68k[opcode].clev > lvl) continue; diff --git a/expansion.c b/expansion.c index 02ce1e1e..471e4189 100755 --- a/expansion.c +++ b/expansion.c @@ -1075,6 +1075,8 @@ int need_uae_boot_rom(void) return 1; if (currprefs.gfxmem_size) return 1; + if (currprefs.chipmem_size > 2 * 1024 * 1024) + return 1; return 0; } diff --git a/filesys.asm b/filesys.asm index 247320c4..848ca477 100755 --- a/filesys.asm +++ b/filesys.asm @@ -13,6 +13,10 @@ ; 2006.03.04 Mousehack code integrated (TW) ; 2006.18.07 FileSystem.resource find routine access fault fixed (TW) ; 2007.03.30 mousehack do not start multiple times anymore (TW) +; 2007.06.15 uninitialized variable in memory type selection fixed (stupid me) (TW) +; 2007.08.09 started implementing removable drive support (TW) +; 2007.09.01 ACTION_EXAMINE_ALL (TW) +; 2007.09.05 fully filesystem device mounting on the fly (TW) AllocMem = -198 FreeMem = -210 @@ -76,18 +80,18 @@ filesys_init: FSIN_explibok: move.l d0,a4 move.l #PP_TOTAL,d0 - moveq #1,d1 ; MEMF_PUBLIC + move.l #$10001,d1 jsr AllocMem(a6) move.l d0,a3 ; param packet move.l a4,PP_EXPLIB(a3) moveq #0,d6 FSIN_init_units: - cmp.l $10c(a5),d6 + cmp.l $10c(a5),d6 bcc.b FSIN_units_ok move.l d6,-(sp) FSIN_nextsub: - moveq #1,d7 + moveq #1,d7 move.l a3,-(sp) move.l a3,a0 bsr.w make_dev @@ -139,7 +143,8 @@ FSIN_units_ok: ;FSIN_scandone: ; jsr -$007e(a6) ; Enable - ; add >2MB chip RAM to memory list + +filesys_dev_storeinfo ; add >2MB chip RAM to memory list move.w #$FF80,d0 bsr.w getrtbase jsr (a0) @@ -154,10 +159,61 @@ FSIN_units_ok: jsr -618(a6) ; AddMemList FSIN_chip_done + lea fstaskname(pc),a0 + lea fsmounttask(pc),a1 + moveq #10,d0 + bsr createtask + move.l d0,a1 + moveq #1,d1 + move.w #$FF48,d0 ; store task pointer + bsr.w getrtbase + jsr (a0) + movem.l (sp)+,d0-d7/a0-a6 general_ret: rts + ; this is getting ridiculous but I don't see any other solutions.. +fsmounttask +.fsm1 move.l 4.w,a6 + moveq #0,d0 + bset #17,d0 ; SIGBREAK_CTRL_D + jsr -$013e(a6) ;Wait + lea doslibname(pc),a1 + moveq #0,d0 + jsr -$0228(a6) ; OpenLibrary + tst.l d0 + beq.s .fsm1 + move.l d0,a6 + lea fsprocname(pc),a0 + move.l a0,d1 + moveq #15,d2 + lea mountproc(pc),a0 + move.l a0,d3 + lsr.l #2,d3 + move.l #8000,d4 + jsr -$08a(a6) ; CreateProc + move.l a6,a1 + move.l 4.w,a6 + jsr -$019e(a6); CloseLibrary + bra.s .fsm1 + + ; dummy process here because can't mount devices with ADNF_STARTPROC from task.. + ; (AddDosNode() internally calls GetDeviceProc() which accesses ExecBase->ThisTask->pr_GlobVec) + cnop 0,4 + dc.l 16 +mountproc + dc.l 0 + moveq #2,d1 + move.w #$FF48,d0 ; get new unit number + bsr.w getrtbase + jsr (a0) + move.l d0,d1 + bmi.s .out + bsr.w addfsonthefly +.out moveq #0,d0 + rts + exter_data: exter_server: movem.l a2,-(sp) @@ -175,7 +231,7 @@ EXTS_loop: moveq.l #2,d0 jsr (a0) cmp.w #1,d0 - blt.b EXTS_done + blt.w EXTS_done bgt.b EXTS_signal_reply jsr -366(a6) ; PutMsg bra.b EXTS_loop @@ -291,14 +347,12 @@ relocate: ;a0=pointer to executable, returns first segment in A0 sub.l a5,a5 ;prev segment moveq #0,d6 r15 move.l (a2),d2 ; hunk size (header) - lsl.l #2,d2 moveq #1,d1 - btst #30,d3 ; chip mem? + btst #30,d2 ; chip mem? beq.s r2 bset #1,d1 r2 bset #16,d1 - bclr #31,d3 - bclr #30,d3 + lsl.l #2,d2 move.l d2,d0 bne.s r17 clr.l (a2)+ ; empty hunk @@ -381,12 +435,7 @@ r13 r0 move.l d7,d0 movem.l (sp)+,d1-d7/a1-a6 rts -ree move.w #30000,d0 -re1 move.w #$f00,$dff180 - move.w #$00f,$dff180 - move.w #$0f0,$dff180 - dbf d0,re1 - moveq #0,d7 +ree moveq #0,d7 bra.s r0 fsres @@ -433,8 +482,253 @@ fsres4 move.l a0,d0 movem.l (sp)+,d1/a0-a2/a6 rts - -make_dev: ; IN: A0 param_packet, D6: unit_no, D7: boot, A4: expansionbase + +addvolumenode + movem.l d7/a6,-(sp) + move.l d0,d7 + tst.b 32+44(a3) + beq.s .end ;empty volume string = empty drive + move.l 160(a3),a6 + cmp.w #37, 20(a6) + bcs.s .prev37 + moveq #(1<<1)+(1<<3)+(1<<2),d1 ;LDF_WRITE | LDF_VOLUMES | LDF_DEVICES + jsr -$29A(a6) ;AttemptLockDosList + and.l #~1,d0 + beq.s .end + btst #0,d7 + beq.s .nvol + lea 32(a3),a0 + move.l a0,d1 + jsr -$2A6(a6) ;AddDosEntry (Volume) +.nvol btst #1,d7 + beq.s .ndev + move.l 180(a3),d1 + jsr -$2a6(a6) ;AddDosEntry (Device) +.ndev moveq #(1<<1)+(1<<3)+(1<<2),d1 ;LDF_WRITE | LDF_VOLUMES | LDF_DEVICES + jsr -$294(a6) ;UnLockDosList + bra.s .end +.prev37 move.l 4.w,a6 + jsr -$0084(a6) ; Forbid + move.l 160(a3),a0 + move.l 34(a0),a0 ; rootnode + add.l a0,a0 + add.l a0,a0 + move.l 24(a0),a0 ; dosinfo + add.l a0,a0 + add.l a0,a0 + lea 32(a3),a1 + move.l 4(a0),(a1) + move.l a1,d0 + lsr.l #2,d0 + move.l d0,4(a0) + jsr -$008a(a6) ;Permit +.end movem.l (sp)+,d7/a6 + rts +remvolumenode + movem.l d7/a2/a6,-(sp) + move.l d0,d7 + move.l 160(a3),a6 + cmp.w #37,20(a6) + bcs.s .prev37 + moveq #(1<<1)+(1<<3)+(1<<2),d1 ;LDF_WRITE | LDF_VOLUMES | LDF_DEVICES + jsr -$29A(a6) ;AttemptLockDosList + and.l #~1,d0 + beq.s .end + btst #0,d7 + beq.s .nvol + lea 32(a3),a0 + move.l a0,d1 + jsr -$2A0(a6) ;RemDosEntry (Volume) +.nvol btst #1,d7 + beq.s .ndev + move.l 180(a3),d1 + jsr -$2A0(a6) ;RemDosEntry (Device) +.ndev moveq #(1<<1)+(1<<3)+(1<<2),d1 ;LDF_WRITE | LDF_VOLUMES | LDF_DEVICES + jsr -$294(a6) ;UnLockDosList + bra.s .end +.prev37 move.l 4.w,a6 + jsr -$0084(a6) ; Forbid + move.l 160(a3),a0 + move.l 34(a0),a0 ; rootnode + add.l a0,a0 + add.l a0,a0 + move.l 24(a0),a0 ; dosinfo + add.l a0,a0 + add.l a0,a0 + lea 4(a0),a1 + lea 32(a3),a2 +.pr2 move.l 4(a0),d0 + beq.s .pr1 + add.l d0,d0 + add.l d0,d0 + cmp.l d0,a2 + beq.s .pr3 + move.l d0,a1 + move.l (a1),a0 + add.l a0,a0 + add.l a0,a0 + bra.s .pr2 +.pr3 move.l (a2),(a1) +.pr1 jsr -$008a(a6) ;Permit +.end movem.l (sp)+,d7/a2/a6 + rts + +diskinsertremove: + movem.l d2/a2/a6,-(sp) + moveq #22,d2 + sub.l d2,sp + move.l sp,a2 + move.w d2,d1 +.l1 clr.b -1(a2,d1.w) + subq.w #1,d1 + bne.s .l1 + move.l 4.w,a6 + moveq #15,d1 ;IECLASS_DISKREMOVED + tst.l d0 + beq.s .l2 + moveq #16,d1 ;IECLASS_DISKINSERTED +.l2 move.b d1,4(a2) ;ie_Class + move.w #$0800,8(a2); ie_Qualifier=IEQUALIFIER_MULTIBROADCAST + + move.l 164(a3),a1 + move.w #11,28(a1) ;IND_WRITEEVENT + move.l #22,36(a1) ;sizeof(struct InputEvent) + move.l a2,40(a1) + move.b #1,30(a1) ;IOF_QUICK + + move.l 168(a3),a1 + move.w #10,28(a1) ;TR_GETSYSTIME + move.b #1,30(a1) ;IOF_QUICK + jsr -$01c8(a6) ;DoIO + + move.l 168(a3),a1 + move.l 32(a1),14(a2) + move.l 36(a1),18(a2) + + move.l 164(a3),a1 + jsr -$01c8(a6) ;DoIO + + add.l d2,sp + movem.l (sp)+,d2/a2/a6 + rts + +dodiskchange + tst.b d0 + beq.s .eject + tst.b 32+44(a3) + bne.s .end + moveq #0,d0 +.dc2 + tst.b 32+45(a3,d0.w) + beq.s .dc1 + addq.b #1,d0 + bra.s .dc2 +.dc1 + move.b d0,32+44(a3) + beq.s .end + move.l d1,d0 + bsr.w addvolumenode + moveq #1,d0 + bsr.w diskinsertremove + bra.s .end +.eject + tst.b 32+44(a3) + beq.s .end + clr.b 32+44(a3) + move.l d1,d0 + bsr.w remvolumenode + moveq #0,d0 + bsr.w diskinsertremove +.end + rts + +action_inhibit + tst.l 20(a4) ;dp_Arg1 + beq.s .add + moveq #0,d0 + moveq #1,d1 + bsr dodiskchange + rts +.add + moveq #1,d0 + moveq #1,d1 + bsr dodiskchange + rts + +diskchange + tst.b 172(a3) + bmi.s .nodisk + moveq #1,d0 + moveq #1,d1 + bsr dodiskchange + rts +.nodisk + moveq #0,d0 + moveq #1,d1 + bsr dodiskchange + rts + + ; exall is complex, need to emulate eac_MatchString and/or eac_MatchFunc +action_exall + move.l 36(a4),a0 ; dp_Arg5, struct ExAllControl + tst.l 8(a0) ; eac_MatchString + bne.s .ex1 + tst.l 12(a0) ; eac_MatchFunc + bne.s .ex1 + rts ;nothing to do here +.ex1: movem.l d2-d7/a2-a6,-(sp) + move.l a0,a5 + move.l 24(a4),a2 ;dp_Arg2, ExAllData + move.l (a5),d7 ; eac_Entries +.ex4 tst.l d7 + beq.s .ex3 + move.l a2,d0 + beq.s .ex3 + moveq #0,d6 + move.l 8(a5),d1 ; MatchString + beq.s .ex5 + move.l 4(a2),d2 ; dir/file name + move.l 160(a3),a6 ; dosbase + jsr -$03cc(a6) ; MatchPatternNoCase + tst.l d0 + bne.s .ex5 + st d6 +.ex5 move.l 12(a5),d1 ; MatchFunc + beq.s .ex6 + move.l d1,a0 + move.l a2,a1 + move.l a2,-(sp) + lea 32(a4),a2 ; dp_Arg4, Type + pea .pop(pc) + move.l 8(a0),-(sp) + rts +.pop move.l (sp)+,a2 + tst.l d0 + bne.s .ex6 + st d6 +.ex6 tst.b d6 + beq.s .ex7 + ; need to delete current entry.. this is not really the proper way.. + move.l 4(a2),d0 ; pointer to filename (which is first address after structure) + sub.l a2,d0 ; copy this much data + tst.l (a2) ; eac_Next + beq.s .ex8 + move.l (a2),a0 + move.l a2,a1 +.ex9 move.l (a0)+,(a1)+ + subq.l #4,d1 + bpl.s .ex9 +.ex8 subq.l #1,(a5) ; eac_Entries + subq.l #1,d7 + bra.s .ex4 +.ex7 move.l (a2),a2 ; eac_Next + subq.l #1,d7 + bra.s .ex4 +.ex3 movem.l (sp)+,d2-d7/a2-a6 + rts + + +make_dev: ; IN: A0 param_packet, D6: unit_no, D7: b0=autoboot,b1=onthefly, A4: expansionbase bsr.w fsres move.l d0,PP_FSRES(a0) ; pointer to FileSystem.resource @@ -482,7 +776,7 @@ nordbfs1: move.w #$FF20,d0 ; record in ui.startup (filesys_dev_remember) bsr.w getrtbase jsr (a0) - bra.w dont_mount + bra.s dont_mount do_mount: move.l a4,a6 @@ -499,7 +793,7 @@ do_mount: move.l d0,16(a3) ; dn_Handler move.l d0,32(a3) ; dn_SegList -dont_mount +dont_mount: tst.l PP_FSPTR(a1) ; filesystem? beq.s nordbfs2 move.l PP_FSPTR(a1),a0 @@ -528,7 +822,7 @@ nordbfs2: bne.b MKDV_doboot MKDV_is_filesys: - move.l #4000,20(a3) ; dn_StackSize + move.l #6000,20(a3) ; dn_StackSize lea.l our_seglist(pc),a1 move.l a1,d0 lsr.l #2,d0 @@ -537,7 +831,7 @@ MKDV_is_filesys: move.l d0,36(a3) ; dn_GlobalVec MKDV_doboot: - tst.l d7 + btst #0,d7 beq.b MKDV_noboot move.l 4.w,a6 @@ -555,20 +849,47 @@ MKDV_doboot: move.l $104(a5),10(a1) ; filesys_configdev move.l a3,16(a1) ; devicenode lea.l 74(a4),a0 ; MountList - jmp -270(a6) ; Enqueue() + jsr -270(a6) ; Enqueue() + rts MKDV_noboot: move.l a3,a0 moveq #0,d1 move.l d1,a1 - moveq #-1,d0 + btst #1,d7 + beq.s .nob + moveq #1,d1 ; ADNF_STARTPROC +.nob moveq #-20,d0 move.l a4,a6 ; expansion base - jmp -150(a6) ; AddDosNode + jsr -150(a6) ; AddDosNode + rts + +addfsonthefly ; d1 = fs index + movem.l d2-d7/a2-a6,-(sp) + move.l d1,d6 + moveq #2,d7 + moveq #0,d5 + move.l 4.w,a6 + lea.l explibname(pc),a1 ; expansion lib name + moveq #0,d0 + jsr -552(a6) ; OpenLibrary + move.l d0,a4 + move.l #PP_TOTAL,d0 + move.l #$10001,d1 + jsr AllocMem(a6) + move.l d0,a0 ; param packet + move.l a4,PP_EXPLIB(a0) + movem.l a4/a6,-(sp) + bsr.w make_dev + movem.l (sp)+,a4/a6 + move.l a4,a1 + jsr -414(a6) ; CloseLibrary + movem.l (sp)+,d2-d7/a2-a6 + rts filesys_mainloop: move.l 4.w,a6 - moveq.l #0,d0 - move.l d0,a1 + sub.l a1,a1 jsr -294(a6) ; FindTask move.l d0,a0 lea.l $5c(a0),a5 ; pr_MsgPort @@ -584,9 +905,15 @@ filesys_mainloop: ; 4: command chain ; 8: second thread's lock chain ; 12: dummy message - ; 32: the volume (80+44+1 bytes) + ; 32: the volume (44+80+1 bytes) ; 157: mousehack started-flag - move.l #80+44+1+20+12+1,d0 + ; 160: dosbase + ; 164: input.device ioreq (disk inserted/removed input message) + ; 168: timer.device ioreq + ; 172: disk change from host + ; 176: my task + ; 180: device node + move.l #12+20+(80+44+1)+(1+3)+4+4+4+(1+3)+4+4,d0 move.l #$10001,d1 ; MEMF_PUBLIC | MEMF_CLEAR jsr AllocMem(a6) move.l d0,a3 @@ -594,6 +921,16 @@ filesys_mainloop: move.l d6,(a3) move.l d6,4(a3) move.l d6,8(a3) + move.l a2,160(a3) + + sub.l a1,a1 + jsr -294(a6) ; FindTask + move.l d0,176(a3) + + bsr.w allocinputdevice + move.l d0,164(a3) + bsr.w alloctimerdevice + move.l d0,168(a3) moveq.l #0,d5 ; No commands queued. @@ -608,7 +945,17 @@ filesys_mainloop: bsr.w getrtbase moveq.l #0,d0 jsr (a0) - + move.l d0,d2 + + moveq #1,d0 + bsr.w addvolumenode + + btst #1,d2 + beq.s .nonotif + moveq #1,d0 + bsr.w diskinsertremove +.nonotif + bsr.w mousehack_init bra.w FSML_Reply @@ -623,12 +970,26 @@ filesys_mainloop: FSML_loop: bsr.w mousehack_init - move.l a5,a0 - jsr -384(a6) ; WaitPort - move.l a5,a0 jsr -372(a6) ; GetMsg move.l d0,a4 + tst.l d0 + bne.s .msg + + moveq #0,d0 + move.b 15(a5),d1 ;mp_SigBit + bset d1,d0 + bset #17,d0 ; SIGBREAK_CTRL_D + jsr -$013e(a6) ;Wait +.msg + ; disk changed? + tst.b 172(a3) + beq.s .nodc + bsr.w diskchange + clr.b 172(a3) +.nodc + move.l a4,d0 + beq.s FSML_loop ; notify reply? cmp.w #38, 18(a4) @@ -652,7 +1013,7 @@ nonoti move.l a4,a1 moveq #38,d0 jsr FreeMem(a6) - bra.s FSML_loop + bra.w FSML_loop nonotif move.l 10(a4),d3 ; ln_Name @@ -720,6 +1081,14 @@ FSML_Reply: bra.w FSML_loop ReplyOne: + cmp.l #31,8(a4) ;ACTION_INHIBIT? + bne.s FSML_ReplyOne2 + bsr.w action_inhibit +FSML_ReplyOne2: + cmp.l #1033,8(a4) ;ACTION_EXAMINE_ALL + bne.s FSML_ReplyOne3 + bsr.w action_exall +FSML_ReplyOne3: move.l (a4),a1 ; dp_Link move.l 4(a4),a0 ; dp_Port move.l a5,4(a4) @@ -862,12 +1231,56 @@ createio: move.b #10,8(a0) ;NT_MESSAGE move.l d2,18(a0) move.l a2,14(a0) -.f movem.l (sp)+,d2/a2/a6 +.f tst.l d0 + movem.l (sp)+,d2/a2/a6 + rts + +allocinputdevice + movem.l a2/a6,-(sp) + move.l 4.w,a6 + bsr.w createport + bsr.w createio + beq.s .f + move.l d0,a1 + move.l d0,a2 + lea inp_dev(pc),a0 + moveq #0,d0 + moveq #0,d1 + jsr -$01bc(a6) ;OpenDevice + move.l d0,d1 + moveq #0,d0 + tst.l d1 + bne.s .f + move.l a2,d0 +.f tst.l d0 + movem.l (sp)+,a2/a6 + rts + +alloctimerdevice + movem.l a2/a6,-(sp) + move.l 4.w,a6 + bsr.w createport + bsr.w createio + beq.s .f + move.l d0,a2 + move.l d0,a1 + lea tim_dev(pc),a0 + moveq #0,d0 + moveq #0,d1 + jsr -$01bc(a6) ;OpenDevice + move.l d0,d1 + moveq #0,d0 + tst.l d1 + bne.s .f + move.l a2,d0 +.f tst.l d0 + movem.l (sp)+,a2/a6 rts createtask: - movem.l d2/d3/a2/a3/a6,-(sp) + movem.l d2/d3/d4/a2/a3/a6,-(sp) move.l 4,a6 + move.l d0,d4 move.l a0,d2 move.l a1,d3 move.l #92+2048,d0 @@ -877,6 +1290,7 @@ createtask: beq .f move.l d0,a2 move.b #1,8(a2) ;NT_TASK + move.b d4,9(a2) ; priority move.l d2,10(a2) lea 92(a2),a3 move.l a3,58(a2) @@ -887,7 +1301,7 @@ createtask: move.l d3,a2 sub.l a3,a3 jsr -$011a(a6) ;AddTask -.f movem.l (sp)+,d2/d3/a2/a3/a6 +.f movem.l (sp)+,d2/d3/d4/a2/a3/a6 rts mousehack_e: dc.w 0 @@ -910,6 +1324,7 @@ mousehack_init: bne.s .no lea mhname(pc),a0 lea mousehack_task(pc),a1 + moveq #5,d0 bsr createtask st 157(a3) ;tell native side that mousehack is active @@ -946,29 +1361,12 @@ mousehack_task: jsr AllocMem(a6) move.l d0,a5 - bsr.w createport - bsr.w createio + bsr.w allocinputdevice move.l d0,MH_IO(a5) - beq .f - move.l d0,a1 - lea inp_dev(pc),a0 - moveq #0,d0 - moveq #0,d1 - jsr -$01bc(a6) ;OpenDevice - tst.l d0 - bne .f - - bsr.w createport - bsr.w createio + beq.w .f + bsr.w alloctimerdevice move.l d0,MH_TM(a5) - beq .f - move.l d0,a1 - lea tim_dev(pc),a0 - moveq #0,d0 - moveq #0,d1 - jsr -$01bc(a6) ;OpenDevice - tst.l d0 - bne .f + beq.w .f lea MH_FOO(a5),a3 move.l a4,12(a3);task @@ -1057,6 +1455,8 @@ inp_dev: dc.b 'input.device',0 tim_dev: dc.b 'timer.device',0 mhname: dc.b 'UAE mouse hack',0 exter_name: dc.b 'UAE filesystem',0 +fstaskname: dc.b 'UAE fs automounter',0 +fsprocname: dc.b 'UAE fs automount process',0 doslibname: dc.b 'dos.library',0 intlibname: dc.b 'intuition.library',0 explibname: dc.b 'expansion.library',0 diff --git a/filesys.c b/filesys.c index 658a9866..4b7c03e2 100755 --- a/filesys.c +++ b/filesys.c @@ -91,6 +91,8 @@ static void aino_test_init (a_inode *aino) uaecptr filesys_initcode; static uae_u32 fsdevname, filesys_configdev; static int filesys_in_interrupt; +static uae_u32 mountertask; +static int automountunit = -1; #define FS_STARTUP 0 #define FS_GO_DOWN 1 @@ -253,8 +255,7 @@ char *filesys_createvolname (const char *volname, const char *rootdir, const cha { char *nvol = NULL; int i, archivehd; - char *p; - char tmp[10]; + char *p = NULL; archivehd = -1; if (my_existsfile(rootdir)) @@ -263,14 +264,15 @@ char *filesys_createvolname (const char *volname, const char *rootdir, const cha archivehd = 0; if ((!volname || strlen (volname) == 0) && rootdir && archivehd >= 0) { - p = rootdir; + p = my_strdup (rootdir); for (i = strlen (p) - 1; i >= 0; i--) { char c = p[i]; if (c == ':' || c == '/' || c == '\\') { if (i == strlen (p) - 1) continue; if (!strcmp (p + i, ":\\")) { - p = tmp; + xfree (p); + p = xmalloc (10); p[0] = rootdir[0]; p[1] = 0; i = 0; @@ -293,6 +295,7 @@ char *filesys_createvolname (const char *volname, const char *rootdir, const cha if (!nvol) nvol = my_strdup (""); stripsemicolon(nvol); + xfree (p); return nvol; } @@ -491,25 +494,10 @@ static void filesys_addexternals(void); static void initialize_mountinfo(void) { - int i, nr; - int haveempty, havevd; + int i; struct uaedev_config_info *uci; UnitInfo *uip = &mountinfo.ui[0]; - /* add 2 spares until new devices can be added on the fly */ - haveempty = havevd = 0; - for (i = 0; i < currprefs.mountitems; i++) { - int idx; - uci = &currprefs.mountconfig[i]; - if (uci->controller == HD_CONTROLLER_UAE) { - if (!uci->ishdf) { - havevd++; - if (uci->rootdir[0] == 0 && uci->volname[0] == 0) - haveempty++; - } - } - } - for (i = 0; i < currprefs.mountitems; i++) { int idx; uci = &currprefs.mountconfig[i]; @@ -540,14 +528,6 @@ static void initialize_mountinfo(void) } } filesys_addexternals(); - - if (havevd && !haveempty) { - for (i = 0; i < 2; i++) { - char devname[10]; - sprintf (devname, "RDH%d", i); - add_filesys_unit (devname, "", "", 0, 0, 0, 0, 0, 0, 0, 0, 0); - } - } } @@ -641,10 +621,13 @@ struct hardfiledata *get_hardfile_data (int nr) #define ACTION_FH_FROM_LOCK 1026 #define ACTION_COPY_DIR_FH 1030 #define ACTION_PARENT_FH 1031 -#define ACTION_EXAMINE_FH 1034 #define ACTION_EXAMINE_ALL 1033 +#define ACTION_EXAMINE_FH 1034 +#define ACTION_EXAMINE_ALL_END 1035 + #define ACTION_MAKE_LINK 1021 #define ACTION_READ_LINK 1024 + #define ACTION_FORMAT 1020 #define ACTION_IS_FILESYSTEM 1027 #define ACTION_ADD_NOTIFY 4097 @@ -978,6 +961,8 @@ int filesys_media_change (char *rootdir, int inserted) int nr = -1; char volname[MAX_DPATH], *volptr; + if (automountunit >= 0) + return -1; for (u = units; u; u = u->next) { if (is_hardfile (u->unit) == FILESYS_VIRTUAL) { ui = &mountinfo.ui[u->unit]; @@ -993,6 +978,7 @@ int filesys_media_change (char *rootdir, int inserted) if (nr >= 0 && !inserted) return filesys_eject (nr); if (inserted) { + char devname[10]; volname[0] = 0; target_get_volume_name(&mountinfo, rootdir, volname, MAX_DPATH, 1, 0); volptr = volname; @@ -1004,8 +990,19 @@ int filesys_media_change (char *rootdir, int inserted) return filesys_insert (nr, volptr, rootdir, -1, -1); return 0; } - /* new volume inserted and it was not previously mlunted? */ - return filesys_insert (-1, volptr, rootdir, 0, 0); + /* new volume inserted and it was not previously mounted? + * perhaps we have some empty device slots? */ + if (filesys_insert (-1, volptr, rootdir, 0, 0) > 0) + return 1; + /* nope, uh, need black magic now.. */ + sprintf (devname, "RDH%d", nr_units()); + nr = add_filesys_unit (devname, volptr, rootdir, 0, 0, 0, 0, 0, 0, NULL, 0, 0); + if (nr < 0) + return 0; + automountunit = nr; + uae_Signal (mountertask, 1 << 17); + /* poof */ + return 1; } return 0; } @@ -1856,6 +1853,31 @@ static Unit *startup_create_unit (UnitInfo *uinfo, int num) return unit; } +#ifdef UAE_FILESYS_THREADS +static void *filesys_thread (void *unit_v); +#endif +static void filesys_start_thread (UnitInfo *ui, int nr) +{ + ui->unit_pipe = 0; + ui->back_pipe = 0; + ui->reset_state = FS_STARTUP; + if (savestate_state != STATE_RESTORE) { + ui->startup = 0; + ui->self = 0; + } +#ifdef UAE_FILESYS_THREADS + if (is_hardfile (nr) == FILESYS_VIRTUAL) { + ui->unit_pipe = (smp_comm_pipe *)xmalloc (sizeof (smp_comm_pipe)); + ui->back_pipe = (smp_comm_pipe *)xmalloc (sizeof (smp_comm_pipe)); + init_comm_pipe (ui->unit_pipe, 100, 3); + init_comm_pipe (ui->back_pipe, 100, 1); + uae_start_thread ("filesys", filesys_thread, (void *)ui, &ui->tid); + } +#endif + if (savestate_state == STATE_RESTORE) + startup_update_unit (ui->self, ui); +} + static uae_u32 REGPARAM2 startup_handler (TrapContext *context) { /* Just got the startup packet. It's in A4. DosBase is in A2, @@ -1865,11 +1887,13 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) uaecptr dos_info = get_long (rootnode + 24) << 2; uaecptr pkt = m68k_dreg (&context->regs, 3); uaecptr arg2 = get_long (pkt + dp_Arg2); + uaecptr devnode; int i; char* devname = bstr1 (get_long (pkt + dp_Arg1) << 2); char* s; Unit *unit; UnitInfo *uinfo; + int late = 0; /* find UnitInfo with correct device name */ s = strchr (devname, ':'); @@ -1890,7 +1914,7 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) write_log ("Failed attempt to mount device '%s'\n", devname); put_long (pkt + dp_Res1, DOS_FALSE); put_long (pkt + dp_Res2, ERROR_DEVICE_NOT_MOUNTED); - return 1; + return 0; } if (!mountinfo.ui[i].wasisempty && !my_existsdir (mountinfo.ui[i].rootdir) && !my_existsfile (mountinfo.ui[i].rootdir)) @@ -1898,10 +1922,14 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) write_log ("Failed attempt to mount device '%s'\n", devname); put_long (pkt + dp_Res1, DOS_FALSE); put_long (pkt + dp_Res2, ERROR_DEVICE_NOT_MOUNTED); - return 1; + return 0; } uinfo = mountinfo.ui + i; + if (!uinfo->unit_pipe) { + late = 1; + filesys_start_thread (uinfo, i); + } unit = startup_create_unit (uinfo, i); unit->volflags = uinfo->volflags; @@ -1910,7 +1938,9 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) write_log ("FS: %s (flags=%08.8X) starting..\n", unit->ui.volname, unit->volflags); /* fill in our process in the device node */ - put_long ((get_long (pkt + dp_Arg3) << 2) + 8, unit->port); + devnode = get_long (pkt + dp_Arg3) << 2; + put_long (unit->volume + 180, devnode); + put_long (devnode + 8, unit->port); unit->dosbase = m68k_areg (&context->regs, 2); /* make new volume */ @@ -1926,7 +1956,7 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) put_long (unit->volume + 4, 2); /* Type = dt_volume */ put_long (unit->volume + 12, 0); /* Lock */ - put_long (unit->volume + 16, 3800); /* Creation Date */ + put_long (unit->volume + 16, 3800 + i); /* Creation Date */ put_long (unit->volume + 20, 0); put_long (unit->volume + 24, 0); put_long (unit->volume + 28, 0); /* lock list */ @@ -1943,7 +1973,7 @@ static uae_u32 REGPARAM2 startup_handler (TrapContext *context) put_long (pkt + dp_Res1, DOS_TRUE); - return 0; + return 1 | (late ? 2 : 0); } static void @@ -2589,7 +2619,7 @@ static ExAllKey *getexall (Unit *unit, int id) return &unit->exalls[i]; } } - } else { + } else if (id > 0) { for (i = 0; i < EXALLKEYS; i++) { if (unit->exalls[i].id == id) return &unit->exalls[i]; @@ -2739,6 +2769,36 @@ static int action_examine_all_do (Unit *unit, uaecptr lock, ExAllKey *eak, uaecp return 1; } +static int action_examine_all_end (Unit *unit, dpacket packet) +{ + uae_u32 id; + uae_u32 doserr = 0; + ExAllKey *eak; + uaecptr control = GET_PCK_ARG5 (packet); + + if (kickstart_version < 36) + return 0; + id = get_long (control + 4); + eak = getexall (unit, id); + if (!eak) { + write_log ("FILESYS: EXALL_END non-existing ID %d\n", id); + doserr = ERROR_OBJECT_WRONG_TYPE; + } else { + eak->id = 0; + fs_closedir (unit, eak->dirhandle); + xfree (eak->fn); + eak->fn = NULL; + eak->dirhandle = NULL; + } + if (doserr) { + PUT_PCK_RES1 (packet, DOS_FALSE); + PUT_PCK_RES2 (packet, doserr); + } else { + PUT_PCK_RES1 (packet, DOS_TRUE); + } + return 1; +} + static int action_examine_all (Unit *unit, dpacket packet) { uaecptr lock = GET_PCK_ARG1 (packet) << 2; @@ -2751,9 +2811,9 @@ static int action_examine_all (Unit *unit, dpacket packet) int isarch = unit->volflags & MYVOLUMEINFO_ARCHIVE; a_inode *base; void *d; - int id, ok, i; + int ok, i; uaecptr exp; - uae_u32 doserr = ERROR_NO_MORE_ENTRIES; + uae_u32 id, doserr = ERROR_NO_MORE_ENTRIES; ok = 0; @@ -2762,6 +2822,7 @@ static int action_examine_all (Unit *unit, dpacket packet) put_long (control + 0, 0); /* eac_Entries */ + /* EXAMINE ALL might use dos.library MatchPatternNoCase() which is >=36 */ if (kickstart_version < 36) return 0; @@ -2796,7 +2857,7 @@ static int action_examine_all (Unit *unit, dpacket packet) base = lookup_aino (unit, get_long (lock + 4)); if (base == 0) base = &unit->rootnode; - write_log("exall: '%s'\n", base->nname); + //write_log("exall: '%s'\n", base->nname); d = fs_opendir (unit, base->nname); if (!d) goto fail; @@ -2834,9 +2895,10 @@ fail: if (eak) { eak->id = 0; fs_closedir (unit, eak->dirhandle); + eak->dirhandle = NULL; + xfree (eak->fn); + eak->fn = NULL; } - xfree (eak->fn); - eak->fn = NULL; } return 1; } @@ -4181,8 +4243,7 @@ static uae_u32 REGPARAM2 exter_int_helper (TrapContext *context) * d0 = 2: Signal(), task in a1, signal set in d1 * d0 = 3: ReplyMsg(), message in a1 * d0 = 4: Cause(), interrupt in a1 - * d0 = 5: AllocMem(), size in d0, flags in d1, pointer to address at a0 - * d0 = 6: FreeMem(), memory in a1, size in d0 + * d0 = 5: Send FileNofication message, port in a0, notifystruct in a1 */ #ifdef SUPPORT_THREADS @@ -4321,6 +4382,7 @@ static int handle_packet (Unit *unit, dpacket pck) case ACTION_ADD_NOTIFY: action_add_notify (unit, pck); break; case ACTION_REMOVE_NOTIFY: action_remove_notify (unit, pck); break; case ACTION_EXAMINE_ALL: return action_examine_all (unit, pck); break; + case ACTION_EXAMINE_ALL_END: return action_examine_all_end (unit, pck); break; /* unsupported packets */ case ACTION_LOCK_RECORD: @@ -4454,24 +4516,7 @@ void filesys_start_threads (void) UnitInfo *ui = &mountinfo.ui[i]; if (!ui->open) continue; - ui->unit_pipe = 0; - ui->back_pipe = 0; - ui->reset_state = FS_STARTUP; - if (savestate_state != STATE_RESTORE) { - ui->startup = 0; - ui->self = 0; - } -#ifdef UAE_FILESYS_THREADS - if (is_hardfile (i) == FILESYS_VIRTUAL) { - ui->unit_pipe = (smp_comm_pipe *)xmalloc (sizeof (smp_comm_pipe)); - ui->back_pipe = (smp_comm_pipe *)xmalloc (sizeof (smp_comm_pipe)); - init_comm_pipe (ui->unit_pipe, 100, 3); - init_comm_pipe (ui->back_pipe, 100, 1); - uae_start_thread ("filesys", filesys_thread, (void *)ui, &ui->tid); - } -#endif - if (savestate_state == STATE_RESTORE) - startup_update_unit (ui->self, ui); + filesys_start_thread (ui, i); } } @@ -4681,6 +4726,23 @@ static uae_u32 REGPARAM2 filesys_dev_bootfilesys (TrapContext *context) return 0; } +static uae_u32 REGPARAM2 filesys_init_storeinfo (TrapContext *context) +{ + int ret = -1; + switch (m68k_dreg (&context->regs, 1)) + { + case 1: + mountertask = m68k_areg (&context->regs, 1); + break; + case 2: + ret = automountunit; + automountunit = -1; + break; + return 0; + } + return ret; +} + /* Remember a pointer AmigaOS gave us so we can later use it to identify * which unit a given startup message belongs to. */ static uae_u32 REGPARAM2 filesys_dev_remember (TrapContext *context) @@ -5185,6 +5247,10 @@ void filesys_install (void) calltrap (deftrap2 (startup_handler, 0, "startup_handler")); dw (RTS); + org (RTAREA_BASE + 0xFF48); + calltrap (deftrap2 (filesys_init_storeinfo, 0, "filesys_init_storeinfo")); + dw (RTS); + org (RTAREA_BASE + 0xFF50); calltrap (deftrap2 (exter_int_helper, 0, "exter_int_helper")); dw (RTS); diff --git a/filesys_bootrom.c b/filesys_bootrom.c index 16608031..d70efff7 100755 --- a/filesys_bootrom.c +++ b/filesys_bootrom.c @@ -1,418 +1,457 @@ db(0x00); db(0x00); db(0x00); db(0x10); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x60); db(0x00); db(0x07); db(0x3e); db(0x00); db(0x00); db(0x05); db(0xfa); - db(0x00); db(0x00); db(0x00); db(0x34); db(0x00); db(0x00); db(0x00); db(0xd4); - db(0x00); db(0x00); db(0x00); db(0x20); db(0x00); db(0x00); db(0x01); db(0x8e); - db(0x00); db(0x00); db(0x09); db(0x5e); db(0x00); db(0x00); db(0x0a); db(0xec); - db(0x43); db(0xfa); db(0x0c); db(0x94); db(0x4e); db(0xae); db(0xff); db(0xa0); + db(0x60); db(0x00); db(0x08); db(0x34); db(0x00); db(0x00); db(0x06); db(0x9c); + db(0x00); db(0x00); db(0x00); db(0x34); db(0x00); db(0x00); db(0x01); db(0x58); + db(0x00); db(0x00); db(0x00); db(0x20); db(0x00); db(0x00); db(0x02); db(0x14); + db(0x00); db(0x00); db(0x0a); db(0x64); db(0x00); db(0x00); db(0x0b); db(0xf8); + db(0x43); db(0xfa); db(0x0d); db(0xce); 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(0xff); db(0xfe); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); db(0xff); db(0xfc); - db(0x61); db(0x00); db(0x09); db(0x0c); db(0x2a); db(0x50); db(0x43); db(0xfa); - db(0x0c); db(0x8c); db(0x70); db(0x24); db(0x7a); db(0x00); db(0x4e); db(0xae); + db(0x61); db(0x00); db(0x0a); db(0x12); db(0x2a); db(0x50); db(0x43); db(0xfa); + db(0x0d); db(0xc6); db(0x70); db(0x24); db(0x7a); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x66); db(0x0c); db(0x43); db(0xfa); - db(0x0c); db(0x7c); db(0x70); db(0x00); db(0x7a); db(0x01); db(0x4e); db(0xae); + db(0x0d); db(0xb6); db(0x70); db(0x00); db(0x7a); db(0x01); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); db(0x20); db(0x3c); db(0x00); db(0x00); - db(0x02); db(0x2c); db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x26); db(0x40); db(0x27); db(0x4c); db(0x01); db(0x9c); db(0x7c); db(0x00); - db(0xbc); db(0xad); db(0x01); db(0x0c); db(0x64); db(0x24); db(0x2f); db(0x06); - db(0x7e); db(0x01); db(0x2f); db(0x0b); db(0x20); db(0x4b); db(0x61); db(0x00); - db(0x05); db(0x72); 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(0xe4); db(0x2c); db(0x1f); db(0x52); db(0x46); - db(0x60); db(0xd6); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x22); db(0x4c); - db(0x4e); db(0xae); db(0xfe); db(0x62); db(0x30); db(0x3c); db(0xff); db(0x80); - db(0x61); db(0x00); db(0x08); db(0x9c); db(0x4e); db(0x90); db(0x72); db(0x03); - db(0x74); db(0xf6); db(0x20); db(0x7c); db(0x00); db(0x20); db(0x00); db(0x00); - db(0x90); db(0x88); db(0x65); db(0x0a); db(0x67); db(0x08); db(0x78); db(0x00); - db(0x22); db(0x44); db(0x4e); db(0xae); db(0xfd); db(0x96); db(0x4c); db(0xdf); - db(0x7f); db(0xff); 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(0x08); db(0x70); - db(0x70); db(0x00); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x00); - db(0x00); db(0xa0); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x30); db(0x3c); - db(0xff); db(0x50); db(0x61); db(0x00); db(0x08); db(0x5a); db(0x70); db(0x02); - db(0x4e); db(0x90); db(0x0c); db(0x40); db(0x00); db(0x01); db(0x6d); db(0x7a); - db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0xe6); - 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(0xd8); db(0x0c); db(0x40); - db(0x00); db(0x03); db(0x6e); db(0x06); db(0x4e); db(0xae); db(0xfe); db(0x86); - db(0x60); db(0xcc); db(0x0c); db(0x40); db(0x00); db(0x04); db(0x6e); db(0x06); - db(0x4e); db(0xae); db(0xff); db(0x4c); db(0x60); db(0xc0); 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(0x76); db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); - db(0x07); db(0xce); db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); - db(0x4c); db(0xdf); db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0xc0); db(0xc0); db(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(0x0b); db(0x05); db(0x23); db(0x48); db(0x00); db(0x0a); - db(0x41); db(0xfa); db(0xff); db(0x2a); db(0x23); db(0x48); db(0x00); db(0x0e); - db(0x41); db(0xfa); db(0xff); db(0x22); 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(0x4c); db(0xdf); db(0x03); db(0x03); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); - db(0x00); db(0x00); db(0x00); db(0xbe); db(0x22); db(0x3c); db(0x00); db(0x01); - db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); - db(0x70); db(0x00); db(0x43); db(0xeb); db(0x01); db(0xa0); db(0x11); db(0xb1); - db(0x00); db(0x00); db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); - db(0x00); db(0x8c); db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); - db(0x21); db(0x40); db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); - db(0x0a); db(0x9f); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); - db(0x01); db(0x98); db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); - db(0xff); db(0x10); db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); - db(0x48); db(0xe7); db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x24); db(0x48); db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3); - db(0x66); db(0x00); db(0x00); db(0xe4); db(0x50); db(0x8a); db(0x2e); db(0x2a); - db(0x00); db(0x04); db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87); - db(0x26); db(0x4a); db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80); - db(0xd7); db(0xc0); db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00); - db(0x24); db(0x12); db(0x72); db(0x01); db(0x08); db(0x02); db(0x00); db(0x1e); - db(0x67); db(0x04); db(0x08); db(0xc1); db(0x00); db(0x01); db(0x08); db(0xc1); - db(0x00); db(0x10); db(0xe5); db(0x8a); db(0x20); db(0x02); db(0x66); db(0x04); - db(0x42); db(0x9a); db(0x60); db(0x1e); db(0x50); db(0x80); db(0x4e); db(0xae); - db(0xff); db(0x3a); db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0); - db(0x20); db(0x40); db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d); - db(0x67); db(0x06); db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80); - db(0x2a); db(0x48); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xc0); - db(0x7c); db(0x00); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); - db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b); - db(0x28); db(0x1b); db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00); - db(0x03); db(0xe9); db(0x67); db(0x08); db(0x0c); db(0x83); db(0x00); db(0x00); - db(0x03); db(0xea); db(0x66); db(0x0c); db(0x20); db(0x04); db(0x4a); db(0x80); - db(0x67); db(0x0e); db(0x10); db(0xdb); db(0x53); db(0x80); db(0x60); db(0xf6); - db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xeb); db(0x66); db(0x4e); - db(0x26); db(0x1b); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xec); - db(0x66); db(0x28); db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); - db(0x20); db(0x74); db(0x18); db(0x00); db(0x58); db(0x88); db(0x20); db(0x1b); - db(0x67); db(0xe6); db(0x22); db(0x1b); db(0xd2); db(0x81); db(0xd2); db(0x81); - db(0x26); db(0x34); db(0x18); db(0x00); db(0x58); db(0x83); db(0x24); db(0x1b); - db(0xd7); db(0xb0); db(0x28); db(0x00); db(0x53); db(0x80); db(0x66); db(0xf6); - db(0x60); db(0xe4); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xf2); - db(0x66); db(0x14); db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0x00); - db(0xff); db(0x8a); db(0x7e); db(0x01); db(0x20); db(0x54); db(0x20); db(0x07); - db(0x4c); db(0xdf); db(0x7e); db(0xfe); db(0x4e); db(0x75); db(0x30); db(0x3c); - db(0x75); db(0x30); db(0x33); db(0xfc); db(0x0f); db(0x00); db(0x00); db(0xdf); - db(0xf1); db(0x80); db(0x33); db(0xfc); db(0x00); db(0x0f); db(0x00); db(0xdf); - db(0xf1); db(0x80); db(0x33); db(0xfc); db(0x00); db(0xf0); db(0x00); db(0xdf); - db(0xf1); db(0x80); db(0x51); db(0xc8); db(0xff); db(0xe6); db(0x7e); db(0x00); - db(0x60); db(0xd4); 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(0x09); db(0x94); 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(0x02); db(0x2c); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x26); db(0x40); db(0x27); db(0x4c); + db(0x01); db(0x9c); db(0x7c); db(0x00); db(0xbc); db(0xad); db(0x01); db(0x0c); + db(0x64); db(0x24); db(0x2f); db(0x06); db(0x7e); db(0x01); db(0x2f); db(0x0b); + db(0x20); db(0x4b); db(0x61); db(0x00); db(0x06); db(0x10); 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(0xe4); + db(0x2c); db(0x1f); db(0x52); db(0x46); db(0x60); db(0xd6); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); + db(0x30); db(0x3c); db(0xff); db(0x80); db(0x61); db(0x00); db(0x09); db(0x9e); + db(0x4e); db(0x90); db(0x72); db(0x03); db(0x74); db(0xf6); db(0x20); db(0x7c); + db(0x00); db(0x20); db(0x00); db(0x00); db(0x90); db(0x88); db(0x65); db(0x0a); + db(0x67); db(0x08); db(0x78); db(0x00); db(0x22); db(0x44); db(0x4e); db(0xae); + db(0xfd); db(0x96); db(0x41); db(0xfa); db(0x0c); db(0xf0); db(0x43); db(0xfa); + db(0x00); db(0x1c); db(0x70); db(0x0a); db(0x61); db(0x00); db(0x0a); db(0xbe); + db(0x22); db(0x40); db(0x72); db(0x01); db(0x30); db(0x3c); db(0xff); db(0x48); + db(0x61); db(0x00); db(0x09); db(0x6a); db(0x4e); db(0x90); db(0x4c); db(0xdf); + db(0x7f); db(0xff); db(0x4e); db(0x75); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x70); db(0x00); db(0x08); db(0xc0); db(0x00); db(0x11); db(0x4e); db(0xae); + db(0xfe); db(0xc2); db(0x43); db(0xfa); db(0x0c); db(0xec); db(0x70); db(0x00); + db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x4a); db(0x80); db(0x67); db(0xe4); + db(0x2c); db(0x40); db(0x41); db(0xfa); db(0x0c); db(0xc3); db(0x22); db(0x08); + db(0x74); db(0x0f); db(0x41); db(0xfa); db(0x00); db(0x20); db(0x26); db(0x08); + db(0xe4); db(0x8b); db(0x28); db(0x3c); db(0x00); db(0x00); db(0x1f); db(0x40); + 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(0x60); db(0xbc); + 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(0x09); db(0x0c); db(0x4e); db(0x90); db(0x22); db(0x00); db(0x6b); db(0x04); + db(0x61); db(0x00); db(0x06); db(0x9c); 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(0x08); db(0xf2); 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(0x08); db(0xdc); 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(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x08); - db(0x00); db(0x08); db(0x41); db(0xfa); db(0x09); db(0x6a); db(0x25); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x09); db(0x23); 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(0x2f); db(0x0e); db(0x4a); db(0x2b); db(0x00); db(0x4c); - db(0x67); db(0x5c); db(0x2c); db(0x6b); db(0x00); db(0xa0); db(0x0c); db(0x6e); - db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x20); db(0x72); db(0x0a); - db(0x4e); db(0xae); db(0xfd); db(0x66); db(0x02); db(0x80); db(0xff); db(0xff); - db(0xff); db(0xfe); db(0x67); db(0x42); db(0x41); db(0xeb); db(0x00); db(0x20); - db(0x22); db(0x08); db(0x4e); db(0xae); db(0xfd); db(0x5a); db(0x72); db(0x0a); - db(0x4e); db(0xae); db(0xfd); db(0x6c); db(0x60); db(0x30); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x20); db(0x6b); - db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); db(0xd1); db(0xc8); - db(0xd1); db(0xc8); db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); - db(0xd1); db(0xc8); db(0x43); db(0xeb); db(0x00); db(0x20); 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(0xae); db(0xff); db(0x76); db(0x2c); db(0x5f); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x6b); - db(0x00); db(0xa0); db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); - db(0x65); db(0x20); db(0x72); db(0x0a); db(0x4e); db(0xae); db(0xfd); db(0x66); - db(0x02); db(0x80); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x54); + 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(0x08); db(0x4e); + db(0x70); db(0x04); db(0x4e); db(0x90); db(0x70); db(0x01); db(0x4c); db(0xdf); + db(0x04); db(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0xc0); db(0xc0); + db(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(0x0b); db(0x8d); db(0x23); db(0x48); db(0x00); db(0x0a); db(0x41); db(0xfa); + db(0xff); db(0x28); db(0x23); db(0x48); db(0x00); db(0x0e); db(0x41); db(0xfa); + db(0xff); db(0x20); 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(0x4c); db(0xdf); db(0x03); db(0x03); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0xc0); db(0xf2); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x24); db(0x48); db(0x26); db(0x49); db(0x20); db(0x3c); db(0x00); db(0x00); + db(0x00); db(0xbe); db(0x22); db(0x3c); db(0x00); db(0x01); db(0x00); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x20); db(0x40); db(0x70); db(0x00); + db(0x43); db(0xeb); db(0x01); db(0xa0); db(0x11); db(0xb1); db(0x00); db(0x00); + db(0x00); db(0x0e); db(0x52); db(0x40); db(0x0c); db(0x40); db(0x00); db(0x8c); + db(0x66); db(0xf2); db(0x20); db(0x0a); db(0xe4); db(0x88); db(0x21); db(0x40); + db(0x00); db(0x36); db(0x22); db(0x48); db(0x41); db(0xfa); db(0x0b); db(0x27); + db(0x23); db(0x48); db(0x00); db(0x0a); db(0x20); db(0x6b); db(0x01); db(0x98); + db(0x41); db(0xe8); db(0x00); db(0x12); db(0x4e); db(0xae); db(0xff); db(0x10); + db(0x4c); db(0xdf); db(0x4f); db(0x03); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x7f); db(0x7e); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x24); db(0x48); + db(0x0c); db(0x9a); db(0x00); db(0x00); db(0x03); db(0xf3); db(0x66); db(0x00); + db(0x00); db(0xe4); db(0x50); db(0x8a); db(0x2e); db(0x2a); db(0x00); db(0x04); + db(0x9e); db(0x92); db(0x50); db(0x8a); db(0x52); db(0x87); db(0x26); db(0x4a); + db(0x20); db(0x07); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xd7); db(0xc0); + db(0x28); db(0x4a); db(0x9b); db(0xcd); db(0x7c); db(0x00); db(0x24); db(0x12); + db(0x72); db(0x01); db(0x08); db(0x02); db(0x00); db(0x1e); db(0x67); db(0x04); + db(0x08); db(0xc1); db(0x00); db(0x01); db(0x08); db(0xc1); db(0x00); db(0x10); + db(0xe5); db(0x8a); db(0x20); db(0x02); db(0x66); db(0x04); db(0x42); db(0x9a); + db(0x60); db(0x1e); db(0x50); db(0x80); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x4a); db(0x80); db(0x67); db(0x00); db(0x00); db(0xa0); db(0x20); db(0x40); + db(0x20); db(0xc2); db(0x24); db(0xc8); db(0x22); db(0x0d); db(0x67); db(0x06); + db(0x20); db(0x08); db(0xe4); db(0x88); db(0x2a); db(0x80); db(0x2a); db(0x48); + db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0xc0); db(0x7c); db(0x00); + db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); + db(0x18); db(0x00); db(0x58); db(0x88); db(0x26); db(0x1b); db(0x28); db(0x1b); + db(0xe5); db(0x8c); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xe9); + db(0x67); db(0x08); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xea); + db(0x66); db(0x0c); db(0x20); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x0e); + db(0x10); db(0xdb); db(0x53); db(0x80); db(0x60); db(0xf6); db(0x0c); db(0x83); + db(0x00); db(0x00); db(0x03); db(0xeb); db(0x66); db(0x4e); db(0x26); db(0x1b); + db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xec); db(0x66); db(0x28); + db(0x22); db(0x06); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x20); db(0x74); + db(0x18); db(0x00); db(0x58); db(0x88); db(0x20); db(0x1b); db(0x67); db(0xe6); + db(0x22); db(0x1b); db(0xd2); db(0x81); db(0xd2); db(0x81); db(0x26); db(0x34); + db(0x18); db(0x00); db(0x58); db(0x83); db(0x24); db(0x1b); db(0xd7); db(0xb0); + db(0x28); db(0x00); db(0x53); db(0x80); db(0x66); db(0xf6); db(0x60); db(0xe4); + db(0x0c); db(0x83); db(0x00); db(0x00); db(0x03); db(0xf2); db(0x66); db(0x14); + db(0x52); db(0x86); db(0xbe); db(0x86); db(0x66); db(0x00); db(0xff); db(0x8a); + db(0x7e); db(0x01); db(0x20); db(0x54); db(0x20); db(0x07); db(0x4c); db(0xdf); + db(0x7e); db(0xfe); db(0x4e); db(0x75); db(0x7e); db(0x00); db(0x60); db(0xf4); + db(0x48); db(0xe7); db(0x40); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x41); db(0xee); db(0x01); db(0x50); db(0x20); db(0x50); db(0x4a); db(0x90); + db(0x67); db(0x1a); db(0x22); db(0x68); db(0x00); db(0x0a); db(0x45); db(0xfa); + db(0x0a); db(0x68); 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(0x0a); db(0x3e); db(0x25); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x09); db(0xcb); 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(0x70); db(0x2c); db(0x6b); db(0x00); db(0xa0); + db(0x0c); db(0x6e); db(0x00); db(0x25); db(0x00); db(0x14); db(0x65); db(0x34); + 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(0x56); 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(0x08); 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(0x30); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x4e); db(0xae); db(0xff); db(0x7c); db(0x20); db(0x6b); db(0x00); db(0xa0); + db(0x20); db(0x68); db(0x00); db(0x22); db(0xd1); db(0xc8); db(0xd1); db(0xc8); + db(0x20); db(0x68); db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); + db(0x43); db(0xeb); db(0x00); db(0x20); 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(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(0x34); 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(0x68); 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(0x72); db(0x0a); db(0x4e); db(0xae); db(0xfd); db(0x6c); - db(0x60); db(0x42); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); - db(0xff); db(0x7c); db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); - db(0x00); db(0x22); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x20); db(0x68); - db(0x00); db(0x18); db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x43); db(0xe8); - db(0x00); db(0x04); db(0x45); db(0xeb); db(0x00); db(0x20); db(0x20); db(0x28); - db(0x00); db(0x04); db(0x67); db(0x14); db(0xd0); db(0x80); db(0xd0); db(0x80); - db(0xb5); db(0xc0); db(0x67); db(0x0a); db(0x22); db(0x40); db(0x20); db(0x51); - db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x60); db(0xe8); db(0x22); db(0x92); - db(0x4e); db(0xae); db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x44); db(0x00); - 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(0x24); - db(0x4a); db(0x2b); db(0x00); db(0x4c); db(0x66); db(0x32); 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(0x20); - db(0x61); db(0x00); db(0xfe); db(0x88); db(0x70); db(0x01); db(0x61); db(0x00); - db(0xff); db(0x62); db(0x60); db(0x14); db(0x4a); db(0x2b); db(0x00); db(0x4c); - db(0x67); db(0x0e); db(0x42); db(0x2b); db(0x00); db(0x4c); db(0x61); db(0x00); - db(0xfe); db(0xda); db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0x4c); - db(0x4e); db(0x75); db(0x4a); db(0xac); db(0x00); db(0x14); db(0x67); db(0x08); - db(0x70); db(0x00); db(0x61); db(0x00); db(0xff); db(0xb8); db(0x4e); db(0x75); - db(0x70); db(0x01); db(0x61); db(0x00); db(0xff); db(0xb0); db(0x4e); db(0x75); - db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x6b); db(0x08); db(0x70); db(0x01); - db(0x61); db(0x00); db(0xff); db(0xa2); db(0x4e); db(0x75); db(0x70); db(0x00); - db(0x61); db(0x00); db(0xff); db(0x9a); db(0x4e); db(0x75); db(0x20); db(0x6c); - db(0x00); db(0x24); db(0x4a); db(0xa8); db(0x00); db(0x08); db(0x66); db(0x08); - db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x02); 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(0x4a); db(0x87); db(0x67); db(0x64); - db(0x20); db(0x0a); db(0x67); db(0x60); 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(0x1a); db(0x20); db(0x2a); db(0x00); db(0x04); - db(0x90); db(0x8a); db(0x4a); db(0x92); db(0x67); db(0x0a); db(0x20); db(0x52); - db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x81); db(0x6a); db(0xfa); - db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x9e); db(0x24); db(0x52); - db(0x53); db(0x87); db(0x60); db(0x98); db(0x4c); db(0xdf); db(0x7c); db(0xfc); - db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfd); db(0x3e); db(0x21); db(0x40); - db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); db(0xff); db(0xfc); - db(0x61); db(0x00); db(0x03); db(0x44); db(0x2a); db(0x50); db(0x30); db(0x3c); - db(0xff); db(0x28); db(0x61); db(0x00); db(0x03); db(0x3a); 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(0x83); - db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x00); db(0xfa); db(0xa4); - db(0x0c); db(0x83); db(0x00); db(0x00); db(0x00); db(0x02); db(0x67); db(0x0c); - db(0xc0); db(0x85); db(0x67); db(0x08); db(0x4a); db(0xa8); db(0x01); db(0x90); - db(0x67); db(0x00); db(0xfa); db(0x90); db(0x20); db(0x28); db(0x01); db(0x90); - db(0x67); 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(0x10); - db(0x22); db(0x48); db(0x30); db(0x3c); db(0xff); db(0x20); db(0x61); db(0x00); - db(0x02); db(0xe6); db(0x4e); db(0x90); db(0x60); db(0x00); db(0x00); db(0x28); + db(0xfd); db(0x60); db(0x08); db(0x07); db(0x00); db(0x01); db(0x67); db(0x08); + 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(0x42); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x7c); + db(0x20); db(0x6b); db(0x00); db(0xa0); db(0x20); db(0x68); db(0x00); db(0x22); + db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x20); db(0x68); db(0x00); db(0x18); + db(0xd1); db(0xc8); db(0xd1); db(0xc8); db(0x43); db(0xe8); db(0x00); db(0x04); + db(0x45); db(0xeb); db(0x00); db(0x20); db(0x20); db(0x28); db(0x00); db(0x04); + db(0x67); db(0x14); db(0xd0); db(0x80); db(0xd0); db(0x80); db(0xb5); db(0xc0); + db(0x67); db(0x0a); db(0x22); db(0x40); db(0x20); db(0x51); db(0xd1); db(0xc8); + db(0xd1); db(0xc8); db(0x60); db(0xe8); db(0x22); db(0x92); db(0x4e); db(0xae); + db(0xff); db(0x76); db(0x4c); db(0xdf); db(0x44); db(0x80); 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(0xfe); db(0x56); 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(0xc0); 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(0x01); + db(0x61); db(0x00); db(0xff); db(0xa8); db(0x4e); db(0x75); db(0x4a); db(0x2b); + db(0x00); db(0xac); db(0x6b); db(0x0a); db(0x70); db(0x01); db(0x72); db(0x01); + db(0x61); db(0x00); db(0xff); db(0x98); db(0x4e); db(0x75); db(0x70); db(0x00); + db(0x72); db(0x01); db(0x61); db(0x00); db(0xff); db(0x8e); db(0x4e); db(0x75); + db(0x20); db(0x6c); db(0x00); db(0x24); db(0x4a); db(0xa8); db(0x00); db(0x08); + db(0x66); db(0x08); db(0x4a); db(0xa8); db(0x00); db(0x0c); db(0x66); db(0x02); + 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(0x4a); db(0x87); + db(0x67); db(0x64); db(0x20); db(0x0a); db(0x67); db(0x60); 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(0x1a); db(0x20); db(0x2a); + db(0x00); db(0x04); db(0x90); db(0x8a); db(0x4a); db(0x92); db(0x67); db(0x0a); + db(0x20); db(0x52); db(0x22); db(0x4a); db(0x22); db(0xd8); db(0x59); db(0x81); + db(0x6a); db(0xfa); db(0x53); db(0x95); db(0x53); db(0x87); db(0x60); db(0x9e); + db(0x24); db(0x52); db(0x53); db(0x87); db(0x60); db(0x98); db(0x4c); db(0xdf); + db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x61); db(0x00); db(0xfd); db(0x02); + db(0x21); db(0x40); db(0x01); db(0x98); db(0x2f); db(0x08); db(0x30); db(0x3c); + db(0xff); db(0xfc); db(0x61); db(0x00); db(0x03); db(0xa8); db(0x2a); db(0x50); + db(0x30); db(0x3c); db(0xff); db(0x28); db(0x61); db(0x00); db(0x03); db(0x9e); + 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(0x83); db(0xff); db(0xff); db(0xff); db(0xfe); db(0x67); db(0x00); + db(0xfa); db(0x22); db(0x0c); db(0x83); db(0x00); db(0x00); db(0x00); db(0x02); + db(0x67); db(0x0c); db(0xc0); db(0x85); db(0x67); db(0x08); db(0x4a); db(0xa8); + db(0x01); db(0x90); db(0x67); db(0x00); db(0xfa); db(0x0e); db(0x20); db(0x28); + db(0x01); db(0x90); db(0x67); 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(0x03); db(0x4a); 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(0x02); db(0xca); db(0x4e); db(0x90); + db(0xff); db(0x20); db(0x61); db(0x00); db(0x03); db(0x30); db(0x4e); db(0x90); db(0x70); db(0x00); db(0x27); db(0x40); db(0x00); db(0x08); db(0x27); db(0x40); db(0x00); db(0x10); db(0x27); db(0x40); db(0x00); db(0x20); db(0x4a); db(0xa9); db(0x01); db(0x94); db(0x67); db(0x28); db(0x20); db(0x69); db(0x01); db(0x94); - db(0x61); db(0x00); db(0xfb); db(0x7e); db(0x48); db(0xe7); db(0x80); db(0xc0); + db(0x61); db(0x00); db(0xfb); db(0x64); db(0x48); db(0xe7); db(0x80); db(0xc0); db(0x20); db(0x29); db(0x01); db(0x90); db(0x22); db(0x69); db(0x01); db(0x94); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x4c); db(0xdf); db(0x03); db(0x01); db(0x4a); db(0x80); db(0x67); db(0x04); - db(0x61); db(0x00); db(0xfb); db(0x08); db(0x4a); db(0x83); db(0x6b); db(0x00); - db(0xfa); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); - db(0x02); db(0x7e); db(0x4e); db(0x90); db(0x20); db(0x03); db(0x16); db(0x29); + db(0x61); db(0x00); db(0xfa); db(0xee); db(0x4a); db(0x83); db(0x6b); db(0x00); + db(0xf9); db(0x8a); db(0x30); db(0x3c); db(0xff); db(0x18); db(0x61); db(0x00); + db(0x02); db(0xe4); 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(0x0f); db(0xa0); db(0x00); db(0x14); db(0x43); db(0xfa); - db(0xf9); db(0x14); db(0x20); db(0x09); db(0xe4); db(0x88); db(0x27); db(0x40); + db(0x00); db(0x00); db(0x17); db(0x70); db(0x00); db(0x14); db(0x43); db(0xfa); + db(0xf8); db(0x74); db(0x20); db(0x09); 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(0x4a); db(0x87); db(0x67); db(0x36); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x70); db(0x14); db(0x72); db(0x00); db(0x4e); db(0xae); db(0xff); db(0x3a); - db(0x22); db(0x40); db(0x70); db(0x00); db(0x22); db(0x80); db(0x23); db(0x40); - db(0x00); db(0x04); db(0x33); db(0x40); db(0x00); db(0x0e); db(0x30); db(0x3c); - db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); db(0x00); db(0x08); - db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); db(0x23); db(0x4b); - db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); db(0x4e); db(0xee); - db(0xfe); db(0xf2); db(0x20); db(0x4b); db(0x72); db(0x00); db(0x22); db(0x41); - db(0x70); db(0xff); db(0x2c); db(0x4c); db(0x4e); db(0xee); db(0xff); db(0x6a); - 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(0x05); db(0x64); 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(0xb5); 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(0x93); db(0xc9); - db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); - db(0x61); db(0x00); db(0x02); db(0xa4); db(0x27); db(0x40); db(0x00); db(0xa4); - db(0x61); db(0x00); db(0x02); db(0xd0); db(0x27); db(0x40); db(0x00); db(0xa8); - db(0x7a); db(0x00); db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); - db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); - db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); - db(0x61); db(0x00); db(0x01); db(0x9c); db(0x70); db(0x00); db(0x4e); db(0x90); - db(0x61); db(0x00); db(0xfb); db(0xf0); db(0x61); db(0x00); db(0x03); db(0x32); - db(0x60); db(0x00); db(0x00); db(0xfc); db(0x61); db(0x00); db(0x03); db(0x2a); - 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(0x11); - db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xac); - db(0x67); db(0x08); db(0x61); db(0x00); db(0xfd); db(0x6c); db(0x42); db(0x2b); - db(0x00); db(0xac); db(0x20); db(0x0c); db(0x67); db(0xce); db(0x0c); db(0x6c); - db(0x00); db(0x26); db(0x00); db(0x12); db(0x66); db(0x4c); db(0x0c); db(0xac); - db(0x40); db(0x00); db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x42); - db(0x0c); db(0x6c); db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3a); - db(0x20); db(0x6c); db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); - db(0x02); db(0x80); db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); - db(0x80); db(0x00); db(0x00); db(0x08); db(0x66); db(0x18); db(0x02); db(0xa8); - db(0x7f); db(0xff); db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); - db(0x00); db(0x10); db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); - db(0x4e); db(0xae); db(0xfe); db(0x92); db(0x60); db(0x86); db(0x22); db(0x4c); - db(0x70); db(0x26); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); - db(0xff); db(0x7c); db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x3e); - db(0x30); db(0x3c); db(0xff); db(0x50); db(0x61); db(0x00); db(0x00); db(0xf8); - 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(0x5e); - db(0x22); db(0x50); db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); - db(0x6a); 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(0xda); - db(0x24); db(0x48); db(0x20); db(0x49); db(0x60); db(0xd4); 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(0x4e); db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); - db(0x00); db(0xa6); db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x0e); - db(0x52); db(0x85); db(0x28); db(0xab); db(0x00); db(0x04); db(0x27); db(0x4c); - db(0x00); db(0x04); db(0x60); db(0x00); db(0xff); db(0x08); db(0x28); db(0x43); - db(0x61); db(0x04); db(0x60); db(0x00); db(0xff); db(0x00); 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(0xfc); db(0x70); db(0x0c); db(0xac); db(0x00); db(0x00); - db(0x04); db(0x09); db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); - db(0xfc); db(0x8e); db(0x22); db(0x54); db(0x20); db(0x6c); db(0x00); db(0x04); - db(0x29); db(0x4d); db(0x00); db(0x04); db(0x4e); db(0xee); db(0xfe); db(0x92); - db(0x2f); db(0x05); db(0x7a); db(0xfc); db(0x24); db(0x53); db(0x2e); db(0x0a); - db(0x22); db(0x0a); db(0x67); db(0x00); db(0x00); db(0x0c); db(0x52); db(0x85); - db(0x67); db(0x1e); db(0x22); db(0x4a); db(0x24); db(0x52); db(0x60); db(0xf0); - db(0x52); db(0x85); db(0x67); db(0x3c); db(0x24); db(0x47); db(0x70); db(0x18); - db(0x72); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x52); db(0x46); - db(0x24); db(0x40); db(0x24); db(0x87); db(0x2e); db(0x0a); db(0x60); db(0xe8); - db(0x20); db(0x12); db(0x67); db(0x24); db(0x20); db(0x40); db(0x20); db(0x10); - db(0x67); db(0x1e); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x18); - db(0x70); db(0x00); db(0x22); db(0x80); db(0x22); db(0x4a); db(0x24); db(0x51); - db(0x70); db(0x18); db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x06); db(0x86); - db(0x00); db(0x01); db(0x00); db(0x00); db(0x20); db(0x0a); db(0x66); db(0xec); - db(0x26); db(0x87); db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x41); db(0xfa); - db(0xf6); db(0xa4); db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); - db(0xd1); db(0xc0); db(0x4e); db(0x75); db(0x00); db(0x00); db(0x0c); db(0xaf); - db(0x00); db(0x00); db(0x00); db(0x22); db(0x00); db(0x08); db(0x66); db(0x30); - db(0x48); db(0xe7); db(0xc0); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x24); db(0x40); - db(0x22); db(0x4a); db(0x70); db(0xec); db(0x4e); db(0xae); db(0xfe); db(0xd4); - db(0x41); db(0xfa); db(0xff); db(0xda); db(0x32); db(0x10); db(0xb2); db(0x50); - db(0x67); db(0xfc); db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0xd4); - db(0x72); db(0x01); db(0x4c); db(0xdf); db(0x47); db(0x03); db(0x58); db(0x8f); - 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(0x79); db(0x00); db(0x00); - 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(0x08); db(0x07); db(0x00); db(0x00); db(0x67); db(0x38); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x70); db(0x14); db(0x72); db(0x00); db(0x4e); db(0xae); + db(0xff); db(0x3a); db(0x22); db(0x40); db(0x70); db(0x00); db(0x22); db(0x80); + db(0x23); db(0x40); db(0x00); db(0x04); db(0x33); db(0x40); db(0x00); db(0x0e); + db(0x30); db(0x3c); db(0x10); db(0x00); db(0x80); db(0x03); db(0x33); db(0x40); + db(0x00); db(0x08); db(0x23); db(0x6d); db(0x01); db(0x04); db(0x00); db(0x0a); + db(0x23); db(0x4b); db(0x00); db(0x10); db(0x41); db(0xec); db(0x00); db(0x4a); + db(0x4e); db(0xae); db(0xfe); db(0xf2); db(0x4e); db(0x75); db(0x20); db(0x4b); + db(0x72); db(0x00); db(0x22); db(0x41); db(0x08); db(0x07); db(0x00); db(0x01); + db(0x67); db(0x02); db(0x72); db(0x01); db(0x70); db(0xec); db(0x2c); db(0x4c); + db(0x4e); db(0xae); db(0xff); db(0x6a); db(0x4e); db(0x75); db(0x48); db(0xe7); + db(0x3f); db(0x3e); db(0x2c); db(0x01); db(0x7e); db(0x02); db(0x7a); db(0x00); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x43); db(0xfa); db(0x06); db(0x10); + db(0x70); db(0x00); db(0x4e); db(0xae); db(0xfd); db(0xd8); db(0x28); db(0x40); + db(0x20); db(0x3c); db(0x00); db(0x00); db(0x02); db(0x2c); db(0x22); db(0x3c); + db(0x00); db(0x01); db(0x00); db(0x01); db(0x4e); db(0xae); db(0xff); db(0x3a); + db(0x20); db(0x40); db(0x21); db(0x4c); db(0x01); db(0x9c); db(0x48); db(0xe7); + db(0x00); db(0x0a); db(0x61); db(0x00); db(0xfe); db(0x78); db(0x4c); db(0xdf); + db(0x50); db(0x00); db(0x22); db(0x4c); db(0x4e); db(0xae); db(0xfe); db(0x62); + db(0x4c); db(0xdf); db(0x7c); db(0xfc); db(0x4e); db(0x75); db(0x2c); db(0x78); + db(0x00); db(0x04); db(0x93); db(0xc9); db(0x4e); db(0xae); db(0xfe); db(0xda); + db(0x20); db(0x40); db(0x4b); db(0xe8); db(0x00); db(0x5c); db(0x43); db(0xfa); + db(0x05); db(0xa8); 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(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(0xae); 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(0x79); db(0x00); db(0x00); - db(0x00); db(0x04); db(0x4a); db(0x80); db(0x67); db(0x20); db(0x24); db(0x40); - 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(0x21); db(0x42); - db(0x00); db(0x12); db(0x21); db(0x4a); db(0x00); db(0x0e); db(0x4a); db(0x80); + 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(0x93); db(0xc9); db(0x4e); db(0xae); + db(0xfe); db(0xda); db(0x27); db(0x40); db(0x00); db(0xb0); db(0x61); db(0x00); + db(0x02); db(0xb4); db(0x27); db(0x40); db(0x00); db(0xa4); db(0x61); db(0x00); + db(0x02); db(0xe0); db(0x27); db(0x40); db(0x00); db(0xa8); db(0x7a); db(0x00); + db(0x20); db(0x4d); db(0x4e); db(0xae); db(0xfe); db(0x80); db(0x20); db(0x4d); + db(0x4e); db(0xae); db(0xfe); db(0x8c); db(0x28); db(0x40); db(0x26); db(0x2c); + db(0x00); db(0x0a); db(0x30); db(0x3c); db(0xff); db(0x40); db(0x61); db(0x00); + db(0x01); db(0xac); db(0x70); db(0x00); db(0x4e); db(0x90); db(0x24); db(0x00); + db(0x70); db(0x01); db(0x61); db(0x00); db(0xfb); db(0x5c); db(0x08); db(0x02); + db(0x00); db(0x01); db(0x67); db(0x06); db(0x70); db(0x01); db(0x61); db(0x00); + db(0xfc); db(0x60); db(0x61); db(0x00); db(0x03); db(0x38); db(0x60); db(0x00); + db(0x00); db(0xfc); db(0x61); db(0x00); db(0x03); db(0x30); 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(0x11); db(0x4e); db(0xae); + db(0xfe); db(0xc2); db(0x4a); db(0x2b); db(0x00); db(0xac); db(0x67); db(0x08); + db(0x61); db(0x00); db(0xfd); db(0x04); db(0x42); db(0x2b); db(0x00); db(0xac); + db(0x20); db(0x0c); db(0x67); db(0xce); db(0x0c); db(0x6c); db(0x00); db(0x26); + db(0x00); db(0x12); db(0x66); db(0x4c); db(0x0c); db(0xac); db(0x40); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x14); db(0x66); db(0x42); db(0x0c); db(0x6c); + db(0x12); db(0x34); db(0x00); db(0x18); db(0x66); db(0x3a); db(0x20); db(0x6c); + db(0x00); db(0x1a); db(0x20); db(0x28); db(0x00); db(0x0c); db(0x02); db(0x80); + db(0x80); db(0x00); db(0x00); db(0x08); db(0x0c); db(0x80); db(0x80); db(0x00); + db(0x00); db(0x08); db(0x66); db(0x18); db(0x02); db(0xa8); db(0x7f); db(0xff); + db(0xff); db(0xff); db(0x00); db(0x0c); db(0x20); db(0x68); db(0x00); db(0x10); + db(0x22); db(0x4c); db(0x12); db(0xbc); db(0x00); db(0x08); db(0x4e); db(0xae); + db(0xfe); db(0x92); db(0x60); db(0x86); db(0x22); db(0x4c); db(0x70); db(0x26); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x60); db(0x00); db(0xff); db(0x7c); + db(0x26); db(0x2c); db(0x00); db(0x0a); db(0x66); db(0x3e); db(0x30); db(0x3c); + db(0xff); db(0x50); db(0x61); db(0x00); db(0x00); db(0xf8); 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(0x5e); db(0x22); db(0x50); + db(0x20); db(0x40); db(0x20); db(0x28); db(0x00); db(0x04); db(0x6a); 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(0xda); db(0x24); db(0x48); + db(0x20); db(0x49); db(0x60); db(0xd4); 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(0x4e); + db(0x30); db(0x3c); db(0xff); db(0x30); db(0x61); db(0x00); db(0x00); db(0xa6); + db(0x4e); db(0x90); db(0x4a); db(0x80); db(0x67); db(0x0e); db(0x52); db(0x85); + db(0x28); db(0xab); db(0x00); db(0x04); db(0x27); db(0x4c); db(0x00); db(0x04); + db(0x60); db(0x00); db(0xff); db(0x08); db(0x28); db(0x43); db(0x61); db(0x04); + db(0x60); db(0x00); db(0xff); db(0x00); 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(0xfc); db(0x04); db(0x0c); db(0xac); db(0x00); db(0x00); db(0x04); db(0x09); + db(0x00); db(0x08); db(0x66); db(0x04); db(0x61); db(0x00); db(0xfc); db(0x2a); + db(0x22); db(0x54); db(0x20); db(0x6c); db(0x00); db(0x04); db(0x29); db(0x4d); + db(0x00); db(0x04); db(0x4e); db(0xee); db(0xfe); db(0x92); db(0x2f); db(0x05); + db(0x7a); db(0xfc); db(0x24); db(0x53); db(0x2e); db(0x0a); db(0x22); db(0x0a); + db(0x67); db(0x00); db(0x00); db(0x0c); db(0x52); db(0x85); db(0x67); db(0x1e); + db(0x22); db(0x4a); db(0x24); db(0x52); db(0x60); db(0xf0); db(0x52); db(0x85); + db(0x67); db(0x3c); db(0x24); db(0x47); db(0x70); db(0x18); db(0x72); db(0x01); + db(0x4e); db(0xae); db(0xff); db(0x3a); db(0x52); db(0x46); db(0x24); db(0x40); + db(0x24); db(0x87); db(0x2e); db(0x0a); db(0x60); db(0xe8); db(0x20); db(0x12); + db(0x67); db(0x24); db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x1e); + db(0x20); db(0x40); db(0x20); db(0x10); db(0x67); db(0x18); db(0x70); db(0x00); + db(0x22); db(0x80); db(0x22); db(0x4a); db(0x24); db(0x51); db(0x70); db(0x18); + db(0x4e); db(0xae); db(0xff); db(0x2e); db(0x06); db(0x86); db(0x00); db(0x01); + db(0x00); db(0x00); db(0x20); db(0x0a); db(0x66); db(0xec); db(0x26); db(0x87); + db(0x2a); db(0x1f); db(0x4e); db(0x75); db(0x41); db(0xfa); db(0xf5); db(0x9e); + db(0x02); db(0x80); db(0x00); db(0x00); db(0xff); db(0xff); db(0xd1); db(0xc0); + db(0x4e); db(0x75); db(0x00); db(0x00); db(0x0c); db(0xaf); db(0x00); db(0x00); + db(0x00); db(0x22); db(0x00); db(0x08); db(0x66); db(0x30); db(0x48); db(0xe7); + db(0xc0); db(0xe2); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x93); db(0xc9); + db(0x4e); db(0xae); db(0xfe); db(0xda); db(0x24); db(0x40); db(0x22); db(0x4a); + db(0x70); db(0xec); db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x41); db(0xfa); + db(0xff); db(0xda); db(0x32); db(0x10); db(0xb2); db(0x50); db(0x67); db(0xfc); + db(0x22); db(0x4a); db(0x4e); db(0xae); db(0xfe); db(0xd4); db(0x72); db(0x01); + db(0x4c); db(0xdf); db(0x47); db(0x03); db(0x58); db(0x8f); 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(0x79); db(0x00); db(0x00); 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(0xae); 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(0x00); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); - db(0xff); db(0x70); db(0x61); db(0x00); db(0xff); db(0xbc); db(0x67); db(0x1a); - db(0x22); db(0x40); db(0x24); db(0x40); db(0x41); db(0xfa); db(0x02); db(0x38); - db(0x70); db(0x00); 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(0x00); - db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); - db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x3c); db(0x61); db(0x00); - db(0xff); db(0x88); db(0x67); db(0x1a); db(0x24); db(0x40); db(0x22); db(0x40); - db(0x41); db(0xfa); db(0x02); db(0x11); db(0x70); db(0x00); 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(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); - db(0x30); db(0x32); db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); + db(0x20); db(0x22); db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); + db(0x4a); db(0x80); db(0x67); db(0x20); db(0x24); db(0x40); 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(0x21); 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(0x00); db(0x22); + db(0x2c); db(0x78); db(0x00); db(0x04); db(0x61); db(0x00); db(0xff); db(0x70); + db(0x61); db(0x00); db(0xff); db(0xbc); db(0x67); db(0x1a); db(0x22); db(0x40); + db(0x24); db(0x40); db(0x41); db(0xfa); db(0x02); db(0x40); db(0x70); db(0x00); + 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(0x00); db(0x4e); db(0x75); + db(0x48); db(0xe7); db(0x00); db(0x22); db(0x2c); db(0x78); db(0x00); db(0x04); + db(0x61); db(0x00); db(0xff); db(0x3c); db(0x61); db(0x00); db(0xff); db(0x88); + db(0x67); db(0x1a); db(0x24); db(0x40); db(0x22); db(0x40); db(0x41); db(0xfa); + db(0x02); db(0x19); db(0x70); db(0x00); 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(0x00); db(0x4e); db(0x75); db(0x48); db(0xe7); db(0x38); db(0x32); + db(0x2c); db(0x79); db(0x00); db(0x00); 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(0x2c); db(0x24); db(0x40); db(0x15); db(0x7c); db(0x00); db(0x01); - db(0x00); db(0x08); 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(0x4e); db(0xae); db(0xfe); db(0xe6); db(0x4c); db(0xdf); db(0x4c); db(0x0c); - db(0x4e); db(0x75); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); db(0x00); - db(0x2f); db(0x08); db(0x4a); db(0x2b); db(0x00); db(0x9d); db(0x66); db(0x24); - db(0x41); db(0xfa); db(0xff); db(0xf0); db(0x0c); db(0x10); db(0x00); db(0x01); - db(0x66); db(0x1a); db(0x41); db(0xfa); db(0x01); db(0x94); db(0x43); db(0xfa); - db(0x00); db(0x18); db(0x61); db(0x00); db(0xff); db(0x8a); db(0x50); db(0xeb); - db(0x00); db(0x9d); db(0x30); db(0x3c); db(0xff); db(0x38); db(0x61); db(0x00); - db(0xfe); db(0x36); db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x4e); db(0x75); - db(0x2c); db(0x79); db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); - db(0x4e); db(0xae); db(0xfe); db(0xb6); db(0x74); db(0x00); db(0x01); db(0xc2); - 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(0x43); db(0xfa); db(0x01); db(0x7e); db(0x4e); db(0xae); - db(0xfd); db(0xd8); db(0x2e); db(0x00); db(0x70); db(0x00); db(0x30); db(0x3c); - db(0x00); db(0x44); 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(0x61); db(0x00); - db(0xfe); db(0xce); db(0x2b); db(0x40); db(0x00); db(0x3c); db(0x67); db(0x00); - db(0x00); db(0x4e); db(0x61); db(0x00); db(0xfe); db(0xf6); db(0x2b); db(0x40); - db(0x00); db(0x40); db(0x67); db(0x00); db(0x00); db(0x42); db(0x47); db(0xed); - db(0x00); db(0x16); db(0x27); db(0x4c); db(0x00); db(0x0c); db(0x27); db(0x42); - db(0x00); db(0x08); db(0x70); db(0xff); db(0x26); db(0x80); db(0x27); db(0x40); - db(0x00); db(0x04); 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(0x00); db(0xfc); db(0x23); db(0x48); - db(0x00); db(0x0a); db(0x41); db(0xfa); db(0x00); db(0xa0); db(0x23); db(0x48); - db(0x00); db(0x12); db(0x23); db(0x4b); db(0x00); db(0x0e); db(0x70); db(0x05); - db(0x4e); db(0xae); db(0xff); db(0x58); db(0x60); db(0x02); db(0x4e); db(0x75); - db(0x20); db(0x02); db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x22); db(0x6d); - db(0x00); db(0x3c); db(0x45); db(0xed); db(0x00); db(0x26); 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(0x15); db(0x7c); - db(0x00); db(0x04); db(0x00); db(0x04); db(0x42); db(0x2a); db(0x00); db(0x05); - db(0x42); db(0x6a); db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); - db(0x20); db(0x47); db(0x20); db(0x2d); db(0x00); db(0x16); db(0x32); db(0x28); - db(0x00); db(0x30); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x35); db(0x40); - db(0x00); db(0x0a); db(0x20); db(0x2d); db(0x00); db(0x1a); db(0x32); db(0x28); - db(0x00); db(0x2e); db(0xd2); db(0x41); db(0x90); db(0x41); db(0x48); db(0xc0); - db(0x35); db(0x40); db(0x00); db(0x0c); db(0x22); db(0x6d); db(0x00); db(0x40); - 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(0x00); db(0x40); 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(0x00); db(0x3c); db(0x4e); db(0xae); db(0xfe); db(0x38); - db(0x60); db(0x00); db(0xff); db(0x76); db(0x30); db(0x3a); db(0xfe); db(0xa6); - db(0x48); db(0xc0); db(0x32); db(0x3a); db(0xfe); db(0xa2); db(0x48); db(0xc1); - db(0xb0); db(0x91); db(0x66); db(0x00); db(0x00); db(0x0a); db(0xb2); db(0xa9); - db(0x00); db(0x04); db(0x67); db(0x00); db(0x00); db(0x18); db(0x23); db(0x41); - db(0x00); db(0x04); db(0x22); db(0x80); db(0x20); db(0x29); db(0x00); db(0x08); - db(0x22); db(0x69); db(0x00); db(0x0c); db(0x2c); db(0x78); db(0x00); db(0x04); - db(0x4e); db(0xae); db(0xfe); db(0xbc); db(0x41); db(0xf9); db(0x00); db(0xdf); - db(0xf0); db(0x00); db(0x70); db(0x00); 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(0x55); db(0x41); db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); - db(0x65); db(0x20); db(0x68); db(0x61); db(0x63); db(0x6b); 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(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(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(0x00); db(0x00); db(0x00); db(0x00); db(0x03); db(0xf2); + db(0x00); db(0x30); 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(0x4e); db(0xae); db(0xfe); db(0xe6); + db(0x4c); db(0xdf); db(0x4c); db(0x1c); db(0x4e); db(0x75); db(0x00); db(0x00); + db(0x00); db(0x00); db(0x00); db(0x00); db(0x2f); db(0x08); db(0x4a); db(0x2b); + db(0x00); db(0x9d); db(0x66); db(0x26); db(0x41); db(0xfa); db(0xff); db(0xf0); + db(0x0c); db(0x10); db(0x00); db(0x01); db(0x66); db(0x1c); db(0x41); db(0xfa); + db(0x01); db(0x96); db(0x43); db(0xfa); db(0x00); db(0x1a); db(0x70); db(0x05); + db(0x61); db(0x00); db(0xff); db(0x82); db(0x50); db(0xeb); db(0x00); db(0x9d); + db(0x30); db(0x3c); db(0xff); db(0x38); db(0x61); db(0x00); db(0xfe); db(0x2e); + db(0x4e); db(0x90); db(0x20); db(0x5f); db(0x4e); db(0x75); db(0x2c); db(0x79); + db(0x00); db(0x00); db(0x00); db(0x04); db(0x70); db(0xff); db(0x4e); db(0xae); + db(0xfe); db(0xb6); db(0x74); db(0x00); db(0x01); db(0xc2); 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(0x43); db(0xfa); db(0x01); db(0xaa); db(0x4e); db(0xae); db(0xfd); db(0xd8); + db(0x2e); db(0x00); db(0x70); db(0x00); db(0x30); db(0x3c); db(0x00); db(0x44); + 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(0x61); db(0x00); db(0xfe); db(0xc6); + db(0x2b); db(0x40); db(0x00); db(0x3c); db(0x67); db(0x00); db(0x00); db(0x4e); + db(0x61); db(0x00); db(0xfe); db(0xee); db(0x2b); db(0x40); db(0x00); db(0x40); + db(0x67); db(0x00); db(0x00); db(0x42); db(0x47); db(0xed); db(0x00); db(0x16); + db(0x27); db(0x4c); db(0x00); db(0x0c); db(0x27); db(0x42); db(0x00); db(0x08); + db(0x70); db(0xff); db(0x26); db(0x80); db(0x27); db(0x40); db(0x00); db(0x04); + 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(0x00); db(0xfc); db(0x23); db(0x48); db(0x00); db(0x0a); + db(0x41); db(0xfa); db(0x00); db(0xa0); db(0x23); db(0x48); db(0x00); db(0x12); + db(0x23); db(0x4b); db(0x00); db(0x0e); db(0x70); db(0x05); db(0x4e); db(0xae); + db(0xff); db(0x58); db(0x60); db(0x02); db(0x4e); db(0x75); db(0x20); db(0x02); + db(0x4e); db(0xae); db(0xfe); db(0xc2); db(0x22); db(0x6d); db(0x00); db(0x3c); + db(0x45); db(0xed); db(0x00); db(0x26); 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(0x15); db(0x7c); db(0x00); db(0x04); + db(0x00); db(0x04); db(0x42); db(0x2a); db(0x00); db(0x05); db(0x42); db(0x6a); + db(0x00); db(0x06); db(0x42); db(0x6a); db(0x00); db(0x08); db(0x20); db(0x47); + db(0x20); db(0x2d); db(0x00); db(0x16); db(0x32); db(0x28); db(0x00); db(0x30); + db(0xd2); db(0x41); db(0x90); db(0x41); db(0x35); db(0x40); db(0x00); db(0x0a); + db(0x20); db(0x2d); db(0x00); db(0x1a); db(0x32); db(0x28); db(0x00); db(0x2e); + db(0xd2); db(0x41); db(0x90); db(0x41); db(0x48); db(0xc0); db(0x35); db(0x40); + db(0x00); db(0x0c); db(0x22); db(0x6d); db(0x00); db(0x40); 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(0x00); db(0x40); 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(0x00); db(0x3c); db(0x4e); db(0xae); db(0xfe); db(0x38); db(0x60); db(0x00); + db(0xff); db(0x76); db(0x30); db(0x3a); db(0xfe); db(0xa4); db(0x48); db(0xc0); + db(0x32); db(0x3a); db(0xfe); db(0xa0); db(0x48); db(0xc1); db(0xb0); db(0x91); + db(0x66); db(0x00); db(0x00); db(0x0a); db(0xb2); db(0xa9); db(0x00); db(0x04); + db(0x67); db(0x00); db(0x00); db(0x18); db(0x23); db(0x41); db(0x00); db(0x04); + db(0x22); db(0x80); db(0x20); db(0x29); db(0x00); db(0x08); db(0x22); db(0x69); + db(0x00); db(0x0c); db(0x2c); db(0x78); db(0x00); db(0x04); db(0x4e); db(0xae); + db(0xfe); db(0xbc); db(0x41); db(0xf9); db(0x00); db(0xdf); db(0xf0); db(0x00); + db(0x70); db(0x00); 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(0x55); db(0x41); + db(0x45); db(0x20); db(0x6d); db(0x6f); db(0x75); db(0x73); db(0x65); db(0x20); + db(0x68); db(0x61); db(0x63); db(0x6b); 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(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(0x00); db(0x00); db(0x03); db(0xf2); diff --git a/gencomp.c b/gencomp.c index 5b367e40..06107798 100755 --- a/gencomp.c +++ b/gencomp.c @@ -96,7 +96,7 @@ read_counts (void) fscanf (file, "Total: %lu\n", &total); while (fscanf (file, "%lx: %lu %s\n", &opcode, &count, name) == 3) { - opcode_next_clev[nr] = 4; + opcode_next_clev[nr] = 5; opcode_last_postfix[nr] = -1; opcode_map[nr++] = opcode; counts[opcode] = count; @@ -110,7 +110,7 @@ read_counts (void) if (table68k[opcode].handler == -1 && table68k[opcode].mnemo != i_ILLG && counts[opcode] == 0) { - opcode_next_clev[nr] = 4; + opcode_next_clev[nr] = 5; opcode_last_postfix[nr] = -1; opcode_map[nr++] = opcode; counts[opcode] = count; @@ -3034,7 +3034,7 @@ generate_func (int noflags) using_exception_3 = 0; for (i = 0; i < 1; i++) /* We only do one level! */ { - cpu_level = 6 - i; + cpu_level = 5 - i; postfix = i; if (noflags) diff --git a/newcpu.c b/newcpu.c index cad0e385..9ae2a272 100755 --- a/newcpu.c +++ b/newcpu.c @@ -66,14 +66,6 @@ int movem_index1[256]; int movem_index2[256]; int movem_next[256]; -#ifdef FPUEMU -#if 0 -int fpp_movem_index1[256]; -int fpp_movem_index2[256]; -int fpp_movem_next[256]; -#endif -#endif - cpuop_func *cpufunctbl[65536]; extern uae_u32 get_fpsr (void); @@ -235,10 +227,12 @@ static void build_cpufunctbl (void) opcnt++; } } - write_log ("Building CPU, %d opcodes (%d %d %d). CPU=%d, FPU=%d, JIT=%d.\n", + write_log ("Building CPU, %d opcodes (%d %d %d)\n", opcnt, lvl, - currprefs.cpu_cycle_exact ? -1 : currprefs.cpu_compatible ? 1 : 0, - currprefs.address_space_24, currprefs.cpu_model, currprefs.fpu_model, + currprefs.cpu_cycle_exact ? -1 : currprefs.cpu_compatible ? 1 : 0, currprefs.address_space_24); + write_log ("CPU=%d, FPU=%d, JIT%s=%d.\n", + currprefs.cpu_model, currprefs.fpu_model, + currprefs.cachesize ? (currprefs.compfpu ? "=CPU/FPU" : "=CPU") : "", currprefs.cachesize); #ifdef JIT build_comp (); @@ -331,19 +325,7 @@ void init_m68k (void) movem_index2[i] = 7-j; movem_next[i] = i & (~(1 << j)); } -#ifdef FPUEMU -#if 0 - for (i = 0 ; i < 256 ; i++) { - int j; - for (j = 7 ; j >= 0 ; j--) { - if (i & (1 << j)) break; - } - fpp_movem_index1[i] = 7-j; - fpp_movem_index2[i] = j; - fpp_movem_next[i] = i & (~(1 << j)); - } -#endif -#endif + #if COUNT_INSTRS { FILE *f = fopen (icountfilename (), "r"); diff --git a/od-win32/win32.h b/od-win32/win32.h index 51c879ce..46ed389d 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -15,9 +15,9 @@ #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100) #define GETBDD(x) ((x) % 100) -#define WINUAEBETA 3 +#define WINUAEBETA 4 #define WINUAEPUBLICBETA 1 -#define WINUAEDATE MAKEBD(2007, 9, 3) +#define WINUAEDATE MAKEBD(2007, 9, 5) #define WINUAEEXTRA "" #define WINUAEREV "" diff --git a/od-win32/win32_filesys.c b/od-win32/win32_filesys.c index c90887b6..dd7fddd7 100755 --- a/od-win32/win32_filesys.c +++ b/od-win32/win32_filesys.c @@ -136,7 +136,7 @@ static void filesys_addexternals(void) strcat(volumepath, "."); else strcat(volumepath, ".."); - add_filesys_unit (devname[0] ? devname : NULL, volumename, volumepath, !rw, 0, 0, 0, 0, 0, 0, 0, 0); + add_filesys_unit (devname[0] ? devname : NULL, volumename, volumepath, !rw, 0, 0, 0, 0, -20, 0, 0, 0); } /* if drivemask */ dwDriveMask >>= 1; } diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 93d275c6..320f7beb 100755 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,18 @@ +Beta 4: + +- ACTION_EXAMINE_ALL_END implemented (forgot in b2..) +- directory filesystem on the fly mount implemented without need for + spare empty devices. (I lied again, it was really simple after all..) + "empty slot" drives removed. USB memory sticks etc will always + mount on the fly automagically now. (if uae boot rom is available) + Device node ("RDHx") is never removed. My black magic skill level + is not high enough yet. + hardfiles next.. +- enable uae boot rom if chip ram > 2M enabled (KS does not + detect more than 2MB of chip, the rest is mapped by boot rom) +- 68040/060 FPU was always interpreted (no JIT) (b1) + Beta 3: - do not cause hard reset if PC was in memory area that disappears @@ -22,6 +36,7 @@ Beta 3: really works as well as it can ever work.. No audio tracks and some Amiga CDs really need Amiga-side CDFS but it still is much easier to use..) Not really recommended if uaescsi.device is used.. +- compiled with MSVS 2005 again Beta 2: -- 2.47.3