diff --git a/th05_maine.asm b/th05_maine.asm new file mode 100644 index 00000000..1a442755 --- /dev/null +++ b/th05_maine.asm @@ -0,0 +1,81832 @@ +; +; +-------------------------------------------------------------------------+ +; | This file has been generated by The Interactive Disassembler (IDA) | +; | Copyright (c) 2009 by Hex-Rays, | +; +-------------------------------------------------------------------------+ +; +; Input MD5 : 57F21130457B229B7ED74E30D2B6E6E5 + +; File Name : th05/MAINE.EXE +; Format : MS-DOS executable (EXE) +; Base Address: 0h Range: 0h-1C6F0h Loaded length: 128A6h +; Entry Point : 0:0 +; OS type : MS DOS +; Application type: Executable 16bit + + .386 + .model large + +; =========================================================================== + +; Segment type: Pure code +seg000 segment byte public 'CODE' use16 + assume cs:seg000 + assume es:nothing, ss:seg005, ds:nothing, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn + + public start +start proc far + mov dx, seg dseg + +loc_3: + mov cs:DGROUP@, dx + mov ah, 30h + int 21h ; DOS - GET DOS VERSION + ; Return: AL = major version number (00h for DOS 1.x) + mov bp, ds:2 + mov bx, ds:2Ch + mov ds, dx + assume ds:dseg + mov word_1017C, ax + mov segx, es + mov word_10176, bx + mov word_1018E, bp + call sub_178 + mov ax, word_10176 + mov es, ax + xor ax, ax + mov bx, ax + mov di, ax + mov cx, 7FFFh + cld + +loc_37: ; CODE XREF: start+3Fj + repne scasb + jcxz short loc_7E + inc bx + cmp es:[di], al + jnz short loc_37 + or ch, 80h + neg cx + mov word_10174, cx + mov cx, 2 + shl bx, cl + add bx, 10h + and bx, 0FFF0h + mov word_10178, bx + mov dx, ss + sub bp, dx + mov di, seg dseg + mov es, di + assume es:dseg + mov di, es:word_11B36 + cmp di, 200h + jnb short loc_75 + mov di, 200h + mov es:word_11B36, di + +loc_75: ; CODE XREF: start+6Bj + mov cl, 4 + shr di, cl + inc di + cmp bp, di + jnb short loc_83 + +loc_7E: ; CODE XREF: start+39j + nop + push cs + call near ptr sub_3CE0 +; --------------------------------------------------------------------------- + +loc_83: ; CODE XREF: start+7Cj + mov bx, di + add bx, dx + mov word_10186, bx + mov word_1018A, bx + mov ax, segx + sub bx, ax + mov es, ax + assume es:nothing + mov ah, 4Ah ; 'J' + push di + int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) + ; ES = segment address of block to change + ; BX = new size in paragraphs + pop di + shl di, cl + cli + mov ss, dx + assume ss:nothing + mov sp, di + sti + mov ax, seg dseg + mov es, ax + assume es:dseg + mov es:word_11B36, di + xor ax, ax + mov es, cs:DGROUP@ + assume es:nothing + mov di, 1D6Eh + mov cx, 0C56Eh + sub cx, di + cld + rep stosb + cmp word_11A98, 14h + jbe short loc_110 + cmp byte ptr word_1017C, 3 + jb short loc_110 + ja short loc_D7 + cmp byte ptr word_1017C+1, 1Eh + jb short loc_110 + +loc_D7: ; CODE XREF: start+CEj + mov ax, 5801h + mov bx, 2 + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + jb short loc_10B + mov ah, 67h ; 'g' + mov bx, word_11A98 + int 21h ; DOS - 3.3+ - SET HANDLE COUNT + ; BX = desired number of handles (max 255) + jb short loc_10B + mov ah, 48h ; 'H' + mov bx, 1 + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + jb short loc_10B + inc ax + mov word_1018E, ax + dec ax + mov es, ax + assume es:nothing + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + jb short loc_10B + mov ax, 5801h + mov bx, 0 + int 21h ; DOS - 3+ - GET/SET MEMORY ALLOCATION STRATEGY + ; AL = function code: set allocation strategy + jnb short loc_110 + +loc_10B: ; CODE XREF: start+DFj start+E9j ... + nop + push cs + call near ptr sub_3CE0 +; --------------------------------------------------------------------------- + +loc_110: ; CODE XREF: start+C5j start+CCj ... + xor bp, bp + push bp + nop + push cs + call near ptr __ExceptInit + pop ax + mov es, cs:DGROUP@ + assume es:nothing + mov si, 1D4Ah + mov di, 1D68h + call sub_1E8 + push word_10172 + push envp ; envp + push word_1016E + push argv ; argv + push argc ; argc + call _main + push ax ; status + nop + push cs + call near ptr _exit +; --------------------------------------------------------------------------- + +__cleanup: ; CODE XREF: sub_3F75+26p + mov es, cs:DGROUP@ + push si + push di + mov si, 1D68h + mov di, 1D6Eh + call sub_22C + pop di + pop si + retf +start endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +__checknull proc far ; CODE XREF: sub_3F75+34p + retf +__checknull endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +__terminate proc near ; CODE XREF: sub_3F75+50p + +arg_2 = byte ptr 4 + + mov bp, sp + mov ah, 4Ch ; 'L' + mov al, [bp+arg_2] + int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) +__terminate endp ; AL = exit code + +; --------------------------------------------------------------------------- + mov dx, 4Bh ; 'K' + push ds + push dx + nop + push cs + call near ptr ___ErrorMessage + pop dx + pop ds + mov ax, 3 + push ax + nop + push cs + call near ptr __exit + +; =============== S U B R O U T I N E ======================================= + + +sub_178 proc near ; CODE XREF: start+25p + push ds + mov ax, 3500h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + +loc_17E: ; DATA XREF: sub_E81A+12r + mov word ptr dword_1015A, bx + +loc_182: ; DATA XREF: sub_E848+4r + mov word ptr dword_1015A+2, es + mov ax, 3504h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov word ptr dword_1015E, bx + mov word ptr dword_1015E+2, es + mov ax, 3505h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov word ptr dword_10162, bx + mov word ptr dword_10162+2, es + mov ax, 3506h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov word ptr dword_10166, bx + mov word ptr dword_10166+2, es + mov ax, 2500h + mov dx, cs + mov ds, dx + assume ds:seg000 + mov dx, 163h + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + assume ds:dseg + retn +sub_178 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +__restorezero proc far ; CODE XREF: sub_3F75+2Fp + push ds + mov ax, 2500h + lds dx, dword_1015A + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + push ds + mov ax, 2504h + lds dx, dword_1015E + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + push ds + mov ax, 2505h + lds dx, dword_10162 + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + push ds + mov ax, 2506h + lds dx, dword_10166 + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + retf +__restorezero endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1E8 proc near ; CODE XREF: start+124p sub_1E8+3Aj ... + mov ax, 100h + mov dx, di + mov bx, si + +loc_1EF: ; CODE XREF: sub_1E8+22j + cmp bx, di + jz short loc_20C + +loc_1F3: ; DATA XREF: sub_11FE-71r sub_11FE-6Er + cmp byte ptr es:[bx], 0FFh + jz short loc_207 + mov cl, es:[bx+1] + xor ch, ch + cmp cx, ax + jnb short loc_207 + mov ax, cx + mov dx, bx + +loc_207: ; CODE XREF: sub_1E8+Fj sub_1E8+19j + add bx, 6 + jmp short loc_1EF +; --------------------------------------------------------------------------- + +loc_20C: ; CODE XREF: sub_1E8+9j + cmp dx, di + jz short locret_22B + mov bx, dx + cmp byte ptr es:[bx], 0 + mov byte ptr es:[bx], 0FFh + push es + jz short loc_224 + call dword ptr es:[bx+2] + pop es + jmp short sub_1E8 +; --------------------------------------------------------------------------- + +loc_224: ; CODE XREF: sub_1E8+33j + call word ptr es:[bx+2] + pop es + jmp short sub_1E8 +; --------------------------------------------------------------------------- + +locret_22B: ; CODE XREF: sub_1E8+26j + retn +sub_1E8 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_22C proc near ; CODE XREF: start+153p sub_22C+37j ... + mov ah, 0 + mov dx, di + mov bx, si + +loc_232: ; CODE XREF: sub_22C+1Fj + cmp bx, di + jz short loc_24D + cmp byte ptr es:[bx], 0FFh + jz short loc_248 + cmp es:[bx+1], ah + jb short loc_248 + mov ah, es:[bx+1] + mov dx, bx + +loc_248: ; CODE XREF: sub_22C+Ej sub_22C+14j + add bx, 6 + jmp short loc_232 +; --------------------------------------------------------------------------- + +loc_24D: ; CODE XREF: sub_22C+8j + cmp dx, di + jz short locret_26C + mov bx, dx + cmp byte ptr es:[bx], 0 + mov byte ptr es:[bx], 0FFh + push es + jz short loc_265 + call dword ptr es:[bx+2] + pop es + jmp short sub_22C +; --------------------------------------------------------------------------- + +loc_265: ; CODE XREF: sub_22C+30j + call word ptr es:[bx+2] + pop es + jmp short sub_22C +; --------------------------------------------------------------------------- + +locret_26C: ; CODE XREF: sub_22C+23j + retn +sub_22C endp + +; --------------------------------------------------------------------------- +DGROUP@ dw 0 ; DATA XREF: start:loc_3w start+B0r ... +; --------------------------------------------------------------------------- + +__MMODEL: + add al, 0C0h ; '' + add byte_18F2E, bl + push ds + pop di + add cx, word_1A7E8 + pop ds + mov ax, 0FFF3h + +loc_27F: ; CODE XREF: seg000:02D9j seg000:02E1j + pop si + pop di + pop ds + pop bp + retf 8 +; --------------------------------------------------------------------------- + +loc_286: ; CODE XREF: sub_2894+60p + push bp + mov bp, sp + push ds + push si + push di + mov ax, [bp+6] + mov cs:word_36D, ax + mov cs:word_35F, ds + mov ax, [bp+0Ch] + mov cs:word_2ED, ax + push ds + lds bx, [bp+8] + mov ax, [bx+8] + mov cx, [bx+0Ah] + mov bp, [bx+0Eh] + sub bp, [bx+0Ch] + inc bp + pop ds + shr ax, 3 + mov cs:byte_309, al + mov dh, al + mov dl, cl + mov cs:word_364, dx + mov cs:byte_307, cl + mul cx + mov cs:word_302, ax + shl ax, 2 + mov cs:word_2E8, ax + xchg ax, bx + push bx + push cs + call near ptr sub_2238 + jb short loc_27F + xchg ax, cx + push bx + push cs + call near ptr sub_2238 + jb short loc_27F + mov es, ax + mov ds, cx +; --------------------------------------------------------------------------- + db 0B9h +word_2E8 dw 1234h ; DATA XREF: seg000:02CFw + db 33h, 0D2h, 0BBh +word_2ED dw 1234h ; DATA XREF: seg000:029Bw + db 0B4h, 3Fh, 0CDh, 21h, 73h, 3, 0E9h, 7Ah, 0FFh, 3Bh + db 0C1h, 74h, 3, 0E9h, 73h, 0FFh, 33h, 0F6h, 0BAh +word_302 dw 1234h ; DATA XREF: seg000:02C8w + db 33h, 0DBh, 0B5h +byte_307 db 11h ; DATA XREF: seg000:02C1w + db 0B1h +byte_309 db 11h ; DATA XREF: seg000:02B4w + db 51h, 52h, 53h, 0ADh, 8Bh, 0D8h, 0ADh, 8Bh, 0D0h, 0BFh + db 4, 0, 0D0h, 0C3h, 0D0h, 0D5h, 0D0h, 0C3h, 0D0h, 0D1h + db 0D0h, 0C3h, 0D0h, 0D4h, 0D0h, 0C3h, 3 dup(0D0h), 0C3h + db 0D0h, 0D5h, 0D0h, 0C3h, 0D0h, 0D1h, 0D0h, 0C3h, 0D0h + db 0D4h, 0D0h, 0C3h, 2 dup(0D0h), 8Ah, 0DFh, 8Ah, 0FAh + db 8Ah, 0D6h, 4Fh, 75h, 0D7h, 5Bh, 5Ah, 26h, 88h, 1, 3 + db 0FAh, 26h, 88h, 21h, 3, 0FAh, 26h, 88h, 9, 3, 0FAh + db 26h, 88h, 29h, 59h, 43h, 0FEh, 0C9h, 75h, 0B1h, 0FEh + db 0CDh, 75h, 0ABh, 1Eh, 0B8h +word_35F dw 1234h ; DATA XREF: seg000:0293w + db 8Eh, 0D8h, 0B8h +word_364 dw 1234h ; DATA XREF: seg000:02BCw + db 6, 50h, 6, 33h, 0C0h, 50h, 0B8h +word_36D dw 1234h ; DATA XREF: seg000:028Fw + db 50h, 0Eh, 0E8h, 0, 24h, 7, 1Fh, 72h, 6, 4Dh, 74h, 1Fh + db 0E9h, 69h, 0FFh, 1Eh, 2Eh, 8Eh, 1Eh, 5Fh, 3, 8Bh, 0C8h + db 6, 0Eh, 0E8h, 97h, 1Eh, 0Eh, 0E8h, 93h, 1Eh, 8Bh, 0C1h + db 0F9h, 5Eh, 5Fh, 1Fh, 5Dh, 0CAh, 8, 0, 90h, 1Eh, 2Eh + db 8Eh, 1Eh, 5Fh, 3, 6, 0Eh, 0E8h, 7Dh, 1Eh, 0Eh, 0E8h + db 79h, 1Eh, 0B8h, 2 dup(0), 0F8h, 5Eh, 5Fh, 1Fh, 5Dh + db 0CAh, 8, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3B4 proc far ; CODE XREF: sub_2894+1Dp + +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push ds + lds dx, [bp+arg_0] + mov bx, [bp+arg_4] + mov ah, 3Fh ; '?' + mov cx, 20h ; ' ' + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + push ds + pop es + assume es:dseg + pop ds + sbb cx, cx + xor ax, cx + sub ax, cx + jb short loc_3EB + push si + push di + mov si, 1C4h + mov di, dx + mov cx, 5 + repe cmpsb + pop di + pop si + jnz short loc_3E7 + mov ax, 0 + pop bp + retf 6 +; --------------------------------------------------------------------------- + +loc_3E7: ; CODE XREF: sub_3B4+2Aj + mov ax, 0FFF3h + stc + +loc_3EB: ; CODE XREF: sub_3B4+1Aj + pop bp + retf 6 +sub_3B4 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3F0 proc far ; CODE XREF: sub_2894+3Fp + +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push si + cld + push ds + lds bx, [bp+arg_0] + mov cx, [bx+1Ch] + mov si, [bx+1Eh] + pop ds + +loc_400: ; DATA XREF: sub_11FE-1BFr + mov ax, 0 + jcxz short loc_44A + push cx + push cs + call near ptr sub_2238 + jb short loc_44A + push ds + mov ds, ax + xor dx, dx + mov bx, [bp+arg_4] + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + mov ax, 0FFF3h + jb short loc_442 + mov dx, si + xor si, si + nop + +loc_422: ; CODE XREF: sub_3F0+45j + lodsb + cmp al, 10h + jz short loc_43C + add si, dx + sub si, 3 + lodsw + or ax, ax + jz short loc_437 + sub cx, dx + mov dx, ax + ja short loc_422 + +loc_437: ; CODE XREF: sub_3F0+3Fj + xor ax, ax + jmp short loc_442 +; --------------------------------------------------------------------------- + nop + +loc_43C: ; CODE XREF: sub_3F0+35j + lodsw + lodsb + and ax, 0Fh + nop + +loc_442: ; CODE XREF: sub_3F0+2Bj sub_3F0+49j + mov bx, ds + pop ds + push bx + push cs + call near ptr sub_2222 + +loc_44A: ; CODE XREF: sub_3F0+13j sub_3F0+1Aj + pop si + pop bp + retf 6 +sub_3F0 endp + +; --------------------------------------------------------------------------- + db 90h + db 4 dup(0) +; --------------------------------------------------------------------------- + +loc_454: ; CODE XREF: sub_315A+40p sub_319E+25p + cmp bx, 2 + jnb short locret_49A + shl bx, 1 +; --------------------------------------------------------------------------- + db 89h +byte_45C db 87h ; DATA XREF: sub_11FE:loc_104Br + ; sub_1392+4r + db 0BEh, 1, 0A1h, 0BEh, 1, 0Bh, 6, 0C0h, 1, 5, 2 dup(0FFh) + db 1Bh, 0C0h, 3Bh, 6, 0BCh, 1, 74h, 29h, 0A3h, 0BCh, 1 + db 77h, 26h, 0FAh, 0B0h, 0Bh, 0E6h, 70h, 0A0h, 0C3h, 1 + db 0E6h, 71h, 6Ah, 70h, 2Eh, 0FFh, 36h, 52h, 4, 2Eh, 0FFh + db 36h, 50h, 4, 90h, 0Eh, 0E8h, 73h, 3, 0E4h, 0A1h, 0Ah + db 6 +byte_495 db 0C2h ; DATA XREF: sub_F478+Aw + db 1, 0E6h, 0A1h, 0FBh +; --------------------------------------------------------------------------- + +locret_49A: ; CODE XREF: seg000:0457j + retn +; --------------------------------------------------------------------------- + nop + db 0FAh, 6Ah, 70h, 0Eh, 68h, 0F8h, 4, 90h, 0Eh, 0E8h, 5Ch + db 3, 2Eh, 89h, 16h, 52h, 4, 2Eh, 0A3h, 50h, 4, 0B4h, 0Ah + db 0BBh, 4, 0F0h, 0E8h, 2Ch, 0, 0B0h, 0Bh, 0E6h, 70h, 0E4h + db 71h, 0A2h, 0C3h, 1, 0Ch, 40h, 8Ah, 0E0h, 0B0h, 0Bh + db 0E6h, 70h, 8Ah, 0C4h, 0E6h, 71h, 0E4h, 0A1h +byte_4D0 db 8Ah ; DATA XREF: sub_11FE-16Er + db 0E0h, 24h, 0FEh, 0E6h, 0A1h, 32h, 0C4h, 0A2h, 0C2h + db 1, 0FBh, 0FAh, 0B0h, 0Ch, 0E6h, 70h, 0E4h, 71h, 0FBh + db 0C3h + +; =============== S U B R O U T I N E ======================================= + + +sub_4E5 proc near + mov al, ah + out 70h, al ; CMOS Memory: + ; used by real-time clock + in al, 71h ; CMOS Memory + and al, bh + or al, bl + xchg ah, al + out 70h, al ; CMOS Memory: + ; used by real-time clock + xchg ah, al + out 71h, al ; CMOS Memory: + ; used by real-time clock + retn +sub_4E5 endp + +; --------------------------------------------------------------------------- + db 50h, 1Eh, 0B8h + dw seg dseg + db 8Eh, 0D8h, 0FCh, 68h +byte_501 db 1Ah ; DATA XREF: sub_11FE-1C8r sub_2E98+Cr ... +; --------------------------------------------------------------------------- + add ax, 3E83h + mov si, 1 + jz short loc_50E + push word_102BE + +loc_50E: ; CODE XREF: seg000:0508j + cmp word_102C0, 0 + jz short locret_519 + push word_102C0 + +locret_519: ; CODE XREF: seg000:0513j + retn +; --------------------------------------------------------------------------- + db 80h, 3Eh, 0C2h, 1, 0, 1Fh, 75h, 6, 58h, 2Eh, 0FFh, 2Eh + db 50h, 4, 0B0h, 20h +byte_52A db 0E6h ; DATA XREF: sub_F104:loc_F1B7r + db 0A0h +byte_52C db 0E6h ; DATA XREF: sub_F104:loc_F1A8r +byte_52D db 20h ; DATA XREF: sub_F104:loc_F1C6r + db 0B0h +byte_52F db 0Ch ; DATA XREF: sub_F104:loc_F18Fr +byte_530 db 0E6h ; DATA XREF: sub_F104:loc_F1D5r +byte_531 db 70h ; DATA XREF: sub_F104+4r +byte_532 db 0E4h ; DATA XREF: sub_F104:loc_F162r +byte_533 db 71h ; DATA XREF: sub_F104:loc_F135r +; --------------------------------------------------------------------------- + mov al, 0Ch + out 70h, al ; CMOS Memory: + ; used by real-time clock + in al, 71h ; CMOS Memory + pop ax + iret + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_53C proc far ; CODE XREF: sub_1C94+Cp seg000:3C96p + +arg_0 = word ptr 6 + + push bp + mov bp, sp + mov es, [bp+arg_0] + assume es:nothing + mov bx, es:0 + mov ah, 3Eh + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + push es + push cs + +loc_54D: ; DATA XREF: sub_12B4+1Fr + call near ptr sub_2664 + pop bp + retf 2 +sub_53C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_554 proc far ; CODE XREF: sub_5D0+29p + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push ds + mov ds, [bp+arg_0] + mov bx, word_10100 + mov cx, off_10106 + mov dx, 8 + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + jb short loc_584 + or ax, ax + jz short loc_584 + dec ax + mov word_10102, ax + mov off_10104, 1 + mov al, byte ptr word_10108 + xor ah, ah + pop ds + pop bp + retf 2 +; --------------------------------------------------------------------------- + +loc_584: ; CODE XREF: sub_554+16j sub_554+1Aj + xor ax, ax + mov word_10102, ax + dec ax + pop ds + pop bp + retf 2 +sub_554 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_590 proc far ; CODE XREF: sub_2894+53p + +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push ds + lds bx, [bp+arg_0] + test byte ptr [bx+5], 80h + pop ds + jz short loc_5C8 + mov ah, 3Fh ; '?' + mov bx, [bp+arg_4] + mov cx, 30h ; '0' + mov dx, 1D9Ah + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + jb short loc_5C8 + mov bx, dx + mov cx, 1004h + +loc_5B2: ; CODE XREF: sub_590+31j + mov dl, [bx] + mov ax, [bx+1] + mov [bx], ax + mov [bx+2], dl + add bx, 3 + dec ch + jnz short loc_5B2 + mov ax, 0 + jmp short loc_5CC +; --------------------------------------------------------------------------- + +loc_5C8: ; CODE XREF: sub_590+Cj sub_590+1Bj + stc + mov ax, 0FFF3h + +loc_5CC: ; CODE XREF: sub_590+36j + pop bp + retf 6 +sub_590 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_5D0 proc far ; CODE XREF: seg000:06EAp sub_1D0C+3Fp + +arg_0 = word ptr 6 + + push bp + mov bp, sp + mov es, [bp+arg_0] + cmp word ptr es:2, 0 + jz short loc_5F7 + dec word ptr es:2 + mov bx, es:4 + inc word ptr es:4 + mov al, es:[bx+8] + xor ah, ah + pop bp + retf 2 +; --------------------------------------------------------------------------- + +loc_5F7: ; CODE XREF: sub_5D0+Cj + push es + push cs + call near ptr sub_554 + pop bp + retf 2 +sub_5D0 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_600 proc far ; CODE XREF: sub_A9C3+24BP + ; sub_C1DD+153P ... + mov bx, sp + push si + push di + mov si, ss:[bx+4] + mov word_10338, 0 + nop + push cs + call near ptr sub_2416 + +loc_613: ; CODE XREF: sub_600+31j + nop + push cs + call loc_1B8A + mov di, si + cmp di, 0 + jle short loc_627 + +loc_61F: ; CODE XREF: sub_600+25j + nop + push cs + call near ptr sub_2416 + dec di + jnz short loc_61F + +loc_627: ; CODE XREF: sub_600+1Dj + add word_10338, 6 + cmp word_10338, 64h ; 'd' + jl short loc_613 + mov word_10338, 64h ; 'd' + nop + push cs + call loc_1B8A + pop di + pop si + retf 2 +sub_600 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_644 proc far ; CODE XREF: sub_A9C3+256P + ; sub_B273+24P ... + mov bx, sp + push si + push di + mov si, ss:[bx+4] + mov word_10338, 64h ; 'd' + nop + push cs + call near ptr sub_2416 + +loc_657: ; CODE XREF: sub_644+2Cj + nop + push cs + call loc_1B8A + mov di, si + cmp di, 0 + jle short loc_66B + +loc_663: ; CODE XREF: sub_644+25j + nop + push cs + call near ptr sub_2416 + dec di + jnz short loc_663 + +loc_66B: ; CODE XREF: sub_644+1Dj + sub word_10338, 6 + jg short loc_657 + mov word_10338, 0 + nop + push cs + call loc_1B8A + pop di + pop si + retf 2 +sub_644 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_682 proc far ; CODE XREF: seg000:3BCEp + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + mov word_10616, 6 + mov ax, word_10370 + add ax, 9 + push ax + push cs + call near ptr sub_2560 + jb short loc_6BE + mov es, ax + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_BAE + jb short loc_6C5 + mov es:0, ax + mov word ptr es:2, 0 + mov ax, word_10370 + mov es:6, ax + mov ax, es + pop bp + retf 4 +; --------------------------------------------------------------------------- + +loc_6BE: ; CODE XREF: sub_682+14j + mov byte_10372, 3 + jmp short loc_6CF +; --------------------------------------------------------------------------- + +loc_6C5: ; CODE XREF: sub_682+22j + push es + push cs + call near ptr sub_2664 + mov byte_10372, 1 + +loc_6CF: ; CODE XREF: sub_682+41j + xor ax, ax + pop bp + retf 4 +sub_682 endp + +; --------------------------------------------------------------------------- + nop + push bp + mov bp, sp + push si + push di + mov di, [bp+0Ah] + mov si, [bp+8] + cmp si, 0 + jle short loc_6FB + +loc_6E6: ; CODE XREF: seg000:06F9j + push word ptr [bp+6] + push cs + call near ptr sub_5D0 + inc ah + jz short loc_6FB + mov es, word ptr [bp+0Ch] + mov es:[di], al + inc di + dec si + jnz short loc_6E6 + +loc_6FB: ; CODE XREF: seg000:06E4j seg000:06EFj + mov ax, di + sub ax, [bp+0Ah] + pop di + pop si + pop bp + retf 8 +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov es, word ptr [bp+0Ah] + mov ax, es:2 + +loc_710: ; DATA XREF: sub_1392:loc_13D7r + mov dx, [bp+6] + mov cx, [bp+8] + or cx, cx + jnz short loc_72E + cmp dx, ax + ja short loc_72E + sub es:2, dx + add es:4, dx + xor ax, ax + pop bp + retf 6 +; --------------------------------------------------------------------------- + +loc_72E: ; CODE XREF: seg000:0718j seg000:071Cj + mov bx, es:0 + sub dx, ax + sbb cx, 0 + mov ax, 4201h + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from present location + sbb ax, ax + mov es:2, ax + pop bp + retf 6 +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_748 proc far ; CODE XREF: seg000:1DC0p seg000:3C18p + +arg_0 = byte ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + mov es, [bp+arg_6] + mov bx, 0 + xchg bx, es:2 + mov al, [bp+arg_0] + mov dx, [bp+arg_2] + mov cx, [bp+arg_4] + cmp al, 1 + jnz short loc_768 + sub dx, bx + sbb cx, 0 + +loc_768: ; CODE XREF: sub_748+19j + mov bx, es:0 + mov ah, 42h + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: + ; 0-from beginnig,1-from current,2-from end + sbb ax, ax + pop bp + retf 8 +sub_748 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_778 proc far ; CODE XREF: sub_886+1Ap sub_956+1Dp + +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push ds + lds dx, [bp+arg_0] + mov ax, [bp+arg_4] + int 21h ; DOS - + pop ds + sbb dx, dx + xor ax, dx + sub ax, dx + pop bp + retf 6 +sub_778 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_790 proc far ; CODE XREF: sub_AE4+5p + mov bx, sp + mov bx, ss:[bx+4] + mov ax, 4201h + xor cx, cx + mov dx, cx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from present location + jb short loc_7C0 + push si + push di + push ax + push dx + xor dx, dx + mov ax, 4202h + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from end of file + mov si, ax + mov di, dx + pop cx + pop dx + mov ax, 4200h + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from beginning of file + mov ax, si + mov dx, di + pop di + pop si + retf 2 +; --------------------------------------------------------------------------- + +loc_7C0: ; CODE XREF: sub_790+Fj + neg ax + sbb dx, dx + retf 2 +sub_790 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_7C8 proc far ; CODE XREF: sub_1B84+2p + mov ax, 0C00h + int 21h ; DOS - CLEAR KEYBOARD BUFFER + ; AL must be 01h, 06h, 07h, 08h, or 0Ah. + retf +sub_7C8 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_7CE proc far ; CODE XREF: sub_301A+51p + +arg_0 = word ptr 6 +arg_2 = dword ptr 8 +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push ds + mov bx, [bp+arg_6] + lds dx, [bp+arg_2] + mov cx, [bp+arg_0] + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + pop ds + jnb short loc_7E4 + neg ax + +loc_7E4: ; CODE XREF: sub_7CE+12j + pop bp + retf 8 +sub_7CE endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_7E8 proc far ; CODE XREF: sub_301A+2Fp sub_301A+3Dp + +arg_0 = byte ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + mov bx, [bp+arg_6] + mov dx, [bp+arg_2] + mov cx, [bp+arg_4] + mov al, [bp+arg_0] + mov ah, 42h + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: + ; 0-from beginnig,1-from current,2-from end + jnb short loc_800 + neg ax + cwd + +loc_800: ; CODE XREF: sub_7E8+13j + pop bp + retf 8 +sub_7E8 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_804 proc far ; CODE XREF: sub_2320+34p sub_2320+5Bp ... + +arg_0 = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + push ds + push bx + push es + mov al, [bp+arg_4] + lds dx, [bp+arg_0] + mov ah, 35h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov ah, 25h + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + mov ax, bx + mov dx, es + pop es + pop bx + pop ds + pop bp + +locret_820: + retf 6 +sub_804 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_824 proc far ; CODE XREF: sub_85A+1p sub_A6D1+3P ... + mov al, 0 + out 7Ch, al + mov al, 7 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 5 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 80h ; '' + out 7Ch, al + mov al, 6 + out 6Ah, al ; PC-98 GDC (6a): + ; + retf +sub_824 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_83A proc far ; CODE XREF: sub_85A+27p sub_A8EC+30P ... + mov ax, 0FFF0h + mov dx, 4A0h + out dx, ax + mov ax, 0FFFFh + mov dx, 4A8h + out dx, ax + mov al, 7 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 4 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 0 + out 7Ch, al + mov al, 6 + out 6Ah, al ; PC-98 GDC (6a): + ; + retf +sub_83A endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_85A proc far ; CODE XREF: sub_EC36+3CP sub_F0B4+22P + push cs + call near ptr sub_824 + mov dx, 4A0h + mov ax, 0FFF0h + out dx, ax + mov dx, 4A2h + mov ax, 0FFh + out dx, ax + mov dx, 4A8h + mov ax, 0FFFFh + out dx, ax + mov dx, 4ACh + xor ax, ax + out dx, ax + mov dx, 4AEh + mov ax, 0Fh + out dx, ax + push cs + call near ptr sub_83A + retf +sub_85A endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_886 proc far ; CODE XREF: sub_B6A3+BP + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + mov ax, 0 + mov bx, word_102FE + cmp bx, 0FFFFh + jnz short loc_8D6 + mov ax, 3D02h + push ax + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_778 + or ax, dx + mov word_102FE, ax + mov cx, ax + xor ax, ax + mov word_11E90, ax + mov word_11E8E, ax + mov word_11E92, ax + mov word_11E94, ax + mov word_11E8A, ax + mov word_11E8C, ax + inc dx + jz short loc_8D6 + mov bx, cx + xor cx, cx + mov dx, cx + mov ax, 4202h + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from end of file + mov word_11E8A, ax + mov word_11E8C, dx + mov ax, 1 + +loc_8D6: ; CODE XREF: sub_886+Dj sub_886+39j + pop bp + retf 4 +sub_886 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_8DA proc far ; CODE XREF: sub_946+1p sub_AA2+1p + mov bx, word_102FE + cmp bx, 0FFFFh + jz short locret_944 + mov ax, word_11E8E + cmp word_11E90, ax + jnb short loc_918 + push ds + mov cx, word_11E8E + lds dx, dword_11E86 + mov ah, 40h + int 21h ; DOS - 2+ - WRITE TO FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer + pop ds + jb short loc_90B + add word_11E8A, ax + adc word_11E8C, 0 + cmp word_11E8E, ax + jz short loc_911 + +loc_90B: ; CODE XREF: sub_8DA+20j + mov word_11E94, 1 + +loc_911: ; CODE XREF: sub_8DA+2Fj + mov word_11E8E, 0 + retf +; --------------------------------------------------------------------------- + +loc_918: ; CODE XREF: sub_8DA+10j + cmp word_11E90, 0 + jz short locret_944 + mov dx, ax + mov cx, 0 + add dx, word_11E8A + mov word_11E90, cx + mov word_11E8E, cx + adc cx, word_11E8C + mov ax, 4200h + mov bx, word_102FE + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from beginning of file + mov word_11E8A, ax + mov word_11E8C, dx + +locret_944: ; CODE XREF: sub_8DA+7j sub_8DA+43j + retf +sub_8DA endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_946 proc far ; CODE XREF: sub_3980+3Bp sub_A545+1AP ... + push cs + call near ptr sub_8DA + mov ah, 3Eh + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + mov word_102FE, 0FFFFh + retf +sub_946 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_956 proc far ; CODE XREF: sub_B590+88P + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + mov ax, 0 + mov bx, word_102FE + cmp bx, 0FFFFh + jnz short loc_992 + mov cx, 20h ; ' ' + mov ah, 3Ch ; '<' + push ax + push [bp+arg_2] + push [bp+arg_0] + nop + push cs + call near ptr sub_778 + or ax, dx + mov word_102FE, ax + xor ax, ax + mov word_11E90, ax + mov word_11E8E, ax + mov word_11E92, ax + mov word_11E94, ax + mov word_11E8A, ax + mov word_11E8C, ax + mov ax, dx + inc ax + +loc_992: ; CODE XREF: sub_956+Dj + pop bp + retf 4 +sub_956 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_996 proc far ; CODE XREF: sub_B646+7P + mov bx, sp + push word ptr ss:[bx+6] + push word ptr ss:[bx+4] + nop + push cs + call near ptr sub_BAE + jb short loc_9AC + xchg ax, bx + mov ah, 3Eh + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + +loc_9AC: ; CODE XREF: sub_996+Fj + sbb ax, ax + inc ax + retf 4 +sub_996 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_9B2 proc far ; CODE XREF: sub_3980+21p sub_3980+37p ... + +arg_0 = word ptr 6 +arg_2 = dword ptr 8 + + push bp + mov bp, sp + push si + push di + cmp word_102FC, 0 + jz short loc_A36 + mov bx, [bp+arg_0] + les di, [bp+arg_2] + +loc_9C4: ; CODE XREF: sub_9B2+7Fj + mov ax, word_11E90 + cmp word_11E8E, ax + jb short loc_9FA + add word_11E8A, ax + adc word_11E8C, 0 + push bx + push ds + mov cx, word_102FC + mov bx, word_102FE + lds dx, dword_11E86 + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + pop ds + pop bx + cmc + sbb dx, dx + and ax, dx + mov word_11E90, ax + jz short loc_A55 + mov word_11E8E, 0 + +loc_9FA: ; CODE XREF: sub_9B2+19j + mov si, word_11E90 + sub si, word_11E8E + sub si, bx + sbb ax, ax + and si, ax + add si, bx + mov ax, es + or ax, di + jz short loc_A2B + or si, si + jz short loc_A2B + push si + push ds + mov cx, si + mov ax, word_11E8E + lds si, dword_11E86 + add si, ax + shr cx, 1 + rep movsw + adc cx, cx + rep movsb + pop ds + pop si + +loc_A2B: ; CODE XREF: sub_9B2+5Cj sub_9B2+60j + add word_11E8E, si + sub bx, si + jnz short loc_9C4 + jmp short loc_A5B +; --------------------------------------------------------------------------- + nop + +loc_A36: ; CODE XREF: sub_9B2+Aj + push ds + mov cx, [bp+arg_0] + mov bx, word_102FE + lds dx, [bp+arg_2] + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + pop ds + add word_11E8A, ax + adc word_11E8C, 0 + mov bx, cx + sub bx, ax + jz short loc_A5B + +loc_A55: ; CODE XREF: sub_9B2+40j + mov word_11E92, 1 + +loc_A5B: ; CODE XREF: sub_9B2+81j sub_9B2+A1j + mov ax, [bp+arg_0] + sub ax, bx + pop di + pop si + pop bp + retf 6 +sub_9B2 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A66 proc far ; CODE XREF: sub_3980+16p sub_A545+9P ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + xor ax, ax + mov bx, word_102FE + cmp bx, 0FFFFh + jnz short loc_A9D + push [bp+arg_2] + push [bp+arg_0] + nop + push cs + call near ptr sub_BAE + sbb bx, bx + or ax, bx + mov word_102FE, ax + xor ax, ax + mov word_11E90, ax + mov word_11E8A, ax + mov word_11E8C, ax + mov word_11E8E, ax + mov word_11E92, ax + mov word_11E94, ax + lea ax, [bx+1] + +loc_A9D: ; CODE XREF: sub_A66+Cj + pop bp + retf 4 +sub_A66 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_AA2 proc far ; CODE XREF: sub_B646+32P sub_B6A3+2BP ... + push cs + call near ptr sub_8DA + cmp bx, 0FFFFh + jz short locret_AD3 + push bp + mov bp, sp + mov al, [bp+6] + mov ah, 42h ; 'B' + mov dx, [bp+8] + mov cx, [bp+0Ah] + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: + ; 0-from beginnig,1-from current,2-from end + pop bp + mov ax, 4201h + mov dx, 0 + mov cx, dx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from present location + mov word_11E92, 0 + mov word_11E8A, ax + mov word_11E8C, dx + +locret_AD3: ; CODE XREF: sub_AA2+7j + retf 6 +sub_AA2 endp + +; --------------------------------------------------------------------------- + mov ax, word_11E8E + xor dx, dx + add ax, word_11E8A + adc dx, word_11E8C + retf + +; =============== S U B R O U T I N E ======================================= + + +sub_AE4 proc far ; CODE XREF: sub_A695:loc_A6ADP + push word_102FE + push cs + call near ptr sub_790 + jb short loc_AEF + retf +; --------------------------------------------------------------------------- + +loc_AEF: ; CODE XREF: sub_AE4+8j + mov ax, dx + retf +sub_AE4 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_AF2 proc far ; CODE XREF: sub_B590+9DP sub_B6A3+36P ... + +arg_0 = word ptr 6 +arg_2 = dword ptr 8 + + push bp + mov bp, sp + push si + push di + cmp word_102FC, 0 + jz short loc_B68 + mov bx, [bp+arg_0] + mov si, word ptr [bp+arg_2] + +loc_B04: ; CODE XREF: sub_AF2+6Ej + mov cx, word_102FC + sub cx, word_11E8E + sub cx, bx + sbb ax, ax + and cx, ax + add cx, bx + les di, dword_11E86 + add di, word_11E8E + sub bx, cx + add word_11E8E, cx + push ds + mov ds, word ptr [bp+arg_2+2] + shr cx, 1 + rep movsw + adc cx, cx + rep movsb + pop ds + or ax, ax + jns short loc_B5E + push ds + push bx + mov cx, word_102FC + mov bx, word_102FE + lds dx, dword_11E86 + mov ah, 40h + int 21h ; DOS - 2+ - WRITE TO FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer + pop bx + pop ds + jb short loc_B7A + cmp word_102FC, ax + jnz short loc_B7A + mov word_11E8E, 0 + add word_11E8A, ax + adc word_11E8C, 0 + +loc_B5E: ; CODE XREF: sub_AF2+3Fj + or bx, bx + jnz short loc_B04 + mov ax, 1 + jmp short loc_B90 +; --------------------------------------------------------------------------- + nop + +loc_B68: ; CODE XREF: sub_AF2+Aj + push ds + mov cx, [bp+arg_0] + mov bx, word_102FE + lds dx, [bp+arg_2] + mov ah, 40h + int 21h ; DOS - 2+ - WRITE TO FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer + pop ds + jnb short loc_B82 + +loc_B7A: ; CODE XREF: sub_AF2+55j sub_AF2+5Bj + mov word_11E94, 1 + xor ax, ax + +loc_B82: ; CODE XREF: sub_AF2+86j + add word_11E8A, ax + adc word_11E8C, 0 + add ax, 0FFFFh + sbb ax, ax + +loc_B90: ; CODE XREF: sub_AF2+73j + pop di + pop si + mov sp, bp + pop bp + retf 6 +sub_AF2 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_B98 proc far ; CODE XREF: sub_2894+68p sub_2894+7Dp ... + mov bx, sp + mov ah, 3Eh ; '>' + mov bx, ss:[bx+4] + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + mov ax, 0 + jnb short locret_BAA + mov ax, 0FFF3h + +locret_BAA: ; CODE XREF: sub_B98+Dj + retf 2 +sub_B98 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_BAE proc far ; CODE XREF: sub_682+1Fp sub_996+Cp ... + mov bx, sp + mov ah, 3Dh ; '=' + mov al, byte_10300 + push ds + lds dx, ss:[bx+4] + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read + pop ds + jb short loc_BC2 + retf 4 +; --------------------------------------------------------------------------- + +loc_BC2: ; CODE XREF: sub_BAE+Fj + mov ax, 0FFFEh + retf 4 +sub_BAE endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_BCE + +loc_BC8: ; CODE XREF: sub_BCE+1Fj sub_BCE+35j ... + pop di + pop si + pop bp + retf 8 +; END OF FUNCTION CHUNK FOR sub_BCE + +; =============== S U B R O U T I N E ======================================= + + +sub_BCE proc far ; CODE XREF: sub_DFEC+58P + ; sub_DFEC+282P ... + +; FUNCTION CHUNK AT 0BC8 SIZE 00000006 BYTES + + push bp + push si + push di + cli + add sp, 0Ah + pop di + pop si + pop ax + pop bx + sub sp, 12h + sti + cmp bx, si + jle short loc_BE3 + xchg bx, si + +loc_BE3: ; CODE XREF: sub_BCE+11j + mov bp, word_102CA + mov dx, word_102CC + sub si, bp + jl short loc_BC8 + sub bx, bp + cmp bx, 8000h + sbb cx, cx + and bx, cx + sub si, dx + sbb cx, cx + and si, cx + add si, dx + sub si, bx + jl short loc_BC8 + add bx, bp + cmp ax, di + jle short loc_C0C + xchg ax, di + +loc_C0C: ; CODE XREF: sub_BCE+3Bj + mov dx, word_102D0 + mov bp, word_102D2 + sub di, dx + js short loc_BC8 + sub ax, dx + cmp ax, 8000h + sbb cx, cx + and ax, cx + sub di, bp + sbb cx, cx + and di, cx + add di, bp + sub di, ax + jl short loc_BC8 + mov dx, ax + shl ax, 2 + add ax, dx + add ax, word_102D6 + mov es, ax + mov dx, di + shl di, 2 + add di, dx + shl di, 4 + mov dx, bx + shr dx, 4 + shl dx, 1 + add di, dx + and bx, 0Fh + add si, bx + sub si, 10h + shl bx, 1 + mov dx, [bx+1DAh] + not dx + mov bx, si + and bx, 0Fh + shl bx, 1 + mov bx, [bx+1DCh] + sar si, 4 + js short loc_C8A + lea bp, [si+2Ah] + shl bp, 1 + +loc_C72: ; CODE XREF: sub_BCE+B3j + mov ax, dx + stosw + mov ax, 0FFFFh + mov cx, si + rep stosw + mov ax, bx + stosw + sub di, bp + jnb short loc_C72 + pop di + pop si + pop bp + retf 8 +; --------------------------------------------------------------------------- + nop + +loc_C8A: ; CODE XREF: sub_BCE+9Dj + mov bp, 52h ; 'R' + mov ax, dx + and ax, bx + nop + +loc_C92: ; CODE XREF: sub_BCE+C7j + stosw + sub di, bp + jnb short loc_C92 + pop di + pop si + pop bp + retf 8 +sub_BCE endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_C9E proc far ; CODE XREF: sub_A9C3+437P + ; sub_B273+43P ... + push di + mov di, sp + mov ax, word_102D0 + mov cx, ax + mov bx, ss:[di+0Ah] + sub bx, ax + jg short loc_CB0 + xor bx, bx + +loc_CB0: ; CODE XREF: sub_C9E+Ej + mov ax, bx + shl ax, 2 + add ax, bx + add ax, word_102D6 + mov es, ax + mov ax, word_102D2 + mov dx, ss:[di+6] + sub dx, cx + cmp dx, ax + jl short loc_CCC + mov dx, ax + +loc_CCC: ; CODE XREF: sub_C9E+2Aj + sub dx, bx + jl short loc_D02 + mov ax, ss:[di+0Ch] + mov bx, ss:[di+8] + sub bx, ax + jl short loc_D02 + inc bx + mov di, dx + shl di, 2 + add di, dx + shl di, 4 + add di, ax + lea dx, [bx+50h] + mov ax, 0FFFFh + test di, 1 + jnz short loc_D14 + shr bx, 1 + jb short loc_D06 + nop + +loc_CFA: ; CODE XREF: sub_C9E+62j + mov cx, bx + rep stosw + sub di, dx + jnb short loc_CFA + +loc_D02: ; CODE XREF: sub_C9E+30j sub_C9E+3Cj + pop di + retf 8 +; --------------------------------------------------------------------------- + +loc_D06: ; CODE XREF: sub_C9E+59j sub_C9E+6Fj + mov cx, bx + rep stosw + stosb + sub di, dx + jnb short loc_D06 + pop di + retf 8 +; --------------------------------------------------------------------------- + nop + +loc_D14: ; CODE XREF: sub_C9E+55j + shr bx, 1 + jb short loc_D28 + dec bx + nop + +loc_D1A: ; CODE XREF: sub_C9E+84j + mov cx, bx + stosb + rep stosw + stosb + sub di, dx + jnb short loc_D1A + pop di + retf 8 +; --------------------------------------------------------------------------- + +loc_D28: ; CODE XREF: sub_C9E+78j sub_C9E+91j + mov cx, bx + stosb + rep stosw + sub di, dx + jnb short loc_D28 + pop di + retf 8 +sub_C9E endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D36 proc far ; CODE XREF: sub_DFEC+FFP + ; sub_DFEC+194P + +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + enter 2, 0 + push si + push di + mov ax, [bp+arg_0] + test ax, ax + jz short loc_DBC + mov si, ax + mov [bp+var_2], ax + mov di, 0 + +loc_D4B: ; CODE XREF: sub_D36+7Ej + mov bx, [bp+arg_4] + mov ax, bx + sub ax, si + push ax + add bx, si + push bx + mov ax, [bp+arg_2] + sub ax, di + push ax + push cs + call near ptr sub_E5E + mov bx, [bp+arg_4] + mov ax, bx + sub ax, si + push ax + add bx, si + push bx + mov ax, [bp+arg_2] + add ax, di + push ax + push cs + call near ptr sub_E5E + mov ax, di + stc + rcl ax, 1 + sub [bp+var_2], ax + jns short loc_DB1 + mov bx, [bp+arg_4] + mov ax, bx + sub ax, di + push ax + add bx, di + push bx + mov ax, [bp+arg_2] + sub ax, si + push ax + push cs + call near ptr sub_E5E + mov bx, [bp+arg_4] + mov ax, bx + sub ax, di + push ax + add bx, di + push bx + mov ax, [bp+arg_2] + add ax, si + push ax + push cs + call near ptr sub_E5E + dec si + mov ax, si + shl ax, 1 + add [bp+var_2], ax + +loc_DB1: ; CODE XREF: sub_D36+47j + inc di + cmp si, di + jnb short loc_D4B + pop di + pop si + leave + retf 6 +; --------------------------------------------------------------------------- + +loc_DBC: ; CODE XREF: sub_D36+Bj + push [bp+arg_4] + push [bp+arg_2] + push cs + call near ptr sub_EE4 + pop di + pop si + leave + retf 6 +sub_D36 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DCC proc far ; CODE XREF: sub_D31F+5FP + ; sub_E41D+3D6P + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + mov ax, [bp+arg_6] + mov bx, [bp+arg_2] + test ax, bx + js short loc_E58 + cmp ax, bx + jl short loc_DDE + xchg ax, bx + +loc_DDE: ; CODE XREF: sub_DCC+Fj + cmp ax, 8000h + sbb dx, dx + and ax, dx + mov cx, word_10328 + shl cx, 3 + dec cx + sub bx, cx + sbb dx, dx + and bx, dx + add bx, cx + sub bx, ax + jl short loc_E58 + mov word_102CA, ax + mov word_102CC, bx + add ax, bx + mov word_102CE, ax + mov ax, [bp+arg_4] + mov bx, [bp+arg_0] + test ax, bx + js short loc_E58 + cmp ax, bx + jl short loc_E14 + xchg ax, bx + +loc_E14: ; CODE XREF: sub_DCC+45j + cmp ax, 8000h + sbb dx, dx + and ax, dx + mov cx, word_10326 + dec cx + sub bx, cx + sbb dx, dx + and bx, dx + add bx, cx + sub bx, ax + jl short loc_E58 + mov word_102D0, ax + mov cx, ax + mov word_102D2, bx + add ax, bx + mov word_102D4, ax + mov ax, word_10328 + xchg ax, bx + mul bx + mov word_102D8, ax + mov ax, bx + shr ax, 4 + mul cx + add ax, word_10322 + mov word_102D6, ax + mov ax, 1 + pop bp + retf 8 +; --------------------------------------------------------------------------- + +loc_E58: ; CODE XREF: sub_DCC+Bj sub_DCC+2Bj ... + xor ax, ax + pop bp + retf 8 +sub_DCC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E5E proc far ; CODE XREF: sub_D36+27p sub_D36+3Cp ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push di + mov dx, [bp+arg_0] + sub dx, word_102D0 + cmp dx, word_102D2 + ja short loc_EDE + mov cx, [bp+arg_4] + mov bx, [bp+arg_2] + mov bp, dx + shl bp, 2 + add bp, dx + shl bp, 4 + mov ax, word_102CA + sub cx, ax + sub bx, ax + test cx, bx + js short loc_EDE + cmp cx, bx + jg short loc_E90 + xchg cx, bx + +loc_E90: ; CODE XREF: sub_E5E+2Ej + cmp bx, 8000h + sbb dx, dx + and bx, dx + mov di, word_102CC + sub cx, di + sbb dx, dx + and cx, dx + add cx, di + sub cx, bx + jl short loc_EDE + mov es, word_102D6 + add bx, ax + mov di, bx + shr di, 4 + shl di, 1 + add di, bp + and bx, 0Fh + add cx, bx + sub cx, 10h + shl bx, 1 + mov ax, [bx+1DAh] + not ax + mov bx, cx + and bx, 0Fh + shl bx, 1 + sar cx, 4 + js short loc_ED9 + stosw + mov ax, 0FFFFh + rep stosw + +loc_ED9: ; CODE XREF: sub_E5E+73j + and ax, [bx+1DCh] + stosw + +loc_EDE: ; CODE XREF: sub_E5E+Fj sub_E5E+2Aj ... + pop di + pop bp + retf 6 +sub_E5E endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EE4 proc far ; CODE XREF: sub_D36+8Dp + +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + mov bx, bp + mov bp, sp + mov cx, [bp+arg_2] + mov dx, [bp+arg_0] + mov bp, bx + cmp cx, word_102CA + jl short locret_F24 + cmp cx, word_102CE + jg short locret_F24 + sub dx, word_102D0 + jl short locret_F24 + cmp dx, word_102D2 + jg short locret_F24 + mov ax, dx + shl ax, 2 + add dx, ax + add dx, word_102D6 + mov es, dx + mov bx, cx + shr bx, 3 + and cl, 7 + mov al, 80h ; '' + shr al, cl + mov es:[bx], al + +locret_F24: ; CODE XREF: sub_EE4+10j sub_EE4+16j ... + retf 4 +sub_EE4 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_F28 proc far ; CODE XREF: sub_A9C3+426P + ; sub_B273+2FP ... + mov bx, sp + mov al, ss:[bx+6] + mov ah, ss:[bx+4] + mov dx, 7Eh ; '~' + pushf + cli + out 7Ch, al + shr ah, 1 + sbb al, al + out dx, al + shr ah, 1 + sbb al, al + out dx, al + shr ah, 1 + sbb al, al + out dx, al + shr ah, 1 + sbb al, al + out dx, al + popf + retf 4 +sub_F28 endp + +; --------------------------------------------------------------------------- + nop + xor al, al + out 7Ch, al + retf +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F58 proc far ; CODE XREF: sub_BA84+11BP + ; sub_BA84+12DP + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push di + mov ax, word_102D0 + mov cx, word_102D2 + mov bx, [bp+arg_2] + mov dx, [bp+arg_0] + cmp bx, dx + jl short loc_F6F + xchg bx, dx + +loc_F6F: ; CODE XREF: sub_F58+13j + sub dx, ax + jl short loc_FD8 + sub bx, ax + cmp bh, 80h ; '' + sbb di, di + and bx, di + cmp bx, cx + jg short loc_FD8 + sub dx, cx + sbb di, di + and dx, di + add dx, cx + mov ax, [bp+arg_4] + cmp ax, word_102CA + jl short loc_FD8 + cmp ax, word_102CE + jg short loc_FD8 + mov cx, ax + and cl, 7 + shr ax, 3 + mov di, ax + mov al, 80h ; '' + shr al, cl + mov cx, dx + mov dx, 4Fh ; 'O' + sub cx, bx + imul bx, 50h + add di, bx + mov es, word_102D6 + inc cx + shr cx, 1 + jnb short loc_FBD + stosb + add di, dx + +loc_FBD: ; CODE XREF: sub_F58+60j + shr cx, 1 + jnb short loc_FC7 + stosb + add di, dx + stosb + add di, dx + +loc_FC7: ; CODE XREF: sub_F58+67j + jcxz short loc_FD8 + nop + +loc_FCA: ; CODE XREF: sub_F58+7Ej + stosb + add di, dx + stosb + add di, dx + stosb + add di, dx + stosb + add di, dx + loop loc_FCA + +loc_FD8: ; CODE XREF: sub_F58+19j sub_F58+26j ... + pop di + pop bp + retf 6 +sub_F58 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_FDE proc near ; CODE XREF: sub_1A2E+3Ap sub_1A2E+43p ... + out 0A0h, al ; PIC 2 same as 0020 for PIC 1 + mov al, ah + jmp short $+2 + jmp short $+2 + out 0A0h, al ; PIC 2 same as 0020 for PIC 1 + retn +sub_FDE endp + +; --------------------------------------------------------------------------- + db 0 +; START OF FUNCTION CHUNK FOR sub_11FE + +loc_FEA: ; CODE XREF: sub_11FE+11j + push cs + call near ptr sub_11F0 + jnz short loc_FF5 + mov ax, 40h ; '@' + jmp short loc_1061 +; --------------------------------------------------------------------------- + +loc_FF5: ; CODE XREF: sub_11FE-210j + xor al, al + mov dx, 0FFF7h + mov es, dx + assume es:nothing + mov dx, 1827h + cmp dx, es:0 + jnz short loc_100A + or al, 2Ah + jmp short loc_104B +; --------------------------------------------------------------------------- + +loc_100A: ; CODE XREF: sub_11FE-1FAj + mov dx, 0FD80h + mov es, dx + assume es:nothing + mov dx, 2A27h + cmp dx, es:2 + jnz short loc_1032 + mov ah, es:4 + mov bx, 202h + or al, 22h + +loc_1023: ; CODE XREF: sub_11FE-1D2j + mov dl, [bx] + or dl, dl + jz short loc_104B + inc bx + cmp ah, dl + jnz short loc_1023 + or al, 21h + jmp short loc_104B +; --------------------------------------------------------------------------- + +loc_1032: ; CODE XREF: sub_11FE-1E7j + xor bx, bx + mov es, bx + assume es:seg000 + or al, es:byte_501 + and al, 8 + or al, 20h + mov dh, byte ptr es:loc_400 + and dh, 80h + rol dh, 1 + or al, dh + +loc_104B: ; CODE XREF: sub_11FE-1F6j + ; sub_11FE-1D7j ... + mov dh, es:byte_45C + and dh, 40h + ror dh, 1 + ror dh, 1 + ror dh, 1 + ror dh, 1 + or al, dh + xor ah, ah + xor al, 1 + +loc_1061: ; CODE XREF: sub_11FE-20Bj + mov word_10336, ax + jmp loc_11BE +; END OF FUNCTION CHUNK FOR sub_11FE +; --------------------------------------------------------------------------- + nop +; START OF FUNCTION CHUNK FOR sub_11FE + +loc_1068: ; CODE XREF: sub_11FE:loc_1212j + push cs + call near ptr sub_11F0 + jnz short loc_1074 + mov ax, 80h ; '' + jmp loc_119D +; --------------------------------------------------------------------------- + +loc_1074: ; CODE XREF: sub_11FE-192j + xor bx, bx + mov ax, 4F01h + int 2Fh + or bx, bx + jz short loc_10A5 + push ds + mov ax, 0F000h + mov ds, ax + assume ds:nothing + mov al, ds:0E010h + cmp al, 54h ; 'T' + jnz short loc_109F + xor ax, ax + mov ds, ax + assume ds:seg000 + mov al, byte_4D0 + not al + and al, 1 + or al, 16h + xor ah, ah + pop ds + assume ds:dseg + jmp loc_119D +; --------------------------------------------------------------------------- + +loc_109F: ; CODE XREF: sub_11FE-174j + pop ds + +loc_10A0: ; CODE XREF: sub_11FE-136j + mov bx, 1Ah + jmp short loc_10F0 +; --------------------------------------------------------------------------- + +loc_10A5: ; CODE XREF: sub_11FE-181j + xor bx, bx + mov ax, 5001h + int 10h ; - VIDEO - SCROLOCK.COM - INSTALLATION CHECK + ; Return: BX = 1954h if installed + ; AL = 00 if inactive, nonzero if active + or bl, bl + jz short loc_10C0 + mov ax, 14h + cmp bx, 51h ; 'Q' + jnz short loc_10BB + jmp loc_119D +; --------------------------------------------------------------------------- + +loc_10BB: ; CODE XREF: sub_11FE-148j + or ax, bx + jmp loc_119D +; --------------------------------------------------------------------------- + +loc_10C0: ; CODE XREF: sub_11FE-150j + mov ax, 3000h + int 21h ; DOS - GET DOS VERSION + ; Return: AL = major version number (00h for DOS 1.x) + cmp bh, 0FFh + jz short loc_10A0 + and bh, 0FEh + cmp bh, 0EEh ; 'E + jnz short loc_10D6 + mov dl, 18h + jmp short loc_10F0 +; --------------------------------------------------------------------------- + +loc_10D6: ; CODE XREF: sub_11FE-12Ej + mov ax, 4900h + pushf + int 15h + sbb ax, ax + popf + test ax, ax + jz short loc_10E6 + jmp loc_1188 +; --------------------------------------------------------------------------- + +loc_10E6: ; CODE XREF: sub_11FE-11Dj + or bl, bl + jz short loc_10ED + jmp loc_1188 +; --------------------------------------------------------------------------- + +loc_10ED: ; CODE XREF: sub_11FE-116j + mov bx, 12h + +loc_10F0: ; CODE XREF: sub_11FE-15Bj + ; sub_11FE-12Aj + push ds + push si + xor ax, ax + mov ds, ax + assume ds:seg000 + mov ax, 6300h + int 21h ; DOS - 3.2+ only - GET DOUBLE BYTE CHARACTER SET LEAD TABLE + mov ax, [si] + not ax + and ax, 1 + or bx, ax + pop si + pop ds + assume ds:dseg + pushf + push bx + mov ax, 5010h + int 15h + cmp ah, 86h ; 'E + jnz short loc_1116 + xor ax, ax + jmp short loc_111D +; --------------------------------------------------------------------------- + +loc_1116: ; CODE XREF: sub_11FE-EEj + mov ax, es:[bx+2] + and ax, 1 + +loc_111D: ; CODE XREF: sub_11FE-EAj + pop bx + popf + jb short loc_114B + ror al, 1 + ror al, 1 + or ax, bx + test ax, 40h + jz short loc_114B + mov bx, ax + mov dx, 20Ch + mov ax, 3D00h + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read + jnb short loc_113F + xor bx, 40h + mov ax, bx + jmp short loc_119D +; --------------------------------------------------------------------------- + +loc_113F: ; CODE XREF: sub_11FE-C8j + push bx + mov bx, ax + mov ah, 3Eh + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + pop bx + mov ax, bx + jmp short loc_119D +; --------------------------------------------------------------------------- + +loc_114B: ; CODE XREF: sub_11FE-DFj sub_11FE-D4j + push bx + mov dx, 215h + mov ax, 3D00h + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read + jb short loc_1183 + push ax + mov dx, 21Eh + mov cx, 4 + mov bx, ax + mov ax, 4402h + int 21h ; DOS - 2+ - IOCTL - READ CHARACTER DEVICE CONTROL STRING + ; BX = device handle, CX = number of bytes to read DS:DX -> buffer + pop ax + pushf + mov bx, ax + mov ah, 3Eh + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + popf + jb short loc_1183 + mov ax, 50F1h + call dword_1031E + or ah, ah + jnz short loc_1183 + pop bx + or bx, 200h + mov ax, bx + jmp short loc_119D +; --------------------------------------------------------------------------- + +loc_1183: ; CODE XREF: sub_11FE-AAj sub_11FE-91j ... + pop bx + mov ax, bx + jmp short loc_119D +; --------------------------------------------------------------------------- + +loc_1188: ; CODE XREF: sub_11FE-11Bj + ; sub_11FE-114j + push ds + xor ax, ax + mov ds, ax + assume ds:seg000 + mov ax, word ptr loc_1F3+1 + or ax, word ptr loc_1F3+3 + pop ds + assume ds:dseg + mov ax, 10h + jnz short loc_119D + mov ax, 11h + +loc_119D: ; CODE XREF: sub_11FE-18Dj + ; sub_11FE-162j ... + mov dx, ax + mov ax, 1A00h + xor bx, bx + xor cx, cx + int 2Fh ; - Multiplex - DOS 4+ ANSI.SYS internal - INSTALLATION CHECK + ; Return: AL = FFh if installed + mov ah, al + cmp ax, 0FFFFh + jnz short loc_11B4 + and ax, 110h + or dx, ax + +loc_11B4: ; CODE XREF: sub_11FE-51j + mov word_10336, dx + mov ax, dx + ; Hack + db 0e9h + db 001h + db 000h +; END OF FUNCTION CHUNK FOR sub_11FE +; --------------------------------------------------------------------------- + nop +; START OF FUNCTION CHUNK FOR sub_11FE + +loc_11BE: ; CODE XREF: sub_11FE-19Aj + ; sub_11FE-44j + mov ax, 3306h + int 21h ; DOS - 5+ Get TRUE Version Number (BL major, BH minor, DL revision, DH flags) + cmp al, 0FFh + jz short loc_11DC + cmp bx, 3205h + jz short loc_11E5 + cmp bl, 0Ah + jz short loc_11E5 + cmp bl, 14h + jz short loc_11E5 + cmp bl, 1Eh + jz short loc_11E5 + +loc_11DC: ; CODE XREF: sub_11FE-39j + mov ax, 1600h + int 2Fh ; - Multiplex - MS WINDOWS - ENHANCED WINDOWS INSTALLATION CHECK + ; Return: AL = anything else + ; AL = Windows major version number >= 3 + ; AH = Windows minor version number + and al, 7Fh + jz short loc_11EB + +loc_11E5: ; CODE XREF: sub_11FE-33j sub_11FE-2Ej ... + or word_10336, 8000h + +loc_11EB: ; CODE XREF: sub_11FE-1Bj + mov ax, word_10336 + retf +; END OF FUNCTION CHUNK FOR sub_11FE +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_11F0 proc far ; CODE XREF: sub_11FE-213p + ; sub_11FE-195p ... + mov ax, 0FFFFh + mov es, ax + assume es:nothing + mov ax, 0FC00h + sub ax, es:3 + retf +sub_11F0 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_11FE proc far ; CODE XREF: sub_3556+Ap + +; FUNCTION CHUNK AT 0FEA SIZE 0000007D BYTES +; FUNCTION CHUNK AT 1068 SIZE 00000155 BYTES +; FUNCTION CHUNK AT 11BE SIZE 00000031 BYTES + + push cs + call near ptr sub_11F0 + jz short loc_1215 + mov ah, 0Fh + int 10h ; - VIDEO - GET CURRENT VIDEO MODE + ; Return: AH = number of columns on screen + ; AL = current video mode + ; BH = current active display page + cmp ah, 0Fh + jnz short loc_1212 + nop + nop + jmp loc_FEA +; --------------------------------------------------------------------------- + +loc_1212: ; CODE XREF: sub_11FE+Dj + jmp loc_1068 +; --------------------------------------------------------------------------- + +loc_1215: ; CODE XREF: sub_11FE+4j + mov ax, 40h ; '@' + retf +sub_11FE endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_121A proc far ; CODE XREF: sub_BCED+26P + ; sub_C1DD+1BCP ... + +arg_0 = word ptr 4 +arg_2 = byte ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + mov dx, bp + mov bp, sp + mov cx, di + mov ax, [bp+arg_4] + mov di, ax + shl ax, 1 + shl ax, 1 + add di, ax + shl di, 1 + add di, word_105FC + mov es, di + assume es:nothing + mov di, [bp+arg_6] + shl di, 1 + mov ah, [bp+arg_2] + mov al, 0 + rol ax, 1 + shr ax, 1 + adc ax, 56h ; 'V' + mov bx, [bp+arg_0] + mov bp, dx + mov es:[di+2000h], bx + stosw + or ah, 80h + mov es:[di+2000h], bx + stosw + mov di, cx + retf 8 +sub_121A endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_125E proc far ; CODE XREF: sub_DBE6+102P + +arg_0 = word ptr 4 +arg_2 = dword ptr 6 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch + + mov dx, bp + mov bp, sp + push si + push di + mov ax, [bp+arg_6] + mov di, ax + shl ax, 1 + shl ax, 1 + add di, ax + shl di, 1 + add di, word_105FC + mov es, di + mov di, [bp+arg_8] + shl di, 1 + push ds + lds si, [bp+arg_2] + mov cx, di + mov bx, [bp+arg_0] + mov bp, dx + lodsb + or al, al + jz short loc_12A0 + +loc_128C: ; CODE XREF: sub_125E+40j + mov ah, al + mov al, 0 + rol ax, 1 + shr ax, 1 + adc al, 56h ; 'V' + stosw + or ah, 80h + stosw + lodsb + or al, al + jnz short loc_128C + +loc_12A0: ; CODE XREF: sub_125E+2Cj + xchg cx, di + sub cx, di + shr cx, 1 + mov ax, bx + add di, 2000h + rep stosw + pop ds + pop di + pop si + retf 0Ah +sub_125E endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_12B4 proc far ; CODE XREF: sub_F0B4+27P + mov ah, 42h ; 'B' + mov ch, 0C0h ; '' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + mov ax, 0A800h + mov word_10322, ax + mov word_102D6, ax + mov word_10324, 3E80h + xor ax, ax + mov word_102CA, ax + mov word_102D0, ax + mov es, ax + assume es:seg000 + mov ah, byte ptr es:loc_54D + and ah, 4 + add ah, 3Fh ; '?' + and ah, 40h + mov word_1032A, ax + mov ax, 27Fh + mov word_102CE, ax + mov word_102CC, ax + mov ax, 190h + mov word_10326, ax + dec ax + mov word_102D4, ax + mov word_102D2, ax + mov word_102D8, 7CB0h + retf +sub_12B4 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_1302 proc far ; CODE XREF: sub_A9C3+2EDP + ; sub_A9C3+2F8P ... + mov al, 80h ; '' + pushf + cli + out 7Ch, al + popf + xor ax, ax + mov dx, 7Eh ; '~' + out dx, al + out dx, al + out dx, al + out dx, al + mov bx, di + xor di, di + mov cx, word_10324 + mov es, word_10322 + assume es:nothing + rep stosw + mov di, bx + out 7Ch, al + retf +sub_1302 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_1326 proc near ; CODE XREF: sub_133C+25p sub_133C+28p ... + xor al, 1 + out 0A6h, al ; Interrupt Controller #2, 8259A + mov ds, bx + mov es, dx + xor di, di + mov si, di + rep movsw + mov cx, di + shr cx, 1 + xchg bx, dx + retn +sub_1326 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_133C proc far ; CODE XREF: sub_A9C3+33DP + ; sub_C1DD+4AP ... + xor dx, dx + mov cx, word_10324 + mov bx, cx + shl bx, 1 + push bx + nop + push cs + call near ptr sub_2238 + xchg ax, dx + jb short locret_138E + xor al, al + out 7Ch, al + mov bx, sp + mov ax, ss:[bx+4] + and al, 1 + push si + push di + push ds + mov bx, 0A800h + call sub_1326 + call sub_1326 + mov bx, 0B000h + call sub_1326 + call sub_1326 + mov bx, 0B800h + call sub_1326 + call sub_1326 + mov bx, 0E000h + call sub_1326 + call sub_1326 + pop ds + pop di + pop si + push dx + nop + push cs + call near ptr sub_2222 + mov ax, 1 + +locret_138E: ; CODE XREF: sub_133C+11j + retf 2 +sub_133C endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_1392 proc far ; CODE XREF: sub_2320+5p + xor ax, ax + mov es, ax + assume es:seg000 + test es:byte_45C, 40h + jz short locret_13E5 + mov bx, sp + mov cx, ss:[bx+6] + mov dx, ss:[bx+4] + mov ah, 31h ; '1' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + mov ah, bh + jcxz short locret_13E5 + and dx, cx + not cx + and ax, cx + or ax, dx + mov cx, ax + mov bh, ah + mov ah, 30h ; '0' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + test word_10600, 1 + jz short loc_13CC + mov ah, 0Ch + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + +loc_13CC: ; CODE XREF: sub_1392+34j + test cl, 1 + jz short loc_13D7 + mov ah, 0Eh + xor dx, dx + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + +loc_13D7: ; CODE XREF: sub_1392+3Dj + test byte ptr es:loc_710+1, 1 + jz short loc_13E3 + mov ah, 11h + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + +loc_13E3: ; CODE XREF: sub_1392+4Bj + mov ax, cx + +locret_13E5: ; CODE XREF: sub_1392+Aj sub_1392+1Cj + retf 4 +sub_1392 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_13E8 proc far ; CODE XREF: sub_A576+8P + mov ah, 41h ; 'A' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + retf +sub_13E8 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_13EE proc far ; CODE XREF: sub_F082+29P + +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + xor cx, cx + les bx, [bp+arg_4] + assume es:nothing + mov ax, es:[bx+2] + test ax, ax + jz short loc_140F + push ax + nop + push cs + call near ptr sub_2664 + mov es:[bx+4], cx + mov es:[bx+2], cx + mov es:[bx], cx + +loc_140F: ; CODE XREF: sub_13EE+Ej + mov ax, es:[bx+12h] + test ax, ax + jz short loc_1429 + push ax + nop + push cs + call near ptr sub_2664 + mov es:[bx+0Eh], cx + mov es:[bx+12h], cx + mov es:[bx+10h], cx + +loc_1429: ; CODE XREF: sub_13EE+27j + mov ax, [bp+arg_2] + test ax, ax + jz short loc_1436 + push ax + nop + push cs + call near ptr sub_2664 + +loc_1436: ; CODE XREF: sub_13EE+40j + pop bp + retf 8 +sub_13EE endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_1446 + +loc_143A: ; CODE XREF: sub_1446+11j sub_1446+1Dj ... + pop di + pop si + pop bp + push seg dseg + pop ds + stc + retf 0Ch +; END OF FUNCTION CHUNK FOR sub_1446 +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1446 proc far ; CODE XREF: sub_EF7A+27P + +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h + +; FUNCTION CHUNK AT 143A SIZE 0000000B BYTES + + push bp + mov bp, sp + push si + push di + cld + push [bp+arg_A] + push [bp+arg_8] + nop + push cs + call near ptr sub_BAE + jb short loc_143A + mov bx, ax + push 4114h + nop + push cs + call near ptr sub_2238 + jb short loc_143A + mov ds, ax + mov word_1420E, bx + mov byte_14212, 0 + mov byte_14213, 0 + mov cx, 4000h + xor dx, dx + mov word_14210, dx + mov ah, 3Fh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + mov ax, ds + mov es, ax + assume es:dseg + mov ax, 1 + mov cx, 10h + mov di, 400Ch + nop + +loc_1490: ; CODE XREF: sub_1446+54j sub_1446+58j + and al, 0Fh + stosb + inc al + inc ah + test ah, 0Fh + jnz short loc_1490 + inc al + loop loc_1490 + mov ax, 0FFF3h + call sub_19F0 + cmp dl, 50h ; 'P' + jnz short loc_143A + call sub_19F0 + cmp dl, 69h ; 'i' + jnz short loc_143A + les di, [bp+arg_4] + assume es:nothing + xor ax, ax + stosw + stosw + dec ax + +loc_14BB: ; CODE XREF: sub_1446+7Cj + inc ax + call sub_19F0 + cmp dl, 1Ah + jnz short loc_14BB + stosw + +loc_14C5: ; CODE XREF: sub_1446+84j + call sub_19F0 + or dl, dl + jnz short loc_14C5 + call sub_19F0 + mov al, dl + stosb + mov byte_1420C, al + call sub_19F0 + mov ah, dl + call sub_19F0 + mov al, dl + stosw + test ax, ax + mov ax, 0FFF3h + jz short loc_14EA + jmp loc_143A +; --------------------------------------------------------------------------- + +loc_14EA: ; CODE XREF: sub_1446+9Fj + call sub_19F0 + cmp dl, 4 + jz short loc_14F5 + jmp loc_143A +; --------------------------------------------------------------------------- + +loc_14F5: ; CODE XREF: sub_1446+AAj + mov al, dl + stosb + call sub_19F0 + mov al, dl + call sub_19F0 + mov ah, dl + stosw + call sub_19F0 + mov al, dl + call sub_19F0 + mov ah, dl + stosw + call sub_19F0 + mov ah, dl + call sub_19F0 + mov al, dl + stosw + mov bx, ax + xor ax, ax + stosw + push ds + push ax + push bx + push seg dseg + pop ds + mov word_10616, 0Ah + nop + push cs + call near ptr sub_24BC + pop ds + stosw + jb short loc_1546 + push es + push di + mov es, ax + xor di, di + +loc_153A: ; CODE XREF: sub_1446+FBj + call sub_19F0 + mov al, dl + stosb + dec bx + jnz short loc_153A + pop di + pop es + nop + +loc_1546: ; CODE XREF: sub_1446+ECj + call sub_19F0 + mov ah, dl + call sub_19F0 + mov al, dl + stosw + mov word_14100, ax + mov bx, ax + call sub_19F0 + mov ah, dl + call sub_19F0 + mov al, dl + stosw + mov word_14102, ax + add ax, 2 + mul bx + shr dx, 1 + rcr ax, 1 + push ds + push dx + push ax + shl dx, 0Ch + mov word_14108, ax + mov word_1410A, dx + push seg dseg + pop ds + mov word_10616, 0Ah + nop + push cs + call near ptr sub_24BC + pop ds + mov bx, ax + mov ax, 0FFF8h + jnb short loc_1594 + jmp loc_143A +; --------------------------------------------------------------------------- + +loc_1594: ; CODE XREF: sub_1446+149j + mov ax, bx + mov word ptr dword_14104, 0 + mov word ptr dword_14104+2, ax + add word_1410A, ax + mov cx, word_14100 + push es + les bx, [bp+arg_0] + mov es:[bx], cx + mov es:[bx+2], ax + pop es + shl byte_1420C, 1 + jb short loc_15C6 + mov bl, 30h ; '0' + nop + +loc_15BC: ; CODE XREF: sub_1446+17Ej + call sub_19F0 + mov al, dl + stosb + dec bl + jnz short loc_15BC + +loc_15C6: ; CODE XREF: sub_1446+171j + xor bl, bl + call sub_1902 + mov bl, dl + mov al, dl + shl al, 4 + call sub_1902 + or al, dl + les di, dword_14104 + mov cx, word_14100 + rep stosb + mov cl, 0FFh + nop + +loc_15E4: ; CODE XREF: sub_1446+490j + ; sub_1446+49Bj + mov ch, 2 + push cx + mov dh, 0 + mov dl, byte_14212 + mov cl, byte_14213 + cmp cl, ch + jnb short loc_1610 + shl dx, cl + mov si, word_14210 + cmp si, 4000h + jnz short loc_1604 + call sub_1A1C + +loc_1604: ; CODE XREF: sub_1446+1B9j + mov dl, [si] + inc si + sub ch, cl + mov cl, 8 + mov word_14210, si + nop + +loc_1610: ; CODE XREF: sub_1446+1ADj + xchg cl, ch + shl dx, cl + sub ch, cl + mov byte_14212, dl + mov byte_14213, ch + mov dl, dh + mov dh, 0 + pop cx + mov bl, dl + cmp dl, 3 + jnz short loc_165E + push cx + mov dl, byte_14212 + mov cl, byte_14213 + mov dh, 0 + dec cl + jns short loc_1650 + mov si, word_14210 + cmp si, 4000h + jnz short loc_1646 + call sub_1A1C + +loc_1646: ; CODE XREF: sub_1446+1FBj + mov dl, [si] + inc si + mov cl, 7 + mov word_14210, si + nop + +loc_1650: ; CODE XREF: sub_1446+1F1j + shl dl, 1 + mov byte_14212, dl + mov byte_14213, cl + adc bl, 0 + pop cx + +loc_165E: ; CODE XREF: sub_1446+1E2j + cmp bl, cl + jnz short loc_16D2 + mov bl, es:[di-1] + cmp di, 1 + jnb short loc_1678 + push es + mov ax, es + sub ax, 1000h + mov es, ax + assume es:nothing + mov bl, es:[di-1] + pop es + assume es:nothing + +loc_1678: ; CODE XREF: sub_1446+223j + and bl, 0Fh + nop + +loc_167C: ; CODE XREF: sub_1446+284j + call sub_1902 + mov bl, dl + mov al, dl + shl al, 4 + call sub_1902 + mov bl, dl + or al, dl + stosb + or di, di + jnz short loc_169A + mov ax, es + add ax, 1000h + mov es, ax + assume es:nothing + nop + +loc_169A: ; CODE XREF: sub_1446+24Aj + mov dl, byte_14212 + mov cl, byte_14213 + mov dh, 0 + dec cl + jns short loc_16C0 + mov si, word_14210 + cmp si, 4000h + jnz short loc_16B6 + call sub_1A1C + nop + +loc_16B6: ; CODE XREF: sub_1446+26Aj + mov dl, [si] + inc si + mov cl, 7 + mov word_14210, si + nop + +loc_16C0: ; CODE XREF: sub_1446+260j + shl dl, 1 + mov byte_14212, dl + mov byte_14213, cl + jb short loc_167C + mov cl, 0FFh + jmp loc_18D0 +; --------------------------------------------------------------------------- + nop + +loc_16D2: ; CODE XREF: sub_1446+21Aj + mov bh, 0 + xor bp, bp + mov ax, 1 + mov dl, byte_14212 + mov cl, byte_14213 + nop + +loc_16E2: ; CODE XREF: sub_1446+2BCj + inc bh + dec cl + jns short loc_1700 + mov si, word_14210 + cmp si, 4000h + jnz short loc_16F6 + call sub_1A1C + nop + +loc_16F6: ; CODE XREF: sub_1446+2AAj + mov dl, [si] + inc si + mov cl, 7 + mov word_14210, si + nop + +loc_1700: ; CODE XREF: sub_1446+2A0j + shl dl, 1 + jb short loc_16E2 + mov byte_14212, dl + mov byte_14213, cl + mov dh, 0 + dec bh + jnz short loc_1715 + jmp loc_17AC +; --------------------------------------------------------------------------- + +loc_1715: ; CODE XREF: sub_1446+2CAj + cmp bh, 8 + jl short loc_175A + mov cx, bp + +loc_171C: ; CODE XREF: sub_1446+30Fj + push cx + mov si, word_14210 + cmp si, 4000h + jnz short loc_172A + call sub_1A1C + +loc_172A: ; CODE XREF: sub_1446+2DFj + mov dh, 0 + mov dl, [si] + inc si + mov word_14210, si + mov cl, byte_14213 + sub cl, 8 + neg cl + shl dx, cl + xchg dl, byte_14212 + or dl, dh + mov dh, 0 + pop cx + mov ch, cl + mov cl, ah + mov ah, al + mov al, dl + sub bh, 8 + cmp bh, 8 + jg short loc_171C + mov bp, cx + nop + +loc_175A: ; CODE XREF: sub_1446+2D2j + mov ch, bh + push cx + mov dh, 0 + mov dl, byte_14212 + mov cl, byte_14213 + cmp cl, ch + jnb short loc_1786 + shl dx, cl + mov si, word_14210 + cmp si, 4000h + jnz short loc_177A + call sub_1A1C + +loc_177A: ; CODE XREF: sub_1446+32Fj + mov dl, [si] + inc si + sub ch, cl + mov cl, 8 + mov word_14210, si + nop + +loc_1786: ; CODE XREF: sub_1446+323j + xchg cl, ch + shl dx, cl + sub ch, cl + mov byte_14212, dl + mov byte_14213, ch + mov dl, dh + mov dh, 0 + pop cx + mov cl, ch + mov dh, ah + shl ax, cl + or al, dl + mov dl, 0 + rol dx, cl + mov dh, 0 + shl bp, cl + or bp, dx + nop + +loc_17AC: ; CODE XREF: sub_1446+2CCj + mov cx, ax + test bl, bl + jnz short loc_17B5 + jmp loc_1852 +; --------------------------------------------------------------------------- + +loc_17B5: ; CODE XREF: sub_1446+36Aj + mov bh, 0 + mov ax, word_14100 + cmp bl, 1 + jz short loc_17D4 + cmp bl, 2 + jnz short loc_17CA + shl ax, 1 + adc bh, bh + jmp short loc_17D4 +; --------------------------------------------------------------------------- + +loc_17CA: ; CODE XREF: sub_1446+37Cj + dec ax + cmp bl, 3 + jz short loc_17D4 + add ax, 2 + nop + +loc_17D4: ; CODE XREF: sub_1446+377j + ; sub_1446+382j ... + push ds + shr bh, 1 + rcr ax, 1 + sbb bh, bh + mov si, di + sbb si, ax + mov dx, es + jnb short loc_17E8 + sub dx, 1000h + nop + +loc_17E8: ; CODE XREF: sub_1446+39Bj + mov ds, dx + or bh, bh + jnz short loc_182A + mov ax, cx + +loc_17F0: ; CODE XREF: sub_1446+3DEj + mov cx, si + cmp si, di + ja short loc_17F8 + mov cx, di + +loc_17F8: ; CODE XREF: sub_1446+3AEj + neg cx + test ax, ax + jz short loc_1806 + sub cx, ax + sbb dx, dx + and cx, dx + add cx, ax + +loc_1806: ; CODE XREF: sub_1446+3B6j + sub ax, cx + rep movsb + or di, di + jnz short loc_1816 + mov cx, es + add cx, 1000h + mov es, cx + assume es:nothing + +loc_1816: ; CODE XREF: sub_1446+3C6j + or si, si + jnz short loc_1822 + mov cx, ds + add cx, 1000h + mov ds, cx + assume ds:nothing + +loc_1822: ; CODE XREF: sub_1446+3D2j + test ax, ax + jnz short loc_17F0 + pop ds + assume ds:dseg + jmp loc_18CE +; --------------------------------------------------------------------------- + +loc_182A: ; CODE XREF: sub_1446+3A6j + ; sub_1446:loc_184Cj + lodsb + mov ah, al + or si, si + jnz short loc_183A + mov bp, ds + add bp, 1000h + mov ds, bp + assume ds:nothing + nop + +loc_183A: ; CODE XREF: sub_1446+3E9j + mov al, [si] + shr ax, 4 + stosb + or di, di + jnz short loc_184C + mov ax, es + add ax, 1000h + mov es, ax + assume es:nothing + nop + +loc_184C: ; CODE XREF: sub_1446+3FCj + loop loc_182A + pop ds + assume ds:dseg + jmp short loc_18CE +; --------------------------------------------------------------------------- + nop + +loc_1852: ; CODE XREF: sub_1446+36Cj + mov dl, es:[di-1] + cmp di, 1 + jnb short loc_1868 + push es + mov ax, es + sub ax, 1000h + mov es, ax + assume es:nothing + mov dl, es:[di-1] + pop es + assume es:nothing + +loc_1868: ; CODE XREF: sub_1446+413j + mov al, dl + ror dl, 4 + cmp al, dl + jnz short loc_188A + nop + +loc_1872: ; CODE XREF: sub_1446:loc_1880j + ; sub_1446+43Fj + stosb + or di, di + jnz short loc_1880 + mov dx, es + add dx, 1000h + mov es, dx + assume es:nothing + nop + +loc_1880: ; CODE XREF: sub_1446+42Fj + loop loc_1872 + sub bp, 1 + jnb short loc_1872 + jmp short loc_18CE +; --------------------------------------------------------------------------- + nop + +loc_188A: ; CODE XREF: sub_1446+429j + mov bh, al + mov dl, es:[di-2] + cmp di, 2 + jnb short loc_18A2 + push es + mov ax, es + sub ax, 1000h + mov es, ax + assume es:nothing + mov dl, es:[di-2] + pop es + +loc_18A2: ; CODE XREF: sub_1446+44Dj + ; sub_1446:loc_18C6j ... + mov al, dl + stosb + or di, di + jnz short loc_18B0 + mov ax, es + add ax, 1000h + mov es, ax + assume es:nothing + +loc_18B0: ; CODE XREF: sub_1446+461j + loop loc_18B8 + sub bp, 1 + jb short loc_18CE + nop + +loc_18B8: ; CODE XREF: sub_1446:loc_18B0j + mov al, bh + stosb + or di, di + jnz short loc_18C6 + mov ax, es + add ax, 1000h + mov es, ax + assume es:nothing + +loc_18C6: ; CODE XREF: sub_1446+477j + loop loc_18A2 + sub bp, 1 + jnb short loc_18A2 + nop + +loc_18CE: ; CODE XREF: sub_1446+3E1j + ; sub_1446+409j ... + mov cl, bl + +loc_18D0: ; CODE XREF: sub_1446+288j + cmp word_14108, di + jbe short loc_18D9 + jmp loc_15E4 +; --------------------------------------------------------------------------- + +loc_18D9: ; CODE XREF: sub_1446+48Ej + mov ax, es + cmp word_1410A, ax + jbe short loc_18E4 + jmp loc_15E4 +; --------------------------------------------------------------------------- + +loc_18E4: ; CODE XREF: sub_1446+499j + mov ah, 3Eh ; '>' + mov bx, word_1420E + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + push ds + mov bx, seg dseg + mov ds, bx + nop + push cs + call near ptr sub_2222 + clc + mov ax, 0 + pop di + pop si + pop bp + retf 0Ch +sub_1446 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_1902 proc near ; CODE XREF: sub_1446+182p + ; sub_1446+18Cp ... + push ax + push bx + push cx + xor ax, ax + mov dl, byte_14212 + mov cl, byte_14213 + dec cl + jns short loc_192A + mov si, word_14210 + cmp si, 4000h + jnz short loc_1920 + call sub_1A1C + +loc_1920: ; CODE XREF: sub_1902+19j + mov dl, [si] + inc si + mov cl, 7 + mov word_14210, si + nop + +loc_192A: ; CODE XREF: sub_1902+Fj + shl dl, 1 + jb short loc_1978 + add al, 2 + dec cl + jns short loc_194C + mov si, word_14210 + cmp si, 4000h + jnz short loc_1942 + call sub_1A1C + nop + +loc_1942: ; CODE XREF: sub_1902+3Aj + mov dl, [si] + inc si + mov cl, 7 + mov word_14210, si + nop + +loc_194C: ; CODE XREF: sub_1902+30j + shl dl, 1 + jnb short loc_1978 + add al, 2 + inc ah + dec cl + jns short loc_1970 + mov si, word_14210 + cmp si, 4000h + jnz short loc_1966 + call sub_1A1C + nop + +loc_1966: ; CODE XREF: sub_1902+5Ej + mov dl, [si] + inc si + mov cl, 7 + mov word_14210, si + nop + +loc_1970: ; CODE XREF: sub_1902+54j + shl dl, 1 + jnb short loc_1978 + add al, 4 + inc ah + +loc_1978: ; CODE XREF: sub_1902+2Aj sub_1902+4Cj ... + mov byte_14212, dl + mov byte_14213, cl + mov ch, ah + inc ch + push cx + mov dh, 0 + mov dl, byte_14212 + mov cl, byte_14213 + cmp cl, ch + jnb short loc_19AE + shl dx, cl + mov si, word_14210 + cmp si, 4000h + jnz short loc_19A2 + call sub_1A1C + +loc_19A2: ; CODE XREF: sub_1902+9Bj + mov dl, [si] + inc si + sub ch, cl + mov cl, 8 + mov word_14210, si + nop + +loc_19AE: ; CODE XREF: sub_1902+8Fj + xchg cl, ch + shl dx, cl + sub ch, cl + mov byte_14212, dl + mov byte_14213, ch + mov dl, dh + mov dh, 0 + pop cx + add al, dl + xor al, 0Fh + mov ah, 0 + mov bh, 0 + shl bx, 4 + add bx, 400Ch + add bx, ax + mov cx, 0Fh + mov dh, 0 + mov dl, [bx] + sub cx, ax + jnz short loc_19E2 + pop cx + pop bx + pop ax + retn +; --------------------------------------------------------------------------- + nop + +loc_19E2: ; CODE XREF: sub_1902+D9j sub_1902+E6j + mov al, [bx+1] + mov [bx], al + inc bx + loop loc_19E2 + mov [bx], dl + pop cx + pop bx + pop ax + retn +sub_1902 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_19F0 proc near ; CODE XREF: sub_1446+5Dp sub_1446+65p ... + push cx + mov si, word_14210 + cmp si, 4000h + jnz short loc_19FE + call sub_1A1C + +loc_19FE: ; CODE XREF: sub_19F0+9j + mov dh, 0 + mov dl, [si] + inc si + mov word_14210, si + mov cl, byte_14213 + sub cl, 8 + neg cl + shl dx, cl + xchg dl, byte_14212 + or dl, dh + mov dh, 0 + pop cx + retn +sub_19F0 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1A1C proc near ; CODE XREF: sub_1446+1BBp + ; sub_1446+1FDp ... + pusha + mov ah, 3Fh ; '?' + mov bx, word_1420E + mov cx, 4000h + xor dx, dx + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + popa + xor si, si + retn +sub_1A1C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1A2E proc far ; CODE XREF: sub_A9C3:loc_AC5FP + ; sub_A9C3+2BCP + +arg_0 = word ptr 6 + + push bp + mov bp, sp + mov bx, [bp+arg_0] + mov dx, word_10326 + sub bx, dx + sbb ax, ax + and bx, ax + add bx, dx + sub dx, bx + mov bp, bx + mov cx, word_1032A + shl bx, cl + shl dx, cl + mov cl, 4 + +loc_1A4E: ; CODE XREF: sub_1A2E+26j + jmp short $+2 + in al, 0A0h ; PIC 2 same as 0020 for PIC 1 + test al, cl + jz short loc_1A4E + mov al, 70h ; 'p' + out 0A2h, al ; Interrupt Controller #2, 8259A + mov ax, bp + shl ax, 1 + shl ax, 1 + add ax, bp + shl ax, 1 + shl ax, 1 + shl ax, 1 + call sub_FDE + mov ax, dx + shl ax, cl + or ah, ch + call sub_FDE + xor ax, ax + call sub_FDE + mov ax, bx + shl ax, cl + or ah, ch + call sub_FDE + pop bp + retf 2 +sub_1A2E endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1A86 proc far ; CODE XREF: _main+3EP + mov ah, 40h ; '@' + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + retf +sub_1A86 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1A8C proc far ; CODE XREF: sub_BE76+192P + ; sub_C16C+33P ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + mov cx, [bp+arg_2] + mov bp, [bp+arg_0] + mov ax, cx + or ax, bp + jz short loc_1AF3 + mov ax, cx + cwd + xor ax, dx + sub ax, dx + mov bx, ax + mov ax, bp + cwd + xor ax, dx + sub ax, dx + mov dx, ax + cmp dx, bx + jz short loc_1AC8 + jl short loc_1ACC + mov ax, bx + mov bx, dx + xor dh, dh + mov dl, ah + mov ah, al + mov al, dh + div bx + mov bx, 0BCh ; '' + xlat + jmp short loc_1AE0 +; --------------------------------------------------------------------------- + nop + +loc_1AC8: ; CODE XREF: sub_1A8C+23j + mov al, 20h ; ' ' + jmp short loc_1AE0 +; --------------------------------------------------------------------------- + +loc_1ACC: ; CODE XREF: sub_1A8C+25j + mov ax, dx + xor dh, dh + mov dl, ah + mov ah, al + mov al, dh + div bx + mov bx, 0BCh ; '' + xlat + neg al + add al, 40h ; '@' + +loc_1AE0: ; CODE XREF: sub_1A8C+39j sub_1A8C+3Ej + xor ah, ah + or bp, bp + jge short loc_1AEB + neg ax + add ax, 80h ; '' + +loc_1AEB: ; CODE XREF: sub_1A8C+58j + or cx, cx + jge short loc_1AF1 + neg al + +loc_1AF1: ; CODE XREF: sub_1A8C+61j + xor ah, ah + +loc_1AF3: ; CODE XREF: sub_1A8C+Dj + pop bp + retf 4 +sub_1A8C endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1AF8 proc far ; CODE XREF: sub_D49D+24P sub_D531+25P + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + mov ax, [bp+arg_0] + imul ax + mov bx, ax + mov cx, dx + mov ax, [bp+arg_2] + imul ax + add bx, ax + adc cx, dx + jmp short loc_1B19 +; --------------------------------------------------------------------------- + nop + push bp + mov bp, sp + mov bx, [bp+arg_0] + mov cx, [bp+arg_2] + +loc_1B19: ; CODE XREF: sub_1AF8+15j + xor ax, ax + mov dx, bx + or dx, cx + jz short loc_1B80 + cmp cx, 3FFFh + ja short loc_1B80 + jnz short loc_1B2F + cmp bx, 8000h + ja short loc_1B80 + +loc_1B2F: ; CODE XREF: sub_1AF8+2Fj + push si + shl bx, 1 + rcl cx, 1 + shl bx, 1 + rcl cx, 1 + or cx, cx + jz short loc_1B55 + mov si, 1 + mov ax, 3 + +loc_1B42: ; CODE XREF: sub_1AF8+52j + ror si, 1 + ror ax, 1 + ror ax, 1 + test cx, ax + jz short loc_1B42 + or ax, ax + jns short loc_1B65 + mov si, 0FFFFh + jmp short loc_1B65 +; --------------------------------------------------------------------------- + +loc_1B55: ; CODE XREF: sub_1AF8+42j + mov si, 100h + mov ax, 3 + +loc_1B5B: ; CODE XREF: sub_1AF8+6Bj + ror si, 1 + ror ax, 1 + ror ax, 1 + test bx, ax + jz short loc_1B5B + +loc_1B65: ; CODE XREF: sub_1AF8+56j sub_1AF8+5Bj ... + mov bp, si + mov ax, bx + mov dx, cx + div si + add si, ax + rcr si, 1 + cmp si, ax + jz short loc_1B79 + cmp si, bp + jnz short loc_1B65 + +loc_1B79: ; CODE XREF: sub_1AF8+7Bj + xor ax, ax + shr si, 1 + adc ax, si + pop si + +loc_1B80: ; CODE XREF: sub_1AF8+27j sub_1AF8+2Dj ... + pop bp + retf 4 +sub_1AF8 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_1B84 proc far ; CODE XREF: sub_EC36+37P + nop + push cs + call near ptr sub_7C8 + retf +sub_1B84 endp + +; --------------------------------------------------------------------------- + +loc_1B8A: ; CODE XREF: sub_600+15p sub_600+3Bp ... + cld + push si + mov ax, word_10338 + cwd + not dx + and ax, dx + sub ax, 0C8h ; '' + sbb dx, dx + and ax, dx + add ax, 0C8h ; '' + mov dh, al + xor bx, bx + mov ch, bl + cmp dh, 64h ; 'd' + jbe short loc_1BB0 + mov ch, 0Fh + sub dh, 0C8h ; '' + neg dh + +loc_1BB0: ; CODE XREF: seg000:1BA7j + mov si, 1D9Ah + mov dl, 64h ; 'd' + cmp word_1036A, bx + jnz short loc_1BF4 + +loc_1BBB: ; CODE XREF: seg000:1BEFj + mov al, bl + out 0A8h, al ; Interrupt Controller #2, 8259A + lodsw + shr ax, 4 + mov cl, ah + and al, 0Fh + xor al, ch + mul dh + div dl + xor al, ch + out 0ACh, al ; Interrupt Controller #2, 8259A + mov al, cl + xor al, ch + mul dh + div dl + xor al, ch + out 0AAh, al ; Interrupt Controller #2, 8259A + lodsb + shr al, 4 + xor al, ch + mul dh + div dl + xor al, ch + out 0AEh, al ; Interrupt Controller #2, 8259A + inc bx + cmp bx, 10h + jl short loc_1BBB + pop si + retf +; --------------------------------------------------------------------------- + nop + +loc_1BF4: ; CODE XREF: seg000:1BB9j + mov bx, dx + mov dx, 871Eh + mov al, 0A0h ; '' + out 0F6h, al + in al, dx + cmp al, 0FFh + jnz short loc_1C09 + mov dx, 0AE8Eh + in al, dx + shr al, 2 + +loc_1C09: ; CODE XREF: seg000:1C00j + shr al, 1 + cmc + sbb al, al + mov cs:byte_1C72, al + mov dx, bx + push di + mov di, 0 + +loc_1C18: ; CODE XREF: seg000:1C8Fj + mov ax, di + out 0A8h, al ; Interrupt Controller #2, 8259A + lodsw + mov bx, ax + shr bx, 4 + and bl, ch + lodsb + and al, ch + xor al, ch + mul dh + div dl + xor al, ch + xchg al, bh + xor al, ch + mul dh + div dl + xor al, ch + xchg al, bl + xor al, ch + mul dh + div dl + xor al, ch + xchg al, bl + mov ah, bh + cmp bh, al + ja short loc_1C4D + mov bh, al + +loc_1C4D: ; CODE XREF: seg000:1C49j + cmp bh, bl + ja short loc_1C53 + mov bh, bl + +loc_1C53: ; CODE XREF: seg000:1C4Fj + shl al, 1 + add al, bl + shl al, 1 + add al, ah + add al, bh + mov cl, 3 + mul cl + mov cl, 14h + div cl + shr al, 1 + adc al, 0 + sub al, 2 + cmc + sbb ah, ah + and ah, al +; --------------------------------------------------------------------------- + db 80h, 0F4h +byte_1C72 db 0 ; DATA XREF: seg000:1C0Ew +; --------------------------------------------------------------------------- + shr ah, 1 + sbb al, al + and al, 0Fh + out 0AEh, al ; Interrupt Controller #2, 8259A + shr ah, 1 + sbb al, al + and al, 0Fh + out 0ACh, al ; Interrupt Controller #2, 8259A + shr ah, 1 + sbb al, al + and al, 0Fh + out 0AAh, al ; Interrupt Controller #2, 8259A + inc di + cmp di, 10h + jl short loc_1C18 + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_1C94 proc far ; CODE XREF: sub_3A20+34p + +arg_0 = word ptr 6 + + push bp + mov bp, sp + mov es, [bp+arg_0] + assume es:nothing + push word ptr es:0 + push cs + call near ptr sub_53C + push [bp+arg_0] + push cs + call near ptr sub_2664 + pop bp + retf 2 +sub_1C94 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov es, word ptr [bp+6] + call word ptr es:2 + pop bp + retf 2 +; --------------------------------------------------------------------------- + nop + cmp word ptr es:1Ah, 0 + jz short loc_1CDC + dec word ptr es:1Ah + add word ptr es:12h, 1 + adc word ptr es:14h, 0 + mov ax, es:1Ch + retn +; --------------------------------------------------------------------------- + +loc_1CDC: ; CODE XREF: seg000:1CC4j + call word ptr es:4 + test ah, ah + jnz short locret_1D0B + cmp ax, es:1Ch + mov es:1Ch, ax + jnz short locret_1D0B + push ax + call word ptr es:4 + test ah, ah + jnz short loc_1D0A + mov es:1Ah, ax + sub word ptr es:12h, 1 + sbb word ptr es:14h, 0 + +loc_1D0A: ; CODE XREF: seg000:1CF8j + pop ax + +locret_1D0B: ; CODE XREF: seg000:1CE3j seg000:1CEEj + retn + +; =============== S U B R O U T I N E ======================================= + + +sub_1D0C proc near ; CODE XREF: seg000:1D50p + mov ax, es:0Ah + mov dx, es:0Ch + cmp dx, es:8 + jb short loc_1D29 + ja short loc_1D25 + cmp ax, es:6 + jb short loc_1D29 + +loc_1D25: ; CODE XREF: sub_1D0C+10j + mov ax, 0FFFFh + retn +; --------------------------------------------------------------------------- + +loc_1D29: ; CODE XREF: sub_1D0C+Ej sub_1D0C+17j + add ax, 1 + adc dx, 0 + mov es:0Ah, ax + mov es:0Ch, dx + add word ptr es:12h, 1 + adc word ptr es:14h, 0 + push es + push word ptr es:0 + push cs + call near ptr sub_5D0 + pop es + retn +sub_1D0C endp + +; --------------------------------------------------------------------------- + call sub_1D0C + or ah, ah + jnz short locret_1D5C + xor al, es:1Eh + +locret_1D5C: ; CODE XREF: seg000:1D55j + retn +; --------------------------------------------------------------------------- + db 0 + push bp + mov bp, sp + push si + push di + cld + mov si, [bp+8] + mov di, [bp+0Ah] + test si, si + jz short loc_1D81 + +loc_1D6E: ; CODE XREF: seg000:1D7Fj + mov es, word ptr [bp+6] + call word ptr es:2 + inc ah + jz short loc_1D81 + mov es, word ptr [bp+0Ch] + stosb + dec si + jnz short loc_1D6E + +loc_1D81: ; CODE XREF: seg000:1D6Cj seg000:1D78j + mov ax, di + sub ax, [bp+0Ah] + pop di + pop si + pop bp + retf 8 +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov es, word ptr [bp+6] + xor ax, ax + mov es:1Ah, ax + mov word ptr es:1Ch, 0FFFFh + mov es:0Ah, ax + mov es:0Ch, ax + mov es:12h, ax + mov es:14h, ax + push word ptr es:0 + push word ptr es:10h + push word ptr es:0Eh + push ax + push cs + call near ptr sub_748 + pop bp + retf 2 +; --------------------------------------------------------------------------- + nop + push bp + mov bp, sp + push di + mov es, word ptr [bp+0Ah] + inc word ptr [bp+8] + mov di, [bp+6] + or di, di + jz short loc_1DE5 + +loc_1DD9: ; CODE XREF: seg000:1DE3j seg000:1DE8j + call word ptr es:2 + test ah, ah + jnz short loc_1DEA + dec di + jnz short loc_1DD9 + +loc_1DE5: ; CODE XREF: seg000:1DD7j + dec word ptr [bp+8] + jnz short loc_1DD9 + +loc_1DEA: ; CODE XREF: seg000:1DE0j + mov ax, es:12h + mov dx, es:14h + pop di + pop bp + retf 6 + +; =============== S U B R O U T I N E ======================================= + + +sub_1DF8 proc far ; CODE XREF: sub_B52C+20P sub_B52C+28P ... + mov ax, 4E35h + mul word ptr dword_10376+2 + mov cx, ax + mov ax, 15Ah + mul word ptr dword_10376 + add cx, ax + mov ax, 4E35h + mul word ptr dword_10376 + add ax, 1 + adc dx, cx + mov word ptr dword_10376, ax + mov ax, dx + mov word ptr dword_10376+2, ax + and ah, 7Fh + retf +sub_1DF8 endp + +; --------------------------------------------------------------------------- + db 4 dup(0), 1, 4 dup(0), 1, 2 dup(0), 2 dup(1), 4 dup(0) + db 1, 0, 1, 0, 1, 2 dup(0), 2 dup(1), 0, 3 dup(1), 4 dup(0) + db 2 dup(1), 2 dup(0), 1, 0, 1, 0, 3 dup(1), 0, 1, 2 dup(0) + db 3 dup(1), 0, 2 dup(1), 0, 7 dup(1), 2, 3 dup(0), 3 + db 3 dup(0), 2, 1, 2 dup(0), 3, 1, 2 dup(0), 2, 0, 1, 0 + db 3, 0, 1, 0, 2, 2 dup(1), 0, 3, 2 dup(1), 0, 2, 2 dup(0) + db 1, 3, 2 dup(0), 1, 2, 1, 0, 1, 3, 1, 0, 1, 2, 0, 2 dup(1) + db 3, 0, 2 dup(1), 2, 3 dup(1), 3, 3 dup(1), 0, 2, 2 dup(0) + db 1, 2, 3 dup(0), 3, 2 dup(0), 1, 3, 3 dup(0), 2, 1, 0 + db 1, 2, 1, 2 dup(0), 3, 1, 0, 1, 3, 1, 2 dup(0), 2, 0 + db 2 dup(1), 2, 0, 1, 0, 3, 0, 2 dup(1), 3, 0, 1, 0, 2 + db 3 dup(1), 2, 2 dup(1), 0, 3, 3 dup(1), 3, 2 dup(1) + db 2 dup(2), 2 dup(0), 3, 2, 2 dup(0), 2, 3, 2 dup(0) + db 2 dup(3), 2 dup(0), 2 dup(2), 1, 0, 3, 2, 1, 0, 2, 3 + db 1, 0, 2 dup(3), 1, 0, 2 dup(2), 0, 1, 3, 2, 0, 1, 2 + db 3, 0, 1, 2 dup(3), 0, 1, 2 dup(2), 2 dup(1), 3, 2, 2 dup(1) + db 2, 3, 2 dup(1), 2 dup(3), 2 dup(1), 2 dup(0), 2, 0 + db 1, 0, 2, 2 dup(0), 1, 2, 0, 2 dup(1), 2, 3 dup(0), 3 + db 0, 1, 0, 3, 2 dup(0), 1, 3, 0, 2 dup(1), 3, 3 dup(0) + db 2, 2 dup(1), 0, 2, 1, 0, 1, 2, 3 dup(1), 2, 1, 2 dup(0) + db 3, 2 dup(1), 0, 3, 1, 0, 1, 3, 3 dup(1), 3, 1, 2, 0 + db 2, 0, 3, 0, 2, 0, 2, 1, 2, 0, 3, 1, 2, 0, 2, 0, 3, 0 + db 3, 0, 3, 0, 2, 1, 3, 0, 3, 1, 3, 0, 2, 0, 2, 1, 3, 0 + db 2, 1, 2, 1, 2, 1, 3, 1, 2, 1, 2, 0, 3, 1, 3, 0, 3, 1 + db 2, 1, 3, 1, 3, 1, 3, 1, 0, 2 dup(2), 0, 1, 2 dup(2) + db 2 dup(0), 3, 2, 0, 1, 3, 2, 2 dup(0), 2, 3, 0, 1, 2 + db 3, 2 dup(0), 2 dup(3), 0, 1, 2 dup(3), 2 dup(0), 2 dup(2) + db 2 dup(1), 2 dup(2), 1, 0, 3, 2, 2 dup(1), 3, 2, 1, 0 + db 2, 3, 2 dup(1), 2, 3, 1, 0, 2 dup(3), 2 dup(1), 2 dup(3) + db 1, 3 dup(2), 0, 3, 2 dup(2), 0, 2, 3, 2, 0, 2 dup(3) + db 2, 0, 2 dup(2), 3, 0, 3, 2, 3, 0, 2, 2 dup(3), 0, 3 dup(3) + db 0, 3 dup(2), 1, 3, 2 dup(2), 1, 2, 3, 2, 1, 2 dup(3) + db 2, 1, 2 dup(2), 3, 1, 3, 2, 3, 1, 2, 2 dup(3), 1, 3 dup(3) + db 1, 3 dup(0), 2, 1, 2 dup(0), 2, 0, 1, 0, 2, 2 dup(1) + db 0, 2, 2 dup(0), 1, 2, 1, 0, 1, 2, 0, 2 dup(1), 2, 3 dup(1) + db 2, 3 dup(0), 3, 1, 2 dup(0), 3, 0, 1, 0, 3, 2 dup(1) + db 0, 3, 2 dup(0), 1, 3, 1, 0, 1, 3, 0, 2 dup(1), 3, 3 dup(1) + db 3, 2, 2 dup(0), 2, 3, 2 dup(0), 2 dup(2), 1, 0, 2, 3 + db 1, 0, 2 dup(2), 0, 1, 2, 3, 0, 1, 2 dup(2), 2 dup(1) + db 2, 3, 2 dup(1), 2 dup(2), 2 dup(0), 2 dup(3), 2 dup(0) + db 3, 2, 1, 0, 2 dup(3), 1, 0, 3, 2, 0, 1, 2 dup(3), 0 + db 1, 3, 2, 2 dup(1), 2 dup(3), 2 dup(1), 3, 0, 2, 0, 2 + db 1, 2, 0, 2, 0, 3, 0, 2, 1, 3, 0, 2, 0, 2, 1, 2, 1, 2 + db 1, 2, 0, 3, 1, 2, 1, 3, 1, 2 + db 0, 2, 0, 3, 1, 2, 0, 3, 0, 3, 0, 3, 1, 3, 0, 3, 0, 2 + db 1, 3, 1, 2, 1, 3, 0, 3, 1, 3, 1, 3, 1, 3, 2 dup(2) + db 0, 2, 3, 2, 0, 2 dup(2), 3, 0, 2, 2 dup(3), 0, 3 dup(2) + db 1, 2, 3, 2, 1, 2 dup(2), 3, 1, 2, 2 dup(3), 1, 3 dup(2) + db 0, 2 dup(3), 2, 0, 3, 2, 3, 0, 3 dup(3), 0, 3, 2 dup(2) + db 1, 2 dup(3), 2, 1, 3, 2, 3, 1, 3 dup(3), 1, 3, 2 dup(0) + db 2 dup(2), 1, 0, 2 dup(2), 0, 1, 2 dup(2), 2 dup(1) + db 2 dup(2), 2 dup(0), 3, 2, 1, 0, 3, 2, 0, 1, 3, 2, 2 dup(1) + db 3, 2, 2 dup(0), 2, 3, 1, 0, 2, 3, 0, 1, 2, 3, 2 dup(1) + db 2, 3, 2 dup(0), 2 dup(3), 1, 0, 2 dup(3), 0, 1, 2 dup(3) + db 2 dup(1), 2 dup(3), 2, 0, 2 dup(2), 3, 0, 3 dup(2) + db 1, 2 dup(2), 3, 1, 3 dup(2), 0, 3, 2, 3, 0, 3, 2 dup(2) + db 1, 3, 2, 3, 1, 3, 2 dup(2), 0, 2, 2 dup(3), 0, 2, 3 + db 2, 1, 2, 2 dup(3), 1, 2, 3, 2, 0, 3 dup(3), 0, 2 dup(3) + db 2, 1, 3 dup(3), 1, 2 dup(3), 0, 3 dup(2), 1, 3 dup(2) + db 0, 3, 2 dup(2), 1, 3, 2 dup(2), 0, 2, 3, 2, 1, 2, 3 + db 2, 0, 2 dup(3), 2, 1, 2 dup(3), 2, 0, 2 dup(2), 3, 1 + db 2 dup(2), 3, 0, 3, 2, 3, 1, 3, 2, 3, 0, 2, 2 dup(3) + db 1, 2, 2 dup(3), 0, 3 dup(3), 1, 3 dup(3), 4 dup(2) + db 3, 4 dup(2), 3, 2 dup(2), 2 dup(3), 4 dup(2), 3, 2 + db 3, 2, 3, 2 dup(2), 2 dup(3), 2, 3 dup(3), 4 dup(2) + db 2 dup(3), 2 dup(2), 3, 2, 3, 2, 3 dup(3), 2, 3, 2 dup(2) + db 3 dup(3), 2, 2 dup(3), 2, 7 dup(3) + +; =============== S U B R O U T I N E ======================================= + + +sub_2222 proc far ; CODE XREF: sub_3F0+57p sub_133C+4Cp ... + push bx + mov bx, sp + mov bx, ss:[bx+6] + mov word_11EDA, bx + pop bx + retf 2 +sub_2222 endp + +; --------------------------------------------------------------------------- + nop +; START OF FUNCTION CHUNK FOR sub_2238 + +loc_2232: ; CODE XREF: sub_2238+5j + push cs + call near ptr sub_2538 + jb short loc_2267 +; END OF FUNCTION CHUNK FOR sub_2238 + +; =============== S U B R O U T I N E ======================================= + + +sub_2238 proc far ; CODE XREF: seg000:02D6p seg000:02DEp ... + +; FUNCTION CHUNK AT 2232 SIZE 00000006 BYTES + + cmp word_10612, 0 + jz short loc_2232 + push bx + mov bx, sp + mov bx, ss:[bx+6] + add bx, 0Fh + rcr bx, 1 + shr bx, 1 + shr bx, 1 + shr bx, 1 + mov ax, word_11EDA + add bx, ax + jb short loc_2266 + cmp word_11ED6, bx + jb short loc_2266 + mov word_11EDA, bx + pop bx + retf 2 +; --------------------------------------------------------------------------- + +loc_2266: ; CODE XREF: sub_2238+1Ej sub_2238+24j + pop bx + +loc_2267: ; CODE XREF: sub_2238-2j + mov ax, 0FFF8h + retf 2 +sub_2238 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_226E proc near ; CODE XREF: sub_2E46+1Ep sub_2E70+2p + mov dx, 188h + +loc_2271: ; CODE XREF: sub_226E+6j + in al, dx + test al, 80h + jnz short loc_2271 + mov al, bh + out dx, al + +loc_2279: ; CODE XREF: sub_226E+Ej + in al, dx + test al, 80h + jnz short loc_2279 + inc dx + inc dx + mov al, bl + out dx, al + retn +sub_226E endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_2284 proc near ; CODE XREF: sub_2E46+15p + mov dx, 188h + +loc_2287: ; CODE XREF: sub_2284+6j + in al, dx + test al, 80h + jnz short loc_2287 + mov al, bh + out dx, al + +loc_228F: ; CODE XREF: sub_2284+Ej + in al, dx + test al, 80h + jnz short loc_228F + inc dx + inc dx + in al, dx + retn +sub_2284 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_2298 proc far ; CODE XREF: sub_A576+DP sub_C1DD+3FAP ... + mov al, 1Bh + int 29h ; DOS 2+ internal - FAST PUTCHAR + ; AL = character to display + mov al, 5Bh ; '[' + int 29h ; DOS 2+ internal - FAST PUTCHAR + ; AL = character to display + mov al, 32h ; '2' + int 29h ; DOS 2+ internal - FAST PUTCHAR + ; AL = character to display + mov al, 4Ah ; 'J' + int 29h ; DOS 2+ internal - FAST PUTCHAR + ; AL = character to display + retf +sub_2298 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_22AA proc far ; CODE XREF: sub_DCFC+9DP sub_DE74+9DP + +arg_0 = word ptr 4 +arg_2 = dword ptr 6 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch + + mov dx, bp + mov bp, sp + push si + push di + mov ax, [bp+arg_6] + mov di, ax + shl ax, 1 + shl ax, 1 + add di, ax + shl di, 1 + add di, word_105FC + mov es, di + mov di, [bp+arg_8] + shl di, 1 + mov cx, di + push [bp+arg_0] + push ds + lds si, [bp+arg_2] + mov bp, dx + mov bx, 0FEDFh + mov dx, 9F80h + lodsb + or al, al + jz short loc_2309 + +loc_22DE: ; CODE XREF: sub_22AA+5Dj + xor ah, ah + cmp al, dl + jbe short loc_2303 + cmp al, dh + jbe short loc_22EC + cmp al, bl + jbe short loc_2303 + +loc_22EC: ; CODE XREF: sub_22AA+3Cj + mov ah, al + lodsb + shl ah, 1 + cmp al, dh + jnb short loc_22F9 + cmp al, dl + adc ax, bx + +loc_22F9: ; CODE XREF: sub_22AA+49j + sbb al, bh + and ax, 7F7Fh + xchg ah, al + stosw + or al, dl + +loc_2303: ; CODE XREF: sub_22AA+38j sub_22AA+40j + stosw + lodsb + or al, al + jnz short loc_22DE + +loc_2309: ; CODE XREF: sub_22AA+32j + pop ds + xchg cx, di + sub cx, di + shr cx, 1 + add di, 2000h + pop ax + rep stosw + pop di + pop si + retf 0Ah +sub_22AA endp + +; --------------------------------------------------------------------------- +dword_231C dd 0 ; DATA XREF: sub_2320+5Ew seg000:238Br ... + +; =============== S U B R O U T I N E ======================================= + + +sub_2320 proc far ; CODE XREF: sub_F0B4+1DP + xor ax, ax + push ax + push ax + push cs + call near ptr sub_1392 + and ax, 0Ch + cmp ax, 0Ch + mov word_10606, 33FFh + jz short loc_233C + mov word_10606, 0 + +loc_233C: ; CODE XREF: sub_2320+14j + xor ax, ax + mov word_11ECA, ax + mov word_11ECC, ax + cmp byte_10608, al + jnz short locret_2389 + mov al, 0Ah + push ax + push cs + mov ax, 2394h + push ax + nop + push cs + call near ptr sub_804 + mov word_11ECE, ax + mov word_11ED0, dx + pushf + cli + in al, 2 ; DMA controller, 8237A-5. + ; channel 1 current address + mov ah, al + and al, 0FBh + out 2, al ; DMA controller, 8237A-5. + ; channel 1 base address + ; (also sets current address) + popf + or ah, 0FBh + mov byte_10608, ah + mov ax, 18h + push ax + push cs + mov ax, 238Ah + push ax + nop + push cs + call near ptr sub_804 + mov word ptr cs:dword_231C, ax + mov word ptr cs:dword_231C+2, dx + out 64h, al ; AT Keyboard controller 8042. + +locret_2389: ; CODE XREF: sub_2320+28j + retf +sub_2320 endp + +; --------------------------------------------------------------------------- + pushf + call cs:dword_231C + out 64h, al ; AT Keyboard controller 8042. + iret +; --------------------------------------------------------------------------- + nop + push ax + push ds + mov ax, seg dseg + mov ds, ax + mov ax, word_10606 + add word_11ED2, ax + jb short loc_23C5 + inc word_11ECA + inc word_11ECC + cmp word_10604, 0 + jz short loc_23C5 + push bx + push cx + push dx + push si + push di + push es + cld + call dword ptr unk_10602 + pop es + pop di + pop si + pop dx + pop cx + pop bx + cli + +loc_23C5: ; CODE XREF: seg000:23A2j seg000:23B1j + pop ds + mov al, 20h ; ' ' + out 0, al + out 64h, al ; AT Keyboard controller 8042. + pop ax + iret + +; =============== S U B R O U T I N E ======================================= + + +sub_23CE proc far ; CODE XREF: sub_EC36+2DP + cmp byte_10608, 0 + jz short locret_2414 + mov ax, 18h + push ax + push word ptr cs:dword_231C+2 + push word ptr cs:dword_231C + nop + push cs + call near ptr sub_804 + pushf + cli + in al, 2 ; DMA controller, 8237A-5. + ; channel 1 current address + or al, 4 + out 2, al ; DMA controller, 8237A-5. + ; channel 1 base address + ; (also sets current address) + popf + mov ax, 0Ah + push ax + push word_11ED0 + push word_11ECE + nop + push cs + call near ptr sub_804 + pushf + cli + in al, 2 ; DMA controller, 8237A-5. + ; channel 1 current address + and al, byte_10608 + out 2, al ; DMA controller, 8237A-5. + ; channel 1 base address + ; (also sets current address) + popf + out 64h, al ; AT Keyboard controller 8042. + xor al, al + mov byte_10608, al + +locret_2414: ; CODE XREF: sub_23CE+5j + retf +sub_23CE endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_2416 proc far ; CODE XREF: sub_600+10p sub_600+21p ... + cmp byte_10608, 0 + jnz short loc_2432 + +loc_241D: ; CODE XREF: sub_2416+Fj + jmp short $+2 + jmp short $+2 + in al, 0A0h ; PIC 2 same as 0020 for PIC 1 + test al, 20h + jnz short loc_241D + +loc_2427: ; CODE XREF: sub_2416+19j + jmp short $+2 + jmp short $+2 + in al, 0A0h ; PIC 2 same as 0020 for PIC 1 + test al, 20h + jz short loc_2427 + retf +; --------------------------------------------------------------------------- + +loc_2432: ; CODE XREF: sub_2416+5j + mov ax, word_11ECA + +loc_2435: ; CODE XREF: sub_2416+23j + cmp ax, word_11ECA + jz short loc_2435 + retf +sub_2416 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_243C proc far ; CODE XREF: sub_A9C3+128P + mov bx, sp + push si + push di + mov si, ss:[bx+4] + mov word_10338, 0C8h ; '' + push cs + call near ptr sub_2416 + +loc_244E: ; CODE XREF: sub_243C+2Ej + push cs + call loc_1B8A + mov di, si + cmp di, 0 + jle short loc_2460 + +loc_2459: ; CODE XREF: sub_243C+22j + push cs + call near ptr sub_2416 + dec di + jnz short loc_2459 + +loc_2460: ; CODE XREF: sub_243C+1Bj + sub word_10338, 6 + cmp word_10338, 64h ; 'd' + jg short loc_244E + mov word_10338, 64h ; 'd' + push cs + call loc_1B8A + pop di + pop si + retf 2 +sub_243C endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_247C proc far ; CODE XREF: sub_A9C3+133P + mov bx, sp + push si + push di + mov si, ss:[bx+4] + mov word_10338, 64h ; 'd' + push cs + call near ptr sub_2416 + +loc_248E: ; CODE XREF: sub_247C+2Fj + push cs + call loc_1B8A + mov di, si + cmp di, 0 + jle short loc_24A0 + +loc_2499: ; CODE XREF: sub_247C+22j + push cs + call near ptr sub_2416 + dec di + jnz short loc_2499 + +loc_24A0: ; CODE XREF: sub_247C+1Bj + add word_10338, 6 + cmp word_10338, 0C8h ; '' + jl short loc_248E + mov word_10338, 0C8h ; '' + push cs + call loc_1B8A + pop di + pop si + retf 2 +sub_247C endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_24BC proc far ; CODE XREF: sub_1446+E7p + ; sub_1446+140p + push bx + mov bx, sp + mov ax, ss:[bx+8] + mov bx, ss:[bx+6] + add bx, 0Fh + adc ax, 0 + shr ax, 1 + rcr bx, 1 + shr ax, 1 + rcr bx, 1 + shr ax, 1 + rcr bx, 1 + shr ax, 1 + jnz short loc_24E8 + rcr bx, 1 + push bx + push cs + call near ptr sub_2574 + pop bx + retf 4 +; --------------------------------------------------------------------------- + +loc_24E8: ; CODE XREF: sub_24BC+1Fj + mov ax, 0 + stc + pop bx + retf 4 +sub_24BC endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_24F0 proc far ; CODE XREF: sub_F0B4+7P + push bx + mov bx, sp + mov bx, ss:[bx+6] + mov ah, 48h + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + jb short loc_250B + push ax + push bx + push cs + call near ptr sub_2512 + xor ax, ax + mov word_10614, 1 + +loc_250B: ; CODE XREF: sub_24F0+Bj + neg ax + pop bx + retf 2 +sub_24F0 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_2512 proc far ; CODE XREF: sub_24F0+10p sub_2538+1Bp + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + mov ax, [bp+arg_2] + mov word_10612, ax + mov word_11EDA, ax + add ax, [bp+arg_0] + mov word_11ED4, ax + mov word_11ED6, ax + mov word_11ED8, 0 + mov word_10614, 0 + clc + pop bp + retf 4 +sub_2512 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_2538 proc far ; CODE XREF: sub_2238-5p sub_2574+Fp + push bx + mov bx, 0FFFFh + mov ah, 48h + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + mov ax, word_10618 + cmp bx, ax + jbe short loc_2549 + sub bx, ax + +loc_2549: ; CODE XREF: sub_2538+Dj + mov ah, 48h + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + jb short loc_255D + push ax + push ax + push bx + push cs + call near ptr sub_2512 + mov word_10614, 1 + pop ax + +loc_255D: ; CODE XREF: sub_2538+15j + pop bx + retf +sub_2538 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_2560 proc far ; CODE XREF: sub_682+11p sub_2774+21p ... + push bx + mov bx, sp + mov bx, ss:[bx+6] + add bx, 0Fh + rcr bx, 1 + shr bx, 1 + shr bx, 1 + shr bx, 1 + jmp short loc_257B +sub_2560 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_2574 proc far ; CODE XREF: sub_24BC+25p sub_2820+23p + push bx + mov bx, sp + mov bx, ss:[bx+6] + +loc_257B: ; CODE XREF: sub_2560+12j + cmp word_10612, 0 + jnz short loc_2586 + push cs + call near ptr sub_2538 + +loc_2586: ; CODE XREF: sub_2574+Cj + push cx + push es + test bx, bx + jz short loc_25E7 + mov ax, word_11ED4 + sub ax, word_11EDA + cmp bx, ax + jnb short loc_25E7 + inc bx + mov ax, word_11ED8 + test ax, ax + jz short loc_25C3 + mov cx, word_11ED4 + +loc_25A3: ; CODE XREF: sub_2574+4Dj + mov es, ax + mov ax, es:2 + cmp word ptr es:0, 0 + jnz short loc_25BF + mov cx, es + add cx, bx + jb short loc_25BB + cmp cx, ax + jbe short loc_25F4 + +loc_25BB: ; CODE XREF: sub_2574+41j + mov cx, word_11ED4 + +loc_25BF: ; CODE XREF: sub_2574+3Bj + cmp ax, cx + jnz short loc_25A3 + +loc_25C3: ; CODE XREF: sub_2574+29j + mov ax, word_11ED6 + mov cx, ax + sub ax, bx + jb short loc_25E7 + cmp ax, word_11EDA + jb short loc_25E7 + mov word_11ED6, ax + mov es, ax + mov es:2, cx + mov word ptr es:0, 1 + mov bx, ax + jmp short loc_264D +; --------------------------------------------------------------------------- + +loc_25E7: ; CODE XREF: sub_2574+16j sub_2574+21j ... + mov ax, 0 + mov word_10616, ax + stc + pop es + pop cx + pop bx + retf 2 +; --------------------------------------------------------------------------- + +loc_25F4: ; CODE XREF: sub_2574+45j + sub ax, cx + cmp ax, 1 + jbe short loc_2624 + add ax, cx + mov word ptr es:0, 1 + mov es:2, cx + mov bx, es + mov es, cx + mov es:2, ax + mov word ptr es:0, 0 + cmp bx, word_11ED8 + jnz short loc_264D + mov word_11ED8, cx + jmp short loc_264D +; --------------------------------------------------------------------------- + +loc_2624: ; CODE XREF: sub_2574+85j + mov word ptr es:0, 1 + mov bx, es + cmp bx, word_11ED8 + jnz short loc_264D + mov ax, word_11ED4 + mov cx, bx + push bx + +loc_2639: ; CODE XREF: sub_2574+D0j + les cx, es:0 + jcxz short loc_2648 + mov bx, es + cmp bx, ax + jb short loc_2639 + xor bx, bx + +loc_2648: ; CODE XREF: sub_2574+CAj + mov word_11ED8, bx + pop bx + +loc_264D: ; CODE XREF: sub_2574+71j sub_2574+A8j ... + mov es, bx + mov ax, 0 + xchg ax, word_10616 + mov es:4, ax + lea ax, [bx+1] + clc + +loc_265E: ; CODE XREF: sub_2664+12j sub_2664+1Aj + pop es + pop cx + pop bx + retf 2 +sub_2574 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_2664 proc far ; CODE XREF: sub_53C:loc_54Dp + ; sub_682+45p ... + push bx + mov bx, sp + push cx + push es + mov bx, ss:[bx+6] + dec bx + mov es, bx + cmp bx, word_11ED6 + jz short loc_26C8 + jb short loc_265E + xor bx, bx + cmp word ptr es:[bx], 1 + jnz short loc_265E + mov es:[bx], bx + mov cx, word_11ED8 + mov ax, es + mov word_11ED8, ax + jcxz short loc_2705 + cmp ax, cx + jb short loc_2697 + mov ax, cx + mov word_11ED8, ax + +loc_2697: ; CODE XREF: sub_2664+2Cj + mov cx, ax + mov ax, es:[bx+2] + cmp ax, word_11ED4 + jnz short loc_26A5 + mov ax, es + +loc_26A5: ; CODE XREF: sub_2664+3Dj + push ds + +loc_26A6: ; CODE XREF: sub_2664+4Dj sub_2664+54j + mov ds, cx + mov cx, [bx+2] + cmp cx, ax + ja short loc_26C5 + cmp [bx], bx + jnz short loc_26A6 + +loc_26B3: ; CODE XREF: sub_2664+5Fj + mov es, cx + cmp es:[bx], bx + jnz short loc_26A6 + mov cx, es:[bx+2] + mov [bx+2], cx + cmp cx, ax + jbe short loc_26B3 + +loc_26C5: ; CODE XREF: sub_2664+49j + pop ds + jmp short loc_2705 +; --------------------------------------------------------------------------- + +loc_26C8: ; CODE XREF: sub_2664+10j + xor bx, bx + mov ax, es:[bx+2] + mov word_11ED6, ax + cmp ax, word_11ED4 + jz short loc_2705 + mov es, ax + cmp es:[bx], bx + jnz short loc_2705 + mov ax, es:[bx+2] + mov word_11ED6, ax + mov cx, word_11ED4 + cmp ax, cx + jz short loc_2701 + jmp short loc_26F8 +; --------------------------------------------------------------------------- + nop + +loc_26F0: ; CODE XREF: sub_2664+99j + mov ax, es:[bx+2] + cmp ax, cx + jz short loc_2701 + +loc_26F8: ; CODE XREF: sub_2664+89j + mov es, ax + cmp es:[bx], bx + jnz short loc_26F0 + mov bx, es + +loc_2701: ; CODE XREF: sub_2664+87j sub_2664+92j + mov word_11ED8, bx + +loc_2705: ; CODE XREF: sub_2664+28j sub_2664+62j ... + clc + pop es + pop cx + pop bx + retf 2 +sub_2664 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_270C proc far ; CODE XREF: sub_EC36+28P + cmp word_10612, 0 + jz short loc_2727 + mov ax, word_10612 + mov es, ax + xor ax, ax + cmp word_10614, ax + mov word_10612, ax + jz short loc_2727 + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + +loc_2727: ; CODE XREF: sub_270C+5j sub_270C+15j + mov ax, 1 + retf +sub_270C endp + +; --------------------------------------------------------------------------- + xor ax, ax + stc + retf +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_2730 proc far ; CODE XREF: sub_C1DD+3F5P + ; sub_E41D+3C8P + cmp word_1063A, 0 + jz short locret_275F + push word_1063A + push cs + call near ptr sub_2664 + mov word_1063A, 0 + jmp short loc_274D +; --------------------------------------------------------------------------- + +loc_2747: ; CODE XREF: sub_2730+22j + dec ax + push ax + push cs + call near ptr sub_291E + +loc_274D: ; CODE XREF: sub_2730+15j + mov ax, word_1063C + test ax, ax + jnz short loc_2747 + cmp word_1063E, 0 + jz short locret_275F + call word_1063E + +locret_275F: ; CODE XREF: sub_2730+5j sub_2730+29j + retf +sub_2730 endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_2774 + +loc_2760: ; CODE XREF: sub_2774+32j + push ax + push es + push cs + call near ptr sub_2664 + pop ax + jmp short loc_276D +; END OF FUNCTION CHUNK FOR sub_2774 +; --------------------------------------------------------------------------- + nop +; START OF FUNCTION CHUNK FOR sub_2774 + +loc_276A: ; CODE XREF: sub_2774+24j + mov ax, 0FFF8h + +loc_276D: ; CODE XREF: sub_2774-Dj + stc + pop di + pop si + pop bp + retf 8 +; END OF FUNCTION CHUNK FOR sub_2774 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_2774 proc far + +arg_0 = word ptr 6 +arg_2 = dword ptr 8 +arg_6 = word ptr 0Ch + +; FUNCTION CHUNK AT 2760 SIZE 00000009 BYTES +; FUNCTION CHUNK AT 276A SIZE 0000000A BYTES + + push bp + mov bp, sp + push si + push di + mov di, word_1063C + shl di, 1 + mov ax, [bp+arg_6] + mov dx, ax + mul ah + mov bx, ax + shl ax, 2 + add ax, bx + mov word_10616, 4 + push ax + push cs + call near ptr sub_2560 + jb short loc_276A + mov es, ax + push word_1063C + push dx + push ax + push cs + call near ptr sub_2820 + jb short loc_2760 + push ds + lds si, [bp+arg_2] + mov di, bx + mov cx, bx + shl cx, 1 + rep movsw + push es + pop ds + mov si, bx + mov dx, [bp+arg_0] + mov dh, dl + mov cx, bx + xor di, di + shr dh, 1 + jb short loc_27CA + rep movsb + jmp short loc_27D0 +; --------------------------------------------------------------------------- + nop + +loc_27CA: ; CODE XREF: sub_2774+4Fj sub_2774+5Aj + lodsb + not al + stosb + loop loc_27CA + +loc_27D0: ; CODE XREF: sub_2774+53j + mov cx, bx + xor di, di + shr dh, 1 + sbb ah, ah + +loc_27D8: ; CODE XREF: sub_2774+6Aj + lodsb + xor al, ah + or [di], al + inc di + loop loc_27D8 + mov cx, bx + xor di, di + shr dh, 1 + sbb ah, ah + +loc_27E8: ; CODE XREF: sub_2774+7Aj + lodsb + xor al, ah + or [di], al + inc di + loop loc_27E8 + mov cx, bx + xor di, di + shr dh, 1 + sbb ah, ah + +loc_27F8: ; CODE XREF: sub_2774+8Aj + lodsb + xor al, ah + or [di], al + inc di + loop loc_27F8 + test dl, dl + jz short loc_2814 + mov ah, 4 + +loc_2806: ; CODE XREF: sub_2774+9Ej + xor si, si + mov cx, bx + +loc_280A: ; CODE XREF: sub_2774+9Aj + lodsb + and [di], al + inc di + loop loc_280A + dec ah + jnz short loc_2806 + +loc_2814: ; CODE XREF: sub_2774+8Ej + pop ds + mov ax, word_1063C + dec ax + pop di + pop si + pop bp + retf 8 +sub_2774 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_2820 proc far ; CODE XREF: sub_2774+2Fp + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push bx + cld + mov bx, [bp+arg_4] + cmp bx, 200h + cmc + mov ax, 0FFE1h + jb short loc_288F + cmp word_1063A, 0 + jnz short loc_2860 + mov word_10616, 4 + push 240h + push cs + call near ptr sub_2574 + mov word_1063A, ax + mov ax, 0FFF8h + jb short loc_288F + push es + push cx + push di + push ds + pop es + assume es:dseg + xor ax, ax + mov di, 21DCh + mov cx, 200h + rep stosw + pop di + pop cx + pop es + assume es:nothing + +loc_2860: ; CODE XREF: sub_2820+17j + mov ax, bx + shl bx, 1 + cmp ax, word_1063C + jnb short loc_287B + cmp word ptr [bx+21DCh], 0 + jz short loc_287F + push word ptr [bx+1DDCh] + push cs + call near ptr sub_2664 + jmp short loc_287F +; --------------------------------------------------------------------------- + +loc_287B: ; CODE XREF: sub_2820+48j + inc ax + mov word_1063C, ax + +loc_287F: ; CODE XREF: sub_2820+4Fj sub_2820+59j + mov ax, [bp+arg_2] + mov [bx+21DCh], ax + mov ax, [bp+arg_0] + mov [bx+1DDCh], ax + xor ax, ax + +loc_288F: ; CODE XREF: sub_2820+10j sub_2820+2Cj + pop bx + pop bp + retf 6 +sub_2820 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_2894 proc far ; CODE XREF: sub_C1DD+53P sub_C1DD+5CP ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + push ds + push si + push di + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_BAE + jb short loc_2916 + mov bx, ax + mov cx, 51Ah + push bx + push cx + push bx + push ds + push cx + push cs + call near ptr sub_3B4 + pop cx + pop bx + jb short loc_290E + mov al, byte_1061F + and al, 7Fh + cmp al, 3 + mov ax, 0FFF3h + jnz short loc_290E + xor si, si + mov ax, word_10636 + or ax, ax + jz short loc_28DA + push bx + push cx + push bx + push ds + push cx + push cs + call near ptr sub_3F0 + pop cx + pop bx + mov si, ax + +loc_28DA: ; CODE XREF: sub_2894+37j + test byte_1061F, 80h + jz short loc_28EE + push bx + push cx + push bx + push ds + push cx + push cs + call near ptr sub_590 + pop cx + pop bx + jb short loc_290E + +loc_28EE: ; CODE XREF: sub_2894+4Bj + push bx + push bx + push ds + push cx + push si + push cs + call loc_286 + pop bx + jb short loc_290E + push bx + push cs + call near ptr sub_B98 + mov ax, word_10628 + sub ax, word_10626 + inc ax + pop di + pop si + pop ds + pop bp + retf 4 +; --------------------------------------------------------------------------- + +loc_290E: ; CODE XREF: sub_2894+22j sub_2894+2Ej ... + push ax + push bx + push cs + call near ptr sub_B98 + pop ax + stc + +loc_2916: ; CODE XREF: sub_2894+10j + pop di + pop si + pop ds + pop bp + retf 4 +sub_2894 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_291E proc far ; CODE XREF: sub_2730+1Ap + mov bx, sp + xor dx, dx + mov bx, ss:[bx+4] + cmp bx, word_1063C + jnb short loc_2966 + mov cx, bx + shl bx, 1 + mov ax, [bx+21DCh] + or ax, ax + jz short loc_2966 + push word ptr [bx+1DDCh] + push cs + call near ptr sub_2664 + mov [bx+1DDCh], dx + mov [bx+21DCh], dx + inc cx + cmp cx, word_1063C + jnz short loc_295E + +loc_294F: ; CODE XREF: sub_291E+3Dj + dec word_1063C + jz short loc_295E + dec bx + dec bx + mov cx, [bx+1DDCh] + jcxz short loc_294F + nop + +loc_295E: ; CODE XREF: sub_291E+2Fj sub_291E+35j + mov ax, 0 + clc + retf 2 +; --------------------------------------------------------------------------- + nop + +loc_2966: ; CODE XREF: sub_291E+Cj sub_291E+18j + stc + mov ax, 0FFE1h + retf 2 +sub_291E endp + +; --------------------------------------------------------------------------- + nop + +loc_296E: ; CODE XREF: seg000:29CCj seg000:29D5j ... + pop di + pop si + pop bp + retf 6 +; --------------------------------------------------------------------------- + +loc_2974: ; CODE XREF: sub_BE76+2D7P + ; sub_DFEC+16AP + push bp + mov bp, sp + push si + push di + mov bx, [bp+6] + shl bx, 1 + mov ax, [bx+1DDCh] + mov cs:word_2B2B, ax + mov bx, [bx+21DCh] + xor ax, ax + xchg al, bh + mov word_126DC, ax + mov cx, ax + shl cx, 3 + add cx, [bp+0Ah] + dec cx + imul bx + mov cs:word_2B64, ax + cmp cx, word_102CE + jg short loc_29C8 + mov dx, word_102CA + cmp [bp+0Ah], dx + jl short loc_29C8 + mov di, [bp+8] + cmp word_102D0, di + jg short loc_29C8 + mov ax, bx + add ax, di + cmp ax, word_102D4 + jge short loc_29C8 + pop di + pop si + pop bp + jmp near ptr sub_2B68 +; --------------------------------------------------------------------------- + +loc_29C8: ; CODE XREF: seg000:29A4j seg000:29ADj ... + cmp cx, word_102CA + jl short loc_296E + mov dx, word_102CE + cmp [bp+0Ah], dx + jg short loc_296E + mov di, [bp+8] + cmp word_102D4, di + jl short loc_296E + mov ax, bx + add ax, di + cmp ax, word_102D0 + jle short loc_296E + cmp cx, dx + jle short loc_29F0 + mov cx, dx + +loc_29F0: ; CODE XREF: seg000:29ECj + mov al, [bp+0Ah] + and al, 7 + mov cs:byte_2A6D, al + xor si, si + mov ax, word_102CA + cmp [bp+0Ah], ax + jge short loc_2A15 + mov dx, ax + shr dx, 3 + add si, dx + mov dx, [bp+0Ah] + sar dx, 3 + sub si, dx + mov [bp+0Ah], ax + +loc_2A15: ; CODE XREF: seg000:2A01j + sub di, word_102D0 + jns short loc_2A26 + add bx, di + mov ax, word_126DC + imul di + sub si, ax + xor di, di + +loc_2A26: ; CODE XREF: seg000:2A19j + lea ax, [bx+di-1] + sub ax, word_102D2 + jle short loc_2A31 + sub bx, ax + +loc_2A31: ; CODE XREF: seg000:2A2Dj + mov cs:word_2B2F, bx + mov ax, [bp+0Ah] + shr ax, 3 + imul bx, di, 50h + add bx, ax + mov cs:word_2B32, bx + mov bx, cx + mov dx, 80FFh + and cl, 7 + sar dh, cl + mov cl, [bp+0Ah] + and cl, 7 + shr dl, cl + mov cx, ax + shr bx, 3 + sub bx, cx + jnz short loc_2A63 + and dl, dh + +loc_2A63: ; CODE XREF: seg000:2A5Fj + mov cs:word_2B35, bx + mov es, word_102D6 +; --------------------------------------------------------------------------- + db 0B1h +byte_2A6D db 12h ; DATA XREF: seg000:29F5w +; --------------------------------------------------------------------------- + mov al, 0C0h ; '' + out 7Ch, al + mov al, 0 + out 7Eh, al + out 7Eh, al + out 7Eh, al + out 7Eh, al + call loc_2B28 + mov al, 0CEh ; '' + out 7Ch, al + mov al, 0FFh + out 7Eh, al + out 7Eh, al + out 7Eh, al + out 7Eh, al + call loc_2B28 + mov ax, 0CDh ; '' + out 7Ch, al + call loc_2B28 + mov ax, 0CBh ; '' + out 7Ch, al + call loc_2B28 + mov ax, 0C7h ; '' + out 7Ch, al + call loc_2B28 + mov al, 0 + out 7Ch, al + pop di + pop si + pop bp + retf 6 + +; =============== S U B R O U T I N E ======================================= + + +sub_2AB2 proc near + test si, si + jz short loc_2AB9 + +loc_2AB6: ; CODE XREF: sub_2AB2+43j + mov ah, [si-1] + +loc_2AB9: ; CODE XREF: sub_2AB2+2j + mov al, [si] + inc si + mov bx, ax + shr bx, cl + and bl, dl + mov es:[di], bl + inc di + mov ch, 12h + dec ch + js short loc_2AEC + jz short loc_2ADF + +loc_2ACE: ; CODE XREF: sub_2AB2+2Bj + mov ah, al + mov al, [si] + inc si + mov bx, ax + shr bx, cl + mov es:[di], bl + inc di + dec ch + jnz short loc_2ACE + +loc_2ADF: ; CODE XREF: sub_2AB2+1Aj + mov ah, al + mov al, [si] + inc si + shr ax, cl + and al, dh + mov es:[di], al + inc di + +loc_2AEC: ; CODE XREF: sub_2AB2+18j + add si, 1234h + add di, 1234h + dec bp + jnz short loc_2AB6 + retn +sub_2AB2 endp + +; --------------------------------------------------------------------------- + +loc_2AF8: ; CODE XREF: seg000:2B25j + mov al, [si] + inc si + and al, dl + mov es:[di], al + inc di + cmp bx, 1 + jl short loc_2B15 + lea cx, [bx-1] + shr cx, 1 + rep movsw + adc cx, cx + rep movsb + lodsb + and al, dh + stosb + +loc_2B15: ; CODE XREF: seg000:2B04j + mov al, 0 + xchg al, ah + add si, ax + sub si, bx + mov ah, al + add di, 4Fh ; 'O' + sub di, bx + dec bp + jnz short loc_2AF8 + retn +; --------------------------------------------------------------------------- + +loc_2B28: ; CODE XREF: seg000:2A7Cp seg000:2A8Dp ... + push si + push ds +; --------------------------------------------------------------------------- + db 0B8h +word_2B2B dw 1234h ; DATA XREF: seg000:2982w + db 50h, 0BDh +word_2B2F dw 1234h ; DATA XREF: seg000:loc_2A31w + db 0BFh +word_2B32 dw 1234h ; DATA XREF: seg000:2A41w + db 0BBh +word_2B35 dw 1234h ; DATA XREF: seg000:loc_2A63w + db 0A1h, 0DCh, 25h, 48h, 80h, 0F9h, 0, 75h, 8, 8Ah, 0E0h + db 1Fh, 68h, 60h, 2Bh, 0EBh, 0B0h, 2Eh, 88h, 1Eh, 0C7h + db 2Ah, 2Bh, 0C3h, 2Eh, 0A3h, 0EEh, 2Ah, 0B8h, 4Fh, 0 + db 2Bh, 0C3h, 2Eh, 0A3h, 0F2h, 2Ah, 1Fh, 0E8h, 52h, 0FFh + db 1Fh, 5Eh, 81h, 0C6h +word_2B64 dw 1234h ; DATA XREF: seg000:299Cw +; --------------------------------------------------------------------------- + retn +; --------------------------------------------------------------------------- + db 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_2B68 proc far ; CODE XREF: seg000:29C5j sub_B899+C0P ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push ds + push si + push di + mov bx, [bp+arg_0] + shl bx, 1 + mov dx, [bx+21DCh] + mov cx, [bp+arg_4] + mov bp, [bp+arg_2] + mov ax, bp + shl ax, 2 + add bp, ax + shl bp, 4 + mov ax, cx + and cx, 7 + shr ax, 3 + add bp, ax + mov si, cx + mov ch, dh + shr ch, 1 + mov al, dl + mov ah, [si+50Ah] + mov cs:word_2D15, ax + test bp, 1 + jnz short loc_2BD8 + test dh, 1 + jnz short loc_2BC2 + mov cs:byte_2C75, ch + mov al, 50h ; 'P' + sub al, dh + mov cs:byte_2C73, al + mov cs:word_2D18, 0FF3Eh + jmp short loc_2C0A +; --------------------------------------------------------------------------- + +loc_2BC2: ; CODE XREF: sub_2B68+42j + mov cs:byte_2CA3, ch + mov al, 50h ; 'P' + sub al, dh + mov cs:byte_2CA1, al + mov cs:word_2D18, 0FF62h + jmp short loc_2C0A +; --------------------------------------------------------------------------- + +loc_2BD8: ; CODE XREF: sub_2B68+3Dj + dec bp + test dh, 1 + jnz short loc_2BF6 + dec ch + mov cs:byte_2CDA, ch + mov al, 4Eh ; 'N' + sub al, dh + mov cs:byte_2CD8, al + mov cs:word_2D18, 0FF90h + jmp short loc_2C0A +; --------------------------------------------------------------------------- + +loc_2BF6: ; CODE XREF: sub_2B68+74j + mov cs:byte_2D0B, ch + mov al, 4Fh ; 'O' + sub al, dh + mov cs:byte_2D09, al + mov cs:word_2D18, 0FFC6h + +loc_2C0A: ; CODE XREF: sub_2B68+58j sub_2B68+6Ej ... + mov ds, word ptr [bx+1DDCh] + xor si, si + mov al, 0C0h ; '' + out 7Ch, al + mov ax, si + out 7Eh, al + out 7Eh, al + out 7Eh, al + out 7Eh, al + mov ax, 0A800h + mov es, ax + assume es:nothing + call loc_2D12 + mov ax, 0FFCEh + out 7Ch, al + mov al, ah + out 7Eh, al + out 7Eh, al + out 7Eh, al + out 7Eh, al + call loc_2D12 + mov al, 0CDh ; '' + out 7Ch, al + call loc_2D12 + mov al, 0CBh ; '' + out 7Ch, al + call loc_2D12 + mov al, 0C7h ; '' + out 7Ch, al + call loc_2D12 + xor al, al + out 7Ch, al + pop di + pop si + pop ds + pop bp + retf 6 +sub_2B68 endp + +; --------------------------------------------------------------------------- + db 32h, 0D2h, 0ADh, 0D3h, 0C8h, 8Ah, 0F0h, 22h, 0C7h, 32h + db 0F0h, 0Ah, 0C2h, 0ABh, 8Ah, 0D6h, 0FEh, 0CDh, 75h, 0EEh + db 26h, 88h, 15h, 8Ah, 0D5h, 83h, 0C7h +byte_2C73 db 50h ; DATA XREF: sub_2B68+4Dw + db 0B5h +byte_2C75 db 11h ; DATA XREF: sub_2B68+44w + db 0FEh, 0CBh, 75h, 0E0h, 0C3h, 90h, 32h, 0D2h, 0Ah, 0EDh + db 74h, 12h, 0ADh, 0D3h, 0C8h, 8Ah, 0F0h, 22h, 0C7h, 32h + db 0F0h, 0Ah, 0C2h, 0ABh, 8Ah, 0D6h, 0FEh, 0CDh, 75h, 0EEh + db 0ACh, 32h, 0E4h, 0D3h, 0C8h, 0Ah, 0C2h, 0ABh, 4Fh, 8Ah + db 0D5h, 83h, 0C7h +byte_2CA1 db 50h ; DATA XREF: sub_2B68+63w + db 0B5h +byte_2CA3 db 11h ; DATA XREF: sub_2B68:loc_2BC2w + db 0FEh, 0CBh, 75h, 0D6h, 0C3h, 90h, 0ACh, 32h, 0E4h, 0D3h + db 0C8h, 8Ah, 0D4h, 86h, 0E0h, 32h, 0C0h, 0ABh, 0Ah, 0EDh + db 74h, 12h, 0ADh, 0D3h, 0C8h, 8Ah, 0F0h, 22h, 0C7h, 32h + db 0F0h, 0Ah, 0C2h, 0ABh, 8Ah, 0D6h, 0FEh, 0CDh, 75h, 0EEh + db 0ACh, 32h, 0E4h, 0D3h, 0C8h, 0Ah, 0C2h, 0ABh, 8Ah, 0D5h + db 83h, 0C7h +byte_2CD8 db 50h ; DATA XREF: sub_2B68+81w + db 0B5h +byte_2CDA db 11h ; DATA XREF: sub_2B68+78w + db 0FEh, 0CBh, 75h, 0CBh, 0C3h, 0ACh, 32h, 0E4h, 0D3h + db 0C8h, 8Ah, 0D4h, 86h, 0E0h, 32h, 0C0h, 0ABh, 0Ah, 0EDh + db 74h, 12h, 0ADh, 0D3h, 0C8h, 8Ah, 0F0h, 22h, 0C7h, 32h + db 0F0h, 0Ah, 0C2h, 0ABh, 8Ah, 0D6h, 0FEh, 0CDh, 75h, 0EEh + db 26h, 88h, 15h, 8Ah, 0D5h, 83h, 0C7h +byte_2D09 db 50h ; DATA XREF: sub_2B68+97w + db 0B5h +byte_2D0B db 11h ; DATA XREF: sub_2B68:loc_2BF6w + db 0FEh, 0CBh, 75h, 0D0h, 0C3h, 90h +; --------------------------------------------------------------------------- + +loc_2D12: ; CODE XREF: sub_2B68+BBp sub_2B68+CDp ... + mov di, bp +; --------------------------------------------------------------------------- + db 0BBh +word_2D15 dw 1234h ; DATA XREF: sub_2B68+35w + db 0E9h +word_2D18 dw 0FF3Eh ; DATA XREF: sub_2B68+51w sub_2B68+67w ... + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_2D1A proc far ; CODE XREF: sub_E41D+12DP + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push ds + push si + push di + xor di, di + mov ax, 4 + push ax + mov bx, [bp+arg_0] + cmp bx, word_1063C + jnb short loc_2DA9 + shl bx, 1 + mov cx, [bx+1DDCh] + jcxz short loc_2DA9 + mov ax, [bx+21DCh] + mul ah + mov bp, ax + mov es, word_1063A + assume es:nothing + mov ds, cx + mov bh, 0FFh + +loc_2D47: ; CODE XREF: sub_2D1A+76j + xor si, si + mov ax, bx + not ax + mov al, 80h ; '' + and ah, 0Fh + stosw + mov cx, bp + shr cx, 1 + rep movsw + sub di, bp + mov bl, 4 + mov cx, bp + shr cx, 1 + nop + +loc_2D62: ; CODE XREF: sub_2D1A+5Ej + ror bh, 1 + sbb dx, dx + +loc_2D66: ; CODE XREF: sub_2D1A+54j + lodsw + xor ax, dx + and es:[di], ax + inc di + inc di + loop loc_2D66 + sub di, bp + mov cx, bp + shr cx, 1 + dec bl + jnz short loc_2D62 + lea dx, [di-2] + xor ax, ax + repe scasw + mov di, dx + jz short loc_2D8D + lea di, [bp+di+2] + pop ax + dec ax + push ax + js short loc_2DA9 + +loc_2D8D: ; CODE XREF: sub_2D1A+69j + sub bh, 11h + jnb short loc_2D47 + mov cx, di + shr cx, 1 + push ds + push es + pop ds + pop es + xor ax, ax + mov di, ax + mov si, ax + rep movsw + stosw + clc + mov ax, 0 + jmp short loc_2DAD +; --------------------------------------------------------------------------- + +loc_2DA9: ; CODE XREF: sub_2D1A+13j sub_2D1A+1Bj ... + mov ax, 0FFF3h + stc + +loc_2DAD: ; CODE XREF: sub_2D1A+8Dj + pop di + pop di + pop si + pop ds + pop bp + retf 2 +sub_2D1A endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_2DB6 proc far ; CODE XREF: sub_DFEC+A2P + ; sub_DFEC+228P + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push ds + push si + push di + mov es, word_10322 + mov cx, [bp+arg_4] + mov di, [bp+arg_2] + mov bx, [bp+arg_0] + shl bx, 1 + mov bp, [bx+21DCh] + mov ds, word ptr [bx+1DDCh] + mov ax, di + shl ax, 2 + add di, ax + shl di, 4 + mov ax, cx + and cx, 7 + shr ax, 3 + add di, ax + xor si, si + lodsw + cmp al, 80h ; '' + jnz short loc_2E3F + mov al, 0C0h ; '' + pushf + cli + out 7Ch, al + popf + push ax + mov dx, bp + mov al, 50h ; 'P' + mul dl + mov bp, ax + shr dl, 1 + pop ax + nop + +loc_2E02: ; CODE XREF: sub_2DB6+85j + shr ah, 1 + sbb al, al + out 7Eh, al + shr ah, 1 + sbb al, al + out 7Eh, al + shr ah, 1 + sbb al, al + out 7Eh, al + shr ah, 1 + sbb al, al + out 7Eh, al + mov ch, dl + +loc_2E1C: ; CODE XREF: sub_2DB6+7Ej + lodsw + mov bl, ah + xor ah, ah + ror ax, cl + mov es:[di], ax + xor bh, bh + ror bx, cl + mov es:[di+50h], bx + add di, 0A0h ; '' + dec ch + jnz short loc_2E1C + sub di, bp + lodsw + cmp al, 80h ; '' + jz short loc_2E02 + out 7Ch, al + +loc_2E3F: ; CODE XREF: sub_2DB6+36j + pop di + pop si + pop ds + pop bp + retf 6 +sub_2DB6 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_2E46 proc far ; CODE XREF: sub_F0B4+2CP + mov cx, 100h + mov dx, 188h + +loc_2E4C: ; CODE XREF: sub_2E46+Bj + in al, dx + inc al + jnz short loc_2E57 + loop loc_2E4C + xor ax, ax + jmp short loc_2E6B +; --------------------------------------------------------------------------- + +loc_2E57: ; CODE XREF: sub_2E46+9j + pushf + cli + mov bh, 7 + call sub_2284 + and al, 3Fh + or al, 80h + mov bl, al + call sub_226E + popf + mov ax, 1 + +loc_2E6B: ; CODE XREF: sub_2E46+Fj + mov word_1032E, ax + retf +sub_2E46 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_2E70 proc near ; CODE XREF: sub_2E82+4p + mov bh, 0Fh + call sub_226E + mov dx, 188h + mov al, 0Eh + out dx, al + inc dx + inc dx + in al, dx + not al + retn +sub_2E70 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_2E82 proc far ; CODE XREF: sub_F104+F0P + pushf + cli + mov bl, 80h ; '' + call sub_2E70 + and ax, 3Fh + popf + retf +sub_2E82 endp + +; --------------------------------------------------------------------------- + xchg dx, bx + out dx, al + xchg dx, bx + in al, dx + not al + retn +; --------------------------------------------------------------------------- + db 0 + +; =============== S U B R O U T I N E ======================================= + + +sub_2E98 proc far ; CODE XREF: seg000:326Ep seg000:329Ep ... + test word_10336, 10h + jnz short loc_2EC0 + xor ax, ax + mov es, ax + assume es:seg000 + test es:byte_501, 80h + mov bx, 3E6h + jnz short loc_2EB2 + mov bx, 4CDh + +loc_2EB2: ; CODE XREF: sub_2E98+15j + mov dx, 3FDBh + mov al, bl + out dx, al + mov al, bh + out dx, al + mov al, 7 + out 37h, al + retf +; --------------------------------------------------------------------------- + +loc_2EC0: ; CODE XREF: sub_2E98+6j + in al, 61h ; PC/XT PPI port B bits: + ; 0: Tmr 2 gate  OR 03H=spkr ON + ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF + ; 3: 1=read high switches + ; 4: 0=enable RAM parity checking + ; 5: 0=enable I/O channel check + ; 6: 0=hold keyboard clock low + ; 7: 0=enable kbrd + and al, 0FCh + out 61h, al ; PC/XT PPI port B bits: + ; 0: Tmr 2 gate  OR 03H=spkr ON + ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF + ; 3: 1=read high switches + ; 4: 0=enable RAM parity checking + ; 5: 0=enable I/O channel check + ; 6: 0=hold keyboard clock low + ; 7: 0=enable kbrd + retf +sub_2E98 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_2EC8 proc near ; CODE XREF: sub_2EF0:loc_2F6Cp + ; sub_2EF0:loc_2FBAp ... + les bx, [si] + assume es:nothing + mov al, es:[bx] + sub al, 30h ; '0' + cmp al, 9 + ja short loc_2EEC + sub ah, ah + nop + +loc_2ED6: ; CODE XREF: sub_2EC8+21j + mov dx, cx + shl dx, 3 + add dx, cx + add cx, dx + add cx, ax + inc bx + mov al, es:[bx] + sub al, 30h ; '0' + cmp al, 9 + jbe short loc_2ED6 + nop + +loc_2EEC: ; CODE XREF: sub_2EC8+9j + mov [si], bx + retn +sub_2EC8 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_2EF0 proc far ; CODE XREF: sub_331E+BCp + ; sub_331E+10Fp + mov bx, sp + push si + mov si, ss:[bx+4] + jmp loc_2FA9 +; --------------------------------------------------------------------------- + +loc_2EFA: ; CODE XREF: sub_2EF0+C1j + xor cx, cx + mov al, es:[bx] + mov [si+8], al + inc word ptr [si] + cbw + cmp ax, 4Fh ; 'O' + jnz short loc_2F0E + jmp loc_2FD4 +; --------------------------------------------------------------------------- + nop + +loc_2F0E: ; CODE XREF: sub_2EF0+18j + sub ax, 3Ch ; '<' + test al, 1 + jnz short loc_2F40 + cmp ax, 18h + ja short loc_2F40 + xchg ax, bx + jmp cs:off_2F20[bx] +; --------------------------------------------------------------------------- +off_2F20 dw offset loc_2FEA ; DATA XREF: sub_2EF0+2Br + dw offset loc_2FF8 + dw offset loc_2F40 + dw offset loc_2F40 + dw offset loc_2F40 + dw offset loc_2F40 + dw offset loc_2F40 + dw offset loc_2F40 + dw offset loc_2FBA + dw offset loc_3006 + dw offset loc_2F40 + dw offset loc_2F3A + dw offset loc_2FC8 +; --------------------------------------------------------------------------- + +loc_2F3A: ; CODE XREF: sub_2EF0+2Bj + ; DATA XREF: sub_2EF0+46o + mov byte ptr [si+8], 48h ; 'H' + jmp short loc_2F6C +; --------------------------------------------------------------------------- + +loc_2F40: ; CODE XREF: sub_2EF0+23j sub_2EF0+28j ... + mov al, [si+8] + sub al, 41h ; 'A' + cmp al, 6 + ja short loc_2FA9 + nop + les bx, [si] + mov al, es:[bx] + cmp al, 2Bh ; '+' + jz short loc_2F57 + cmp al, 23h ; '#' + jnz short loc_2F5D + +loc_2F57: ; CODE XREF: sub_2EF0+61j + add byte ptr [si+8], 8 + inc word ptr [si] + +loc_2F5D: ; CODE XREF: sub_2EF0+65j + les bx, [si] + cmp byte ptr es:[bx], 2Dh ; '-' + jnz short loc_2F6C + add byte ptr [si+8], 10h + inc word ptr [si] + nop + +loc_2F6C: ; CODE XREF: sub_2EF0+4Ej sub_2EF0+73j + call sub_2EC8 + mov [si+0Ch], cx + or cx, cx + jle short loc_2F7B + cmp cx, 20h ; ' ' + jle short loc_2F81 + +loc_2F7B: ; CODE XREF: sub_2EF0+84j + mov cx, [si+0Eh] + mov [si+0Ch], cx + +loc_2F81: ; CODE XREF: sub_2EF0+89j + mov bx, cx + shl bx, 2 + mov ax, [bx+570h] + mov [si+10h], ax + les bx, [si] + cmp byte ptr es:[bx], 2Eh ; '.' + jnz short loc_2FA2 + mov bx, ax + shl ax, 1 + adc ax, bx + sar ax, 1 + mov [si+10h], ax + inc word ptr [si] + +loc_2FA2: ; CODE XREF: sub_2EF0+A3j + mov ax, 1 + pop si + retf 2 +; --------------------------------------------------------------------------- + +loc_2FA9: ; CODE XREF: sub_2EF0+7j sub_2EF0+57j ... + les bx, [si] + cmp byte ptr es:[bx], 0 + jz short loc_2FB4 + jmp loc_2EFA +; --------------------------------------------------------------------------- + +loc_2FB4: ; CODE XREF: sub_2EF0+BFj + xor ax, ax + pop si + retf 2 +; --------------------------------------------------------------------------- + +loc_2FBA: ; CODE XREF: sub_2EF0+2Bj + ; DATA XREF: sub_2EF0+40o + call sub_2EC8 + cmp cx, 20h ; ' ' + ja short loc_2FA9 + mov [si+0Eh], cx + jmp short loc_2FA9 +; --------------------------------------------------------------------------- + nop + +loc_2FC8: ; CODE XREF: sub_2EF0+2Bj + ; DATA XREF: sub_2EF0+48o + call sub_2EC8 + push cx + nop + push cs + call near ptr sub_3528 + jmp short loc_2FA9 +; --------------------------------------------------------------------------- + nop + +loc_2FD4: ; CODE XREF: sub_2EF0+1Aj + les bx, [si] + mov al, es:[bx] + sub al, 31h ; '1' + cmp al, 7 + ja short loc_2FA9 + sub ah, ah + inc ax + mov [si+0Ah], ax + inc word ptr [si] + jmp short loc_2FA9 +; --------------------------------------------------------------------------- + nop + +loc_2FEA: ; CODE XREF: sub_2EF0+2Bj + ; DATA XREF: sub_2EF0:off_2F20o + dec word ptr [si+0Ah] + cmp word ptr [si+0Ah], 0 + jnz short loc_2FA9 + inc word ptr [si+0Ah] + jmp short loc_2FA9 +; --------------------------------------------------------------------------- + +loc_2FF8: ; CODE XREF: sub_2EF0+2Bj + ; DATA XREF: sub_2EF0+32o + inc word ptr [si+0Ah] + cmp word ptr [si+0Ah], 9 + jnz short loc_2FA9 + dec word ptr [si+0Ah] + jmp short loc_2FA9 +; --------------------------------------------------------------------------- + +loc_3006: ; CODE XREF: sub_2EF0+2Bj + ; DATA XREF: sub_2EF0+42o + les bx, [si] + mov word ptr [si+14h], 0 + cmp byte ptr es:[bx], 31h ; '1' + jnz short loc_2FA9 + mov word ptr [si+14h], 1 + jmp short loc_2FA9 +sub_2EF0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_301A proc far ; CODE XREF: sub_ED60+54P + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + enter 4, 0 + push di + push si + push [bp+arg_2] + push [bp+arg_0] + nop + push cs + call near ptr sub_BAE + mov si, ax + cmp si, 0FFFEh + jnz short loc_3040 + mov ax, 0FFFEh + jmp short loc_303A +; --------------------------------------------------------------------------- + +loc_3037: ; CODE XREF: sub_301A+46j + mov ax, 0FFF8h + +loc_303A: ; CODE XREF: sub_301A+1Bj + pop si + pop di + leave + retf 4 +; --------------------------------------------------------------------------- + +loc_3040: ; CODE XREF: sub_301A+16j + push ax + push 0 + push 0 + push 2 + nop + push cs + call near ptr sub_7E8 + mov di, ax + push si + push 0 + push 0 + push 0 + nop + push cs + call near ptr sub_7E8 + push di + nop + push cs + call near ptr sub_2238 + jb short loc_3037 + mov [bp+var_2], ax + push si + push ax + push cx + push di + nop + push cs + call near ptr sub_7CE + mov es, [bp+var_2] + mov bx, ax + mov byte ptr es:[bx], 0FFh + push si + nop + push cs + call near ptr sub_B98 + cld + mov ax, word_10750 + mov [bp+var_4], ax + mov bx, ax + shl bx, 3 + mov word ptr [bx+2726h], 0 + mov ax, [bx+272Ch] + mov [bx+2728h], ax + xor di, di + xor si, si + +loc_309B: ; CODE XREF: sub_301A+122j + mov ds, [bp+var_2] + +loc_309E: ; CODE XREF: sub_301A+9Cj + lodsb + cmp al, 3Bh ; ';' + jnz short loc_30AC + +loc_30A3: ; CODE XREF: sub_301A+90j + lodsb + cmp al, 0FFh + jz short loc_30B8 + cmp al, 0Ah + jnz short loc_30A3 + +loc_30AC: ; CODE XREF: sub_301A+87j + cmp al, 30h ; '0' + jb short loc_30B4 + cmp al, 39h ; '9' + jbe short loc_30B8 + +loc_30B4: ; CODE XREF: sub_301A+94j + cmp al, 0FFh + jnz short loc_309E + +loc_30B8: ; CODE XREF: sub_301A+8Cj sub_301A+98j + xor cx, cx + cmp al, 30h ; '0' + jb short loc_30DE + +loc_30BE: ; CODE XREF: sub_301A+C2j + cmp al, 39h ; '9' + ja short loc_30DE + cmp al, 0FFh + jz short loc_30DE + sub al, 30h ; '0' + mov dl, al + mov dh, 0 + mov ax, cx + shl ax, 2 + add ax, cx + add ax, ax + add ax, dx + mov cx, ax + lodsb + cmp al, 30h ; '0' + jnb short loc_30BE + +loc_30DE: ; CODE XREF: sub_301A+A2j sub_301A+A6j ... + push seg dseg + pop ds + cmp al, 0FFh + jz short loc_313F + mov bx, word_10750 + shl bx, 3 + mov dx, bx + les bx, [bx+2726h] + mov es:[bx], cx + mov bx, dx + add word ptr [bx+2726h], 2 + or cx, cx + jz short loc_3108 + inc di + cmp di, 100h + jnz short loc_3138 + +loc_3108: ; CODE XREF: sub_301A+E5j + mov bx, word_10750 + shl bx, 3 + les bx, [bx+2726h] + xor di, di + mov es:[bx], di + inc word_10750 + cmp word_10750, 10h + jz short loc_313F + mov bx, word_10750 + shl bx, 3 + mov word ptr [bx+2726h], 0 + mov cx, [bx+272Ch] + mov [bx+2728h], cx + +loc_3138: ; CODE XREF: sub_301A+ECj + cmp al, 0FFh + jz short loc_313F + jmp loc_309B +; --------------------------------------------------------------------------- + +loc_313F: ; CODE XREF: sub_301A+CAj + ; sub_301A+107j ... + mov ax, word_10750 + cmp [bp+var_4], ax + mov ax, 0FFF5h + jz short loc_314C + xor ax, ax + +loc_314C: ; CODE XREF: sub_301A+12Ej + push [bp+var_2] + nop + push cs + call near ptr sub_2222 + pop si + pop di + leave + retf 4 +sub_301A endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_315A proc far ; CODE XREF: sub_3556+150p + test word_10336, 10h + jnz short loc_3194 + in al, 2 ; DMA controller, 8237A-5. + ; channel 1 current address + mov ah, 0 + mov word_106F2, ax + cli + push 8 + push seg seg000 + push offset loc_3206 + nop + push cs + call near ptr sub_804 + mov word_127E2, dx + mov word_127E0, ax + mov al, 36h ; '6' + out 77h, al + mov ax, word_106F4 + out 71h, al ; CMOS Memory: + ; used by real-time clock + mov al, ah + out 71h, al ; CMOS Memory: + ; used by real-time clock + mov al, byte ptr word_106F2 + and al, 0FEh + out 2, al ; DMA controller, 8237A-5. + ; channel 1 base address + ; (also sets current address) + sti + retf +; --------------------------------------------------------------------------- + +loc_3194: ; CODE XREF: sub_315A+6j + mov ax, 3206h + mov bx, 0 + call loc_454 + retf +sub_315A endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_319E proc far ; CODE XREF: sub_36FA+14p + cli + test word_10336, 10h + jnz short loc_31BD + push 8 + push word_127E2 + push word_127E0 + nop + push cs + call near ptr sub_804 + mov al, byte ptr word_106F2 + out 2, al ; DMA controller, 8237A-5. + ; channel 1 base address + ; (also sets current address) + sti + retf +; --------------------------------------------------------------------------- + +loc_31BD: ; CODE XREF: sub_319E+7j + mov ax, 0 + mov bx, 0 + call loc_454 + retf +sub_319E endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_31C8 proc far ; CODE XREF: sub_331E+F5p + mov bx, sp + mov dx, ss:[bx+4] + mov bx, word_1070A + dec bx + shl bx, 1 + mov ax, [bx+60Ch] + mov bx, dx + add ax, [bx+4] + mov [bx], ax + mov ax, [bx+6] + mov [bx+2], ax + mov word ptr [bx+0Ah], 4 + mov word ptr [bx+8], 48h ; 'H' + mov ax, 4 + mov [bx+0Eh], ax + mov [bx+0Ch], ax + mov word ptr [bx+10h], 8 + mov word ptr [bx+14h], 0 + retf 2 +sub_31C8 endp + +; --------------------------------------------------------------------------- + +loc_3206: ; DATA XREF: sub_315A+15o + push ax + push ds + mov ax, seg dseg + mov ds, ax + test word_10336, 10h + jz short loc_322E + mov ax, word_10640 + add ax, 4 + cmp ax, word_106F4 + mov word_10640, ax + jbe short loc_3274 + mov ax, word_106F4 + inc ax + sub word_10640, ax + jmp short loc_3238 +; --------------------------------------------------------------------------- + +loc_322E: ; CODE XREF: seg000:3213j + cld + mov ax, word_106F4 + out 71h, al ; CMOS Memory: + ; used by real-time clock + mov al, ah + out 71h, al ; CMOS Memory: + ; used by real-time clock + +loc_3238: ; CODE XREF: seg000:322Cj + push dx + push bx + push cx + push es + inc word_10702 + cmp word_10702, 14h + jnz short loc_3278 + xor ax, ax + mov word_10702, ax + cmp word_106F8, 1 + jnz short loc_32A2 + push ax + push 3 + push ax + nop + push cs + call near ptr sub_331E + dec ax + jnz short loc_32A2 + cmp word_10700, 0 + jnz short loc_32A2 + mov word_106F8, 0 + nop + push cs + call near ptr sub_2E98 + jmp short loc_32A2 +; --------------------------------------------------------------------------- + nop + +loc_3274: ; CODE XREF: seg000:3222j seg000:32ACj + pop ds + pop ax + retn +; --------------------------------------------------------------------------- + nop + +loc_3278: ; CODE XREF: seg000:3245j + test word_10702, 3 + jnz short loc_32A2 + cmp word_1074E, 1 + jnz short loc_32A2 + nop + push cs + call near ptr sub_3496 + dec ax + jnz short loc_32A2 + mov word_1074E, 0 + cmp word_106F8, 0 + jnz short loc_32A2 + nop + push cs + call near ptr sub_2E98 + nop + +loc_32A2: ; CODE XREF: seg000:3251j seg000:325Dj ... + pop es + pop cx + pop bx + pop dx + test word_10336, 10h + jnz short loc_3274 + mov al, 20h ; ' ' + out 0, al + pop ds + pop ax + iret +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_32B6 proc near ; CODE XREF: sub_331E:loc_33C4p + push si + mov si, bx + cmp word ptr [si+3Ah], 1 + jz short loc_331B + mov bx, [si+8] + shl bx, 1 + mov bx, [bx+4C0h] + cmp word ptr [si+0Ah], 1 + jnz short loc_32D2 + shl bx, 1 + jmp short loc_32D9 +; --------------------------------------------------------------------------- + +loc_32D2: ; CODE XREF: sub_32B6+16j + mov cx, [si+0Ah] + dec cx + dec cx + shr bx, cl + +loc_32D9: ; CODE XREF: sub_32B6+1Aj + test word_10336, 10h + jz short loc_32F2 + in al, 61h ; PC/XT PPI port B bits: + ; 0: Tmr 2 gate  OR 03H=spkr ON + ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF + ; 3: 1=read high switches + ; 4: 0=enable RAM parity checking + ; 5: 0=enable I/O channel check + ; 6: 0=hold keyboard clock low + ; 7: 0=enable kbrd + or al, 3 + out 61h, al ; PC/XT PPI port B bits: + ; 0: Tmr 2 gate  OR 03H=spkr ON + ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF + ; 3: 1=read high switches + ; 4: 0=enable RAM parity checking + ; 5: 0=enable I/O channel check + ; 6: 0=hold keyboard clock low + ; 7: 0=enable kbrd + mov ax, bx + mov bx, 254h + mov cx, 42h ; 'B' + jmp short loc_330A +; --------------------------------------------------------------------------- + nop + +loc_32F2: ; CODE XREF: sub_32B6+29j + mov al, 6 + out 37h, al + mov cx, 3FDBh + xor ax, ax + mov es, ax + assume es:seg000 + test es:byte_501, 80h + jz short loc_3313 + mov ax, bx + mov bx, 3E6h + +loc_330A: ; CODE XREF: sub_32B6+39j + mul bx + mov bx, 4CDh + div bx + mov bx, ax + +loc_3313: ; CODE XREF: sub_32B6+4Dj + mov al, bl + mov dx, cx + out dx, al + mov al, bh + out dx, al + +loc_331B: ; CODE XREF: sub_32B6+7j + pop si + retn +sub_32B6 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_331E proc far ; CODE XREF: seg000:3259p + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + enter 4, 0 + push di + push si + mov ax, word_106FC + imul bx, ax, 16h + cmp word ptr [bx+26F4h], 1 + jnz short loc_3344 + cmp word ptr [bx+26F8h], 1 + jz short loc_3344 + cmp word ptr [bx+26F0h], 20h ; ' ' + jz short loc_3344 + mov si, 1 + jmp short loc_3346 +; --------------------------------------------------------------------------- + +loc_3344: ; CODE XREF: sub_331E+11j sub_331E+18j ... + xor si, si + +loc_3346: ; CODE XREF: sub_331E+24j + mov cx, [bp+arg_4] + sub ax, cx + jz short loc_3356 + dec ax + jz short loc_3386 + dec ax + jz short loc_33B2 + jmp short loc_33C8 +; --------------------------------------------------------------------------- + nop + +loc_3356: ; CODE XREF: sub_331E+2Dj + imul bx, cx, 16h + cmp byte ptr [bx+26ECh], 48h ; 'H' + jz short loc_3364 + or si, si + jz short loc_3380 + +loc_3364: ; CODE XREF: sub_331E+40j + cmp byte ptr [bx+2702h], 48h ; 'H' + jz short loc_3372 + cmp word ptr [bx+270Ah], 1 + jg short loc_33AC + +loc_3372: ; CODE XREF: sub_331E+4Bj + cmp byte ptr [bx+2718h], 48h ; 'H' + jz short loc_3380 + cmp word ptr [bx+2720h], 1 + jg short loc_33C0 + +loc_3380: ; CODE XREF: sub_331E+44j sub_331E+59j + add bx, 26E4h + jmp short loc_33C4 +; --------------------------------------------------------------------------- + +loc_3386: ; CODE XREF: sub_331E+30j + imul bx, cx, 16h + cmp byte ptr [bx+2702h], 48h ; 'H' + jz short loc_3394 + or si, si + jz short loc_33AC + +loc_3394: ; CODE XREF: sub_331E+70j + cmp byte ptr [bx+26ECh], 48h ; 'H' + jnz short loc_33C8 + cmp byte ptr [bx+2718h], 48h ; 'H' + jz short loc_33C8 + cmp word ptr [bx+2720h], 1 + jle short loc_33C8 + jmp short loc_33C0 +; --------------------------------------------------------------------------- + nop + +loc_33AC: ; CODE XREF: sub_331E+52j sub_331E+74j + add bx, 26FAh + jmp short loc_33C4 +; --------------------------------------------------------------------------- + +loc_33B2: ; CODE XREF: sub_331E+33j + imul bx, cx, 16h + cmp byte ptr [bx+2718h], 48h ; 'H' + jz short loc_33C8 + or si, si + jnz short loc_33C8 + +loc_33C0: ; CODE XREF: sub_331E+60j sub_331E+8Bj + add bx, 2710h + +loc_33C4: ; CODE XREF: sub_331E+66j sub_331E+92j + call sub_32B6 + nop + +loc_33C8: ; CODE XREF: sub_331E+35j sub_331E+7Bj ... + imul bx, word_106FC, 16h + dec word ptr [bx+26F4h] + jnz short loc_33EC + add bx, 26E4h + push bx + nop + push cs + call near ptr sub_2EF0 + or ax, ax + jnz short loc_33EC + mov cl, byte ptr word_106FC + inc ax + shl ax, cl + or word_106FE, ax + +loc_33EC: ; CODE XREF: sub_331E+B3j sub_331E+C1j + mov ax, [bp+arg_2] + inc word_106FC + cmp word_106FC, ax + jnz short loc_3444 + mov ax, [bp+arg_0] + mov word_106FC, ax + cmp word_106FE, 7 + jnz short loc_3444 + xor di, di + mov word_106FE, di + mov si, 26E4h + nop + +loc_3410: ; CODE XREF: sub_331E+11Aj + push si + nop + push cs + call near ptr sub_31C8 + mov cx, di + mov ax, 1 + shl ax, cl + and ax, word_1072C + cmp ax, 1 + sbb ax, ax + inc ax + mov [si+12h], ax + push si + nop + push cs + call near ptr sub_2EF0 + inc di + add si, 16h + cmp si, 2726h + jb short loc_3410 + mov ax, 1 + pop si + pop di + leave + retf 6 +; --------------------------------------------------------------------------- + nop + +loc_3444: ; CODE XREF: sub_331E+D9j sub_331E+E6j + xor ax, ax + pop si + pop di + leave + retf 6 +sub_331E endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_344C proc far ; CODE XREF: sub_EB1A+28P + mov bx, sp + push si + mov si, ss:[bx+4] + cmp si, 1 + jl short loc_345E + cmp si, word_10750 + jle short loc_3465 + +loc_345E: ; CODE XREF: sub_344C+Aj + mov ax, 0FFF3h + pop si + retf 2 +; --------------------------------------------------------------------------- + +loc_3465: ; CODE XREF: sub_344C+10j + cmp word_10756, 1 + jnz short loc_348F + nop + push cs + call near ptr sub_2E98 + mov word_10752, si + mov bx, si + shl bx, 3 + mov ax, 271Eh + add bx, ax + mov ax, [bx+6] + mov [bx+2], ax + mov word ptr [bx], 0 + mov word_1074E, 1 + +loc_348F: ; CODE XREF: sub_344C+1Ej + xor ax, ax + pop si + retf 2 +sub_344C endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_3496 proc far ; CODE XREF: seg000:3289p + mov ax, word_10752 + dec ax + shl ax, 3 + mov bx, ax + les bx, [bx+2726h] + assume es:nothing + mov cx, es:[bx] + mov bx, ax + jcxz short loc_34FC + add word ptr [bx+2726h], 2 + test word_10336, 10h + jz short loc_34C8 + in al, 61h ; PC/XT PPI port B bits: + ; 0: Tmr 2 gate  OR 03H=spkr ON + ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF + ; 3: 1=read high switches + ; 4: 0=enable RAM parity checking + ; 5: 0=enable I/O channel check + ; 6: 0=hold keyboard clock low + ; 7: 0=enable kbrd + or al, 3 + out 61h, al ; PC/XT PPI port B bits: + ; 0: Tmr 2 gate  OR 03H=spkr ON + ; 1: Tmr 2 data ͼ AND 0fcH=spkr OFF + ; 3: 1=read high switches + ; 4: 0=enable RAM parity checking + ; 5: 0=enable I/O channel check + ; 6: 0=hold keyboard clock low + ; 7: 0=enable kbrd + mov dx, 12h + mov ax, 34DCh + mov bx, 42h ; 'B' + jmp short loc_34E7 +; --------------------------------------------------------------------------- + +loc_34C8: ; CODE XREF: sub_3496+1Fj + mov al, 6 + out 37h, al + mov bx, 3FDBh + xor dx, dx + mov es, dx + assume es:seg000 + test es:byte_501, 80h + mov dx, 1Eh + mov ax, 7800h + jnz short loc_34E7 + mov dx, 25h ; '%' + mov ax, 8000h + +loc_34E7: ; CODE XREF: sub_3496+30j sub_3496+49j + cmp cx, dx + ja short loc_34F0 + mov ax, 0FFFFh + jmp short loc_34F2 +; --------------------------------------------------------------------------- + +loc_34F0: ; CODE XREF: sub_3496+53j + div cx + +loc_34F2: ; CODE XREF: sub_3496+58j + mov dx, bx + out dx, al + mov al, ah + out dx, al + xor ax, ax + retf +; --------------------------------------------------------------------------- + nop + +loc_34FC: ; CODE XREF: sub_3496+12j + mov ax, [bx+272Ch] + mov [bx+2728h], ax + mov word ptr [bx+2726h], 0 + mov ax, 1 + retf +sub_3496 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_350E proc far ; CODE XREF: sub_36FA+Ap + cmp word_106F8, 1 + jnz short loc_3524 + mov word_106F8, 0 + nop + push cs + call near ptr sub_2E98 + xor ax, ax + retf +; --------------------------------------------------------------------------- + nop + +loc_3524: ; CODE XREF: sub_350E+5j + mov ax, 0FFE1h + retf +sub_350E endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_3528 proc far ; CODE XREF: sub_2EF0+DEp + ; sub_3556+12Dp + mov bx, sp + mov cx, ss:[bx+4] + cmp cx, 1Eh + jl short loc_3550 + cmp cx, 0F0h ; 'E + jg short loc_3550 + cli + mov word_106F6, cx + mov ax, word_1075A + mov dx, word_1075C + div cx + mov word_106F4, ax + sti + xor ax, ax + retf 2 +; --------------------------------------------------------------------------- + +loc_3550: ; CODE XREF: sub_3528+9j sub_3528+Fj + mov ax, 0FFF3h + retf 2 +sub_3528 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3556 proc far ; CODE XREF: sub_ED60+4BP sub_F0B4+3DP + +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + nop + push cs + call near ptr sub_11FE + cmp word_10758, 0 + jz short loc_3572 + xor ax, ax + pop di + pop si + leave + retf 2 +; --------------------------------------------------------------------------- + +loc_3572: ; CODE XREF: sub_3556+12j + mov dx, [bp+arg_0] + mov [bp+var_2], dx + or dx, dx + jg short loc_3581 + mov [bp+var_2], 1000h + +loc_3581: ; CODE XREF: sub_3556+24j + mov ax, [bp+var_2] + mov word_10704, ax + mov di, 26E4h + +loc_358A: ; CODE XREF: sub_3556+5Dj + mov word_10616, 8 + push [bp+var_2] + nop + push cs + call near ptr sub_2560 + mov [di+6], ax + mov word ptr [di+4], 0 + jnb short loc_35AC + mov ax, 0FFF8h + pop di + pop si + leave + retf 2 +; --------------------------------------------------------------------------- + nop + +loc_35AC: ; CODE XREF: sub_3556+4Aj + add di, 16h + cmp di, 2726h + jnz short loc_358A + mov di, 2726h + +loc_35B8: ; CODE XREF: sub_3556+97j + mov word_10616, 9 + push 201h + nop + push cs + call near ptr sub_2560 + mov [di+6], ax + mov word ptr [di+4], 0 + jnb short loc_35E6 + push word ptr [di+6] + mov word ptr [di+6], 0 + nop + push cs + call near ptr sub_2664 + mov ax, 0FFF8h + pop di + pop si + leave + retf 2 +; --------------------------------------------------------------------------- + +loc_35E6: ; CODE XREF: sub_3556+78j + add di, 8 + cmp di, 27A6h + jnz short loc_35B8 + mov word_106F8, 0 + mov word_10708, 0 + mov word_1070A, 0 + mov word_106FA, 3 + mov word_106FC, 0 + mov word_106FE, 0 + mov word_10700, 1 + mov word_10702, 0 + mov word_10706, 0 + cld + mov cx, 10h + mov di, 62Eh + push ds + pop es + assume es:dseg + mov ax, 78h ; 'x' + rep stosw + mov word_1074E, 0 + mov word_10750, 0 + mov word_10752, 0 + mov word_10754, 1 + mov word_10756, 1 + test word_10336, 10h + jz short loc_365E + mov ax, 10h + jmp short loc_3670 +; --------------------------------------------------------------------------- + +loc_365E: ; CODE XREF: sub_3556+101j + xor ax, ax + mov es, ax + assume es:seg000 + test es:byte_501, 80h + mov ax, 7CDh + jnz short loc_3670 + mov ax, 99Ah + +loc_3670: ; CODE XREF: sub_3556+106j + ; sub_3556+115j + and ax, 0FFFEh + mov dx, 78h ; 'x' + mul dx + mov word_1075C, dx + mov word_1075A, ax + push 78h ; 'x' + nop + push cs + call near ptr sub_3528 + mov bx, 26E8h + xor dx, dx + xor ax, ax + +loc_368D: ; CODE XREF: sub_3556+14Cj + les di, [bx] + assume es:nothing + mov cx, word_10704 + shr cx, 1 + rep stosw + adc cx, cx + rep stosb + add bx, 16h + inc dx + cmp dx, 3 + jl short loc_368D + nop + push cs + call near ptr sub_315A + test word_10336, 10h + jz short loc_36C4 + mov ax, 254h + mov cx, ax + mov al, 0B6h ; '' + out 43h, al ; Timer 8253-5 (AT: 8254.2). + mov al, cl + out 42h, al ; Timer 8253-5 (AT: 8254.2). + mov al, ch + out 42h, al ; Timer 8253-5 (AT: 8254.2). + jmp short loc_36EB +; --------------------------------------------------------------------------- + +loc_36C4: ; CODE XREF: sub_3556+159j + xor ax, ax + mov es, ax + assume es:seg000 + test es:byte_501, 80h + mov ax, 3E6h + jnz short loc_36D6 + mov ax, 4CDh + +loc_36D6: ; CODE XREF: sub_3556+17Bj + mov cx, ax + mov al, 3 + shl al, 1 + or al, 70h + mov dx, 3FDFh + out dx, al + mov al, cl + mov dx, 3FDBh + out dx, al + mov al, ch + out dx, al + +loc_36EB: ; CODE XREF: sub_3556+16Cj + mov word_10758, 1 + xor ax, ax + pop di + pop si + leave + retf 2 +sub_3556 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_36FA proc far ; CODE XREF: sub_EC36+41P sub_ED60+43P + push si + cmp word_10758, 0 + jz short loc_3717 + nop + push cs + call near ptr sub_350E + nop + push cs + call near ptr sub_3758 + nop + push cs + call near ptr sub_319E + mov word_10758, 0 + +loc_3717: ; CODE XREF: sub_36FA+6j + mov si, 26E4h + +loc_371A: ; CODE XREF: sub_36FA+3Aj + mov ax, [si+6] + cmp ax, 0 + jz short loc_372D + push ax + nop + push cs + call near ptr sub_2664 + mov word ptr [si+6], 0 + +loc_372D: ; CODE XREF: sub_36FA+26j + add si, 16h + cmp si, 2726h + jnz short loc_371A + mov si, 2726h + +loc_3739: ; CODE XREF: sub_36FA+59j + mov ax, [si+6] + cmp ax, 0 + jz short loc_374C + push ax + nop + push cs + call near ptr sub_2664 + mov word ptr [si+6], 0 + +loc_374C: ; CODE XREF: sub_36FA+45j + add si, 8 + cmp si, 27A6h + jnz short loc_3739 + pop si + retf +sub_36FA endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_3758 proc far ; CODE XREF: sub_36FA+Fp + cmp word_1074E, 1 + jnz short loc_376E + mov word_1074E, 0 + nop + push cs + call near ptr sub_2E98 + xor ax, ax + retf +; --------------------------------------------------------------------------- + nop + +loc_376E: ; CODE XREF: sub_3758+5j + mov ax, 0FFE1h + retf +sub_3758 endp + +; --------------------------------------------------------------------------- +; START OF FUNCTION CHUNK FOR sub_3778 + +loc_3772: ; CODE XREF: sub_3778+Ej sub_3778+1Dj ... + pop di + pop si + pop bp + retf 0Ah +; END OF FUNCTION CHUNK FOR sub_3778 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3778 proc far ; CODE XREF: sub_EEB2+33P sub_F022+EP + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + +; FUNCTION CHUNK AT 3772 SIZE 00000006 BYTES + + push bp + mov bp, sp + push si + push di + mov ax, [bp+arg_6] + mov cx, [bp+arg_0] + sar cx, 3 + jle short loc_3772 + mov si, [bp+arg_2] + mov di, [bp+arg_8] + sar di, 3 + jns short loc_379E + add cx, di + jle short loc_3772 + shl di, 2 + add si, di + xor di, di + +loc_379E: ; CODE XREF: sub_3778+19j + cmp di, 50h ; 'P' + jge short loc_3772 + add cx, di + cmp cx, 50h ; 'P' + jl short loc_37AD + mov cx, 50h ; 'P' + +loc_37AD: ; CODE XREF: sub_3778+30j + sub cx, di + imul ax, 50h + add di, ax + push ds + mov es, word_102D6 + assume es:nothing + mov ds, [bp+arg_4] + mov bp, cx + cld + nop + +loc_37C0: ; CODE XREF: sub_3778+BBj + mov cl, 2 + mov bl, [si] + mov bh, 0 + shl bx, cl + mov ax, cs:[bx+1E22h] + mov dx, cs:[bx+1E24h] + inc si + shl ax, cl + shl dx, cl + mov bl, [si] + mov bh, 0 + shl bx, cl + or ax, cs:[bx+1E22h] + or dx, cs:[bx+1E24h] + inc si + shl ax, cl + shl dx, cl + mov bl, [si] + mov bh, 0 + shl bx, cl + or ax, cs:[bx+1E22h] + or dx, cs:[bx+1E24h] + inc si + shl ax, cl + shl dx, cl + mov bl, [si] + mov bh, 0 + shl bx, cl + or ax, cs:[bx+1E22h] + or dx, cs:[bx+1E24h] + inc si + mov es:[di], al + mov bx, es + mov es:[di-8000h], ah + add bh, 10h + mov es, bx + assume es:nothing + mov es:[di], dl + add bh, 28h ; '(' + mov es, bx + assume es:nothing + mov es:[di], dh + sub bh, 38h ; '8' + mov es, bx + assume es:nothing + inc di + dec bp + jnz short loc_37C0 + pop ds + pop di + pop si + pop bp + retf 0Ah +sub_3778 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_383C proc far ; CODE XREF: sub_BA84+A0P sub_BA84+B6P ... + +arg_0 = word ptr 6 +arg_2 = dword ptr 8 +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh +arg_A = word ptr 10h + + push bp + mov bp, sp + push si + push di + push ds + mov es, word_10322 + assume es:nothing + mov cx, [bp+arg_A] + mov di, [bp+arg_8] + mov bx, [bp+arg_6] + lds si, [bp+arg_2] + mov dx, [bp+arg_0] + mov bp, bx + mov ax, di + shl ax, 2 + add di, ax + shl di, 4 + mov al, 0C0h ; '' + pushf + cli + out 7Ch, al + popf + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + mov al, 0Bh + out 68h, al + +loc_3884: ; CODE XREF: sub_383C+98j + lodsb + or al, al + jz short loc_38D6 + mov ah, 0 + add ax, 5680h + and ax, 0FF7Fh + mov bx, cx + and cx, 7 + shr bx, 3 + add di, bx + out 0A1h, al ; Interrupt Controller #2, 8259A + mov al, ah + out 0A3h, al ; Interrupt Controller #2, 8259A + mov dx, 10h + xor ch, ch + +loc_38A6: ; CODE XREF: sub_383C+8Ej + mov al, ch + or al, 20h + out 0A5h, al ; Interrupt Controller #2, 8259A + in al, 0A9h ; Interrupt Controller #2, 8259A + mov ah, al + mov al, ch + out 0A5h, al ; Interrupt Controller #2, 8259A + in al, 0A9h ; Interrupt Controller #2, 8259A + mov bh, al + mov bl, 0 + shr ax, cl + shr bx, cl + xchg al, ah + stosw + mov es:[di], bl + add di, 4Eh ; 'N' + inc ch + dec dx + jnz short loc_38A6 + sub di, 500h + xor ch, ch + add cx, bp + jmp short loc_3884 +; --------------------------------------------------------------------------- + +loc_38D6: ; CODE XREF: sub_383C+4Bj + mov al, 0Ah + out 68h, al + xor al, al + out 7Ch, al + pop ds + pop di + pop si + pop bp + retf 0Ch +sub_383C endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_38E6 proc far ; CODE XREF: sub_A92B+7CP + ; sub_AFD6+13BP ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push di + mov cx, [bp+arg_6] + mov di, [bp+arg_4] + mov dx, [bp+arg_0] + mov bp, [bp+arg_2] + add bp, 5680h + and bp, 0FF7Fh + pushf + mov al, 0C0h ; '' + cli + out 7Ch, al + popf + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + mov al, 0Bh + out 68h, al + mov ax, di + shl ax, 2 + add di, ax + shl di, 4 + mov ax, cx + and cx, 7 + shr ax, 3 + add di, ax + mov es, word_10322 + mov ax, bp + out 0A1h, al ; Interrupt Controller #2, 8259A + mov al, ah + out 0A3h, al ; Interrupt Controller #2, 8259A + mov dx, 10h + xor ch, ch + +loc_3946: ; CODE XREF: sub_38E6+84j + mov al, ch + or al, 20h + out 0A5h, al ; Interrupt Controller #2, 8259A + in al, 0A9h ; Interrupt Controller #2, 8259A + mov ah, al + mov al, ch + out 0A5h, al ; Interrupt Controller #2, 8259A + in al, 0A9h ; Interrupt Controller #2, 8259A + mov bh, al + mov bl, 0 + shr ax, cl + shr bx, cl + xchg al, ah + stosw + mov es:[di], bl + add di, 4Eh ; 'N' + inc ch + dec dx + jnz short loc_3946 + mov al, 0Ah + out 68h, al + xor al, al + out 7Ch, al + pop di + pop bp + retf 8 +sub_38E6 endp + +; --------------------------------------------------------------------------- + nop +dword_397A dd 0 ; DATA XREF: sub_3980+6r sub_3980+57w ... +byte_397E db 0 ; DATA XREF: seg000:3A58r seg000:3A6Fw + db 90h ; E + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3980 proc far ; CODE XREF: sub_F0B4+35P + +var_10 = word ptr -10h +var_A = word ptr -0Ah +arg_0 = dword ptr 6 + + enter 10h, 0 + push si + push di + mov ax, word ptr cs:dword_397A + or ax, word ptr cs:dword_397A+2 + jnz short loc_39F9 + push large [bp+arg_0] + push cs + call near ptr sub_A66 + lea ax, [bp+var_10] + push ss + push ax + push 10h + push cs + call near ptr sub_9B2 + mov di, [bp+var_10] + mov si, [bp+var_A] + push di + push cs + call near ptr sub_2560 + mov word_12F84, ax + push ax + push 0 + push di + push cs + call near ptr sub_9B2 + push cs + call near ptr sub_946 + mov cx, di + mov ax, word_12F84 + mov es, ax + mov ax, si + xor bx, bx + +loc_39C9: ; CODE XREF: sub_3980+50j + xor es:[bx], al + sub al, es:[bx] + inc bx + loop loc_39C9 + mov ax, 3521h + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + mov word ptr cs:dword_397A, bx + mov word ptr cs:dword_397A+2, es + mov word_12F80, 0 + mov word_12F82, 0FFFFh + push ds + push cs + pop ds + assume ds:seg000 + mov dx, 3A58h + mov ax, 2521h + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + assume ds:dseg + +loc_39F9: ; CODE XREF: sub_3980+Fj + push ds + mov cx, 0FFFFh + mov al, 0 + les di, [bp+arg_0] + repne scasb + not cx + sub di, cx + mov si, di + mov di, 2E00h + push ds + push es + pop ds + pop es + shr cx, 1 + rep movsw + adc cx, cx + rep movsb + pop ds + pop di + pop si + leave + retf 4 +sub_3980 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_3A20 proc far ; CODE XREF: sub_EC36+3P + mov ax, word ptr cs:dword_397A + or ax, word ptr cs:dword_397A+2 + jz short locret_3A57 + push word_12F84 + push cs + call near ptr sub_2664 + push ds + lds dx, cs:dword_397A + mov ax, 2521h + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + xor ax, ax + mov word ptr cs:dword_397A, ax + mov word ptr cs:dword_397A+2, ax + cmp word_12F80, ax + jz short locret_3A57 + push word_12F80 + push cs + call near ptr sub_1C94 + +locret_3A57: ; CODE XREF: sub_3A20+9j sub_3A20+2Dj + retf +sub_3A20 endp + +; --------------------------------------------------------------------------- + cmp cs:byte_397E, 0 + jz short loc_3A65 + jmp cs:dword_397A +; --------------------------------------------------------------------------- + +loc_3A65: ; CODE XREF: seg000:3A5Ej + pusha + push ds + push es + mov bp, sp + mov di, seg dseg + mov ds, di + inc cs:byte_397E + push word ptr [bp+18h] + popf + mov cs:byte_3ABC, ah + mov si, 3A8Ch + +loc_3A80: ; CODE XREF: seg000:3A86j + add si, 4 + cmp ah, cs:[si] + jnz short loc_3A80 + mov di, word_12F82 + jmp word ptr cs:[si+2] +; --------------------------------------------------------------------------- + db 3Dh, 0, 0C0h, 3Ah, 3Eh, 0, 0F2h, 3Ah, 3Fh, 0, 0Fh, 3Bh + db 42h, 0, 23h, 3Bh, 46h, 0, 84h, 3Bh, 40h, 0, 88h, 3Bh + db 45h, 0, 88h, 3Bh, 4Ch, 0, 66h, 3Bh, 57h, 0, 88h, 3Bh + db 5Ch, 0, 88h, 3Bh, 44h, 0, 72h, 3Bh +byte_3ABC db 0 ; DATA XREF: seg000:3A78w + db 0 + db 8Ch, 3Bh, 0A8h, 2 dup(0Fh), 85h, 0C6h, 0, 0Bh, 0FFh + db 0Fh, 89h, 0C0h, 0, 1Eh, 68h, 0, 2Eh, 0FFh, 76h, 2, 52h + db 0Eh, 0E8h, 0E0h, 0, 0Bh, 0C0h, 0Fh, 84h, 0AEh, 0, 0A3h + db 80h, 2Eh, 8Eh, 0C0h, 26h, 8Eh, 6, 2 dup(0), 26h, 0A1h + db 2 dup(0), 0A3h, 82h, 2Eh, 0E9h, 0B5h, 0, 3Bh, 0DFh + db 0Fh, 85h, 94h, 0, 0FFh, 36h, 80h, 2Eh, 0Eh, 0E8h, 94h + db 0E1h, 0C7h, 6, 80h, 2Eh, 2 dup(0), 0C7h, 6, 82h, 2Eh + db 2 dup(0FFh), 0E9h, 98h, 0, 3Bh, 0DFh, 75h, 79h, 0FFh + db 76h, 2, 52h, 51h, 0FFh, 36h, 80h, 2Eh, 0Eh, 0E8h, 3Eh + db 0E2h, 0E9h, 84h, 0, 3Bh, 0DFh, 75h, 65h, 0Bh, 0C9h + db 7Ch, 73h, 3Ch, 1, 74h, 28h, 7Ch, 1Ah, 8Eh, 6, 80h, 2Eh + db 26h, 8Bh, 2 dup(16h), 0, 26h, 8Bh, 0Eh, 18h, 0, 26h + db 2Bh, 16h, 12h, 0, 26h, 1Bh, 0Eh, 14h, 0, 0EBh, 0Ch + db 51h, 52h, 0FFh, 36h, 80h, 2Eh, 0Eh, 0E8h, 37h, 0E2h + db 5Ah, 59h, 0FFh, 36h, 80h, 2Eh, 51h, 52h, 0Eh, 0E8h + db 67h, 0E2h, 89h, 56h, 0Eh, 0EBh, 41h, 2Eh, 0C5h, 16h + db 7Ah, 39h, 0B8h, 21h, 25h, 0CDh, 21h, 0EBh, 1Ah, 8Ah + db 0C8h, 0B8h, 1, 0, 0D3h, 0E0h, 2Eh, 85h, 6, 82h, 3Bh + db 75h, 8, 0EBh, 0Ah, 0CFh, 14h, 8Bh, 0CFh, 74h, 16h, 3Bh + db 0DFh, 74h, 12h, 2Eh, 0FEh, 0Eh, 7Eh, 39h, 0FFh, 76h + db 18h, 9Dh, 7, 1Fh, 61h, 0FAh, 2Eh, 0FFh, 2Eh, 7Ah, 39h + db 80h, 4Eh, 18h, 1, 0B8h, 1, 0, 0EBh, 4, 80h, 66h, 18h + db 0FEh, 89h, 46h, 12h, 2Eh, 0FEh, 0Eh, 7Eh, 39h, 7, 1Fh + db 61h, 0CFh, 0 +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push 1Fh + push cs + call near ptr sub_2560 + jb loc_3CA0 + mov si, ax + push large dword ptr [bp+0Ah] + push cs + call near ptr sub_682 + or ax, ax + jz loc_3C99 + mov es, si + mov es:0, ax + mov ax, word_12F84 + mov fs, ax + xor ax, ax + mov di, ax + +loc_3BE6: ; CODE XREF: seg000:3C00j + cmp byte ptr fs:[di], 0 + jz loc_3C8E + lea bx, [di+3] + push large dword ptr [bp+6] + push fs + push bx + call sub_3CA8 + jnz short loc_3C02 + add di, 20h ; ' ' + jmp short loc_3BE6 +; --------------------------------------------------------------------------- + +loc_3C02: ; CODE XREF: seg000:3BFBj + mov es, si + mov eax, fs:[di+14h] + mov es:0Eh, eax + push word ptr es:0 + push eax + push 0 + push cs + call near ptr sub_748 + mov ax, 1D0Ch + mov dl, fs:[di+2] + or dl, dl + mov es, si + jz short loc_3C30 + mov es:1Eh, dl + mov ax, 1D50h + +loc_3C30: ; CODE XREF: seg000:3C26j + mov es:4, ax + mov ax, fs:[di] + cmp ax, 0F388h + jz short loc_3C46 + cmp ax, 9595h + jz short loc_3C50 + mov ax, 5 + jmp short loc_3C8E +; --------------------------------------------------------------------------- + +loc_3C46: ; CODE XREF: seg000:3C3Aj + mov ax, es:4 + mov es:2, ax + jmp short loc_3C65 +; --------------------------------------------------------------------------- + +loc_3C50: ; CODE XREF: seg000:3C3Fj + mov word ptr es:2, 1CBEh + mov word ptr es:1Ah, 0 + mov word ptr es:1Ch, 0FFFFh + +loc_3C65: ; CODE XREF: seg000:3C4Ej + movzx ebx, word ptr fs:[di+10h] + movzx edx, word ptr fs:[di+12h] + mov es:6, ebx + mov es:16h, edx + xor eax, eax + mov es:0Ah, eax + mov es:12h, eax + mov ax, si + jmp short loc_3CA2 +; --------------------------------------------------------------------------- + +loc_3C8E: ; CODE XREF: seg000:3BEAj seg000:3C44j + mov es, si + push word ptr es:0 + push cs + call near ptr sub_53C + +loc_3C99: ; CODE XREF: seg000:3BD3j + push si + push cs + call near ptr sub_2664 + jmp short $+2 + +loc_3CA0: ; CODE XREF: seg000:3BC3j + xor ax, ax + +loc_3CA2: ; CODE XREF: seg000:3C8Cj + pop di + pop si + pop bp + retf 8 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_3CA8 proc near ; CODE XREF: seg000:3BF8p + +arg_0 = dword ptr 4 +arg_4 = dword ptr 8 + + push bp + mov bp, sp + push si + push ds + cld + les bx, [bp+arg_4] + lds si, [bp+arg_0] + +loc_3CB4: ; CODE XREF: sub_3CA8+2Aj + mov ah, es:[bx] + inc bx + lodsb + sub al, 61h ; 'a' + cmp al, 19h + ja short loc_3CC1 + sub al, 20h ; ' ' + +loc_3CC1: ; CODE XREF: sub_3CA8+15j + sub ah, 61h ; 'a' + cmp ah, 19h + ja short loc_3CCC + sub ah, 20h ; ' ' + +loc_3CCC: ; CODE XREF: sub_3CA8+1Fj + cmp ah, al + jnz short loc_3CD6 + add al, 61h ; 'a' + jnz short loc_3CB4 + jmp short loc_3CD8 +; --------------------------------------------------------------------------- + +loc_3CD6: ; CODE XREF: sub_3CA8+26j + xor ax, ax + +loc_3CD8: ; CODE XREF: sub_3CA8+2Cj + test ax, ax + pop ds + pop si + pop bp + retn 8 +sub_3CA8 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: noreturn + +sub_3CE0 proc far ; CODE XREF: start+80p start+10Dp ... + push si + push di + push ds + mov ax, 17DAh + push ax ; buf + nop + push cs + call near ptr ___ErrorMessage + mov ax, 3 + push ax ; status + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + add sp, 6 + pop di + pop si + retf +sub_3CE0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl stpcpy(char *dest, const char *src) +_stpcpy proc far ; CODE XREF: __DOSENV+DDp + ; __DOSENV+140p ... + +var_2 = word ptr -2 +dest = dword ptr 6 +s = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 2 + push si + push di + push word ptr [bp+s+2] + push word ptr [bp+s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + mov [bp+var_2], ax + inc ax + push ax ; n + push word ptr [bp+s+2] + push word ptr [bp+s] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + add ax, [bp+var_2] + pop di + pop si + mov sp, bp + pop bp + retf +_stpcpy endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn + +; void abort(void) +_abort proc far ; CODE XREF: terminate(void)+4p + ; ___call_terminate+6Ep ... + push si + push di + mov ax, 16h + push ax + nop + push cs + call near ptr sub_51CC + pop cx + nop + push cs + call near ptr sub_3CE0 +; --------------------------------------------------------------------------- + pop di + pop si + retf +_abort endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl atexit(void (*func)(void)) +_atexit proc far + +func = dword ptr 6 + + push bp + mov bp, sp + push si + push di + cmp word_118FA, 20h ; ' ' + jnz short loc_3D5D + mov ax, 1 + jmp short loc_3D79 +; --------------------------------------------------------------------------- + +loc_3D5D: ; CODE XREF: _atexit+Aj + mov bx, word_118FA + mov cl, 2 + shl bx, cl + mov dx, word ptr [bp+func+2] + mov ax, word ptr [bp+func] + mov [bx-3B26h], dx + mov [bx-3B28h], ax + inc word_118FA + xor ax, ax + +loc_3D79: ; CODE XREF: _atexit+Fj + pop di + pop si + pop bp + retf +_atexit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl registerbgidriver(void (*driver)(void)) +_registerbgidriver proc far ; CODE XREF: _registerbgifont+Dp + ; seg000:44B0p ... + +driver = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + push si + push di + push [bp+arg_2] + push [bp+driver] + nop + push cs + call near ptr sub_4AE7 + pop cx + pop cx + pop di + pop si + pop bp + retf +_registerbgidriver endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl registerbgifont(void (*font)(void)) +_registerbgifont proc far ; CODE XREF: sub_8E1B+3A5p + +driver = dword ptr 6 + + push bp + mov bp, sp + push si + push di + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + pop di + pop si + pop bp + retf +_registerbgifont endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall _DOSENV(__int32, char *s, int, int) +__DOSENV proc near ; CODE XREF: sub_A2EB+1E4p + +dest = dword ptr -0Ah +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = dword ptr 4 +s = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 0Ah + push si + push di + mov [bp+var_6], 1 + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + or ax, dx + jz short loc_3DFB + mov [bp+var_6], 0 + jmp short loc_3DE6 +; --------------------------------------------------------------------------- + +loc_3DCD: ; CODE XREF: __DOSENV+50j + les bx, [bp+var_4] + add word ptr [bp+var_4], 4 + push word ptr es:[bx+2] + push word ptr es:[bx] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + inc ax + add [bp+var_6], ax + +loc_3DE6: ; CODE XREF: __DOSENV+22j + les bx, [bp+var_4] + mov ax, es:[bx] + or ax, es:[bx+2] + jz short loc_3DFB + les bx, es:[bx] + cmp byte ptr es:[bx], 0 + jnz short loc_3DCD + +loc_3DFB: ; CODE XREF: __DOSENV+1Bj __DOSENV+47j + inc [bp+var_6] + mov ax, word ptr [bp+s] + or ax, word ptr [bp+s+2] + jz short loc_3E19 + push word ptr [bp+s+2] + push word ptr [bp+s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + add ax, 3 + add [bp+var_6], ax + +loc_3E19: ; CODE XREF: __DOSENV+5Bj + cmp [bp+var_6], 8000h + jb short loc_3E23 + jmp loc_3F0A +; --------------------------------------------------------------------------- + +loc_3E23: ; CODE XREF: __DOSENV+75j + mov ax, [bp+var_6] + add ax, 0Fh + push ax + nop + push cs + call sub_4C1A + pop cx + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + or ax, dx + jnz short loc_3E3D + jmp loc_3F0A +; --------------------------------------------------------------------------- + +loc_3E3D: ; CODE XREF: __DOSENV+8Fj + les bx, [bp+arg_0] + mov ax, word ptr [bp+dest] + mov es:[bx+2], dx + mov es:[bx], ax + add word ptr [bp+dest], 0Fh + and word ptr [bp+dest], 0FFF0h + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + or ax, dx + jz short loc_3EB3 + les bx, [bp+var_4] + mov ax, es:[bx] + or ax, es:[bx+2] + jz short loc_3EB3 + jmp short loc_3E9C +; --------------------------------------------------------------------------- + +loc_3E70: ; CODE XREF: __DOSENV+106j + les bx, [bp+var_4] + add word ptr [bp+var_4], 4 + push word ptr es:[bx+2] + push word ptr es:[bx] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + inc word ptr [bp+dest] + +loc_3E9C: ; CODE XREF: __DOSENV+C5j + les bx, [bp+var_4] + mov ax, es:[bx] + or ax, es:[bx+2] + jz short loc_3EBD + les bx, es:[bx] + cmp byte ptr es:[bx], 0 + jnz short loc_3E70 + jmp short loc_3EBD +; --------------------------------------------------------------------------- + +loc_3EB3: ; CODE XREF: __DOSENV+B7j __DOSENV+C3j + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + inc word ptr [bp+dest] + +loc_3EBD: ; CODE XREF: __DOSENV+FDj + ; __DOSENV+108j + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + inc word ptr [bp+dest] + mov ax, word ptr [bp+s] + or ax, word ptr [bp+s+2] + jz short loc_3EFF + les bx, [bp+dest] + mov word ptr es:[bx], 1 + add word ptr [bp+dest], 2 + push word ptr [bp+s+2] + push word ptr [bp+s] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + inc word ptr [bp+dest] + +loc_3EFF: ; CODE XREF: __DOSENV+124j + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + sub ax, [bp+var_6] + jmp short loc_3F0E +; --------------------------------------------------------------------------- + +loc_3F0A: ; CODE XREF: __DOSENV+77j __DOSENV+91j + xor dx, dx + xor ax, ax + +loc_3F0E: ; CODE XREF: __DOSENV+15Fj + pop di + pop si + mov sp, bp + pop bp + retn 0Ch +__DOSENV endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl _dos_getdrive(unsigned int *drive) +__dos_getdrive proc far ; CODE XREF: sub_56F1+66p + +drive = dword ptr 6 + + push bp + mov bp, sp + push si + push di + mov ah, 19h + int 21h ; DOS - GET DEFAULT DISK NUMBER + mov ah, 0 + inc ax + les bx, [bp+drive] + mov es:[bx], ax + pop di + pop si + pop bp + retf +__dos_getdrive endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl _dos_setdrive(unsigned int drive, unsigned int *ndrives) +__dos_setdrive proc far + +drive = word ptr 6 +ndrives = dword ptr 8 + + push bp + mov bp, sp + push si + push di + mov dl, byte ptr [bp+drive] + dec dl + mov ah, 0Eh + int 21h ; DOS - SELECT DISK + ; DL = new default drive number (0 = A, 1 = B, etc.) + ; Return: AL = number of logical drives + mov ah, 0 + les bx, [bp+ndrives] + mov es:[bx], ax + pop di + pop si + pop bp + retf +__dos_setdrive endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far __ErrorMessage(char *buf) +___ErrorMessage proc far ; CODE XREF: seg000:016Ap sub_3CE0+9p + +buf = dword ptr 6 + + push bp + mov bp, sp + push si + push di + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + push ax ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + mov al, byte_11934 + cbw + push ax ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + pop di + pop si + pop bp + retf +___ErrorMessage endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_3F70 proc far ; CODE XREF: sub_3F75+29P sub_3F75+43P ... + push si + push di + pop di + pop si + retf +sub_3F70 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_3F75 proc near ; CODE XREF: _exit+Cp __exit+Fp ... + +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 + + push bp + mov bp, sp + push si + push di + cmp [bp+arg_4], 0 + jnz short loc_3FA2 + jmp short loc_3F92 +; --------------------------------------------------------------------------- + +loc_3F82: ; CODE XREF: sub_3F75+22j + dec word_118FA + mov bx, word_118FA + mov cl, 2 + shl bx, cl + call dword ptr [bx-3B28h] + +loc_3F92: ; CODE XREF: sub_3F75+Bj + cmp word_118FA, 0 + jnz short loc_3F82 + nop + push cs + call __cleanup + call off_118FC + +loc_3FA2: ; CODE XREF: sub_3F75+9j + nop + push cs + call near ptr __restorezero + nop + push cs + call near ptr __checknull + cmp [bp+arg_2], 0 + jnz short loc_3FC9 + cmp [bp+arg_4], 0 + jnz short loc_3FC0 + call off_11900 + call off_11904 + +loc_3FC0: ; CODE XREF: sub_3F75+41j + push [bp+arg_0] + nop + push cs + call __terminate +; --------------------------------------------------------------------------- + pop cx + +loc_3FC9: ; CODE XREF: sub_3F75+3Bj + pop di + pop si + pop bp + retn 6 +sub_3F75 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +; void __cdecl exit(int status) +_exit proc far ; CODE XREF: start+143p + +status = word ptr 6 + + push bp + mov bp, sp + push si + push di + xor ax, ax + push ax + push ax + push [bp+status] + call sub_3F75 + pop di + pop si + pop bp + retf +_exit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +; void __cdecl _exit(int status) +__exit proc far ; CODE XREF: seg000:0175p sub_3CE0+12p ... + +status = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, 1 + push ax + xor ax, ax + push ax + push [bp+status] + call sub_3F75 + pop di + pop si + pop bp + retf +__exit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; void _cexit(void) +__cexit proc far ; CODE XREF: __exec+216p + push si + push di + xor ax, ax + push ax + mov ax, 1 + push ax + xor ax, ax + push ax + call sub_3F75 + pop di + pop si + retf +__cexit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; void _c_exit(void) +__c_exit proc far + push si + push di + mov ax, 1 + push ax + push ax + xor ax, ax + push ax + call sub_3F75 + pop di + pop si + retf +__c_exit endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void (__cdecl __interrupt far *__cdecl getvect(int interruptno))() +_getvect proc far ; CODE XREF: seg000:5164p + +interruptno = byte ptr 6 + + push bp + mov bp, sp + push si + push di + mov ah, 35h ; '5' + mov al, [bp+interruptno] + int 21h ; DOS - 2+ - GET INTERRUPT VECTOR + ; AL = interrupt number + ; Return: ES:BX = value of interrupt vector + xchg ax, bx + mov dx, es + pop di + pop si + pop bp + retf +_getvect endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl setvect(int interruptno, void (__interrupt far *isr)()) +_setvect proc far ; CODE XREF: seg000:50A9p seg000:51A6p ... + +interruptno = byte ptr 6 +isr = dword ptr 8 + + push bp + mov bp, sp + push si + push di + mov ah, 25h ; '%' + mov al, [bp+interruptno] + push ds + lds dx, [bp+isr] + int 21h ; DOS - SET INTERRUPT VECTOR + ; AL = interrupt number + ; DS:DX = new vector to be used for specified interrupt + pop ds + pop di + pop si + pop bp + retf +_setvect endp + +; --------------------------------------------------------------------------- + +N_LDIV@: + pop cx + push cs + push cx + +LDIV@: + xor cx, cx + jmp short loc_405F + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_LUDIV@ proc far ; CODE XREF: sub_8C68+66p + pop cx + push cs + push cx + +F_LUDIV@: + mov cx, 1 + jmp short loc_405F +; --------------------------------------------------------------------------- + +N_LMOD@: + pop cx + push cs + push cx + +F_LMOD@: + mov cx, 2 + jmp short loc_405F +; --------------------------------------------------------------------------- + +N_LUMOD@: + pop cx + push cs + push cx + +LUMOD@: + mov cx, 3 + +loc_405F: ; CODE XREF: seg000:4047j N_LUDIV@+6j ... + push bp + push si + push di + mov bp, sp + mov di, cx + mov ax, [bp+0Ah] + mov dx, [bp+0Ch] + mov bx, [bp+0Eh] + mov cx, [bp+10h] + or cx, cx + jnz short loc_407E + or dx, dx + jz short loc_40E3 + or bx, bx + jz short loc_40E3 + +loc_407E: ; CODE XREF: N_LUDIV@+2Bj + test di, 1 + jnz short loc_40A0 + or dx, dx + jns short loc_4092 + neg dx + neg ax + sbb dx, 0 + or di, 0Ch + +loc_4092: ; CODE XREF: N_LUDIV@+3Dj + or cx, cx + jns short loc_40A0 + neg cx + neg bx + sbb cx, 0 + xor di, 4 + +loc_40A0: ; CODE XREF: N_LUDIV@+39j N_LUDIV@+4Bj + mov bp, cx + mov cx, 20h ; ' ' + push di + xor di, di + xor si, si + +loc_40AA: ; CODE XREF: N_LUDIV@:loc_40C1j + shl ax, 1 + rcl dx, 1 + rcl si, 1 + rcl di, 1 + cmp di, bp + jb short loc_40C1 + ja short loc_40BC + cmp si, bx + jb short loc_40C1 + +loc_40BC: ; CODE XREF: N_LUDIV@+6Dj + sub si, bx + sbb di, bp + inc ax + +loc_40C1: ; CODE XREF: N_LUDIV@+6Bj N_LUDIV@+71j + loop loc_40AA + pop bx + test bx, 2 + jz short loc_40D0 + mov ax, si + mov dx, di + shr bx, 1 + +loc_40D0: ; CODE XREF: N_LUDIV@+7Fj + test bx, 4 + jz short loc_40DD + neg dx + neg ax + sbb dx, 0 + +loc_40DD: ; CODE XREF: N_LUDIV@+8Bj N_LUDIV@+A5j + pop di + pop si + pop bp + retf 8 +; --------------------------------------------------------------------------- + +loc_40E3: ; CODE XREF: N_LUDIV@+2Fj N_LUDIV@+33j + div bx + test di, 2 + jz short loc_40EC + xchg ax, dx + +loc_40EC: ; CODE XREF: N_LUDIV@+A0j + xor dx, dx + jmp short loc_40DD +N_LUDIV@ endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_LXLSH@ proc far ; CODE XREF: __sbrk+Fp + pop bx + push cs + push bx + +LXLSH@: + cmp cl, 10h + jnb short loc_4108 + mov bx, ax + shl ax, cl + shl dx, cl + neg cl + add cl, 10h + shr bx, cl + or dx, bx + retf +; --------------------------------------------------------------------------- + +loc_4108: ; CODE XREF: N_LXLSH@+6j + sub cl, 10h + xchg ax, dx + xor ax, ax + shl dx, cl + retf +N_LXLSH@ endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_PADD@ proc far ; CODE XREF: __sbrk+38p + pop es + push cs + push es + +F_PADD@: + or cx, cx + jge short loc_4124 + not bx + not cx + add bx, 1 + adc cx, 0 + jmp short loc_4153 +; --------------------------------------------------------------------------- + +loc_4124: ; CODE XREF: N_PADD@+5j N_PADD@+40j + add ax, bx + jnb short loc_412C + add dx, 1000h + +loc_412C: ; CODE XREF: N_PADD@+15j + mov ch, cl + mov cl, 4 + shl ch, cl + add dh, ch + mov ch, al + shr ax, cl + add dx, ax + mov al, ch + and ax, 0Fh + retf +; --------------------------------------------------------------------------- + +N_PSUB@: + pop es + push cs + push es + +F_PSUB@: + or cx, cx + jge short loc_4153 + not bx + not cx + add bx, 1 + adc cx, 0 + jmp short loc_4124 +; --------------------------------------------------------------------------- + +loc_4153: ; CODE XREF: N_PADD@+11j N_PADD@+34j + sub ax, bx + jnb short loc_415B + sub dx, 1000h + +loc_415B: ; CODE XREF: N_PADD@+44j + mov bh, cl + mov cl, 4 + shl bh, cl + xor bl, bl + sub dx, bx + mov ch, al + shr ax, cl + add dx, ax + mov al, ch + and ax, 0Fh + retf +N_PADD@ endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__IOERROR proc near ; CODE XREF: __DOSERROR+8p _lseek+25p ... + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_0] + or dx, dx + jl short loc_4194 + cmp dx, 58h ; 'X' + jle short loc_4185 + +loc_4182: ; CODE XREF: __IOERROR+29j + mov dx, 57h ; 'W' + +loc_4185: ; CODE XREF: __IOERROR+Fj + mov word_11AC2, dx + mov bx, dx + mov al, [bx+19C4h] + cbw + mov dx, ax + jmp short loc_41A2 +; --------------------------------------------------------------------------- + +loc_4194: ; CODE XREF: __IOERROR+Aj + neg dx + cmp dx, word_11DA4 + jg short loc_4182 + mov word_11AC2, 0FFFFh + +loc_41A2: ; CODE XREF: __IOERROR+21j + mov word_1017E, dx + mov ax, 0FFFFh + pop di + pop si + pop bp + retn 2 +__IOERROR endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__DOSERROR proc near + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + push [bp+arg_0] + call __IOERROR + mov ax, [bp+arg_0] + pop di + pop si + pop bp + retn 2 +__DOSERROR endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl isatty(int handle) +_isatty proc far ; CODE XREF: seg000:4565p seg000:459Ep + +handle = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, 4400h + mov bx, [bp+handle] + int 21h ; DOS - 2+ - IOCTL - GET DEVICE INFORMATION + ; BX = file or device handle + xchg ax, dx + and ax, 80h + pop di + pop si + pop bp + retf +_isatty endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __int32 __cdecl lseek(int handle, __int32 offset, int fromwhere) +_lseek proc far ; CODE XREF: sub_554E+4Ep _ftell+1Bp ... + +handle = word ptr 6 +_offset = word ptr 8 +arg_4 = word ptr 0Ah +fromwhere = byte ptr 0Ch + + push bp + mov bp, sp + push si + push di + mov bx, [bp+handle] + add bx, bx + and word ptr [bx+199Ah], 0FDFFh + mov ah, 42h ; 'B' + mov al, [bp+fromwhere] + mov bx, [bp+handle] + mov cx, [bp+arg_4] + mov dx, [bp+_offset] + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: + ; 0-from beginnig,1-from current,2-from end + jb short loc_41FC + jmp short loc_4201 +; --------------------------------------------------------------------------- + +loc_41FC: ; CODE XREF: _lseek+20j + push ax + call __IOERROR + cwd + +loc_4201: ; CODE XREF: _lseek+22j + pop di + pop si + pop bp + retf +_lseek endp + +; --------------------------------------------------------------------------- + dd byte_4430 + db 4, 0, 0FAh, 0FFh, 0Ah dup(0), 0DCh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 5, 42h +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 24h + push si + push di + mov ax, seg seg000 + mov bx, 4213h + nop + push cs + call near ptr ___InitExceptBlocks + xor ax, ax + push ax + push ax + push ax + push ax + mov ax, 5 + push ax + mov ax, seg seg000 + push ax + mov ax, 430Bh + push ax + xor ax, ax + push ax + push ax + push ds + mov ax, 1A1Eh + push ax + push ss + lea ax, [bp-6] + push ax + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + mov ax, word_11B22 + mov [bp-2], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp-6] + push ss + push ax + push cs + mov ax, 4430h + push ax + nop + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; set_new_handler(void (*)(void)) +@set_new_handler$qnqv$v proc far + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov dx, seg_11B26 + mov ax, word_11B24 + mov [bp+var_2], dx + mov [bp+var_4], ax + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov seg_11B26, dx + mov word_11B24, ax + mov dx, [bp+var_2] + mov ax, [bp+var_4] + pop di + pop si + mov sp, bp + pop bp + retf +@set_new_handler$qnqv$v endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; operator new(unsigned int) +@$bnew$qui proc far ; CODE XREF: xalloc::xalloc(string &,uint)+13p + ; xmsg::xmsg(string &)+21p ... + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov [bp+var_2], 0 + mov [bp+var_4], 0 + cmp [bp+arg_0], 0 + jz short loc_42D7 + mov ax, [bp+arg_0] + jmp short loc_42DA +; --------------------------------------------------------------------------- + +loc_42D7: ; CODE XREF: operator new(uint)+16j + mov ax, 1 + +loc_42DA: ; CODE XREF: operator new(uint)+1Bj + mov [bp+arg_0], ax + jmp short loc_42E3 +; --------------------------------------------------------------------------- + +loc_42DF: ; CODE XREF: operator new(uint)+43j + call dword ptr word_11B24 + +loc_42E3: ; CODE XREF: operator new(uint)+23j + push [bp+arg_0] + nop + push cs + call sub_4C1A + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jnz short loc_42FF + mov ax, word_11B24 + or ax, seg_11B26 + jnz short loc_42DF + +loc_42FF: ; CODE XREF: operator new(uint)+3Aj + mov dx, [bp+var_2] + mov ax, [bp+var_4] + pop di + pop si + mov sp, bp + pop bp + retf +@$bnew$qui endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + les bx, [bp+0Ah] + mov ax, es:[bx+4] + les bx, [bp+6] + mov es:[bx+4], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, [bp+8] + mov ax, [bp+6] + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + dd byte_4430 + dw 0 + dd unk_11B1E + dd byte_43F6 + db 4, 0, 0FCh, 0FFh, 0Ah dup(0), 0DEh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 4Eh, 43h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; string::contains(char const *)const +@string@contains$xqnxc proc far ; DATA XREF: dseg:1D4Co + +var_22 = word ptr -22h +var_16 = word ptr -16h +driver = byte ptr -4 + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 4366h + nop + push cs + call near ptr ___InitExceptBlocks + mov [bp+var_16], 6 + xor ax, ax + push ax + push ds + mov ax, 1A28h + push ax ; s + push ss + lea ax, [bp+driver] + push ax ; __int32 + call @string@$bctr$qnxc ; string::string(char *) + add sp, 8 + lea ax, [bp+driver] + push ss + push ax + push ds + mov ax, 1A1Eh + push ax + nop + push cs + call near ptr @xalloc@$bctr$qmx6stringui ; xalloc::xalloc(string &,uint) + mov ax, 2 + push ax ; char + push ss + lea ax, [bp+driver] + push ax ; driver + call sub_F7BD + add sp, 10h + push [bp+var_22] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +@string@contains$xqnxc endp + +; --------------------------------------------------------------------------- + +loc_43CF: ; DATA XREF: dseg:1D6Ao + push si + push di + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push ds + mov ax, 1A1Eh + push ax + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + pop di + pop si + retf +; --------------------------------------------------------------------------- +byte_43F6 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Eh, 0, 32h + ; DATA XREF: seg000:4358o + db 0Dh dup(0), 1, 0, 1, 0, 0Dh, 3 + dw seg seg003 + db 5, 0, 36h, 0, 73h, 74h, 72h, 69h, 6Eh, 67h, 0Eh dup(0) +byte_4430 db 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 2Eh, 0, 3Ah + ; DATA XREF: seg000:4205o seg000:434Eo + db 0Dh dup(0), 2, 0, 2, 0, 72h, 44h + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 0BFh, 44h + dw seg seg000 + dw 0 + db 3, 0Dh dup(0) +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_44B9 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_44B7 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_44BB +; --------------------------------------------------------------------------- + +loc_44B7: ; CODE XREF: seg000:44A6j + jmp short loc_44BB +; --------------------------------------------------------------------------- + +loc_44B9: ; CODE XREF: seg000:447Dj + xor ax, ax + +loc_44BB: ; CODE XREF: seg000:44B5j + ; seg000:loc_44B7j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + db 0Dh dup(0), 1, 0, 1, 0, 7Eh, 65h + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_LXMUL@ proc near ; CODE XREF: sub_8C68+51p sub_8C68+7Bp ... + push si + xchg ax, si + xchg ax, dx + test ax, ax + jz short loc_4500 + mul bx + +loc_4500: ; CODE XREF: N_LXMUL@+5j + jcxz short loc_4507 + xchg ax, cx + mul si + add ax, cx + +loc_4507: ; CODE XREF: N_LXMUL@:loc_4500j + xchg ax, si + mul bx + add dx, si + pop si + retn +N_LXMUL@ endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +N_PCMP@ proc near ; CODE XREF: __brk+13p __brk+26p ... + push cx + mov ch, al + mov cl, 4 + shr ax, cl + add dx, ax + mov al, ch + mov ah, bl + shr bx, cl + pop cx + add cx, bx + mov bl, ah + and ax, 0Fh + and bx, 0Fh + cmp dx, cx + jnz short locret_452E + cmp ax, bx + +locret_452E: ; CODE XREF: N_PCMP@+1Cj + retn +N_PCMP@ endp + +; --------------------------------------------------------------------------- + +__setupio: + push si + push di + mov cx, 5 + jmp short loc_4558 +; --------------------------------------------------------------------------- + +loc_4536: ; CODE XREF: seg000:455Cj + mov bx, cx + add bx, bx + mov word ptr [bx+199Ah], 0 + mov ax, 14h + imul cx + mov dx, ax + mov bx, ax + mov byte ptr [bx+180Ch], 0FFh + add ax, 1808h + mov bx, dx + mov [bx+181Ah], ax + inc cx + +loc_4558: ; CODE XREF: seg000:4534j + cmp cx, word_11A98 + jb short loc_4536 + mov al, byte_1190C + cbw + push ax + nop + push cs + call near ptr _isatty + pop cx + or ax, ax + jnz short loc_4573 + and word_1190A, 0FDFFh + +loc_4573: ; CODE XREF: seg000:456Bj + mov ax, 200h + push ax + test byte ptr word_1190A+1, 2 + jz short loc_4583 + mov ax, 1 + jmp short loc_4585 +; --------------------------------------------------------------------------- + +loc_4583: ; CODE XREF: seg000:457Cj + xor ax, ax + +loc_4585: ; CODE XREF: seg000:4581j + push ax + xor ax, ax + push ax + push ax + push ds + mov ax, 1808h + push ax + nop + push cs + call near ptr _setvbuf + add sp, 0Ch + mov al, byte_11920 + cbw + push ax + nop + push cs + call near ptr _isatty + pop cx + or ax, ax + jnz short loc_45AC + and word_1191E, 0FDFFh + +loc_45AC: ; CODE XREF: seg000:45A4j + mov ax, 200h + push ax + test byte ptr word_1191E+1, 2 + jz short loc_45BC + mov ax, 2 + jmp short loc_45BE +; --------------------------------------------------------------------------- + +loc_45BC: ; CODE XREF: seg000:45B5j + xor ax, ax + +loc_45BE: ; CODE XREF: seg000:45BAj + push ax + xor ax, ax + push ax + push ax + push ds + mov ax, 181Ch + push ax + nop + push cs + call near ptr _setvbuf + add sp, 0Ch + pop di + pop si + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl tolower(int ch) +_tolower proc far ; CODE XREF: sub_A9C3+BP sub_A9C3+B0P ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_0] + cmp dx, 0FFFFh + jnz short loc_45E5 + mov ax, 0FFFFh + jmp short loc_45FF +; --------------------------------------------------------------------------- + +loc_45E5: ; CODE XREF: _tolower+Bj + mov al, dl + mov ah, 0 + mov bx, ax + test (__ctype+1)[bx], 4 + jz short loc_45FB + mov al, dl + mov ah, 0 + add ax, 20h ; ' ' + jmp short loc_45FF +; --------------------------------------------------------------------------- + +loc_45FB: ; CODE XREF: _tolower+1Dj + mov al, dl + mov ah, 0 + +loc_45FF: ; CODE XREF: _tolower+10j _tolower+26j + pop di + pop si + pop bp + retf +_tolower endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_4603 proc far ; CODE XREF: sub_56F1+4Fp + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_0] + cmp dx, 0FFFFh + jnz short loc_4615 + mov ax, 0FFFFh + jmp short loc_462F +; --------------------------------------------------------------------------- + +loc_4615: ; CODE XREF: sub_4603+Bj + mov al, dl + mov ah, 0 + mov bx, ax + test byte ptr [bx+1A39h], 8 + jz short loc_462B + mov al, dl + mov ah, 0 + add ax, 0FFE0h + jmp short loc_462F +; --------------------------------------------------------------------------- + +loc_462B: ; CODE XREF: sub_4603+1Dj + mov al, dl + mov ah, 0 + +loc_462F: ; CODE XREF: sub_4603+10j sub_4603+26j + pop di + pop si + pop bp + retf +sub_4603 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __RefDestructorCount(void) +@__RefDestructorCount$qv proc far ; CODE XREF: seg000:4264p seg000:4334p ... + mov dx, ss + mov ax, 10h + retf +@__RefDestructorCount$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __RefExceptionList(void) +@__RefExceptionList$qv proc far ; CODE XREF: ___InitExceptBlocks+5Cp + ; ___ExitExceptBlocks+4p + mov dx, ss + mov ax, 14h + retf +@__RefExceptionList$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +___InitExceptBlocks proc far ; CODE XREF: seg000:4231p + ; string::contains(char *)+10p ... + mov es, ax + mov dx, bx + mov cx, bp + mov bx, es:[bx+4] + add bx, cx + mov ss:[bx+6], dx + mov ss:[bx+8], ax + mov ax, sp + add ax, 4 + mov ss:[bx+0Ah], ax + mov ax, seg dseg + mov ss:[bx+0Eh], ax + mov ss:[bx+10h], si + mov word ptr ss:[bx+2], offset __ExceptionHandler + mov word ptr ss:[bx+4], seg seg000 + mov word ptr ss:[bx+0Ch], 0 + mov word ptr ss:[bx+12h], 0 + push bx + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + pop bx + xchg ax, bx + mov es, dx + mov cx, es:[bx] + mov dx, es:[bx+2] + mov bx, ax + mov ss:[bx+1Ah], cx + mov ss:[bx+1Ch], dx + push bx + push cs + call near ptr @__RefExceptionList$qv ; __RefExceptionList(void) + pop bx + xchg ax, bx + mov es, dx + mov cx, es:[bx] + mov es:[bx], ax + mov bx, ax + mov ss:[bx], cx + retf +___InitExceptBlocks endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +___ExitExceptBlocks proc far ; CODE XREF: string::contains(char *)+52p + ; ___call_terminate+76p ... + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push cs + call near ptr @__RefExceptionList$qv ; __RefExceptionList(void) + mov bx, [bp+arg_0] + xchg ax, bx + mov es, dx + mov es:[bx], ax + pop bp + retf 2 +___ExitExceptBlocks endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn + +; terminate(void) +@terminate$qv proc near ; DATA XREF: dseg:1B44o + push si + push di + nop + push cs + call near ptr _abort +@terminate$qv endp + +; --------------------------------------------------------------------------- + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; set_terminate(void (*)(void)) +@set_terminate$qnqv$v proc far + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les bx, ss:16h + mov dx, es:[bx+0Ch] + mov ax, es:[bx+0Ah] + mov [bp+var_2], dx + mov [bp+var_4], ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jz short loc_4702 + les bx, ss:16h + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov es:[bx+0Ch], dx + mov es:[bx+0Ah], ax + +loc_4702: ; CODE XREF: set_terminate(void (*)(void))+21j + mov dx, [bp+var_2] + mov ax, [bp+var_4] + pop di + pop si + mov sp, bp + pop bp + retf +@set_terminate$qnqv$v endp + +; --------------------------------------------------------------------------- + db 4 dup(0), 9Ch, 47h + dw seg seg000 + db 14h dup(0), 0E2h, 0FFh, 2 dup(0), 3, 0, 0Eh, 47h + dw seg seg000 + db 2 dup(0), 4, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +___call_terminate proc far ; CODE XREF: unexpected(void)+3p + ; sub_72F3+272p ... + +var_26 = dword ptr -26h +var_22 = word ptr -22h +var_20 = word ptr -20h +var_1E = word ptr -1Eh +var_12 = word ptr -12h + + push bp + mov bp, sp + sub sp, 26h + push si + push di + mov ax, seg seg000 + mov bx, 4726h + nop + push cs + call near ptr ___InitExceptBlocks + mov [bp+var_22], ds + nop + push cs + call near ptr _flushall + les bx, ss:16h + mov dx, es:[bx+0Ch] + mov ax, es:[bx+0Ah] + mov word ptr [bp+var_26+2], dx + mov word ptr [bp+var_26], ax + mov [bp+var_12], 6 + les bx, ss:16h + cmp word ptr es:[bx+12h], 0 + jnz short loc_4780 + les bx, ss:16h + mov word ptr es:[bx+12h], ds + +loc_4780: ; CODE XREF: ___call_terminate+3Dj + les bx, ss:16h + mov ax, es:[bx+12h] + mov [bp+var_20], ax + mov ds, [bp+var_20] + call [bp+var_26] + mov ds, [bp+var_22] + mov [bp+var_12], 0 + jmp short loc_47A4 +; --------------------------------------------------------------------------- + mov ds, [bp+var_22] + nop + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_47A4: ; CODE XREF: ___call_terminate+62j + nop + push cs + call near ptr _abort +; --------------------------------------------------------------------------- + push [bp+var_1E] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +___call_terminate endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn + +; unexpected(void) +@unexpected$qv proc near ; DATA XREF: dseg:1B48o + push si + push di + push cs + call near ptr ___call_terminate +@unexpected$qv endp + +; --------------------------------------------------------------------------- + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; set_unexpected(void (*)(void)) +@set_unexpected$qnqv$v proc far + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les bx, ss:16h + mov dx, es:[bx+10h] + mov ax, es:[bx+0Eh] + mov [bp+var_2], dx + mov [bp+var_4], ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jz short loc_47F6 + les bx, ss:16h + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov es:[bx+10h], dx + mov es:[bx+0Eh], ax + +loc_47F6: ; CODE XREF: set_unexpected(void (*)(void))+21j + mov dx, [bp+var_2] + mov ax, [bp+var_4] + pop di + pop si + mov sp, bp + pop bp + retf +@set_unexpected$qnqv$v endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function noreturn bp-based frame + +___call_unexpected proc far ; CODE XREF: __ExceptionHandler+127p + +var_6 = dword ptr -6 +var_2 = word ptr -2 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + les bx, ss:16h + mov dx, es:[bx+10h] + mov ax, es:[bx+0Eh] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + les bx, ss:16h + cmp word ptr es:[bx+14h], 0 + jnz short loc_4832 + les bx, ss:16h + mov word ptr es:[bx+14h], ds + +loc_4832: ; CODE XREF: ___call_unexpected+25j + les bx, ss:16h + mov ax, es:[bx+14h] + mov [bp+var_2], ax + push ds + mov ds, [bp+var_2] + call [bp+var_6] + pop ds + nop + push cs + call near ptr _abort +; --------------------------------------------------------------------------- + pop di + pop si + mov sp, bp + pop bp + retf +___call_unexpected endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __GetPolymorphicDTC(void *, unsigned int) +@__GetPolymorphicDTC$qnvui proc far + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_4865 + xor ax, ax + jmp short loc_489F +; --------------------------------------------------------------------------- + +loc_4865: ; CODE XREF: __GetPolymorphicDTC(void *,uint)+Ej + les bx, [bp+arg_0] + add bx, [bp+arg_4] + mov ax, es:[bx] + mov word ptr [bp+var_4+2], ds + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + sub ax, es:[bx-2] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov ax, es:[bx+1Ah] + +loc_489F: ; CODE XREF: __GetPolymorphicDTC(void *,uint)+12j + pop di + pop si + mov sp, bp + pop bp + retf +@__GetPolymorphicDTC$qnvui endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __GetPolymorphicDTCfar(void *, unsigned int) +@__GetPolymorphicDTCfar$qnvui proc far + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_48B9 + xor ax, ax + jmp short loc_48F7 +; --------------------------------------------------------------------------- + +loc_48B9: ; CODE XREF: __GetPolymorphicDTCfar(void *,uint)+Ej + les bx, [bp+arg_0] + add bx, [bp+arg_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + sub ax, es:[bx-2] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov ax, es:[bx+1Ah] + +loc_48F7: ; CODE XREF: __GetPolymorphicDTCfar(void *,uint)+12j + pop di + pop si + mov sp, bp + pop bp + retf +@__GetPolymorphicDTCfar$qnvui endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +__ExceptInit proc far ; CODE XREF: start+115p + push si + push di + mov word ptr ss:12h, 0 + mov word ptr ss:10h, 0 + mov word ptr ss:18h, ds + mov word ptr ss:16h, 1B3Ah + mov word ptr ss:1Ah, 0FEEDh + mov ax, ds + mov word_11C4E, ax + mov word_11C4C, ax + mov dx, ss:18h + mov ax, ss:16h + add ax, 0A8h ; '' + les bx, ss:16h + mov es:[bx+22h], dx + mov es:[bx+20h], ax + mov word ptr ss:14h, 0FFFFh + pop di + pop si + retf +__ExceptInit endp + +; --------------------------------------------------------------------------- + +unknown_libname_1: ; BCC v4.x/5.x DOS runtime + pushf + pop bx + mov ax, 0FFFh + and ax, bx + push ax + popf + pushf + pop ax + and ax, 0F000h + cmp ax, 0F000h + mov word_11D62, 0 + jz short locret_49A6 + or bx, 0F000h + push bx + popf + pushf + pop ax + and ax, 0F000h + mov word_11D62, 2 + jz short locret_49A6 + mov edx, esp + and sp, 0FFFCh + pushfd + pop eax + mov ecx, eax + xor eax, 40000h + push eax + popfd + pushfd + pop eax + xor eax, ecx + mov word_11D62, 3 + mov esp, edx + jz short locret_49A6 + mov word_11D62, 4 + +locret_49A6: ; CODE XREF: seg000:4962j seg000:4975j ... + retn +; --------------------------------------------------------------------------- +word_49A7 dw 0 ; DATA XREF: sub_49B3r sub_49B3+1Dr ... +word_49A9 dw 0 ; DATA XREF: sub_49B3+14w sub_49B3+27w ... +word_49AB dw 0 ; DATA XREF: sub_49B3+4Cw sub_4A87+19w ... +word_49AD dw 0 ; DATA XREF: sub_49B3+32r + ; sub_49B3:loc_4A06r ... +word_49AF dw 0 ; DATA XREF: sub_4CA1+1r sub_4D81+1Aw +word_49B1 dw 0 ; DATA XREF: sub_4CA1+7r sub_4D81+1Fw + +; =============== S U B R O U T I N E ======================================= + + +sub_49B3 proc near ; CODE XREF: sub_4AE7+18p + cmp dx, cs:word_49A7 + jz short loc_49F1 + mov ds, dx + mov ds, word_10102 + cmp word_10102, 0 + jz short loc_49CE + mov cs:word_49A9, ds + jmp short loc_4A06 +; --------------------------------------------------------------------------- + +loc_49CE: ; CODE XREF: sub_49B3+12j + mov ax, ds + cmp ax, cs:word_49A7 + jz short loc_49EC + mov ax, word_10108 + mov cs:word_49A9, ax + push ds + xor ax, ax + push ax + call sub_4A87 + mov ds, cs:word_49AD + jmp short loc_4A0F +; --------------------------------------------------------------------------- + +loc_49EC: ; CODE XREF: sub_49B3+22j + mov dx, cs:word_49A7 + +loc_49F1: ; CODE XREF: sub_49B3+5j + mov cs:word_49A7, 0 + mov cs:word_49A9, 0 + mov cs:word_49AB, 0 + +loc_4A06: ; CODE XREF: sub_49B3+19j + mov ds, cs:word_49AD + push dx + xor ax, ax + push ax + +loc_4A0F: ; CODE XREF: sub_49B3+37j + call __brk + add sp, 4 + retn +sub_49B3 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_4A16 proc near ; CODE XREF: sub_4AE7:loc_4B04p + mov ds, dx + push ds + mov es, word_10102 + mov word_10102, 0 + mov word_10108, es + cmp dx, cs:word_49A7 + jz short loc_4A5C + cmp word ptr es:2, 0 + jnz short loc_4A5C + mov ax, word_10100 + pop bx + push es + add es:0, ax + mov cx, es + add dx, ax + mov es, dx + cmp word ptr es:2, 0 + jnz short loc_4A55 + mov es:8, cx + jmp short loc_4A5F +; --------------------------------------------------------------------------- + +loc_4A55: ; CODE XREF: sub_4A16+36j + mov es:2, cx + jmp short loc_4A5F +; --------------------------------------------------------------------------- + +loc_4A5C: ; CODE XREF: sub_4A16+16j sub_4A16+1Ej + call sub_4AB0 + +loc_4A5F: ; CODE XREF: sub_4A16+3Dj sub_4A16+44j + pop es + mov ax, es + add ax, es:0 + mov ds, ax + cmp word_10102, 0 + jz short loc_4A71 + retn +; --------------------------------------------------------------------------- + +loc_4A71: ; CODE XREF: sub_4A16+58j + mov ax, word_10100 + add es:0, ax + mov ax, es + mov bx, ds + add bx, word_10100 + mov es, bx + mov es:2, ax +sub_4A16 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_4A87 proc near ; CODE XREF: sub_49B3+2Fp sub_4C4C+3Ep + mov bx, ds + cmp bx, off_10106 + jz short loc_4AA8 + mov es, off_10106 + mov ds, off_10104 + mov off_10106, es + mov word ptr es:4, ds + mov cs:word_49AB, ds + mov ds, bx + retn +; --------------------------------------------------------------------------- + +loc_4AA8: ; CODE XREF: sub_4A87+6j + mov cs:word_49AB, 0 + retn +sub_4A87 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_4AB0 proc near ; CODE XREF: sub_4A16:loc_4A5Cp + mov ax, cs:word_49AB + or ax, ax + jz short loc_4AD9 + mov bx, ss + pushf + cli + mov ss, ax + mov es, word ptr ss:6 + mov word ptr ss:6, ds + mov off_10104, ss + mov ss, bx + popf + mov word ptr es:4, ds + mov off_10106, es + retn +; --------------------------------------------------------------------------- + +loc_4AD9: ; CODE XREF: sub_4AB0+6j + mov cs:word_49AB, ds + mov off_10104, ds + mov off_10106, ds + retn +sub_4AB0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_4AE7 proc far ; CODE XREF: _registerbgidriver+Dp + ; sub_4CA1+71p ... + +arg_2 = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov cs:word_49AD, ds + mov dx, [bp+arg_2] + or dx, dx + jz short loc_4B07 + cmp dx, cs:word_49A9 + jnz short loc_4B04 + call sub_49B3 + jmp short loc_4B07 +; --------------------------------------------------------------------------- + +loc_4B04: ; CODE XREF: sub_4AE7+16j + call sub_4A16 + +loc_4B07: ; CODE XREF: sub_4AE7+Fj sub_4AE7+1Bj + mov ds, cs:word_49AD + pop di + pop si + pop bp + retf +sub_4AE7 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_4B10 proc near ; CODE XREF: sub_4C4C:loc_4C79p + push ax + mov ds, cs:word_49AD + xor ax, ax + push ax + push ax + call __sbrk + add sp, 4 + and ax, 0Fh + jz short loc_4B39 + mov dx, 10h + sub dx, ax + xor ax, ax + mov ds, cs:word_49AD + push ax + push dx + call __sbrk + add sp, 4 + +loc_4B39: ; CODE XREF: sub_4B10+13j + pop ax + push ax + xor bx, bx + mov bl, ah + mov cl, 4 + shr bx, cl +sub_4B10 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_4B43 proc near ; CODE XREF: sub_6CCE+77p sub_6CCE+A1p ... + shl ax, cl + mov ds, cs:word_49AD + push bx + push ax + call __sbrk + add sp, 4 + pop bx + cmp ax, 0FFFFh + jz short loc_4B70 + mov cs:word_49A7, dx + mov cs:word_49A9, dx + mov ds, dx + mov word_10100, bx + mov word_10102, dx + mov ax, 4 + retn +; --------------------------------------------------------------------------- + +loc_4B70: ; CODE XREF: sub_4B43+13j + xor ax, ax + cwd + retn +sub_4B43 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_4B74 proc near ; CODE XREF: sub_4C4C:loc_4C74p + push ax + mov ds, cs:word_49AD + xor ax, ax + push ax + push ax + call __sbrk + pop bx + pop bx + and ax, 0Fh + jz short loc_4B9C + mov dx, 10h + sub dx, ax + xor ax, ax + mov ds, cs:word_49AD + push ax + push dx + call __sbrk + add sp, 4 + +loc_4B9C: ; CODE XREF: sub_4B74+12j + pop ax + push ax + xor bx, bx + mov bl, ah + mov cl, 4 + shr bx, cl + shl ax, cl + mov ds, cs:word_49AD + push bx + push ax + call __sbrk + add sp, 4 + pop bx + cmp ax, 0FFFFh + jz short loc_4BF3 + and ax, 0Fh + jnz short loc_4BD8 + +loc_4BC0: ; CODE XREF: sub_4B74+7Dj + mov cx, cs:word_49A9 + mov cs:word_49A9, dx + mov ds, dx + mov word_10100, bx + mov word_10102, cx + mov ax, 4 + retn +; --------------------------------------------------------------------------- + +loc_4BD8: ; CODE XREF: sub_4B74+4Aj + push bx + push dx + neg ax + add ax, 10h + xor bx, bx + push bx + push ax + call __sbrk + add sp, 4 + pop dx + pop bx + cmp ax, 0FFFFh + jz short loc_4BF3 + inc dx + jmp short loc_4BC0 +; --------------------------------------------------------------------------- + +loc_4BF3: ; CODE XREF: sub_4B74+45j sub_4B74+7Aj + xor ax, ax + cwd + retn +sub_4B74 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_4BF7 proc near ; CODE XREF: sub_4C4C:loc_4C7Ep + mov bx, dx + sub word_10100, ax + add dx, word_10100 + mov ds, dx + mov word_10100, ax + mov word_10102, bx + mov bx, dx + add bx, word_10100 + mov ds, bx + mov word_10102, dx + mov ax, 4 + retn +sub_4BF7 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_4C1A proc near ; CODE XREF: __DOSENV+83p + ; operator new(uint)+2Ep ... + +arg_2 = word ptr 6 + + push bp + mov bp, sp + xor dx, dx + mov ax, [bp+arg_2] + jmp short loc_4C2D +sub_4C1A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_4C24 proc near ; CODE XREF: sub_4CA1+Ep sub_4D81+64p + +arg_2 = word ptr 6 +arg_4 = word ptr 8 + + push bp + mov bp, sp + mov dx, [bp+arg_4] + mov ax, [bp+arg_2] + +loc_4C2D: ; CODE XREF: sub_4C1A+8j + mov cx, ax + or cx, dx + push si + push di + mov cs:word_49AD, ds + jz short loc_4C98 + add ax, 13h + adc dx, 0 + jb short loc_4C83 + test dx, 0FFF0h + jnz short loc_4C83 + mov cl, 4 + shr ax, cl +sub_4C24 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_4C4C proc far ; CODE XREF: sub_A2EB+22Fp + ; DATA XREF: dseg:off_10106o + shl dx, cl + or ah, dl + mov dx, cs:word_49A7 + or dx, dx + jz short loc_4C79 + mov dx, cs:word_49AB + or dx, dx + jz short loc_4C74 + mov bx, dx + +loc_4C64: ; CODE XREF: sub_4C4C+26j + mov ds, dx + cmp word_10100, ax + jnb short loc_4C88 + mov dx, off_10106 + cmp dx, bx + jnz short loc_4C64 + +loc_4C74: ; CODE XREF: sub_4C4C+14j + call sub_4B74 + jmp short loc_4C98 +; --------------------------------------------------------------------------- + +loc_4C79: ; CODE XREF: sub_4C4C+Bj + call sub_4B10 + jmp short loc_4C98 +; --------------------------------------------------------------------------- + +loc_4C7E: ; CODE XREF: sub_4C4C:loc_4C88j + call sub_4BF7 + jmp short loc_4C98 +; --------------------------------------------------------------------------- + +loc_4C83: ; CODE XREF: sub_4C24+1Cj sub_4C24+22j + xor ax, ax + cwd + jmp short loc_4C98 +; --------------------------------------------------------------------------- + +loc_4C88: ; CODE XREF: sub_4C4C+1Ej + ja short loc_4C7E + call sub_4A87 + mov bx, word_10108 + mov word_10102, bx + mov ax, offset off_10104 + +loc_4C98: ; CODE XREF: sub_4C24+14j sub_4C4C+2Bj ... + mov ds, cs:word_49AD + pop di + pop si + pop bp + retf +sub_4C4C endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_4CA1 proc near ; CODE XREF: sub_4D81:loc_4DDDp + push bx + mov si, cs:word_49AF + push si + mov si, cs:word_49B1 + push si + push cs + call sub_4C24 + add sp, 4 + or dx, dx + jnz short loc_4CBB + pop bx + retn +; --------------------------------------------------------------------------- + +loc_4CBB: ; CODE XREF: sub_4CA1+16j + pop ds + mov es, dx + push es + push ds + push bx + mov dx, word_10100 + cld + dec dx + mov di, 4 + mov si, di + mov cx, 6 + rep movsw + or dx, dx + jz short loc_4D0C + mov ax, es + inc ax + mov es, ax + assume es:seg000 + mov ax, ds + inc ax + mov ds, ax + assume ds:nothing + +loc_4CDF: ; CODE XREF: sub_4CA1+69j + xor di, di + mov si, di + mov cx, dx + cmp cx, 1000h + jbe short loc_4CEE + mov cx, 1000h + +loc_4CEE: ; CODE XREF: sub_4CA1+48j + shl cx, 1 + shl cx, 1 + shl cx, 1 + rep movsw + sub dx, 1000h + jbe short loc_4D0C + mov ax, es + add ax, 1000h + mov es, ax + assume es:nothing + mov ax, ds + add ax, 1000h + mov ds, ax + assume ds:nothing + jmp short loc_4CDF +; --------------------------------------------------------------------------- + +loc_4D0C: ; CODE XREF: sub_4CA1+32j sub_4CA1+59j + mov ds, cs:word_49AD + assume ds:dseg + push cs + call near ptr sub_4AE7 + add sp, 4 + pop dx + mov ax, 4 + retn +sub_4CA1 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_4D1D proc near ; CODE XREF: sub_4D81:loc_4DD8p + cmp bx, cs:word_49A9 + jz short loc_4D69 + mov di, bx + add di, ax + mov es, di + assume es:nothing + mov si, cx + sub si, ax + mov es:0, si + mov es:2, bx + push es + push ax + mov es, bx + mov es:0, ax + mov dx, bx + add dx, cx + mov es, dx + cmp word ptr es:2, 0 + jz short loc_4D55 + mov es:2, di + jmp short loc_4D5A +; --------------------------------------------------------------------------- + +loc_4D55: ; CODE XREF: sub_4D1D+2Fj + mov es:8, di + +loc_4D5A: ; CODE XREF: sub_4D1D+36j + mov si, bx + push cs + call near ptr sub_4AE7 + add sp, 4 + mov dx, si + mov ax, 4 + retn +; --------------------------------------------------------------------------- + +loc_4D69: ; CODE XREF: sub_4D1D+5j + push bx + mov es, bx + mov es:0, ax + add bx, ax + push bx + xor ax, ax + push ax + call __brk + add sp, 4 + pop dx + mov ax, 4 + retn +sub_4D1D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_4D81 proc far ; CODE XREF: sub_56F1+2DDp + ; seg003:0756P ... + +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + xor dx, dx + jmp short loc_4D8E +; --------------------------------------------------------------------------- + push bp + mov bp, sp + mov dx, [bp+arg_6] + +loc_4D8E: ; CODE XREF: sub_4D81+5j + mov ax, [bp+arg_4] + mov bx, [bp+arg_2] + push si + push di + mov cs:word_49AD, ds + mov cs:word_49AF, dx + mov cs:word_49B1, ax + or bx, bx + jz short loc_4DE2 + mov cx, ax + or cx, dx + jz short loc_4DED + add ax, 13h + adc dx, 0 + jb short loc_4DF6 + test dx, 0FFF0h + jnz short loc_4DF6 + mov cl, 4 + shr ax, cl + shl dx, cl + or ah, dl + mov es, bx + mov cx, es:0 + cmp cx, ax + jb short loc_4DDD + ja short loc_4DD8 + mov dx, bx + mov ax, 4 + jmp short loc_4DF9 +; --------------------------------------------------------------------------- + +loc_4DD8: ; CODE XREF: sub_4D81+4Ej + call sub_4D1D + jmp short loc_4DF9 +; --------------------------------------------------------------------------- + +loc_4DDD: ; CODE XREF: sub_4D81+4Cj + call sub_4CA1 + jmp short loc_4DF9 +; --------------------------------------------------------------------------- + +loc_4DE2: ; CODE XREF: sub_4D81+25j + push dx + push ax + push cs + call sub_4C24 + add sp, 4 + jmp short loc_4DF9 +; --------------------------------------------------------------------------- + +loc_4DED: ; CODE XREF: sub_4D81+2Bj + push bx + push ax + push cs + call near ptr sub_4AE7 + add sp, 4 + +loc_4DF6: ; CODE XREF: sub_4D81+33j sub_4D81+39j + xor ax, ax + cwd + +loc_4DF9: ; CODE XREF: sub_4D81+55j sub_4D81+5Aj ... + mov ds, cs:word_49AD + pop di + pop si + pop bp + retf +sub_4D81 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_4E02 proc near ; CODE XREF: __brk+31p __sbrk+74p + +newsize = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, [bp+arg_2] + inc ax + mov [bp+newsize], ax + mov ax, segx + sub [bp+newsize], ax + mov ax, [bp+newsize] + add ax, 3Fh ; '?' + mov cl, 6 + shr ax, cl + mov [bp+newsize], ax + cmp ax, word_11D64 + jz short loc_4E66 + mov cl, 6 + shl [bp+newsize], cl + mov dx, word_1018E + mov ax, [bp+newsize] + add ax, segx + cmp ax, dx + jbe short loc_4E47 + mov ax, dx + sub ax, segx + mov [bp+newsize], ax + +loc_4E47: ; CODE XREF: sub_4E02+3Aj + push [bp+newsize] ; newsize + push segx ; segx + nop + push cs + call near ptr _setblock + pop cx + pop cx + mov dx, ax + cmp dx, 0FFFFh + jnz short loc_4E78 + mov ax, [bp+newsize] + mov cl, 6 + shr ax, cl + mov word_11D64, ax + +loc_4E66: ; CODE XREF: sub_4E02+26j + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word_1018A, dx + mov word_10188, ax + mov ax, 1 + jmp short loc_4E88 +; --------------------------------------------------------------------------- + +loc_4E78: ; CODE XREF: sub_4E02+58j + mov ax, segx + add ax, dx + mov word_1018E, ax + mov word_1018C, 0 + xor ax, ax + +loc_4E88: ; CODE XREF: sub_4E02+74j + pop di + pop si + mov sp, bp + pop bp + retn 4 +sub_4E02 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__brk proc near ; CODE XREF: sub_49B3:loc_4A0Fp + ; sub_4D1D+59p + +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + push bp + mov bp, sp + push si + push di + mov cx, word_10186 + mov bx, word_10184 + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + call N_PCMP@ + jb short loc_4EC8 + mov cx, word_1018E + mov bx, word_1018C + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + call N_PCMP@ + ja short loc_4EC8 + push [bp+arg_2] + push [bp+arg_0] + call sub_4E02 + or ax, ax + jnz short loc_4ECD + +loc_4EC8: ; CODE XREF: __brk+16j __brk+29j + mov ax, 0FFFFh + jmp short loc_4ECF +; --------------------------------------------------------------------------- + +loc_4ECD: ; CODE XREF: __brk+36j + xor ax, ax + +loc_4ECF: ; CODE XREF: __brk+3Bj + pop di + pop si + pop bp + retn +__brk endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__sbrk proc near ; CODE XREF: sub_4B10+Ap sub_4B10+23p ... + +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov ax, word_1018A + xor dx, dx + mov cl, 4 + call near ptr N_LXLSH@ + add ax, word_10188 + adc dx, 0 + add ax, [bp+arg_0] + adc dx, [bp+arg_2] + cmp dx, 0Fh + jl short loc_4EFE + jg short loc_4F4E + cmp ax, 0FFFFh + ja short loc_4F4E + +loc_4EFE: ; CODE XREF: __sbrk+22j + mov dx, word_1018A + mov ax, word_10188 + mov cx, [bp+arg_2] + mov bx, [bp+arg_0] + call near ptr N_PADD@ + mov [bp+var_2], dx + mov [bp+var_4], ax + mov cx, word_10186 + mov bx, word_10184 + call N_PCMP@ + jb short loc_4F4E + mov cx, word_1018E + mov bx, word_1018C + mov dx, [bp+var_2] + mov ax, [bp+var_4] + call N_PCMP@ + ja short loc_4F4E + mov dx, word_1018A + mov ax, word_10188 + mov [bp+var_6], dx + mov [bp+var_8], ax + push [bp+var_2] + push [bp+var_4] + call sub_4E02 + or ax, ax + jnz short loc_4F56 + +loc_4F4E: ; CODE XREF: __sbrk+24j __sbrk+29j ... + mov dx, 0FFFFh + mov ax, 0FFFFh + jmp short loc_4F5C +; --------------------------------------------------------------------------- + +loc_4F56: ; CODE XREF: __sbrk+79j + mov dx, [bp+var_6] + mov ax, [bp+var_8] + +loc_4F5C: ; CODE XREF: __sbrk+81j + pop di + pop si + mov sp, bp + pop bp + retn +__sbrk endp ; sp-analysis failed + +; --------------------------------------------------------------------------- + push ax + push bx + push cx + push dx + push es + push ds + push si + push di + push bp + mov bp, seg dseg + mov ds, bp + mov bp, sp + sub sp, 4 + mov dx, word_11D72 + mov ax, word_11D70 + mov [bp-2], dx + mov [bp-4], ax + or dx, dx + jnz short loc_4F8B + cmp ax, 1 + jz short loc_4FC8 + +loc_4F8B: ; CODE XREF: seg000:4F84j + mov ax, [bp-4] + or ax, [bp-2] + jz short loc_4F9F + cmp word ptr [bp-2], 0FFFFh + jnz short loc_4FA9 + cmp word ptr [bp-4], 0FFFFh + jnz short loc_4FA9 + +loc_4F9F: ; CODE XREF: seg000:4F91j + mov ax, 1 + push ax + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + pop cx + +loc_4FA9: ; CODE XREF: seg000:4F97j seg000:4F9Dj + mov word_11D72, 0 + mov word_11D70, 0 + push ss + lea ax, [bp+0] + push ax + mov ax, 7Fh ; '' + push ax + mov ax, 8 + push ax + call dword ptr [bp-4] + add sp, 8 + +loc_4FC8: ; CODE XREF: seg000:4F89j + mov sp, bp + pop bp + pop di + pop si + pop ds + pop es + pop dx + pop cx + pop bx + pop ax + iret +; --------------------------------------------------------------------------- + push ax + push bx + push cx + push dx + push es + push ds + push si + push di + push bp + mov bp, seg dseg + mov ds, bp + mov bp, sp + sub sp, 4 + mov dx, word_11D72 + mov ax, word_11D70 + mov [bp-2], dx + mov [bp-4], ax + or dx, dx + jnz short loc_4FFD + cmp ax, 1 + jz short loc_503A + +loc_4FFD: ; CODE XREF: seg000:4FF6j + mov ax, [bp-4] + or ax, [bp-2] + jz short loc_5011 + cmp word ptr [bp-2], 0FFFFh + jnz short loc_501B + cmp word ptr [bp-4], 0FFFFh + jnz short loc_501B + +loc_5011: ; CODE XREF: seg000:5003j + mov ax, 1 + push ax + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + pop cx + +loc_501B: ; CODE XREF: seg000:5009j seg000:500Fj + mov word_11D72, 0 + mov word_11D70, 0 + push ss + lea ax, [bp+0] + push ax + mov ax, 7Eh ; '~' + push ax + mov ax, 8 + push ax + call dword ptr [bp-4] + add sp, 8 + +loc_503A: ; CODE XREF: seg000:4FFBj + mov sp, bp + pop bp + pop di + pop si + pop ds + pop es + pop dx + pop cx + pop bx + pop ax + iret +; --------------------------------------------------------------------------- + push ax + push cx + push dx + push bx + push sp + push bp + push si + push di + push ds + push es + mov bp, seg dseg + mov ds, bp + mov bp, sp + sub sp, 4 + pushf + mov dx, word_11D6A + mov ax, word_11D68 + mov [bp-2], dx + mov [bp-4], ax + or dx, dx + jnz short loc_5071 + cmp ax, 1 + jz short loc_50B6 + +loc_5071: ; CODE XREF: seg000:506Aj + mov ax, [bp-4] + or ax, [bp-2] + jz short loc_5085 + cmp word ptr [bp-2], 0FFFFh + jnz short loc_508F + cmp word ptr [bp-4], 0FFFFh + jnz short loc_508F + +loc_5085: ; CODE XREF: seg000:5077j + mov ax, 1 + push ax + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + pop cx + +loc_508F: ; CODE XREF: seg000:507Dj seg000:5083j + mov word_11D6A, 0 + mov word_11D68, 0 + push word_1C662 + push word_1C660 + mov ax, 23h ; '#' + push ax + nop + push cs + call near ptr _setvect + mov ax, 2 + push ax + call dword ptr [bp-4] + add sp, 8 + +loc_50B6: ; CODE XREF: seg000:506Fj + popf + clc + mov sp, bp + pop es + pop ds + pop di + pop si + pop bp + pop bx + pop bx + pop dx + pop cx + pop ax + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_50C5 proc far ; CODE XREF: seg000:510Ep sub_51CC+Cp + +arg_0 = word ptr 6 + + push bp + mov bp, sp + push si + push di + xor dx, dx + +loc_50CC: ; CODE XREF: sub_50C5+1Cj + mov bx, dx + mov al, [bx+1C80h] + mov ah, 0 + cmp ax, [bp+arg_0] + jnz short loc_50DD + mov ax, dx + jmp short loc_50E6 +; --------------------------------------------------------------------------- + +loc_50DD: ; CODE XREF: sub_50C5+12j + inc dx + cmp dx, 6 + jl short loc_50CC + mov ax, 0FFFFh + +loc_50E6: ; CODE XREF: sub_50C5+16j + pop di + pop si + pop bp + retf +sub_50C5 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 6 + push si + push di + cmp byte_11D67, 0 + jnz short loc_510A + mov word_1C65A, seg seg000 + mov word_1C658, 50EAh + mov byte_11D67, 1 + +loc_510A: ; CODE XREF: seg000:50F7j + push word ptr [bp+6] + push cs + call near ptr sub_50C5 + pop cx + mov [bp-2], ax + cmp ax, 0FFFFh + jnz short loc_5129 + mov word_1017E, 13h + mov dx, 0FFFFh + mov ax, 0FFFFh + jmp loc_51C6 +; --------------------------------------------------------------------------- + +loc_5129: ; CODE XREF: seg000:5118j + mov bx, [bp-2] + mov cl, 2 + shl bx, cl + mov dx, [bx+1C6Ah] + mov ax, [bx+1C68h] + mov [bp-4], dx + mov [bp-6], ax + mov bx, [bp-2] + shl bx, cl + mov dx, [bp+0Ah] + mov ax, [bp+8] + mov [bx+1C6Ah], dx + mov [bx+1C68h], ax + cmp word ptr [bp+6], 2 + jnz short loc_5193 + cmp byte_11D66, 0 + jnz short loc_5174 + mov ax, 23h ; '#' + push ax + nop + push cs + call near ptr _getvect + pop cx + mov word_1C662, dx + mov word_1C660, ax + mov byte_11D66, 1 + +loc_5174: ; CODE XREF: seg000:515Cj + mov ax, [bp+8] + or ax, [bp+0Ah] + jnz short loc_5186 + push word_1C662 + push word_1C660 + jmp short loc_518E +; --------------------------------------------------------------------------- + +loc_5186: ; CODE XREF: seg000:517Aj + mov ax, seg seg000 + push ax + mov ax, 5046h + push ax + +loc_518E: ; CODE XREF: seg000:5184j + mov ax, 23h ; '#' + jmp short loc_51B7 +; --------------------------------------------------------------------------- + +loc_5193: ; CODE XREF: seg000:5155j + cmp word ptr [bp+6], 8 + jnz short loc_51C0 + mov ax, seg seg000 + push ax + mov ax, 4F62h + push ax + xor ax, ax + push ax + nop + push cs + call near ptr _setvect + add sp, 6 + mov ax, seg seg000 + push ax + mov ax, 4FD4h + push ax + mov ax, 4 + +loc_51B7: ; CODE XREF: seg000:5191j + push ax + nop + push cs + call near ptr _setvect + add sp, 6 + +loc_51C0: ; CODE XREF: seg000:5197j + mov dx, [bp-4] + mov ax, [bp-6] + +loc_51C6: ; CODE XREF: seg000:5126j + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_51CC proc far ; CODE XREF: _abort+8p + +var_6 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + push [bp+arg_0] + push cs + call near ptr sub_50C5 + pop cx + mov [bp+var_2], ax + cmp ax, 0FFFFh + jnz short loc_51E9 + mov ax, 1 + jmp short loc_525D +; --------------------------------------------------------------------------- + +loc_51E9: ; CODE XREF: sub_51CC+16j + mov bx, [bp+var_2] + mov cl, 2 + shl bx, cl + mov dx, [bx+1C6Ah] + mov ax, [bx+1C68h] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + or dx, dx + jnz short loc_5207 + cmp ax, 1 + jz short loc_525B + +loc_5207: ; CODE XREF: sub_51CC+34j + mov ax, word ptr [bp+var_6] + or ax, word ptr [bp+var_6+2] + jnz short loc_5236 + mov ax, [bp+arg_0] + cmp ax, 2 + jz short loc_5221 + cmp ax, 16h + jnz short loc_522A + nop + push cs + call near ptr sub_3CE0 +; --------------------------------------------------------------------------- + +loc_5221: ; CODE XREF: sub_51CC+49j + xor ax, ax + int 23h ; DOS - CONTROL "C" EXIT ADDRESS + ; Return: return via RETF 2 with CF set + ; DOS will abort program with errorlevel 0 + ; else + ; interrupted DOS call continues + mov ax, 4C03h + int 21h ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT) + ; AL = exit code +; --------------------------------------------------------------------------- + +loc_522A: ; CODE XREF: sub_51CC+4Ej + mov ax, 1 + push ax ; status + nop + push cs + call near ptr __exit +; --------------------------------------------------------------------------- + pop cx + jmp short loc_525B +; --------------------------------------------------------------------------- + +loc_5236: ; CODE XREF: sub_51CC+41j + mov bx, [bp+var_2] + mov cl, 2 + shl bx, cl + mov word ptr [bx+1C6Ah], 0 + mov word ptr [bx+1C68h], 0 + mov bx, [bp+var_2] + mov al, [bx+1C86h] + mov ah, 0 + push ax + push [bp+arg_0] + call [bp+var_6] + pop cx + pop cx + +loc_525B: ; CODE XREF: sub_51CC+39j sub_51CC+68j + xor ax, ax + +loc_525D: ; CODE XREF: sub_51CC+1Bj + pop di + pop si + mov sp, bp + pop bp + retf +sub_51CC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far _access(char *pathname, char) +__access proc far ; CODE XREF: sub_5C39+A8p sub_A262+72p + +pathname = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + push si + push di + xor ax, ax + push ax ; func + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; pathname + nop + push cs + call near ptr __chmod + add sp, 6 + mov dx, ax + cmp dx, 0FFFFh + jnz short loc_5282 + jmp short loc_529A +; --------------------------------------------------------------------------- + +loc_5282: ; CODE XREF: __access+1Bj + test [bp+arg_4], 2 + jz short loc_528D + test dl, 1 + jnz short loc_5291 + +loc_528D: ; CODE XREF: __access+23j + xor ax, ax + jmp short loc_529A +; --------------------------------------------------------------------------- + +loc_5291: ; CODE XREF: __access+28j + mov word_1017E, 5 + mov ax, 0FFFFh + +loc_529A: ; CODE XREF: __access+1Dj __access+2Cj + pop di + pop si + pop bp + retf +__access endp + +; --------------------------------------------------------------------------- + db 50h, 51h, 52h, 53h, 54h, 55h, 56h, 57h, 1Eh, 6, 8Bh + db 0ECh, 0A1h, 8Ch, 1Ch, 0Bh, 6, 8Eh, 1Ch, 75h, 27h, 0BEh + db 2 dup(0FFh), 1Eh, 0B8h, 0, 63h, 0F8h, 0CDh, 21h, 8Ch + db 0D8h, 1Fh, 72h, 0Bh, 8Ch, 0DAh, 3Bh, 0C2h, 74h, 5, 83h + db 0FEh, 0FFh, 75h, 6, 0BEh, 90h, 1Ch, 0B8h + dw seg dseg +; --------------------------------------------------------------------------- + mov word ptr dword_11D8C, si + mov word ptr dword_11D8C+2, ax + mov sp, bp + pop es + pop ds + pop di + pop si + pop bp + pop bx + pop bx + pop dx + pop cx + pop ax + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_52E7 proc far ; CODE XREF: sub_530C+35p + ; sub_56F1+284p ... + +arg_0 = byte ptr 6 + + push bp + mov bp, sp + push si + push di + mov al, [bp+arg_0] + xor cx, cx + les bx, dword_11D8C + +loc_52F5: ; CODE XREF: sub_52E7+1Dj + mov dx, es:[bx] + or dx, dx + jz short loc_5307 + cmp al, dl + jb short loc_5307 + inc bx + inc bx + cmp al, dh + ja short loc_52F5 + inc cx + +loc_5307: ; CODE XREF: sub_52E7+13j sub_52E7+17j + xchg ax, cx + pop di + pop si + pop bp + retf +sub_52E7 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_530C proc far ; CODE XREF: sub_56B7+23p + ; sub_56F1+1AEp ... + +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 4 + push si + push di + xor cx, cx + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_5322: ; CODE XREF: sub_530C+4Fj + les bx, [bp+var_4] + cmp byte ptr es:[bx], 0 + jnz short loc_532F + xor cx, cx + jmp short loc_535D +; --------------------------------------------------------------------------- + +loc_532F: ; CODE XREF: sub_530C+1Dj + cmp cx, 1 + jnz short loc_5339 + mov cx, 2 + jmp short loc_5350 +; --------------------------------------------------------------------------- + +loc_5339: ; CODE XREF: sub_530C+26j + les bx, [bp+var_4] + mov al, es:[bx] + push ax + push cs + call near ptr sub_52E7 + pop cx + or ax, ax + jz short loc_534E + mov cx, 1 + jmp short loc_5350 +; --------------------------------------------------------------------------- + +loc_534E: ; CODE XREF: sub_530C+3Bj + xor cx, cx + +loc_5350: ; CODE XREF: sub_530C+2Bj sub_530C+40j + mov ax, word ptr [bp+var_4] + cmp ax, [bp+arg_4] + jnb short loc_535D + inc word ptr [bp+var_4] + jmp short loc_5322 +; --------------------------------------------------------------------------- + +loc_535D: ; CODE XREF: sub_530C+21j sub_530C+4Aj + or cx, cx + jnz short loc_5366 + mov ax, 1 + jmp short loc_5368 +; --------------------------------------------------------------------------- + +loc_5366: ; CODE XREF: sub_530C+53j + xor ax, ax + +loc_5368: ; CODE XREF: sub_530C+58j + pop di + pop si + mov sp, bp + pop bp + retf +sub_530C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int _chmod(const char *pathname, int func, ...) +__chmod proc far ; CODE XREF: __access+10p + +pathname = dword ptr 6 +func = byte ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push ds + mov cx, [bp+arg_6] + mov ah, 43h ; 'C' + mov al, [bp+func] + lds dx, [bp+pathname] + int 21h ; DOS - + pop ds + jb short loc_5387 + xchg ax, cx + jmp short loc_538B +; --------------------------------------------------------------------------- + +loc_5387: ; CODE XREF: __chmod+14j + push ax + call __IOERROR + +loc_538B: ; CODE XREF: __chmod+17j + pop di + pop si + pop bp + retf +__chmod endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fflush(FILE *stream) +_fflush proc far ; CODE XREF: _flushall+2Dp _fseek+Dp ... + +var_2 = word ptr -2 +stream = dword ptr 6 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word ptr [bp+stream] + or ax, word ptr [bp+stream+2] + jnz short loc_53A7 + nop + push cs + call near ptr _flushall + jmp loc_5458 +; --------------------------------------------------------------------------- + +loc_53A7: ; CODE XREF: _fflush+Ej + les bx, [bp+stream] + mov ax, es:[bx+12h] + cmp ax, word ptr [bp+stream] + jz short loc_53B6 + jmp loc_5453 +; --------------------------------------------------------------------------- + +loc_53B6: ; CODE XREF: _fflush+22j + les bx, [bp+stream] + cmp word ptr es:[bx], 0 + jl short loc_540D + test byte ptr es:[bx+2], 8 + jnz short loc_53DE + mov dx, es:[bx+0Eh] + mov ax, word ptr [bp+stream] + add ax, 5 + cmp dx, word ptr [bp+stream+2] + jz short loc_53D8 + jmp loc_5458 +; --------------------------------------------------------------------------- + +loc_53D8: ; CODE XREF: _fflush+44j + cmp es:[bx+0Ch], ax + jnz short loc_5458 + +loc_53DE: ; CODE XREF: _fflush+35j + les bx, [bp+stream] + mov word ptr es:[bx], 0 + mov dx, es:[bx+0Eh] + mov ax, word ptr [bp+stream] + add ax, 5 + cmp dx, word ptr [bp+stream+2] + jnz short loc_5458 + cmp es:[bx+0Ch], ax + jnz short loc_5458 + mov dx, es:[bx+0Ah] + mov ax, es:[bx+8] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + jmp short loc_5458 +; --------------------------------------------------------------------------- + +loc_540D: ; CODE XREF: _fflush+2Ej + les bx, [bp+stream] + mov ax, es:[bx+6] + add ax, es:[bx] + inc ax + mov [bp+var_2], ax + sub es:[bx], ax + push ax ; len + mov dx, es:[bx+0Ah] + mov ax, es:[bx+8] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + push dx + push ax ; buf + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr ___write + add sp, 8 + cmp ax, [bp+var_2] + jz short loc_5458 + les bx, [bp+stream] + test byte ptr es:[bx+3], 2 + jnz short loc_5458 + or word ptr es:[bx+2], 10h + +loc_5453: ; CODE XREF: _fflush+24j + mov ax, 0FFFFh + jmp short loc_545A +; --------------------------------------------------------------------------- + +loc_5458: ; CODE XREF: _fflush+15j _fflush+46j ... + xor ax, ax + +loc_545A: ; CODE XREF: _fflush+C7j + pop di + pop si + mov sp, bp + pop bp + retf +_fflush endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int flushall(void) +_flushall proc far ; CODE XREF: ___call_terminate+18p + ; _fflush+12p + +var_8 = word ptr -8 +var_6 = word ptr -6 +stream = dword ptr -4 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov [bp+var_8], 0 + mov ax, word_11A98 + mov [bp+var_6], ax + mov word ptr [bp+stream+2], ds + mov word ptr [bp+stream], 1808h + jmp short loc_5499 +; --------------------------------------------------------------------------- + +loc_547D: ; CODE XREF: _flushall+41j + les bx, [bp+stream] + test byte ptr es:[bx+2], 3 + jz short loc_5495 + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + inc [bp+var_8] + +loc_5495: ; CODE XREF: _flushall+25j + add word ptr [bp+stream], 14h + +loc_5499: ; CODE XREF: _flushall+1Bj + mov ax, [bp+var_6] + dec [bp+var_6] + or ax, ax + jnz short loc_547D + mov ax, [bp+var_8] + pop di + pop si + mov sp, bp + pop bp + retf +_flushall endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_54AC proc near ; CODE XREF: sub_554E+15p _ftell+B9p ... + +var_6 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = dword ptr 4 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + les bx, [bp+arg_0] + cmp word ptr es:[bx], 0 + jge short loc_54C9 + mov cx, es:[bx+6] + add cx, es:[bx] + inc cx + mov ax, cx + jmp short loc_54D6 +; --------------------------------------------------------------------------- + +loc_54C9: ; CODE XREF: sub_54AC+Fj + les bx, [bp+arg_0] + mov ax, es:[bx] + cwd + xor ax, dx + sub ax, dx + mov cx, ax + +loc_54D6: ; CODE XREF: sub_54AC+1Bj + mov [bp+var_2], ax + les bx, [bp+arg_0] + test byte ptr es:[bx+2], 40h + jnz short loc_552A + les bx, [bp+arg_0] + mov dx, es:[bx+0Eh] + mov ax, es:[bx+0Ch] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + cmp word ptr es:[bx], 0 + jge short loc_5523 + jmp short loc_550B +; --------------------------------------------------------------------------- + +loc_54FC: ; CODE XREF: sub_54AC+64j + dec word ptr [bp+var_6] + les bx, [bp+var_6] + cmp byte ptr es:[bx], 0Ah + jnz short loc_550B + inc [bp+var_2] + +loc_550B: ; CODE XREF: sub_54AC+4Ej sub_54AC+5Aj + mov ax, cx + dec cx + or ax, ax + jnz short loc_54FC + jmp short loc_552A +; --------------------------------------------------------------------------- + +loc_5514: ; CODE XREF: sub_54AC+7Cj + les bx, [bp+var_6] + inc word ptr [bp+var_6] + cmp byte ptr es:[bx], 0Ah + jnz short loc_5523 + inc [bp+var_2] + +loc_5523: ; CODE XREF: sub_54AC+4Cj sub_54AC+72j + mov ax, cx + dec cx + or ax, ax + jnz short loc_5514 + +loc_552A: ; CODE XREF: sub_54AC+35j sub_54AC+66j + mov ax, [bp+var_2] + pop di + pop si + mov sp, bp + pop bp + retn 4 +sub_54AC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl fseek(FILE *stream, __int32 offset, int whence) +_fseek proc near ; CODE XREF: _setvbuf+68p + +_offset = dword ptr 6 +whence = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push word ptr [bp+_offset+2] + push word ptr [bp+_offset] ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + or ax, ax + jz short loc_5550 + mov ax, 0FFFFh +_fseek endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_554E proc far ; CODE XREF: sub_A2EB+22Fp + ; DATA XREF: dseg:off_10104o + jmp short loc_55B3 +; --------------------------------------------------------------------------- + +loc_5550: ; CODE XREF: _fseek+14j + cmp word ptr [bp+0Eh], 1 + jnz short loc_556D + les bx, [bp+6] + cmp word ptr es:[bx], 0 + jle short loc_556D + push word ptr [bp+8] + push bx + call sub_54AC + cwd + sub [bp+0Ah], ax + sbb [bp+0Ch], dx + +loc_556D: ; CODE XREF: sub_554E+6j sub_554E+Fj + les bx, [bp+6] + and word ptr es:[bx+2], 0FE5Fh + mov word ptr es:[bx], 0 + mov dx, es:[bx+0Ah] + mov ax, es:[bx+8] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + push word ptr [bp+0Eh] ; fromwhere + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] ; offset + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + cmp dx, 0FFFFh + jnz short loc_55B1 + cmp ax, 0FFFFh + jnz short loc_55B1 + mov ax, 0FFFFh + jmp short loc_55B3 +; --------------------------------------------------------------------------- + +loc_55B1: ; CODE XREF: sub_554E+57j sub_554E+5Cj + xor ax, ax + +loc_55B3: ; CODE XREF: sub_554Ej sub_554E+61j + pop di + pop si + pop bp + retf +sub_554E endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; __int32 __cdecl ftell(FILE *stream) +_ftell proc far + +var_8 = word ptr -8 +var_6 = word ptr -6 +_offset = dword ptr -4 +stream = dword ptr 6 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov ax, 1 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + mov word ptr [bp+_offset+2], dx + mov word ptr [bp+_offset], ax + cmp dx, 0FFFFh + jnz short loc_55EB + cmp ax, 0FFFFh + jnz short loc_55EB + jmp loc_568C +; --------------------------------------------------------------------------- + +loc_55EB: ; CODE XREF: _ftell+2Aj _ftell+2Fj + les bx, [bp+stream] + cmp word ptr es:[bx], 0 + jl short loc_55F7 + jmp loc_567C +; --------------------------------------------------------------------------- + +loc_55F7: ; CODE XREF: _ftell+3Bj + mov al, es:[bx+4] + cbw + add ax, ax + mov bx, ax + test byte ptr [bx+199Bh], 8 + jz short loc_566A + mov ax, 2 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + mov bx, word ptr [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + mov [bp+var_6], dx + mov [bp+var_8], ax + cmp dx, 0FFFFh + jnz short loc_5632 + cmp ax, 0FFFFh + jnz short loc_5632 + jmp short loc_5692 +; --------------------------------------------------------------------------- + +loc_5632: ; CODE XREF: _ftell+72j _ftell+77j + xor ax, ax + push ax ; fromwhere + push word ptr [bp+_offset+2] + push word ptr [bp+_offset] ; offset + les bx, [bp+stream] + mov al, es:[bx+4] + cbw + push ax ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + cmp dx, 0FFFFh + jnz short loc_565E + cmp ax, 0FFFFh + jnz short loc_565E + mov dx, 0FFFFh + mov ax, 0FFFFh + jmp short loc_5692 +; --------------------------------------------------------------------------- + +loc_565E: ; CODE XREF: _ftell+98j _ftell+9Dj + mov dx, [bp+var_6] + mov ax, [bp+var_8] + mov word ptr [bp+_offset+2], dx + mov word ptr [bp+_offset], ax + +loc_566A: ; CODE XREF: _ftell+4Ej + push word ptr [bp+stream+2] + push word ptr [bp+stream] + call sub_54AC + cwd + add word ptr [bp+_offset], ax + adc word ptr [bp+_offset+2], dx + jmp short loc_568C +; --------------------------------------------------------------------------- + +loc_567C: ; CODE XREF: _ftell+3Dj + push word ptr [bp+stream+2] + push word ptr [bp+stream] + call sub_54AC + cwd + sub word ptr [bp+_offset], ax + sbb word ptr [bp+_offset+2], dx + +loc_568C: ; CODE XREF: _ftell+31j _ftell+C3j + mov dx, word ptr [bp+_offset+2] + mov ax, word ptr [bp+_offset] + +loc_5692: ; CODE XREF: _ftell+79j _ftell+A5j + pop di + pop si + mov sp, bp + pop bp + retf +_ftell endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_5698 proc near ; CODE XREF: sub_56B7+Ep sub_56F1+7Dp ... + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + mov ax, [bp+arg_0] + cmp ax, 5Ch ; '\' + jz short loc_56AA + cmp ax, 2Fh ; '/' + jnz short loc_56AF + +loc_56AA: ; CODE XREF: sub_5698+Bj + mov ax, 1 + jmp short loc_56B1 +; --------------------------------------------------------------------------- + +loc_56AF: ; CODE XREF: sub_5698+10j + xor ax, ax + +loc_56B1: ; CODE XREF: sub_5698+15j + pop di + pop si + pop bp + retn 2 +sub_5698 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_56B7 proc near ; CODE XREF: sub_56F1+CDp + ; sub_56F1+15Bp ... + +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + les bx, [bp+arg_0] + mov al, es:[bx] + mov ah, 0 + push ax + call sub_5698 + or ax, ax + jz short loc_56E9 + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + nop + push cs + call near ptr sub_530C + add sp, 8 + or ax, ax + jz short loc_56E9 + mov ax, 1 + jmp short loc_56EB +; --------------------------------------------------------------------------- + +loc_56E9: ; CODE XREF: sub_56B7+13j sub_56B7+2Bj + xor ax, ax + +loc_56EB: ; CODE XREF: sub_56B7+30j + pop di + pop si + pop bp + retn 8 +sub_56B7 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_56F1 proc far ; CODE XREF: sub_5C39+10Dp + +drive = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +src = dword ptr -0Ch +dest = dword ptr -8 +s = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 12h + push si + push di + mov ax, 0A1h ; '' + push ax + nop + push cs + call sub_4C1A + pop cx + mov word ptr [bp+s+2], dx + mov word ptr [bp+s], ax + or ax, dx + jnz short loc_5710 + jmp loc_5953 +; --------------------------------------------------------------------------- + +loc_5710: ; CODE XREF: sub_56F1+1Aj + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + les bx, [bp+src] + mov al, es:[bx] + cbw + mov bx, ax + test byte ptr [bx+1A39h], 0Ch + jz short loc_5750 + mov bx, word ptr [bp+src] + cmp byte ptr es:[bx+1], 3Ah ; ':' + jnz short loc_5750 + mov al, es:[bx] + cbw + mov [bp+var_10], ax + push ax + nop + push cs + call near ptr sub_4603 + pop cx + add ax, 0FFC0h + mov [bp+drive], ax + add word ptr [bp+src], 2 + jmp short loc_5766 +; --------------------------------------------------------------------------- + +loc_5750: ; CODE XREF: sub_56F1+39j sub_56F1+43j + push ss + lea ax, [bp+drive] + push ax ; drive + nop + push cs + call near ptr __dos_getdrive + pop cx + pop cx + mov ax, [bp+drive] + add ax, 41h ; 'A' + dec ax + mov [bp+var_10], ax + +loc_5766: ; CODE XREF: sub_56F1+5Dj + les bx, [bp+src] + mov al, es:[bx] + cbw + push ax + call sub_5698 + or ax, ax + jnz short loc_57CE + mov ax, 0A1h ; '' + push ax ; len + push word ptr [bp+s+2] + push word ptr [bp+s] ; buf + push [bp+drive] ; drive + nop + push cs + call near ptr __getdcwd + add sp, 8 + or ax, dx + jnz short loc_579E + push word ptr [bp+s+2] + push word ptr [bp+s] + nop + push cs + call near ptr sub_4AE7 + pop cx + pop cx + jmp loc_5953 +; --------------------------------------------------------------------------- + +loc_579E: ; CODE XREF: sub_56F1+9Bj + push word ptr [bp+s+2] + push word ptr [bp+s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + mov dx, word ptr [bp+s+2] + add ax, word ptr [bp+s] + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + push dx + push word ptr [bp+s] + dec ax + push dx + push ax + call sub_56B7 + or ax, ax + jnz short loc_57F0 + les bx, [bp+dest] + mov byte ptr es:[bx], 5Ch ; '\' + jmp short loc_57ED +; --------------------------------------------------------------------------- + +loc_57CE: ; CODE XREF: sub_56F1+82j + mov dx, word ptr [bp+s+2] + mov ax, word ptr [bp+s] + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov al, byte ptr [bp+var_10] + mov es:[bx], al + inc word ptr [bp+dest] + les bx, [bp+dest] + mov byte ptr es:[bx], 3Ah ; ':' + +loc_57ED: ; CODE XREF: sub_56F1+DBj + inc word ptr [bp+dest] + +loc_57F0: ; CODE XREF: sub_56F1+D2j + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _strcpy + add sp, 8 + mov dx, word ptr [bp+s+2] + mov ax, word ptr [bp+s] + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + +loc_5816: ; CODE XREF: sub_56F1+28Cj + ; sub_56F1+298j ... + les bx, [bp+src] + inc word ptr [bp+src] + mov al, es:[bx] + cbw + mov [bp+var_E], ax + or ax, ax + jz short loc_5832 + push ax + call sub_5698 + or ax, ax + jnz short loc_5832 + jmp loc_5964 +; --------------------------------------------------------------------------- + +loc_5832: ; CODE XREF: sub_56F1+134j + ; sub_56F1+13Cj + les bx, [bp+dest] + cmp byte ptr es:[bx-1], 2Eh ; '.' + jnz short loc_5859 + push word ptr [bp+s+2] + push word ptr [bp+s] + mov ax, word ptr [bp+dest] + add ax, 0FFFEh + push word ptr [bp+dest+2] + push ax + call sub_56B7 + or ax, ax + jz short loc_5859 + sub word ptr [bp+dest], 2 + jmp short loc_58D0 +; --------------------------------------------------------------------------- + +loc_5859: ; CODE XREF: sub_56F1+149j + ; sub_56F1+160j + les bx, [bp+dest] + cmp byte ptr es:[bx-1], 2Eh ; '.' + jnz short loc_58D0 + cmp byte ptr es:[bx-2], 2Eh ; '.' + jnz short loc_58D0 + push word ptr [bp+s+2] + push word ptr [bp+s] + mov ax, word ptr [bp+dest] + add ax, 0FFFDh + push word ptr [bp+dest+2] + push ax + call sub_56B7 + or ax, ax + jz short loc_58D0 + sub word ptr [bp+dest], 3 + les bx, [bp+dest] + cmp byte ptr es:[bx-1], 3Ah ; ':' + jnz short loc_58B9 + mov ax, word ptr [bp+dest] + dec ax + push word ptr [bp+dest+2] + push ax + push word ptr [bp+s+2] + push word ptr [bp+s] + nop + push cs + call near ptr sub_530C + add sp, 8 + or ax, ax + jz short loc_58B9 + push word ptr [bp+s+2] + push word ptr [bp+s] + nop + push cs + call near ptr sub_4AE7 + pop cx + pop cx + jmp loc_5953 +; --------------------------------------------------------------------------- + +loc_58B9: ; CODE XREF: sub_56F1+19Cj + ; sub_56F1+1B6j ... + push word ptr [bp+s+2] + push word ptr [bp+s] + dec word ptr [bp+dest] + mov ax, word ptr [bp+dest] + push word ptr [bp+dest+2] + push ax + call sub_56B7 + or ax, ax + jz short loc_58B9 + +loc_58D0: ; CODE XREF: sub_56F1+166j + ; sub_56F1+170j ... + cmp [bp+var_E], 0 + jz short loc_58D9 + jmp loc_5959 +; --------------------------------------------------------------------------- + +loc_58D9: ; CODE XREF: sub_56F1+1E3j + push word ptr [bp+s+2] + push word ptr [bp+s] + mov ax, word ptr [bp+dest] + dec ax + push word ptr [bp+dest+2] + push ax + call sub_56B7 + or ax, ax + jz short loc_58F1 + dec word ptr [bp+dest] + +loc_58F1: ; CODE XREF: sub_56F1+1FBj + les bx, [bp+dest] + cmp byte ptr es:[bx-1], 3Ah ; ':' + jnz short loc_591F + mov ax, word ptr [bp+dest] + dec ax + push word ptr [bp+dest+2] + push ax + push word ptr [bp+s+2] + push word ptr [bp+s] + nop + push cs + call near ptr sub_530C + add sp, 8 + or ax, ax + jz short loc_591F + les bx, [bp+dest] + mov byte ptr es:[bx], 5Ch ; '\' + inc word ptr [bp+dest] + +loc_591F: ; CODE XREF: sub_56F1+208j + ; sub_56F1+222j + les bx, [bp+dest] + mov byte ptr es:[bx], 0 + push word ptr [bp+s+2] + push word ptr [bp+s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + inc ax + mov dx, ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jnz short loc_5941 + jmp loc_59C5 +; --------------------------------------------------------------------------- + +loc_5941: ; CODE XREF: sub_56F1+24Bj + cmp dx, [bp+arg_8] + jbe short loc_599E + push word ptr [bp+s+2] + push word ptr [bp+s] + nop + push cs + call near ptr sub_4AE7 + pop cx + pop cx + +loc_5953: ; CODE XREF: sub_56F1+1Cj sub_56F1+AAj ... + xor dx, dx + xor ax, ax + jmp short loc_59D4 +; --------------------------------------------------------------------------- + +loc_5959: ; CODE XREF: sub_56F1+1E5j + les bx, [bp+dest] + mov al, byte ptr [bp+var_E] + mov es:[bx], al + jmp short loc_5998 +; --------------------------------------------------------------------------- + +loc_5964: ; CODE XREF: sub_56F1+13Ej + les bx, [bp+dest] + mov al, byte ptr [bp+var_E] + mov es:[bx], al + inc word ptr [bp+dest] + push [bp+var_E] + nop + push cs + call near ptr sub_52E7 + pop cx + or ax, ax + jnz short loc_5980 + jmp loc_5816 +; --------------------------------------------------------------------------- + +loc_5980: ; CODE XREF: sub_56F1+28Aj + les bx, [bp+src] + cmp byte ptr es:[bx], 0 + jnz short loc_598C + jmp loc_5816 +; --------------------------------------------------------------------------- + +loc_598C: ; CODE XREF: sub_56F1+296j + mov al, es:[bx] + les bx, [bp+dest] + mov es:[bx], al + inc word ptr [bp+src] + +loc_5998: ; CODE XREF: sub_56F1+271j + inc word ptr [bp+dest] + jmp loc_5816 +; --------------------------------------------------------------------------- + +loc_599E: ; CODE XREF: sub_56F1+253j + push word ptr [bp+s+2] + push word ptr [bp+s] ; src + push [bp+arg_2] + push [bp+arg_0] ; dest + nop + push cs + call near ptr _strcpy + push word ptr [bp+s+2] + push word ptr [bp+s] + nop + push cs + call near ptr sub_4AE7 + add sp, 0Ch + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + jmp short loc_59D4 +; --------------------------------------------------------------------------- + +loc_59C5: ; CODE XREF: sub_56F1+24Dj + push dx + push word ptr [bp+s+2] + push word ptr [bp+s] + nop + push cs + call near ptr sub_4D81 + add sp, 6 + +loc_59D4: ; CODE XREF: sub_56F1+266j + ; sub_56F1+2D2j + pop di + pop si + mov sp, bp + pop bp + retf +sub_56F1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl _getdcwd(int drive, char *buf, int len) +__getdcwd proc far ; CODE XREF: sub_56F1+93p sub_5C39+17p + +s = byte ptr -48h +var_47 = byte ptr -47h +var_46 = byte ptr -46h +var_45 = byte ptr -45h +var_2 = word ptr -2 +drive = word ptr 6 +dest = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 48h + push si + push di + mov ax, [bp+drive] + mov [bp+var_2], ax + or ax, ax + jnz short loc_59F6 + mov ah, 19h + int 21h ; DOS - GET DEFAULT DISK NUMBER + mov ah, 0 + inc ax + mov [bp+var_2], ax + +loc_59F6: ; CODE XREF: __getdcwd+10j + mov al, byte ptr [bp+var_2] + add al, 40h ; '@' + mov [bp+s], al + mov [bp+var_47], 3Ah ; ':' + mov [bp+var_46], 5Ch ; '\' + push ds + mov ax, ss + mov ds, ax + lea si, [bp+var_45] + mov ah, 47h ; 'G' + mov dl, byte ptr [bp+var_2] + int 21h ; DOS - 2+ - GET CURRENT DIRECTORY + ; DL = drive (0=default, 1=A, etc.) + ; DS:SI points to 64-byte buffer area + pop ds + jb short loc_5A52 + push ss + lea ax, [bp+s] + push ax ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + cmp ax, [bp+len] + jb short loc_5A31 + mov word_1017E, 22h ; '"' + jmp short loc_5A52 +; --------------------------------------------------------------------------- + +loc_5A31: ; CODE XREF: __getdcwd+4Dj + mov ax, word ptr [bp+dest] + or ax, word ptr [bp+dest+2] + jnz short loc_5A58 + push [bp+len] + nop + push cs + call sub_4C1A + pop cx + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + or ax, dx + jnz short loc_5A58 + mov word_1017E, 8 + +loc_5A52: ; CODE XREF: __getdcwd+3Cj + ; __getdcwd+55j + xor dx, dx + xor ax, ax + jmp short loc_5A71 +; --------------------------------------------------------------------------- + +loc_5A58: ; CODE XREF: __getdcwd+5Dj + ; __getdcwd+70j + push ss + lea ax, [bp+s] + push ax ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _strcpy + add sp, 8 + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + +loc_5A71: ; CODE XREF: __getdcwd+7Cj + pop di + pop si + mov sp, bp + pop bp + retf +__getdcwd endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl getenv(const char *name) +_getenv proc far ; CODE XREF: __searchenv+10p + ; sub_A2EB+126p + +var_4 = dword ptr -4 +_name = dword ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les di, [bp+_name] + mov ax, es + or ax, di + jz short loc_5AA8 + mov al, 0 + mov ah, es:[di] + mov cx, 0FFFFh + cld + repne scasb + not cx + dec cx + jz short loc_5AA8 + les di, dword_11DB8 + mov word ptr [bp+var_4+2], es + mov bx, es + or bx, di + mov word ptr [bp+var_4], di + jnz short loc_5AB5 + +loc_5AA8: ; CODE XREF: _getenv+Fj _getenv+1Fj ... + xor dx, dx + xor ax, ax + jmp short loc_5AE1 +; --------------------------------------------------------------------------- + +loc_5AAE: ; CODE XREF: _getenv+50j _getenv+58j ... + add word ptr [bp+var_4], 4 + les di, [bp+var_4] + +loc_5AB5: ; CODE XREF: _getenv+2Fj + les di, es:[di] + mov bx, es + or bx, di + jz short loc_5AA8 + mov al, es:[di] + or al, al + jz short loc_5AA8 + cmp ah, al + jnz short loc_5AAE + mov bx, cx + cmp byte ptr es:[bx+di], 3Dh ; '=' + jnz short loc_5AAE + push ds + lds si, [bp+_name] + repe cmpsb + pop ds + xchg cx, bx + jnz short loc_5AAE + inc di + mov ax, di + mov dx, es + +loc_5AE1: ; CODE XREF: _getenv+35j + pop di + pop si + mov sp, bp + pop bp + retf +_getenv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl memcmp(const void *s1, const void *s2, size_t n) +_memcmp proc far ; CODE XREF: __CurrExcContext+39p + +s1 = dword ptr 6 +s2 = dword ptr 0Ah +n = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + push ds + mov ax, [bp+n] + mov cx, ax + jcxz short loc_5B08 + lds si, [bp+s1] + les di, [bp+s2] + cld + repe cmpsb + mov al, [si-1] + xor ah, ah + mov cl, es:[di-1] + xor ch, ch + +loc_5B08: ; CODE XREF: _memcmp+Bj + pop ds + sub ax, cx + pop di + pop si + pop bp + retf +_memcmp endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void *__cdecl memcpy(void *dest, const void *src, size_t n) +_memcpy proc far ; CODE XREF: _stpcpy+28p sub_72F3+223p ... + +dest = dword ptr 6 +src = dword ptr 0Ah +n = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + mov dx, ds + les di, [bp+dest] + lds si, [bp+src] + mov cx, [bp+n] + shr cx, 1 + cld + rep movsw + jnb short loc_5B27 + movsb + +loc_5B27: ; CODE XREF: _memcpy+15j + mov ds, dx + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + pop bp + retf +_memcpy endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl setmem(void *dest, unsigned int length, char value) +_setmem proc far ; CODE XREF: _memset+12p + +dest = dword ptr 6 +_length = word ptr 0Ah +value = byte ptr 0Ch + + push bp + mov bp, sp + push si + push di + les di, [bp+dest] + mov cx, [bp+_length] + mov al, [bp+value] + mov ah, al + cld + test di, 1 + jz short loc_5B4E + jcxz short loc_5B55 + stosb + dec cx + +loc_5B4E: ; CODE XREF: _setmem+15j + shr cx, 1 + rep stosw + jnb short loc_5B55 + stosb + +loc_5B55: ; CODE XREF: _setmem+17j _setmem+1Fj + pop di + pop si + pop bp + retf +_setmem endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void *__cdecl memset(void *s, int c, size_t n) +_memset proc far ; CODE XREF: sub_7F9F+CFp seg003:09DAP + +dest = dword ptr 6 +value = byte ptr 0Ah +_length = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push word ptr [bp+value] ; value + push [bp+_length] ; length + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + push cs + call near ptr _setmem + add sp, 8 + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + pop bp + retf +_memset endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl movmem(const void *src, void *dest, unsigned int length) +_movmem proc far ; CODE XREF: _memmove+15p + +src = dword ptr 6 +dest = dword ptr 0Ah +_length = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + push ds + mov cx, word ptr [bp+dest+2] + mov bx, word ptr [bp+dest] + mov dx, word ptr [bp+src+2] + mov ax, word ptr [bp+src] + call N_PCMP@ + jnb short loc_5B98 + std + mov ax, 1 + jmp short loc_5B9B +; --------------------------------------------------------------------------- + +loc_5B98: ; CODE XREF: _movmem+15j + cld + xor ax, ax + +loc_5B9B: ; CODE XREF: _movmem+1Bj + lds si, [bp+src] + les di, [bp+dest] + mov cx, [bp+_length] + or ax, ax + jz short loc_5BAE + add si, cx + dec si + add di, cx + dec di + +loc_5BAE: ; CODE XREF: _movmem+2Bj + test di, 1 + jz short loc_5BB8 + jcxz short loc_5BC7 + movsb + dec cx + +loc_5BB8: ; CODE XREF: _movmem+37j + sub si, ax + sub di, ax + shr cx, 1 + rep movsw + jnb short loc_5BC7 + add si, ax + add di, ax + movsb + +loc_5BC7: ; CODE XREF: _movmem+39j _movmem+45j + cld + pop ds + pop di + pop si + pop bp + retf +_movmem endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void *__cdecl memmove(void *dest, const void *src, size_t n) +_memmove proc far ; CODE XREF: seg003:0996P seg003:09BFP + +dest = dword ptr 6 +src = dword ptr 0Ah +_length = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + push [bp+_length] ; length + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push cs + call near ptr _movmem + add sp, 0Ah + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + pop bp + retf +_memmove endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; void __cdecl _searchenv(const char *file, const char *varname, char *pathname) +__searchenv proc far ; CODE XREF: sub_A262+43p + +var_4 = dword ptr -4 +src = dword ptr 6 +varname = dword ptr 0Ah +pathname = dword ptr 0Eh + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push word ptr [bp+varname+2] + push word ptr [bp+varname] ; name + nop + push cs + call near ptr _getenv + pop cx + pop cx + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + or ax, dx + jnz short loc_5C19 + mov word ptr [bp+var_4+2], ds + mov word ptr [bp+var_4], 1C9Ch + +loc_5C19: ; CODE XREF: __searchenv+1Dj + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; pathname + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] ; __int32 + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + nop + push cs + call near ptr sub_5C39 + add sp, 0Ch + pop di + pop si + mov sp, bp + pop bp + retf +__searchenv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_5C39(char *src, __int32, char *pathname) +sub_5C39 proc far ; CODE XREF: __searchenv+3Bp + +var_4 = word ptr -4 +var_2 = word ptr -2 +src = dword ptr 6 +arg_4 = dword ptr 0Ah +pathname = dword ptr 0Eh + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, 50h ; 'P' + push ax ; len + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; buf + xor ax, ax + push ax ; drive + nop + push cs + call near ptr __getdcwd + add sp, 8 + or ax, dx + jnz short loc_5C5E + xor dx, dx + jmp short loc_5C6D +; --------------------------------------------------------------------------- + +loc_5C5E: ; CODE XREF: sub_5C39+1Fj + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + mov dx, ax + +loc_5C6D: ; CODE XREF: sub_5C39+23j sub_5C39+F4j ... + les bx, [bp+pathname] + add bx, dx + mov byte ptr es:[bx], 0 + or dx, dx + jz short loc_5CC2 + mov bx, dx + add bx, word ptr [bp+pathname] + mov bl, es:[bx-1] + mov al, bl + cmp al, 5Ch ; '\' + jz short loc_5C93 + cmp bl, 2Fh ; '/' + jz short loc_5C93 + cmp bl, 3Ah ; ':' + jnz short loc_5CAF + +loc_5C93: ; CODE XREF: sub_5C39+4Ej sub_5C39+53j + mov ax, word ptr [bp+pathname] + add ax, dx + dec ax + push word ptr [bp+pathname+2] + push ax + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] + nop + push cs + call near ptr sub_530C + add sp, 8 + or ax, ax + jnz short loc_5CC2 + +loc_5CAF: ; CODE XREF: sub_5C39+58j + push ds + mov ax, 1C9Eh + push ax ; src + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; dest + nop + push cs + call near ptr _strcat + add sp, 8 + +loc_5CC2: ; CODE XREF: sub_5C39+3Fj sub_5C39+74j + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; dest + nop + push cs + call near ptr _strcat + add sp, 8 + xor ax, ax + push ax ; char + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; pathname + nop + push cs + call near ptr __access + add sp, 6 + or ax, ax + jz short loc_5D36 + les bx, [bp+arg_4] + cmp byte ptr es:[bx], 0 + jnz short loc_5CFD + les bx, [bp+pathname] + mov byte ptr es:[bx], 0 + jmp short loc_5D75 +; --------------------------------------------------------------------------- + +loc_5CFD: ; CODE XREF: sub_5C39+B9j + xor dx, dx + jmp short loc_5D15 +; --------------------------------------------------------------------------- + +loc_5D01: ; CODE XREF: sub_5C39+E9j + les bx, [bp+pathname] + add bx, dx + push es + les si, [bp+arg_4] + mov al, es:[si] + pop es + mov es:[bx], al + inc word ptr [bp+arg_4] + inc dx + +loc_5D15: ; CODE XREF: sub_5C39+C6j + les bx, [bp+arg_4] + cmp byte ptr es:[bx], 3Bh ; ';' + jz short loc_5D24 + cmp byte ptr es:[bx], 0 + jnz short loc_5D01 + +loc_5D24: ; CODE XREF: sub_5C39+E3j + les bx, [bp+arg_4] + cmp byte ptr es:[bx], 0 + jnz short loc_5D30 + jmp loc_5C6D +; --------------------------------------------------------------------------- + +loc_5D30: ; CODE XREF: sub_5C39+F2j + inc word ptr [bp+arg_4] + jmp loc_5C6D +; --------------------------------------------------------------------------- + +loc_5D36: ; CODE XREF: sub_5C39+B0j + mov ax, 50h ; 'P' + push ax + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] + xor ax, ax + push ax + push ax + nop + push cs + call near ptr sub_56F1 + add sp, 0Ah + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jz short loc_5D75 + push [bp+var_2] + push [bp+var_4] ; src + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; dest + nop + push cs + call near ptr _strcpy + push [bp+var_2] + push [bp+var_4] + nop + push cs + call near ptr sub_4AE7 + add sp, 0Ch + +loc_5D75: ; CODE XREF: sub_5C39+C2j + ; sub_5C39+11Bj + pop di + pop si + mov sp, bp + pop bp + retf +sub_5C39 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl setvbuf(FILE *stream, char *buf, int type, size_t size) +_setvbuf proc far ; CODE XREF: seg000:4591p seg000:45CAp + +_offset = dword ptr 6 +buf = dword ptr 0Ah +_type = word ptr 0Eh +_size = word ptr 10h + + push bp + mov bp, sp + push si + push di + les bx, [bp+_offset] + mov ax, es:[bx+12h] + cmp ax, word ptr [bp+_offset] + jz short loc_5D8F + jmp loc_5E66 +; --------------------------------------------------------------------------- + +loc_5D8F: ; CODE XREF: _setvbuf+Fj + cmp [bp+_type], 2 + jle short loc_5D98 + jmp loc_5E66 +; --------------------------------------------------------------------------- + +loc_5D98: ; CODE XREF: _setvbuf+18j + cmp [bp+_size], 7FFFh + jbe short loc_5DA2 + jmp loc_5E66 +; --------------------------------------------------------------------------- + +loc_5DA2: ; CODE XREF: _setvbuf+22j + cmp word_11DA2, 0 + jnz short loc_5DB8 + cmp word ptr [bp+_offset], 181Ch + jnz short loc_5DB8 + mov word_11DA2, 1 + jmp short loc_5DCC +; --------------------------------------------------------------------------- + +loc_5DB8: ; CODE XREF: _setvbuf+2Cj _setvbuf+33j + cmp word_11DA0, 0 + jnz short loc_5DCC + cmp word ptr [bp+_offset], 1808h + jnz short loc_5DCC + mov word_11DA0, 1 + +loc_5DCC: ; CODE XREF: _setvbuf+3Bj _setvbuf+42j ... + les bx, [bp+_offset] + cmp word ptr es:[bx], 0 + jz short loc_5DE9 + mov ax, 1 + push ax + xor ax, ax + push ax ; whence + push ax + push word ptr [bp+_offset+2] ; offset + push bx + nop + push cs ; stream + call _fseek + add sp, 0Ah + +loc_5DE9: ; CODE XREF: _setvbuf+58j + les bx, [bp+_offset] + test byte ptr es:[bx+2], 4 + jz short loc_5E02 + push word ptr es:[bx+0Ah] + push word ptr es:[bx+8] + nop + push cs + call near ptr sub_4AE7 + pop cx + pop cx + +loc_5E02: ; CODE XREF: _setvbuf+76j + les bx, [bp+_offset] + and word ptr es:[bx+2], 0FFF3h + mov word ptr es:[bx+6], 0 + mov dx, word ptr [bp+_offset+2] + mov ax, word ptr [bp+_offset] + add ax, 5 + mov es:[bx+0Ah], dx + mov es:[bx+8], ax + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + cmp [bp+_type], 2 + jz short loc_5E96 + cmp [bp+_size], 0 + jbe short loc_5E96 + mov word ptr off_118FC+2, seg seg000 + mov word ptr off_118FC, 61A4h + mov ax, word ptr [bp+buf] + or ax, word ptr [bp+buf+2] + jnz short loc_5E6B + push [bp+_size] + nop + push cs + call sub_4C1A + pop cx + mov word ptr [bp+buf+2], dx + mov word ptr [bp+buf], ax + or ax, dx + jz short loc_5E66 + les bx, [bp+_offset] + or word ptr es:[bx+2], 4 + jmp short loc_5E6B +; --------------------------------------------------------------------------- + +loc_5E66: ; CODE XREF: _setvbuf+11j _setvbuf+1Aj ... + mov ax, 0FFFFh + jmp short loc_5E98 +; --------------------------------------------------------------------------- + +loc_5E6B: ; CODE XREF: _setvbuf+CCj _setvbuf+E9j + les bx, [bp+_offset] + mov dx, word ptr [bp+buf+2] + mov ax, word ptr [bp+buf] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + mov es:[bx+0Ah], dx + mov es:[bx+8], ax + mov ax, [bp+_size] + mov es:[bx+6], ax + cmp [bp+_type], 1 + jnz short loc_5E96 + or word ptr es:[bx+2], 8 + +loc_5E96: ; CODE XREF: _setvbuf+B2j _setvbuf+B8j ... + xor ax, ax + +loc_5E98: ; CODE XREF: _setvbuf+EEj + pop di + pop si + pop bp + retf +_setvbuf endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl strcat(char *dest, const char *src) +_strcat proc far ; CODE XREF: sub_5C39+83p sub_5C39+97p ... + +dest = dword ptr 6 +src = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + cld + push ds + les di, [bp+dest] + mov dx, di + xor al, al + mov cx, 0FFFFh + repne scasb + push es + lea si, [di-1] + les di, [bp+src] + mov cx, 0FFFFh + repne scasb + not cx + sub di, cx + push es + pop ds + pop es + xchg si, di + test si, 1 + jz short loc_5ECC + movsb + dec cx + +loc_5ECC: ; CODE XREF: _strcat+2Cj + shr cx, 1 + rep movsw + jnb short loc_5ED3 + movsb + +loc_5ED3: ; CODE XREF: _strcat+34j + xchg ax, dx + mov dx, es + pop ds + pop di + pop si + pop bp + retf +_strcat endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl strcmp(const char *s1, const char *s2) +_strcmp proc far ; CODE XREF: typeinfo::before(typeinfo &)+61p + +s1 = dword ptr 6 +s2 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov dx, ds + cld + xor ax, ax + mov bx, ax + les di, [bp+s2] + mov si, di + xor al, al + mov cx, 0FFFFh + repne scasb + not cx + mov di, si + lds si, [bp+s1] + repe cmpsb + mov al, [si-1] + mov bl, es:[di-1] + sub ax, bx + mov ds, dx + pop di + pop si + pop bp + retf +_strcmp endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; char *__cdecl strcpy(char *dest, const char *src) +_strcpy proc far ; CODE XREF: sub_56F1+10Dp + ; sub_56F1+2BBp ... + +dest = dword ptr 6 +src = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + cld + les di, [bp+src] + mov si, di + xor al, al + mov cx, 0FFFFh + repne scasb + not cx + push ds + mov ax, es + mov ds, ax + les di, [bp+dest] + rep movsb + pop ds + mov dx, word ptr [bp+dest+2] + mov ax, word ptr [bp+dest] + pop di + pop si + pop bp + retf +_strcpy endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl stricmp(const char *s1, const char *s2) +_stricmp proc far ; CODE XREF: sub_A2EB+9Cp + +s1 = dword ptr 6 +s2 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov dx, ds + cld + lds si, [bp+s1] + les di, [bp+s2] + xor ax, ax + mov bx, ax + mov cx, 617Ah + +loc_5F49: ; CODE XREF: _stricmp+1Ej _stricmp+37j + lodsb + mov bl, es:[di] + or al, al + jz short loc_5F6D + scasb + jz short loc_5F49 + cmp al, ch + jb short loc_5F5E + cmp al, cl + ja short loc_5F5E + sub al, 20h ; ' ' + +loc_5F5E: ; CODE XREF: _stricmp+22j _stricmp+26j + cmp bl, ch + jb short loc_5F69 + cmp bl, cl + ja short loc_5F69 + sub bl, 20h ; ' ' + +loc_5F69: ; CODE XREF: _stricmp+2Cj _stricmp+30j + cmp al, bl + jz short loc_5F49 + +loc_5F6D: ; CODE XREF: _stricmp+1Bj + sub ax, bx + mov ds, dx + pop di + pop si + pop bp + retf +_stricmp endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; size_t __cdecl strlen(const char *s) +_strlen proc far ; CODE XREF: _stpcpy+10p __DOSENV+34p ... + +s = dword ptr 6 + + push bp + mov bp, sp + push si + push di + les di, [bp+s] + xor ax, ax + cmp ax, word ptr [bp+s+2] + jnz short loc_5F88 + cmp ax, di + jz short loc_5F92 + +loc_5F88: ; CODE XREF: _strlen+Dj + cld + mov cx, 0FFFFh + repne scasb + xchg ax, cx + not ax + dec ax + +loc_5F92: ; CODE XREF: _strlen+11j + pop di + pop si + pop bp + retf +_strlen endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_5F96(char *s, char) +sub_5F96 proc far ; CODE XREF: sub_A2EB+5Ap + +var_4 = dword ptr -4 +s = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push word ptr [bp+s+2] + push word ptr [bp+s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + inc ax + mov cx, ax + mov dx, word ptr [bp+s+2] + mov ax, word ptr [bp+s] + add ax, cx + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + jmp short loc_5FD5 +; --------------------------------------------------------------------------- + +loc_5FBE: ; CODE XREF: sub_5F96+41j + dec word ptr [bp+var_4] + les bx, [bp+var_4] + mov al, es:[bx] + cmp al, [bp+arg_4] + jnz short loc_5FD4 + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + jmp short loc_5FDD +; --------------------------------------------------------------------------- + +loc_5FD4: ; CODE XREF: sub_5F96+34j + dec cx + +loc_5FD5: ; CODE XREF: sub_5F96+26j + or cx, cx + jnz short loc_5FBE + xor dx, dx + xor ax, ax + +loc_5FDD: ; CODE XREF: sub_5F96+3Cj + pop di + pop si + mov sp, bp + pop bp + retf +sub_5F96 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far __write(int handle, void *buf, unsigned int len) +___write proc far ; CODE XREF: _fflush+AAp + +var_90 = byte ptr -90h +var_E = dword ptr -0Eh +var_9 = byte ptr -9 +var_8 = word ptr -8 +var_6 = dword ptr -6 +var_2 = word ptr -2 +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 90h + push si + push di + mov ax, [bp+handle] + cmp ax, word_11A98 + jb short loc_5FFF + mov ax, 6 + push ax + call __IOERROR + jmp loc_6143 +; --------------------------------------------------------------------------- + +loc_5FFF: ; CODE XREF: ___write+10j + mov ax, [bp+len] + inc ax + cmp ax, 2 + jnb short loc_600D + xor ax, ax + jmp loc_6143 +; --------------------------------------------------------------------------- + +loc_600D: ; CODE XREF: ___write+23j + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+199Bh], 8 + jz short loc_602C + mov ax, 2 + push ax ; fromwhere + xor ax, ax + push ax + push ax ; offset + push [bp+handle] ; handle + nop + push cs + call near ptr _lseek + add sp, 8 + +loc_602C: ; CODE XREF: ___write+34j + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+199Bh], 40h + jnz short loc_604F + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + push [bp+handle] ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + jmp loc_6143 +; --------------------------------------------------------------------------- + +loc_604F: ; CODE XREF: ___write+53j + mov bx, [bp+handle] + add bx, bx + and word ptr [bx+199Ah], 0FDFFh + mov dx, word ptr [bp+buf+2] + mov ax, word ptr [bp+buf] + mov word ptr [bp+var_E+2], dx + mov word ptr [bp+var_E], ax + mov ax, [bp+len] + mov [bp+var_8], ax + jmp short loc_60E9 +; --------------------------------------------------------------------------- + +loc_606E: ; CODE XREF: ___write+116j + dec [bp+var_8] + les bx, [bp+var_E] + inc word ptr [bp+var_E] + mov al, es:[bx] + mov [bp+var_9], al + cmp al, 0Ah + jnz short loc_608B + les bx, [bp+var_6] + mov byte ptr es:[bx], 0Dh + inc word ptr [bp+var_6] + +loc_608B: ; CODE XREF: ___write+9Cj + les bx, [bp+var_6] + mov al, [bp+var_9] + mov es:[bx], al + inc word ptr [bp+var_6] + lea ax, [bp+var_90] + mov dx, word ptr [bp+var_6] + xor bx, bx + sub dx, ax + sbb bx, 0 + or bx, bx + jl short loc_60F3 + jnz short loc_60B1 + cmp dx, 80h ; '' + jb short loc_60F3 + +loc_60B1: ; CODE XREF: ___write+C6j + lea ax, [bp+var_90] + mov dx, word ptr [bp+var_6] + xor bx, bx + sub dx, ax + sbb bx, 0 + mov [bp+var_2], dx + push dx ; len + push ss + push ax ; buf + push [bp+handle] ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + mov dx, ax + cmp ax, [bp+var_2] + jz short loc_60E9 + cmp dx, 0FFFFh + jnz short loc_60E1 + mov ax, 0FFFFh + jmp short loc_613E +; --------------------------------------------------------------------------- + +loc_60E1: ; CODE XREF: ___write+F7j + mov ax, [bp+len] + sub ax, [bp+var_8] + jmp short loc_6139 +; --------------------------------------------------------------------------- + +loc_60E9: ; CODE XREF: ___write+89j ___write+F2j + lea ax, [bp+var_90] + mov word ptr [bp+var_6+2], ss + mov word ptr [bp+var_6], ax + +loc_60F3: ; CODE XREF: ___write+C4j ___write+CCj + cmp [bp+var_8], 0 + jz short loc_60FC + jmp loc_606E +; --------------------------------------------------------------------------- + +loc_60FC: ; CODE XREF: ___write+114j + lea ax, [bp+var_90] + mov dx, word ptr [bp+var_6] + xor bx, bx + sub dx, ax + sbb bx, 0 + mov [bp+var_2], dx + mov ax, dx + or ax, ax + jbe short loc_6140 + push dx ; len + push ss + lea ax, [bp+var_90] + push ax ; buf + push [bp+handle] ; handle + nop + push cs + call near ptr __rtl_write + add sp, 8 + mov dx, ax + cmp ax, [bp+var_2] + jz short loc_6140 + cmp dx, 0FFFFh + jnz short loc_6136 + mov ax, 0FFFFh + jmp short loc_613E +; --------------------------------------------------------------------------- + +loc_6136: ; CODE XREF: ___write+14Cj + mov ax, [bp+len] + +loc_6139: ; CODE XREF: ___write+104j + add ax, dx + sub ax, [bp+var_2] + +loc_613E: ; CODE XREF: ___write+FCj + ; ___write+151j + jmp short loc_6143 +; --------------------------------------------------------------------------- + +loc_6140: ; CODE XREF: ___write+12Ej + ; ___write+147j + mov ax, [bp+len] + +loc_6143: ; CODE XREF: ___write+19j ___write+27j ... + pop di + pop si + mov sp, bp + pop bp + retf +___write endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _rtl_write(int handle, const void *buf, unsigned int len) +__rtl_write proc far ; CODE XREF: ___ErrorMessage+20p + ; ___write+63p ... + +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + mov bx, [bp+handle] + add bx, bx + test byte ptr [bx+199Ah], 1 + jz short loc_6160 + mov ax, 5 + push ax + jmp short loc_6181 +; --------------------------------------------------------------------------- + +loc_6160: ; CODE XREF: __rtl_write+Fj + push ds + mov ah, 40h ; '@' + mov bx, [bp+handle] + mov cx, [bp+len] + lds dx, [bp+buf] + int 21h ; DOS - 2+ - WRITE TO FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer + pop ds + jb short loc_6180 + push ax + mov bx, [bp+handle] + add bx, bx + or word ptr [bx+199Ah], 1000h + pop ax + jmp short loc_6184 +; --------------------------------------------------------------------------- + +loc_6180: ; CODE XREF: __rtl_write+26j + push ax + +loc_6181: ; CODE XREF: __rtl_write+15j + call __IOERROR + +loc_6184: ; CODE XREF: __rtl_write+35j + pop di + pop si + pop bp + retf +__rtl_write endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl _write(int handle, const void *buf, unsigned int len) +__write proc far + +handle = word ptr 6 +buf = dword ptr 8 +len = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push [bp+len] ; len + push word ptr [bp+buf+2] + push word ptr [bp+buf] ; buf + push [bp+handle] ; handle + push cs + call near ptr __rtl_write + add sp, 8 + pop di + pop si + pop bp + retf +__write endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__xfflush proc far + +var_6 = word ptr -6 +stream = dword ptr -4 + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov [bp+var_6], 4 + mov word ptr [bp+stream+2], ds + mov word ptr [bp+stream], 1808h + jmp short loc_61D7 +; --------------------------------------------------------------------------- + +loc_61BB: ; CODE XREF: __xfflush+37j + les bx, [bp+stream] + test byte ptr es:[bx+2], 3 + jz short loc_61D0 + push word ptr [bp+stream+2] + push bx ; stream + nop + push cs + call near ptr _fflush + pop cx + pop cx + +loc_61D0: ; CODE XREF: __xfflush+1Fj + dec [bp+var_6] + add word ptr [bp+stream], 14h + +loc_61D7: ; CODE XREF: __xfflush+15j + cmp [bp+var_6], 0 + jnz short loc_61BB + pop di + pop si + mov sp, bp + pop bp + retf +__xfflush endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xalloc::xalloc(string const &, unsigned int) +@xalloc@$bctr$qmx6stringui proc far ; CODE XREF: string::contains(char *)+39p + +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_6204 + mov ax, 6 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_6222 + +loc_6204: ; CODE XREF: xalloc::xalloc(string &,uint)+Bj + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + nop + push cs + call near ptr @xmsg@$bctr$qmx6string ; xmsg::xmsg(string &) + add sp, 8 + les bx, [bp+arg_0] + mov ax, [bp+arg_8] + mov es:[bx+4], ax + +loc_6222: ; CODE XREF: xalloc::xalloc(string &,uint)+1Fj + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + pop bp + retf +@xalloc@$bctr$qmx6stringui endp + +; --------------------------------------------------------------------------- + dd byte_631D + db 4 dup(0), 1Dh, 63h + dw seg seg000 + db 4, 0, 0FAh, 0FFh, 6 dup(0), 3Eh, 62h + dw seg seg000 + db 0DCh, 0FFh, 2 dup(0), 5, 3 dup(0), 46h, 62h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xalloc::raise(void) +@xalloc@raise$qv proc far ; CODE XREF: sub_FA7A+77P sub_FC96+4DP ... + +var_28 = dword ptr -28h +src = byte ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 28h + push si + push di + mov ax, seg seg000 + mov bx, 6254h + nop + push cs + call near ptr ___InitExceptBlocks + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, 5 + push ax ; int + mov ax, seg seg000 + push ax ; int + mov ax, 62DAh + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_28+2], dx + mov word ptr [bp+var_28], ax + push dx + push ax + push ss + lea ax, [bp+src] + push ax + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + les bx, [bp+var_28] + mov ax, es:[bx+4] + mov [bp+var_2], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 631Dh + push ax ; int + nop + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + pop di + pop si + mov sp, bp + pop bp + retf +@xalloc@raise$qv endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + les bx, [bp+0Ah] + mov ax, es:[bx+4] + les bx, [bp+6] + mov es:[bx+4], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, [bp+8] + mov ax, [bp+6] + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- +byte_631D db 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 2Eh, 0, 3Ah + ; DATA XREF: seg000:623Eo + db 0Dh dup(0), 2, 0, 2, 0, 5Fh, 63h + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 0ACh, 63h + dw seg seg000 + db 2 dup(0), 3, 0Dh dup(0) +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_63A6 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_63A4 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_63A8 +; --------------------------------------------------------------------------- + +loc_63A4: ; CODE XREF: seg000:6393j + jmp short loc_63A8 +; --------------------------------------------------------------------------- + +loc_63A6: ; CODE XREF: seg000:636Aj + xor ax, ax + +loc_63A8: ; CODE XREF: seg000:63A2j + ; seg000:loc_63A4j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + db 0Dh dup(0), 1, 0, 1, 0, 7Eh, 65h + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0), 52h, 67h + dw seg seg000 + db 87h, 20h, 0FCh, 0FFh, 0Ah dup(0), 0DEh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 2 dup(0FFh), 6, 0, 5, 3 dup(0), 0E4h, 63h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xmsg::xmsg(string const &) +@xmsg@$bctr$qmx6string proc far ; CODE XREF: xalloc::xalloc(string &,uint)+2Fp + ; seg003:03FDP ... + +var_22 = word ptr -22h +var_16 = word ptr -16h +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 63F2h + nop + push cs + call near ptr ___InitExceptBlocks + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_6437 + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_6489 + +loc_6437: ; CODE XREF: xmsg::xmsg(string &)+19j + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jz short loc_6479 + mov [bp+var_16], 0Eh + push [bp+arg_6] + push [bp+arg_4] + push dx + push [bp+var_4] + call @string@$bctr$qmx6string ; string::string(string &) + add sp, 8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov [bp+var_16], 6 + +loc_6479: ; CODE XREF: xmsg::xmsg(string &)+41j + mov dx, [bp+var_2] + mov ax, [bp+var_4] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + +loc_6489: ; CODE XREF: xmsg::xmsg(string &)+2Dj + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + push [bp+var_22] + nop + push cs + call near ptr ___ExitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@xmsg@$bctr$qmx6string endp + +; --------------------------------------------------------------------------- + dd byte_6752 + db 87h, 20h, 0FCh, 0FFh, 0Ah dup(0), 0DEh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 2 dup(0FFh), 6, 0, 5, 3 dup(0), 0AFh, 64h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xmsg::xmsg(xmsg const &) +@xmsg@$bctr$qmx4xmsg proc far ; CODE XREF: seg000:4256p seg000:431Ep ... + +var_22 = word ptr -22h +var_16 = word ptr -16h +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 64BDh + nop + push cs + call near ptr ___InitExceptBlocks + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_6502 + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_6558 + +loc_6502: ; CODE XREF: xmsg::xmsg(xmsg &)+19j + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jz short loc_6548 + mov [bp+var_16], 0Eh + les bx, [bp+arg_4] + push word ptr es:[bx+2] + push word ptr es:[bx] + push dx + push [bp+var_4] + call @string@$bctr$qmx6string ; string::string(string &) + add sp, 8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov [bp+var_16], 6 + +loc_6548: ; CODE XREF: xmsg::xmsg(xmsg &)+41j + mov dx, [bp+var_2] + mov ax, [bp+var_4] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + +loc_6558: ; CODE XREF: xmsg::xmsg(xmsg &)+2Dj + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + push [bp+var_22] + nop + push cs + call near ptr ___ExitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@xmsg@$bctr$qmx4xmsg endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far xmsg___xmsg(void (*driver)(void), char) +@xmsg@$bdtr$qv proc far ; CODE XREF: seg000:43EDp seg000:449Cp ... + +driver = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + push si + push di + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov ax, word ptr [bp+driver] + or ax, word ptr [bp+driver+2] + jz short loc_65D8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov ax, 3 + push ax ; char + les bx, [bp+driver] + push word ptr es:[bx+2] + push word ptr es:[bx] ; driver + call sub_F7BD + add sp, 6 + test [bp+arg_4], 1 + jz short loc_65D8 + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + +loc_65D8: ; CODE XREF: xmsg::~xmsg(void)+1Dj + ; xmsg::~xmsg(void)+4Bj + pop di + pop si + pop bp + retf +@xmsg@$bdtr$qv endp + +; --------------------------------------------------------------------------- + dd byte_671A + db 4 dup(0), 0DCh, 65h + dw seg seg000 + db 0E2h, 0FFh + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xmsg::raise(void) +@xmsg@raise$qv proc far + +src = byte ptr -22h +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 65E4h + nop + push cs + call near ptr ___InitExceptBlocks + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, 5 + push ax ; int + mov ax, seg seg000 + push ax ; int + mov ax, 64D3h + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + push [bp+arg_2] + push [bp+arg_0] + push ss + lea ax, [bp+src] + push ax + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 671Ah + push ax ; int + nop + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + pop di + pop si + mov sp, bp + pop bp + retf +@xmsg@raise$qv endp + +; --------------------------------------------------------------------------- + dd byte_6752 + db 87h, 20h, 0FCh, 0FFh, 0Ah dup(0), 0DEh, 0FFh, 2 dup(0) + db 5, 3 dup(0), 2 dup(0FFh), 6, 0, 5, 3 dup(0), 3Dh, 66h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; xmsg::operator=(xmsg const &) +@xmsg@$basg$qmx4xmsg proc far + +var_22 = word ptr -22h +var_16 = word ptr -16h +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 664Bh + nop + push cs + call near ptr ___InitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + cmp dx, word ptr [bp+arg_4+2] + jnz short loc_6684 + cmp ax, word ptr [bp+arg_4] + jz short loc_6702 + +loc_6684: ; CODE XREF: xmsg::operator=(xmsg &)+1Cj + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov ax, 3 + push ax ; char + les bx, [bp+arg_0] + push word ptr es:[bx+2] + push word ptr es:[bx] ; driver + call sub_F7BD + add sp, 6 + mov ax, 4 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jz short loc_66F2 + mov [bp+var_16], 0Eh + les bx, [bp+arg_4] + push word ptr es:[bx+2] + push word ptr es:[bx] + push dx + push [bp+var_4] + call @string@$bctr$qmx6string ; string::string(string &) + add sp, 8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov [bp+var_16], 6 + +loc_66F2: ; CODE XREF: xmsg::operator=(xmsg &)+5Dj + mov dx, [bp+var_2] + mov ax, [bp+var_4] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + +loc_6702: ; CODE XREF: xmsg::operator=(xmsg &)+21j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + push dx + push ax + push [bp+var_22] + nop + push cs + call near ptr ___ExitExceptBlocks + pop ax + pop dx + pop di + pop si + mov sp, bp + pop bp + retf +@xmsg@$basg$qmx4xmsg endp + +; --------------------------------------------------------------------------- +byte_671A db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + ; DATA XREF: seg000:65DCo + db 0Dh dup(0), 1, 0, 1, 0, 7Eh, 65h + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0) +byte_6752 db 4, 0, 10h, 20h, 0Ah, 0, 65h, 67h ; DATA XREF: seg000:64AFo + ; seg000:663Do + dw seg seg000 +aString db 'string *',0 + db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Eh, 0, 32h + db 0Dh dup(0), 1, 0, 1, 0, 0Dh, 3 + dw seg seg003 + db 5, 0, 36h, 0, 73h, 74h, 72h, 69h, 6Eh, 67h, 0Eh dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +___JumpToCatch__ proc far ; CODE XREF: __ExceptionHandler+261p + push si + push di + mov sp, bx + mov bp, cx + push dx + push ax + retf +___JumpToCatch__ endp + +; --------------------------------------------------------------------------- + pop di + pop si + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_67AB proc far ; CODE XREF: typeinfo::name(void)+11p + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_67BF + mov dx, ds + mov ax, 1CA6h + jmp short loc_67CC +; --------------------------------------------------------------------------- + +loc_67BF: ; CODE XREF: sub_67AB+Bj + les bx, [bp+arg_0] + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + add ax, es:[bx+4] + +loc_67CC: ; CODE XREF: sub_67AB+12j + pop di + pop si + pop bp + retf +sub_67AB endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_67D0 proc far ; CODE XREF: sub_686D+69p + ; sub_686D+106p ... + +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 0Ah + push si + push di + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + cmp dx, word ptr [bp+arg_4+2] + jnz short loc_67E8 + cmp ax, word ptr [bp+arg_4] + jz short loc_6864 + +loc_67E8: ; CODE XREF: sub_67D0+11j + les bx, [bp+arg_0] + mov ax, es:[bx+2] + les bx, [bp+arg_4] + cmp ax, es:[bx+2] + jnz short loc_685C + les bx, [bp+arg_0] + mov ax, es:[bx] + les bx, [bp+arg_4] + cmp ax, es:[bx] + jnz short loc_685C + les bx, [bp+arg_0] + mov ax, es:[bx+2] + les bx, [bp+arg_4] + or ax, es:[bx+2] + test al, 80h + jnz short loc_685C + les bx, [bp+arg_0] + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + add ax, es:[bx+4] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+4] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + +loc_683E: ; CODE XREF: sub_67D0+92j + les bx, [bp+var_4] + mov al, es:[bx] + cbw + mov dx, ax + inc word ptr [bp+var_4] + les bx, [bp+var_8] + mov al, es:[bx] + cbw + mov [bp+var_A], ax + inc word ptr [bp+var_8] + cmp dx, [bp+var_A] + jz short loc_6860 + +loc_685C: ; CODE XREF: sub_67D0+26j sub_67D0+34j ... + xor ax, ax + jmp short loc_6867 +; --------------------------------------------------------------------------- + +loc_6860: ; CODE XREF: sub_67D0+8Aj + or dx, dx + jnz short loc_683E + +loc_6864: ; CODE XREF: sub_67D0+16j + mov ax, 1 + +loc_6867: ; CODE XREF: sub_67D0+8Ej + pop di + pop si + mov sp, bp + pop bp + retf +sub_67D0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_686D proc near ; CODE XREF: sub_686D+9Bp + ; sub_686D+135p ... + +var_A = dword ptr -0Ah +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h + + push bp + mov bp, sp + sub sp, 0Ah + push si + push di + les bx, [bp+arg_0] + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + add ax, es:[bx+0Ch] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_6888: ; CODE XREF: sub_686D+ACj + les bx, [bp+var_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_A+2], dx + mov word ptr [bp+var_A], ax + mov ax, word ptr [bp+var_A] + or ax, word ptr [bp+var_A+2] + jz short loc_691C + les bx, [bp+var_4] + test byte ptr es:[bx+6], 8 + jnz short loc_6915 + cmp [bp+arg_C], 0 + jz short loc_68C4 + les bx, [bp+var_4] + mov ax, es:[bx+6] + and ax, 3 + cmp ax, 3 + jnz short loc_68C4 + mov ax, 1 + jmp short loc_68C6 +; --------------------------------------------------------------------------- + +loc_68C4: ; CODE XREF: sub_686D+41j sub_686D+50j + xor ax, ax + +loc_68C6: ; CODE XREF: sub_686D+55j + mov [bp+var_6], ax + push word ptr [bp+var_A+2] + push word ptr [bp+var_A] + push [bp+arg_6] + push [bp+arg_4] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jz short loc_68E9 + cmp [bp+var_6], 0 + jz short loc_68E9 + jmp loc_69AC +; --------------------------------------------------------------------------- + +loc_68E9: ; CODE XREF: sub_686D+71j sub_686D+77j + les bx, [bp+var_A] + test byte ptr es:[bx+8], 4 + jz short loc_6915 + push [bp+var_6] + push [bp+arg_A] + push [bp+arg_8] + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+var_A+2] + push word ptr [bp+var_A] + call sub_686D + add sp, 0Eh + or ax, ax + jz short loc_6915 + jmp loc_69AC +; --------------------------------------------------------------------------- + +loc_6915: ; CODE XREF: sub_686D+3Bj sub_686D+84j ... + add word ptr [bp+var_4], 8 + jmp loc_6888 +; --------------------------------------------------------------------------- + +loc_691C: ; CODE XREF: sub_686D+31j + les bx, [bp+arg_0] + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + add ax, es:[bx+0Ah] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_692F: ; CODE XREF: sub_686D+148j + les bx, [bp+var_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_A+2], dx + mov word ptr [bp+var_A], ax + mov ax, word ptr [bp+var_A] + or ax, word ptr [bp+var_A+2] + jz short loc_69B8 + cmp [bp+arg_C], 0 + jz short loc_6961 + les bx, [bp+var_4] + mov ax, es:[bx+6] + and ax, 3 + cmp ax, 3 + jnz short loc_6961 + mov ax, 1 + jmp short loc_6963 +; --------------------------------------------------------------------------- + +loc_6961: ; CODE XREF: sub_686D+DEj sub_686D+EDj + xor ax, ax + +loc_6963: ; CODE XREF: sub_686D+F2j + mov [bp+var_6], ax + push word ptr [bp+var_A+2] + push word ptr [bp+var_A] + push [bp+arg_6] + push [bp+arg_4] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jz short loc_6983 + cmp [bp+var_6], 0 + jnz short loc_69AC + +loc_6983: ; CODE XREF: sub_686D+10Ej + les bx, [bp+var_A] + test byte ptr es:[bx+8], 4 + jz short loc_69B1 + push [bp+var_6] + push [bp+arg_A] + push [bp+arg_8] + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+var_A+2] + push word ptr [bp+var_A] + call sub_686D + add sp, 0Eh + or ax, ax + jz short loc_69B1 + +loc_69AC: ; CODE XREF: sub_686D+79j sub_686D+A5j ... + mov ax, 1 + jmp short loc_69BA +; --------------------------------------------------------------------------- + +loc_69B1: ; CODE XREF: sub_686D+11Ej + ; sub_686D+13Dj + add word ptr [bp+var_4], 8 + jmp loc_692F +; --------------------------------------------------------------------------- + +loc_69B8: ; CODE XREF: sub_686D+D8j + xor ax, ax + +loc_69BA: ; CODE XREF: sub_686D+142j + pop di + pop si + mov sp, bp + pop bp + retn +sub_686D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_69C0 proc near ; CODE XREF: sub_6BC9+1Dp sub_6BC9+5Fp ... + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov cx, [bp+arg_8] + +loc_69CB: ; CODE XREF: sub_69C0+119j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + cmp dx, word ptr [bp+arg_4+2] + jnz short loc_69DE + cmp ax, word ptr [bp+arg_4] + jnz short loc_69DE + jmp loc_6AF3 +; --------------------------------------------------------------------------- + +loc_69DE: ; CODE XREF: sub_69C0+14j sub_69C0+19j + les bx, [bp+arg_0] + mov ax, es:[bx+2] + mov [bp+var_2], ax + les bx, [bp+arg_4] + mov ax, es:[bx+2] + mov [bp+var_4], ax + mov ax, [bp+var_2] + and ax, [bp+var_4] + test al, 10h + jz short loc_6A6E + and [bp+var_2], 3300h + and [bp+var_4], 3300h + mov ax, [bp+var_2] + cmp ax, [bp+var_4] + jnz short loc_6A11 + jmp loc_6AB4 +; --------------------------------------------------------------------------- + +loc_6A11: ; CODE XREF: sub_69C0+4Cj + or cx, cx + jz short loc_6A18 + jmp loc_6B2C +; --------------------------------------------------------------------------- + +loc_6A18: ; CODE XREF: sub_69C0+53j + mov ax, [bp+var_2] + and ax, 300h + mov dx, [bp+var_4] + and dx, 300h + cmp ax, dx + jz short loc_6A4E + mov ax, [bp+var_4] + and ax, 300h + not ax + and ax, [bp+var_2] + test ah, 3 + jz short loc_6A3C + jmp loc_6B2C +; --------------------------------------------------------------------------- + +loc_6A3C: ; CODE XREF: sub_69C0+77j + or [bp+var_2], 300h + or [bp+var_4], 300h + mov ax, [bp+var_2] + cmp ax, [bp+var_4] + jz short loc_6AB4 + +loc_6A4E: ; CODE XREF: sub_69C0+67j + mov ax, [bp+var_2] + or ax, 3000h + mov dx, [bp+var_4] + or dx, 3000h + cmp ax, dx + jz short loc_6A62 + jmp loc_6B2C +; --------------------------------------------------------------------------- + +loc_6A62: ; CODE XREF: sub_69C0+9Dj + test byte ptr [bp+var_2+1], 10h + jnz short loc_6A6B + jmp loc_6B2C +; --------------------------------------------------------------------------- + +loc_6A6B: ; CODE XREF: sub_69C0+A6j + jmp loc_6AF3 +; --------------------------------------------------------------------------- + +loc_6A6E: ; CODE XREF: sub_69C0+3Aj + mov ax, [bp+var_2] + and ax, [bp+var_4] + test ah, 4 + jz short loc_6ADC + les bx, [bp+arg_0] + mov dx, es:[bx+0Ch] + mov ax, es:[bx+0Ah] + les bx, [bp+arg_4] + cmp dx, es:[bx+0Ch] + jnz short loc_6A93 + cmp ax, es:[bx+0Ah] + jz short loc_6AB4 + +loc_6A93: ; CODE XREF: sub_69C0+CBj + or cx, cx + jz short loc_6A9A + jmp loc_6B2C +; --------------------------------------------------------------------------- + +loc_6A9A: ; CODE XREF: sub_69C0+D5j + les bx, [bp+arg_0] + mov dx, es:[bx+0Ch] + mov ax, es:[bx+0Ah] + les bx, [bp+arg_4] + or ax, es:[bx+0Ah] + or dx, es:[bx+0Ch] + or ax, dx + jnz short loc_6B2C + +loc_6AB4: ; CODE XREF: sub_69C0+4Ej sub_69C0+8Cj ... + mov cx, 1 + les bx, [bp+arg_0] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + les bx, [bp+arg_4] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+arg_4+2], dx + mov word ptr [bp+arg_4], ax + jmp loc_69CB +; --------------------------------------------------------------------------- + +loc_6ADC: ; CODE XREF: sub_69C0+B7j + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jz short loc_6AF8 + +loc_6AF3: ; CODE XREF: sub_69C0+1Bj + ; sub_69C0:loc_6A6Bj + mov ax, 1 + jmp short loc_6B2E +; --------------------------------------------------------------------------- + +loc_6AF8: ; CODE XREF: sub_69C0+131j + test byte ptr [bp+var_2], 2 + jz short loc_6B2C + test byte ptr [bp+var_4], 1 + jz short loc_6B2C + les bx, [bp+arg_0] + test byte ptr es:[bx+8], 4 + jz short loc_6B2C + mov ax, 1 + push ax + push [bp+arg_C] + push [bp+arg_A] + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call sub_686D + add sp, 0Eh + jmp short loc_6B2E +; --------------------------------------------------------------------------- + +loc_6B2C: ; CODE XREF: sub_69C0+55j sub_69C0+79j ... + xor ax, ax + +loc_6B2E: ; CODE XREF: sub_69C0+136j + ; sub_69C0+16Aj + pop di + pop si + mov sp, bp + pop bp + retn +sub_69C0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_6B34 proc far ; CODE XREF: sub_72F3+10Dp + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push [bp+arg_0] + nop + push cs + call sub_4C1A + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + mov ax, [bp+var_4] + or ax, [bp+var_2] + jnz short loc_6B84 + cmp [bp+arg_0], 80h ; '' + ja short loc_6B66 + les bx, ss:16h + test byte ptr es:[bx+4], 1 + jz short loc_6B6B + +loc_6B66: ; CODE XREF: sub_6B34+24j + nop + push cs + call near ptr _abort +; --------------------------------------------------------------------------- + +loc_6B6B: ; CODE XREF: sub_6B34+30j + les bx, ss:16h + or word ptr es:[bx+4], 1 + les bx, ss:16h + mov dx, es:[bx+22h] + mov ax, es:[bx+20h] + jmp short loc_6B8A +; --------------------------------------------------------------------------- + +loc_6B84: ; CODE XREF: sub_6B34+1Dj + mov dx, [bp+var_2] + mov ax, [bp+var_4] + +loc_6B8A: ; CODE XREF: sub_6B34+4Ej + pop di + pop si + mov sp, bp + pop bp + retf +sub_6B34 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + les bx, ss:16h + mov dx, es:[bx+22h] + mov ax, es:[bx+20h] + cmp dx, [bp+8] + jnz short loc_6BB8 + cmp ax, [bp+6] + jnz short loc_6BB8 + les bx, ss:16h + and word ptr es:[bx+4], 0FFFEh + jmp short loc_6BC5 +; --------------------------------------------------------------------------- + +loc_6BB8: ; CODE XREF: seg000:6BA5j seg000:6BAAj + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr sub_4AE7 + pop cx + pop cx + +loc_6BC5: ; CODE XREF: seg000:6BB6j + pop di + pop si + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_6BC9 proc near ; CODE XREF: sub_845A+58p + ; __ExceptionHandler+F7p + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = dword ptr 0Ch +arg_C = byte ptr 10h + + push bp + mov bp, sp + sub sp, 4 + push si + push di + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_8+2] + push word ptr [bp+arg_8] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call sub_69C0 + add sp, 0Eh + or ax, ax + jz short loc_6BF3 + jmp loc_6C8F +; --------------------------------------------------------------------------- + +loc_6BF3: ; CODE XREF: sub_6BC9+25j + les bx, [bp+arg_0] + mov ax, es:[bx+2] + mov [bp+var_2], ax + les bx, [bp+arg_8] + mov ax, es:[bx+2] + mov [bp+var_4], ax + test byte ptr [bp+var_4], 20h + jz short loc_6C83 + push [bp+arg_6] + push [bp+arg_4] + mov ax, 1 + push ax + les bx, [bp+arg_8] + push word ptr es:[bx+8] + push word ptr es:[bx+6] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call sub_69C0 + add sp, 0Eh + or ax, ax + jnz short loc_6C8F + les bx, [bp+arg_8] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+arg_8+2], dx + mov word ptr [bp+arg_8], ax + les bx, [bp+arg_8] + mov ax, es:[bx+2] + mov [bp+var_4], ax + test byte ptr [bp+var_4], 10h + jz short loc_6CC6 + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_8+2] + push word ptr [bp+arg_8] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call sub_69C0 + add sp, 0Eh + or ax, ax + jnz short loc_6C8F + mov ax, [bp+var_2] + and ax, 3000h + mov dx, [bp+var_4] + and dx, 3000h + cmp ax, dx + jnz short loc_6CC6 + +loc_6C83: ; CODE XREF: sub_6BC9+42j + test byte ptr [bp+var_4], 10h + jz short loc_6CC6 + test [bp+arg_C], 1 + jz short loc_6C94 + +loc_6C8F: ; CODE XREF: sub_6BC9+27j sub_6BC9+67j ... + mov ax, 1 + jmp short loc_6CC8 +; --------------------------------------------------------------------------- + +loc_6C94: ; CODE XREF: sub_6BC9+C4j + test byte ptr [bp+var_2], 10h + jz short loc_6CC6 + test byte ptr [bp+var_2+1], 20h + jz short loc_6CA6 + test byte ptr [bp+var_4+1], 20h + jz short loc_6CC6 + +loc_6CA6: ; CODE XREF: sub_6BC9+D5j + test byte ptr [bp+var_4], 40h + jz short loc_6CC6 + mov ax, [bp+var_2] + and ax, 300h + mov dx, [bp+var_4] + and dx, 300h + cmp ax, dx + jnz short loc_6CC2 + mov ax, 1 + jmp short loc_6CC4 +; --------------------------------------------------------------------------- + +loc_6CC2: ; CODE XREF: sub_6BC9+F2j + xor ax, ax + +loc_6CC4: ; CODE XREF: sub_6BC9+F7j + jmp short loc_6CC8 +; --------------------------------------------------------------------------- + +loc_6CC6: ; CODE XREF: sub_6BC9+88j sub_6BC9+B8j ... + xor ax, ax + +loc_6CC8: ; CODE XREF: sub_6BC9+C9j + ; sub_6BC9:loc_6CC4j + pop di + pop si + mov sp, bp + pop bp + retn +sub_6BC9 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_6CCE proc near ; CODE XREF: sub_72F3+263p + ; sub_7F9F+1FDp + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = dword ptr 0Ch +arg_C = word ptr 10h + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les bx, ss:16h + mov ax, es:[bx+6] + mov [bp+var_2], ax + push ds + mov ds, [bp+var_2] + mov ax, [bp+arg_C] + and ax, 1 + mov [bp+var_4], ax + test byte ptr [bp+arg_C], 4 + jz short loc_6CF9 + or [bp+var_4], 2 + +loc_6CF9: ; CODE XREF: sub_6CCE+25j + test byte ptr [bp+arg_C], 2 + jz short loc_6D0D + or [bp+var_4], 4 + test byte ptr [bp+arg_C+1], 1 + jnz short loc_6D0D + or [bp+var_4], 20h + +loc_6D0D: ; CODE XREF: sub_6CCE+2Fj sub_6CCE+39j + test byte ptr [bp+arg_C], 20h + jz short loc_6D17 + or [bp+var_4], 8 + +loc_6D17: ; CODE XREF: sub_6CCE+43j + test byte ptr [bp+arg_C], 80h + jz short loc_6D21 + or [bp+var_4], 10h + +loc_6D21: ; CODE XREF: sub_6CCE+4Dj + test byte ptr [bp+arg_C+1], 10h + jnz short loc_6D2A + jmp loc_6EAF +; --------------------------------------------------------------------------- + +loc_6D2A: ; CODE XREF: sub_6CCE+57j + mov bx, [bp+var_4] + cmp bx, 17h + jbe short loc_6D35 + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6D35: ; CODE XREF: sub_6CCE+62j + add bx, bx + jmp cs:off_6FEC[bx] + +loc_6D3C: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:off_6FECo + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + add sp, 6 + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6D4E: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_0] + call [bp+arg_8] + add sp, 6 + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6D60: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6D86 +; --------------------------------------------------------------------------- + +loc_6D74: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_8] + +loc_6D86: ; CODE XREF: sub_6CCE+A4j + add sp, 0Ah + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6D8C: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + xor ax, ax + push ax + push [bp+arg_4] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6D9B: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + xor ax, ax + push ax + push [bp+arg_4] + push word ptr [bp+arg_0] + call [bp+arg_8] + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6DAA: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + xor ax, ax + push ax + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6DD0 +; --------------------------------------------------------------------------- + +loc_6DBE: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + xor ax, ax + push ax + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_8] + +loc_6DD0: ; CODE XREF: sub_6CCE+EEj + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6DD3: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + mov dx, word ptr [bp+arg_0] + mov bx, [bp+arg_4] + xor ax, ax + push bx + pop bx + ; Hack + db 0ffh + db 056h + db 00ch + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6DE3: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + mov dx, word ptr [bp+arg_0] + mov bx, [bp+arg_4] + xor ax, ax + +loc_6DEB: ; CODE XREF: sub_6CCE+254j + push bx + pop bx + call [bp+arg_8] + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6DF3: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + xor ax, ax + +loc_6E01: ; CODE XREF: sub_6CCE+263j + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6E17 +; --------------------------------------------------------------------------- + +loc_6E06: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + xor ax, ax + +loc_6E14: ; CODE XREF: sub_6CCE+272j + call [bp+arg_8] + +loc_6E17: ; CODE XREF: sub_6CCE+136j + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6E1A: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + xor ax, ax + push ax + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6E34 +; --------------------------------------------------------------------------- + +loc_6E28: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + xor ax, ax + push ax + +loc_6E31: ; CODE XREF: sub_6CCE+205j + call [bp+arg_8] + +loc_6E34: ; CODE XREF: sub_6CCE+158j + ; sub_6CCE+1FCj + pop cx + pop cx + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6E39: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + ; Hack + db 0ffh + db 056h + db 00ch + add sp, 6 + pop ds + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6E50: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + xor ax, ax + push ax + call [bp+arg_8] + add sp, 6 + pop ds + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6E67: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + mov si, word ptr [bp+arg_0] + xor ax, ax + push ax + push [bp+arg_4] + +loc_6E70: ; CODE XREF: sub_6CCE+234j + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6E81 +; --------------------------------------------------------------------------- + +loc_6E75: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + mov si, word ptr [bp+arg_0] + xor ax, ax + push ax + push [bp+arg_4] + +loc_6E7E: ; CODE XREF: sub_6CCE+23Dj + call [bp+arg_8] + +loc_6E81: ; CODE XREF: sub_6CCE+1A5j + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6E84: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push ds + lds si, [bp+arg_0] + xor ax, ax + push ax + push [bp+arg_6] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + pop ds + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6E98: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + push ds + lds si, [bp+arg_0] + xor ax, ax + push ax + push [bp+arg_6] + push [bp+arg_4] + call [bp+arg_8] + pop ds + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6EAC: ; CODE XREF: sub_6CCE+69j + ; sub_6CCE+1EEj + ; DATA XREF: ... + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6EAF: ; CODE XREF: sub_6CCE+59j + mov bx, [bp+var_4] + cmp bx, 17h + jbe short loc_6EBA + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6EBA: ; CODE XREF: sub_6CCE+1E7j + add bx, bx + jmp cs:off_6FBC[bx] + +loc_6EC1: ; DATA XREF: seg000:off_6FBCo + push [bp+arg_4] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp loc_6E34 +; --------------------------------------------------------------------------- + +loc_6ECD: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FBEo + push [bp+arg_4] + push word ptr [bp+arg_0] + jmp loc_6E31 +; --------------------------------------------------------------------------- + +loc_6ED6: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FC0o + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6EF6 +; --------------------------------------------------------------------------- + +loc_6EE7: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FC2o + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_8] + +loc_6EF6: ; CODE XREF: sub_6CCE+217j + add sp, 8 + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6EFC: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FC4o + push [bp+arg_4] + push word ptr [bp+arg_0] + jmp loc_6E70 +; --------------------------------------------------------------------------- + +loc_6F05: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FC6o + push [bp+arg_4] + push word ptr [bp+arg_0] + jmp loc_6E7E +; --------------------------------------------------------------------------- + +loc_6F0E: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FCCo + mov ax, word ptr [bp+arg_0] + mov bx, [bp+arg_4] + push bx + pop bx + ; Hack + db 0ffh + db 056h + db 00ch + jmp loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6F1C: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FCEo + mov ax, word ptr [bp+arg_0] + mov bx, [bp+arg_4] + jmp loc_6DEB +; --------------------------------------------------------------------------- + +loc_6F25: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FC8o ... + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + jmp loc_6E01 +; --------------------------------------------------------------------------- + +loc_6F34: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FCAo ... + push [bp+arg_6] + push [bp+arg_4] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + jmp loc_6E14 +; --------------------------------------------------------------------------- + +loc_6F43: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FDCo + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + pop cx + jmp short loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6F4F: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FDEo + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + call [bp+arg_8] + pop cx + jmp short loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6F5B: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FE0o + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + pop cx + pop cx + pop ds + jmp short loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6F6D: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FE2o + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + call [bp+arg_8] + pop cx + pop cx + pop ds + jmp short loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6F7F: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FE4o + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + jmp short loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6F8A: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FE6o + mov si, word ptr [bp+arg_0] + push [bp+arg_4] + call [bp+arg_8] + jmp short loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6F95: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FE8o + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + ; Hack + db 0ffh + db 056h + db 00ch + pop ds + jmp short loc_6FB5 +; --------------------------------------------------------------------------- + +loc_6FA5: ; CODE XREF: sub_6CCE+1EEj + ; DATA XREF: seg000:6FEAo + push ds + lds si, [bp+arg_0] + push [bp+arg_6] + push [bp+arg_4] + call [bp+arg_8] + pop ds + jmp short $+2 + +loc_6FB5: ; CODE XREF: sub_6CCE+64j sub_6CCE+7Dj ... + pop ds + pop di + pop si + mov sp, bp + pop bp + retn +sub_6CCE endp ; sp-analysis failed + +; --------------------------------------------------------------------------- +off_6FBC dw offset loc_6EC1 ; DATA XREF: sub_6CCE+1EEr + dw offset loc_6ECD + dw offset loc_6ED6 + dw offset loc_6EE7 + dw offset loc_6EFC + dw offset loc_6F05 + dw offset loc_6F25 + dw offset loc_6F34 + dw offset loc_6F0E + dw offset loc_6F1C + dw offset loc_6F25 + dw offset loc_6F34 + dw offset loc_6FB5 + dw offset loc_6FB5 + dw offset loc_6FB5 + dw offset loc_6FB5 + dw offset loc_6F43 + dw offset loc_6F4F + dw offset loc_6F5B + dw offset loc_6F6D + dw offset loc_6F7F + dw offset loc_6F8A + dw offset loc_6F95 + dw offset loc_6FA5 +off_6FEC dw offset loc_6D3C ; DATA XREF: sub_6CCE+69r + dw offset loc_6D4E + dw offset loc_6D60 + dw offset loc_6D74 + dw offset loc_6D8C + dw offset loc_6D9B + dw offset loc_6DAA + dw offset loc_6DBE + dw offset loc_6DD3 + dw offset loc_6DE3 + dw offset loc_6DF3 + dw offset loc_6E06 + dw offset loc_6EAC + dw offset loc_6EAC + dw offset loc_6EAC + dw offset loc_6EAC + dw offset loc_6E1A + dw offset loc_6E28 + dw offset loc_6E39 + dw offset loc_6E50 + dw offset loc_6E67 + dw offset loc_6E75 + dw offset loc_6E84 + dw offset loc_6E98 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_701C proc near ; CODE XREF: sub_72F3+2BCp + ; sub_7CAB+2Bp ... + +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 6 + push si + push di + cmp [bp+arg_A], 0 + jz short loc_702F + mov ax, 2 + jmp short loc_7031 +; --------------------------------------------------------------------------- + +loc_702F: ; CODE XREF: sub_701C+Cj + xor ax, ax + +loc_7031: ; CODE XREF: sub_701C+11j + mov [bp+var_2], ax + les bx, ss:16h + mov ax, es:[bx+6] + mov [bp+var_4], ax + push ds + mov ds, [bp+var_4] + mov ax, [bp+arg_8] + and ax, 1 + mov [bp+var_6], ax + test byte ptr [bp+arg_8], 4 + jz short loc_7057 + or [bp+var_6], 2 + +loc_7057: ; CODE XREF: sub_701C+35j + test byte ptr [bp+arg_8], 2 + jz short loc_706B + or [bp+var_6], 4 + test byte ptr [bp+arg_8+1], 1 + jnz short loc_706B + or [bp+var_6], 20h + +loc_706B: ; CODE XREF: sub_701C+3Fj sub_701C+49j + test byte ptr [bp+arg_8], 20h + jz short loc_7075 + or [bp+var_6], 8 + +loc_7075: ; CODE XREF: sub_701C+53j + test byte ptr [bp+arg_8], 80h + jz short loc_707F + or [bp+var_6], 10h + +loc_707F: ; CODE XREF: sub_701C+5Dj + mov bx, [bp+var_6] + cmp bx, 17h + jbe short loc_708A + jmp loc_719D +; --------------------------------------------------------------------------- + +loc_708A: ; CODE XREF: sub_701C+69j + add bx, bx + jmp cs:off_71A4[bx] + +loc_7091: ; DATA XREF: seg000:off_71A4o + push [bp+var_2] + push word ptr [bp+arg_0] + call word ptr [bp+arg_4] + pop cx + pop cx + jmp loc_719D +; --------------------------------------------------------------------------- + +loc_709F: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71A6o + push [bp+var_2] + push word ptr [bp+arg_0] + call [bp+arg_4] + pop cx + pop cx + jmp loc_719D +; --------------------------------------------------------------------------- + +loc_70AD: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71A8o + push [bp+var_2] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call word ptr [bp+arg_4] + add sp, 6 + jmp loc_719D +; --------------------------------------------------------------------------- + +loc_70BF: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71AAo + push [bp+var_2] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_4] + add sp, 6 + jmp loc_719D +; --------------------------------------------------------------------------- + +loc_70D1: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71ACo + push [bp+var_2] + push word ptr [bp+arg_0] + call word ptr [bp+arg_4] + jmp short loc_7137 +; --------------------------------------------------------------------------- + +loc_70DC: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71AEo + push [bp+var_2] + push word ptr [bp+arg_0] + jmp short loc_7134 +; --------------------------------------------------------------------------- + +loc_70E4: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71B0o + push [bp+var_2] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call word ptr [bp+arg_4] + jmp short loc_70FE +; --------------------------------------------------------------------------- + +loc_70F2: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71B2o + push [bp+var_2] + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + call [bp+arg_4] + +loc_70FE: ; CODE XREF: sub_701C+D4j + jmp loc_719D +; --------------------------------------------------------------------------- + +loc_7101: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71B4o + mov bx, word ptr [bp+arg_0] + mov ax, [bp+var_2] + push bx + pop bx + call word ptr [bp+arg_4] + jmp loc_719D +; --------------------------------------------------------------------------- + +loc_710F: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71B6o + mov bx, word ptr [bp+arg_0] + mov ax, [bp+var_2] + push bx + pop bx + call [bp+arg_4] + jmp loc_719D +; --------------------------------------------------------------------------- + +loc_711D: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71B8o + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + mov ax, [bp+var_2] + call word ptr [bp+arg_4] + jmp short loc_7137 +; --------------------------------------------------------------------------- + +loc_712B: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71BAo + push word ptr [bp+arg_0+2] + push word ptr [bp+arg_0] + mov ax, [bp+var_2] + +loc_7134: ; CODE XREF: sub_701C+C6j + call [bp+arg_4] + +loc_7137: ; CODE XREF: sub_701C+BEj + ; sub_701C+10Dj + jmp short loc_719D +; --------------------------------------------------------------------------- + +loc_7139: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71C4o + mov si, word ptr [bp+arg_0] + push [bp+var_2] + call word ptr [bp+arg_4] + pop cx + jmp short loc_719D +; --------------------------------------------------------------------------- + +loc_7145: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71C6o + mov si, word ptr [bp+arg_0] + push [bp+var_2] + call [bp+arg_4] + pop cx + jmp short loc_719D +; --------------------------------------------------------------------------- + +loc_7151: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71C8o + push ds + lds si, [bp+arg_0] + push [bp+var_2] + call word ptr [bp+arg_4] + pop cx + pop ds + jmp short loc_719D +; --------------------------------------------------------------------------- + +loc_715F: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71CAo + push ds + lds si, [bp+arg_0] + push [bp+var_2] + call [bp+arg_4] + pop cx + pop ds + jmp short loc_719D +; --------------------------------------------------------------------------- + +loc_716D: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71CCo + mov si, word ptr [bp+arg_0] + push [bp+var_2] + call word ptr [bp+arg_4] + jmp short loc_719D +; --------------------------------------------------------------------------- + +loc_7178: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71CEo + mov si, word ptr [bp+arg_0] + push [bp+var_2] + call [bp+arg_4] + jmp short loc_719D +; --------------------------------------------------------------------------- + +loc_7183: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71D0o + push ds + lds si, [bp+arg_0] + push [bp+var_2] + call word ptr [bp+arg_4] + pop ds + jmp short loc_719D +; --------------------------------------------------------------------------- + +loc_7190: ; CODE XREF: sub_701C+70j + ; DATA XREF: seg000:71D2o + push ds + lds si, [bp+arg_0] + push [bp+var_2] + call [bp+arg_4] + pop ds + jmp short $+2 + +loc_719D: ; CODE XREF: sub_701C+6Bj sub_701C+70j ... + pop ds + pop di + pop si + mov sp, bp + pop bp + retn +sub_701C endp + +; --------------------------------------------------------------------------- +off_71A4 dw offset loc_7091 ; DATA XREF: sub_701C+70r + dw offset loc_709F + dw offset loc_70AD + dw offset loc_70BF + dw offset loc_70D1 + dw offset loc_70DC + dw offset loc_70E4 + dw offset loc_70F2 + dw offset loc_7101 + dw offset loc_710F + dw offset loc_711D + dw offset loc_712B + dw offset loc_719D + dw offset loc_719D + dw offset loc_719D + dw offset loc_719D + dw offset loc_7139 + dw offset loc_7145 + dw offset loc_7151 + dw offset loc_715F + dw offset loc_716D + dw offset loc_7178 + dw offset loc_7183 + dw offset loc_7190 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_71D4 proc near ; CODE XREF: sub_8E1B+3CFp + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 4 + push si + push di + les bx, ss:16h + mov ax, es:[bx+6] + mov [bp+var_2], ax + push ds + mov ds, [bp+var_2] + mov ax, [bp+arg_8] + and ax, 1 + mov [bp+var_4], ax + test byte ptr [bp+arg_8], 4 + jz short loc_71FF + or [bp+var_4], 2 + +loc_71FF: ; CODE XREF: sub_71D4+25j + test byte ptr [bp+arg_8], 2 + jz short loc_7209 + or [bp+var_4], 4 + +loc_7209: ; CODE XREF: sub_71D4+2Fj + test byte ptr [bp+arg_8], 20h + jz short loc_7213 + or [bp+var_4], 8 + +loc_7213: ; CODE XREF: sub_71D4+39j + mov bx, [bp+var_4] + cmp bx, 0Bh + ja short loc_7286 + add bx, bx + jmp cs:off_728D[bx] + +loc_7222: ; DATA XREF: seg000:off_728Do + push [bp+arg_0] + call word ptr [bp+arg_4] + pop cx + jmp short loc_7286 +; --------------------------------------------------------------------------- + +loc_722B: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:728Fo + push [bp+arg_0] + call [bp+arg_4] + pop cx + jmp short loc_7286 +; --------------------------------------------------------------------------- + +loc_7234: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:7291o + push [bp+arg_2] + push [bp+arg_0] + call word ptr [bp+arg_4] + jmp short loc_7248 +; --------------------------------------------------------------------------- + +loc_723F: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:7293o + push [bp+arg_2] + push [bp+arg_0] + call [bp+arg_4] + +loc_7248: ; CODE XREF: sub_71D4+69j + pop cx + pop cx + jmp short loc_7286 +; --------------------------------------------------------------------------- + +loc_724C: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:7295o + push [bp+arg_0] + call word ptr [bp+arg_4] + jmp short loc_725A +; --------------------------------------------------------------------------- + +loc_7254: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:7297o + push [bp+arg_0] + call [bp+arg_4] + +loc_725A: ; CODE XREF: sub_71D4+7Ej + jmp short loc_7286 +; --------------------------------------------------------------------------- + +loc_725C: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:729Do + mov bx, [bp+arg_0] + push bx + pop bx + call word ptr [bp+arg_4] + jmp short loc_7286 +; --------------------------------------------------------------------------- + +loc_7266: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:729Fo + mov bx, [bp+arg_0] + push bx + pop bx + call [bp+arg_4] + jmp short loc_7286 +; --------------------------------------------------------------------------- + +loc_7270: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:7299o ... + push [bp+arg_2] + push [bp+arg_0] + call word ptr [bp+arg_4] + jmp short loc_7284 +; --------------------------------------------------------------------------- + +loc_727B: ; CODE XREF: sub_71D4+49j + ; DATA XREF: seg000:729Bo ... + push [bp+arg_2] + push [bp+arg_0] + call [bp+arg_4] + +loc_7284: ; CODE XREF: sub_71D4+A5j + jmp short $+2 + +loc_7286: ; CODE XREF: sub_71D4+45j sub_71D4+55j ... + pop ds + pop di + pop si + mov sp, bp + pop bp + retn +sub_71D4 endp + +; --------------------------------------------------------------------------- +off_728D dw offset loc_7222 ; DATA XREF: sub_71D4+49r + dw offset loc_722B + dw offset loc_7234 + dw offset loc_723F + dw offset loc_724C + dw offset loc_7254 + dw offset loc_7270 + dw offset loc_727B + dw offset loc_725C + dw offset loc_7266 + dw offset loc_7270 + dw offset loc_727B + db 4 dup(0), 63h, 75h + dw seg seg000 + db 14h dup(0), 0BCh, 75h + dw seg seg000 + db 14h dup(0), 0E2h, 0FFh, 2 dup(0), 3, 0, 0A5h, 72h + dw seg seg000 + db 2 dup(0), 4, 3 dup(0), 3, 0, 0BDh, 72h + dw seg seg000 + db 2 dup(0), 4, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far sub_72F3(int, int, void *src, int, int, int, int, int, int, int, int, int, int, int, int) +sub_72F3 proc far ; CODE XREF: _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *)+4Dp + ; _ReThrowException(uint,uchar *)+9Ep + +var_48 = word ptr -48h +var_46 = word ptr -46h +var_44 = word ptr -44h +var_42 = word ptr -42h +var_40 = word ptr -40h +var_3E = word ptr -3Eh +var_3C = word ptr -3Ch +var_3A = word ptr -3Ah +var_38 = dword ptr -38h +var_34 = dword ptr -34h +var_30 = dword ptr -30h +var_2C = word ptr -2Ch +var_2A = word ptr -2Ah +n = word ptr -28h +var_26 = dword ptr -26h +var_22 = dword ptr -22h +var_1E = word ptr -1Eh +var_12 = word ptr -12h +arg_0 = word ptr 6 +arg_2 = word ptr 8 +src = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h +arg_12 = word ptr 18h +arg_14 = word ptr 1Ah +arg_16 = word ptr 1Ch +arg_18 = word ptr 1Eh +arg_1A = word ptr 20h +arg_1C = word ptr 22h +arg_1E = word ptr 24h + + push bp + mov bp, sp + sub sp, 48h + push si + push di + mov ax, seg seg000 + mov bx, 72D5h + nop + push cs + call near ptr ___InitExceptBlocks + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_22+2], dx + mov word ptr [bp+var_22], ax + les bx, ss:16h + mov word ptr es:[bx+6], ds + mov dx, ss:18h + mov ax, ss:16h + add ax, 28h ; '(' + les bx, ss:16h + mov es:[bx+1Eh], dx + mov es:[bx+1Ch], ax + les bx, [bp+var_22] + mov dx, word ptr [bp+var_22+2] + mov ax, word ptr [bp+var_22] + add ax, es:[bx+4] + mov word ptr [bp+var_34+2], dx + mov word ptr [bp+var_34], ax + les bx, ss:16h + mov dx, es:[bx+1Eh] + mov ax, es:[bx+1Ch] + mov word ptr [bp+var_38+2], dx + mov word ptr [bp+var_38], ax + jmp short loc_737F +; --------------------------------------------------------------------------- + +loc_735C: ; CODE XREF: sub_72F3+93j + les bx, ss:16h + mov ax, es:[bx+1Ch] + add ax, 7Fh ; '' + cmp ax, word ptr [bp+var_38] + jbe short loc_737C + les bx, [bp+var_34] + mov al, es:[bx] + les bx, [bp+var_38] + mov es:[bx], al + inc word ptr [bp+var_38] + +loc_737C: ; CODE XREF: sub_72F3+78j + inc word ptr [bp+var_34] + +loc_737F: ; CODE XREF: sub_72F3+67j + les bx, [bp+var_34] + cmp byte ptr es:[bx], 0 + jnz short loc_735C + les bx, [bp+var_38] + mov byte ptr es:[bx], 0 + les bx, ss:16h + mov ax, [bp+arg_14] + mov es:[bx+1Ah], ax + les bx, ss:16h + mov dx, [bp+arg_18] + mov ax, [bp+arg_16] + mov es:[bx+18h], dx + mov es:[bx+16h], ax + mov dx, word ptr [bp+var_22+2] + mov ax, word ptr [bp+var_22] + mov word ptr [bp+var_26+2], dx + mov word ptr [bp+var_26], ax + les bx, [bp+var_22] + mov ax, es:[bx] + mov [bp+n], ax + les bx, [bp+var_22] + mov ax, es:[bx+2] + mov [bp+var_2A], ax + test byte ptr [bp+var_2A], 2 + jz short loc_73DC + les bx, [bp+var_22] + mov ax, es:[bx+8] + jmp short loc_73DE +; --------------------------------------------------------------------------- + +loc_73DC: ; CODE XREF: sub_72F3+DEj + xor ax, ax + +loc_73DE: ; CODE XREF: sub_72F3+E7j + mov [bp+var_2C], ax + test byte ptr [bp+var_2A], 30h + jz short loc_73F8 + les bx, [bp+var_26] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_26+2], dx + mov word ptr [bp+var_26], ax + +loc_73F8: ; CODE XREF: sub_72F3+F2j + mov ax, [bp+n] + add ax, 3Ah ; ':' + push ax + push cs + call near ptr sub_6B34 + pop cx + mov word ptr [bp+var_30+2], dx + mov word ptr [bp+var_30], ax + les bx, ss:16h + mov dx, es:[bx+2] + mov ax, es:[bx] + les bx, [bp+var_30] + mov es:[bx+2], dx + mov es:[bx], ax + les bx, ss:16h + mov dx, word ptr [bp+var_30+2] + mov ax, word ptr [bp+var_30] + mov es:[bx+2], dx + mov es:[bx], ax + les bx, [bp+var_30] + mov dx, word ptr [bp+var_22+2] + mov ax, word ptr [bp+var_22] + mov es:[bx+6], dx + mov es:[bx+4], ax + les bx, [bp+var_30] + mov ax, [bp+arg_12] + mov es:[bx+0Ch], ax + les bx, [bp+var_30] + mov ax, [bp+n] + mov es:[bx+0Eh], ax + les bx, [bp+var_30] + mov ax, [bp+var_2A] + mov es:[bx+14h], ax + les bx, [bp+var_30] + mov ax, [bp+var_2C] + mov es:[bx+16h], ax + les bx, [bp+var_30] + mov dx, word ptr [bp+var_26+2] + mov ax, word ptr [bp+var_26] + mov es:[bx+12h], dx + mov es:[bx+10h], ax + les bx, [bp+var_30] + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov es:[bx+0Ah], dx + mov es:[bx+8], ax + les bx, [bp+var_30] + mov word ptr es:[bx+24h], 0 + les bx, [bp+var_30] + mov word ptr es:[bx+28h], 0 + mov word ptr es:[bx+26h], 0 + les bx, [bp+var_30] + mov word ptr es:[bx+18h], ds + les bx, [bp+var_30] + mov word ptr es:[bx+1Ch], seg seg000 + mov word ptr es:[bx+1Ah], 6B90h + les bx, [bp+var_30] + mov ax, [bp+arg_14] + mov es:[bx+2Ch], ax + les bx, [bp+var_30] + mov dx, [bp+arg_18] + mov ax, [bp+arg_16] + mov es:[bx+30h], dx + mov es:[bx+2Eh], ax + les bx, [bp+var_30] + mov dx, [bp+arg_E] + mov ax, [bp+arg_C] + mov es:[bx+20h], dx + mov es:[bx+1Eh], ax + les bx, [bp+var_30] + mov ax, [bp+arg_10] + mov es:[bx+22h], ax + les bx, [bp+var_30] + mov byte ptr es:[bx+39h], 0 + les bx, [bp+var_30] + mov byte ptr es:[bx+38h], 1 + push [bp+n] ; n + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + mov ax, word ptr [bp+var_30] + add ax, 3Ah ; ':' + push word ptr [bp+var_30+2] + push ax ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + test byte ptr [bp+var_2C], 1 + jz short loc_7582 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_3A], dx + mov [bp+var_3C], ax + mov [bp+var_12], 6 + push [bp+arg_10] + push [bp+arg_E] + push [bp+arg_C] + push word ptr [bp+src+2] + push word ptr [bp+src] + mov ax, word ptr [bp+var_30] + add ax, 3Ah ; ':' + push word ptr [bp+var_30+2] + push ax + call sub_6CCE + add sp, 0Eh + mov [bp+var_12], 0 + jmp short loc_756D +; --------------------------------------------------------------------------- + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + db 90h +; --------------------------------------------------------------------------- + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_756D: ; CODE XREF: sub_72F3+26Ej + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, [bp+var_3A] + mov cx, [bp+var_3C] + mov es, dx + xchg ax, bx + mov es:[bx+2], ax + mov es:[bx], cx + +loc_7582: ; CODE XREF: sub_72F3+22Dj + cmp [bp+arg_1E], 0 + jnz short loc_75C6 + test byte ptr [bp+var_2C], 2 + jz short loc_75C6 + mov [bp+var_12], 12h + mov ax, 1 + push ax + les bx, [bp+var_22] + push word ptr es:[bx+22h] + les bx, [bp+var_22] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + push word ptr [bp+src+2] + push word ptr [bp+src] + call sub_701C + add sp, 0Ch + mov [bp+var_12], 0 + jmp short loc_75C6 +; --------------------------------------------------------------------------- + db 90h +; --------------------------------------------------------------------------- + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + nop + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_75C6: ; CODE XREF: sub_72F3+293j + ; sub_72F3+299j ... + les bx, ss:16h + mov dx, es:[bx+1Eh] + mov ax, es:[bx+1Ch] + mov [bp+var_46], dx + mov [bp+var_48], ax + mov dx, [bp+arg_1C] + mov ax, [bp+arg_1A] + mov [bp+var_42], dx + mov [bp+var_44], ax + mov dx, word ptr [bp+var_30+2] + mov ax, word ptr [bp+var_30] + mov [bp+var_3E], dx + mov [bp+var_40], ax + push ss + lea ax, [bp+var_48] + push ax + xor ax, ax + mov dx, 3 + push ax + push dx + xor ax, ax + mov dx, 1 + push ax + push dx + mov ax, 0EEFh + mov dx, 0FACEh + push ax + push dx + nop + push cs + call near ptr _RaiseException + add sp, 10h + push [bp+var_1E] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_72F3 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far _ThrowException(int, int, void *src, int, int, int, int, int, int, int, int, int) +@_ThrowException$qnvt1t1t1uiuiuinuc proc far ; CODE XREF: seg000:4280p + ; xalloc::raise(void)+6Cp ... + +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +src = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h +arg_12 = word ptr 18h +arg_14 = word ptr 1Ah +arg_16 = word ptr 1Ch +arg_18 = word ptr 1Eh + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov [bp+var_6], bp + mov bx, [bp+var_6] + mov dx, ss:[bx+4] + mov ax, ss:[bx+2] + mov [bp+var_2], dx + mov [bp+var_4], ax + xor ax, ax + push ax ; int + push [bp+var_2] ; int + push [bp+var_4] ; int + push [bp+arg_18] ; int + push [bp+arg_16] ; int + push [bp+arg_14] ; int + push [bp+arg_12] ; int + push [bp+arg_10] ; int + push [bp+arg_E] ; int + push [bp+arg_C] ; int + push [bp+arg_A] ; int + push [bp+arg_8] ; int + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push [bp+arg_2] ; int + push [bp+arg_0] ; int + push cs + call near ptr sub_72F3 + add sp, 20h + pop di + pop si + mov sp, bp + pop bp + retf +@_ThrowException$qnvt1t1t1uiuiuinuc endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; _ReThrowException(unsigned int, unsigned char *) +@_ReThrowException$quinuc proc far + +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 0Ah + push si + push di + mov [bp+var_A], bp + mov bx, [bp+var_A] + mov dx, ss:[bx+4] + mov ax, ss:[bx+2] + mov [bp+var_2], dx + mov [bp+var_4], ax + les bx, ss:16h + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + mov ax, word ptr [bp+var_8] + or ax, word ptr [bp+var_8+2] + jnz short loc_76B6 + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + +loc_76B6: ; CODE XREF: _ReThrowException(uint,uchar *)+34j + mov ax, 1 + push ax ; int + push [bp+var_2] ; int + push [bp+var_4] ; int + push [bp+arg_4] ; int + push [bp+arg_2] ; int + push [bp+arg_0] ; int + les bx, [bp+var_8] + push word ptr es:[bx+0Ch] ; int + les bx, [bp+var_8] + push word ptr es:[bx+22h] ; int + les bx, [bp+var_8] + push word ptr es:[bx+20h] ; int + push word ptr es:[bx+1Eh] ; int + les bx, [bp+var_8] + push word ptr es:[bx+0Ah] ; int + push word ptr es:[bx+8] ; int + les bx, [bp+var_8] + cmp byte ptr es:[bx+38h], 0 + jz short loc_7702 + mov dx, word ptr [bp+var_8+2] + mov ax, word ptr [bp+var_8] + add ax, 3Ah ; ':' + jmp short loc_770B +; --------------------------------------------------------------------------- + +loc_7702: ; CODE XREF: _ReThrowException(uint,uchar *)+7Aj + les bx, [bp+var_8] + mov ax, es:[bx+36h] + mov dx, ss + +loc_770B: ; CODE XREF: _ReThrowException(uint,uchar *)+85j + push dx + push ax ; src + les bx, [bp+var_8] + push word ptr es:[bx+6] ; int + push word ptr es:[bx+4] ; int + push cs + call near ptr sub_72F3 + add sp, 20h + pop di + pop si + mov sp, bp + pop bp + retf +@_ReThrowException$quinuc endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_7725 proc far ; CODE XREF: sub_772A+22p + push si + push di + pop di + pop si + retf +sub_7725 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_772A proc far ; CODE XREF: __Global_unwind+3Bp + ; _RaiseException+2A6p ... + +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov [bp+var_4], 0 + mov bx, [bp+arg_0] + test byte ptr ss:[bx+4], 6 + jz short loc_7744 + inc [bp+var_4] + +loc_7744: ; CODE XREF: sub_772A+15j + mov ax, ss:14h + mov [bp+var_2], ax + push cs + call near ptr sub_7725 + jmp short loc_7792 +; --------------------------------------------------------------------------- + +loc_7751: ; CODE XREF: sub_772A+74j + mov ax, [bp+var_2] + mov [bp+var_6], ax + xor ax, ax + push ax + push ax + push [bp+arg_4] + push [bp+arg_2] + push [bp+var_2] + push ss + push [bp+arg_0] + mov bx, [bp+var_6] + call dword ptr ss:[bx+2] + add sp, 0Eh + mov dx, ax + or dx, dx + jnz short loc_777C + mov ax, dx + jmp short loc_77B0 +; --------------------------------------------------------------------------- + +loc_777C: ; CODE XREF: sub_772A+4Cj + cmp [bp+var_4], 0 + jz short loc_7789 + mov ax, [bp+var_2] + mov ss:14h, ax + +loc_7789: ; CODE XREF: sub_772A+56j + mov bx, [bp+var_2] + mov ax, ss:[bx] + mov [bp+var_2], ax + +loc_7792: ; CODE XREF: sub_772A+25j + cmp [bp+var_2], 0FFFFh + jz short loc_77A0 + mov ax, [bp+var_2] + cmp ax, [bp+arg_6] + jnz short loc_7751 + +loc_77A0: ; CODE XREF: sub_772A+6Cj + cmp [bp+var_4], 0 + jz short loc_77AD + mov ax, [bp+var_2] + mov ss:14h, ax + +loc_77AD: ; CODE XREF: sub_772A+7Aj + mov ax, 1 + +loc_77B0: ; CODE XREF: sub_772A+50j + pop di + pop si + mov sp, bp + pop bp + retf +sub_772A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__Global_unwind proc far ; CODE XREF: __ExceptionHandler+210p + +var_4C = word ptr -4Ch +var_4A = word ptr -4Ah +var_48 = word ptr -48h +var_46 = word ptr -46h +var_3E = word ptr -3Eh +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + sub sp, 4Ch + push si + push di + mov dx, [bp+arg_2] + or dx, dx + jnz short loc_77E1 + mov [bp+var_4A], 0 + mov [bp+var_4C], 26h ; '&' + mov [bp+var_46], 0 + mov [bp+var_48], 2 + mov [bp+var_3E], 0 + lea dx, [bp+var_4C] + +loc_77E1: ; CODE XREF: __Global_unwind+Dj + mov bx, dx + or word ptr ss:[bx+4], 2 + push [bp+arg_0] + xor ax, ax + push ax + push ax + push dx + push cs + call near ptr sub_772A + add sp, 8 + pop di + pop si + mov sp, bp + pop bp + retf +__Global_unwind endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +sub_77FD proc far ; CODE XREF: _RaiseException+16p + push si + push di + pop di + pop si + retf +sub_77FD endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +_RaiseException proc far ; CODE XREF: sub_72F3+31Bp + +dest = word ptr -186h +var_184 = word ptr -184h +var_182 = word ptr -182h +var_180 = word ptr -180h +var_17E = word ptr -17Eh +var_17C = word ptr -17Ch +var_176 = word ptr -176h +var_174 = word ptr -174h +var_172 = word ptr -172h +var_170 = word ptr -170h +var_16E = word ptr -16Eh +var_16C = word ptr -16Ch +var_16A = word ptr -16Ah +var_168 = word ptr -168h +var_166 = word ptr -166h +var_164 = word ptr -164h +var_162 = word ptr -162h +var_160 = word ptr -160h +var_15E = word ptr -15Eh +var_15A = word ptr -15Ah +var_158 = word ptr -158h +var_156 = word ptr -156h +var_154 = word ptr -154h +var_152 = byte ptr -152h +var_C6 = word ptr -0C6h +var_C4 = word ptr -0C4h +var_C2 = word ptr -0C2h +var_C0 = word ptr -0C0h +var_BE = word ptr -0BEh +var_BC = word ptr -0BCh +var_BA = word ptr -0BAh +var_B8 = word ptr -0B8h +var_B6 = word ptr -0B6h +var_B4 = word ptr -0B4h +var_B2 = word ptr -0B2h +var_B0 = word ptr -0B0h +var_AE = word ptr -0AEh +var_AC = word ptr -0ACh +var_AA = word ptr -0AAh +var_A8 = word ptr -0A8h +var_A6 = word ptr -0A6h +var_A4 = word ptr -0A4h +var_A2 = word ptr -0A2h +var_A0 = word ptr -0A0h +var_9E = word ptr -9Eh +var_9C = word ptr -9Ch +var_9A = word ptr -9Ah +var_98 = word ptr -98h +var_96 = word ptr -96h +var_94 = word ptr -94h +var_92 = word ptr -92h +var_90 = word ptr -90h +var_8E = word ptr -8Eh +var_8C = word ptr -8Ch +var_8A = word ptr -8Ah +var_88 = word ptr -88h +var_86 = byte ptr -86h +var_56 = word ptr -56h +var_54 = word ptr -54h +var_52 = word ptr -52h +var_50 = word ptr -50h +var_4E = word ptr -4Eh +var_4C = word ptr -4Ch +var_4A = word ptr -4Ah +var_48 = word ptr -48h +var_46 = byte ptr -46h +src = dword ptr -0Ah +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 18h +arg_2 = word ptr 1Ah +arg_4 = word ptr 1Ch +arg_6 = word ptr 1Eh +arg_8 = word ptr 20h +arg_A = word ptr 22h +arg_C = dword ptr 24h + + push ax + push cx + push dx + push bx + push sp + push bp + push si + push di + push ds + push es + mov bp, sp + sub sp, 186h + lea ax, [bp+var_86] + push ax + push cs + call near ptr sub_77FD + pop cx + pushf + pop ax + mov word ptr [bp+src+2], ax + cmp byte ptr word_11D62, 3 + jnb short loc_782B + jmp loc_78E1 +; --------------------------------------------------------------------------- + +loc_782B: ; CODE XREF: _RaiseException+24j + pushad + mov word ptr [bp+src], sp + mov ax, 20h ; ' ' + push ax ; n + push ss + push word ptr [bp+src] ; src + push ss + lea ax, [bp+dest] + push ax ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + popad + mov dx, [bp+var_184] + mov ax, [bp+dest] + mov [bp+var_B4], dx + mov [bp+var_B6], ax + mov dx, [bp+var_180] + mov ax, [bp+var_182] + mov [bp+var_B0], dx + mov [bp+var_B2], ax + mov dx, [bp+var_174] + mov ax, [bp+var_176] + mov [bp+var_AC], dx + mov [bp+var_AE], ax + mov dx, [bp+var_170] + mov ax, [bp+var_172] + mov [bp+var_A8], dx + mov [bp+var_AA], ax + mov dx, [bp+var_16C] + mov ax, [bp+var_16E] + mov [bp+var_A4], dx + mov [bp+var_A6], ax + mov dx, [bp+var_168] + mov ax, [bp+var_16A] + mov [bp+var_A0], dx + mov [bp+var_A2], ax + mov dx, [bp+var_17C] + mov ax, [bp+var_17E] + mov [bp+var_9C], dx + mov [bp+var_9E], ax + pushfd + pop eax + shr eax, 10h + mov [bp+var_90], ax + mov ax, word ptr [bp+src+2] + mov [bp+var_92], ax + mov [bp+var_C0], 0 + mov [bp+var_C2], fs + mov [bp+var_C4], 0 + mov [bp+var_C6], gs + jmp short loc_792A +; --------------------------------------------------------------------------- + +loc_78E1: ; CODE XREF: _RaiseException+26j + xor ax, ax + xor dx, dx + mov [bp+var_9C], ax + mov [bp+var_9E], dx + mov [bp+var_A0], ax + mov [bp+var_A2], dx + mov [bp+var_A4], ax + mov [bp+var_A6], dx + mov [bp+var_A8], ax + mov [bp+var_AA], dx + mov [bp+var_AC], ax + mov [bp+var_AE], dx + mov [bp+var_B0], ax + mov [bp+var_B2], dx + mov [bp+var_B4], ax + mov [bp+var_B6], dx + mov ax, word ptr [bp+src+2] + mov [bp+var_90], 0 + mov [bp+var_92], ax + +loc_792A: ; CODE XREF: _RaiseException+DDj + mov dx, [bp+var_9C] + mov ax, [bp+var_9E] + add ax, 18h + adc dx, 0 + mov [bp+var_8C], dx + mov [bp+var_8E], ax + cmp [bp+arg_2], 0EEFh + jnz short loc_795B + cmp [bp+arg_0], 0FACEh + jnz short loc_795B + les bx, [bp+arg_C] + mov dx, es:[bx+6] + mov ax, es:[bx+4] + jmp short loc_7969 +; --------------------------------------------------------------------------- + +loc_795B: ; CODE XREF: _RaiseException+143j + ; _RaiseException+14Aj + mov word ptr [bp+src], bp + mov bx, word ptr [bp+src] + mov dx, ss:[bx+16h] + mov ax, ss:[bx+14h] + +loc_7969: ; CODE XREF: _RaiseException+157j + mov [bp+var_4], dx + mov [bp+var_6], ax + mov ax, [bp+var_6] + mov [bp+var_98], 0 + mov [bp+var_9A], ax + mov ax, [bp+var_4] + mov [bp+var_94], 0 + mov [bp+var_96], ax + mov ax, 14h + push ax ; n + push ss + push bp ; src + push ss + lea ax, [bp+var_166] + push ax ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + mov ax, [bp+var_164] + mov [bp+var_B8], 0 + mov [bp+var_BA], ax + mov ax, [bp+var_166] + mov [bp+var_BC], 0 + mov [bp+var_BE], ax + mov [bp+var_88], 0 + mov [bp+var_8A], ss + mov ax, [bp+var_154] + mov [bp+var_A2], ax + mov ax, [bp+var_15A] + mov [bp+var_AE], ax + mov ax, [bp+var_156] + mov [bp+var_A6], ax + mov ax, [bp+var_158] + mov [bp+var_AA], ax + mov ax, [bp+var_160] + mov [bp+var_B2], ax + mov ax, [bp+var_162] + mov [bp+var_B6], ax + mov ax, [bp+var_15E] + mov [bp+var_9E], ax + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + and dx, 0EFFFh + mov [bp+var_54], dx + mov [bp+var_56], ax + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov [bp+var_50], dx + mov [bp+var_52], ax + mov dx, [bp+var_4] + mov ax, [bp+var_6] + mov [bp+var_4A], dx + mov [bp+var_4C], ax + mov [bp+var_4E], 0 + mov ax, word ptr [bp+arg_C] + or ax, word ptr [bp+arg_C+2] + jnz short loc_7A3A + mov [bp+arg_A], 0 + mov [bp+arg_8], 0 + +loc_7A3A: ; CODE XREF: _RaiseException+22Cj + cmp [bp+arg_A], 0 + jb short loc_7A52 + ja short loc_7A48 + cmp [bp+arg_8], 0Fh + jbe short loc_7A52 + +loc_7A48: ; CODE XREF: _RaiseException+23Ej + mov [bp+arg_A], 0 + mov [bp+arg_8], 0Fh + +loc_7A52: ; CODE XREF: _RaiseException+23Cj + ; _RaiseException+244j + mov ax, [bp+arg_8] + mov [bp+var_48], ax + mov [bp+var_2], 0 + jmp short loc_7A88 +; --------------------------------------------------------------------------- + +loc_7A5F: ; CODE XREF: _RaiseException+28Ej + ; _RaiseException+295j + mov bx, [bp+var_2] + mov cl, 2 + shl bx, cl + lea ax, [bp+var_46] + add bx, ax + mov ax, [bp+var_2] + mov cl, 2 + shl ax, cl + les si, [bp+arg_C] + add si, ax + mov dx, es:[si+2] + mov ax, es:[si] + mov ss:[bx+2], dx + mov ss:[bx], ax + inc [bp+var_2] + +loc_7A88: ; CODE XREF: _RaiseException+25Bj + mov ax, [bp+var_2] + xor dx, dx + cmp dx, [bp+arg_A] + jb short loc_7A5F + jnz short loc_7A99 + cmp ax, [bp+arg_8] + jb short loc_7A5F + +loc_7A99: ; CODE XREF: _RaiseException+290j + ; _RaiseException+2E0j + mov ax, 0FFFFh + push ax + push ss + lea ax, [bp+var_152] + push ax + lea ax, [bp+var_56] + push ax + push cs + call near ptr sub_772A + add sp, 8 + or ax, ax + jnz short loc_7AE4 + test byte ptr [bp+arg_4], 1 + jz short loc_7B04 + mov [bp+var_54], 0C000h + mov [bp+var_56], 25h ; '%' + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov [bp+var_50], dx + mov [bp+var_52], ax + mov [bp+var_4A], 0 + mov [bp+var_4C], 0 + mov [bp+var_4E], 0 + mov [bp+var_48], 0 + jmp short loc_7A99 +; --------------------------------------------------------------------------- + +loc_7AE4: ; CODE XREF: _RaiseException+2AEj + or [bp+var_52], 2 + mov ax, 0FFFFh + push ax + push ss + lea ax, [bp+var_152] + push ax + lea ax, [bp+var_56] + push ax + push cs + call near ptr sub_772A + add sp, 8 + or ax, ax + jz short loc_7B04 + jmp loc_7C6F +; --------------------------------------------------------------------------- + +loc_7B04: ; CODE XREF: _RaiseException+2B4j + ; _RaiseException+2FDj + cmp byte ptr word_11D62, 3 + jnb short loc_7B0E + jmp loc_7BEE +; --------------------------------------------------------------------------- + +loc_7B0E: ; CODE XREF: _RaiseException+307j + mov cx, [bp+var_8E] + sub cx, 30h ; '0' + mov es, [bp+var_8A] + mov bx, cx + mov ax, [bp+var_C6] + mov es:[bx], ax + mov ax, [bp+var_C2] + mov es:[bx+2], ax + mov ax, [bp+var_BE] + mov es:[bx+4], ax + mov ax, [bp+var_BA] + mov es:[bx+6], ax + mov dx, [bp+var_B4] + mov ax, [bp+var_B6] + mov es:[bx+0Ah], dx + mov es:[bx+8], ax + mov dx, [bp+var_B0] + mov ax, [bp+var_B2] + mov es:[bx+0Eh], dx + mov es:[bx+0Ch], ax + mov dx, [bp+var_9C] + mov ax, [bp+var_9E] + mov es:[bx+12h], dx + mov es:[bx+10h], ax + mov dx, [bp+var_8C] + mov ax, [bp+var_8E] + mov es:[bx+16h], dx + mov es:[bx+14h], ax + mov dx, [bp+var_AC] + mov ax, [bp+var_AE] + mov es:[bx+1Ah], dx + mov es:[bx+18h], ax + mov dx, [bp+var_A8] + mov ax, [bp+var_AA] + mov es:[bx+1Eh], dx + mov es:[bx+1Ch], ax + mov dx, [bp+var_A4] + mov ax, [bp+var_A6] + mov es:[bx+22h], dx + mov es:[bx+20h], ax + mov dx, [bp+var_A0] + mov ax, [bp+var_A2] + mov es:[bx+26h], dx + mov es:[bx+24h], ax + mov dx, [bp+var_90] + mov ax, [bp+var_92] + mov es:[bx+2Ah], dx + mov es:[bx+28h], ax + mov ax, [bp+var_9A] + mov es:[bx+2Ch], ax + mov ax, [bp+var_96] + mov es:[bx+2Eh], ax + mov ss, [bp+var_8A] + mov sp, bx + pop gs + pop fs + pop es + pop ds + popad + popfd + retf +; --------------------------------------------------------------------------- + jmp loc_7C74 +; --------------------------------------------------------------------------- + +loc_7BEE: ; CODE XREF: _RaiseException+309j + mov cx, [bp+var_8E] + sub cx, 1Ah + mov es, [bp+var_8A] + mov bx, cx + mov ax, [bp+var_BE] + mov es:[bx], ax + mov ax, [bp+var_BA] + mov es:[bx+2], ax + mov ax, [bp+var_B6] + mov es:[bx+4], ax + mov ax, [bp+var_B2] + mov es:[bx+6], ax + mov ax, [bp+var_9E] + mov es:[bx+8], ax + mov ax, [bp+var_8E] + mov es:[bx+0Ah], ax + mov ax, [bp+var_AE] + mov es:[bx+0Ch], ax + mov ax, [bp+var_AA] + mov es:[bx+0Eh], ax + mov ax, [bp+var_A6] + mov es:[bx+10h], ax + mov ax, [bp+var_A2] + mov es:[bx+12h], ax + mov ax, [bp+var_92] + mov es:[bx+14h], ax + mov ax, [bp+var_9A] + mov es:[bx+16h], ax + mov ax, [bp+var_96] + mov es:[bx+18h], ax + mov ss, [bp+var_8A] + mov sp, bx + pop es + pop ds + popa + popf + retf +; --------------------------------------------------------------------------- + jmp short loc_7C74 +; --------------------------------------------------------------------------- + +loc_7C6F: ; CODE XREF: _RaiseException+2FFj + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + +loc_7C74: ; CODE XREF: _RaiseException+3E9j + ; _RaiseException+46Bj + mov sp, bp + pop es + pop ds + pop di + pop si + pop bp + pop bx + pop bx + pop dx + pop cx + pop ax + retf +_RaiseException endp + +; --------------------------------------------------------------------------- + db 4 dup(0), 0E3h, 7Ch + dw seg seg000 + db 14h dup(0), 0E2h, 0FFh, 2 dup(0), 3, 0, 81h, 7Ch + dw seg seg000 + db 2 dup(0), 4, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_7CAB proc near ; CODE XREF: sub_7CFB+58p sub_7CFB+C4p ... + +var_1E = word ptr -1Eh +var_12 = word ptr -12h +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 7C99h + nop + push cs + call near ptr ___InitExceptBlocks + mov [bp+var_12], 6 + mov ax, 1 + push ax + push [bp+arg_8] + push [bp+arg_6] + push [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + call sub_701C + add sp, 0Ch + mov [bp+var_12], 0 + jmp short loc_7CED +; --------------------------------------------------------------------------- + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + db 90h +; --------------------------------------------------------------------------- + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_7CED: ; CODE XREF: sub_7CAB+36j + push [bp+var_1E] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retn +sub_7CAB endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_7CFB proc near ; CODE XREF: _CatchCleanup(void)+5Ap + ; sub_8245+138p + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 4 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + les bx, [bp+arg_0] + cmp byte ptr es:[bx+38h], 0 + jz short loc_7D76 + les bx, [bp+arg_0] + test byte ptr es:[bx+16h], 2 + jz short loc_7D6E + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+arg_0] + les bx, es:[bx+4] + mov word ptr [bp+var_4+2], es + mov word ptr [bp+var_4], bx + push word ptr es:[bx+22h] + les bx, [bp+var_4] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + mov ax, word ptr [bp+arg_0] + add ax, 3Ah ; ':' + push word ptr [bp+arg_0+2] + push ax + call sub_7CAB + add sp, 0Ah + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, word ptr [bp+var_8+2] + mov cx, word ptr [bp+var_8] + mov es, dx + xchg ax, bx + mov es:[bx+2], ax + mov es:[bx], cx + +loc_7D6E: ; CODE XREF: sub_7CFB+1Aj + les bx, [bp+arg_0] + mov byte ptr es:[bx+38h], 0 + +loc_7D76: ; CODE XREF: sub_7CFB+10j + les bx, [bp+arg_0] + cmp byte ptr es:[bx+39h], 0 + jz short loc_7DCD + les bx, [bp+arg_0] + mov dx, es:[bx+34h] + mov ax, es:[bx+32h] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + test byte ptr es:[bx+2], 2 + jz short loc_7DC5 + les bx, [bp+var_8] + test byte ptr es:[bx+8], 2 + jz short loc_7DC5 + les bx, [bp+var_8] + push word ptr es:[bx+22h] + les bx, [bp+var_8] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + push ss + les bx, [bp+arg_0] + push word ptr es:[bx+36h] + call sub_7CAB + add sp, 0Ah + +loc_7DC5: ; CODE XREF: sub_7CFB+9Ej sub_7CFB+A8j + les bx, [bp+arg_0] + mov byte ptr es:[bx+39h], 0 + +loc_7DCD: ; CODE XREF: sub_7CFB+83j + pop di + pop si + mov sp, bp + pop bp + retn +sub_7CFB endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; _CatchCleanup(void) +@_CatchCleanup$qv proc far ; CODE XREF: ___call_terminate+69p + ; sub_72F3+277p ... + +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 6 + push si + push di + les bx, ss:16h + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + les bx, ss:16h + mov es:[bx+2], dx + mov es:[bx], ax + les bx, [bp+var_4] + mov ax, es:[bx+24h] + mov [bp+var_6], ax + mov bx, [bp+var_6] + les ax, ss:[bx+arg_0] + mov bx, [bp+var_6] + add ax, ss:[bx+arg_6] + mov bx, ax + mov ax, es:[bx] + mov bx, [bp+var_6] + mov ss:[bx+arg_6], ax + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + call sub_7CFB + pop cx + pop cx + push ds + les bx, [bp+var_4] + mov ds, word ptr es:[bx+18h] + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + les bx, [bp+var_4] + call dword ptr es:[bx+1Ah] + pop cx + pop cx + pop ds + pop di + pop si + mov sp, bp + pop bp + retf +@_CatchCleanup$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_7E50 proc near ; CODE XREF: sub_7E50+A0p sub_7F1C+36p ... + +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 0Ch + push si + push di + +loc_7E58: ; CODE XREF: sub_7E50+C3j + les bx, [bp+arg_0] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + mov ax, word ptr [bp+var_4] + or ax, word ptr [bp+var_4+2] + jnz short loc_7E75 + xor ax, ax + jmp loc_7F16 +; --------------------------------------------------------------------------- + +loc_7E75: ; CODE XREF: sub_7E50+1Ej + mov bx, [bp+arg_A] + mov dx, ss:[bx+2] + mov ax, ss:[bx] + les bx, [bp+arg_0] + add ax, es:[bx+4] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + cmp [bp+arg_4], 0 + jz short loc_7EA1 + les bx, [bp+var_8] + mov ax, es:[bx] + mov dx, word ptr [bp+var_8+2] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + +loc_7EA1: ; CODE XREF: sub_7E50+40j + push [bp+arg_8] + push [bp+arg_6] + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jnz short loc_7EFA + les bx, [bp+var_4] + test byte ptr es:[bx+2], 2 + jz short loc_7F0F + les bx, [bp+var_4] + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + add ax, es:[bx+0Ah] + mov [bp+var_A], dx + mov [bp+var_C], ax + mov ax, [bp+var_C] + or ax, [bp+var_A] + jz short loc_7F0F + lea ax, [bp+var_8] + push ax + push [bp+arg_8] + push [bp+arg_6] + xor ax, ax + push ax + push [bp+var_A] + push [bp+var_C] + call sub_7E50 + add sp, 0Ch + or ax, ax + jz short loc_7F0F + +loc_7EFA: ; CODE XREF: sub_7E50+66j + mov bx, [bp+arg_A] + mov dx, word ptr [bp+var_8+2] + mov ax, word ptr [bp+var_8] + mov ss:[bx+2], dx + mov ss:[bx], ax + mov ax, 1 + jmp short loc_7F16 +; --------------------------------------------------------------------------- + +loc_7F0F: ; CODE XREF: sub_7E50+70j sub_7E50+8Bj ... + add word ptr [bp+arg_0], 8 + jmp loc_7E58 +; --------------------------------------------------------------------------- + +loc_7F16: ; CODE XREF: sub_7E50+22j sub_7E50+BDj + pop di + pop si + mov sp, bp + pop bp + retn +sub_7E50 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_7F1C proc far ; CODE XREF: sub_7F9F+159p + ; sub_7F9F+1C2p + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jz short loc_7F8D + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ah] + mov [bp+var_2], dx + mov [bp+var_4], ax + lea ax, [bp+arg_0] + push ax + push [bp+arg_A] + push [bp+arg_8] + xor ax, ax + push ax + push [bp+var_2] + push [bp+var_4] + call sub_7E50 + add sp, 0Ch + or ax, ax + jnz short loc_7F8D + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ch] + mov [bp+var_2], dx + mov [bp+var_4], ax + lea ax, [bp+arg_0] + push ax + push [bp+arg_A] + push [bp+arg_8] + mov ax, 1 + push ax + push [bp+var_2] + push [bp+var_4] + call sub_7E50 + add sp, 0Ch + or ax, ax + jz short loc_7F95 + +loc_7F8D: ; CODE XREF: sub_7F1C+Ej sub_7F1C+3Ej + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + jmp short loc_7F99 +; --------------------------------------------------------------------------- + +loc_7F95: ; CODE XREF: sub_7F1C+6Fj + xor dx, dx + xor ax, ax + +loc_7F99: ; CODE XREF: sub_7F1C+77j + pop di + pop si + mov sp, bp + pop bp + retf +sub_7F1C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_7F9F proc near ; CODE XREF: __ExceptionHandler+248p + +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = word ptr -10h +src = dword ptr -0Eh +n = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_6 = dword ptr 0Ah +arg_A = dword ptr 0Eh +arg_E = word ptr 12h + + push bp + mov bp, sp + sub sp, 18h + push si + push di + les bx, [bp+arg_0] + mov dx, es:[bx+6] + mov ax, es:[bx+4] + mov [bp+var_2], dx + mov [bp+var_4], ax + les bx, [bp+arg_6] + mov es:[bx+34h], dx + mov es:[bx+32h], ax + mov ax, [bp+var_4] + or ax, [bp+var_2] + jnz short loc_7FCE + jmp loc_823F +; --------------------------------------------------------------------------- + +loc_7FCE: ; CODE XREF: sub_7F9F+2Aj + les bx, [bp+arg_0] + test byte ptr es:[bx+8], 80h + jz short loc_7FDB + jmp loc_823F +; --------------------------------------------------------------------------- + +loc_7FDB: ; CODE XREF: sub_7F9F+37j + les bx, [bp+arg_0] + mov ax, es:[bx+8] + and ax, 1 + neg ax + sbb ax, ax + inc ax + mov [bp+var_14], ax + mov dx, word ptr [bp+arg_6+2] + mov ax, word ptr [bp+arg_6] + add ax, 3Ah ; ':' + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + les bx, [bp+arg_6] + +loc_7FFF: ; DATA XREF: sub_F478+1o + mov byte ptr es:[bx+39h], 1 + les bx, [bp+arg_A] + mov ax, es:[bx] + add ax, [bp+arg_E] + les bx, [bp+arg_6] + mov es:[bx+36h], ax + mov dx, [bp+var_2] + mov ax, [bp+var_4] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov ax, es:[bx] + mov [bp+n], ax + les bx, [bp+var_8] + mov cx, es:[bx+2] + mov dx, cx + test cl, 30h + jz short loc_804F + les bx, [bp+var_8] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov dx, es:[bx+2] + +loc_804F: ; CODE XREF: sub_7F9F+96j + test cl, 10h + jz short loc_8077 + les bx, [bp+arg_6] + test byte ptr es:[bx+0Ch], 1 + jz short loc_8077 + push [bp+n] ; n + xor ax, ax + push ax ; c + push ss + les bx, [bp+arg_6] + push word ptr es:[bx+36h] ; s + nop + push cs + call near ptr _memset + add sp, 8 + jmp loc_81A2 +; --------------------------------------------------------------------------- + +loc_8077: ; CODE XREF: sub_7F9F+B3j sub_7F9F+BDj + test dl, 1 + jnz short loc_807F + jmp loc_8123 +; --------------------------------------------------------------------------- + +loc_807F: ; CODE XREF: sub_7F9F+DBj + test cl, 30h + jnz short loc_8087 + jmp loc_8123 +; --------------------------------------------------------------------------- + +loc_8087: ; CODE XREF: sub_7F9F+E3j + test cl, 20h + jz short loc_808E + jmp short loc_80B1 +; --------------------------------------------------------------------------- + +loc_808E: ; CODE XREF: sub_7F9F+EBj + les bx, [bp+src] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + les bx, [bp+arg_6] + test byte ptr es:[bx+15h], 10h + jz short loc_80B8 + mov ax, word ptr [bp+src] + mov word ptr [bp+src+2], ds + mov word ptr [bp+src], ax + +loc_80B1: ; CODE XREF: sub_7F9F+EDj + mov [bp+var_14], 1 + jmp short $+2 + +loc_80B8: ; CODE XREF: sub_7F9F+107j + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + les bx, [bp+arg_6] + push word ptr es:[bx+12h] + push word ptr es:[bx+10h] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jnz short loc_8119 + mov dx, word ptr [bp+src+2] + mov ax, word ptr [bp+src] + mov [bp+var_16], dx + mov [bp+var_18], ax + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + les bx, [bp+arg_6] + push word ptr es:[bx+12h] + push word ptr es:[bx+10h] + push word ptr [bp+src+2] + push word ptr [bp+src] + push cs + call near ptr sub_7F1C + add sp, 0Ch + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + mov dx, word ptr [bp+src+2] + mov ax, word ptr [bp+src] + cmp dx, [bp+var_16] + jnz short loc_8114 + cmp ax, [bp+var_18] + jz short loc_8119 + +loc_8114: ; CODE XREF: sub_7F9F+16Ej + mov [bp+var_14], 1 + +loc_8119: ; CODE XREF: sub_7F9F+133j + ; sub_7F9F+173j + push [bp+n] + push ss + lea ax, [bp+src] + jmp loc_81ED +; --------------------------------------------------------------------------- + +loc_8123: ; CODE XREF: sub_7F9F+DDj sub_7F9F+E5j + les bx, [bp+arg_6] + test byte ptr es:[bx+14h], 1 + jz short loc_81A9 + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + les bx, [bp+arg_6] + push word ptr es:[bx+12h] + push word ptr es:[bx+10h] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jnz short loc_8172 + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + les bx, [bp+arg_6] + push word ptr es:[bx+12h] + push word ptr es:[bx+10h] + push word ptr [bp+src+2] + push word ptr [bp+src] + push cs + call near ptr sub_7F1C + add sp, 0Ch + mov word ptr [bp+src+2], dx + mov word ptr [bp+src], ax + mov [bp+var_14], 1 + +loc_8172: ; CODE XREF: sub_7F9F+1A8j + les bx, [bp+var_8] + test byte ptr es:[bx+8], 1 + jz short loc_81F0 + les bx, [bp+arg_0] + push word ptr es:[bx+0Eh] + les bx, [bp+arg_0] + push word ptr es:[bx+0Ch] + push word ptr es:[bx+0Ah] + push word ptr [bp+src+2] + push word ptr [bp+src] + push ss + les bx, [bp+arg_6] + push word ptr es:[bx+36h] + call sub_6CCE + add sp, 0Eh + +loc_81A2: ; CODE XREF: sub_7F9F+D5j + ; sub_7F9F+227j + mov [bp+var_14], 1 + jmp short loc_8209 +; --------------------------------------------------------------------------- + +loc_81A9: ; CODE XREF: sub_7F9F+18Cj + test cl, 20h + jz short loc_81C8 + push [bp+n] ; n + push ss + lea ax, [bp+src] + push ax ; src + push ss + les bx, [bp+arg_6] + push word ptr es:[bx+36h] ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + jmp short loc_81A2 +; --------------------------------------------------------------------------- + +loc_81C8: ; CODE XREF: sub_7F9F+20Dj + test cl, 10h + jz short loc_81F0 + les bx, [bp+arg_6] + mov ax, es:[bx+0Eh] + cmp ax, [bp+n] + jz short loc_81F0 + les bx, [bp+src] + mov ax, es:[bx] + mov [bp+var_10], ds + mov [bp+var_12], ax + mov ax, 4 + push ax + push ss + lea ax, [bp+var_12] + +loc_81ED: ; CODE XREF: sub_7F9F+181j + push ax + jmp short loc_81F9 +; --------------------------------------------------------------------------- + +loc_81F0: ; CODE XREF: sub_7F9F+1DBj + ; sub_7F9F+22Cj ... + push [bp+n] ; n + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + +loc_81F9: ; CODE XREF: sub_7F9F+24Fj + push ss + les bx, [bp+arg_6] + push word ptr es:[bx+36h] ; dest + nop + push cs + call near ptr _memcpy + add sp, 0Ah + +loc_8209: ; CODE XREF: sub_7F9F+208j + cmp [bp+var_14], 0 + jnz short loc_823F + les bx, [bp+var_8] + test byte ptr es:[bx+8], 2 + jz short loc_8237 + les bx, [bp+var_8] + push word ptr es:[bx+22h] + les bx, [bp+var_8] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + push word ptr [bp+src+2] + push word ptr [bp+src] + call sub_7CAB + add sp, 0Ah + +loc_8237: ; CODE XREF: sub_7F9F+278j + les bx, [bp+arg_6] + mov byte ptr es:[bx+38h], 0 + +loc_823F: ; CODE XREF: sub_7F9F+2Cj sub_7F9F+39j ... + pop di + pop si + mov sp, bp + pop bp + retn +sub_7F9F endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_8245 proc near ; CODE XREF: __Local_unwind+15p + ; __Return_unwind+15p ... + +var_20 = word ptr -20h +var_1E = word ptr -1Eh +var_1C = word ptr -1Ch +var_1A = dword ptr -1Ah +var_16 = dword ptr -16h +var_12 = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h +arg_E = word ptr 12h + + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov [bp+var_E], 0 + les bx, ss:16h + mov si, [bp+arg_0] + mov ax, ss:[si+arg_A] + mov es:[bx+6], ax + mov [bp+var_C], ax + les bx, ss:16h + mov si, [bp+arg_0] + mov ax, ss:[si+arg_C] + mov es:[bx+8], ax + mov bx, [bp+arg_0] + mov dx, ss:[bx+arg_4] + mov ax, ss:[bx+arg_2] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov ax, [bp+arg_0] + sub ax, es:[bx+4] + mov [bp+var_A], ax + mov bx, [bp+arg_0] + mov ax, ss:[bx+arg_8] + jmp loc_83EA +; --------------------------------------------------------------------------- + +loc_829D: ; CODE XREF: sub_8245+1B6j + mov ax, [bp+var_6] + mov [bp+var_12], ax + les bx, [bp+var_4] + add bx, [bp+var_12] + mov ax, es:[bx] + mov [bp+var_8], ax + add [bp+var_12], 2 + les bx, [bp+var_4] + add bx, [bp+var_12] + mov ax, es:[bx] + mov [bp+var_10], ax + add [bp+var_12], 2 + mov bx, [bp+arg_0] + mov ax, [bp+var_8] + mov ss:[bx+arg_8], ax + mov bx, [bp+var_10] + cmp bx, 5 + jbe short loc_82D8 + jmp loc_83E7 +; --------------------------------------------------------------------------- + +loc_82D8: ; CODE XREF: sub_8245+8Ej + add bx, bx + jmp cs:off_8404[bx] + +loc_82DF: ; DATA XREF: seg000:off_8404o + les bx, [bp+var_4] + add bx, [bp+var_12] + mov dx, es:[bx+6] + mov ax, es:[bx+4] + mov word ptr dword_1C664+2, dx + mov word ptr dword_1C664, ax + mov bx, [bp+arg_0] + mov ss:[bx+arg_E], 1 + push ds + pop es + assume es:dseg + push ds + mov ds, [bp+var_C] + push bp + mov bp, [bp+var_A] + call es:dword_1C664 + pop bp + pop ds + mov bx, [bp+arg_0] + mov ss:[bx+arg_E], 0 + jmp loc_83E7 +; --------------------------------------------------------------------------- + +loc_831A: ; CODE XREF: sub_8245+95j + ; DATA XREF: seg000:840Co + add [bp+var_12], 4 + mov dx, ss:18h + mov ax, ss:16h + jmp short loc_8349 +; --------------------------------------------------------------------------- + +loc_8329: ; CODE XREF: sub_8245+11Cj + les bx, [bp+var_16] + assume es:nothing + mov ax, es:[bx+24h] + cmp ax, [bp+arg_0] + jnz short loc_8343 + les bx, [bp+var_16] + mov ax, es:[bx+2Ah] + cmp ax, [bp+var_6] + jnz short loc_8343 + jmp short loc_8363 +; --------------------------------------------------------------------------- + +loc_8343: ; CODE XREF: sub_8245+EEj sub_8245+FAj + mov dx, word ptr [bp+var_16+2] + mov ax, word ptr [bp+var_16] + +loc_8349: ; CODE XREF: sub_8245+E2j + mov word ptr [bp+var_1A+2], dx + mov word ptr [bp+var_1A], ax + les bx, [bp+var_1A] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + or ax, dx + jnz short loc_8329 + +loc_8363: ; CODE XREF: sub_8245+FCj + les bx, [bp+var_16] + mov dx, es:[bx+2] + mov ax, es:[bx] + les bx, [bp+var_1A] + mov es:[bx+2], dx + mov es:[bx], ax + push word ptr [bp+var_16+2] + push word ptr [bp+var_16] + call sub_7CFB + pop cx + pop cx + push ds + les bx, [bp+var_16] + mov ds, word ptr es:[bx+18h] + push word ptr [bp+var_16+2] + push word ptr [bp+var_16] + les bx, [bp+var_16] + call dword ptr es:[bx+1Ah] + pop cx + pop cx + pop ds + jmp short loc_83E7 +; --------------------------------------------------------------------------- + +loc_839C: ; CODE XREF: sub_8245+95j + ; DATA XREF: seg000:840Eo + les bx, [bp+var_4] + add bx, [bp+var_12] + mov ax, es:[bx] + mov [bp+var_1C], ax + add [bp+var_12], 2 + les bx, [bp+var_4] + add bx, [bp+var_12] + mov ax, es:[bx] + mov [bp+var_1E], ds + mov [bp+var_20], ax + mov ax, word ptr [bp+var_4+2] + mov dx, [bp+var_20] + mov [bp+var_1E], ax + mov [bp+var_20], dx + push [bp+var_A] + push [bp+arg_0] + mov ax, [bp+var_1C] + add ax, [bp+var_E] + cwd + push dx + push ax + push [bp+var_1E] + push [bp+var_20] + call sub_8E1B + add sp, 0Ch + mov [bp+var_E], ax + jmp short $+2 + +loc_83E7: ; CODE XREF: sub_8245+90j sub_8245+95j ... + mov ax, [bp+var_8] + +loc_83EA: ; CODE XREF: sub_8245+55j + mov [bp+var_6], ax + cmp [bp+var_6], 0 + jz short loc_83FE + mov ax, [bp+var_6] + cmp ax, [bp+arg_2] + jz short loc_83FE + jmp loc_829D +; --------------------------------------------------------------------------- + +loc_83FE: ; CODE XREF: sub_8245+1ACj + ; sub_8245+1B4j + pop di + pop si + mov sp, bp + pop bp + retn +sub_8245 endp + +; --------------------------------------------------------------------------- +off_8404 dw offset loc_82DF ; DATA XREF: sub_8245+95r + dw offset loc_83E7 + dw offset loc_83E7 + dw offset loc_83E7 + dw offset loc_831A + dw offset loc_839C + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__Local_unwind proc far + +var_2 = word ptr -2 +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, ss:14h + mov [bp+var_2], ax + push [bp+arg_0] + push [bp+var_2] + call sub_8245 + pop cx + pop cx + pop di + pop si + mov sp, bp + pop bp + retf +__Local_unwind endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__Return_unwind proc far + +var_2 = word ptr -2 + + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, ss:14h + mov [bp+var_2], ax + xor ax, ax + push ax + push [bp+var_2] + call sub_8245 + pop cx + pop cx + mov bx, [bp+var_2] + mov ax, ss:[bx] + mov ss:14h, ax + pop di + pop si + mov sp, bp + pop bp + retf +__Return_unwind endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_845A proc near ; CODE XREF: __ExceptionHandler+1B1p + +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = dword ptr 8 + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, 4 + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + jmp short loc_84C8 +; --------------------------------------------------------------------------- + +loc_8473: ; CODE XREF: sub_845A+78j + les bx, [bp+var_4] + mov dx, es:[bx+6] + mov ax, es:[bx+4] + mov [bp+var_6], dx + mov [bp+var_8], ax + mov ax, [bp+var_8] + or ax, [bp+var_6] + jz short loc_84BC + xor ax, ax + push ax + les bx, [bp+arg_4] + push word ptr es:[bx+0Ch] + push [bp+var_6] + push [bp+var_8] + les bx, [bp+arg_4] + push word ptr es:[bx+0Ah] + push word ptr es:[bx+8] + les bx, [bp+arg_4] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + call sub_6BC9 + add sp, 10h + or ax, ax + jz short loc_84C4 + +loc_84BC: ; CODE XREF: sub_845A+30j + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + jmp short loc_84D8 +; --------------------------------------------------------------------------- + +loc_84C4: ; CODE XREF: sub_845A+60j + add word ptr [bp+var_4], 10h + +loc_84C8: ; CODE XREF: sub_845A+17j + les bx, [bp+var_4] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_8473 + xor dx, dx + xor ax, ax + +loc_84D8: ; CODE XREF: sub_845A+68j + pop di + pop si + mov sp, bp + pop bp + retn +sub_845A endp + +; --------------------------------------------------------------------------- + db 2 dup(2Ah), 42h, 2 dup(43h), 78h, 68h, 31h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__ExceptionHandler proc far ; DATA XREF: ___InitExceptBlocks+28o + +var_38 = word ptr -38h +var_36 = word ptr -36h +var_34 = word ptr -34h +var_32 = word ptr -32h +var_30 = word ptr -30h +var_2E = word ptr -2Eh +var_2C = word ptr -2Ch +var_2A = word ptr -2Ah +var_28 = word ptr -28h +var_26 = word ptr -26h +var_24 = dword ptr -24h +var_20 = dword ptr -20h +var_1C = word ptr -1Ch +var_1A = word ptr -1Ah +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = dword ptr -10h +var_C = dword ptr -0Ch +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_E = word ptr 14h +arg_10 = word ptr 16h +arg_12 = word ptr 18h +arg_14 = word ptr 1Ah + + push bp + mov bp, sp + sub sp, 38h + push si + push di + mov ax, [bp+arg_0] + mov [bp+var_2], ax + mov ax, [bp+arg_4] + mov [bp+var_4], ax + mov dx, [bp+arg_8] + mov ax, [bp+arg_6] + mov [bp+var_6], dx + mov [bp+var_8], ax + mov bx, [bp+var_2] + mov dx, ss:[bx+arg_14] + mov ax, ss:[bx+arg_12] + mov word ptr [bp+var_C+2], dx + mov word ptr [bp+var_C], ax + mov bx, [bp+var_4] + mov dx, ss:[bx+arg_2] + mov ax, ss:[bx+arg_0] + mov word ptr [bp+var_10+2], dx + mov word ptr [bp+var_10], ax + les bx, [bp+var_10] + mov ax, [bp+var_4] + sub ax, es:[bx+4] + mov [bp+var_16], ax + mov bx, [bp+var_4] + mov ax, ss:[bx+arg_4] + mov [bp+var_18], ax + les bx, ss:16h + mov si, [bp+var_4] + mov ax, ss:[si+arg_8] + mov es:[bx+6], ax + mov [bp+var_1A], ax + les bx, ss:16h + mov si, [bp+var_4] + mov ax, ss:[si+arg_A] + mov es:[bx+8], ax + mov [bp+var_1C], ax + mov bx, [bp+var_2] + test byte ptr ss:[bx+4], 6 + jnz short loc_8572 + jmp loc_861A +; --------------------------------------------------------------------------- + +loc_8572: ; CODE XREF: __ExceptionHandler+87j + xor ax, ax + push ax + push [bp+var_4] + call sub_8245 + pop cx + pop cx + mov bx, [bp+var_2] + cmp word ptr ss:[bx+2], 0EEFh + jz short loc_858B + jmp loc_884D +; --------------------------------------------------------------------------- + +loc_858B: ; CODE XREF: __ExceptionHandler+A0j + cmp word ptr ss:[bx], 0FACEh + jz short loc_8595 + jmp loc_884D +; --------------------------------------------------------------------------- + +loc_8595: ; CODE XREF: __ExceptionHandler+AAj + les bx, [bp+var_10] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_20+2], dx + mov word ptr [bp+var_20], ax + mov ax, word ptr [bp+var_20] + or ax, word ptr [bp+var_20+2] + jnz short loc_85B0 + jmp loc_884D +; --------------------------------------------------------------------------- + +loc_85B0: ; CODE XREF: __ExceptionHandler+C5j + jmp short loc_85EE +; --------------------------------------------------------------------------- + +loc_85B2: ; CODE XREF: __ExceptionHandler+112j + mov ax, 1 + push ax + les bx, [bp+var_C] + push word ptr es:[bx+0Ch] + les bx, [bp+var_20] + push word ptr es:[bx+2] + push word ptr es:[bx] + les bx, [bp+var_C] + push word ptr es:[bx+0Ah] + push word ptr es:[bx+8] + les bx, [bp+var_C] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + call sub_6BC9 + add sp, 10h + or ax, ax + jz short loc_85EA + jmp loc_884D +; --------------------------------------------------------------------------- + +loc_85EA: ; CODE XREF: __ExceptionHandler+FFj + add word ptr [bp+var_20], 4 + +loc_85EE: ; CODE XREF: __ExceptionHandler:loc_85B0j + les bx, [bp+var_20] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_85B2 + mov ax, ss:14h + mov word ptr [bp+var_24+2], ax + mov bx, [bp+var_4] + mov ax, ss:[bx] + mov ss:14h, ax + nop + push cs + call near ptr ___call_unexpected +; --------------------------------------------------------------------------- + mov ax, word ptr [bp+var_24+2] + mov ss:14h, ax + jmp loc_884D +; --------------------------------------------------------------------------- + +loc_861A: ; CODE XREF: __ExceptionHandler+89j + mov bx, [bp+var_4] + mov ax, ss:[bx+arg_6] + jmp loc_8841 +; --------------------------------------------------------------------------- + +loc_8624: ; CODE XREF: __ExceptionHandler+364j + mov ax, [bp+var_12] + mov word ptr [bp+var_20], ax + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + mov ax, es:[bx] + mov [bp+var_14], ax + add word ptr [bp+var_20], 2 + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + mov ax, es:[bx] + mov word ptr [bp+var_20+2], ax + add word ptr [bp+var_20], 2 + mov bx, word ptr [bp+var_20+2] + cmp bx, 5 + jbe short loc_8655 + jmp loc_883E +; --------------------------------------------------------------------------- + +loc_8655: ; CODE XREF: __ExceptionHandler+16Aj + add bx, bx + jmp cs:off_8856[bx] + +loc_865C: ; DATA XREF: seg000:885Co + mov bx, [bp+var_2] + cmp word ptr ss:[bx+2], 0EEFh + jz short loc_866A + jmp loc_883E +; --------------------------------------------------------------------------- + +loc_866A: ; CODE XREF: __ExceptionHandler+17Fj + cmp word ptr ss:[bx], 0FACEh + jz short loc_8674 + jmp loc_883E +; --------------------------------------------------------------------------- + +loc_8674: ; CODE XREF: __ExceptionHandler+189j + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_26], dx + mov [bp+var_28], ax + add word ptr [bp+var_20], 4 + push word ptr [bp+var_C+2] + push word ptr [bp+var_C] + push [bp+var_26] + push [bp+var_28] + call sub_845A + add sp, 8 + mov word ptr [bp+var_24+2], dx + mov word ptr [bp+var_24], ax + mov ax, word ptr [bp+var_24] + or ax, word ptr [bp+var_24+2] + jnz short loc_86AE + jmp loc_883E +; --------------------------------------------------------------------------- + +loc_86AE: ; CODE XREF: __ExceptionHandler+1C3j + les bx, [bp+var_C] + mov ax, [bp+var_4] + mov es:[bx+24h], ax + les bx, [bp+var_C] + mov dx, word ptr [bp+var_24+2] + mov ax, word ptr [bp+var_24] + mov es:[bx+28h], dx + mov es:[bx+26h], ax + les bx, [bp+var_C] + mov ax, word ptr [bp+var_20] + mov es:[bx+2Ah], ax + mov ax, [bp+var_12] + mov [bp+var_30], ax + mov ax, word ptr [bp+var_20] + mov [bp+var_2E], ax + les bx, [bp+var_24] + +loc_86E2: ; CODE XREF: __ExceptionHandler+355j + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_2A], dx + mov [bp+var_2C], ax + push [bp+var_2] + push [bp+var_4] + push cs + call near ptr __Global_unwind + pop cx + pop cx + push [bp+var_30] + push [bp+var_4] + call sub_8245 + pop cx + pop cx + mov bx, [bp+var_4] + mov ax, [bp+var_2E] + mov ss:[bx+arg_6], ax + cmp word ptr [bp+var_20+2], 3 + jnz short loc_8734 + push [bp+var_16] + push [bp+var_26] + push [bp+var_28] + push word ptr [bp+var_C+2] + push word ptr [bp+var_C] + push [bp+var_4] + push word ptr [bp+var_24+2] + push word ptr [bp+var_24] + call sub_7F9F + add sp, 10h + +loc_8734: ; CODE XREF: __ExceptionHandler+22Ej + mov dx, [bp+var_2A] + mov ax, [bp+var_2C] + mov si, [bp+var_1C] + mov ds, [bp+var_1A] + mov bx, [bp+var_18] + mov cx, [bp+var_16] + push cs + call near ptr ___JumpToCatch__ + jmp loc_883E +; --------------------------------------------------------------------------- + +loc_874D: ; CODE XREF: __ExceptionHandler+171j + ; DATA XREF: seg000:8858o + mov bx, [bp+var_2] + cmp word ptr ss:[bx+2], 0EEFh + jnz short loc_8762 + cmp word ptr ss:[bx], 0FACEh + jnz short loc_8762 + jmp loc_883E +; --------------------------------------------------------------------------- + +loc_8762: ; CODE XREF: __ExceptionHandler+270j + ; __ExceptionHandler+277j + mov ax, [bp+var_2] + mov [bp+var_36], ax + mov dx, [bp+var_6] + mov ax, [bp+var_8] + mov [bp+var_32], dx + mov [bp+var_34], ax + mov bx, [bp+var_2] + mov dx, ss:[bx+2] + mov ax, ss:[bx] + mov bx, [bp+var_4] + mov ss:[bx+arg_10], dx + mov ss:[bx+arg_E], ax + lea ax, [bp+var_36] + mov bx, [bp+var_4] + mov ss:[bx+arg_12], ax + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr dword_1C668+2, dx + mov word ptr dword_1C668, ax + mov ax, ds + mov es, ax + assume es:dseg + push si + mov si, [bp+var_1C] + push ds + mov ds, [bp+var_1A] + push bp + mov bp, [bp+var_16] + call es:dword_1C668 + pop bp + pop ds + pop si + mov [bp+var_38], ax + jmp short loc_87F9 +; --------------------------------------------------------------------------- + +loc_87C4: ; CODE XREF: __ExceptionHandler+171j + ; DATA XREF: seg000:885Ao + mov bx, [bp+var_2] + cmp word ptr ss:[bx+2], 0EEFh + jnz short loc_87D8 + cmp word ptr ss:[bx], 0FACEh + jnz short loc_87D8 + jmp short loc_883E +; --------------------------------------------------------------------------- + +loc_87D8: ; CODE XREF: __ExceptionHandler+2E7j + ; __ExceptionHandler+2EEj + mov bx, [bp+var_2] + mov dx, ss:[bx+2] + mov ax, ss:[bx] + mov bx, [bp+var_4] + mov ss:[bx+arg_10], dx + mov ss:[bx+arg_E], ax + les bx, [bp+var_10] + assume es:nothing + add bx, word ptr [bp+var_20] + mov ax, es:[bx] + mov [bp+var_38], ax + +loc_87F9: ; CODE XREF: __ExceptionHandler+2DCj + cmp [bp+var_38], 0 + jge short loc_8817 + mov bx, [bp+var_2] + test byte ptr ss:[bx+4], 1 + jz short loc_8813 + mov bx, [bp+var_4] + mov ax, [bp+var_14] + mov ss:[bx+arg_6], ax + +loc_8813: ; CODE XREF: __ExceptionHandler+321j + xor ax, ax + jmp short loc_8850 +; --------------------------------------------------------------------------- + +loc_8817: ; CODE XREF: __ExceptionHandler+317j + cmp [bp+var_38], 0 + jnz short loc_881F + jmp short loc_883E +; --------------------------------------------------------------------------- + +loc_881F: ; CODE XREF: __ExceptionHandler+335j + mov bx, [bp+var_4] + mov ss:[bx+arg_12], 0 + add word ptr [bp+var_20], 4 + mov ax, [bp+var_14] + mov [bp+var_2E], ax + mov [bp+var_30], ax + les bx, [bp+var_10] + add bx, word ptr [bp+var_20] + jmp loc_86E2 +; --------------------------------------------------------------------------- + +loc_883E: ; CODE XREF: __ExceptionHandler+16Cj + ; __ExceptionHandler+171j ... + mov ax, [bp+var_14] + +loc_8841: ; CODE XREF: __ExceptionHandler+13Bj + mov [bp+var_12], ax + cmp [bp+var_12], 0 + jz short loc_884D + jmp loc_8624 +; --------------------------------------------------------------------------- + +loc_884D: ; CODE XREF: __ExceptionHandler+A2j + ; __ExceptionHandler+ACj ... + mov ax, 1 + +loc_8850: ; CODE XREF: __ExceptionHandler+32Fj + pop di + pop si + mov sp, bp + pop bp + retf +__ExceptionHandler endp + +; --------------------------------------------------------------------------- +off_8856 dw offset loc_883E ; DATA XREF: __ExceptionHandler+171r + dw offset loc_874D + dw offset loc_87C4 + dw offset loc_865C + dw offset loc_883E + dw offset loc_883E + db 4 dup(0), 0F5h, 88h + dw seg seg000 + db 14h dup(0), 5, 89h + dw seg seg000 + db 14h dup(0), 0E2h, 0FFh, 2 dup(0), 3, 0, 7Ah, 88h + dw seg seg000 + db 2 dup(0), 4, 0, 6, 0, 3, 0, 62h, 88h + dw seg seg000 + db 6, 0, 4, 0 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_88B0 proc far ; CODE XREF: sub_899D+50p + +var_1E = word ptr -1Eh +var_12 = word ptr -12h +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 8892h + nop + push cs + call near ptr ___InitExceptBlocks + mov [bp+var_12], 6 + mov [bp+var_12], 12h + push [bp+arg_8] + les bx, [bp+arg_4] + push word ptr es:[bx+22h] + les bx, [bp+arg_4] + push word ptr es:[bx+20h] + push word ptr es:[bx+1Eh] + push [bp+arg_2] + push [bp+arg_0] + call sub_701C + add sp, 0Ch + mov [bp+var_12], 6 + jmp short loc_88FE +; --------------------------------------------------------------------------- + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_88FE: ; CODE XREF: sub_88B0+43j + mov [bp+var_12], 0 + jmp short loc_890E +; --------------------------------------------------------------------------- + nop + push cs + call near ptr ___call_terminate +; --------------------------------------------------------------------------- + push cs + call near ptr @_CatchCleanup$qv ; _CatchCleanup(void) + +loc_890E: ; CODE XREF: sub_88B0+53j + push [bp+var_1E] + nop + push cs + call near ptr ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_88B0 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_891C proc far ; CODE XREF: sub_899D+DCp + ; sub_899D+162p ... + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov cx, [bp+arg_C] + jmp short loc_898B +; --------------------------------------------------------------------------- + +loc_8929: ; CODE XREF: sub_891C+79j + les bx, [bp+arg_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, es:[bx+4] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + cmp [bp+arg_E], 0 + jz short loc_8951 + les bx, [bp+var_4] + mov ax, es:[bx] + mov dx, word ptr [bp+var_4+2] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_8951: ; CODE XREF: sub_891C+24j + les bx, [bp+arg_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + test byte ptr es:[bx+8], 2 + jz short loc_898B + push [bp+arg_10] + xor ax, ax + push ax + xor ax, ax + push ax + push cx + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + nop + push cs + call near ptr sub_899D + add sp, 10h + xor cx, cx + +loc_898B: ; CODE XREF: sub_891C+Bj sub_891C+4Dj + sub word ptr [bp+arg_4], 8 + mov ax, word ptr [bp+arg_4] + cmp ax, [bp+arg_8] + jnb short loc_8929 + pop di + pop si + mov sp, bp + pop bp + retf +sub_891C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_899D proc far ; CODE XREF: sub_891C+67p + ; sub_899D+25Ep ... + +var_2A = word ptr -2Ah +var_28 = word ptr -28h +var_26 = word ptr -26h +var_24 = word ptr -24h +var_22 = dword ptr -22h +var_1E = word ptr -1Eh +var_1C = word ptr -1Ch +var_1A = word ptr -1Ah +var_18 = dword ptr -18h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = dword ptr -10h +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = dword ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h + + push bp + mov bp, sp + sub sp, 2Ah + push si + push di + cmp [bp+arg_C], 0 + jz short loc_89B4 + les bx, [bp+arg_4] + mov ax, es:[bx+1Ah] + jmp short loc_89BB +; --------------------------------------------------------------------------- + +loc_89B4: ; CODE XREF: sub_899D+Cj + les bx, [bp+arg_4] + mov ax, es:[bx+1Ch] + +loc_89BB: ; CODE XREF: sub_899D+15j + mov [bp+var_1A], 0 + mov [bp+var_1C], ax + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jz short loc_89DD + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + cmp dx, [bp+var_1A] + jb short loc_89F6 + jnz short loc_89DD + cmp ax, [bp+var_1C] + jb short loc_89F6 + +loc_89DD: ; CODE XREF: sub_899D+2Cj sub_899D+39j + push [bp+arg_C] + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_88B0 + add sp, 0Ah + jmp loc_8C62 +; --------------------------------------------------------------------------- + +loc_89F6: ; CODE XREF: sub_899D+37j sub_899D+3Ej + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov [bp+var_1A], dx + mov [bp+var_1C], ax + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ch] + mov word ptr [bp+var_10+2], dx + mov word ptr [bp+var_10], ax + mov [bp+var_A], dx + mov [bp+var_C], ax + cmp [bp+arg_C], 0 + jz short loc_8A8F + +loc_8A21: ; CODE XREF: sub_899D+F0j + les bx, [bp+var_10] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_1E], dx + mov word ptr [bp+var_22+2], ax + mov ax, word ptr [bp+var_22+2] + or ax, [bp+var_1E] + jz short loc_8A8F + les bx, [bp+var_22+2] + test byte ptr es:[bx+8], 2 + jz short loc_8A89 + les bx, [bp+var_22+2] + mov bx, es:[bx+1Ch] + xor ax, ax + cmp ax, [bp+var_1A] + jb short loc_8A82 + jnz short loc_8A58 + cmp bx, [bp+var_1C] + jb short loc_8A82 + +loc_8A58: ; CODE XREF: sub_899D+B4j + push [bp+arg_E] + mov ax, 1 + push ax + push [bp+var_1C] + push [bp+var_A] + push [bp+var_C] + mov ax, word ptr [bp+var_10] + add ax, 8 + push word ptr [bp+var_10+2] + push ax + +loc_8A72: ; CODE XREF: sub_899D+2BBj + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_891C + add sp, 12h + jmp loc_8C62 +; --------------------------------------------------------------------------- + +loc_8A82: ; CODE XREF: sub_899D+B2j sub_899D+B9j + sub [bp+var_1C], bx + sbb [bp+var_1A], 0 + +loc_8A89: ; CODE XREF: sub_899D+A4j + add word ptr [bp+var_10], 8 + jmp short loc_8A21 +; --------------------------------------------------------------------------- + +loc_8A8F: ; CODE XREF: sub_899D+82j sub_899D+9Aj + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ah] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + mov [bp+var_2], dx + mov [bp+var_4], ax + +loc_8AA8: ; CODE XREF: sub_899D+17Fj + les bx, [bp+var_8] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_1E], dx + mov word ptr [bp+var_22+2], ax + mov ax, word ptr [bp+var_22+2] + or ax, [bp+var_1E] + jz short loc_8B1E + les bx, [bp+var_22+2] + test byte ptr es:[bx+8], 2 + jz short loc_8B18 + les bx, [bp+var_22+2] + mov bx, es:[bx+1Ch] + xor ax, ax + cmp ax, [bp+var_1A] + jb short loc_8B11 + jnz short loc_8ADF + cmp bx, [bp+var_1C] + jb short loc_8B11 + +loc_8ADF: ; CODE XREF: sub_899D+13Bj + push [bp+arg_E] + xor ax, ax + push ax + push [bp+var_1C] + push [bp+var_2] + push [bp+var_4] + mov ax, word ptr [bp+var_8] + add ax, 8 + push word ptr [bp+var_8+2] + push ax + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_891C + add sp, 12h + cmp [bp+arg_C], 0 + jnz short loc_8B0E + jmp loc_8C62 +; --------------------------------------------------------------------------- + +loc_8B0E: ; CODE XREF: sub_899D+16Cj + jmp loc_8C42 +; --------------------------------------------------------------------------- + +loc_8B11: ; CODE XREF: sub_899D+139j + ; sub_899D+140j + sub [bp+var_1C], bx + sbb [bp+var_1A], 0 + +loc_8B18: ; CODE XREF: sub_899D+12Bj + add word ptr [bp+var_8], 8 + jmp short loc_8AA8 +; --------------------------------------------------------------------------- + +loc_8B1E: ; CODE XREF: sub_899D+121j + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+24h] + mov word ptr [bp+var_18+2], dx + mov word ptr [bp+var_18], ax + mov [bp+var_12], dx + mov [bp+var_14], ax + +loc_8B37: ; CODE XREF: sub_899D+2C2j + les bx, [bp+var_18] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_22+2], dx + mov word ptr [bp+var_22], ax + mov [bp+var_1E], 1 + les bx, [bp+var_22] + test byte ptr es:[bx+3], 4 + jz short loc_8B71 + les bx, [bp+var_22] + mov ax, es:[bx+0Ah] + mov [bp+var_1E], ax + les bx, [bp+var_22] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_22+2], dx + mov word ptr [bp+var_22], ax + +loc_8B71: ; CODE XREF: sub_899D+1B7j + les bx, [bp+var_22] + mov ax, es:[bx+1Ah] + imul [bp+var_1E] + mov bx, ax + xor ax, ax + cmp ax, [bp+var_1A] + ja short loc_8B95 + jb short loc_8B8B + cmp bx, [bp+var_1C] + jnb short loc_8B95 + +loc_8B8B: ; CODE XREF: sub_899D+1E7j + sub [bp+var_1C], bx + sbb [bp+var_1A], 0 + jmp loc_8C5B +; --------------------------------------------------------------------------- + +loc_8B95: ; CODE XREF: sub_899D+1E5j + ; sub_899D+1ECj ... + les bx, [bp+var_18] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, es:[bx+4] + mov [bp+var_24], dx + mov [bp+var_26], ax + les bx, [bp+var_18] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov [bp+var_28], dx + mov [bp+var_2A], ax + cmp [bp+var_1E], 1 + jbe short loc_8BE1 + push [bp+arg_E] + push [bp+var_1A] + push [bp+var_1C] + les bx, [bp+var_18] + push word ptr es:[bx+2] + push word ptr es:[bx] + push [bp+var_24] + push [bp+var_26] + nop + push cs + call near ptr sub_8C68 + add sp, 0Eh + jmp short loc_8C01 +; --------------------------------------------------------------------------- + +loc_8BE1: ; CODE XREF: sub_899D+21Fj + push [bp+arg_E] + mov ax, 1 + push ax + push [bp+var_1A] + push [bp+var_1C] + push [bp+var_28] + push [bp+var_2A] + push [bp+var_24] + push [bp+var_26] + push cs + call near ptr sub_899D + add sp, 10h + +loc_8C01: ; CODE XREF: sub_899D+242j + mov [bp+var_1A], 0 + mov [bp+var_1C], 0 + sub word ptr [bp+var_18], 6 + mov ax, word ptr [bp+var_18] + cmp ax, [bp+var_14] + jb short loc_8C1A + jmp loc_8B95 +; --------------------------------------------------------------------------- + +loc_8C1A: ; CODE XREF: sub_899D+278j + push [bp+arg_E] + xor ax, ax + push ax + xor ax, ax + push ax + push [bp+var_2] + push [bp+var_4] + push word ptr [bp+var_8+2] + push word ptr [bp+var_8] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_891C + add sp, 12h + cmp [bp+arg_C], 0 + jz short loc_8C62 + +loc_8C42: ; CODE XREF: sub_899D:loc_8B0Ej + push [bp+arg_E] + mov ax, 1 + push ax + xor ax, ax + push ax + push [bp+var_A] + push [bp+var_C] + push word ptr [bp+var_10+2] + push word ptr [bp+var_10] + jmp loc_8A72 +; --------------------------------------------------------------------------- + +loc_8C5B: ; CODE XREF: sub_899D+1F5j + add word ptr [bp+var_18], 6 + jmp loc_8B37 +; --------------------------------------------------------------------------- + +loc_8C62: ; CODE XREF: sub_899D+56j sub_899D+E2j ... + pop di + pop si + mov sp, bp + pop bp + retf +sub_899D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_8C68 proc far ; CODE XREF: sub_899D+23Cp + ; sub_8E1B+316p + +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h + + push bp + mov bp, sp + sub sp, 0Eh + push si + push di + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov ax, es:[bx+0Ah] + mov [bp+var_6], ax + les bx, [bp+var_4] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov ax, es:[bx+1Ah] + mov [bp+var_8], 0 + mov [bp+var_A], ax + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jnz short loc_8CC2 + mov bx, [bp+var_6] + xor cx, cx + mov dx, [bp+var_8] + mov ax, [bp+var_A] + call N_LXMUL@ + mov [bp+arg_A], dx + mov [bp+arg_8], ax + +loc_8CC2: ; CODE XREF: sub_8C68+44j + push [bp+var_8] + push [bp+var_A] + push [bp+arg_A] + push [bp+arg_8] + call near ptr N_LUDIV@ + mov [bp+var_C], dx + mov [bp+var_E], ax + mov cx, [bp+var_C] + mov bx, [bp+var_E] + mov dx, [bp+var_8] + mov ax, [bp+var_A] + call N_LXMUL@ + sub [bp+arg_8], ax + sbb [bp+arg_A], dx + les bx, [bp+var_4] + mov bx, es:[bx] + xor cx, cx + mov dx, [bp+var_C] + mov ax, [bp+var_E] + call N_LXMUL@ + mov dx, [bp+arg_2] + add ax, [bp+arg_0] + mov [bp+arg_2], dx + mov [bp+arg_0], ax + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jz short loc_8D52 + push [bp+arg_C] + mov ax, 1 + push ax + push [bp+arg_A] + push [bp+arg_8] + jmp short loc_8D3F +; --------------------------------------------------------------------------- + +loc_8D20: ; CODE XREF: sub_8C68+FAj + les bx, [bp+var_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + sub ax, es:[bx] + mov [bp+arg_2], dx + mov [bp+arg_0], ax + push [bp+arg_C] + mov ax, 1 + push ax + push [bp+var_8] + push [bp+var_A] + +loc_8D3F: ; CODE XREF: sub_8C68+B6j + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr sub_899D + add sp, 10h + +loc_8D52: ; CODE XREF: sub_8C68+A7j + mov ax, [bp+var_C] + mov dx, [bp+var_E] + sub [bp+var_E], 1 + sbb [bp+var_C], 0 + or dx, ax + jnz short loc_8D20 + pop di + pop si + mov sp, bp + pop bp + retf +sub_8C68 endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_8D6A proc far ; CODE XREF: sub_8E1B+1B1p + ; sub_8E1B+2E4p + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov cx, [bp+arg_4] + mov bx, cx + mov dx, ss:[bx+2] + mov ax, ss:[bx] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + mov ax, es:[bx+8] + and ax, 50h + cmp ax, 50h ; 'P' + jnz short loc_8E0F + les bx, [bp+var_4] + cmp word ptr es:[bx+6], 0FFFFh + jz short loc_8E0F + les bx, [bp+var_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, es:[bx+6] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_4] + test byte ptr es:[bx+9], 10h + jz short loc_8DC9 + les bx, [bp+var_8] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], dx + jmp short loc_8DD2 +; --------------------------------------------------------------------------- + +loc_8DC9: ; CODE XREF: sub_8D6A+4Ej + les bx, [bp+var_8] + mov ax, es:[bx] + mov word ptr [bp+var_8+2], ds + +loc_8DD2: ; CODE XREF: sub_8D6A+5Dj + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + sub ax, es:[bx-4] + mov [bp+arg_2], dx + mov [bp+arg_0], ax + les bx, [bp+var_8] + mov dx, word ptr [bp+var_8+2] + mov ax, word ptr [bp+var_8] + sub ax, es:[bx-2] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov bx, cx + mov ss:[bx+2], dx + mov ss:[bx], ax + +loc_8E0F: ; CODE XREF: sub_8D6A+27j sub_8D6A+31j + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +sub_8D6A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_8E1B proc near ; CODE XREF: sub_8245+197p + +driver = dword ptr -20h +var_1C = dword ptr -1Ch +var_18 = word ptr -18h +var_16 = dword ptr -16h +var_12 = dword ptr -12h +var_E = word ptr -0Eh +var_C = dword ptr -0Ch +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_16 = word ptr 1Ah +arg_18 = word ptr 1Ch + + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov [bp+var_E], 0 + cmp word ptr [bp+arg_0], 0FFFFh + jnz short loc_8E31 + jmp loc_921E +; --------------------------------------------------------------------------- + +loc_8E31: ; CODE XREF: sub_8E1B+11j + mov bx, [bp+arg_8] + mov dx, ss:[bx+arg_18] + mov ax, ss:[bx+arg_16] + mov [bp+var_2], dx + mov [bp+var_4], ax + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + mov dx, es:[bx+2] + mov ax, es:[bx] + sub ax, [bp+var_4] + sbb dx, [bp+var_2] + mov [bp+var_6], dx + mov [bp+var_8], ax + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + sub [bp+var_8], ax + sbb [bp+var_6], dx + les bx, [bp+arg_0] + test byte ptr es:[bx+4], 20h + jz short loc_8E8A + les bx, [bp+arg_0] + les bx, es:[bx] + les bx, es:[bx+6] + mov ax, es:[bx+1Ah] + mov [bp+var_6], 0 + mov [bp+var_8], ax + +loc_8E8A: ; CODE XREF: sub_8E1B+57j + les bx, [bp+arg_0] + test byte ptr es:[bx+5], 1 + jz short loc_8EA1 + les bx, [bp+arg_0] + les bx, es:[bx] + mov ax, es:[bx+1Ch] + jmp loc_9220 +; --------------------------------------------------------------------------- + +loc_8EA1: ; CODE XREF: sub_8E1B+77j + cmp [bp+var_6], 0 + jg short loc_8ED3 + jnz short loc_8EAF + cmp [bp+var_8], 0 + ja short loc_8ED3 + +loc_8EAF: ; CODE XREF: sub_8E1B+8Cj + les bx, [bp+arg_0] + mov ax, es:[bx+4] + and ax, 3 + cmp ax, 3 + jz short loc_8EC1 + jmp loc_921E +; --------------------------------------------------------------------------- + +loc_8EC1: ; CODE XREF: sub_8E1B+A1j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + mov word ptr [bp+var_C+2], dx + mov word ptr [bp+var_C], ax + inc [bp+var_E] + jmp loc_9038 +; --------------------------------------------------------------------------- + +loc_8ED3: ; CODE XREF: sub_8E1B+8Aj sub_8E1B+92j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + mov word ptr [bp+var_C+2], dx + mov word ptr [bp+var_C], ax + +loc_8EDF: ; CODE XREF: sub_8E1B+21Aj + les bx, [bp+var_C] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_8EF2 + sub word ptr [bp+var_C], 0Ah + jmp loc_9038 +; --------------------------------------------------------------------------- + +loc_8EF2: ; CODE XREF: sub_8E1B+CEj + les bx, [bp+var_C] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + mov [bp+var_18], 1 + les bx, [bp+var_12] + test byte ptr es:[bx+2], 10h + jnz short loc_8F1A + jmp loc_8FE4 +; --------------------------------------------------------------------------- + +loc_8F1A: ; CODE XREF: sub_8E1B+FAj + les bx, [bp+var_12] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + les bx, [bp+var_12] + test byte ptr es:[bx+2], 2 + jnz short loc_8F3E + jmp loc_8FE4 +; --------------------------------------------------------------------------- + +loc_8F3E: ; CODE XREF: sub_8E1B+11Ej + les bx, [bp+var_12] + test byte ptr es:[bx+8], 20h + jnz short loc_8F4B + jmp loc_8FE4 +; --------------------------------------------------------------------------- + +loc_8F4B: ; CODE XREF: sub_8E1B+12Bj + les bx, [bp+var_C] + test byte ptr es:[bx+4], 8 + jnz short loc_8F58 + jmp loc_8FE4 +; --------------------------------------------------------------------------- + +loc_8F58: ; CODE XREF: sub_8E1B+138j + les bx, [bp+var_C] + test byte ptr es:[bx+4], 4 + jz short loc_8F71 + les bx, [bp+var_C] + mov ax, es:[bx+6] + add ax, [bp+arg_A] + mov word ptr [bp+var_1C+2], ss + jmp short loc_8F7F +; --------------------------------------------------------------------------- + +loc_8F71: ; CODE XREF: sub_8E1B+145j + les bx, [bp+var_C] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_1C+2], dx + +loc_8F7F: ; CODE XREF: sub_8E1B+154j + mov word ptr [bp+var_1C], ax + mov dx, word ptr [bp+var_1C+2] + mov ax, word ptr [bp+var_1C] + mov word ptr [bp+driver+2], dx + mov word ptr [bp+driver], ax + les bx, [bp+var_C] + test byte ptr es:[bx+4], 80h + jz short loc_8FA7 + les bx, [bp+driver] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_1C+2], dx + jmp short loc_8FB0 +; --------------------------------------------------------------------------- + +loc_8FA7: ; CODE XREF: sub_8E1B+17Bj + les bx, [bp+driver] + mov ax, es:[bx] + mov word ptr [bp+var_1C+2], ds + +loc_8FB0: ; CODE XREF: sub_8E1B+18Aj + mov word ptr [bp+var_1C], ax + les bx, [bp+var_C] + test byte ptr es:[bx+4], 40h + jz short loc_8FC1 + add word ptr [bp+var_1C], 4 + +loc_8FC1: ; CODE XREF: sub_8E1B+1A0j + lea ax, [bp+var_12] + push ax + push word ptr [bp+var_1C+2] + push word ptr [bp+var_1C] + push cs + call near ptr sub_8D6A + add sp, 6 + mov word ptr [bp+var_1C+2], dx + mov word ptr [bp+var_1C], ax + mov dx, word ptr [bp+var_12+2] + mov ax, word ptr [bp+var_12] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + +loc_8FE4: ; CODE XREF: sub_8E1B+FCj + ; sub_8E1B+120j ... + les bx, [bp+var_12] + test byte ptr es:[bx+3], 4 + jz short loc_9009 + les bx, [bp+var_16] + mov ax, es:[bx+0Ah] + mov [bp+var_18], ax + les bx, [bp+var_16] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_16+2], dx + mov word ptr [bp+var_16], ax + +loc_9009: ; CODE XREF: sub_8E1B+1D1j + les bx, [bp+var_16] + mov ax, es:[bx+1Ah] + imul [bp+var_18] + mov [bp+var_18], ax + mov ax, [bp+var_18] + xor dx, dx + cmp dx, [bp+var_6] + jb short loc_9027 + jnz short loc_9038 + cmp ax, [bp+var_8] + jnb short loc_9038 + +loc_9027: ; CODE XREF: sub_8E1B+203j + mov ax, [bp+var_18] + sub [bp+var_8], ax + sbb [bp+var_6], 0 + add word ptr [bp+var_C], 0Ah + jmp loc_8EDF +; --------------------------------------------------------------------------- + +loc_9038: ; CODE XREF: sub_8E1B+B5j sub_8E1B+D4j ... + les bx, [bp+var_C] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + les bx, [bp+var_C] + mov ax, es:[bx+4] + mov word ptr [bp+var_16+2], ax + test byte ptr [bp+var_16+2], 4 + jz short loc_9067 + les bx, [bp+var_C] + mov ax, es:[bx+6] + add ax, [bp+arg_A] + mov word ptr [bp+var_16], ss + jmp short loc_9075 +; --------------------------------------------------------------------------- + +loc_9067: ; CODE XREF: sub_8E1B+23Bj + les bx, [bp+var_C] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_16], dx + +loc_9075: ; CODE XREF: sub_8E1B+24Aj + mov [bp+var_18], ax + test byte ptr [bp+var_16+2], 11h + jnz short loc_9081 + jmp loc_910B +; --------------------------------------------------------------------------- + +loc_9081: ; CODE XREF: sub_8E1B+261j + les bx, [bp+var_12] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + mov dx, word ptr [bp+var_16] + mov ax, [bp+var_18] + mov word ptr [bp+var_1C+2], dx + mov word ptr [bp+var_1C], ax + test byte ptr [bp+var_16+2], 80h + jz short loc_90B3 + les bx, [bp+var_1C] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_16], dx + jmp short loc_90BC +; --------------------------------------------------------------------------- + +loc_90B3: ; CODE XREF: sub_8E1B+287j + les bx, [bp+var_1C] + mov ax, es:[bx] + mov word ptr [bp+var_16], ds + +loc_90BC: ; CODE XREF: sub_8E1B+296j + mov [bp+var_18], ax + mov dx, word ptr [bp+var_16] + mov ax, [bp+var_18] + mov word ptr [bp+driver+2], dx + mov word ptr [bp+driver], ax + mov ax, word ptr [bp+var_16+2] + and ax, 48h + cmp ax, 40h ; '@' + jnz short loc_90DA + add [bp+var_18], 4 + +loc_90DA: ; CODE XREF: sub_8E1B+2B9j + les bx, [bp+var_12] + test byte ptr es:[bx+2], 2 + jz short loc_910B + les bx, [bp+var_12] + test byte ptr es:[bx+8], 20h + jz short loc_910B + test byte ptr [bp+var_16+2], 8 + jz short loc_910B + lea ax, [bp+var_12] + push ax + push word ptr [bp+var_16] + push [bp+var_18] + push cs + call near ptr sub_8D6A + add sp, 6 + mov word ptr [bp+var_16], dx + mov [bp+var_18], ax + +loc_910B: ; CODE XREF: sub_8E1B+263j + ; sub_8E1B+2C7j ... + cmp [bp+var_E], 0 + jnz short loc_9159 + les bx, [bp+var_12] + test byte ptr es:[bx+3], 4 + jz short loc_9139 + push [bp+arg_A] + push [bp+var_6] + push [bp+var_8] + push word ptr [bp+var_12+2] + push word ptr [bp+var_12] + push word ptr [bp+var_16] + push [bp+var_18] + push cs + call near ptr sub_8C68 + add sp, 0Eh + jmp short loc_9159 +; --------------------------------------------------------------------------- + +loc_9139: ; CODE XREF: sub_8E1B+2FEj + push [bp+arg_A] + mov ax, 1 + push ax + push [bp+var_6] + push [bp+var_8] + push word ptr [bp+var_12+2] + push word ptr [bp+var_12] + push word ptr [bp+var_16] + push [bp+var_18] + push cs + call near ptr sub_899D + add sp, 10h + +loc_9159: ; CODE XREF: sub_8E1B+2F4j + ; sub_8E1B+31Cj + mov ax, word ptr [bp+var_16+2] + and ax, 3 + cmp ax, 3 + jz short loc_9167 + jmp loc_9205 +; --------------------------------------------------------------------------- + +loc_9167: ; CODE XREF: sub_8E1B+347j + mov ax, word ptr [bp+var_16+2] + and ax, 48h + cmp ax, 48h ; 'H' + jnz short loc_9176 + sub word ptr [bp+driver], 4 + +loc_9176: ; CODE XREF: sub_8E1B+355j + les bx, [bp+var_12] + test byte ptr es:[bx+3], 4 + jz short loc_91C5 + les bx, [bp+var_12] + mov dx, es:[bx+8] + mov ax, es:[bx+6] + mov word ptr [bp+var_12+2], dx + mov word ptr [bp+var_12], ax + les bx, [bp+var_12] + mov ax, es:[bx+16h] + or ax, es:[bx+18h] + jz short loc_91B2 + les bx, [bp+var_12] + push word ptr es:[bx+14h] + les bx, [bp+var_12] + push word ptr es:[bx+18h] + push word ptr es:[bx+16h] + jmp short loc_91E4 +; --------------------------------------------------------------------------- + +loc_91B2: ; CODE XREF: sub_8E1B+381j + test byte ptr [bp+var_16+2], 80h + jz short loc_9205 + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; font + nop + push cs + call near ptr _registerbgifont + jmp short loc_9203 +; --------------------------------------------------------------------------- + +loc_91C5: ; CODE XREF: sub_8E1B+363j + les bx, [bp+var_12] + mov ax, es:[bx+0Eh] + or ax, es:[bx+10h] + jz short loc_91F2 + les bx, [bp+var_12] + push word ptr es:[bx+12h] + les bx, [bp+var_12] + push word ptr es:[bx+10h] + push word ptr es:[bx+0Eh] + +loc_91E4: ; CODE XREF: sub_8E1B+395j + push word ptr [bp+driver+2] + push word ptr [bp+driver] + call sub_71D4 + add sp, 0Ah + jmp short loc_9205 +; --------------------------------------------------------------------------- + +loc_91F2: ; CODE XREF: sub_8E1B+3B5j + test byte ptr [bp+var_16+2], 80h + jz short loc_9205 + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + nop + push cs + call near ptr _registerbgidriver + +loc_9203: ; CODE XREF: sub_8E1B+3A8j + pop cx + pop cx + +loc_9205: ; CODE XREF: sub_8E1B+349j + ; sub_8E1B+39Bj ... + mov [bp+var_6], 0 + mov [bp+var_8], 0 + mov ax, word ptr [bp+var_C] + sub word ptr [bp+var_C], 0Ah + cmp ax, word ptr [bp+arg_0] + jbe short loc_921E + jmp loc_9038 +; --------------------------------------------------------------------------- + +loc_921E: ; CODE XREF: sub_8E1B+13j sub_8E1B+A3j ... + xor ax, ax + +loc_9220: ; CODE XREF: sub_8E1B+83j + pop di + pop si + mov sp, bp + pop bp + retn +sub_8E1B endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__CurrExcContext proc far + +s1 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 6 + push si + push di + mov ax, [bp+arg_0] + mov [bp+var_2], ax + cmp [bp+var_2], 0FFFFh + jz short loc_9269 + mov bx, [bp+var_2] + mov dx, ss:[bx+4] + mov ax, ss:[bx+2] + add ax, 0FFF8h + mov word ptr [bp+s1+2], dx + mov word ptr [bp+s1], ax + mov ax, 8 + push ax ; n + push ds + mov ax, 1CAFh + push ax ; s2 + push word ptr [bp+s1+2] + push word ptr [bp+s1] ; s1 + nop + push cs + call near ptr _memcmp + add sp, 0Ah + or ax, ax + jz short loc_926E + +loc_9269: ; CODE XREF: __CurrExcContext+12j + mov ax, 0FFFFh + jmp short loc_9275 +; --------------------------------------------------------------------------- + +loc_926E: ; CODE XREF: __CurrExcContext+41j + mov bx, [bp+var_2] + mov ax, ss:[bx+arg_6] + +loc_9275: ; CODE XREF: __CurrExcContext+46j + pop di + pop si + mov sp, bp + pop bp + retf +__CurrExcContext endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __ThrowFileName(void) +@__ThrowFileName$qv proc far + push si + push di + les bx, ss:16h + mov dx, es:[bx+18h] + mov ax, es:[bx+16h] + pop di + pop si + retf +@__ThrowFileName$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __ThrowLineNumber(void) +@__ThrowLineNumber$qv proc far + push si + push di + les bx, ss:16h + mov ax, es:[bx+1Ah] + pop di + pop si + retf +@__ThrowLineNumber$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function + +; __ThrowExceptionName(void) +@__ThrowExceptionName$qv proc far + push si + push di + les bx, ss:16h + mov dx, es:[bx+1Eh] + mov ax, es:[bx+1Ch] + pop di + pop si + retf +@__ThrowExceptionName$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __fastcall __far typeinfo__typeinfo(int, int, int, __int32) +@typeinfo@0$bctr$qmx8typeinfo proc far + +src = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 6 + + push bp + mov bp, sp + sub sp, 4 + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_92D1 + mov ax, 8 + push ax + nop + push cs + call near ptr @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_930F + +loc_92D1: ; CODE XREF: typeinfo::typeinfo(typeinfo &)+Ej + les bx, [bp+arg_0] + mov word ptr es:[bx+2], seg seg000 + mov word ptr es:[bx], 98ADh + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + mov [bp+var_2], 0 + mov [bp+src], 0 + lea ax, [bp+src] + push ss + push ax ; src + push cs ; int + mov ax, 988Fh + push ax ; int + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_930F: ; CODE XREF: typeinfo::typeinfo(typeinfo &)+22j + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@typeinfo@0$bctr$qmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::operator=(typeinfo const &) +@typeinfo@0$basg$qmx8typeinfo proc far + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + pop di + pop si + pop bp + retf +@typeinfo@0$basg$qmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far typeinfo___typeinfo(void (*driver)(void), int) +@typeinfo@0$bdtr$qv proc far + +driver = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov dx, [bp+arg_4] + mov ax, word ptr [bp+driver] + or ax, word ptr [bp+driver+2] + jz short loc_935A + les bx, [bp+driver] + mov word ptr es:[bx+2], seg seg000 + mov word ptr es:[bx], 98ADh + test dl, 1 + jz short loc_935A + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + +loc_935A: ; CODE XREF: typeinfo::~typeinfo(void)+Ej + ; typeinfo::~typeinfo(void)+21j + pop di + pop si + pop bp + retf +@typeinfo@0$bdtr$qv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::operator==(typeinfo const &)const +@typeinfo@0$beql$xqmx8typeinfo proc far ; CODE XREF: typeinfo::operator!=(typeinfo &)+12p + +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + push si + push di + les bx, [bp+arg_4] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + les bx, [bp+arg_0] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + push cs + call near ptr sub_67D0 + add sp, 8 + pop di + pop si + pop bp + retf +@typeinfo@0$beql$xqmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::operator!=(typeinfo const &)const +@typeinfo@0$bneq$xqmx8typeinfo proc far + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + push [bp+arg_6] + push [bp+arg_4] + push [bp+arg_2] + push [bp+arg_0] + push cs + call near ptr @typeinfo@0$beql$xqmx8typeinfo ; typeinfo::operator==(typeinfo &) + add sp, 8 + neg ax + sbb ax, ax + inc ax + pop di + pop si + pop bp + retf +@typeinfo@0$bneq$xqmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::before(typeinfo const &)const +@typeinfo@0before$xqmx8typeinfo proc far + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 8 + push si + push di + les bx, [bp+arg_0] + mov ax, es:[bx+4] + or ax, es:[bx+6] + jnz short loc_93BE + xor ax, ax + jmp short loc_9417 +; --------------------------------------------------------------------------- + +loc_93BE: ; CODE XREF: typeinfo::before(typeinfo &)+13j + les bx, [bp+arg_4] + mov ax, es:[bx+4] + or ax, es:[bx+6] + jnz short loc_93D0 + mov ax, 1 + jmp short loc_9417 +; --------------------------------------------------------------------------- + +loc_93D0: ; CODE XREF: typeinfo::before(typeinfo &)+24j + les bx, [bp+arg_4] + mov dx, es:[bx+6] + mov word ptr [bp+var_4+2], dx + mov ax, es:[bx+4] + mov word ptr [bp+var_4], ax + les bx, [bp+var_4] + add ax, es:[bx+4] + push dx + push ax ; s2 + les bx, [bp+arg_0] + mov dx, es:[bx+6] + mov word ptr [bp+var_8+2], dx + mov ax, es:[bx+4] + mov word ptr [bp+var_8], ax + les bx, [bp+var_8] + add ax, es:[bx+4] + push dx + push ax ; s1 + nop + push cs + call near ptr _strcmp + add sp, 8 + or ax, ax + jge short loc_9415 + mov ax, 1 + jmp short loc_9417 +; --------------------------------------------------------------------------- + +loc_9415: ; CODE XREF: typeinfo::before(typeinfo &)+69j + xor ax, ax + +loc_9417: ; CODE XREF: typeinfo::before(typeinfo &)+17j + ; typeinfo::before(typeinfo &)+29j ... + pop di + pop si + mov sp, bp + pop bp + retf +@typeinfo@0before$xqmx8typeinfo endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; typeinfo::name(void)const +@typeinfo@0name$xqv proc far + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push si + push di + les bx, [bp+arg_0] + push word ptr es:[bx+6] + push word ptr es:[bx+4] + push cs + call near ptr sub_67AB + pop cx + pop cx + pop di + pop si + pop bp + retf +@typeinfo@0name$xqv endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __fastcall __far __GetTypeInfo(int, int, int, int, int, __int32, int, int, int, int) +@__GetTypeInfo$qnvt1t1t1 proc far + +var_8 = dword ptr -8 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_C = word ptr 12h +arg_E = word ptr 14h + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov dx, [bp+arg_E] + mov ax, [bp+arg_C] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jnz short loc_9479 + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + push ds + mov ax, 0C56Ch + push ax ; src + push cs ; int + mov ax, 9879h + push ax ; int + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_9479: ; CODE XREF: __GetTypeInfo(void *,void *,void *,void *)+1Aj + les bx, dword ptr [bp+arg_4] + mov dx, [bp+arg_4+2] + mov ax, [bp+arg_4] + sub ax, es:[bx-2] + mov [bp+arg_4+2], dx + mov [bp+arg_4], ax + les bx, dword ptr [bp+arg_4] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov [bp+var_2], dx + mov [bp+var_4], ax + les bx, [bp+var_8] + mov dx, [bp+var_2] + mov ax, [bp+var_4] + mov es:[bx+6], dx + mov es:[bx+4], ax + mov dx, word ptr [bp+var_8+2] + mov ax, word ptr [bp+var_8] + pop di + pop si + mov sp, bp + pop bp + retf +@__GetTypeInfo$qnvt1t1t1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +sub_94BA proc near ; CODE XREF: sub_94BA+143p + ; sub_94BA+1C4p ... + +var_20 = word ptr -20h +var_1E = word ptr -1Eh +var_1C = dword ptr -1Ch +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = dword ptr -14h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = dword ptr -4 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h +arg_E = word ptr 12h +arg_10 = word ptr 14h +arg_12 = word ptr 16h +arg_14 = word ptr 18h +arg_16 = word ptr 1Ah +arg_18 = word ptr 1Ch +arg_1A = word ptr 1Eh +arg_1C = word ptr 20h +arg_1E = word ptr 22h + + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov [bp+var_8], 0 + mov [bp+var_A], 0 + mov [bp+var_C], 0 + mov [bp+var_E], 0 + mov ax, [bp+arg_14] + or ax, [bp+arg_16] + jz short loc_94F5 + push word ptr [bp+arg_4+2] + push word ptr [bp+arg_4] + push [bp+arg_16] + push [bp+arg_14] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jnz short loc_94FF + +loc_94F5: ; CODE XREF: sub_94BA+22j + les bx, [bp+arg_4] + test byte ptr es:[bx+8], 4 + jnz short loc_9506 + +loc_94FF: ; CODE XREF: sub_94BA+39j + xor dx, dx + xor ax, ax + jmp loc_96FA +; --------------------------------------------------------------------------- + +loc_9506: ; CODE XREF: sub_94BA+43j + mov [bp+var_6], 0 + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ch] + +loc_9518: ; CODE XREF: sub_94BA+21Ej + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + +loc_951E: ; CODE XREF: sub_94BA+205j + les bx, [bp+var_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + mov word ptr [bp+var_1C+2], dx + mov word ptr [bp+var_1C], ax + mov ax, word ptr [bp+var_1C] + or ax, word ptr [bp+var_1C+2] + jnz short loc_9539 + jmp loc_96C2 +; --------------------------------------------------------------------------- + +loc_9539: ; CODE XREF: sub_94BA+7Aj + les bx, [bp+var_4] + test byte ptr es:[bx+6], 8 + jz short loc_9546 + jmp loc_96BB +; --------------------------------------------------------------------------- + +loc_9546: ; CODE XREF: sub_94BA+87j + cmp [bp+arg_1A], 0 + jz short loc_9560 + les bx, [bp+var_4] + mov ax, es:[bx+6] + and ax, 3 + cmp ax, 3 + jnz short loc_9560 + mov ax, 1 + jmp short loc_9562 +; --------------------------------------------------------------------------- + +loc_9560: ; CODE XREF: sub_94BA+90j sub_94BA+9Fj + xor ax, ax + +loc_9562: ; CODE XREF: sub_94BA+A4j + mov [bp+var_10], ax + les bx, [bp+var_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + add ax, es:[bx+4] + mov word ptr [bp+var_14+2], dx + mov word ptr [bp+var_14], ax + mov dx, [bp+arg_1E] + mov ax, [bp+arg_1C] + mov [bp+var_16], dx + mov [bp+var_18], ax + les bx, [bp+var_4] + test byte ptr es:[bx+6], 4 + jz short loc_95A9 + les bx, [bp+var_14] + mov ax, es:[bx] + mov dx, word ptr [bp+var_14+2] + mov word ptr [bp+var_14+2], dx + mov word ptr [bp+var_14], ax + mov dx, word ptr [bp+var_1C+2] + mov ax, word ptr [bp+var_1C] + mov [bp+var_16], dx + mov [bp+var_18], ax + +loc_95A9: ; CODE XREF: sub_94BA+D2j + push word ptr [bp+var_1C+2] + push word ptr [bp+var_1C] + push [bp+arg_E] + push [bp+arg_C] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jnz short loc_962B + les bx, [bp+var_1C] + test byte ptr es:[bx+8], 4 + jnz short loc_95CD + jmp loc_96BB +; --------------------------------------------------------------------------- + +loc_95CD: ; CODE XREF: sub_94BA+10Ej + push [bp+var_16] + push [bp+var_18] + push [bp+var_10] + push [bp+arg_18] + push [bp+arg_16] + push [bp+arg_14] + push [bp+arg_12] + push [bp+arg_10] + push [bp+arg_E] + push [bp+arg_C] + push [bp+arg_A] + push [bp+arg_8] + push word ptr [bp+var_1C+2] + push word ptr [bp+var_1C] + push word ptr [bp+var_14+2] + push word ptr [bp+var_14] + call sub_94BA + add sp, 20h + mov [bp+var_1E], dx + mov [bp+var_20], ax + mov ax, [bp+var_20] + or ax, [bp+var_1E] + jnz short loc_9614 + jmp loc_96BB +; --------------------------------------------------------------------------- + +loc_9614: ; CODE XREF: sub_94BA+155j + mov dx, [bp+var_1E] + mov ax, [bp+var_20] + mov word ptr [bp+var_14+2], dx + mov word ptr [bp+var_14], ax + mov bx, [bp+arg_18] + mov ax, ss:[bx] + mov [bp+var_10], ax + jmp short loc_9688 +; --------------------------------------------------------------------------- + +loc_962B: ; CODE XREF: sub_94BA+104j + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jz short loc_964C + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + cmp dx, word ptr [bp+var_14+2] + jnz short loc_96BB + cmp ax, word ptr [bp+var_14] + jnz short loc_96BB + mov dx, word ptr [bp+var_14+2] + mov ax, word ptr [bp+var_14] + jmp loc_96FA +; --------------------------------------------------------------------------- + +loc_964C: ; CODE XREF: sub_94BA+177j + mov ax, [bp+arg_10] + or ax, [bp+arg_12] + jz short loc_9688 + xor ax, ax + push ax + push ax + xor ax, ax + push ax + push [bp+arg_18] + xor ax, ax + push ax + push ax + xor ax, ax + push ax + push ax + push [bp+arg_16] + push [bp+arg_14] + push [bp+arg_12] + push [bp+arg_10] + push word ptr [bp+var_1C+2] + push word ptr [bp+var_1C] + push word ptr [bp+var_14+2] + push word ptr [bp+var_14] + call sub_94BA + add sp, 20h + or ax, dx + jz short loc_96BB + +loc_9688: ; CODE XREF: sub_94BA+16Fj + ; sub_94BA+198j + cmp [bp+var_E], 0 + jz short loc_96A6 + mov dx, word ptr [bp+var_14+2] + mov ax, word ptr [bp+var_14] + cmp dx, [bp+var_A] + jnz short loc_96A6 + cmp ax, [bp+var_C] + jnz short loc_96A6 + mov ax, [bp+var_10] + or [bp+var_8], ax + jmp short loc_96BB +; --------------------------------------------------------------------------- + +loc_96A6: ; CODE XREF: sub_94BA+1D2j + ; sub_94BA+1DDj ... + inc [bp+var_E] + mov dx, word ptr [bp+var_14+2] + mov ax, word ptr [bp+var_14] + mov [bp+var_A], dx + mov [bp+var_C], ax + mov ax, [bp+var_10] + mov [bp+var_8], ax + +loc_96BB: ; CODE XREF: sub_94BA+89j + ; sub_94BA+110j ... + add word ptr [bp+var_4], 8 + jmp loc_951E +; --------------------------------------------------------------------------- + +loc_96C2: ; CODE XREF: sub_94BA+7Cj + cmp [bp+var_6], 0 + jnz short loc_96DB + inc [bp+var_6] + les bx, [bp+arg_4] + mov dx, word ptr [bp+arg_4+2] + mov ax, word ptr [bp+arg_4] + add ax, es:[bx+0Ah] + jmp loc_9518 +; --------------------------------------------------------------------------- + +loc_96DB: ; CODE XREF: sub_94BA+20Cj + mov bx, [bp+arg_18] + mov ax, [bp+var_8] + mov ss:[bx], ax + cmp [bp+var_E], 1 + jz short loc_96F4 + mov [bp+var_A], 0 + mov [bp+var_C], 0 + +loc_96F4: ; CODE XREF: sub_94BA+22Ej + mov dx, [bp+var_A] + mov ax, [bp+var_C] + +loc_96FA: ; CODE XREF: sub_94BA+49j + ; sub_94BA+18Fj + pop di + pop si + mov sp, bp + pop bp + retn +sub_94BA endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __fastcall __far __DynamicCast(int, int, int, int, int, __int32, int, int, int, int, int) +@__DynamicCast$qnvt1t1t1i proc far + +var_16 = word ptr -16h +var_14 = word ptr -14h +var_12 = word ptr -12h +var_10 = word ptr -10h +var_E = word ptr -0Eh +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_8 = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h + + push bp + mov bp, sp + sub sp, 16h + push si + push di + mov dx, [bp+arg_A] + mov ax, [bp+arg_8] + mov [bp+var_2], dx + mov [bp+var_4], ax + mov dx, [bp+arg_E] + mov ax, [bp+arg_C] + mov [bp+var_6], dx + mov [bp+var_8], ax + mov ax, [bp+arg_0] + or ax, [bp+arg_2] + jnz short loc_972B + jmp loc_982F +; --------------------------------------------------------------------------- + +loc_972B: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+26j + les bx, dword ptr [bp+arg_4] + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + sub ax, es:[bx-4] + mov [bp+var_E], dx + mov [bp+var_10], ax + les bx, dword ptr [bp+arg_4] + mov dx, [bp+arg_4+2] + mov ax, [bp+arg_4] + sub ax, es:[bx-2] + mov [bp+arg_4+2], dx + mov [bp+arg_4], ax + les bx, dword ptr [bp+arg_4] + mov dx, es:[bx-6] + mov ax, es:[bx-8] + mov [bp+var_A], dx + mov [bp+var_C], ax + mov ax, [bp+arg_C] + or ax, [bp+arg_E] + jz short loc_9781 + push [bp+var_A] + push [bp+var_C] + push [bp+var_6] + push [bp+var_8] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jz short loc_978A + +loc_9781: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+68j + mov dx, [bp+var_E] + mov ax, [bp+var_10] + jmp loc_985F +; --------------------------------------------------------------------------- + +loc_978A: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+7Fj + push [bp+var_A] + push [bp+var_C] + push [bp+var_2] + push [bp+var_4] + push cs + call near ptr sub_67D0 + add sp, 8 + or ax, ax + jnz short loc_97E3 + xor ax, ax + push ax + push ax + mov ax, 1 + push ax + lea ax, [bp+var_16] + push ax + push [bp+var_2] + push [bp+var_4] + push [bp+arg_2] + push [bp+arg_0] + push [bp+var_6] + push [bp+var_8] + xor ax, ax + push ax + push ax + push [bp+var_A] + push [bp+var_C] + push [bp+var_E] + push [bp+var_10] + call sub_94BA + add sp, 20h + mov [bp+var_12], dx + mov [bp+var_14], ax + mov ax, [bp+var_14] + or ax, [bp+var_12] + jnz short loc_9827 + +loc_97E3: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+9Fj + xor ax, ax + push ax + push ax + mov ax, 1 + push ax + lea ax, [bp+var_16] + push ax + xor ax, ax + push ax + push ax + xor ax, ax + push ax + push ax + push [bp+var_6] + push [bp+var_8] + xor ax, ax + push ax + push ax + push [bp+var_A] + push [bp+var_C] + push [bp+var_E] + push [bp+var_10] + call sub_94BA + add sp, 20h + mov [bp+var_12], dx + mov [bp+var_14], ax + mov ax, [bp+var_14] + or ax, [bp+var_12] + jz short loc_982F + cmp [bp+var_16], 0 + jz short loc_982F + +loc_9827: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+E1j + mov dx, [bp+var_12] + mov ax, [bp+var_14] + jmp short loc_985F +; --------------------------------------------------------------------------- + +loc_982F: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+28j + ; __DynamicCast(void *,void *,void *,void *,int)+11Fj ... + cmp [bp+arg_10], 0 + jz short loc_985B + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + xor ax, ax + push ax ; int + push ax ; int + push ds + mov ax, 0C56Dh + push ax ; src + push cs ; int + mov ax, 9865h + push ax ; int + push cs + call near ptr @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_985B: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+133j + xor dx, dx + xor ax, ax + +loc_985F: ; CODE XREF: __DynamicCast(void *,void *,void *,void *,int)+87j + ; __DynamicCast(void *,void *,void *,void *,int)+12Dj + pop di + pop si + mov sp, bp + pop bp + retf +@__DynamicCast$qnvt1t1t1i endp + +; --------------------------------------------------------------------------- + db 1, 0, 1, 0, 0Ah, 0, 2 dup(0FFh), 2 dup(0), 42h, 61h + db 64h, 5Fh, 63h, 61h, 73h, 74h, 2 dup(0), 1, 0, 1, 0 + db 0Ah, 0, 2 dup(0FFh), 2 dup(0), 42h, 61h, 64h, 5Fh, 74h + db 79h, 70h, 65h, 69h, 64h, 2 dup(0), 4, 0, 10h, 20h, 0Ah + db 0, 0B1h, 98h + dw seg seg000 +aTypeinfo db 'typeinfo *',0 + db 0, 0B1h, 98h + dw seg seg000 + db 4 dup(0), 2Ah, 93h + dw seg seg000 + db 8 ; Method + db 0 + db 3 ; Destructor/SafeFunction + db 0 + db 26h, 3 dup(0), 73h, 10h, 30h, 0, 34h, 0Dh dup(0), 1 + db 0, 1, 0, 2Ah, 93h + dw seg seg000 + db 5, 0, 38h, 0, 74h, 79h, 70h, 65h, 69h, 6Eh, 66h, 6Fh + db 0Eh dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __stdcall _DOSCMD(int, int, char *s, int, int) +__DOSCMD proc near ; CODE XREF: sub_A2EB:loc_A456p + +dest = dword ptr -0Eh +var_A = dword ptr -0Ah +var_6 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +s = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 0Eh + push si + push di + mov [bp+var_2], 3 + mov ax, word ptr [bp+s] + or ax, word ptr [bp+s+2] + jz short loc_9916 + push word ptr [bp+s+2] + push word ptr [bp+s] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + add ax, [bp+var_2] + inc ax + mov [bp+var_2], ax + +loc_9916: ; CODE XREF: __DOSCMD+13j + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + jmp short loc_9940 +; --------------------------------------------------------------------------- + +loc_9924: ; CODE XREF: __DOSCMD+5Dj + les bx, [bp+var_6] + push word ptr es:[bx+2] + push word ptr es:[bx] ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + add ax, [bp+var_2] + inc ax + mov [bp+var_2], ax + add word ptr [bp+var_6], 4 + +loc_9940: ; CODE XREF: __DOSCMD+35j + les bx, [bp+var_6] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_9924 + push [bp+var_2] + nop + push cs + call sub_4C1A + pop cx + mov word ptr [bp+var_A+2], dx + mov word ptr [bp+var_A], ax + or ax, dx + jnz short loc_9966 + xor dx, dx + xor ax, ax + jmp loc_9A1C +; --------------------------------------------------------------------------- + +loc_9966: ; CODE XREF: __DOSCMD+70j + mov dx, word ptr [bp+var_A+2] + mov ax, word ptr [bp+var_A] + inc ax + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 20h ; ' ' + inc word ptr [bp+dest] + mov ax, word ptr [bp+s] + or ax, word ptr [bp+s+2] + jz short loc_99A9 + push word ptr [bp+s+2] + push word ptr [bp+s] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 20h ; ' ' + inc word ptr [bp+dest] + +loc_99A9: ; CODE XREF: __DOSCMD+96j + mov ax, [bp+arg_8] + or ax, [bp+arg_A] + jz short loc_99F7 + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_6+2], dx + mov word ptr [bp+var_6], ax + jmp short loc_99EB +; --------------------------------------------------------------------------- + +loc_99BF: ; CODE XREF: __DOSCMD+108j + les bx, [bp+var_6] + push word ptr es:[bx+2] + push word ptr es:[bx] ; src + push word ptr [bp+dest+2] + push word ptr [bp+dest] ; dest + nop + push cs + call near ptr _stpcpy + add sp, 8 + mov word ptr [bp+dest+2], dx + mov word ptr [bp+dest], ax + les bx, [bp+dest] + mov byte ptr es:[bx], 20h ; ' ' + inc word ptr [bp+dest] + add word ptr [bp+var_6], 4 + +loc_99EB: ; CODE XREF: __DOSCMD+D0j + les bx, [bp+var_6] + mov ax, es:[bx] + or ax, es:[bx+2] + jnz short loc_99BF + +loc_99F7: ; CODE XREF: __DOSCMD+C2j + les bx, [bp+dest] + mov byte ptr es:[bx-1], 0Dh + mov byte ptr es:[bx], 0 + mov ax, word ptr [bp+dest] + xor dx, dx + sub ax, word ptr [bp+var_A] + sbb dx, 0 + add al, 0FEh ; '' + les bx, [bp+var_A] + mov es:[bx], al + mov dx, word ptr [bp+var_A+2] + mov ax, word ptr [bp+var_A] + +loc_9A1C: ; CODE XREF: __DOSCMD+76j + pop di + pop si + mov sp, bp + pop bp + retn 0Ch +__DOSCMD endp + +; --------------------------------------------------------------------------- + db 8Fh dup(0) +word_9AB3 dw 0 ; DATA XREF: __exec+28w + db 50h dup(0) +byte_9B05 db 0 ; DATA XREF: __exec+50w +byte_9B06 db 0 ; DATA XREF: __exec+6Dw + db 1Ch dup(0), 33h, 0FFh, 8Ch, 0C8h, 8Eh, 0D8h, 8Eh, 0C0h + db 0FAh, 8Eh, 0D0h, 8Dh, 0A5h, 8Fh, 0, 0FBh, 51h, 52h + db 0B8h, 3, 4Bh, 8Dh, 9Dh, 0FBh, 0, 8Dh, 95h, 91h, 0, 0CDh + db 21h, 5Ah, 59h, 72h, 2Dh, 33h, 0FFh, 0FAh, 8Eh, 95h + db 0F1h, 0, 8Bh, 0A5h, 0F3h, 0, 0FBh, 8Bh, 0ECh, 33h, 0C0h + db 50h, 8Bh, 85h, 8Fh, 0, 8Eh, 0D8h, 8Eh, 0C0h, 26h, 89h + db 16h, 2, 0, 26h, 89h, 0Eh, 2Ch, 0, 2Eh, 8Bh, 85h, 0E1h + db 0, 2Eh, 0FFh, 2Eh, 0F7h, 0, 0B4h, 40h, 0BBh, 2, 0, 0B9h + db 0Fh, 0, 33h, 0D2h, 0CDh, 21h, 0B8h, 2, 4Ch, 0CDh, 21h +byte_9B84 db 0FFh, 0 ; DATA XREF: __exec+22Dr +word_9B86 dw 0 ; DATA XREF: __exec+1D0w +word_9B88 dw 0 ; DATA XREF: __exec+Ew + ; __exec:loc_9D84r ... +byte_9B8A db 1 ; DATA XREF: __exec+D5w __exec+1E7r ... + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +__exec proc near + +var_C = word ptr -0Ch +var_A = dword ptr -0Ah +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = dword ptr 8 +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + push bp + mov bp, sp + sub sp, 0Ch + cld + push si + push ds + push di + push es + mov ax, word_10176 + mov cs:word_9B88, ax + mov ax, 3D00h + push ds + lds dx, [bp+arg_0] + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read + pop ds + mov [bp+var_2], ax + jnb short loc_9BAF + jmp loc_9DBD +; --------------------------------------------------------------------------- + +loc_9BAF: ; CODE XREF: __exec+1Fj + mov es, segx + mov cs:word_9AB3, es + mov ax, es:2Ch + mov [bp+var_C], ax + mov di, 80h ; '' + push ds + lds si, [bp+arg_4] + lodsb + mov dx, si + stosb + xor cx, cx + mov cl, al + inc cx + rep movsb + mov ax, 2901h + mov si, dx + mov di, 5Ch ; '\' + int 21h ; DOS - PARSE FILENAME + ; DS:SI -> string to parse + ; ES:DI -> buffer to fill with unopened FCB + ; AL = bit mask to control parsing + mov cs:byte_9B05, al + +loc_9BDF: ; CODE XREF: __exec+63j + mov al, [si] + cmp al, 20h ; ' ' + jz short loc_9BF0 + cmp al, 9 + jz short loc_9BF0 + cmp al, 0Dh + jz short loc_9BF0 + inc si + jmp short loc_9BDF +; --------------------------------------------------------------------------- + +loc_9BF0: ; CODE XREF: __exec+58j __exec+5Cj ... + mov ax, 2901h + mov di, 6Ch ; 'l' + int 21h ; DOS - PARSE FILENAME + ; DS:SI -> string to parse + ; ES:DI -> buffer to fill with unopened FCB + ; AL = bit mask to control parsing + mov cs:byte_9B06, al + pop ds + mov ah, 4Ah ; 'J' + mov bx, 0FFFFh + int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) + ; ES = segment address of block to change + ; BX = new size in paragraphs + cmp byte ptr word_1017C, 3 + jnb short loc_9C0F + sub bx, 280h + +loc_9C0F: ; CODE XREF: __exec+7Ej + mov [bp+var_4], bx + mov ax, [bp+arg_8] + mov dx, [bp+arg_A] + mov bx, ax + or bx, dx + jnz short loc_9C24 + xor ax, ax + mov di, ax + jmp short loc_9C41 +; --------------------------------------------------------------------------- + +loc_9C24: ; CODE XREF: __exec+91j + mov es, dx + mov di, ax + push di + mov cx, 0FFFFh + xor ax, ax + +loc_9C2E: ; CODE XREF: __exec+A8j + repne scasb + cmp es:[di], al + jnz short loc_9C2E + dec cx + add di, 3 + repne scasb + dec cx + mov ax, cx + neg ax + pop di + +loc_9C41: ; CODE XREF: __exec+97j + mov word ptr [bp+var_A], di + mov word ptr [bp+var_A+2], es + add ax, 0Fh + mov cx, 4 + shr ax, cl + mov [bp+var_6], ax + mov si, word_10176 + dec si + mov es, si + cmp ax, es:3 + jbe short loc_9C69 + dec cs:byte_9B8A + inc ax + sub [bp+var_4], ax + +loc_9C69: ; CODE XREF: __exec+D3j + lds si, [bp+arg_0] + push cs + pop es + assume es:seg000 + mov di, 9AB5h + +loc_9C71: ; CODE XREF: __exec+EAj + lodsb + stosb + or al, al + jnz short loc_9C71 + mov bx, [bp+var_2] + push ds + pop es + assume es:dseg + push cs + pop ds + assume ds:seg000 + mov di, 9A24h + mov ah, 3Fh ; '?' + mov cx, 18h + lea dx, [di+0E3h] + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + jb short loc_9CB3 + cmp word ptr [di+0E3h], 5A4Dh + jz short loc_9CBF + mov ax, es:[si-5] + or ah, 20h + cmp ax, 632Eh + jnz short loc_9CB0 + mov ax, es:[si-3] + or ax, 2020h + cmp ax, 6D6Fh + jnz short loc_9CB0 + jmp short loc_9CFB +; --------------------------------------------------------------------------- + +loc_9CB0: ; CODE XREF: __exec+115j __exec+121j + mov ax, 0Bh + +loc_9CB3: ; CODE XREF: __exec+101j __exec+1ADj ... + push ax + mov ah, 3Eh ; '>' + mov bx, [bp+var_2] + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + pop ax + jmp loc_9DBD +; --------------------------------------------------------------------------- + +loc_9CBF: ; CODE XREF: __exec+109j + mov ax, [di+0E7h] + xor dx, dx + mov dl, ah + mov ah, al + xor al, al + shl ax, 1 + rcl dx, 1 + add ax, [di+0E5h] + adc dx, 0 + mov cx, 4 + +loc_9CD9: ; CODE XREF: __exec+152j + shr dx, 1 + rcr ax, 1 + loop loc_9CD9 + inc ax + sub ax, [di+0EBh] + add ax, [di+0EDh] + xchg ax, bx + mov ax, [di+8Fh] + add ax, 10h + add [di+0F9h], ax + add [di+0F1h], ax + xchg ax, bx + jmp short loc_9D25 +; --------------------------------------------------------------------------- + +loc_9CFB: ; CODE XREF: __exec+123j + mov ax, 4202h + xor cx, cx + xor dx, dx + int 21h ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK) + ; AL = method: offset from end of file + mov cx, 4 + +loc_9D07: ; CODE XREF: __exec+180j + shr dx, 1 + rcr ax, 1 + loop loc_9D07 + inc ax + xchg ax, bx + mov ax, [di+8Fh] + mov [di+0F9h], ax + mov word ptr [di+0F7h], 100h + mov [di+0F1h], ax + add ax, 10h + xchg ax, bx + +loc_9D25: ; CODE XREF: __exec+16Ej + mov [di+0FBh], bx + mov [di+0FDh], bx + add ax, 16h + cmp ax, [bp+var_4] + mov ax, 8 + jbe short loc_9D3B + jmp loc_9CB3 +; --------------------------------------------------------------------------- + +loc_9D3B: ; CODE XREF: __exec+1ABj + mov ah, 3Eh ; '>' + mov bx, [bp+var_2] + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + mov es, word ptr [di+8Fh] + assume es:nothing + mov ah, 4Ah ; 'J' + mov bx, [bp+var_4] + int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) + ; ES = segment address of block to change + ; BX = new size in paragraphs + jnb short loc_9D52 + jmp loc_9CB3 +; --------------------------------------------------------------------------- + +loc_9D52: ; CODE XREF: __exec+1C2j + add bx, [di+8Fh] + mov dx, bx + sub bx, 17h + mov cs:word_9B86, bx + mov es, bx + mov cx, 0B0h ; '' + mov si, 9A24h + xor di, di + rep movsw + mov es, [bp+var_C] + mov cx, [bp+var_6] + cmp cs:byte_9B8A, 0 + jnz short loc_9D84 + mov ah, 48h ; 'H' + mov bx, cx + int 21h ; DOS - 2+ - ALLOCATE MEMORY + ; BX = number of 16-byte paragraphs desired + jb short loc_9DBD + jmp short loc_9D88 +; --------------------------------------------------------------------------- + +loc_9D84: ; CODE XREF: __exec+1EDj + mov ax, cs:word_9B88 + +loc_9D88: ; CODE XREF: __exec+1F7j + mov es, ax + xor di, di + lds si, [bp+var_A] + assume ds:dseg + add cx, cx + add cx, cx + add cx, cx + rep movsw + push es + push dx + push ds + mov ds, cs:DGROUP@ + nop + push cs + call near ptr __cexit + pop ds + pop dx + cmp cs:byte_9B8A, 0 + jnz short loc_9DB7 + mov es, cs:word_9B88 + mov ah, 49h + int 21h ; DOS - 2+ - FREE MEMORY + ; ES = segment address of area to be freed + +loc_9DB7: ; CODE XREF: __exec+221j + pop cx + jmp dword ptr cs:byte_9B84 +; --------------------------------------------------------------------------- + +loc_9DBD: ; CODE XREF: __exec+21j __exec+131j ... + pop es + pop di + pop ds + pop si + push ax + call __IOERROR + mov sp, bp + pop bp + retn +__exec endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int execl(char *path, char *arg0, ...) +_execl proc far ; CODE XREF: sub_A576+22P + +s = dword ptr 6 +_arg0 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ss ; int + lea ax, [bp+_arg0] + push ax ; int + push word ptr [bp+s+2] + push word ptr [bp+s] ; s + mov ax, 9B8Bh + push ax ; int + call sub_A2EB + add sp, 10h + pop di + pop si + pop bp + retf +_execl endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl setblock(unsigned int segx, unsigned int newsize) +_setblock proc far ; CODE XREF: sub_4E02+4Ep + +_segx = word ptr 6 +newsize = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov ah, 4Ah ; 'J' + mov bx, [bp+newsize] + mov es, [bp+_segx] + int 21h ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK) + ; ES = segment address of block to change + ; BX = new size in paragraphs + jb short loc_9E02 + mov ax, 0FFFFh + jmp short loc_9E08 +; --------------------------------------------------------------------------- + +loc_9E02: ; CODE XREF: _setblock+Fj + push bx + push ax + call __IOERROR + pop ax + +loc_9E08: ; CODE XREF: _setblock+14j + pop di + pop si + pop bp + retf +_setblock endp + +; --------------------------------------------------------------------------- + push si + push di + mov es, word_10176 + xor di, di + push es + push word_10178 + nop + push cs + call sub_4C1A + pop bx + mov bx, ax + pop es + mov word ptr dword_11DB8, ax + mov word ptr dword_11DB8+2, dx + push ds + mov ds, dx + or ax, dx + jnz short loc_9E35 + nop + nop + jmp near ptr sub_3CE0 +; --------------------------------------------------------------------------- + +loc_9E35: ; CODE XREF: seg000:9E2Ej + xor ax, ax + mov cx, 0FFFFh + cmp byte ptr es:[di], 0 + jz short loc_9E4F + +loc_9E40: ; CODE XREF: seg000:9E4Dj + mov [bx], di + mov word ptr [bx+2], es + add bx, 4 + repne scasb + cmp es:[di], al + jnz short loc_9E40 + +loc_9E4F: ; CODE XREF: seg000:9E3Ej + mov [bx], ax + mov [bx+2], ax + pop ds + pop di + pop si + mov ax, word ptr dword_11DB8+2 + mov word_10172, ax + mov ax, word ptr dword_11DB8 + mov envp, ax + retn +; --------------------------------------------------------------------------- + +unknown_libname_2: ; BCC v4.x/5.x DOS runtime + push si + push di + pop di + pop si + retf +; --------------------------------------------------------------------------- + dd byte_F527 + db 4 dup(0), 69h, 9Eh + dw seg seg000 + db 0E2h, 0FFh +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_9EBE + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_9EBC + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_9EC0 +; --------------------------------------------------------------------------- + +loc_9EBC: ; CODE XREF: seg000:9EABj + jmp short loc_9EC0 +; --------------------------------------------------------------------------- + +loc_9EBE: ; CODE XREF: seg000:9E82j + xor ax, ax + +loc_9EC0: ; CODE XREF: seg000:9EBAj + ; seg000:loc_9EBCj + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + +unknown_libname_3: ; BCC v4.x/5.x DOS runtime + push si + push di + pop di + pop si + retf +; --------------------------------------------------------------------------- + dd byte_F6CF + dd byte_F681 + db 4 dup(0), 0BAh, 1 + dw seg seg003 + db 87h, 20h, 0FCh, 0FFh, 6 dup(0), 0C9h, 9Eh + dw seg seg000 + db 0DEh, 0FFh, 2 dup(0), 5, 3 dup(0), 2 dup(0FFh), 6, 0 + db 5, 3 dup(0), 0D5h, 9Eh +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_9F40 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_9F3E + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_9F42 +; --------------------------------------------------------------------------- + +loc_9F3E: ; CODE XREF: seg000:9F2Dj + jmp short loc_9F42 +; --------------------------------------------------------------------------- + +loc_9F40: ; CODE XREF: seg000:9F04j + xor ax, ax + +loc_9F42: ; CODE XREF: seg000:9F3Cj + ; seg000:loc_9F3Ej + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_9F8D + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_9F8B + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_9F8F +; --------------------------------------------------------------------------- + +loc_9F8B: ; CODE XREF: seg000:9F7Aj + jmp short loc_9F8F +; --------------------------------------------------------------------------- + +loc_9F8D: ; CODE XREF: seg000:9F51j + xor ax, ax + +loc_9F8F: ; CODE XREF: seg000:9F89j + ; seg000:loc_9F8Bj + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + +unknown_libname_4: ; BCC v4.x/5.x DOS runtime + push si + push di + pop di + pop si + retf +; --------------------------------------------------------------------------- + db 4 dup(0), 98h, 9Fh + dw seg seg000 + db 0E2h, 0FFh, 2, 0Ch + dw seg seg003 + db 4 dup(0), 0C8h, 0Bh + dw seg seg003 + db 4, 0, 0FCh, 0FFh, 2 dup(0), 2, 0Ch + dw seg seg003 + db 4, 0, 0F8h, 0FFh, 6 dup(0), 90h, 0Bh + dw seg seg003 + db 0, 2 dup(1), 7 dup(0), 0A2h, 9Fh + dw seg seg000 + db 0DAh, 0FFh, 2 dup(0), 5, 3 dup(0), 0AAh, 9Fh, 6, 0 + db 5, 0, 1, 0, 0C2h, 9Fh, 2, 0Ch + dw seg seg003 + db 4 dup(0), 0C8h, 0Bh + dw seg seg003 + db 4, 0, 0FCh, 0FFh, 2 dup(0), 2, 0Ch + dw seg seg003 + db 4, 0, 0F8h, 0FFh, 6 dup(0), 90h, 0Bh + dw seg seg003 + db 0, 2 dup(1), 7 dup(0), 0E6h, 9Fh + dw seg seg000 + db 0DAh, 0FFh, 2 dup(0), 5, 3 dup(0), 0EEh, 9Fh, 6, 0 + db 5, 0, 1, 0, 6, 0A0h, 2, 0Ch + dw seg seg003 + db 4 dup(0), 0C8h, 0Bh + dw seg seg003 + db 4, 0, 0FCh, 0FFh, 2 dup(0), 2, 0Ch + dw seg seg003 + db 4, 0, 0F8h, 0FFh, 6 dup(0), 90h, 0Bh + dw seg seg003 + db 0, 2 dup(1), 7 dup(0), 2Ah, 0A0h + dw seg seg000 + db 0DAh, 0FFh, 2 dup(0), 5, 3 dup(0), 32h, 0A0h, 6, 0 + db 5, 0, 1, 0, 4Ah, 0A0h, 4 dup(0), 6Eh, 0A0h + dw seg seg000 + db 0E2h, 0FFh, 4Eh, 0Bh + dw seg seg003 + dd byte_100B2 + db 4 dup(0), 78h, 0A0h + dw seg seg000 + db 0E2h, 0FFh, 4 dup(0), 8Ah, 0A0h + dw seg seg000 +byte_A092 db 0E2h, 0FFh, 4Eh, 0Bh ; DATA XREF: seg000:A0A0o + dw seg seg003 + dd byte_FFB0 + dd 0 + dd byte_A092+2 + db 0E2h, 0FFh, 4 dup(0), 0A6h, 0A0h + dw seg seg000 + db 0E2h, 0FFh, 4Eh, 0Bh + dw seg seg003 + dd byte_FFB0 + db 4 dup(0), 0B0h, 0A0h + dw seg seg000 + db 0E2h, 0FFh +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bctr$qmx4xmsg ; xmsg::xmsg(xmsg &) + add sp, 8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, [bp+8] + mov ax, [bp+6] + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_A13E + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_A13C + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_A140 +; --------------------------------------------------------------------------- + +loc_A13C: ; CODE XREF: seg000:A12Bj + jmp short loc_A140 +; --------------------------------------------------------------------------- + +loc_A13E: ; CODE XREF: seg000:A102j + xor ax, ax + +loc_A140: ; CODE XREF: seg000:A13Aj + ; seg000:loc_A13Cj + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_A18B + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_A189 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_A18D +; --------------------------------------------------------------------------- + +loc_A189: ; CODE XREF: seg000:A178j + jmp short loc_A18D +; --------------------------------------------------------------------------- + +loc_A18B: ; CODE XREF: seg000:A14Fj + xor ax, ax + +loc_A18D: ; CODE XREF: seg000:A187j + ; seg000:loc_A189j + pop di + pop si + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + push si + push di + mov ax, [bp+6] + or ax, [bp+8] + jz short loc_A1D8 + nop + push cs + call near ptr @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + xor ax, ax + push ax + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr @xmsg@$bdtr$qv ; xmsg::~xmsg(void) + add sp, 6 + test byte ptr [bp+0Ah], 1 + jz short loc_A1D6 + push word ptr [bp+8] + push word ptr [bp+6] + nop + push cs + call near ptr _registerbgidriver + pop cx + pop cx + jmp short loc_A1DA +; --------------------------------------------------------------------------- + +loc_A1D6: ; CODE XREF: seg000:A1C5j + jmp short loc_A1DA +; --------------------------------------------------------------------------- + +loc_A1D8: ; CODE XREF: seg000:A19Cj + xor ax, ax + +loc_A1DA: ; CODE XREF: seg000:A1D4j + ; seg000:loc_A1D6j + pop di + pop si + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A1DE proc far ; CODE XREF: sub_A2EB+3Ap + +var_8 = dword ptr -8 +var_4 = dword ptr -4 +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + sub sp, 8 + push si + push di + mov dx, [bp+arg_2] + mov ax, [bp+arg_0] + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + jmp short loc_A24F +; --------------------------------------------------------------------------- + +loc_A1F4: ; CODE XREF: sub_A1DE+78j + les bx, [bp+var_4] + mov al, es:[bx] + push ax + nop + push cs + call near ptr sub_52E7 + pop cx + or ax, ax + jz short loc_A213 + inc word ptr [bp+var_4] + les bx, [bp+var_4] + cmp byte ptr es:[bx], 0 + jnz short loc_A24C + jmp short loc_A258 +; --------------------------------------------------------------------------- + +loc_A213: ; CODE XREF: sub_A1DE+25j + mov dx, [bp+arg_6] + mov ax, [bp+arg_4] + mov word ptr [bp+var_8+2], dx + mov word ptr [bp+var_8], ax + jmp short loc_A232 +; --------------------------------------------------------------------------- + +loc_A221: ; CODE XREF: sub_A1DE+5Bj + les bx, [bp+var_4] + mov al, es:[bx] + les bx, [bp+var_8] + cmp al, es:[bx] + jz short loc_A23B + inc word ptr [bp+var_8] + +loc_A232: ; CODE XREF: sub_A1DE+41j + les bx, [bp+var_8] + cmp byte ptr es:[bx], 0 + jnz short loc_A221 + +loc_A23B: ; CODE XREF: sub_A1DE+4Fj + les bx, [bp+var_8] + cmp byte ptr es:[bx], 0 + jz short loc_A24C + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + jmp short loc_A25C +; --------------------------------------------------------------------------- + +loc_A24C: ; CODE XREF: sub_A1DE+31j sub_A1DE+64j + inc word ptr [bp+var_4] + +loc_A24F: ; CODE XREF: sub_A1DE+14j + les bx, [bp+var_4] + cmp byte ptr es:[bx], 0 + jnz short loc_A1F4 + +loc_A258: ; CODE XREF: sub_A1DE+33j + xor dx, dx + xor ax, ax + +loc_A25C: ; CODE XREF: sub_A1DE+6Cj + pop di + pop si + mov sp, bp + pop bp + retf +sub_A1DE endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_A262(int, int, char *pathname, char *src, int) +sub_A262 proc far ; CODE XREF: sub_A2EB+7Fp sub_A2EB+BDp ... + +dest = byte ptr -50h +arg_0 = word ptr 6 +arg_2 = word ptr 8 +pathname = dword ptr 0Ah +src = dword ptr 0Eh +arg_C = word ptr 12h + + push bp + mov bp, sp + sub sp, 50h + push si + push di + push [bp+arg_2] + push [bp+arg_0] ; src + push ss + lea ax, [bp+dest] + push ax ; dest + nop + push cs + call near ptr _strcpy + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push ss + lea ax, [bp+dest] + push ax ; dest + nop + push cs + call near ptr _strcat + add sp, 10h + cmp [bp+arg_C], 0 + jz short loc_A2B6 + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; pathname + push ds + mov ax, 1D22h + push ax ; varname + push ss + lea ax, [bp+dest] + push ax ; file + nop + push cs + call near ptr __searchenv + add sp, 0Ch + les bx, [bp+pathname] + cmp byte ptr es:[bx], 0 + jz short loc_A2E3 + jmp short loc_A2DE +; --------------------------------------------------------------------------- + +loc_A2B6: ; CODE XREF: sub_A262+2Fj + push ss + lea ax, [bp+dest] + push ax ; src + push word ptr [bp+pathname+2] + push word ptr [bp+pathname] ; dest + nop + push cs + call near ptr _strcpy + add sp, 8 + mov ax, 4 + push ax ; char + push ss + lea ax, [bp+dest] + push ax ; pathname + nop + push cs + call near ptr __access + add sp, 6 + or ax, ax + jnz short loc_A2E3 + +loc_A2DE: ; CODE XREF: sub_A262+52j + mov ax, 1 + jmp short loc_A2E5 +; --------------------------------------------------------------------------- + +loc_A2E3: ; CODE XREF: sub_A262+50j sub_A262+7Aj + xor ax, ax + +loc_A2E5: ; CODE XREF: sub_A262+7Fj + pop di + pop si + mov sp, bp + pop bp + retf +sub_A262 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl sub_A2EB(int, char *s, int, int, int, int, int) +sub_A2EB proc near ; CODE XREF: _execl+19p + +pathname = word ptr -9Ch +var_1A = word ptr -1Ah +var_18 = word ptr -18h +var_16 = word ptr -16h +var_14 = dword ptr -14h +s1 = dword ptr -10h +var_C = word ptr -0Ch +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +s = dword ptr 6 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh +arg_C = word ptr 10h +arg_E = word ptr 12h + + push bp + mov bp, sp + sub sp, 9Ch + push si + push di + les bx, [bp+s] + mov al, es:[bx] + cbw + mov dx, ax + cmp ax, 61h ; 'a' + jb short loc_A305 + sub dx, 20h ; ' ' + +loc_A305: ; CODE XREF: sub_A2EB+15j + cmp dx, 41h ; 'A' + jb short loc_A319 + cmp dx, 5Ah ; 'Z' + ja short loc_A319 + les bx, [bp+s] + cmp byte ptr es:[bx+1], 3Ah ; ':' + jz short loc_A32F + +loc_A319: ; CODE XREF: sub_A2EB+1Dj sub_A2EB+22j + push ds + mov ax, 1D27h + push ax + push word ptr [bp+s+2] + push word ptr [bp+s] + push cs + call near ptr sub_A1DE + add sp, 8 + or ax, dx + jz short loc_A334 + +loc_A32F: ; CODE XREF: sub_A2EB+2Cj + mov [bp+arg_E], 0 + +loc_A334: ; CODE XREF: sub_A2EB+42j + mov [bp+var_1A], 0 + mov ax, 2Eh ; '.' + push ax ; char + push word ptr [bp+s+2] + push word ptr [bp+s] ; s + nop + push cs + call near ptr sub_5F96 + add sp, 6 + mov word ptr [bp+s1+2], dx + mov word ptr [bp+s1], ax + or ax, dx + jz short loc_A393 + push [bp+arg_E] ; int + push ds + mov ax, 1D2Ah + push ax ; src + push ss + lea ax, [bp+pathname] + push ax ; pathname + push word ptr [bp+s+2] ; int + push word ptr [bp+s] ; int + push cs + call near ptr sub_A262 + add sp, 0Eh + mov [bp+var_18], ax + or ax, ax + jnz short loc_A37A + jmp loc_A3FE +; --------------------------------------------------------------------------- + +loc_A37A: ; CODE XREF: sub_A2EB+8Aj + push ds + mov ax, 1D2Bh + push ax ; s2 + push word ptr [bp+s1+2] + push word ptr [bp+s1] ; s1 + nop + push cs + call near ptr _stricmp + add sp, 8 + or ax, ax + jnz short loc_A3FE + jmp short loc_A3F9 +; --------------------------------------------------------------------------- + +loc_A393: ; CODE XREF: sub_A2EB+68j + push [bp+arg_E] ; int + push ds + mov ax, 1D30h + push ax ; src + push ss + lea ax, [bp+pathname] + push ax ; pathname + push word ptr [bp+s+2] ; int + push word ptr [bp+s] ; int + push cs + call near ptr sub_A262 + add sp, 0Eh + mov [bp+var_18], ax + or ax, ax + jnz short loc_A3FE + push [bp+arg_E] ; int + push ds + mov ax, 1D35h + push ax ; src + push ss + lea ax, [bp+pathname] + push ax ; pathname + push word ptr [bp+s+2] ; int + push word ptr [bp+s] ; int + push cs + call near ptr sub_A262 + add sp, 0Eh + mov [bp+var_18], ax + or ax, ax + jnz short loc_A3FE + push [bp+arg_E] ; int + push ds + mov ax, 1D3Ah + push ax ; src + push ss + lea ax, [bp+pathname] + push ax ; pathname + push word ptr [bp+s+2] ; int + push word ptr [bp+s] ; int + push cs + call near ptr sub_A262 + add sp, 0Eh + mov [bp+var_18], ax + or ax, ax + jz short loc_A3FE + +loc_A3F9: ; CODE XREF: sub_A2EB+A6j + mov [bp+var_1A], 1 + +loc_A3FE: ; CODE XREF: sub_A2EB+8Cj sub_A2EB+A4j ... + cmp [bp+var_18], 0 + jz short loc_A420 + cmp [bp+var_1A], 0 + jz short loc_A429 + push ds + mov ax, 1D3Fh + push ax ; name + nop + push cs + call near ptr _getenv + pop cx + pop cx + mov [bp+var_2], dx + mov [bp+var_4], ax + or ax, dx + jnz short loc_A429 + +loc_A420: ; CODE XREF: sub_A2EB+117j + mov word_1017E, 2 + jmp loc_A4EF +; --------------------------------------------------------------------------- + +loc_A429: ; CODE XREF: sub_A2EB+11Dj + ; sub_A2EB+133j + cmp [bp+var_1A], 0 + jz short loc_A442 + push [bp+var_2] + push [bp+var_4] + push ds + mov ax, 1D47h + push ax + push [bp+arg_8] + push [bp+arg_6] + jmp short loc_A456 +; --------------------------------------------------------------------------- + +loc_A442: ; CODE XREF: sub_A2EB+142j + push ss ; int + lea ax, [bp+pathname] + push ax ; int + xor ax, ax + push ax + push ax ; s + mov ax, [bp+arg_6] + add ax, 4 + push [bp+arg_8] ; int + push ax ; int + +loc_A456: ; CODE XREF: sub_A2EB+155j + call __DOSCMD + mov [bp+var_6], dx + mov [bp+var_8], ax + mov ax, [bp+var_8] + or ax, [bp+var_6] + jnz short loc_A470 + mov word_1017E, 8 + jmp loc_A4EF +; --------------------------------------------------------------------------- + +loc_A470: ; CODE XREF: sub_A2EB+17Aj + mov ax, [bp+var_8] + inc ax + push [bp+var_6] + push ax ; s + nop + push cs + call near ptr _strlen + pop cx + pop cx + cmp ax, 80h ; '' + jb short loc_A499 + mov word_1017E, 14h + push [bp+var_6] + push [bp+var_8] + nop + push cs + call near ptr sub_4AE7 + pop cx + pop cx + jmp short loc_A4EF +; --------------------------------------------------------------------------- + +loc_A499: ; CODE XREF: sub_A2EB+197j + mov ax, [bp+arg_A] + or ax, [bp+arg_C] + jnz short loc_A4AE + mov dx, word ptr dword_11DB8+2 + mov ax, word ptr dword_11DB8 + mov [bp+arg_C], dx + mov [bp+arg_A], ax + +loc_A4AE: ; CODE XREF: sub_A2EB+1B4j + push [bp+arg_C] ; int + push [bp+arg_A] ; int + cmp [bp+var_1A], 0 + jz short loc_A4C2 + mov dx, [bp+var_2] + mov ax, [bp+var_4] + jmp short loc_A4C8 +; --------------------------------------------------------------------------- + +loc_A4C2: ; CODE XREF: sub_A2EB+1CDj + mov dx, ss + lea ax, [bp+pathname] + +loc_A4C8: ; CODE XREF: sub_A2EB+1D5j + push dx + push ax ; s + push ss + lea ax, [bp+var_14] + push ax ; __int32 + call __DOSENV + mov [bp+var_A], dx + mov [bp+var_C], ax + or ax, dx + jnz short loc_A4F4 + mov word_1017E, 8 + push [bp+var_6] + push [bp+var_8] + nop + push cs + call near ptr sub_4AE7 + pop cx + pop cx + +loc_A4EF: ; CODE XREF: sub_A2EB+13Bj + ; sub_A2EB+182j ... + mov ax, 0FFFFh + jmp short loc_A53F +; --------------------------------------------------------------------------- + +loc_A4F4: ; CODE XREF: sub_A2EB+1EFj + call off_118FC + push [bp+var_A] + push [bp+var_C] + push [bp+var_6] + push [bp+var_8] + cmp [bp+var_1A], 0 + jz short loc_A512 + mov dx, [bp+var_2] + mov ax, [bp+var_4] + jmp short loc_A518 +; --------------------------------------------------------------------------- + +loc_A512: ; CODE XREF: sub_A2EB+21Dj + mov dx, ss + lea ax, [bp+pathname] + +loc_A518: ; CODE XREF: sub_A2EB+225j + push dx + push ax + ; Hack + db 0ffh + db 056h + db 004h + add sp, 0Ch + mov [bp+var_16], ax + push word ptr [bp+var_14+2] + push word ptr [bp+var_14] + nop + push cs + call near ptr sub_4AE7 + push [bp+var_6] + push [bp+var_8] + nop + push cs + call near ptr sub_4AE7 + add sp, 8 + mov ax, [bp+var_16] + +loc_A53F: ; CODE XREF: sub_A2EB+207j + pop di + pop si + mov sp, bp + pop bp + retn +sub_A2EB endp + +seg000 ends + +; =========================================================================== + +; Segment type: Pure code +seg001 segment byte public 'CODE' use16 + assume cs:seg001 + ;org 5 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A545 proc near ; CODE XREF: _main+3p + +var_A = byte ptr -0Ah +var_4 = word ptr -4 + + enter 0Ah, 0 + push si + push ds + push offset aMiko_cfg ; "MIKO.CFG" + call sub_A66 + push ss + lea ax, [bp+var_A] + push ax + push 0Ah + call sub_9B2 + call sub_946 + mov si, [bp+var_4] + mov word ptr dword_11E6E+2, si + mov word ptr dword_11E6E, 0 + mov ax, si + pop si + leave + retn +sub_A545 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __stdcall sub_A576(char *arg0) +sub_A576 proc near ; CODE XREF: _main+95p + +_arg0 = dword ptr 4 + + push bp + mov bp, sp + call sub_F3EE + call sub_13E8 + call sub_2298 + call sub_EC36 + push large 0 + push large [bp+_arg0] ; arg0 + push large [bp+_arg0] ; path + call _execl + add sp, 0Ch + pop bp + retn 4 +sub_A576 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A5A4 proc near ; CODE XREF: _main+62p _main+75p + push bp + mov bp, sp + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FEh ; '' + jnz short loc_A5BD + les bx, off_10190 + mov byte ptr es:[bx+3], 30h ; '0' + jmp short loc_A5DC +; --------------------------------------------------------------------------- + +loc_A5BD: ; CODE XREF: sub_A5A4+Cj + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FDh ; '' + jnz short loc_A5D3 + les bx, off_10190 + mov byte ptr es:[bx+3], 32h ; '2' + jmp short loc_A5DC +; --------------------------------------------------------------------------- + +loc_A5D3: ; CODE XREF: sub_A5A4+22j + les bx, off_10190 + mov byte ptr es:[bx+3], 31h ; '1' + +loc_A5DC: ; CODE XREF: sub_A5A4+17j sub_A5A4+2Dj + les bx, dword_11E6E + mov al, es:[bx+14h] + add al, 30h ; '0' + les bx, off_10190 + mov es:[bx+4], al + push word ptr off_10190+2 + push bx + call sub_A695 + call sub_AFD6 + pop bp + retn +sub_A5A4 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl main(int argc, const char **argv, const char **envp) +_main proc far ; CODE XREF: start+13BP + +_argc = word ptr 6 +_argv = dword ptr 8 +_envp = dword ptr 0Ch + + push bp + mov bp, sp + call sub_A545 + or ax, ax + jz loc_A693 + mov word_107CA, 5208h + push ds + push offset unk_101A7 + call sub_F0B4 + les bx, dword_11E6E + mov al, es:[bx+12h] + mov ah, 0 + push ax + mov al, es:[bx+15h] + mov ah, 0 + push ax + call sub_E878 + push ds + push offset aMiko ; "miko" + push 0B00h + call sub_ED60 + call sub_1A86 + les bx, dword_11E6E + mov eax, es:[bx+28h] + mov dword_10376, eax + push 64h ; 'd' + call sub_F282 + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FEh ; '' + jb short loc_A665 + call sub_A5A4 + call sub_E41D + jmp short loc_A679 +; --------------------------------------------------------------------------- + +loc_A665: ; CODE XREF: _main+60j + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FDh ; '' + jnz short loc_A67E + call sub_A5A4 + call sub_B3CB + call sub_D1B1 + +loc_A679: ; CODE XREF: _main+68j + call sub_C1DD + jmp short loc_A684 +; --------------------------------------------------------------------------- + +loc_A67E: ; CODE XREF: _main+73j + call sub_C1DD + call sub_D1B1 + +loc_A684: ; CODE XREF: _main+81j + push 204h + call sub_EE18 + push ds + push offset arg0 ; "op" + call sub_A576 + +loc_A693: ; CODE XREF: _main+8j + pop bp + retf +_main endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A695 proc near ; CODE XREF: sub_A5A4+4Fp + +var_2 = word ptr -2 +arg_0 = dword ptr 4 + + enter 2, 0 + push large [bp+arg_0] + call sub_A66 + or ax, ax + jnz short loc_A6AD + mov ax, 1 + leave + retn 4 +; --------------------------------------------------------------------------- + +loc_A6AD: ; CODE XREF: sub_A695+Fj + call sub_AE4 + mov [bp+var_2], ax + mov word_14F88, 2E88h + push ds + push word_14F88 + push ax + call sub_9B2 + call sub_946 + xor ax, ax + leave + retn 4 +sub_A695 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A6D1 proc near ; CODE XREF: sub_A8EC+Ap + push bp + mov bp, sp + call sub_824 + mov ax, 0FFF0h + mov dx, 4A0h + out dx, ax + mov ax, 0FFh + mov dx, 4A2h + out dx, ax + mov ax, 3100h + mov dx, 4A4h + out dx, ax + mov ax, 0FFFFh + mov dx, 4A8h + out dx, ax + mov ax, 0 + mov dx, 4ACh + out dx, ax + mov ax, 0Fh + mov dx, 4AEh + out dx, ax + pop bp + retn +sub_A6D1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A705 proc near ; CODE XREF: sub_A9C3+46Cp + +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov si, [bp+arg_6] + mov di, [bp+arg_4] + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push si + push di + push 0 + push [bp+arg_2] + push [bp+arg_0] + call sub_EE68 + push si + push di + push large 14000C8h + call sub_F3FC + pop di + pop si + pop bp + retn 8 +sub_A705 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A738 proc near ; CODE XREF: sub_A7FE+14p sub_A9C3+65p ... + +var_2 = byte ptr -2 +var_1 = byte ptr -1 +arg_0 = dword ptr 4 + + enter 2, 0 + mov bx, word_14F88 + mov cl, [bx] + inc word_14F88 + mov bx, word_14F88 + mov al, [bx] + mov [bp+var_1], al + inc word_14F88 + mov bx, word_14F88 + mov al, [bx] + mov [bp+var_2], al + inc word_14F88 + mov al, cl + mov ah, 0 + mov bx, ax + test byte ptr [bx+1A39h], 2 + jnz short loc_A77F + les bx, [bp+arg_0] + mov ax, word_1500C + mov es:[bx], ax + sub word_14F88, 3 + leave + retn 4 +; --------------------------------------------------------------------------- + +loc_A77F: ; CODE XREF: sub_A738+33j + mov al, [bp+var_1] + mov ah, 0 + mov bx, ax + test byte ptr [bx+1A39h], 2 + jnz short loc_A7A3 + mov al, cl + mov ah, 0 + add ax, 0FFD0h + les bx, [bp+arg_0] + mov es:[bx], ax + sub word_14F88, 2 + leave + retn 4 +; --------------------------------------------------------------------------- + +loc_A7A3: ; CODE XREF: sub_A738+53j + mov al, [bp+var_2] + mov ah, 0 + mov bx, ax + test byte ptr [bx+1A39h], 2 + jnz short loc_A7D3 + mov al, cl + mov ah, 0 + add ax, 0FFD0h + imul ax, 0Ah + mov dl, [bp+var_1] + mov dh, 0 + add ax, dx + add ax, 0FFD0h + les bx, [bp+arg_0] + mov es:[bx], ax + dec word_14F88 + leave + retn 4 +; --------------------------------------------------------------------------- + +loc_A7D3: ; CODE XREF: sub_A738+77j + mov al, cl + mov ah, 0 + add ax, 0FFD0h + imul ax, 64h + mov dl, [bp+var_1] + mov dh, 0 + add dx, 0FFD0h + imul dx, 0Ah + add ax, dx + mov dl, [bp+var_2] + mov dh, 0 + add ax, dx + add ax, 0FFD0h + les bx, [bp+arg_0] + mov es:[bx], ax + leave + retn 4 +sub_A738 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A7FE proc near ; CODE XREF: sub_A9C3+194p + ; sub_A9C3+45Bp + +arg_0 = dword ptr 4 + + push bp + mov bp, sp + mov bx, word_14F88 + cmp byte ptr [bx], 2Ch ; ',' + +loc_A808: ; CODE XREF: sub_BA84+13j sub_BE76+8Bj + jnz short loc_A819 + inc word_14F88 + push large [bp+arg_0] + call sub_A738 + pop bp + retn 4 +; --------------------------------------------------------------------------- + +loc_A819: ; CODE XREF: sub_A7FE:loc_A808j + les bx, [bp+arg_0] + mov ax, word_1500C + mov es:[bx], ax + pop bp + retn 4 +sub_A7FE endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A826 proc near ; CODE XREF: sub_AFD6:loc_B18Dp + push bp + mov bp, sp + add word_15004, 10h + cmp word_15004, 230h + jl short loc_A864 + add word_15006, 10h + mov word_15004, 90h ; 'E + cmp word_15006, 180h + jl short loc_A864 + call sub_A8EC + cmp byte_14F8E, 0 + jnz short loc_A858 + push 0 + call sub_A92B + +loc_A858: ; CODE XREF: sub_A826+2Bj + mov word_15004, 50h ; 'P' + mov word_15006, 140h + +loc_A864: ; CODE XREF: sub_A826+Ej sub_A826+21j + pop bp + retn +sub_A826 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A866 proc near ; CODE XREF: sub_A8EC+19p sub_A8EC+2Dp + +var_2 = word ptr -2 +arg_0 = word ptr 4 + + enter 2, 0 + push si + push di + mov cx, 140h + jmp short loc_A8E0 +; --------------------------------------------------------------------------- + +loc_A871: ; CODE XREF: sub_A866+7Ej + mov ax, 0FFh + mov dx, 4A2h + out dx, ax + mov ax, 3100h + mov dx, 4A4h + out dx, ax + mov ax, 0Fh + mov dx, 4AEh + out dx, ax + mov bx, [bp+arg_0] + shl bx, 3 + mov ax, cx + and ax, 3 + add ax, ax + add bx, ax + mov ax, [bx+732h] + mov dx, 4A8h + out dx, ax + mov ax, cx + shl ax, 6 + mov dx, cx + shl dx, 4 + add ax, dx + add ax, 0Ah + mov si, ax + xor di, di + jmp short loc_A8D9 +; --------------------------------------------------------------------------- + +loc_A8B2: ; CODE XREF: sub_A866+77j + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + les bx, dword_1081E + add bx, si + mov ax, es:[bx] + mov [bp+var_2], ax + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov bx, word ptr dword_1081E + add bx, si + mov ax, [bp+var_2] + mov es:[bx], ax + add di, 10h + add si, 2 + +loc_A8D9: ; CODE XREF: sub_A866+4Aj + cmp di, 1E0h + jl short loc_A8B2 + inc cx + +loc_A8E0: ; CODE XREF: sub_A866+9j + cmp cx, 180h + jl short loc_A871 + pop di + pop si + leave + retn 2 +sub_A866 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A8EC proc near ; CODE XREF: sub_A826+23p sub_A9C3+51p ... + push bp + mov bp, sp + push si + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + call sub_A6D1 + cmp byte_14F8E, 0 + jnz short loc_A917 + xor si, si + jmp short loc_A912 +; --------------------------------------------------------------------------- + +loc_A904: ; CODE XREF: sub_A8EC+29j + push si + call sub_A866 + push word_15008 + call sub_F282 + inc si + +loc_A912: ; CODE XREF: sub_A8EC+16j + cmp si, 4 + jl short loc_A904 + +loc_A917: ; CODE XREF: sub_A8EC+12j + push 4 + call sub_A866 + call sub_83A + push 1 + call sub_F282 + pop si + pop bp + retn +sub_A8EC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A92B proc near ; CODE XREF: sub_A826+2Fp sub_A9C3+72p ... + +var_2 = word ptr -2 +arg_0 = word ptr 4 + + enter 2, 0 + push si + push di + mov si, [bp+arg_0] + xor di, di + mov [bp+var_2], 0 + +loc_A93B: ; CODE XREF: sub_A92B+23j + call sub_F202 + cmp word_12AFA, 0 + jz short loc_A950 + push 1 + call sub_F282 + jmp short loc_A93B +; --------------------------------------------------------------------------- + +loc_A950: ; CODE XREF: sub_A92B+1Aj + or si, si + jnz short loc_A95C + mov si, 3E7h + mov [bp+var_2], 1 + +loc_A95C: ; CODE XREF: sub_A92B+27j + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + +loc_A962: ; CODE XREF: sub_A92B+90j + call sub_F202 + push 240h + push word_15006 + push large 100010h + call far ptr loc_ECDE + or si, si + jle short loc_A9BD + test byte ptr word_12AFA+1, 20h + jnz short loc_A9BD + test byte ptr word_12AFA, 20h + jnz short loc_A9BD + test byte ptr word_12AFA+1, 10h + jnz short loc_A9BD + push 240h + push word_15006 + mov ax, di + shr ax, 3 + and ax, 3 + add ax, 1Ch + push ax + push 0Fh + call sub_38E6 + inc di + cmp [bp+var_2], 0 + jnz short loc_A9B4 + dec si + +loc_A9B4: ; CODE XREF: sub_A92B+86j + push 1 + call sub_F282 + jmp short loc_A962 +; --------------------------------------------------------------------------- + +loc_A9BD: ; CODE XREF: sub_A92B+50j sub_A92B+57j ... + pop di + pop si + leave + retn 2 +sub_A92B endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_A9C3 proc near ; CODE XREF: sub_AFD6+7Dp + +var_16 = byte ptr -16h +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = byte ptr 4 + + enter 16h, 0 + push si + mov al, [bp+arg_0] + mov ah, 0 + push ax ; ch + call _tolower + pop cx + mov [bp+arg_0], al + mov ah, 0 + mov [bp+var_6], ax + mov cx, 10h ; switch 16 cases + mov bx, offset word_AF96 + +loc_A9E2: ; CODE XREF: sub_A9C3+2Aj + mov ax, cs:[bx] + cmp ax, [bp+var_6] + jz short loc_A9F2 + add bx, 2 + loop loc_A9E2 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_A9F2: ; CODE XREF: sub_A9C3+25j + jmp word ptr cs:[bx+20h] ; switch jump + +loc_A9F6: ; DATA XREF: seg001:0A76o + add word_15006, 10h ; jumptable 0000A9F2 case 110 + mov word_15004, 50h ; 'P' + cmp word_15006, 180h + jl loc_AF8F ; default + +loc_AA0B: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov bx, word_14F88 ; jumptable 0000A9F2 case 115 + mov al, [bx] + mov [bp+arg_0], al + call sub_A8EC + cmp [bp+arg_0], 2Dh ; '-' + jz short loc_AA3A + mov word_1500C, 0 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + cmp byte_14F8E, 0 + jnz short loc_AA3E + push [bp+var_2] + call sub_A92B + jmp short loc_AA3E +; --------------------------------------------------------------------------- + +loc_AA3A: ; CODE XREF: sub_A9C3+58j + inc word_14F88 + +loc_AA3E: ; CODE XREF: sub_A9C3+6Dj sub_A9C3+75j + mov word_15004, 50h ; 'P' + mov word_15006, 140h + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push large 500140h + push large 1E00040h + call far ptr loc_ECDE + mov dx, 0A6h ; '' + mov al, 0 + +loc_AA66: ; CODE XREF: sub_A9C3+1E6j + out dx, al ; Interrupt Controller #2, 8259A + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AA6A: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov bx, word_14F88 ; jumptable 0000A9F2 case 99 + mov al, [bx] + mov ah, 0 + push ax ; ch + call _tolower + pop cx + mov [bp+arg_0], al + cmp [bp+arg_0], 3Dh ; '=' + jz loc_AF34 + mov word_1500C, 0Fh + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + mov al, byte ptr [bp+var_2] + mov byte_1500A, al + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AA9B: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov word_1500C, 2 ; jumptable 0000A9F2 case 98 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + mov ax, [bp+var_2] + mov word_107BC, ax + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AAB2: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov bx, word_14F88 ; jumptable 0000A9F2 case 119 + mov al, [bx] + mov ah, 0 + push ax ; ch + call _tolower + pop cx + mov [bp+arg_0], al + cmp [bp+arg_0], 6Fh ; 'o' + jz short loc_AAD0 + cmp [bp+arg_0], 69h ; 'i' + jnz short loc_AAFE + +loc_AAD0: ; CODE XREF: sub_A9C3+105j + inc word_14F88 + mov word_1500C, 1 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + cmp [bp+arg_0], 69h ; 'i' + jnz short loc_AAF3 + push [bp+var_2] + call sub_243C + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AAF3: ; CODE XREF: sub_A9C3+123j + push [bp+var_2] + call sub_247C + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AAFE: ; CODE XREF: sub_A9C3+10Bj + call sub_A8EC + mov word_1500C, 40h ; '@' + cmp [bp+arg_0], 6Dh ; 'm' + jz short loc_AB33 + cmp [bp+arg_0], 6Bh ; 'k' + jnz short loc_AB17 + inc word_14F88 + +loc_AB17: ; CODE XREF: sub_A9C3+14Ej + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + cmp byte_14F8E, 0 + jnz loc_AF8F ; default + push [bp+var_2] + call sub_F282 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AB33: ; CODE XREF: sub_A9C3+148j + inc word_14F88 + mov bx, word_14F88 + mov al, [bx] + mov [bp+arg_0], al + cmp [bp+arg_0], 6Bh ; 'k' + jnz short loc_AB4A + inc word_14F88 + +loc_AB4A: ; CODE XREF: sub_A9C3+181j + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + push ss + lea ax, [bp+var_4] + push ax + call sub_A7FE + cmp byte_14F8E, 0 + jnz loc_AF8F ; default + push [bp+var_2] + push [bp+var_4] + call sub_F25F + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AB71: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov bx, word_14F88 ; jumptable 0000A9F2 case 118 + cmp byte ptr [bx], 70h ; 'p' + jz short loc_AB91 + mov word_1500C, 2 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + mov ax, [bp+var_2] + mov word_15008, ax + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AB91: ; CODE XREF: sub_A9C3+1B5j + inc word_14F88 + mov word_1500C, 0 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + mov dx, 0A4h ; '' + mov al, byte ptr [bp+var_2] + jmp loc_AA66 +; --------------------------------------------------------------------------- + +loc_ABAC: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov word_1500C, 64h ; 'd' ; jumptable 0000A9F2 case 116 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + cmp byte_14F8E, 0 + jnz short loc_ABC8 + push 1 + call sub_F282 + +loc_ABC8: ; CODE XREF: sub_A9C3+1FCj + mov ax, [bp+var_2] + mov word_10338, ax + call far ptr loc_1B8A + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_ABD6: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov bx, word_14F88 ; jumptable 0000A9F2 case 102 + mov al, [bx] + mov [bp+arg_0], al + cmp [bp+arg_0], 6Dh ; 'm' + jz short loc_AC21 + cmp [bp+arg_0], 69h ; 'i' + jz short loc_ABF3 + cmp [bp+arg_0], 6Fh ; 'o' + jnz loc_AF8F ; default + +loc_ABF3: ; CODE XREF: sub_A9C3+226j + inc word_14F88 + mov word_1500C, 1 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + cmp [bp+arg_0], 69h ; 'i' + jnz short loc_AC16 + push [bp+var_2] + call sub_600 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AC16: ; CODE XREF: sub_A9C3+246j + push [bp+var_2] + call sub_644 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AC21: ; CODE XREF: sub_A9C3+220j + inc word_14F88 + mov word_1500C, 1 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + mov ax, [bp+var_2] + add ax, 200h + push ax + jmp loc_AF11 +; --------------------------------------------------------------------------- + +loc_AC3D: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov word_1500C, 8 ; jumptable 0000A9F2 case 103 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + mov [bp+var_4], 0 + jmp short loc_AC75 +; --------------------------------------------------------------------------- + +loc_AC52: ; CODE XREF: sub_A9C3+2B8j + test byte ptr [bp+var_4], 1 + jz short loc_AC5C + push 4 + jmp short loc_AC5F +; --------------------------------------------------------------------------- + +loc_AC5C: ; CODE XREF: sub_A9C3+293j + push 18Ch + +loc_AC5F: ; CODE XREF: sub_A9C3+297j + call sub_1A2E + cmp byte_14F8E, 0 + jnz short loc_AC72 + push 1 + call sub_F282 + +loc_AC72: ; CODE XREF: sub_A9C3+2A6j + inc [bp+var_4] + +loc_AC75: ; CODE XREF: sub_A9C3+28Dj + mov ax, [bp+var_4] + cmp ax, [bp+var_2] + jle short loc_AC52 + push 0 + call sub_1A2E + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AC87: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + call sub_A8EC ; jumptable 0000A9F2 case 107 + mov word_1500C, 0 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + cmp byte_14F8E, 0 + jnz loc_AF8F ; default + push [bp+var_2] + call sub_A92B + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_ACAA: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov dx, 0A6h ; '' ; jumptable 0000A9F2 case 64 + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + call sub_1302 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + call sub_1302 + call sub_EB66 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_ACC8: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov bx, word_14F88 ; jumptable 0000A9F2 case 112 + mov al, [bx] + mov [bp+arg_0], al + inc word_14F88 + cmp [bp+arg_0], 3Dh ; '=' + jz short loc_ACE1 + cmp [bp+arg_0], 40h ; '@' + jnz short loc_AD13 + +loc_ACE1: ; CODE XREF: sub_A9C3+316j + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + cmp [bp+arg_0], 3Dh ; '=' + jnz short loc_ACF4 + push 0 + call sub_F05C + +loc_ACF4: ; CODE XREF: sub_A9C3+328j + push large 0 + push 0 + call sub_EFAC + push 0 + call sub_133C + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + call sub_EB66 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AD13: ; CODE XREF: sub_A9C3+31Cj + cmp [bp+arg_0], 2Dh ; '-' + jnz short loc_AD23 + push 0 + call sub_F082 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AD23: ; CODE XREF: sub_A9C3+354j + cmp [bp+arg_0], 70h ; 'p' + jnz short loc_AD33 + push 0 + call sub_F05C + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AD33: ; CODE XREF: sub_A9C3+364j + cmp [bp+arg_0], 2Ch ; ',' + jz short loc_AD40 + dec word_14F88 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AD40: ; CODE XREF: sub_A9C3+374j + mov [bp+var_2], 0 + jmp short loc_AD74 +; --------------------------------------------------------------------------- + +loc_AD47: ; CODE XREF: sub_A9C3+3B5j + mov bx, word_14F88 + mov al, [bx] + mov [bp+arg_0], al + inc word_14F88 + mov ah, 0 + mov bx, ax + test byte ptr [bx+1A39h], 20h + jnz short loc_AD7A + +loc_AD5F: + cmp [bp+arg_0], 20h ; ' ' + jz short loc_AD7A + lea bx, [bp+var_16] + add bx, [bp+var_2] + mov al, [bp+arg_0] + mov ss:[bx], al + inc [bp+var_2] + +loc_AD74: ; CODE XREF: sub_A9C3+382j + cmp [bp+var_2], 0Ch + jl short loc_AD47 + +loc_AD7A: ; CODE XREF: sub_A9C3+39Aj + ; sub_A9C3+3A0j + lea bx, [bp+var_16] + add bx, [bp+var_2] + mov byte ptr ss:[bx], 0 + push 0 + call sub_F082 + push 0 + push ss + lea ax, [bp+var_16] + push ax + call sub_EF7A + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AD9A: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov word_1500C, 4 ; jumptable 0000A9F2 case 61 + mov bx, word_14F88 + mov al, [bx] + mov [bp+arg_0], al + cmp [bp+arg_0], 3Dh ; '=' + jz short loc_AE07 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + push 1 + call sub_F282 + mov dx, 0A4h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + cmp [bp+var_2], 4 + jge short loc_ADE3 + push large 0A00040h + push 0 + push [bp+var_2] + call sub_EFDC + jmp loc_AE64 +; --------------------------------------------------------------------------- + +loc_ADE3: ; CODE XREF: sub_A9C3+40Bj + push large 0C00000h + call sub_F28 + push large 140040h + push large 3B0107h + call sub_C9E + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + jmp short loc_AE64 +; --------------------------------------------------------------------------- + +loc_AE07: ; CODE XREF: sub_A9C3+3EAj + inc word_14F88 + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + mov word_1500C, 1 + push ss + +loc_AE1A: + lea ax, [bp+var_4] + push ax + call sub_A7FE + xor si, si + jmp short loc_AE42 +; --------------------------------------------------------------------------- + +loc_AE25: ; CODE XREF: sub_A9C3+482j + push large 0A00040h + push [bp+var_2] + push si + call sub_A705 + cmp byte_14F8E, 0 + jnz short loc_AE41 + push [bp+var_4] + call sub_F282 + +loc_AE41: ; CODE XREF: sub_A9C3+474j + inc si + +loc_AE42: ; CODE XREF: sub_A9C3+460j + cmp si, 4 + jl short loc_AE25 + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push large 0A00040h + push 0 + push [bp+var_2] + call sub_EFDC + push 1 + call sub_F282 + +loc_AE64: ; CODE XREF: sub_A9C3+41Dj + ; sub_A9C3+442j + push large 0A00040h + push large 14000C8h + call sub_F3FC + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AE78: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov bx, word_14F88 ; jumptable 0000A9F2 case 109 + mov al, [bx] + mov [bp+arg_0], al + cmp [bp+arg_0], 24h ; '$' + jnz short loc_AE96 + inc word_14F88 + push 100h + call sub_EE18 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AE96: ; CODE XREF: sub_A9C3+4C2j + cmp [bp+arg_0], 2Ah ; '*' + jnz short loc_AEAA + inc word_14F88 + push 0 + call sub_EE18 + jmp loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AEAA: ; CODE XREF: sub_A9C3+4D7j + cmp [bp+arg_0], 2Ch ; ',' + jnz loc_AF8F ; default + inc word_14F88 + mov [bp+var_2], 0 + jmp short loc_AEEA +; --------------------------------------------------------------------------- + +loc_AEBD: ; CODE XREF: sub_A9C3+52Bj + mov bx, word_14F88 + mov al, [bx] + mov [bp+arg_0], al + inc word_14F88 + mov ah, 0 + mov bx, ax + test byte ptr [bx+1A39h], 20h + jnz short loc_AEF0 + cmp [bp+arg_0], 20h ; ' ' + jz short loc_AEF0 + lea bx, [bp+var_16] + add bx, [bp+var_2] + mov al, [bp+arg_0] + mov ss:[bx], al + inc [bp+var_2] + +loc_AEEA: ; CODE XREF: sub_A9C3+4F8j + cmp [bp+var_2], 0Ch + jl short loc_AEBD + +loc_AEF0: ; CODE XREF: sub_A9C3+510j + ; sub_A9C3+516j + lea bx, [bp+var_16] + add bx, [bp+var_2] + mov byte ptr ss:[bx], 0 + push 100h + call sub_EE18 + push ss + lea ax, [bp+var_16] + push ax + push 600h + call sub_ED60 + push 0 + +loc_AF11: ; CODE XREF: sub_A9C3+277j + call sub_EE18 + jmp short loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AF18: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + push ss ; jumptable 0000A9F2 case 101 + lea ax, [bp+var_2] + push ax + call sub_A738 + call sub_EAD4 + push [bp+var_2] + call sub_EAE0 + call sub_EB1A + jmp short loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AF34: ; CODE XREF: sub_A9C3+BDj + inc word_14F88 + mov al, byte_10830 + mov ah, 0 + imul ax, 6 + mov bx, word_14F88 + mov dl, [bx] + mov bx, ax + mov [bx+4ED3h], dl + inc word_14F88 + mov al, byte_10830 + mov ah, 0 + imul ax, 6 + mov bx, word_14F88 + mov dl, [bx] + mov bx, ax + mov [bx+4ED4h], dl + add word_14F88, 2 + mov word_1500C, 0Fh + push ss + lea ax, [bp+var_2] + push ax + call sub_A738 + mov al, byte_10830 + mov ah, 0 + mov dl, byte ptr [bp+var_2] + mov bx, ax + mov [bx+4ECBh], dl + inc byte_10830 + jmp short loc_AF8F ; default +; --------------------------------------------------------------------------- + +loc_AF8B: ; CODE XREF: sub_A9C3:loc_A9F2j + ; DATA XREF: seg001:0A76o + mov al, 0FFh ; jumptable 0000A9F2 case 36 + jmp short loc_AF91 +; --------------------------------------------------------------------------- + +loc_AF8F: ; CODE XREF: sub_A9C3+2Cj sub_A9C3+44j ... + mov al, 0 ; default + +loc_AF91: ; CODE XREF: sub_A9C3+5CAj + pop si + leave + retn 2 +sub_A9C3 endp + +; --------------------------------------------------------------------------- +word_AF96 dw 24h, 3Dh, 40h, 62h ; DATA XREF: sub_A9C3+1Co + dw 63h, 65h, 66h, 67h ; value table for switch statement + dw 6Bh, 6Dh, 6Eh, 70h + dw 73h, 74h, 76h, 77h + dw offset loc_AF8B ; jump table for switch statement + dw offset loc_AD9A + dw offset loc_ACAA + dw offset loc_AA9B + dw offset loc_AA6A + dw offset loc_AF18 + dw offset loc_ABD6 + dw offset loc_AC3D + dw offset loc_AC87 + dw offset loc_AE78 + dw offset loc_A9F6 + dw offset loc_ACC8 + dw offset loc_AA0B + dw offset loc_ABAC + dw offset loc_AB71 + dw offset loc_AAB2 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_AFD6 proc near ; CODE XREF: sub_A5A4+52p + +var_A = word ptr -0Ah +var_8 = dword ptr -8 +var_3 = word ptr -3 + + enter 0Ah, 0 + push si + mov word ptr [bp+var_8+2], ds + mov word ptr [bp+var_8], 75Ah + mov word_15004, 50h ; 'P' + mov word_15006, 140h + mov word_15008, 2 + mov byte_1500A, 0Fh + mov word_107BC, 2 + mov byte_14F8E, 0 + +loc_B005: ; CODE XREF: sub_AFD6+5Fj sub_AFD6+65j ... + call sub_F202 + test byte ptr word_12AFA+1, 10h + jz short loc_B018 + mov byte_14F8E, 1 + jmp short loc_B01D +; --------------------------------------------------------------------------- + +loc_B018: ; CODE XREF: sub_AFD6+39j + mov byte_14F8E, 0 + +loc_B01D: ; CODE XREF: sub_AFD6+40j + xor si, si + mov bx, word_14F88 + mov al, [bx] + mov byte ptr [bp+var_3], al + inc word_14F88 + mov ah, 0 + mov bx, ax + test byte ptr [bx+1A39h], 20h + jnz short loc_B005 + cmp byte ptr [bp+var_3], 20h ; ' ' + jz short loc_B005 + cmp byte ptr [bp+var_3], 5Ch ; '\' + jnz short loc_B05D + mov bx, word_14F88 + mov al, [bx] + mov byte ptr [bp+var_3], al + inc word_14F88 + push [bp+var_3] + call sub_A9C3 + cmp al, 0FFh + jnz short loc_B005 + jmp loc_B196 +; --------------------------------------------------------------------------- + +loc_B05D: ; CODE XREF: sub_AFD6+6Bj + cmp byte ptr [bp+var_3], 40h ; '@' + jnz loc_B118 + mov bx, word_14F88 + mov al, [bx] + mov ah, 0 + push ax ; ch + call _tolower + pop cx + mov byte ptr [bp+var_3], al + inc word_14F88 + mov ah, 0 + mov [bp+var_A], ax + mov cx, 4 ; switch 4 cases + mov bx, offset word_B1A5 + +loc_B086: ; CODE XREF: sub_AFD6+BBj + mov ax, cs:[bx] + cmp ax, [bp+var_A] + jz short loc_B095 + add bx, 2 + loop loc_B086 + jmp short loc_B0E2 ; default +; --------------------------------------------------------------------------- + +loc_B095: ; CODE XREF: sub_AFD6+B6j + jmp word ptr cs:[bx+8] ; switch jump + +loc_B099: ; DATA XREF: seg001:0C6Do + mov [bp+var_3+1], 9 ; jumptable 0000B095 case 116 + jmp short loc_B0F4 +; --------------------------------------------------------------------------- + +loc_B0A0: ; CODE XREF: sub_AFD6:loc_B095j + ; DATA XREF: seg001:0C6Do + mov [bp+var_3+1], 6 ; jumptable 0000B095 case 104 + jmp short loc_B0F4 +; --------------------------------------------------------------------------- + +loc_B0A7: ; CODE XREF: sub_AFD6:loc_B095j + ; DATA XREF: seg001:0C6Do + mov [bp+var_3+1], 8 ; jumptable 0000B095 case 63 + jmp short loc_B0F4 +; --------------------------------------------------------------------------- + +loc_B0AE: ; CODE XREF: sub_AFD6:loc_B095j + ; DATA XREF: seg001:0C6Do + mov bx, word_14F88 ; jumptable 0000B095 case 33 + mov al, [bx] + mov byte ptr [bp+var_3], al + inc word_14F88 + mov ah, 0 + cmp ax, 21h ; '!' + jz short loc_B0C9 + cmp ax, 3Fh ; '?' + jz short loc_B0D0 + jmp short loc_B0D7 +; --------------------------------------------------------------------------- + +loc_B0C9: ; CODE XREF: sub_AFD6+EAj + mov [bp+var_3+1], 0Ah + jmp short loc_B0F4 +; --------------------------------------------------------------------------- + +loc_B0D0: ; CODE XREF: sub_AFD6+EFj + mov [bp+var_3+1], 0Bh + jmp short loc_B0F4 +; --------------------------------------------------------------------------- + +loc_B0D7: ; CODE XREF: sub_AFD6+F1j + dec word_14F88 + mov [bp+var_3+1], 7 + jmp short loc_B0F4 +; --------------------------------------------------------------------------- + +loc_B0E2: ; CODE XREF: sub_AFD6+BDj + dec word_14F88 ; default + mov word_1500C, 3 + push ss + lea ax, [bp+var_3+1] + push ax + call sub_A738 + +loc_B0F4: ; CODE XREF: sub_AFD6+C8j sub_AFD6+CFj ... + mov dx, 0A4h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push word_15004 + push word_15006 + push [bp+var_3+1] + mov al, byte_1500A + mov ah, 0 + push ax + call sub_38E6 + jmp short loc_B18D +; --------------------------------------------------------------------------- + +loc_B118: ; CODE XREF: sub_AFD6+8Bj + les bx, [bp+var_8] + mov al, byte ptr [bp+var_3] + mov es:[bx], al + mov bx, word_14F88 + mov al, [bx] + mov byte ptr [bp+var_3], al + mov bx, word ptr [bp+var_8] + mov es:[bx+1], al + inc word_14F88 + cmp word_15004, 50h ; 'P' + jnz short loc_B164 + xor si, si + jmp short loc_B15B +; --------------------------------------------------------------------------- + +loc_B140: ; CODE XREF: sub_AFD6+18Cj + mov bx, si + imul bx, 6 + mov ax, [bx+4ED3h] + les bx, [bp+var_8] + cmp ax, es:[bx] + jnz short loc_B15A + mov al, [si+4ECBh] + mov byte_1500A, al + jmp short loc_B164 +; --------------------------------------------------------------------------- + +loc_B15A: ; CODE XREF: sub_AFD6+179j + inc si + +loc_B15B: ; CODE XREF: sub_AFD6+168j + mov al, byte_10830 + mov ah, 0 + cmp ax, si + jg short loc_B140 + +loc_B164: ; CODE XREF: sub_AFD6+164j + ; sub_AFD6+182j + mov dx, 0A4h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push word_15004 + push word_15006 + mov al, byte_1500A + mov ah, 0 + push ax + push large [bp+var_8] + call far ptr loc_E914 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + +loc_B18D: ; CODE XREF: sub_AFD6+140j + call sub_A826 + mov si, 1 + jmp loc_B005 +; --------------------------------------------------------------------------- + +loc_B196: ; CODE XREF: sub_AFD6+84j + call sub_EC04 + push 0 + call sub_F082 + pop si + leave + retn +sub_AFD6 endp + +; --------------------------------------------------------------------------- +word_B1A5 dw 21h, 3Fh, 68h, 74h ; DATA XREF: sub_AFD6+ADo + ; value table for switch statement + dw offset loc_B0AE ; jump table for switch statement + dw offset loc_B0A7 + dw offset loc_B0A0 + dw offset loc_B099 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B1B5 proc near ; CODE XREF: sub_B273+F0p + +var_4 = dword ptr -4 + + enter 4, 0 + push si + push di + mov bx, word_15016 + shl bx, 2 + mov ax, word ptr (off_10920+2)[bx] + mov dx, word ptr off_10920[bx] + mov word ptr [bp+var_4+2], ax + mov word ptr [bp+var_4], dx + mov bx, word_15014 + add bx, bx + mov ax, [bx+8DAh] + dec ax + shl ax, 4 + mov dx, 0C0h ; '' + sub dx, ax + mov ax, word_109EC + shl ax, 5 + add dx, ax + mov si, dx + mov word_107BC, 7 + xor di, di + jmp short loc_B21E +; --------------------------------------------------------------------------- + +loc_B1F7: ; CODE XREF: sub_B1B5+6Cj + push 40h ; '@' + push si + push 0Fh + push large [bp+var_4] + call far ptr loc_E914 + call sub_B37C + push 40h ; '@' + push si + push 0Fh + push large [bp+var_4] + call far ptr loc_E914 + call sub_B37C + dec word_107BC + inc di + +loc_B21E: ; CODE XREF: sub_B1B5+40j + cmp di, 4 + jl short loc_B1F7 + mov word_107BC, 2 + push 40h ; '@' + push si + push 0Fh + push large [bp+var_4] + call far ptr loc_E914 + call sub_B37C + push 40h ; '@' + push si + push 0Fh + push large [bp+var_4] + call far ptr loc_E914 + call sub_B37C + inc word_15016 + inc word_109EC + mov bx, word_15014 + add bx, bx + mov ax, [bx+8DAh] + cmp ax, word_109EC + jg short loc_B26D + mov word_109EC, 0 + mov al, 1 + jmp short loc_B26F +; --------------------------------------------------------------------------- + +loc_B26D: ; CODE XREF: sub_B1B5+ACj + mov al, 0 + +loc_B26F: ; CODE XREF: sub_B1B5+B6j + pop di + pop si + leave + retn +sub_B1B5 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B273 proc near ; CODE XREF: sub_B3CB+ACp sub_B3CB+B5p ... + +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + enter 2, 0 + push si + push di + mov di, [bp+arg_2] + mov al, byte_15018 + mov ah, 0 + shl ax, 4 + mov dx, word_15014 + add dx, dx + add ax, dx + mov bx, ax + mov ax, [bx+7E0h] + mov [bp+var_2], ax + push 2 + call sub_644 + push large 0C0000Eh + call sub_F28 + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push large 0 + push large 4F018Fh + call sub_C9E + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + push large 0 + push large 4F018Fh + call sub_C9E + call sub_B37C + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + mov word_10338, 64h ; 'd' + call far ptr loc_1B8A + push 0 + call sub_F05C + xor si, si + jmp short loc_B309 +; --------------------------------------------------------------------------- + +loc_B2EE: ; CODE XREF: sub_B273+99j + push di + push [bp+arg_0] + push 0 + push [bp+var_2] + mov ax, si + mov bx, 4 + cwd + idiv bx + push ax + call sub_EE68 + call sub_B37C + inc si + +loc_B309: ; CODE XREF: sub_B273+79j + cmp si, 8 + jl short loc_B2EE + push di + push [bp+arg_0] + push 0 + push [bp+var_2] + call sub_EFDC + call sub_B37C + push di + push [bp+arg_0] + push 0 + push [bp+var_2] + call sub_EFDC + inc word_15014 + cmp word_15014, 8 + jge short loc_B357 + push 0 + mov al, byte_15018 + mov ah, 0 + shl ax, 5 + mov dx, word_15014 + shl dx, 2 + add ax, dx + mov bx, ax + push large dword ptr [bx+760h] + call sub_EF7A + +loc_B357: ; CODE XREF: sub_B273+C3j sub_B273+F5j + add word_15012, 2 + +loc_B35C: ; CODE XREF: sub_B273+EEj + call sub_B37C + or al, al + jz short loc_B35C + call sub_B1B5 + or al, al + jz short loc_B357 + add word_15012, 1Eh + +loc_B36F: ; CODE XREF: sub_B273+101j + call sub_B37C + or al, al + jz short loc_B36F + pop di + pop si + leave + retn 4 +sub_B273 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B37C proc near ; CODE XREF: sub_B1B5+50p sub_B1B5+61p ... + push bp + mov bp, sp + push 2 + call sub_F282 + mov dx, 0A6h ; '' + mov al, byte_1085E + out dx, al ; Interrupt Controller #2, 8259A + mov al, 1 + sub al, byte_1085E + mov byte_1085E, al + mov dx, 0A4h ; '' + out dx, al ; Interrupt Controller #2, 8259A + inc word_15010 + call sub_F23C + mov word_1500E, ax + cmp word_1500E, 0 + jge short loc_B3B9 + mov ax, word_15010 + mov bx, 16h + cwd + idiv bx + mov word_1500E, ax + +loc_B3B9: ; CODE XREF: sub_B37C+2Fj + mov ax, word_1500E + cmp ax, word_15012 + jl short loc_B3C7 + mov ax, 1 + jmp short loc_B3C9 +; --------------------------------------------------------------------------- + +loc_B3C7: ; CODE XREF: sub_B37C+44j + xor ax, ax + +loc_B3C9: ; CODE XREF: sub_B37C+49j + pop bp + retn +sub_B37C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B3CB proc near ; CODE XREF: _main+78p + push bp + mov bp, sp + mov word_15016, 0 + les bx, dword_11E6E + mov al, es:[bx+14h] + mov byte_15018, al + mov word_10338, 0 + call far ptr loc_1B8A + push large 0C0000Eh + call sub_F28 + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push large 0 + push large 4F018Fh + call sub_C9E + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + push large 0 + push large 4F018Fh + call sub_C9E + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + mov word_15014, 0 + push 0 + mov al, byte_15018 + mov ah, 0 + shl ax, 5 + mov bx, ax + push large dword ptr [bx+760h] + call sub_EF7A + push 0 + call sub_F05C + push ds + push offset aExed ; "EXED" + push 600h + call sub_ED60 + push 0 + call sub_EE18 + mov word_15012, 2 + +loc_B45F: ; CODE XREF: sub_B3CB+99j + call sub_B37C + or al, al + jz short loc_B45F + mov word_10338, 64h ; 'd' + call far ptr loc_1B8A + push large 0A00064h + call sub_B273 + push large 0A00064h + call sub_B273 + push large 0A00064h + call sub_B273 + push large 0A00064h + call sub_B273 + push large 0A00064h + call sub_B273 + push large 0A00064h + call sub_B273 + push large 0A00064h + call sub_B273 + add word_15012, 10h + +loc_B4B5: ; CODE XREF: sub_B3CB+EFj + call sub_B37C + or al, al + jz short loc_B4B5 + push 4 + call sub_644 + push 0 + call sub_F082 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A4h ; '' + out dx, al ; Interrupt Controller #2, 8259A + pop bp + retn +sub_B3CB endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B4D6 proc near ; CODE XREF: sub_B590+A2p sub_B646+47p ... + +var_1 = byte ptr -1 + + enter 2, 0 + push si + mov si, 4 + jmp short loc_B503 +; --------------------------------------------------------------------------- + +loc_B4E0: ; CODE XREF: sub_B4D6+30j + mov al, [si+4F1Bh] + mov [bp+var_1], al + mov al, byte_1501B + ror [bp+var_1], 3 + xor [bp+var_1], al + mov al, [si+4F1Ah] + mov dl, byte_1501A + add dl, [bp+var_1] + add al, dl + mov [si+4F1Ah], al + inc si + +loc_B503: ; CODE XREF: sub_B4D6+8j + cmp si, 5Fh ; '_' + jl short loc_B4E0 + mov al, byte_1501A + add [si+4F1Ah], al + xor cx, cx + mov si, 4 + jmp short loc_B51F +; --------------------------------------------------------------------------- + +loc_B516: ; CODE XREF: sub_B4D6+4Cj + mov al, [si+4F1Ah] + mov ah, 0 + add cx, ax + inc si + +loc_B51F: ; CODE XREF: sub_B4D6+3Ej + cmp si, 60h ; '`' + jl short loc_B516 + mov al, byte ptr word_1501C + sub al, cl + pop si + leave + retn +sub_B4D6 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B52C proc near ; CODE XREF: sub_B590:loc_B624p + ; sub_B6A3+4p ... + +var_1 = byte ptr -1 + + enter 2, 0 + push si + mov word_1501C, 0 + mov si, 4 + jmp short loc_B547 +; --------------------------------------------------------------------------- + +loc_B53C: ; CODE XREF: sub_B52C+1Ej + mov al, [si+4F1Ah] + mov ah, 0 + add word_1501C, ax + inc si + +loc_B547: ; CODE XREF: sub_B52C+Ej + cmp si, 60h ; '`' + jl short loc_B53C + call sub_1DF8 + mov byte_1501A, al + call sub_1DF8 + mov byte_1501B, al + mov [bp+var_1], 0 + mov si, 5Fh ; '_' + jmp short loc_B588 +; --------------------------------------------------------------------------- + +loc_B565: ; CODE XREF: sub_B52C+5Fj + mov al, [si+4F1Ah] + mov dl, byte_1501A + add dl, [bp+var_1] + sub al, dl + mov [si+4F1Ah], al + mov al, [si+4F1Ah] + mov [bp+var_1], al + mov al, byte_1501B + ror [bp+var_1], 3 + xor [bp+var_1], al + dec si + +loc_B588: ; CODE XREF: sub_B52C+37j + cmp si, 4 + jge short loc_B565 + pop si + leave + retn +sub_B52C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B590 proc near ; CODE XREF: sub_B646:loc_B694p + +var_3 = byte ptr -3 +var_2 = word ptr -2 + + enter 4, 0 + push si + mov [bp+var_3], 0A8h ; '' + mov [bp+var_2], 0 + jmp short loc_B60E +; --------------------------------------------------------------------------- + +loc_B5A0: ; CODE XREF: sub_B590+82j + mov byte_15078, 12h + xor si, si + jmp short loc_B5B5 +; --------------------------------------------------------------------------- + +loc_B5A9: ; CODE XREF: sub_B590+28j + mov bx, [bp+var_2] + shl bx, 3 + mov byte ptr [bx+si+4F4Bh], 0A0h ; '' + inc si + +loc_B5B5: ; CODE XREF: sub_B590+17j + cmp si, 8 + jl short loc_B5A9 + cmp [bp+var_2], 0 + jnz short loc_B5CD + mov bx, [bp+var_2] + shl bx, 3 + mov byte ptr [bx+4F51h], 0A1h ; '' + jmp short loc_B5DF +; --------------------------------------------------------------------------- + +loc_B5CD: ; CODE XREF: sub_B590+2Ej + mov bx, [bp+var_2] + shl bx, 3 + mov al, [bp+var_3] + mov [bx+4F50h], al + add al, 0FEh ; '' + mov [bp+var_3], al + +loc_B5DF: ; CODE XREF: sub_B590+3Bj + mov bx, [bp+var_2] + mov al, 0A6h ; '' + sub al, byte ptr [bp+var_2] + mov [bx+4F73h], al + xor si, si + jmp short loc_B5FB +; --------------------------------------------------------------------------- + +loc_B5EF: ; CODE XREF: sub_B590+6Ej + mov bx, [bp+var_2] + imul bx, 9 + mov byte ptr [bx+si+4F1Eh], 0C4h ; '' + inc si + +loc_B5FB: ; CODE XREF: sub_B590+5Dj + cmp si, 8 + jl short loc_B5EF + mov bx, [bp+var_2] + imul bx, 9 + mov byte ptr [bx+4F26h], 0 + inc [bp+var_2] + +loc_B60E: ; CODE XREF: sub_B590+Ej + cmp [bp+var_2], 5 + jl short loc_B5A0 + push ds + push offset aGensou_scr ; "GENSOU.SCR" + call sub_956 + mov [bp+var_2], 0 + jmp short loc_B638 +; --------------------------------------------------------------------------- + +loc_B624: ; CODE XREF: sub_B590+ACj + call sub_B52C + push ds + push offset byte_1501A + push 60h ; '`' + call sub_AF2 + call sub_B4D6 + inc [bp+var_2] + +loc_B638: ; CODE XREF: sub_B590+92j + cmp [bp+var_2], 14h + jl short loc_B624 + call sub_946 + pop si + leave + retn +sub_B590 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B646 proc near ; CODE XREF: sub_C1DD+A3p sub_C1DD+BBp + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push ds + push offset aGensou_scr_0 ; "GENSOU.SCR" + call sub_996 + or ax, ax + jz short loc_B694 + push ds + push offset aGensou_scr_1 ; "GENSOU.SCR" + call sub_A66 + mov ax, [bp+arg_0] + imul ax, 5 + mov dl, byte_15177 + mov dh, 0 + add ax, dx + imul ax, 60h + movzx eax, ax + push eax + push 0 + call sub_AA2 + push ds + push offset byte_1501A + push 60h ; '`' + call sub_9B2 + call sub_946 + call sub_B4D6 + or al, al + jz short loc_B69D + +loc_B694: ; CODE XREF: sub_B646+Ej + call sub_B590 + mov al, 1 + pop bp + retn 2 +; --------------------------------------------------------------------------- + +loc_B69D: ; CODE XREF: sub_B646+4Cj + mov al, 0 + pop bp + retn 2 +sub_B646 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B6A3 proc near ; CODE XREF: sub_C1DD:loc_C5BEp + ; sub_C1DD:loc_C5C3p + push bp + mov bp, sp + push si + call sub_B52C + push ds + push offset aGensou_scr_2 ; "GENSOU.SCR" + call sub_886 + mov al, byte ptr word_15178 + mov ah, 0 + imul ax, 5 + mov dl, byte_15177 + mov dh, 0 + add ax, dx + imul ax, 60h + movzx eax, ax + push eax + push 0 + call sub_AA2 + push ds + push offset byte_1501A + push 60h ; '`' + call sub_AF2 + xor si, si + jmp short loc_B723 +; --------------------------------------------------------------------------- + +loc_B6E2: ; CODE XREF: sub_B6A3+83j + mov ax, si + imul ax, 60h + movzx eax, ax + push eax + push 0 + call sub_AA2 + push ds + push offset byte_1501A + push 60h ; '`' + call sub_9B2 + call sub_B4D6 + call sub_B52C + mov ax, si + imul ax, 60h + movzx eax, ax + push eax + push 0 + call sub_AA2 + push ds + push offset byte_1501A + push 60h ; '`' + call sub_AF2 + inc si + +loc_B723: ; CODE XREF: sub_B6A3+3Dj + cmp si, 14h + jl short loc_B6E2 + call sub_946 + pop si + pop bp + retn +sub_B6A3 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B730 proc near ; CODE XREF: sub_C1DD:loc_C2ADp + +var_2 = word ptr -2 + + enter 2, 0 + mov [bp+var_2], 4 + jmp short loc_B78C +; --------------------------------------------------------------------------- + +loc_B73B: ; CODE XREF: sub_B730+60j + mov cx, 7 + jmp short loc_B785 +; --------------------------------------------------------------------------- + +loc_B740: ; CODE XREF: sub_B730+57j + les bx, dword_11E6E + add bx, cx + mov al, es:[bx+20h] + mov ah, 0 + mov bx, [bp+var_2] + shl bx, 3 + add bx, cx + mov dl, [bx+4F4Bh] + mov dh, 0 + add dx, 0FF60h + cmp ax, dx + jg short loc_B789 + les bx, dword_11E6E + add bx, cx + mov al, es:[bx+20h] + mov ah, 0 + mov bx, [bp+var_2] + shl bx, 3 + add bx, cx + mov dl, [bx+4F4Bh] + mov dh, 0 + add dx, 0FF60h + cmp ax, dx + jl short loc_B799 + dec cx + +loc_B785: ; CODE XREF: sub_B730+Ej + or cx, cx + jge short loc_B740 + +loc_B789: ; CODE XREF: sub_B730+30j + dec [bp+var_2] + +loc_B78C: ; CODE XREF: sub_B730+9j + cmp [bp+var_2], 0 + jge short loc_B73B + mov byte_15176, 0 + jmp short loc_B7AE +; --------------------------------------------------------------------------- + +loc_B799: ; CODE XREF: sub_B730+52j + cmp [bp+var_2], 4 + jnz short loc_B7A6 + mov byte_15176, 0FFh + leave + retn +; --------------------------------------------------------------------------- + +loc_B7A6: ; CODE XREF: sub_B730+6Dj + mov al, byte ptr [bp+var_2] + inc al + mov byte_15176, al + +loc_B7AE: ; CODE XREF: sub_B730+67j + mov [bp+var_2], 3 + jmp short loc_B807 +; --------------------------------------------------------------------------- + +loc_B7B5: ; CODE XREF: sub_B730+DFj + mov cx, 7 + jmp short loc_B7D3 +; --------------------------------------------------------------------------- + +loc_B7BA: ; CODE XREF: sub_B730+A5j + mov bx, [bp+var_2] + imul bx, 9 + add bx, cx + mov al, [bx+4F1Eh] + mov bx, [bp+var_2] + imul bx, 9 + add bx, cx + mov [bx+4F27h], al + dec cx + +loc_B7D3: ; CODE XREF: sub_B730+88j + or cx, cx + jge short loc_B7BA + mov cx, 7 + jmp short loc_B7F5 +; --------------------------------------------------------------------------- + +loc_B7DC: ; CODE XREF: sub_B730+C7j + mov bx, [bp+var_2] + shl bx, 3 + add bx, cx + mov al, [bx+4F4Bh] + mov bx, [bp+var_2] + shl bx, 3 + add bx, cx + mov [bx+4F53h], al + dec cx + +loc_B7F5: ; CODE XREF: sub_B730+AAj + or cx, cx + jge short loc_B7DC + mov bx, [bp+var_2] + mov al, [bx+4F73h] + mov [bx+4F74h], al + dec [bp+var_2] + +loc_B807: ; CODE XREF: sub_B730+83j + mov al, byte_15176 + mov ah, 0 + cmp ax, [bp+var_2] + jle short loc_B7B5 + mov cx, 7 + jmp short loc_B828 +; --------------------------------------------------------------------------- + +loc_B816: ; CODE XREF: sub_B730+FAj + mov al, byte_15176 + mov ah, 0 + imul ax, 9 + add ax, cx + mov bx, ax + mov byte ptr [bx+4F1Eh], 0C4h ; '' + dec cx + +loc_B828: ; CODE XREF: sub_B730+E4j + or cx, cx + jge short loc_B816 + mov cx, 7 + jmp short loc_B84F +; --------------------------------------------------------------------------- + +loc_B831: ; CODE XREF: sub_B730+121j + les bx, dword_11E6E + add bx, cx + mov al, es:[bx+20h] + add al, 0A0h ; '' + mov dl, byte_15176 + mov dh, 0 + shl dx, 3 + add dx, cx + mov bx, dx + mov [bx+4F4Bh], al + dec cx + +loc_B84F: ; CODE XREF: sub_B730+FFj + or cx, cx + jge short loc_B831 + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FDh ; '' + jb short loc_B86C + mov al, byte_15176 + mov ah, 0 + mov bx, ax + mov byte ptr [bx+4F73h], 0E9h ; 'E + leave + retn +; --------------------------------------------------------------------------- + +loc_B86C: ; CODE XREF: sub_B730+12Cj + cmp byte_15177, 4 + jnb short loc_B88B + les bx, dword_11E6E + mov al, es:[bx+13h] + add al, 0A1h ; '' + mov dl, byte_15176 + mov dh, 0 + mov bx, dx + mov [bx+4F73h], al + leave + retn +; --------------------------------------------------------------------------- + +loc_B88B: ; CODE XREF: sub_B730+141j + mov al, byte_15176 + mov ah, 0 + mov bx, ax + mov byte ptr [bx+4F73h], 0A1h ; '' + leave + retn +sub_B730 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B899 proc near ; CODE XREF: sub_BBEF+7Cp + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + enter 4, 0 + push si + push di + mov si, [bp+arg_2] + mov bx, [bp+arg_0] + cmp bx, 3 + ja short loc_B90A + add bx, bx + jmp cs:off_B9B9[bx] + +loc_B8B1: ; DATA XREF: seg001:off_B9B9o + mov di, 0AEh ; '' + or si, si + jnz short loc_B8BD + mov ax, 58h ; 'X' + jmp short loc_B907 +; --------------------------------------------------------------------------- + +loc_B8BD: ; CODE XREF: sub_B899+1Dj + mov ax, si + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_B907 +; --------------------------------------------------------------------------- + +loc_B8C7: ; CODE XREF: sub_B899+13j + ; DATA XREF: seg001:147Bo + mov di, 1EEh + or si, si + jnz short loc_B8D3 + mov ax, 58h ; 'X' + jmp short loc_B907 +; --------------------------------------------------------------------------- + +loc_B8D3: ; CODE XREF: sub_B899+33j + mov ax, si + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_B907 +; --------------------------------------------------------------------------- + +loc_B8DD: ; CODE XREF: sub_B899+13j + ; DATA XREF: seg001:147Do + mov di, 0AEh ; '' + or si, si + jnz short loc_B8E9 + mov ax, 0E0h ; 'E + jmp short loc_B907 +; --------------------------------------------------------------------------- + +loc_B8E9: ; CODE XREF: sub_B899+49j + mov ax, si + shl ax, 4 + add ax, 0E8h ; 'E + jmp short loc_B907 +; --------------------------------------------------------------------------- + +loc_B8F3: ; CODE XREF: sub_B899+13j + ; DATA XREF: seg001:147Fo + mov di, 1EEh + or si, si + jnz short loc_B8FF + mov ax, 0E0h ; 'E + jmp short loc_B907 +; --------------------------------------------------------------------------- + +loc_B8FF: ; CODE XREF: sub_B899+5Fj + mov ax, si + shl ax, 4 + add ax, 0E8h ; 'E + +loc_B907: ; CODE XREF: sub_B899+22j sub_B899+2Cj ... + mov [bp+var_4], ax + +loc_B90A: ; CODE XREF: sub_B899+Fj + mov al, byte_15176 + mov ah, 0 + cmp ax, si + jnz short loc_B922 + mov al, byte ptr word_15178 + mov ah, 0 + cmp ax, [bp+arg_0] + jnz short loc_B922 + mov ax, 0Ah + jmp short loc_B924 +; --------------------------------------------------------------------------- + +loc_B922: ; CODE XREF: sub_B899+78j sub_B899+82j + xor ax, ax + +loc_B924: ; CODE XREF: sub_B899+87j + mov [bp+arg_0], ax + mov bx, si + shl bx, 3 + mov al, [bx+4F52h] + mov ah, 0 + add ax, 0FF60h + cmp ax, 0Ah + jl short loc_B95E + lea ax, [di-20h] + push ax + push [bp+var_4] + mov bx, si + shl bx, 3 + mov al, [bx+4F52h] + mov ah, 0 + add ax, 0FF60h + mov bx, 0Ah + cwd + idiv bx + add ax, [bp+arg_0] + push ax + call sub_2B68 + +loc_B95E: ; CODE XREF: sub_B899+9Fj + lea ax, [di-10h] + push ax + push [bp+var_4] + mov bx, si + shl bx, 3 + mov al, [bx+4F52h] + mov ah, 0 + add ax, 0FF60h + mov bx, 0Ah + cwd + idiv bx + add dx, [bp+arg_0] + push dx + call sub_2B68 + mov [bp+var_2], 6 + jmp short loc_B9AD +; --------------------------------------------------------------------------- + +loc_B989: ; CODE XREF: sub_B899+118j + push di + push [bp+var_4] + mov bx, si + shl bx, 3 + add bx, [bp+var_2] + mov al, [bx+4F4Bh] + mov ah, 0 + add ax, [bp+arg_0] + add ax, 0FF60h + push ax + call sub_2B68 + dec [bp+var_2] + add di, 10h + +loc_B9AD: ; CODE XREF: sub_B899+EEj + cmp [bp+var_2], 0 + jge short loc_B989 + pop di + pop si + leave + retn 4 +sub_B899 endp + +; --------------------------------------------------------------------------- +off_B9B9 dw offset loc_B8B1 ; DATA XREF: sub_B899+13r + dw offset loc_B8C7 + dw offset loc_B8DD + dw offset loc_B8F3 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_B9C1 proc near ; CODE XREF: sub_BBEF+8Ap + +var_3 = byte ptr -3 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 + + enter 4, 0 + push si + push di + mov si, [bp+arg_4] + mov al, byte_15176 + mov ah, 0 + cmp ax, si + jnz short loc_B9E1 + mov al, byte ptr word_15178 + mov ah, 0 + cmp ax, [bp+arg_2] + jnz short loc_B9E1 + mov al, 7 + jmp short loc_B9E3 +; --------------------------------------------------------------------------- + +loc_B9E1: ; CODE XREF: sub_B9C1+10j sub_B9C1+1Aj + mov al, 2 + +loc_B9E3: ; CODE XREF: sub_B9C1+1Ej + mov [bp+var_3], al + mov bx, [bp+arg_2] + cmp bx, 3 + ja short loc_BA4E + add bx, bx + jmp cs:off_BA7C[bx] + +loc_B9F5: ; DATA XREF: seg001:off_BA7Co + mov di, 126h + or si, si + jnz short loc_BA01 + mov ax, 58h ; 'X' + jmp short loc_BA4B +; --------------------------------------------------------------------------- + +loc_BA01: ; CODE XREF: sub_B9C1+39j + mov ax, si + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_BA4B +; --------------------------------------------------------------------------- + +loc_BA0B: ; CODE XREF: sub_B9C1+2Fj + ; DATA XREF: seg001:153Eo + mov di, 266h + or si, si + jnz short loc_BA17 + mov ax, 58h ; 'X' + jmp short loc_BA4B +; --------------------------------------------------------------------------- + +loc_BA17: ; CODE XREF: sub_B9C1+4Fj + mov ax, si + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_BA4B +; --------------------------------------------------------------------------- + +loc_BA21: ; CODE XREF: sub_B9C1+2Fj + ; DATA XREF: seg001:1540o + mov di, 126h + or si, si + jnz short loc_BA2D + mov ax, 0E0h ; 'E + jmp short loc_BA4B +; --------------------------------------------------------------------------- + +loc_BA2D: ; CODE XREF: sub_B9C1+65j + mov ax, si + shl ax, 4 + add ax, 0E8h ; 'E + jmp short loc_BA4B +; --------------------------------------------------------------------------- + +loc_BA37: ; CODE XREF: sub_B9C1+2Fj + ; DATA XREF: seg001:1542o + mov di, 266h + or si, si + jnz short loc_BA43 + mov ax, 0E0h ; 'E + jmp short loc_BA4B +; --------------------------------------------------------------------------- + +loc_BA43: ; CODE XREF: sub_B9C1+7Bj + mov ax, si + shl ax, 4 + add ax, 0E8h ; 'E + +loc_BA4B: ; CODE XREF: sub_B9C1+3Ej sub_B9C1+48j ... + mov [bp+var_2], ax + +loc_BA4E: ; CODE XREF: sub_B9C1+2Bj + lea ax, [di+2] + push ax + mov ax, [bp+var_2] + add ax, 2 + push ax + push [bp+arg_0] + push 0Eh + call sub_38E6 + push di + push [bp+var_2] + push [bp+arg_0] + mov al, [bp+var_3] + mov ah, 0 + push ax + call sub_38E6 + pop di + pop si + leave + retn 6 +sub_B9C1 endp + +; --------------------------------------------------------------------------- + db 0 +off_BA7C dw offset loc_B9F5 ; DATA XREF: sub_B9C1+2Fr + dw offset loc_BA0B + dw offset loc_BA21 + dw offset loc_BA37 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BA84 proc near ; CODE XREF: sub_BE76+69p + ; sub_C1DD+16Dp ... + +arg_0 = byte ptr 4 +arg_2 = byte ptr 6 +arg_4 = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov al, [bp+arg_2] + mov ah, 0 + mov bx, ax + cmp bx, 3 + ja short loc_BB00 + add bx, bx + jmp cs:off_BBE7[bx] + +loc_BA9C: ; DATA XREF: seg001:off_BBE7o + mov si, 8 + cmp [bp+arg_4], 0 + jnz short loc_BAAA + mov ax, 58h ; 'X' + jmp short loc_BAFE +; --------------------------------------------------------------------------- + +loc_BAAA: ; CODE XREF: sub_BA84+1Fj + mov ax, [bp+arg_4] + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_BAFE +; --------------------------------------------------------------------------- + +loc_BAB5: ; CODE XREF: sub_BA84+13j + ; DATA XREF: seg001:16A9o + mov si, 148h + cmp [bp+arg_4], 0 + jnz short loc_BAC3 + mov ax, 58h ; 'X' + jmp short loc_BAFE +; --------------------------------------------------------------------------- + +loc_BAC3: ; CODE XREF: sub_BA84+38j + mov ax, [bp+arg_4] + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_BAFE +; --------------------------------------------------------------------------- + +loc_BACE: ; CODE XREF: sub_BA84+13j + ; DATA XREF: seg001:16ABo + mov si, 8 + cmp [bp+arg_4], 0 + jnz short loc_BADC + mov ax, 0E0h ; 'E + jmp short loc_BAFE +; --------------------------------------------------------------------------- + +loc_BADC: ; CODE XREF: sub_BA84+51j + mov ax, [bp+arg_4] + shl ax, 4 + add ax, 0E8h ; 'E + jmp short loc_BAFE +; --------------------------------------------------------------------------- + +loc_BAE7: ; CODE XREF: sub_BA84+13j + ; DATA XREF: seg001:16ADo + mov si, 148h + cmp [bp+arg_4], 0 + jnz short loc_BAF5 + mov ax, 0E0h ; 'E + jmp short loc_BAFE +; --------------------------------------------------------------------------- + +loc_BAF5: ; CODE XREF: sub_BA84+6Aj + mov ax, [bp+arg_4] + shl ax, 4 + add ax, 0E8h ; 'E + +loc_BAFE: ; CODE XREF: sub_BA84+24j sub_BA84+2Fj ... + mov di, ax + +loc_BB00: ; CODE XREF: sub_BA84+Fj + push si + push di + push large 820012h + call far ptr loc_ECDE + lea ax, [si+2] + push ax + lea ax, [di+2] + push ax + push 10h + mov ax, [bp+arg_4] + imul ax, 9 + add ax, 4F1Eh + push ds + push ax + push 0Eh + call sub_383C + push si + push di + push 10h + mov ax, [bp+arg_4] + imul ax, 9 + add ax, 4F1Eh + push ds + push ax + push 6 + call sub_383C + mov al, [bp+arg_0] + mov ah, 0 + shl ax, 4 + add ax, si + push ax + push di + mov bx, [bp+arg_4] + imul bx, 9 + mov al, [bp+arg_0] + mov ah, 0 + add bx, ax + mov al, [bx+4F1Eh] + mov ah, 0 + push ax + push 7 + call sub_38E6 + push large 0C00007h + call sub_F28 + mov al, [bp+arg_0] + mov ah, 0 + shl ax, 4 + add ax, si + push ax + mov al, [bp+arg_0] + mov ah, 0 + shl ax, 4 + add ax, si + add ax, 10h + push ax + lea ax, [di+0Fh] + push ax + call sub_E5E + lea ax, [si-2] + push ax + lea ax, [di-1] + push ax + lea ax, [di+10h] + push ax + call sub_F58 + lea ax, [si+132h] + push ax + lea ax, [di-1] + push ax + lea ax, [di+10h] + push ax + call sub_F58 + lea ax, [si-2] + push ax + lea ax, [si+132h] + push ax + lea ax, [di-1] + push ax + call sub_E5E + lea ax, [si-2] + push ax + lea ax, [si+132h] + push ax + lea ax, [di+10h] + push ax + call sub_E5E + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + pop di + pop si + pop bp + retn 6 +sub_BA84 endp + +; --------------------------------------------------------------------------- + db 0 +off_BBE7 dw offset loc_BA9C ; DATA XREF: sub_BA84+13r + dw offset loc_BAB5 + dw offset loc_BACE + dw offset loc_BAE7 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BBEF proc near ; CODE XREF: sub_BCD3+Cp + +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 + + enter 2, 0 + push si + push di + mov si, [bp+arg_2] + mov bx, [bp+arg_0] + cmp bx, 3 + ja short loc_BC67 + add bx, bx + jmp cs:off_BCCB[bx] + +loc_BC07: ; DATA XREF: seg001:off_BCCBo + mov [bp+var_2], 8 + or si, si + jnz short loc_BC15 + mov ax, 58h ; 'X' + jmp short loc_BC65 +; --------------------------------------------------------------------------- + +loc_BC15: ; CODE XREF: sub_BBEF+1Fj + mov ax, si + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_BC65 +; --------------------------------------------------------------------------- + +loc_BC1F: ; CODE XREF: sub_BBEF+13j + ; DATA XREF: seg001:178Do + mov [bp+var_2], 148h + or si, si + jnz short loc_BC2D + mov ax, 58h ; 'X' + jmp short loc_BC65 +; --------------------------------------------------------------------------- + +loc_BC2D: ; CODE XREF: sub_BBEF+37j + mov ax, si + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_BC65 +; --------------------------------------------------------------------------- + +loc_BC37: ; CODE XREF: sub_BBEF+13j + ; DATA XREF: seg001:178Fo + mov [bp+var_2], 8 + or si, si + jnz short loc_BC45 + mov ax, 0E0h ; 'E + jmp short loc_BC65 +; --------------------------------------------------------------------------- + +loc_BC45: ; CODE XREF: sub_BBEF+4Fj + mov ax, si + shl ax, 4 + add ax, 0E8h ; 'E + jmp short loc_BC65 +; --------------------------------------------------------------------------- + +loc_BC4F: ; CODE XREF: sub_BBEF+13j + ; DATA XREF: seg001:1791o + mov [bp+var_2], 148h + or si, si + jnz short loc_BC5D + mov ax, 0E0h ; 'E + jmp short loc_BC65 +; --------------------------------------------------------------------------- + +loc_BC5D: ; CODE XREF: sub_BBEF+67j + mov ax, si + shl ax, 4 + add ax, 0E8h ; 'E + +loc_BC65: ; CODE XREF: sub_BBEF+24j sub_BBEF+2Ej ... + mov di, ax + +loc_BC67: ; CODE XREF: sub_BBEF+Fj + push si + push [bp+arg_0] + call sub_B899 + push si + push [bp+arg_0] + mov al, [si+4F73h] + mov ah, 0 + push ax + call sub_B9C1 + mov al, byte ptr word_15178 + mov ah, 0 + cmp ax, [bp+arg_0] + jnz short loc_BC8F + mov al, byte_15176 + mov ah, 0 + cmp ax, si + jz short loc_BCC4 + +loc_BC8F: ; CODE XREF: sub_BBEF+95j + mov ax, [bp+var_2] + add ax, 2 + push ax + lea ax, [di+2] + push ax + push 10h + mov ax, si + imul ax, 9 + add ax, 4F1Eh + push ds + push ax + push 0Eh + call sub_383C + push [bp+var_2] + push di + push 10h + mov ax, si + imul ax, 9 + add ax, 4F1Eh + push ds + push ax + push 2 + call sub_383C + +loc_BCC4: ; CODE XREF: sub_BBEF+9Ej + pop di + pop si + leave + retn 4 +sub_BBEF endp + +; --------------------------------------------------------------------------- + db 0 +off_BCCB dw offset loc_BC07 ; DATA XREF: sub_BBEF+13r + dw offset loc_BC1F + dw offset loc_BC37 + dw offset loc_BC4F + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BCD3 proc near ; CODE XREF: sub_C1DD+A9p sub_C1DD+D9p ... + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + xor si, si + jmp short loc_BCE3 +; --------------------------------------------------------------------------- + +loc_BCDB: ; CODE XREF: sub_BCD3+13j + push si + push [bp+arg_0] + call sub_BBEF + inc si + +loc_BCE3: ; CODE XREF: sub_BCD3+6j + cmp si, 5 + jl short loc_BCDB + pop si + pop bp + retn 2 +sub_BCD3 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BCED proc near ; CODE XREF: sub_C1DD+209p + ; sub_C1DD+251p ... + +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov si, [bp+arg_4] + mov di, [bp+arg_2] + mov ax, si + add ax, ax + add ax, 17h + push ax + lea ax, [di+15h] + push ax + mov bx, di + imul bx, 11h + mov al, [bx+si+14EEh] + mov ah, 0 + push ax + push [bp+arg_0] + call sub_121A + pop di + pop si + pop bp + retn 6 +sub_BCED endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BD1E proc near ; CODE XREF: sub_BD46:loc_BD65p + ; sub_C16C+64p ... + push bp + mov bp, sp + call sub_EB1A + call sub_BE76 + push 1 + call sub_F282 + mov dx, 0A6h ; '' + mov al, byte_11621 + out dx, al ; Interrupt Controller #2, 8259A + mov al, 1 + sub al, byte_11621 + mov byte_11621, al + mov dx, 0A4h ; '' + out dx, al ; Interrupt Controller #2, 8259A + pop bp + retn +sub_BD1E endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BD46 proc near ; CODE XREF: sub_C1DD+30Ep + +arg_0 = byte ptr 4 +arg_2 = byte ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + mov di, [bp+arg_4] + mov al, [bp+arg_0] + mov ah, 0 + imul ax, 1Ch + add ax, 4F7Ah + mov si, ax + cmp byte ptr [si], 0 + jz short loc_BD68 + mov byte ptr [si], 5 + jmp short loc_BD68 +; --------------------------------------------------------------------------- + +loc_BD65: ; CODE XREF: sub_BD46+25j + call sub_BD1E + +loc_BD68: ; CODE XREF: sub_BD46+18j sub_BD46+1Dj + cmp byte ptr [si], 0 + jnz short loc_BD65 + mov byte ptr [si], 1 + mov word ptr [si+14h], 0 + mov bx, [bp+arg_6] + imul bx, 11h + add bx, [bp+arg_8] + mov al, [bx+14EEh] + mov [si+1], al + cmp byte ptr [si+1], 0CDh ; '' + jnz short loc_BD8F + mov byte ptr [si+1], 2 + +loc_BD8F: ; CODE XREF: sub_BD46+43j + mov ax, [bp+arg_8] + add ax, ax + add ax, 17h + shl ax, 4 + shl ax, 3 + add ax, 80h ; '' + mov [si+2], ax + mov ax, [bp+arg_6] + add ax, 15h + shl ax, 4 + shl ax, 4 + add ax, 80h ; '' + mov [si+4], ax + call sub_1DF8 + mov [si+12h], al + call sub_1DF8 + mov bx, 40h ; '@' + cwd + idiv bx + add dl, 40h ; '@' + mov [si+13h], dl + mov al, [bp+arg_2] + mov ah, 0 + mov bx, ax + cmp bx, 3 + ja short loc_BE42 + add bx, bx + jmp cs:off_BE6E[bx] + +loc_BDE1: ; DATA XREF: seg001:off_BE6Eo + mov [bp+arg_8], 8 + or di, di + jnz short loc_BDEF + mov ax, 58h ; 'X' + jmp short loc_BE3F +; --------------------------------------------------------------------------- + +loc_BDEF: ; CODE XREF: sub_BD46+A2j + mov ax, di + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_BE3F +; --------------------------------------------------------------------------- + +loc_BDF9: ; CODE XREF: sub_BD46+96j + ; DATA XREF: seg001:1930o + mov [bp+arg_8], 148h + or di, di + jnz short loc_BE07 + mov ax, 58h ; 'X' + jmp short loc_BE3F +; --------------------------------------------------------------------------- + +loc_BE07: ; CODE XREF: sub_BD46+BAj + mov ax, di + shl ax, 4 + add ax, 60h ; '`' + jmp short loc_BE3F +; --------------------------------------------------------------------------- + +loc_BE11: ; CODE XREF: sub_BD46+96j + ; DATA XREF: seg001:1932o + mov [bp+arg_8], 8 + or di, di + jnz short loc_BE1F + mov ax, 0E0h ; 'E + jmp short loc_BE3F +; --------------------------------------------------------------------------- + +loc_BE1F: ; CODE XREF: sub_BD46+D2j + mov ax, di + shl ax, 4 + add ax, 0E8h ; 'E + jmp short loc_BE3F +; --------------------------------------------------------------------------- + +loc_BE29: ; CODE XREF: sub_BD46+96j + ; DATA XREF: seg001:1934o + mov [bp+arg_8], 148h + or di, di + jnz short loc_BE37 + mov ax, 0E0h ; 'E + jmp short loc_BE3F +; --------------------------------------------------------------------------- + +loc_BE37: ; CODE XREF: sub_BD46+EAj + mov ax, di + shl ax, 4 + add ax, 0E8h ; 'E + +loc_BE3F: ; CODE XREF: sub_BD46+A7j sub_BD46+B1j ... + mov [bp+arg_6], ax + +loc_BE42: ; CODE XREF: sub_BD46+92j + mov ax, [bp+arg_8] + shl ax, 4 + mov dl, [bp+arg_0] + mov dh, 0 + shl dx, 4 + shl dx, 4 + add ax, dx + add ax, 80h ; '' + mov [si+0Eh], ax + mov ax, [bp+arg_6] + shl ax, 4 + add ax, 80h ; '' + mov [si+10h], ax + pop di + pop si + pop bp + retn 0Ah +sub_BD46 endp + +; --------------------------------------------------------------------------- + db 0 +off_BE6E dw offset loc_BDE1 ; DATA XREF: sub_BD46+96r + dw offset loc_BDF9 + dw offset loc_BE11 + dw offset loc_BE29 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_BE76 proc near ; CODE XREF: sub_BD1E+8p + +var_8 = byte ptr -8 +var_7 = byte ptr -7 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 + + enter 8, 0 + push si + push di + mov si, 4F7Ah + xor di, di + jmp short loc_BECC +; --------------------------------------------------------------------------- + +loc_BE83: ; CODE XREF: sub_BE76+59j + cmp byte ptr [si], 0 + jz short loc_BEC8 + cmp byte ptr [si], 4 + jnz short loc_BE90 + mov byte ptr [si], 0 + +loc_BE90: ; CODE XREF: sub_BE76+15j + cmp word ptr [si+6], 0 + jge short loc_BE9B + mov word ptr [si+6], 0 + +loc_BE9B: ; CODE XREF: sub_BE76+1Ej + cmp word ptr [si+8], 0 + jge short loc_BEA6 + mov word ptr [si+8], 0 + +loc_BEA6: ; CODE XREF: sub_BE76+29j + mov ax, [si+6] + mov bx, 10h + cwd + idiv bx + add ax, 0FFF0h + push ax + mov ax, [si+8] + cwd + idiv bx + add ax, 0FFF0h + push ax + push large 200020h + call far ptr loc_ECDE + +loc_BEC8: ; CODE XREF: sub_BE76+10j + inc di + add si, 1Ch + +loc_BECC: ; CODE XREF: sub_BE76+Bj + cmp di, 8 + jl short loc_BE83 + mov al, byte_15176 + mov ah, 0 + push ax + push word_15178 + push word_11622 + call sub_BA84 + mov si, 4F7Ah + xor di, di + jmp loc_C156 +; --------------------------------------------------------------------------- + +loc_BEEA: ; CODE XREF: sub_BE76+2E3j + cmp byte ptr [si], 0 + jz loc_C152 + mov al, [si] + mov ah, 0 + dec ax + mov bx, ax + cmp bx, 4 + ja loc_C141 + add bx, bx + jmp cs:off_C162[bx] + +loc_BF06: ; DATA XREF: seg001:off_C162o + mov eax, [si+2] + mov [si+6], eax + mov ax, [si+2] + mov bx, 10h + cwd + idiv bx + add ax, 0FFF0h + mov [bp+var_4], ax + mov ax, [si+4] + cwd + idiv bx + add ax, 0FFF0h + mov [bp+var_6], ax + mov ax, [si+14h] + shr ax, 1 + add ax, 14h + mov [bp+var_2], ax + cmp [bp+var_2], 18h + jl loc_C141 + inc byte ptr [si] + +loc_BF3E: ; CODE XREF: sub_BE76+8Bj + ; DATA XREF: seg001:1C24o + mov eax, [si+2] + mov [si+6], eax + lea ax, [si+0Ah] + push ax + push large 0 + mov al, [si+13h] + mov ah, 0 + push ax + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + mov ax, [si+0Ah] + add [si+2], ax + mov ax, [si+0Ch] + add [si+4], ax + mov ax, [si+2] + mov bx, 10h + cwd + idiv bx + add ax, 0FFF8h + mov [bp+var_4], ax + mov ax, [si+4] + cwd + idiv bx + add ax, 0FFF8h + mov [bp+var_6], ax + cmp [bp+var_4], 0 + jge short loc_BF9F + mov [bp+var_4], 0 + mov al, 80h ; '' + sub al, [si+12h] + mov [si+12h], al + mov word ptr [si+2], 80h ; '' + jmp short loc_BFB8 +; --------------------------------------------------------------------------- + +loc_BF9F: ; CODE XREF: sub_BE76+113j + cmp [bp+var_4], 270h + jl short loc_BFB8 + mov [bp+var_4], 270h + mov al, 80h ; '' + sub al, [si+12h] + mov [si+12h], al + mov word ptr [si+2], 2780h + +loc_BFB8: ; CODE XREF: sub_BE76+127j + ; sub_BE76+12Ej + cmp [bp+var_6], 0 + jge short loc_BFD2 + mov [bp+var_6], 0 + mov al, [si+12h] + neg al + mov [si+12h], al + mov word ptr [si+4], 80h ; '' + jmp short loc_BFEB +; --------------------------------------------------------------------------- + +loc_BFD2: ; CODE XREF: sub_BE76+146j + cmp [bp+var_6], 180h + jl short loc_BFEB + mov [bp+var_6], 180h + mov al, [si+12h] + neg al + mov [si+12h], al + mov word ptr [si+4], 1880h + +loc_BFEB: ; CODE XREF: sub_BE76+15Aj + ; sub_BE76+161j + mov ax, [si+14h] + shr ax, 2 + and ax, 3 + add ax, 1Ch + mov [bp+var_2], ax + mov ax, [si+10h] + sub ax, [si+4] + push ax + mov ax, [si+0Eh] + sub ax, [si+2] + push ax + call sub_1A8C + mov [bp+var_8], al + mov al, [si+12h] + sub al, [bp+var_8] + mov [bp+var_7], al + cmp [bp+var_7], 80h ; '' + jb short loc_C077 + cmp [bp+var_7], 0FEh ; '' + jb short loc_C035 + mov al, [bp+var_8] + mov [si+12h], al + cmp byte ptr [si+13h], 80h ; '' + jnb loc_C0CC + jmp short loc_C089 +; --------------------------------------------------------------------------- + +loc_C035: ; CODE XREF: sub_BE76+1ADj + cmp [bp+var_7], 0F0h ; 'E + jbe short loc_C04C + mov [bp+var_7], 1 + cmp byte ptr [si+13h], 80h ; '' + jnb short loc_C06F + mov al, [si+13h] + add al, 2 + jmp short loc_C06C +; --------------------------------------------------------------------------- + +loc_C04C: ; CODE XREF: sub_BE76+1C3j + mov al, [bp+var_7] + mov ah, 0 + push ax + mov ax, 100h + pop dx + sub ax, dx + mov bx, 10h + cwd + idiv bx + mov [bp+var_7], al + cmp byte ptr [si+13h], 8 + jbe short loc_C06F + mov al, [si+13h] + add al, 0FEh ; '' + +loc_C06C: ; CODE XREF: sub_BE76+1D4j + mov [si+13h], al + +loc_C06F: ; CODE XREF: sub_BE76+1CDj + ; sub_BE76+1EFj + mov al, [bp+var_7] + add [si+12h], al + jmp short loc_C0CC +; --------------------------------------------------------------------------- + +loc_C077: ; CODE XREF: sub_BE76+1A7j + cmp [bp+var_7], 2 + ja short loc_C093 + mov al, [bp+var_8] + mov [si+12h], al + cmp byte ptr [si+13h], 80h ; '' + jnb short loc_C0CC + +loc_C089: ; CODE XREF: sub_BE76+1BDj + mov al, [si+13h] + add al, 2 + mov [si+13h], al + jmp short loc_C0CC +; --------------------------------------------------------------------------- + +loc_C093: ; CODE XREF: sub_BE76+205j + cmp [bp+var_7], 10h + jnb short loc_C0AA + mov [bp+var_7], 1 + cmp byte ptr [si+13h], 80h ; '' + jnb short loc_C0C6 + mov al, [si+13h] + add al, 2 + jmp short loc_C0C3 +; --------------------------------------------------------------------------- + +loc_C0AA: ; CODE XREF: sub_BE76+221j + mov al, [bp+var_7] + mov ah, 0 + mov bx, 10h + cwd + idiv bx + mov [bp+var_7], al + cmp byte ptr [si+13h], 8 + jbe short loc_C0C6 + mov al, [si+13h] + add al, 0FEh ; '' + +loc_C0C3: ; CODE XREF: sub_BE76+232j + mov [si+13h], al + +loc_C0C6: ; CODE XREF: sub_BE76+22Bj + ; sub_BE76+246j + mov al, [bp+var_7] + sub [si+12h], al + +loc_C0CC: ; CODE XREF: sub_BE76+1B9j + ; sub_BE76+1FFj ... + mov ax, [si+2] + sub ax, [si+0Eh] + add ax, 40h ; '@' + cmp ax, 80h ; '' + jnb short loc_C141 + mov ax, [si+4] + sub ax, [si+10h] + add ax, 40h ; '@' + cmp ax, 80h ; '' + jnb short loc_C141 + inc byte ptr [si] + mov word ptr [si+14h], 0 + mov al, byte_15176 + mov ah, 0 + imul ax, 9 + mov dl, [si+1] + mov bx, ax + mov [bx+di+4F1Eh], dl + jmp short loc_C141 +; --------------------------------------------------------------------------- + +loc_C102: ; CODE XREF: sub_BE76+8Bj + ; DATA XREF: seg001:1C26o + mov ax, [si+14h] + shr ax, 2 + add ax, 18h + mov [bp+var_2], ax + cmp [bp+var_2], 1Ch + jl short loc_C118 + inc byte ptr [si] + jmp short loc_C152 +; --------------------------------------------------------------------------- + +loc_C118: ; CODE XREF: sub_BE76+29Cj + mov eax, [si+0Eh] + mov [si+6], eax + mov ax, [si+0Eh] + mov bx, 10h + cwd + idiv bx + add ax, 0FFF0h + mov [bp+var_4], ax + mov ax, [si+10h] + cwd + idiv bx + add ax, 0FFF0h + mov [bp+var_6], ax + jmp short loc_C141 +; --------------------------------------------------------------------------- + +loc_C13D: ; CODE XREF: sub_BE76+8Bj + ; DATA XREF: seg001:1C2Ao + dec byte ptr [si] + jmp short loc_C152 +; --------------------------------------------------------------------------- + +loc_C141: ; CODE XREF: sub_BE76+85j sub_BE76+8Bj ... + inc word ptr [si+14h] + push [bp+var_4] + push [bp+var_6] + push [bp+var_2] + call far ptr loc_2974 + +loc_C152: ; CODE XREF: sub_BE76+77j + ; sub_BE76+2A0j ... + inc di + add si, 1Ch + +loc_C156: ; CODE XREF: sub_BE76+71j + cmp di, 8 + jl loc_BEEA + pop di + pop si + leave + retn +sub_BE76 endp + +; --------------------------------------------------------------------------- + db 0 +off_C162 dw offset loc_BF06 ; DATA XREF: sub_BE76+8Br + dw offset loc_BF3E + dw offset loc_C102 + dw offset loc_C141 + dw offset loc_C13D + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C16C proc near ; CODE XREF: sub_C1DD:loc_C57Dp + +var_1 = byte ptr -1 + + enter 2, 0 + push si + push di + mov [bp+var_1], 0 + push 0Bh + call sub_EAE0 + mov si, 4F7Ah + xor di, di + jmp short loc_C1AF +; --------------------------------------------------------------------------- + +loc_C184: ; CODE XREF: sub_C16C+46j + cmp byte ptr [si], 1 + jnz short loc_C18C + mov byte ptr [si], 2 + +loc_C18C: ; CODE XREF: sub_C16C+1Bj + cmp byte ptr [si], 2 + jnz short loc_C1AB + mov ax, [si+10h] + sub ax, [si+4] + push ax + mov ax, [si+0Eh] + sub ax, [si+2] + push ax + call sub_1A8C + mov [si+12h], al + mov byte ptr [si+13h], 60h ; '`' + +loc_C1AB: ; CODE XREF: sub_C16C+23j + inc di + add si, 1Ch + +loc_C1AF: ; CODE XREF: sub_C16C+16j + cmp di, 8 + jl short loc_C184 + +loc_C1B4: ; CODE XREF: sub_C16C+6Bj + mov [bp+var_1], 0 + xor di, di + mov si, 4F7Ah + jmp short loc_C1CB +; --------------------------------------------------------------------------- + +loc_C1BF: ; CODE XREF: sub_C16C+62j + cmp byte ptr [si], 0 + jz short loc_C1C7 + inc [bp+var_1] + +loc_C1C7: ; CODE XREF: sub_C16C+56j + inc di + add si, 1Ch + +loc_C1CB: ; CODE XREF: sub_C16C+51j + cmp di, 8 + jl short loc_C1BF + call sub_BD1E + cmp [bp+var_1], 0 + jnz short loc_C1B4 + pop di + pop si + leave + retn +sub_C16C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C1DD proc near ; CODE XREF: _main:loc_A679p + ; _main:loc_A67Ep + +var_8 = byte ptr -8 +var_7 = byte ptr -7 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 + + enter 8, 0 + push si + push di + mov [bp+var_7], 0 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A4h ; '' + out dx, al ; Interrupt Controller #2, 8259A + mov word_10338, 0 + call far ptr loc_1B8A + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push 0 + push ds + push offset aHi01_pi ; "hi01.pi" + call sub_EF7A + push 0 + call sub_F05C + push large 0 + push 0 + call sub_EFAC + push 0 + call sub_F082 + push 0 + call sub_133C + push ds + push offset aScnum_bft ; "scnum.bft" + call sub_2894 + push ds + push offset aSctm0_bft ; "sctm0.bft" + call sub_2894 + push ds + push offset aSctm1_bft ; "sctm1.bft" + call sub_2894 + les bx, dword_11E6E + cmp byte ptr es:[bx+13h], 6 + jnz short loc_C256 + mov al, 4 + jmp short loc_C25E +; --------------------------------------------------------------------------- + +loc_C256: ; CODE XREF: sub_C1DD+73j + les bx, dword_11E6E + mov al, es:[bx+11h] + +loc_C25E: ; CODE XREF: sub_C1DD+77j + mov byte_15177, al + les bx, dword_11E6E + mov al, es:[bx+14h] + mov byte ptr word_15178, al + mov [bp+var_4], 0 + jmp short loc_C28C +; --------------------------------------------------------------------------- + +loc_C273: ; CODE XREF: sub_C1DD+B3j + mov al, byte ptr word_15178 + mov ah, 0 + cmp ax, [bp+var_4] + jz short loc_C289 + push [bp+var_4] + call sub_B646 + push [bp+var_4] + call sub_BCD3 + +loc_C289: ; CODE XREF: sub_C1DD+9Ej + inc [bp+var_4] + +loc_C28C: ; CODE XREF: sub_C1DD+94j + cmp [bp+var_4], 4 + jl short loc_C273 + mov al, byte ptr word_15178 + mov ah, 0 + push ax + call sub_B646 + les bx, dword_11E6E + cmp byte ptr es:[bx+16h], 0 + jnz short loc_C2AD + cmp byte_15177, 4 + jnz short loc_C2BB + +loc_C2AD: ; CODE XREF: sub_C1DD+C7j + call sub_B730 + mov al, byte ptr word_15178 + mov ah, 0 + push ax + call sub_BCD3 + jmp short loc_C2EB +; --------------------------------------------------------------------------- + +loc_C2BB: ; CODE XREF: sub_C1DD+CEj + mov byte_15176, 0FFh + mov al, byte ptr word_15178 + mov ah, 0 + push ax + call sub_BCD3 + push large 7C00C4h + push 9 + push ds + push offset unk_11676 + call far ptr loc_E914 + push large 7800C0h + push 2 + push ds + push offset unk_116A9 + call far ptr loc_E914 + +loc_C2EB: ; CODE XREF: sub_C1DD+DCj + call sub_EB66 + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FDh ; '' + jb short loc_C307 + cmp byte ptr es:[bx+20h], 0 + jnz short loc_C307 + mov byte_15078, 80h ; '' + +loc_C307: ; CODE XREF: sub_C1DD+11Cj + ; sub_C1DD+123j + push 1 + call sub_133C + call sub_EB66 + push 100h + call sub_EE18 + push ds + push offset aName ; "name" + push 600h + call sub_ED60 + push 0 + call sub_EE18 + push 2 + call sub_600 + cmp byte_15176, 0FFh + jz loc_C5C3 + mov al, byte_15176 + mov ah, 0 + push ax + push word_15178 + push 0 + call sub_BA84 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov al, byte_15176 + mov ah, 0 + push ax + push word_15178 + push 0 + call sub_BA84 + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + mov [bp+var_4], 0 + jmp short loc_C3AA +; --------------------------------------------------------------------------- + +loc_C36F: ; CODE XREF: sub_C1DD+1D1j + mov [bp+var_6], 0 + jmp short loc_C3A1 +; --------------------------------------------------------------------------- + +loc_C376: ; CODE XREF: sub_C1DD+1C8j + mov ax, [bp+var_6] + add ax, ax + add ax, 17h + push ax + mov ax, [bp+var_4] + add ax, 15h + push ax + mov bx, [bp+var_4] + imul bx, 11h + add bx, [bp+var_6] + mov al, [bx+14EEh] + mov ah, 0 + push ax + push 0E1h ; 'E + call sub_121A + inc [bp+var_6] + +loc_C3A1: ; CODE XREF: sub_C1DD+197j + cmp [bp+var_6], 11h + jl short loc_C376 + inc [bp+var_4] + +loc_C3AA: ; CODE XREF: sub_C1DD+190j + cmp [bp+var_4], 3 + jl short loc_C36F + push large 170015h + mov al, byte_115EE + mov ah, 0 + push ax + push 85h ; 'E + call sub_121A + xor si, si + xor di, di + mov [bp+var_2], 1 + +loc_C3CD: ; CODE XREF: sub_C1DD+3DEj + call sub_F202 + cmp [bp+var_2], 0 + jnz loc_C58A + test byte ptr word_12AFA, 0Fh + jz short loc_C438 + push si + push di + push 0E1h ; 'E + call sub_BCED + test byte ptr word_12AFA, 1 + jz short loc_C3F1 + dec di + +loc_C3F1: ; CODE XREF: sub_C1DD+211j + test byte ptr word_12AFA, 2 + jz short loc_C3F9 + inc di + +loc_C3F9: ; CODE XREF: sub_C1DD+219j + test byte ptr word_12AFA, 4 + jz short loc_C401 + dec si + +loc_C401: ; CODE XREF: sub_C1DD+221j + test byte ptr word_12AFA, 8 + jz short loc_C409 + inc si + +loc_C409: ; CODE XREF: sub_C1DD+229j + or di, di + jge short loc_C412 + mov di, 2 + jmp short loc_C419 +; --------------------------------------------------------------------------- + +loc_C412: ; CODE XREF: sub_C1DD+22Ej + cmp di, 2 + jle short loc_C419 + xor di, di + +loc_C419: ; CODE XREF: sub_C1DD+233j + ; sub_C1DD+238j + or si, si + jge short loc_C422 + mov si, 10h + jmp short loc_C429 +; --------------------------------------------------------------------------- + +loc_C422: ; CODE XREF: sub_C1DD+23Ej + cmp si, 10h + jle short loc_C429 + xor si, si + +loc_C429: ; CODE XREF: sub_C1DD+243j + ; sub_C1DD+248j + push si + push di + push 85h ; 'E + call sub_BCED + push 1 + call sub_EAE0 + +loc_C438: ; CODE XREF: sub_C1DD+202j + test byte ptr word_12AFA, 20h + jnz short loc_C448 + test byte ptr word_12AFA+1, 20h + jz loc_C516 + +loc_C448: ; CODE XREF: sub_C1DD+260j + mov bx, di + imul bx, 11h + mov al, [bx+si+14EEh] + mov [bp+var_8], al + mov ah, 0 + cmp ax, 0CEh ; '' + jz short loc_C469 + cmp ax, 0CFh ; '' + jz short loc_C4C4 + cmp ax, 0D5h ; '' + jz loc_C57D + jmp short loc_C4D4 +; --------------------------------------------------------------------------- + +loc_C469: ; CODE XREF: sub_C1DD+27Cj + mov al, byte_15176 + mov ah, 0 + imul ax, 9 + add ax, word_11622 + mov bx, ax + mov byte ptr [bx+4F1Eh], 2 + mov bx, word_11622 + imul bx, 1Ch + cmp byte ptr [bx+4F7Ah], 0 + jz short loc_C496 + mov bx, word_11622 + imul bx, 1Ch + mov byte ptr [bx+4F7Ah], 5 + +loc_C496: ; CODE XREF: sub_C1DD+2ABj + cmp word_11622, 0 + jle short loc_C4A1 + dec word_11622 + +loc_C4A1: ; CODE XREF: sub_C1DD+2BEj + mov bx, word_11622 + imul bx, 1Ch + cmp byte ptr [bx+4F7Ah], 0 + jz short loc_C4BB + mov bx, word_11622 + imul bx, 1Ch + mov byte ptr [bx+4F7Ah], 5 + +loc_C4BB: ; CODE XREF: sub_C1DD+2D0j + push 4 + call sub_EAE0 + jmp short loc_C516 +; --------------------------------------------------------------------------- + +loc_C4C4: ; CODE XREF: sub_C1DD+281j + push 0Bh + call sub_EAE0 + cmp word_11622, 7 + jge short loc_C516 + jmp short loc_C512 +; --------------------------------------------------------------------------- + +loc_C4D4: ; CODE XREF: sub_C1DD+28Aj + push 0Bh + call sub_EAE0 + push si + push di + mov al, byte_15176 + mov ah, 0 + push ax + push word_15178 + push word_11622 + call sub_BD46 + cmp word_11622, 7 + jnz short loc_C50B + push si + push di + push 0E1h ; 'E + call sub_BCED + mov si, 10h + mov di, 2 + push si + push di + push 85h ; 'E + call sub_BCED + +loc_C50B: ; CODE XREF: sub_C1DD+316j + cmp word_11622, 7 + jge short loc_C516 + +loc_C512: ; CODE XREF: sub_C1DD+2F5j + inc word_11622 + +loc_C516: ; CODE XREF: sub_C1DD+267j + ; sub_C1DD+2E5j ... + test byte ptr word_12AFA, 10h + jz short loc_C576 + mov al, byte_15176 + mov ah, 0 + imul ax, 9 + add ax, word_11622 + mov bx, ax + mov byte ptr [bx+4F1Eh], 2 + mov bx, word_11622 + imul bx, 1Ch + cmp byte ptr [bx+4F7Ah], 0 + jz short loc_C54A + mov bx, word_11622 + imul bx, 1Ch + mov byte ptr [bx+4F7Ah], 5 + +loc_C54A: ; CODE XREF: sub_C1DD+35Fj + cmp word_11622, 0 + jle short loc_C555 + dec word_11622 + +loc_C555: ; CODE XREF: sub_C1DD+372j + mov bx, word_11622 + imul bx, 1Ch + cmp byte ptr [bx+4F7Ah], 0 + jz short loc_C56F + mov bx, word_11622 + imul bx, 1Ch + mov byte ptr [bx+4F7Ah], 5 + +loc_C56F: ; CODE XREF: sub_C1DD+384j + push 4 + call sub_EAE0 + +loc_C576: ; CODE XREF: sub_C1DD+33Ej + test byte ptr word_12AFA+1, 10h + jz short loc_C582 + +loc_C57D: ; CODE XREF: sub_C1DD+286j + call sub_C16C + jmp short loc_C5BE +; --------------------------------------------------------------------------- + +loc_C582: ; CODE XREF: sub_C1DD+39Ej + mov ax, word_12AFA + mov [bp+var_2], ax + jmp short loc_C5B8 +; --------------------------------------------------------------------------- + +loc_C58A: ; CODE XREF: sub_C1DD+1F9j + mov ax, word_12AFA + cmp ax, [bp+var_2] + jnz short loc_C5A8 + inc [bp+var_7] + cmp [bp+var_7], 1Eh + jbe short loc_C5B8 + test [bp+var_7], 1 + jnz short loc_C5B8 + mov [bp+var_2], 0 + jmp short loc_C5B8 +; --------------------------------------------------------------------------- + +loc_C5A8: ; CODE XREF: sub_C1DD+3B3j + cmp word_12AFA, 0 + jnz short loc_C5B4 + mov [bp+var_2], 0 + +loc_C5B4: ; CODE XREF: sub_C1DD+3D0j + mov [bp+var_7], 0 + +loc_C5B8: ; CODE XREF: sub_C1DD+3ABj + ; sub_C1DD+3BCj ... + call sub_BD1E + jmp loc_C3CD +; --------------------------------------------------------------------------- + +loc_C5BE: ; CODE XREF: sub_C1DD+3A3j + call sub_B6A3 + jmp short loc_C5CD +; --------------------------------------------------------------------------- + +loc_C5C3: ; CODE XREF: sub_C1DD+15Dj + call sub_B6A3 + push 0 + call sub_F212 + +loc_C5CD: ; CODE XREF: sub_C1DD+3E4j + call sub_EC04 + call sub_2730 + call sub_2298 + push 1 + call sub_644 + pop di + pop si + leave + retn +sub_C1DD endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C5E7 proc near ; CODE XREF: sub_C729+A3p sub_C729+DAp ... + +var_6 = word ptr -6 +var_4 = byte ptr -4 +var_3 = byte ptr -3 +var_2 = byte ptr -2 +var_1 = byte ptr -1 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 + + enter 6, 0 + push si + xor si, si + mov [bp+var_4], 2 + mov ax, [bp+arg_0] + mov bx, 64h ; 'd' + xor dx, dx + div bx + mov [bp+var_6], ax + mov ax, [bp+arg_0] + xor dx, dx + div bx + mov [bp+arg_0], dx + cmp byte_11713, 0 + jnz short loc_C625 + or si, [bp+var_6] + or si, si + jz short loc_C621 + mov al, byte ptr [bp+var_6] + add al, 0A0h ; '' + mov [bp+var_4], al + jmp short loc_C625 +; --------------------------------------------------------------------------- + +loc_C621: ; CODE XREF: sub_C5E7+2Ej + mov [bp+var_4], 2 + +loc_C625: ; CODE XREF: sub_C5E7+27j sub_C5E7+38j + mov ax, [bp+arg_0] + mov bx, 0Ah + xor dx, dx + div bx + mov [bp+var_6], ax + mov ax, [bp+arg_0] + xor dx, dx + div bx + mov [bp+arg_0], dx + or si, [bp+var_6] + mov al, byte_11713 + mov ah, 0 + or si, ax + or si, si + jz short loc_C654 + mov al, byte ptr [bp+var_6] + add al, 0A0h ; '' + mov [bp+var_3], al + jmp short loc_C658 +; --------------------------------------------------------------------------- + +loc_C654: ; CODE XREF: sub_C5E7+61j + mov [bp+var_3], 2 + +loc_C658: ; CODE XREF: sub_C5E7+6Bj + mov al, byte ptr [bp+arg_0] + add al, 0A0h ; '' + mov [bp+var_2], al + mov [bp+var_1], 0 + push [bp+arg_4] + push [bp+arg_2] + push 10h + push ss + lea ax, [bp+var_4] + push ax + push word_116E4 + call sub_383C + pop si + leave + retn 6 +sub_C5E7 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C67F proc near ; CODE XREF: sub_CA9B+18Ap + ; sub_D21D+DAp ... + +var_C = byte ptr -0Ch +var_3 = byte ptr -3 +var_2 = byte ptr -2 +var_1 = byte ptr -1 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + enter 0Ch, 0 + push si + push di + mov di, [bp+arg_6] + les bx, [bp+arg_0] + cmp byte ptr es:[bx+7], 0Ah + jb short loc_C6AC + mov al, es:[bx+7] + mov ah, 0 + mov bx, 0Ah + cwd + idiv bx + mov [bp+var_1], al + add al, 0A0h ; '' + mov [bp+var_C], al + mov [bp+var_2], 1 + jmp short loc_C6B4 +; --------------------------------------------------------------------------- + +loc_C6AC: ; CODE XREF: sub_C67F+11j + mov [bp+var_C], 2 + mov [bp+var_2], 0 + +loc_C6B4: ; CODE XREF: sub_C67F+2Bj + mov si, 1 + jmp short loc_C6F1 +; --------------------------------------------------------------------------- + +loc_C6B9: ; CODE XREF: sub_C67F+75j + mov ax, 8 + sub ax, si + les bx, [bp+arg_0] + add bx, ax + mov al, es:[bx] + mov ah, 0 + mov bx, 0Ah + cwd + idiv bx + mov [bp+var_1], dl + mov al, [bp+var_1] + or [bp+var_2], al + cmp [bp+var_2], 0 + jnz short loc_C6E2 + cmp si, 8 + jnz short loc_C6EC + +loc_C6E2: ; CODE XREF: sub_C67F+5Cj + mov al, [bp+var_1] + add al, 0A0h ; '' + mov [bp+si+var_C], al + jmp short loc_C6F0 +; --------------------------------------------------------------------------- + +loc_C6EC: ; CODE XREF: sub_C67F+61j + mov [bp+si+var_C], 2 + +loc_C6F0: ; CODE XREF: sub_C67F+6Bj + inc si + +loc_C6F1: ; CODE XREF: sub_C67F+38j + cmp si, 8 + jle short loc_C6B9 + mov [bp+var_3], 0 + push di + push [bp+arg_4] + push 10h + push ss + lea ax, [bp+var_C] + push ax + push word_116E4 + call sub_383C + lea ax, [di+90h] + push ax + push [bp+arg_4] + push word_116E4 + push ds + push offset unk_11714 + call far ptr loc_E914 + pop di + pop si + leave + retn 8 +sub_C67F endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C729 proc near ; CODE XREF: sub_CA9B+255p + ; sub_CA9B+277p ... + +var_6 = dword ptr -6 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + enter 6, 0 + push si + push di + mov si, [bp+arg_6] + mov di, [bp+arg_4] + cmp [bp+arg_2], 0 + jz short loc_C745 + mov [bp+var_6], 0F4240h + jmp short loc_C74D +; --------------------------------------------------------------------------- + +loc_C745: ; CODE XREF: sub_C729+10j + mov [bp+var_6], 0 + +loc_C74D: ; CODE XREF: sub_C729+1Aj + mov ax, [bp+arg_2] + cmp ax, [bp+arg_0] + jz short loc_C786 + cmp [bp+arg_2], 0 + jz short loc_C770 + movzx ebx, [bp+arg_2] + mov eax, [bp+var_6] + xor edx, edx + div ebx + mov [bp+var_6], eax + jmp short loc_C778 +; --------------------------------------------------------------------------- + +loc_C770: ; CODE XREF: sub_C729+30j + mov [bp+var_6], 0 + +loc_C778: ; CODE XREF: sub_C729+45j + movzx eax, [bp+arg_0] + imul eax, [bp+var_6] + mov [bp+var_6], eax + +loc_C786: ; CODE XREF: sub_C729+2Aj + cmp byte_116EA, 0 + jnz short loc_C797 + mov eax, dword_1517E + add eax, [bp+var_6] + jmp short loc_C79F +; --------------------------------------------------------------------------- + +loc_C797: ; CODE XREF: sub_C729+62j + mov eax, dword_1517E + sub eax, [bp+var_6] + +loc_C79F: ; CODE XREF: sub_C729+6Cj + mov dword_1517E, eax + cmp byte_1517C, 0 + jz short loc_C7B6 + mov eax, [bp+var_6] + shr eax, 2 + mov dword_15182, eax + +loc_C7B6: ; CODE XREF: sub_C729+7Fj + mov eax, [bp+var_6] + mov ebx, 2710h + xor edx, edx + div ebx + mov [bp+var_2], ax + push si + push di + push ax + call sub_C5E7 + mov ebx, 2710h + mov eax, [bp+var_6] + xor edx, edx + div ebx + mov [bp+var_6], edx + mov eax, [bp+var_6] + mov ebx, 64h ; 'd' + xor edx, edx + div ebx + mov [bp+var_2], ax + mov byte_11713, 1 + lea ax, [si+30h] + push ax + push di + push [bp+var_2] + call sub_C5E7 + mov byte_11713, 0 + lea ax, [si+30h] + push ax + push di + push word_116E4 + push ds + push offset unk_11717 + call far ptr loc_E914 + lea ax, [si+60h] + push ax + push di + push word_116E4 + push ds + push offset unk_1171A + call far ptr loc_E914 + pop di + pop si + leave + retn 8 +sub_C729 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C835 proc near ; CODE XREF: sub_C8AE+128p + ; sub_CA9B+5B1p + +var_2 = word ptr -2 +arg_0 = dword ptr 4 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + enter 2, 0 + push si + push di + mov si, [bp+arg_6] + mov di, [bp+arg_4] + mov eax, [bp+arg_0] + mov ebx, 2710h + xor edx, edx + div ebx + mov [bp+var_2], ax + push si + push di + push ax + call sub_C5E7 + mov ebx, 2710h + mov eax, [bp+arg_0] + xor edx, edx + div ebx + mov [bp+arg_0], edx + mov eax, [bp+arg_0] + mov ebx, 64h ; 'd' + xor edx, edx + div ebx + mov [bp+var_2], ax + mov byte_11713, 1 + lea ax, [si+30h] + push ax + push di + push [bp+var_2] + call sub_C5E7 + mov byte_11713, 0 + lea ax, [si+30h] + push ax + push di + push word_116E4 + push ds + push offset unk_1171D + call far ptr loc_E914 + pop di + pop si + leave + retn 8 +sub_C835 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_C8AE proc near ; CODE XREF: sub_CA9B+2B4p + +var_4 = dword ptr -4 + + enter 4, 0 + les bx, dword_11E6E + mov eax, es:[bx+28h] + mov dword_10376, eax + mov al, es:[bx+0Dh] + mov ah, 0 + dec ax + mov bx, ax + cmp bx, 5 + ja short loc_C90E + add bx, bx + jmp cs:off_C9F6[bx] + +loc_C8D4: ; DATA XREF: seg001:off_C9F6o + mov [bp+var_4], 9C4h + jmp short loc_C90E +; --------------------------------------------------------------------------- + +loc_C8DE: ; CODE XREF: sub_C8AE+21j + ; DATA XREF: seg001:24B8o + mov [bp+var_4], 7D0h + jmp short loc_C90E +; --------------------------------------------------------------------------- + +loc_C8E8: ; CODE XREF: sub_C8AE+21j + ; DATA XREF: seg001:24BAo + mov [bp+var_4], 5DCh + jmp short loc_C90E +; --------------------------------------------------------------------------- + +loc_C8F2: ; CODE XREF: sub_C8AE+21j + ; DATA XREF: seg001:24BCo + mov [bp+var_4], 3E8h + jmp short loc_C90E +; --------------------------------------------------------------------------- + +loc_C8FC: ; CODE XREF: sub_C8AE+21j + ; DATA XREF: seg001:24BEo + mov [bp+var_4], 1F4h + jmp short loc_C90E +; --------------------------------------------------------------------------- + +loc_C906: ; CODE XREF: sub_C8AE+21j + ; DATA XREF: seg001:24C0o + mov [bp+var_4], 0 + +loc_C90E: ; CODE XREF: sub_C8AE+1Dj sub_C8AE+2Ej ... + les bx, dword_11E6E + mov al, es:[bx+0Eh] + mov ah, 0 + or ax, ax + jz short loc_C928 + cmp ax, 1 + jz short loc_C932 + cmp ax, 2 + jz short loc_C93C + jmp short loc_C944 +; --------------------------------------------------------------------------- + +loc_C928: ; CODE XREF: sub_C8AE+6Cj + add [bp+var_4], 9C4h + jmp short loc_C944 +; --------------------------------------------------------------------------- + +loc_C932: ; CODE XREF: sub_C8AE+71j + add [bp+var_4], 5DCh + jmp short loc_C944 +; --------------------------------------------------------------------------- + +loc_C93C: ; CODE XREF: sub_C8AE+76j + add [bp+var_4], 3E8h + +loc_C944: ; CODE XREF: sub_C8AE+78j sub_C8AE+82j ... + les bx, dword_11E6E + cmp byte ptr es:[bx+16h], 0 + jz short loc_C957 + add [bp+var_4], 7D0h + +loc_C957: ; CODE XREF: sub_C8AE+9Fj + les bx, dword_11E6E + cmp word ptr es:[bx+3Ah], 0 + jz short loc_C971 + mov ax, es:[bx+3Ah] + imul ax, 3 + movzx eax, ax + add [bp+var_4], eax + +loc_C971: ; CODE XREF: sub_C8AE+B2j + les bx, dword_11E6E + mov al, es:[bx+1Bh] + mov ah, 0 + mov dl, es:[bx+1Ch] + mov dh, 0 + sub ax, dx + cwde + imul eax, 0C8h + add [bp+var_4], eax + cmp [bp+var_4], 0 + jge short loc_C9A1 + mov [bp+var_4], 0 + jmp short loc_C9B3 +; --------------------------------------------------------------------------- + +loc_C9A1: ; CODE XREF: sub_C8AE+E7j + cmp [bp+var_4], 2710h + jle short loc_C9B3 + mov [bp+var_4], 2710h + +loc_C9B3: ; CODE XREF: sub_C8AE+F1j sub_C8AE+FBj + mov eax, [bp+var_4] + imul eax, 64h + mov [bp+var_4], eax + add dword_1517E, eax + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 0D8h ; '' + push ax + push large [bp+var_4] + call sub_C835 + mov ax, word_116E2 + add ax, 110h + push ax + mov ax, word_116E8 + add ax, 0D8h ; '' + push ax + push word_116E4 + push ds + push offset unk_11720 + call far ptr loc_E914 + leave + retn +sub_C8AE endp + +; --------------------------------------------------------------------------- +off_C9F6 dw offset loc_C8D4 ; DATA XREF: sub_C8AE+21r + dw offset loc_C8DE + dw offset loc_C8E8 + dw offset loc_C8F2 + dw offset loc_C8FC + dw offset loc_C906 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_CA02 proc near ; CODE XREF: sub_CA9B+651p + push bp + mov bp, sp + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FFh + jz short loc_CA17 + cmp byte ptr es:[bx+1Ah], 0FDh ; '' + jnz short loc_CA57 + +loc_CA17: ; CODE XREF: sub_CA02+Cj + les bx, dword_11E6E + cmp byte ptr es:[bx+11h], 0 + jnz short loc_CA26 + mov al, 4 + pop bp + retn +; --------------------------------------------------------------------------- + +loc_CA26: ; CODE XREF: sub_CA02+1Ej + les bx, dword_11E6E + cmp byte ptr es:[bx+27h], 7 + ja short loc_CA35 + mov al, 1 + pop bp + retn +; --------------------------------------------------------------------------- + +loc_CA35: ; CODE XREF: sub_CA02+2Dj + les bx, dword_11E6E + cmp byte ptr es:[bx+1Bh], 6 + jb short loc_CA44 + mov al, 7 + pop bp + retn +; --------------------------------------------------------------------------- + +loc_CA44: ; CODE XREF: sub_CA02+3Cj + les bx, dword_11E6E + cmp byte ptr es:[bx+0Ch], 0Fh + jb short loc_CA53 + mov al, 8 + pop bp + retn +; --------------------------------------------------------------------------- + +loc_CA53: ; CODE XREF: sub_CA02+4Bj + mov al, 0 + pop bp + retn +; --------------------------------------------------------------------------- + +loc_CA57: ; CODE XREF: sub_CA02+13j + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FEh ; '' + jnz short loc_CA66 + mov al, 2 + pop bp + retn +; --------------------------------------------------------------------------- + +loc_CA66: ; CODE XREF: sub_CA02+5Ej + les bx, dword_11E6E + mov al, es:[bx+1Ch] + mov ah, 0 + mov dl, es:[bx+1Bh] + mov dh, 0 + add dx, dx + cmp ax, dx + jg short loc_CA80 + mov al, 5 + pop bp + retn +; --------------------------------------------------------------------------- + +loc_CA80: ; CODE XREF: sub_CA02+78j + les bx, dword_11E6E + cmp byte ptr es:[bx+13h], 4 + jb short loc_CA97 + cmp word ptr es:[bx+32h], 15Eh + ja short loc_CA97 + mov al, 6 + pop bp + retn +; --------------------------------------------------------------------------- + +loc_CA97: ; CODE XREF: sub_CA02+87j sub_CA02+8Fj + mov al, 3 + pop bp + retn +sub_CA02 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_CA9B proc near ; CODE XREF: sub_D1B1+4Fp + ; sub_E41D:loc_E6ECp + +var_4 = dword ptr -4 + + enter 4, 0 + push si + mov dword_1517E, 0 + mov word_107BC, 2 + push word_116E2 + push word_116E8 + push word_116E4 + push ds + push offset aB@b@b@b@b@b@b@ ; "@@@@@@@ rO" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 18h + push ax + push word_116E4 + push ds + push offset aUqiUx ; "Փx" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 30h ; '0' + push ax + push word_116E4 + push ds + push offset aNPiuU_ ; "ŏI_" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 48h ; 'H' + push ax + push word_116E4 + push ds + push offset unk_1174B + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 60h ; '`' + push ax + push word_116E4 + push ds + push offset unk_11754 + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 78h ; 'x' + push ax + push word_116E4 + push ds + push offset aGqbGatbrmcj ; "Q[B" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 90h ; 'E + push ax + push word_116E4 + push ds + push offset aIlcSObcj ; "ގ" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 0A8h ; '' + push ax + push word_116E4 + push ds + push offset unk_11779 + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 0C0h ; '' + push ax + push word_116E4 + push ds + push offset aUU_gagcgeganNv ; "_ACeō_" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 0D8h ; '' + push ax + push word_116E4 + push ds + push offset aLcnzvv ; "C" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 0F0h ; 'E + push ax + push word_116E4 + push ds + push offset aPicacovCj ; "" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 110h + push ax + push word_116E4 + push ds + push offset aVavVVSrso ; "Ȃ̘rO" + call far ptr loc_E914 + les bx, dword_11E6E + cmp byte ptr es:[bx+13h], 6 + jnz short loc_CBDB + mov al, 4 + jmp short loc_CBE3 +; --------------------------------------------------------------------------- + +loc_CBDB: ; CODE XREF: sub_CA9B+13Aj + les bx, dword_11E6E + mov al, es:[bx+11h] + +loc_CBE3: ; CODE XREF: sub_CA9B+13Ej + mov byte_15186, al + mov ax, word_116E2 + add ax, 0A0h ; '' + push ax + mov ax, word_116E8 + add ax, 18h + push ax + push 10h + push ds + mov al, byte_15186 + mov ah, 0 + shl ax, 3 + add ax, 15EBh + push ax + push word_116E4 + call sub_383C + mov ax, word_116E2 + add ax, 80h ; '' + push ax + mov ax, word_116E8 + add ax, 30h ; '0' + push ax + mov ax, word ptr dword_11E6E + add ax, 20h ; ' ' + push word ptr dword_11E6E+2 + push ax + call sub_C67F + mov ax, word_116E2 + add ax, 0E0h ; 'E + push ax + mov ax, word_116E8 + add ax, 48h ; 'H' + push ax + les bx, dword_11E6E + mov al, es:[bx+1Bh] + mov ah, 0 + push ax + call sub_C5E7 + mov ax, word_116E2 + add ax, 0E0h ; 'E + push ax + mov ax, word_116E8 + add ax, 60h ; '`' + push ax + les bx, dword_11E6E + mov al, es:[bx+1Ch] + mov ah, 0 + push ax + call sub_C5E7 + mov ax, word_116E2 + add ax, 110h + push ax + mov ax, word_116E8 + add ax, 48h ; 'H' + push ax + push word_116E4 + push ds + push offset unk_117BC + call far ptr loc_E914 + mov ax, word_116E2 + add ax, 110h + push ax + mov ax, word_116E8 + add ax, 60h ; '`' + push ax + push word_116E4 + push ds + push offset unk_117BF + call far ptr loc_E914 + mov byte_1517C, 1 + les bx, dword_11E6E + cmp byte ptr es:[bx+13h], 6 + jz short loc_CCC6 + cmp byte ptr es:[bx+1Ah], 0FEh ; '' + jb short loc_CCB3 + mov word ptr es:[bx+2Ch], 0B3B0h + +loc_CCB3: ; CODE XREF: sub_CA9B+210j + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 78h ; 'x' + push ax + push 0B3B0h + jmp short loc_CCE8 +; --------------------------------------------------------------------------- + +loc_CCC6: ; CODE XREF: sub_CA9B+209j + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FDh ; '' + jnz short loc_CCD7 + mov word ptr es:[bx+2Ch], 3200h + +loc_CCD7: ; CODE XREF: sub_CA9B+234j + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 78h ; 'x' + push ax + push 3200h + +loc_CCE8: ; CODE XREF: sub_CA9B+229j + les bx, dword_11E6E + push word ptr es:[bx+2Ch] + call sub_C729 + mov byte_1517C, 0 + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 90h ; 'E + push ax + les bx, dword_11E6E + push word ptr es:[bx+36h] + push word ptr es:[bx+38h] + call sub_C729 + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 0A8h ; '' + push ax + les bx, dword_11E6E + push word ptr es:[bx+2Eh] + push word ptr es:[bx+30h] + call sub_C729 + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 0C0h ; '' + push ax + les bx, dword_11E6E + push word ptr es:[bx+32h] + push word ptr es:[bx+34h] + call sub_C729 + call sub_C8AE + mov byte_116EA, 1 + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 0F0h ; 'E + push ax + les bx, dword_11E6E + mov eax, es:[bx+40h] + mov ebx, 0Ah + xor edx, edx + div ebx + push ax + mov bx, word ptr dword_11E6E + mov eax, es:[bx+3Ch] + mov ebx, 0Ah + xor edx, edx + div ebx + push ax + call sub_C729 + mov byte_116EA, 0 + mov ebx, 0Ch + mov eax, dword_1517E + cdq + idiv ebx + mov dword_1517E, eax + mov eax, dword_15182 + add dword_1517E, eax + les bx, dword_11E6E + cmp byte ptr es:[bx+4Bh], 0Ah + jb short loc_CDCB + add dword_1517E, 7A120h + jmp short loc_CDF3 +; --------------------------------------------------------------------------- + +loc_CDCB: ; CODE XREF: sub_CA9B+323j + les bx, dword_11E6E + movzx eax, byte ptr es:[bx+4Ah] + imul eax, 1388h + add dword_1517E, eax + movzx eax, byte ptr es:[bx+4Bh] + imul eax, 0C350h + add dword_1517E, eax + +loc_CDF3: ; CODE XREF: sub_CA9B+32Ej + mov al, byte_15186 + mov ah, 0 + mov bx, ax + cmp bx, 4 + ja loc_CEAF + add bx, bx + jmp cs:off_D165[bx] + +loc_CE08: ; CODE XREF: sub_CA9B+428j + ; DATA XREF: seg001:off_D165o + sub dword_1517E, 0C350h + mov [bp+var_4], 0C3500h + jmp loc_CEAF +; --------------------------------------------------------------------------- + +loc_CE1C: ; CODE XREF: sub_CA9B+368j + ; sub_CA9B+428j + ; DATA XREF: ... + mov [bp+var_4], 0F4240h + jmp loc_CEAF +; --------------------------------------------------------------------------- + +loc_CE27: ; CODE XREF: sub_CA9B+368j + ; sub_CA9B+428j + ; DATA XREF: ... + mov eax, dword_1517E + imul eax, 5 + mov dword_1517E, eax + mov ebx, 4 + cdq + idiv ebx + mov dword_1517E, eax + add dword_1517E, 249F0h + mov [bp+var_4], 124F80h + jmp short loc_CEAF +; --------------------------------------------------------------------------- + +loc_CE55: ; CODE XREF: sub_CA9B+368j + ; sub_CA9B+428j + ; DATA XREF: ... + mov eax, dword_1517E + imul eax, 3 + mov dword_1517E, eax + mov ebx, 2 + cdq + idiv ebx + mov dword_1517E, eax + add dword_1517E, 493E0h + mov [bp+var_4], 155CC0h + jmp short loc_CEAF +; --------------------------------------------------------------------------- + +loc_CE83: ; CODE XREF: sub_CA9B+368j + ; sub_CA9B+428j + ; DATA XREF: ... + mov eax, dword_1517E + imul eax, 3 + mov dword_1517E, eax + mov ebx, 2 + cdq + idiv ebx + mov dword_1517E, eax + add dword_1517E, 3D090h + mov [bp+var_4], 1E8480h + +loc_CEAF: ; CODE XREF: sub_CA9B+362j + ; sub_CA9B+37Ej ... + les bx, dword_11E6E + mov al, es:[bx+0Dh] + mov ah, 0 + dec ax + mov bx, ax + cmp bx, 5 + ja short loc_CF0A + add bx, bx + jmp cs:off_D159[bx] + +loc_CEC8: ; DATA XREF: seg001:off_D159o + add dword_1517E, 0C350h + add [bp+var_4], 186A0h + jmp short loc_CF0A +; --------------------------------------------------------------------------- + +loc_CEDB: ; CODE XREF: sub_CA9B+428j + ; DATA XREF: seg001:2C1Bo + add dword_1517E, 61A8h + add [bp+var_4], 0C350h + jmp short loc_CF0A +; --------------------------------------------------------------------------- + +loc_CEEE: ; CODE XREF: sub_CA9B+428j + ; DATA XREF: seg001:2C1Fo + sub [bp+var_4], 61A8h + jmp short loc_CF0A +; --------------------------------------------------------------------------- + +loc_CEF8: ; CODE XREF: sub_CA9B+428j + ; DATA XREF: seg001:2C21o + sub [bp+var_4], 0C350h + jmp short loc_CF0A +; --------------------------------------------------------------------------- + +loc_CF02: ; CODE XREF: sub_CA9B+428j + ; DATA XREF: seg001:2C23o + sub [bp+var_4], 124F8h + +loc_CF0A: ; CODE XREF: sub_CA9B+424j + ; sub_CA9B+428j ... + les bx, dword_11E6E + mov al, es:[bx+0Eh] + mov ah, 0 + or ax, ax + jz short loc_CF24 + cmp ax, 1 + jz short loc_CF37 + cmp ax, 2 + jz short loc_CF4A + jmp short loc_CF5B +; --------------------------------------------------------------------------- + +loc_CF24: ; CODE XREF: sub_CA9B+47Bj + add dword_1517E, 0C350h + add [bp+var_4], 186A0h + jmp short loc_CF5B +; --------------------------------------------------------------------------- + +loc_CF37: ; CODE XREF: sub_CA9B+480j + add dword_1517E, 7530h + add [bp+var_4], 0C350h + jmp short loc_CF5B +; --------------------------------------------------------------------------- + +loc_CF4A: ; CODE XREF: sub_CA9B+485j + add dword_1517E, 4E20h + add [bp+var_4], 61A8h + +loc_CF5B: ; CODE XREF: sub_CA9B+487j + ; sub_CA9B+49Aj ... + les bx, dword_11E6E + cmp byte ptr es:[bx+16h], 0 + jnz short loc_CF77 + sub dword_1517E, 30D40h + sub [bp+var_4], 186A0h + +loc_CF77: ; CODE XREF: sub_CA9B+4C9j + les bx, dword_11E6E + cmp byte ptr es:[bx+1Bh], 0Ah + jb short loc_CF8D + sub dword_1517E, 493E0h + jmp short loc_CFA3 +; --------------------------------------------------------------------------- + +loc_CF8D: ; CODE XREF: sub_CA9B+4E5j + les bx, dword_11E6E + movzx eax, byte ptr es:[bx+1Bh] + imul eax, 7530h + sub dword_1517E, eax + +loc_CFA3: ; CODE XREF: sub_CA9B+4F0j + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ch], 0Fh + jb short loc_CFB9 + sub dword_1517E, 36EE8h + jmp short loc_CFCF +; --------------------------------------------------------------------------- + +loc_CFB9: ; CODE XREF: sub_CA9B+511j + les bx, dword_11E6E + movzx eax, byte ptr es:[bx+1Ch] + imul eax, 3A98h + sub dword_1517E, eax + +loc_CFCF: ; CODE XREF: sub_CA9B+51Cj + les bx, dword_11E6E + cmp byte ptr es:[bx+1Ah], 0FDh ; '' + jnb short loc_CFF5 + mov eax, dword_1517E + imul eax, 7 + mov dword_1517E, eax + mov ebx, 8 + cdq + idiv ebx + mov dword_1517E, eax + +loc_CFF5: ; CODE XREF: sub_CA9B+53Dj + cmp dword_1517E, 0 + jge short loc_D008 + mov dword_1517E, 0 + jmp short loc_D01A +; --------------------------------------------------------------------------- + +loc_D008: ; CODE XREF: sub_CA9B+560j + mov eax, dword_1517E + cmp eax, [bp+var_4] + jbe short loc_D01A + mov eax, [bp+var_4] + mov dword_1517E, eax + +loc_D01A: ; CODE XREF: sub_CA9B+56Bj + ; sub_CA9B+575j + mov byte_15187, 0 + mov byte_151A5, 0 + les bx, dword_11E6E + mov eax, es:[bx+40h] + shr eax, 1 + cmp eax, es:[bx+3Ch] + jbe loc_D120 + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 110h + push ax + push large [dword_1517E] + call sub_C835 + mov ax, word_116E2 + add ax, 110h + push ax + mov ax, word_116E8 + add ax, 110h + push ax + push word_116E4 + push ds + push offset unk_117C2 + call far ptr loc_E914 + push ds + push offset a_ude_txt ; "_ude.txt" + call sub_A66 + cmp dword_1517E, 16E360h + jge short loc_D0E1 + cmp dword_1517E, 0 + jnz short loc_D08B + mov si, 19h + jmp short loc_D0D1 +; --------------------------------------------------------------------------- + +loc_D08B: ; CODE XREF: sub_CA9B+5E9j + cmp dword_1517E, 100590h + jge short loc_D0AE + mov eax, dword_1517E + mov ebx, 0C350h + cdq + idiv ebx + mov dx, 18h + sub dx, ax + mov si, dx + jmp short loc_D0D1 +; --------------------------------------------------------------------------- + +loc_D0AE: ; CODE XREF: sub_CA9B+5F9j + cmp dword_1517E, 124F80h + jge short loc_D0BE + mov si, 3 + jmp short loc_D0D1 +; --------------------------------------------------------------------------- + +loc_D0BE: ; CODE XREF: sub_CA9B+61Cj + cmp dword_1517E, 149970h + jge short loc_D0CE + mov si, 2 + jmp short loc_D0D1 +; --------------------------------------------------------------------------- + +loc_D0CE: ; CODE XREF: sub_CA9B+62Cj + mov si, 1 + +loc_D0D1: ; CODE XREF: sub_CA9B+5EEj + ; sub_CA9B+611j ... + mov ax, si + imul ax, 1Eh + cwde + push eax + push 0 + call sub_AA2 + +loc_D0E1: ; CODE XREF: sub_CA9B+5E1j + push ds + push offset byte_15187 + push 1Eh + call sub_9B2 + call sub_CA02 + mov ah, 0 + mov si, ax + imul ax, 1Eh + add ax, 30Ch + cwde + push eax + push 0 + call sub_AA2 + push ds + push offset byte_151A5 + push 1Eh + call sub_9B2 + call sub_946 + mov byte_151A3, 0 + mov byte_151C1, 0 + jmp short loc_D156 +; --------------------------------------------------------------------------- + +loc_D120: ; CODE XREF: sub_CA9B+59Aj + mov ax, word_116E2 + add ax, 0B0h ; '' + push ax + mov ax, word_116E8 + add ax, 110h + push ax + push word_116E4 + push ds + push offset aBhbhbhbhbhbhu_ ; "HHHHHH_" + call far ptr loc_E914 + mov ax, word_116E2 + add ax, 30h ; '0' + push ax + mov ax, word_116E8 + add ax, 128h + push ax + push word_116E6 + push ds + push offset aPicacovVVcvsfT ; "ɂ锻s" + call far ptr loc_E914 + +loc_D156: ; CODE XREF: sub_CA9B+683j + pop si + leave + retn +sub_CA9B endp + +; --------------------------------------------------------------------------- +off_D159 dw offset loc_CEC8 ; DATA XREF: sub_CA9B+428r + dw offset loc_CEDB + dw offset loc_CF0A + dw offset loc_CEEE + dw offset loc_CEF8 + dw offset loc_CF02 +off_D165 dw offset loc_CE08 ; DATA XREF: sub_CA9B+368r + dw offset loc_CE1C + dw offset loc_CE27 + dw offset loc_CE55 + dw offset loc_CE83 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D16F proc near ; CODE XREF: sub_D1B1+59p + ; sub_E41D:loc_E6FDp + push bp + mov bp, sp + cmp byte_15187, 0 + jz short loc_D1AF + mov ax, word_116E2 + add ax, 30h ; '0' + push ax + mov ax, word_116E8 + add ax, 128h + push ax + push word_116E6 + push ds + push offset byte_15187 + call far ptr loc_E914 + mov ax, word_116E2 + add ax, 30h ; '0' + push ax + mov ax, word_116E8 + add ax, 138h + push ax + push word_116E6 + push ds + push offset byte_151A5 + call far ptr loc_E914 + +loc_D1AF: ; CODE XREF: sub_D16F+8j + pop bp + retn +sub_D16F endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D1B1 proc near ; CODE XREF: _main+7Bp _main+86p + push bp + mov bp, sp + mov word_10338, 0 + call far ptr loc_1B8A + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push 0 + push ds + push offset aUde_pi ; "ude.pi" + call sub_EF7A + push 0 + call sub_F05C + push large 0 + push 0 + call sub_EFAC + push 0 + call sub_F082 + push 0 + call sub_133C + push 4 + call sub_600 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A4h ; '' + out dx, al ; Interrupt Controller #2, 8259A + call sub_CA9B + push 40h ; '@' + call sub_F282 + call sub_D16F + push 0 + call sub_F212 + push 2 + call sub_644 + pop bp + retn +sub_D1B1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D21D proc near ; CODE XREF: sub_E41D+4Ep + +var_2 = word ptr -2 + + enter 2, 0 + push si + push di + push word_116E2 + mov ax, word_116E8 + add ax, 40h ; '@' + push ax + push word_116E4 + push ds + push offset aB@vpcB@ ; "@Pʁ@" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 60h ; '`' + push ax + push word_116E4 + push ds + push offset aB@vqcB@ ; "@Qʁ@" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 80h ; '' + push ax + push word_116E4 + push ds + push offset aB@vrcB@ ; "@Rʁ@" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 0A0h ; '' + push ax + push word_116E4 + push ds + push offset aB@vscB@ ; "@Sʁ@" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 0C0h ; '' + push ax + push word_116E4 + push ds + push offset aB@vtcB@ ; "@Tʁ@" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 0E0h ; 'E + push ax + push word_116E4 + push ds + push offset aB@vucB@ ; "@Uʁ@" + call far ptr loc_E914 + push word_116E2 + mov ax, word_116E8 + add ax, 120h + push ax + push word_116E4 + push ds + push offset aNPiuU__0 ; "ŏI_" + call far ptr loc_E914 + mov ax, word_116E2 + add ax, 80h ; '' + mov [bp+var_2], ax + xor si, si + mov ax, word_116E8 + add ax, 40h ; '@' + mov di, ax + jmp short loc_D2FE +; --------------------------------------------------------------------------- + +loc_D2E0: ; CODE XREF: sub_D21D+E4j + push [bp+var_2] + push di + mov ax, si + shl ax, 3 + mov dx, word ptr dword_11E6E + add dx, ax + add dx, 4Ch ; 'L' + push word ptr dword_11E6E+2 + push dx + call sub_C67F + inc si + add di, 20h ; ' ' + +loc_D2FE: ; CODE XREF: sub_D21D+C1j + cmp si, 6 + jl short loc_D2E0 + push [bp+var_2] + mov ax, word_116E8 + add ax, 120h + push ax + mov ax, word ptr dword_11E6E + add ax, 20h ; ' ' + push word ptr dword_11E6E+2 + push ax + call sub_C67F + pop di + pop si + leave + retn +sub_D21D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D31F proc near ; CODE XREF: sub_D387+1Fp sub_D931+CEp ... + +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + push bp + mov bp, sp + mov ax, [bp+arg_6] + mov word_151D6, ax + mov ax, [bp+arg_4] + mov word_151D8, ax + mov ax, [bp+arg_2] + mov word_151CE, ax + mov ax, [bp+arg_0] + mov word_151D0, ax + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D6 + sub dx, ax + add dx, 0FFF8h + push dx + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D8 + sub dx, ax + add dx, 0FFF8h + push dx + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D6 + add ax, 7 + push ax + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D8 + add ax, 7 + push ax + call sub_DCC + pop bp + retn 8 +sub_D31F endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D387 proc near ; CODE XREF: sub_E41D+13Dp + +var_4 = word ptr -4 +var_2 = word ptr -2 + + enter 4, 0 + push si + push di + mov si, 50E4h + mov [bp+var_2], 55F8h + mov [bp+var_4], 5618h + push large 14000C8h + push large 1800140h + call sub_D31F + mov word_151DE, 0 + xor di, di + jmp short loc_D41B +; --------------------------------------------------------------------------- + +loc_D3B3: ; CODE XREF: sub_D387+97j + call sub_1DF8 + cwd + idiv word_151CE + shl dx, 4 + mov ax, word_151CE + shl ax, 3 + sub dx, ax + movsx eax, dx + mov [si], eax + call sub_1DF8 + cwd + idiv word_151D0 + shl dx, 4 + mov ax, word_151D0 + shl ax, 3 + sub dx, ax + movsx eax, dx + mov [si+4], eax + call sub_1DF8 + mov [si+12h], al + mov word ptr [si+0Eh], 0Ah + mov word ptr [si+0Ch], 0 + mov byte ptr [si+13h], 0 + lea ax, [si+8] + push ax + push large 0 + push word ptr [si+0Eh] + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + inc di + add si, 14h + +loc_D41B: ; CODE XREF: sub_D387+2Aj + cmp di, 40h ; '@' + jl short loc_D3B3 + mov dword ptr [si], 0FFFFC190h + mov byte ptr [si+13h], 0 + mov word ptr [si+8], 0 + mov word ptr [si+0Ah], 0 + mov word_151DA, 0 + mov word_151DC, 0 + xor di, di + jmp short loc_D451 +; --------------------------------------------------------------------------- + +loc_D445: ; CODE XREF: sub_D387+CDj + mov bx, [bp+var_2] + mov word ptr [bx], 0C190h + inc di + add [bp+var_2], 4 + +loc_D451: ; CODE XREF: sub_D387+BCj + cmp di, 8 + jl short loc_D445 + xor di, di + jmp short loc_D494 +; --------------------------------------------------------------------------- + +loc_D45A: ; CODE XREF: sub_D387+110j + call sub_1DF8 + cwd + idiv word_151CE + shl dx, 4 + mov ax, word_151CE + shl ax, 3 + sub dx, ax + mov bx, [bp+var_4] + mov [bx], dx + call sub_1DF8 + cwd + idiv word_151D0 + shl dx, 4 + mov ax, word_151D0 + shl ax, 3 + sub dx, ax + mov bx, [bp+var_4] + mov [bx+2], dx + inc di + add [bp+var_4], 4 + +loc_D494: ; CODE XREF: sub_D387+D1j + cmp di, 30h ; '0' + jl short loc_D45A + pop di + pop si + leave + retn +sub_D387 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D49D proc near ; CODE XREF: sub_E41D+161p + push bp + mov bp, sp + push si + push di + mov si, 50E4h + xor di, di + jmp short loc_D4ED +; --------------------------------------------------------------------------- + +loc_D4A9: ; CODE XREF: sub_D49D+53j + mov ax, [si+4] + neg ax + push ax + mov ax, [si] + neg ax + push ax + call sub_1A8C + mov [si+12h], al + push word ptr [si] + push word ptr [si+4] + call sub_1AF8 + mov bx, 20h ; ' ' + cwd + idiv bx + mov [si+0Eh], ax + mov word ptr [si+10h], 0 + lea ax, [si+8] + push ax + push large 0 + push word ptr [si+0Eh] + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + inc di + add si, 14h + +loc_D4ED: ; CODE XREF: sub_D49D+Aj + cmp di, 40h ; '@' + jl short loc_D4A9 + mov dword ptr [si], 0 + mov dword ptr [si+4], 0 + mov byte ptr [si+13h], 1 + pop di + pop si + pop bp + retn +sub_D49D endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D509 proc near ; CODE XREF: sub_E41D+174p + push bp + mov bp, sp + push si + mov si, 50E4h + xor ax, ax + jmp short loc_D51F +; --------------------------------------------------------------------------- + +loc_D514: ; CODE XREF: sub_D509+19j + mov dword ptr [si], 0FFFFC190h + inc ax + add si, 14h + +loc_D51F: ; CODE XREF: sub_D509+9j + cmp ax, 40h ; '@' + jl short loc_D514 + mov byte ptr [si+13h], 10h + mov word_151DE, 1 + pop si + pop bp + retn +sub_D509 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D531 proc near ; CODE XREF: sub_E41D+21Ap + push bp + mov bp, sp + push si + push di + mov si, 50E4h + xor di, di + jmp loc_D5C9 +; --------------------------------------------------------------------------- + +loc_D53E: ; CODE XREF: sub_D531+9Bj + mov ax, [si+4] + neg ax + push ax + mov ax, [si] + neg ax + push ax + call sub_1A8C + mov [si+12h], al + push word ptr [si] + push word ptr [si+4] + call sub_1AF8 + mov bx, 20h ; ' ' + cwd + idiv bx + mov [si+0Eh], ax + mov word ptr [si+0Ch], 0 + call sub_1DF8 + and al, 7Fh + mov [si+12h], al + call sub_1DF8 + mov bx, 40h ; '@' + cwd + idiv bx + add dx, 5Ch ; '\' + mov [si+0Eh], dx + push 50D2h + push word_156E4 + push word_156E8 + push 0C0h ; '' + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + lea ax, [si+8] + push ax + push large 0 + push word ptr [si+0Eh] + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + movsx eax, word_151D2 + mov [si], eax + movsx eax, word_151D4 + mov [si+4], eax + inc di + add si, 14h + +loc_D5C9: ; CODE XREF: sub_D531+Aj + cmp di, 40h ; '@' + jl loc_D53E + mov dword ptr [si], 0FFFFC190h + mov word_151DE, 1 + pop di + pop si + pop bp + retn +sub_D531 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D5E1 proc near ; CODE XREF: sub_E349+3p + +var_4 = word ptr -4 +var_2 = word ptr -2 + + enter 4, 0 + push si + push di + mov si, 50E4h + mov [bp+var_4], 55F8h + mov di, 5618h + mov [bp+var_2], 0 + jmp loc_D6FF +; --------------------------------------------------------------------------- + +loc_D5FA: ; CODE XREF: sub_D5E1+122j + cmp dword ptr [si], 0FFFFC190h + jz loc_D6F9 + mov ax, [si+8] + sub ax, word_151DA + cwde + add [si], eax + mov ax, [si+0Ah] + sub ax, word_151DC + cwde + add [si+4], eax + cmp word_151DE, 0 + jnz loc_D6AB + mov ax, word_151CE + neg ax + shl ax, 3 + add ax, 0FFC0h + cwde + cmp eax, [si] + jl short loc_D649 + mov ax, word_151CE + shl ax, 4 + add ax, 80h ; '' + cwde + add [si], eax + jmp short loc_D667 +; --------------------------------------------------------------------------- + +loc_D649: ; CODE XREF: sub_D5E1+56j + mov ax, word_151CE + shl ax, 3 + add ax, 40h ; '@' + cwde + cmp eax, [si] + jg short loc_D667 + mov ax, word_151CE + shl ax, 4 + add ax, 80h ; '' + cwde + sub [si], eax + +loc_D667: ; CODE XREF: sub_D5E1+66j sub_D5E1+76j + mov ax, word_151D0 + neg ax + shl ax, 3 + add ax, 0FFC0h + cwde + cmp eax, [si+4] + jl short loc_D68B + mov ax, word_151D0 + shl ax, 4 + add ax, 80h ; '' + cwde + add [si+4], eax + jmp short loc_D6AB +; --------------------------------------------------------------------------- + +loc_D68B: ; CODE XREF: sub_D5E1+97j + mov ax, word_151D0 + shl ax, 3 + add ax, 40h ; '@' + cwde + cmp eax, [si+4] + jg short loc_D6AB + mov ax, word_151D0 + shl ax, 4 + add ax, 80h ; '' + cwde + sub [si+4], eax + +loc_D6AB: ; CODE XREF: sub_D5E1+42j sub_D5E1+A8j ... + cmp word_151DE, 0 + jz short loc_D6F9 + mov ax, word_151DE + sub [si+0Eh], ax + cmp word ptr [si+0Eh], 0 + jnz short loc_D6C7 + mov dword ptr [si], 0FFFFC190h + jmp short loc_D6F9 +; --------------------------------------------------------------------------- + +loc_D6C7: ; CODE XREF: sub_D5E1+DBj + cmp word ptr [si+0Eh], 23h ; '#' + jle short loc_D6D4 + mov word ptr [si+0Ch], 0 + jmp short loc_D6E4 +; --------------------------------------------------------------------------- + +loc_D6D4: ; CODE XREF: sub_D5E1+EAj + mov ax, [si+0Eh] + mov bx, 7 + cwd + idiv bx + or dx, dx + jnz short loc_D6E4 + inc word ptr [si+0Ch] + +loc_D6E4: ; CODE XREF: sub_D5E1+F1j sub_D5E1+FEj + lea ax, [si+8] + push ax + push large 0 + push word ptr [si+0Eh] + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + +loc_D6F9: ; CODE XREF: sub_D5E1+20j sub_D5E1+CFj ... + inc [bp+var_2] + add si, 14h + +loc_D6FF: ; CODE XREF: sub_D5E1+16j + cmp [bp+var_2], 40h ; '@' + jl loc_D5FA + mov [bp+var_2], 0 + jmp short loc_D72C +; --------------------------------------------------------------------------- + +loc_D70E: ; CODE XREF: sub_D5E1+14Fj + mov bx, [bp+var_4] + cmp word ptr [bx], 0C190h + jz short loc_D725 + mov bx, [bp+var_4] + mov ax, word_151DA + sub [bx], ax + mov ax, word_151DC + sub [bx+2], ax + +loc_D725: ; CODE XREF: sub_D5E1+134j + inc [bp+var_2] + add [bp+var_4], 4 + +loc_D72C: ; CODE XREF: sub_D5E1+12Bj + cmp [bp+var_2], 8 + jl short loc_D70E + mov [bp+var_2], 0 + jmp loc_D7F8 +; --------------------------------------------------------------------------- + +loc_D73A: ; CODE XREF: sub_D5E1+21Bj + mov ax, [bp+var_2] + mov bx, 2 + cwd + idiv bx + or dx, dx + jnz short loc_D751 + mov ax, word_151DA + sub [di], ax + mov ax, word_151DC + jmp short loc_D763 +; --------------------------------------------------------------------------- + +loc_D751: ; CODE XREF: sub_D5E1+164j + mov ax, word_151DA + cwd + sub ax, dx + sar ax, 1 + sub [di], ax + mov ax, word_151DC + cwd + sub ax, dx + sar ax, 1 + +loc_D763: ; CODE XREF: sub_D5E1+16Ej + sub [di+2], ax + cmp word_151DA, 0 + jnz short loc_D7A5 + mov ax, word_151CE + neg ax + shl ax, 3 + cmp ax, [di] + jge short loc_D783 + mov ax, word_151CE + shl ax, 3 + cmp ax, [di] + jg short loc_D7CA + +loc_D783: ; CODE XREF: sub_D5E1+196j + call sub_1DF8 + cwd + idiv word_151CE + shl dx, 4 + mov ax, word_151CE + shl ax, 3 + sub dx, ax + mov [di], dx + mov ax, word_151D0 + shl ax, 3 + mov [di+2], ax + jmp short loc_D7CA +; --------------------------------------------------------------------------- + +loc_D7A5: ; CODE XREF: sub_D5E1+18Aj + mov ax, word_151CE + neg ax + shl ax, 3 + cmp ax, [di] + jl short loc_D7B6 + mov ax, word_151CE + jmp short loc_D7C5 +; --------------------------------------------------------------------------- + +loc_D7B6: ; CODE XREF: sub_D5E1+1CEj + mov ax, word_151CE + shl ax, 3 + cmp ax, [di] + jg short loc_D7CA + mov ax, word_151CE + neg ax + +loc_D7C5: ; CODE XREF: sub_D5E1+1D3j + shl ax, 3 + mov [di], ax + +loc_D7CA: ; CODE XREF: sub_D5E1+1A0j + ; sub_D5E1+1C2j ... + mov ax, word_151D0 + neg ax + shl ax, 3 + cmp ax, [di+2] + jl short loc_D7DC + mov ax, word_151D0 + jmp short loc_D7EC +; --------------------------------------------------------------------------- + +loc_D7DC: ; CODE XREF: sub_D5E1+1F4j + mov ax, word_151D0 + shl ax, 3 + cmp ax, [di+2] + jg short loc_D7F2 + mov ax, word_151D0 + neg ax + +loc_D7EC: ; CODE XREF: sub_D5E1+1F9j + shl ax, 3 + mov [di+2], ax + +loc_D7F2: ; CODE XREF: sub_D5E1+204j + inc [bp+var_2] + add di, 4 + +loc_D7F8: ; CODE XREF: sub_D5E1+156j + cmp [bp+var_2], 30h ; '0' + jl loc_D73A + mov si, 55E4h + cmp dword ptr [si], 0FFFFC190h + jz short loc_D83F + mov ax, [si+8] + sub ax, word_151DA + cwde + add [si], eax + mov ax, [si+0Ah] + sub ax, word_151DC + cwde + add [si+4], eax + cmp byte ptr [si+13h], 10h + jb short loc_D83F + cmp byte_1183A, 0 + jz short loc_D83F + call sub_D853 + cmp word ptr [si+0Ah], 0B4h ; '' + jge short loc_D83F + inc word ptr [si+0Ah] + +loc_D83F: ; CODE XREF: sub_D5E1+229j + ; sub_D5E1+248j ... + mov ax, word_151E2 + mov bx, 3 + cwd + idiv bx + or dx, dx + jnz short loc_D84F + call sub_D8B6 + +loc_D84F: ; CODE XREF: sub_D5E1+269j + pop di + pop si + leave + retn +sub_D5E1 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D853 proc near ; CODE XREF: sub_D5E1+251p + push bp + mov bp, sp + push si + mov ax, word_1183C + inc word_1183C + imul ax, 14h + add ax, 50E4h + mov si, ax + mov word ptr [si+0Ch], 0 + call sub_1DF8 + and al, 7Fh + mov [si+12h], al + mov word ptr [si+0Eh], 30h ; '0' + push 50D2h + push word_156E4 + push word_156E8 + push 0C0h ; '' + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + movsx eax, word_151D2 + mov [si], eax + movsx eax, word_151D4 + mov [si+4], eax + cmp word_1183C, 40h ; '@' + jl short loc_D8B3 + mov word_1183C, 0 + +loc_D8B3: ; CODE XREF: sub_D853+58j + pop si + pop bp + retn +sub_D853 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D8B6 proc near ; CODE XREF: sub_D5E1+26Bp + push bp + mov bp, sp + mov dx, 6 + jmp short loc_D8E3 +; --------------------------------------------------------------------------- + +loc_D8BE: ; CODE XREF: sub_D8B6+2Fj + mov bx, dx + shl bx, 2 + mov ax, [bx+55F8h] + mov bx, dx + shl bx, 2 + mov [bx+55FCh], ax + mov bx, dx + shl bx, 2 + mov ax, [bx+55FAh] + mov bx, dx + shl bx, 2 + mov [bx+55FEh], ax + dec dx + +loc_D8E3: ; CODE XREF: sub_D8B6+6j + or dx, dx + jge short loc_D8BE + mov ax, word_156E4 + mov word_156F8, ax + mov ax, word_156E8 + mov word_156FA, ax + pop bp + retn +sub_D8B6 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D8F5 proc near ; CODE XREF: sub_E41D:loc_E585p + push bp + mov bp, sp + push si + mov si, 50E4h + xor cx, cx + jmp short loc_D91D +; --------------------------------------------------------------------------- + +loc_D900: ; CODE XREF: sub_D8F5+2Bj + inc word ptr [si+10h] + mov ax, [si+10h] + mov bx, 8 + cwd + idiv bx + or dx, dx + jnz short loc_D919 + cmp word ptr [si+0Ch], 5 + jge short loc_D919 + inc word ptr [si+0Ch] + +loc_D919: ; CODE XREF: sub_D8F5+19j sub_D8F5+1Fj + inc cx + add si, 14h + +loc_D91D: ; CODE XREF: sub_D8F5+9j + cmp cx, 40h ; '@' + jl short loc_D900 + cmp byte ptr [si+13h], 10h + jnb short loc_D92E + mov al, byte_1183A + add [si+13h], al + +loc_D92E: ; CODE XREF: sub_D8F5+31j + pop si + pop bp + retn +sub_D8F5 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_D931 proc near ; CODE XREF: sub_E41D:loc_E594p + ; sub_E41D:loc_E5ABp ... + +var_2 = word ptr -2 + + enter 2, 0 + push si + inc word_1183E + cmp word_1183E, 50h ; 'P' + jl loc_DA31 + cmp word_1183E, 0B0h ; '' + jge short loc_D951 + inc word_151DC + jmp short loc_D9B5 +; --------------------------------------------------------------------------- + +loc_D951: ; CODE XREF: sub_D931+18j + cmp word_1183E, 158h + jge short loc_D964 + mov al, byte_1183A + mov ah, 0 + add word_151DC, ax + jmp short loc_D9B5 +; --------------------------------------------------------------------------- + +loc_D964: ; CODE XREF: sub_D931+26j + cmp byte_11840, 0 + jnz short loc_D991 + mov ax, word_151E2 + mov bx, 10h + cwd + idiv bx + or dx, dx + jnz short loc_D97D + mov ax, 1 + jmp short loc_D97F +; --------------------------------------------------------------------------- + +loc_D97D: ; CODE XREF: sub_D931+45j + xor ax, ax + +loc_D97F: ; CODE XREF: sub_D931+4Aj + add word_151DC, ax + cmp word_151DC, 0B6h ; '' + jle short loc_D9B5 + inc byte_11840 + jmp short loc_D9B5 +; --------------------------------------------------------------------------- + +loc_D991: ; CODE XREF: sub_D931+38j + mov ax, word_151E2 + mov bx, 10h + cwd + idiv bx + or dx, dx + jnz short loc_D9A3 + mov ax, 1 + jmp short loc_D9A5 +; --------------------------------------------------------------------------- + +loc_D9A3: ; CODE XREF: sub_D931+6Bj + xor ax, ax + +loc_D9A5: ; CODE XREF: sub_D931+70j + sub word_151DC, ax + cmp word_151DC, 0B2h ; '' + jge short loc_D9B5 + dec byte_11840 + +loc_D9B5: ; CODE XREF: sub_D931+1Ej sub_D931+31j ... + cmp word_1183E, 0EAh ; 'E + jl short loc_DA31 + cmp word_1183E, 200h + jge short loc_DA04 + mov ax, word_1183E + add ax, 0FF16h + mov si, ax + cmp si, 58h ; 'X' + jle short loc_D9D7 + add ax, 0FFA8h + jmp short loc_D9D9 +; --------------------------------------------------------------------------- + +loc_D9D7: ; CODE XREF: sub_D931+9Fj + xor ax, ax + +loc_D9D9: ; CODE XREF: sub_D931+A4j + mov [bp+var_2], ax + mov ax, 140h + sub ax, [bp+var_2] + push ax + push 0C8h ; '' + mov ax, si + cwd + sub ax, dx + sar ax, 1 + mov dx, 180h + sub dx, ax + push dx + mov ax, si + mov bx, 8 + cwd + idiv bx + add ax, 140h + push ax + call sub_D31F + jmp short loc_DA31 +; --------------------------------------------------------------------------- + +loc_DA04: ; CODE XREF: sub_D931+92j + cmp word_1183E, 3E0h + jl short loc_DA18 + cmp word_1183E, 400h + jg short loc_DA18 + dec word_156EC + +loc_DA18: ; CODE XREF: sub_D931+D9j sub_D931+E1j + cmp word_1183E, 3F0h + jl short loc_DA2C + cmp word_1183E, 410h + jg short loc_DA2C + dec word_151DA + +loc_DA2C: ; CODE XREF: sub_D931+EDj sub_D931+F5j + mov ax, 1 + jmp short loc_DA33 +; --------------------------------------------------------------------------- + +loc_DA31: ; CODE XREF: sub_D931+Ej sub_D931+8Aj ... + xor ax, ax + +loc_DA33: ; CODE XREF: sub_D931+FEj + pop si + leave + retn +sub_D931 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DA36 proc near ; CODE XREF: sub_DAD7+81p + push bp + mov bp, sp + push si + mov ax, word_11842 + imul ax, 14h + add ax, 50E4h + mov si, ax + inc word_11842 + mov ax, word_11842 + cmp ax, 40h ; '@' + jge loc_DAD4 + call sub_1DF8 + mov bx, 18h + cwd + idiv bx + add dx, 8 + mov [si+0Eh], dx + call sub_1DF8 + mov bx, 40h ; '@' + cwd + idiv bx + add dl, 20h ; ' ' + mov [si+12h], dl + call sub_1DF8 + mov bx, 6 + cwd + idiv bx + mov [si+0Ch], dx + call sub_1DF8 + cwd + idiv word_151CE + shl dx, 4 + mov ax, word_151CE + shl ax, 3 + sub dx, ax + movsx eax, dx + mov [si], eax + mov ax, word_151D0 + neg ax + shl ax, 3 + add ax, 0FFC0h + cwde + mov [si+4], eax + cmp byte ptr [si+12h], 40h ; '@' + jnb short loc_DABA + mov al, 0 + jmp short loc_DABC +; --------------------------------------------------------------------------- + +loc_DABA: ; CODE XREF: sub_DA36+7Ej + mov al, 1 + +loc_DABC: ; CODE XREF: sub_DA36+82j + mov [si+13h], al + lea ax, [si+8] + push ax + push large 0 + push word ptr [si+0Eh] + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + +loc_DAD4: ; CODE XREF: sub_DA36+19j + pop si + pop bp + retn +sub_DA36 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DAD7 proc near ; CODE XREF: sub_E41D:loc_E63Ap + ; sub_E41D:loc_E648p ... + push bp + mov bp, sp + push si + push di + mov si, 50E4h + cmp word_151DA, 0 + jge short loc_DAEF + mov al, byte_1183A + mov ah, 0 + add word_151DA, ax + +loc_DAEF: ; CODE XREF: sub_DAD7+Dj + inc word_11844 + cmp word_11844, 20h ; ' ' + jl loc_DBE0 + cmp word_11844, 80h ; '' + jge short loc_DB0B + dec word_151DC + jmp loc_DBC3 +; --------------------------------------------------------------------------- + +loc_DB0B: ; CODE XREF: sub_DAD7+2Bj + cmp word_11844, 134h + jge short loc_DB1F + mov al, byte_1183A + mov ah, 0 + sub word_151DC, ax + jmp loc_DBC3 +; --------------------------------------------------------------------------- + +loc_DB1F: ; CODE XREF: sub_DAD7+3Aj + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D6 + cmp ax, 276h + jge short loc_DB45 + mov ax, word_151D6 + add ax, 4 + push ax + push 0C8h ; '' + push word_151CE + push word_151D0 + call sub_D31F + +loc_DB45: ; CODE XREF: sub_DAD7+57j + mov word_151DE, 0 + mov ax, word_11844 + mov bx, 8 + cwd + idiv bx + or dx, dx + jnz short loc_DB9F + call sub_DA36 + xor di, di + jmp short loc_DB9A +; --------------------------------------------------------------------------- + +loc_DB5F: ; CODE XREF: sub_DAD7+C6j + cmp byte ptr [si+13h], 0 + jnz short loc_DB74 + inc byte ptr [si+12h] + cmp byte ptr [si+12h], 60h ; '`' + jb short loc_DB81 + mov byte ptr [si+13h], 1 + jmp short loc_DB81 +; --------------------------------------------------------------------------- + +loc_DB74: ; CODE XREF: sub_DAD7+8Cj + dec byte ptr [si+12h] + cmp byte ptr [si+12h], 20h ; ' ' + ja short loc_DB81 + mov byte ptr [si+13h], 0 + +loc_DB81: ; CODE XREF: sub_DAD7+95j sub_DAD7+9Bj ... + lea ax, [si+8] + push ax + push large 0 + push word ptr [si+0Eh] + mov al, [si+12h] + mov ah, 0 + push ax + call sub_EC9A + inc di + add si, 14h + +loc_DB9A: ; CODE XREF: sub_DAD7+86j + cmp di, 40h ; '@' + jl short loc_DB5F + +loc_DB9F: ; CODE XREF: sub_DAD7+7Fj + cmp word_11844, 7530h + jl short loc_DBAD + mov word_11844, 7528h + +loc_DBAD: ; CODE XREF: sub_DAD7+CEj + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D6 + cmp ax, 276h + jl short loc_DBC3 + mov ax, 1 + jmp short loc_DBE2 +; --------------------------------------------------------------------------- + +loc_DBC3: ; CODE XREF: sub_DAD7+31j sub_DAD7+45j ... + mov ax, word_11844 + mov bx, 4 + cwd + idiv bx + or dx, dx + jnz short loc_DBE0 + cmp byte_11E9C, 60h ; '`' + jnb short loc_DBE0 + inc byte_11E9C + call far ptr loc_1B8A + +loc_DBE0: ; CODE XREF: sub_DAD7+21j sub_DAD7+F7j ... + xor ax, ax + +loc_DBE2: ; CODE XREF: sub_DAD7+EAj + pop di + pop si + pop bp + retn +sub_DAD7 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DBE6 proc near ; CODE XREF: sub_DCFC+ECp + ; sub_DCFC+140p ... + +var_2C = byte ptr -2Ch +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah +arg_8 = word ptr 0Ch +arg_A = word ptr 0Eh + + enter 2Ch, 0 + push si + push di + mov di, [bp+arg_8] + cmp [bp+arg_2], 0 + jge short loc_DBFF + mov byte_11846, 1 + mov al, 1 + jmp loc_DCF6 +; --------------------------------------------------------------------------- + +loc_DBFF: ; CODE XREF: sub_DBE6+Dj + mov ax, [bp+arg_6] + mov bx, 10h + cwd + idiv bx + add ax, 7 + cmp ax, [bp+arg_2] + jge short loc_DC48 + push large 0C00001h + call sub_F28 + mov ax, [bp+arg_A] + mov bx, 8 + cwd + idiv bx + push ax + push di + mov ax, [bp+arg_A] + add ax, [bp+arg_6] + dec ax + cwd + idiv bx + push ax + mov ax, di + add ax, [bp+arg_4] + dec ax + push ax + call sub_C9E + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + mov al, 2 + jmp loc_DCF6 +; --------------------------------------------------------------------------- + +loc_DC48: ; CODE XREF: sub_DBE6+28j + mov bx, 8 + mov ax, [bp+arg_A] + cwd + idiv bx + mov [bp+arg_A], ax + mov bx, 10h + mov ax, di + cwd + idiv bx + mov di, ax + mov ax, [bp+arg_6] + cwd + idiv bx + mov [bp+arg_6], ax + mov ax, [bp+arg_4] + cwd + idiv bx + mov [bp+arg_4], ax + cmp [bp+arg_0], 0 + jle short loc_DC7D + mov [bp+var_2], 0 + jmp short loc_DC84 +; --------------------------------------------------------------------------- + +loc_DC7D: ; CODE XREF: sub_DBE6+8Ej + mov ax, [bp+arg_6] + dec ax + mov [bp+var_2], ax + +loc_DC84: ; CODE XREF: sub_DBE6+95j + xor si, si + jmp short loc_DCD0 +; --------------------------------------------------------------------------- + +loc_DC88: ; CODE XREF: sub_DBE6+EDj + cmp [bp+arg_2], 7 + jl short loc_DC9A + lea bx, [bp+var_2C] + add bx, [bp+var_2] + mov byte ptr ss:[bx], 98h ; 'E + jmp short loc_DCBA +; --------------------------------------------------------------------------- + +loc_DC9A: ; CODE XREF: sub_DBE6+A6j + cmp [bp+arg_2], 0 + jge short loc_DCAC + lea bx, [bp+var_2C] + add bx, [bp+var_2] + mov byte ptr ss:[bx], 2 + jmp short loc_DCBA +; --------------------------------------------------------------------------- + +loc_DCAC: ; CODE XREF: sub_DBE6+B8j + lea bx, [bp+var_2C] + add bx, [bp+var_2] + mov al, 9Fh ; 'E + sub al, byte ptr [bp+arg_2] + mov ss:[bx], al + +loc_DCBA: ; CODE XREF: sub_DBE6+B2j sub_DBE6+C4j + mov ax, si + add ax, ax + add ax, [bp+arg_A] + cmp ax, 50h ; 'P' + jge short loc_DCD5 + inc si + mov ax, [bp+arg_0] + add [bp+var_2], ax + dec [bp+arg_2] + +loc_DCD0: ; CODE XREF: sub_DBE6+A0j + cmp si, [bp+arg_6] + jl short loc_DC88 + +loc_DCD5: ; CODE XREF: sub_DBE6+DEj + mov [bp+si+var_2C], 0 + xor si, si + jmp short loc_DCEF +; --------------------------------------------------------------------------- + +loc_DCDD: ; CODE XREF: sub_DBE6+10Cj + push [bp+arg_A] + push di + push ss + lea ax, [bp+var_2C] + push ax + push 1 + call sub_125E + inc si + inc di + +loc_DCEF: ; CODE XREF: sub_DBE6+F5j + cmp si, [bp+arg_4] + jle short loc_DCDD + mov al, 0 + +loc_DCF6: ; CODE XREF: sub_DBE6+16j sub_DBE6+5Fj + pop di + pop si + leave + retn 0Ch +sub_DBE6 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DCFC proc near ; CODE XREF: sub_E41D+1B5p + ; sub_E41D+1D3p ... + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + enter 4, 0 + push si + push di + mov di, [bp+arg_4] + mov ax, [bp+arg_2] + shl ax, 4 + add ax, 29FEh + mov si, ax + mov ax, [si+2] + cwd + sub ax, dx + sar ax, 1 + sub [bp+arg_6], ax + mov ax, [si+4] + cwd + sub ax, dx + sar ax, 1 + sub di, ax + cmp word_11848, 1 + jg loc_DDBC + mov ax, [si+2] + mov bx, 10h + cwd + idiv bx + add ax, 7 + mov word_151C4, ax + mov word_151C6, 0 + inc word_11848 + push [bp+arg_6] + push di + push [bp+arg_2] + call sub_EA6E + mov [bp+var_2], 0 + jmp short loc_DDB1 +; --------------------------------------------------------------------------- + +loc_DD5A: ; CODE XREF: sub_DCFC+BBj + mov [bp+var_4], 0 + jmp short loc_DDA2 +; --------------------------------------------------------------------------- + +loc_DD61: ; CODE XREF: sub_DCFC+ACj + mov ax, [bp+arg_6] + mov bx, 8 + cwd + idiv bx + push ax + mov ax, [bp+var_4] + cwd + idiv bx + pop dx + add dx, ax + cmp dx, 50h ; 'P' + jge short loc_DD9E + mov ax, [bp+arg_6] + cwd + idiv bx + push ax + mov ax, [bp+var_4] + cwd + idiv bx + pop dx + add dx, ax + push dx + mov ax, di + mov bx, 10h + cwd + idiv bx + push ax + push ds + push offset unk_1184C + push 5 + call sub_22AA + +loc_DD9E: ; CODE XREF: sub_DCFC+7Bj + add [bp+var_4], 10h + +loc_DDA2: ; CODE XREF: sub_DCFC+63j + mov ax, [si+2] + cmp ax, [bp+var_4] + jge short loc_DD61 + add [bp+var_2], 10h + add di, 10h + +loc_DDB1: ; CODE XREF: sub_DCFC+5Cj + mov ax, [si+4] + cmp ax, [bp+var_2] + jge short loc_DD5A + jmp loc_DE6C +; --------------------------------------------------------------------------- + +loc_DDBC: ; CODE XREF: sub_DCFC+2Ej + cmp word_11848, 3 + jg short loc_DE01 + inc word_151C6 + mov ax, word_151C6 + mov bx, 4 + cwd + idiv bx + or dx, dx + jnz short loc_DDD8 + dec word_151C4 + +loc_DDD8: ; CODE XREF: sub_DCFC+D6j + push [bp+arg_6] + push di + push word ptr [si+2] + push word ptr [si+4] + push word_151C4 + push 1 + call sub_DBE6 + cmp al, 1 + jnz short loc_DE6C + inc word_11848 + mov word_151C4, 0 + mov word_151C6, 0 + jmp short loc_DE6C +; --------------------------------------------------------------------------- + +loc_DE01: ; CODE XREF: sub_DCFC+C5j + mov ax, word_151E0 + cmp ax, [bp+arg_0] + jl short loc_DE6C + cmp [bp+arg_0], 0F9Ch + jz short loc_DE6C + cmp word_11848, 4 + jnz short loc_DE49 + inc word_151C6 + mov ax, word_151C6 + mov bx, 4 + cwd + idiv bx + or dx, dx + jnz short loc_DE2C + inc word_151C4 + +loc_DE2C: ; CODE XREF: sub_DCFC+12Aj + push [bp+arg_6] + push di + push word ptr [si+2] + push word ptr [si+4] + push word_151C4 + push 0FFFFh + call sub_DBE6 + cmp al, 2 + jnz short loc_DE6C + inc word_11848 + jmp short loc_DE6C +; --------------------------------------------------------------------------- + +loc_DE49: ; CODE XREF: sub_DCFC+119j + push [bp+arg_6] + push di + push word ptr [si+2] + push word ptr [si+4] + push large 80FFFFh + call sub_DBE6 + mov word_11848, 0 + mov byte_11846, 1 + mov ax, 1 + jmp short loc_DE6E +; --------------------------------------------------------------------------- + +loc_DE6C: ; CODE XREF: sub_DCFC+BDj sub_DCFC+F1j ... + xor ax, ax + +loc_DE6E: ; CODE XREF: sub_DCFC+16Ej + pop di + pop si + leave + retn 8 +sub_DCFC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DE74 proc near ; CODE XREF: sub_E41D+1A3p + ; sub_E41D+1F8p + +var_4 = word ptr -4 +var_2 = word ptr -2 +arg_0 = word ptr 4 +arg_2 = word ptr 6 +arg_4 = word ptr 8 +arg_6 = word ptr 0Ah + + enter 4, 0 + push si + push di + mov di, [bp+arg_4] + mov ax, [bp+arg_2] + shl ax, 4 + add ax, 29FEh + mov si, ax + mov ax, [si+2] + cwd + sub ax, dx + sar ax, 1 + sub [bp+arg_6], ax + mov ax, [si+4] + cwd + sub ax, dx + sar ax, 1 + sub di, ax + cmp word_1184A, 1 + jg loc_DF34 + mov ax, [si+2] + mov bx, 10h + cwd + idiv bx + add ax, 7 + mov word_151C8, ax + mov word_151CA, 0 + inc word_1184A + push [bp+arg_6] + push di + push [bp+arg_2] + call sub_EA6E + mov [bp+var_2], 0 + jmp short loc_DF29 +; --------------------------------------------------------------------------- + +loc_DED2: ; CODE XREF: sub_DE74+BBj + mov [bp+var_4], 0 + jmp short loc_DF1A +; --------------------------------------------------------------------------- + +loc_DED9: ; CODE XREF: sub_DE74+ACj + mov ax, [bp+arg_6] + mov bx, 8 + cwd + idiv bx + push ax + mov ax, [bp+var_4] + cwd + idiv bx + pop dx + add dx, ax + cmp dx, 50h ; 'P' + jge short loc_DF16 + mov ax, [bp+arg_6] + cwd + idiv bx + push ax + mov ax, [bp+var_4] + cwd + idiv bx + pop dx + add dx, ax + push dx + mov ax, di + mov bx, 10h + cwd + idiv bx + push ax + push ds + push offset unk_1184F + push 5 + call sub_22AA + +loc_DF16: ; CODE XREF: sub_DE74+7Bj + add [bp+var_4], 10h + +loc_DF1A: ; CODE XREF: sub_DE74+63j + mov ax, [si+2] + cmp ax, [bp+var_4] + jge short loc_DED9 + add [bp+var_2], 10h + add di, 10h + +loc_DF29: ; CODE XREF: sub_DE74+5Cj + mov ax, [si+4] + cmp ax, [bp+var_2] + jge short loc_DED2 + jmp loc_DFE4 +; --------------------------------------------------------------------------- + +loc_DF34: ; CODE XREF: sub_DE74+2Ej + cmp word_1184A, 3 + jg short loc_DF79 + inc word_151CA + mov ax, word_151CA + mov bx, 4 + cwd + idiv bx + or dx, dx + jnz short loc_DF50 + dec word_151C8 + +loc_DF50: ; CODE XREF: sub_DE74+D6j + push [bp+arg_6] + push di + push word ptr [si+2] + push word ptr [si+4] + push word_151C8 + push 1 + call sub_DBE6 + cmp al, 1 + jnz short loc_DFE4 + inc word_1184A + mov word_151C8, 0 + mov word_151CA, 0 + jmp short loc_DFE4 +; --------------------------------------------------------------------------- + +loc_DF79: ; CODE XREF: sub_DE74+C5j + mov ax, word_151E0 + cmp ax, [bp+arg_0] + jl short loc_DFE4 + cmp [bp+arg_0], 0F9Ch + jz short loc_DFE4 + cmp word_1184A, 4 + jnz short loc_DFC1 + inc word_151CA + mov ax, word_151CA + mov bx, 4 + cwd + idiv bx + or dx, dx + jnz short loc_DFA4 + inc word_151C8 + +loc_DFA4: ; CODE XREF: sub_DE74+12Aj + push [bp+arg_6] + push di + push word ptr [si+2] + push word ptr [si+4] + push word_151C8 + push 0FFFFh + call sub_DBE6 + cmp al, 2 + jnz short loc_DFE4 + inc word_1184A + jmp short loc_DFE4 +; --------------------------------------------------------------------------- + +loc_DFC1: ; CODE XREF: sub_DE74+119j + push [bp+arg_6] + push di + push word ptr [si+2] + push word ptr [si+4] + push large 80FFFFh + call sub_DBE6 + mov word_1184A, 0 + mov byte_11846, 1 + mov ax, 1 + jmp short loc_DFE6 +; --------------------------------------------------------------------------- + +loc_DFE4: ; CODE XREF: sub_DE74+BDj sub_DE74+F1j ... + xor ax, ax + +loc_DFE6: ; CODE XREF: sub_DE74+16Ej + pop di + pop si + leave + retn 8 +sub_DE74 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_DFEC proc near ; CODE XREF: sub_E349+6p + +var_A = word ptr -0Ah +var_8 = word ptr -8 +var_6 = word ptr -6 +var_4 = word ptr -4 +var_2 = word ptr -2 + + enter 0Ah, 0 + push si + push di + mov si, 55E4h + mov [bp+var_8], 5614h + mov [bp+var_A], 5618h + push large 0C00000h + call sub_F28 + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D6 + sub dx, ax + push dx + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D8 + sub dx, ax + push dx + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D6 + dec ax + push ax + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D8 + dec ax + push ax + call sub_BCE + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + xor di, di + jmp short loc_E098 +; --------------------------------------------------------------------------- + +loc_E053: ; CODE XREF: sub_DFEC+AFj + mov bx, [bp+var_A] + mov ax, [bx] + mov bx, 10h + cwd + idiv bx + add ax, word_151D6 + add ax, 0FFFCh + mov [bp+var_2], ax + mov bx, [bp+var_A] + mov ax, [bx+2] + mov bx, 10h + cwd + idiv bx + add ax, word_151D8 + add ax, 0FFFCh + mov [bp+var_4], ax + push [bp+var_2] + push ax + mov ax, di + mov bx, 2 + cwd + idiv bx + add dx, 6 + push dx + call sub_2DB6 + inc di + add [bp+var_A], 4 + +loc_E098: ; CODE XREF: sub_DFEC+65j + cmp di, 30h ; '0' + jl short loc_E053 + xor di, di + mov [bp+var_6], 6 + jmp short loc_E0FB +; --------------------------------------------------------------------------- + +loc_E0A6: ; CODE XREF: sub_DFEC+112j + mov bx, [bp+var_8] + cmp word ptr [bx], 0C190h + jz short loc_E0F6 + mov bx, [bp+var_8] + mov ax, [bx] + mov bx, 10h + cwd + idiv bx + add ax, word_151D6 + mov [bp+var_2], ax + mov bx, [bp+var_8] + mov ax, [bx+2] + mov bx, 10h + cwd + idiv bx + add ax, word_151D8 + mov [bp+var_4], ax + push 0C0h ; '' + mov ax, [bp+var_6] + inc [bp+var_6] + push ax + call sub_F28 + push [bp+var_2] + push [bp+var_4] + push 10h + call sub_D36 + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + +loc_E0F6: ; CODE XREF: sub_DFEC+C1j + inc di + sub [bp+var_8], 4 + +loc_E0FB: ; CODE XREF: sub_DFEC+B8j + cmp di, 8 + jl short loc_E0A6 + cmp dword ptr [si], 0FFFFC190h + jz loc_E18B + mov eax, [si] + mov ebx, 10h + cdq + idiv ebx + add ax, word_151D6 + add ax, 0FFF0h + mov [bp+var_2], ax + mov eax, [si+4] + cdq + idiv ebx + add ax, word_151D8 + add ax, 0FFF0h + mov [bp+var_4], ax + cmp byte ptr [si+13h], 10h + jb short loc_E161 + mov al, byte_151CC + mov ah, 0 + mov bx, 4 + cwd + idiv bx + cwd + idiv bx + add dx, 8 + mov di, dx + push [bp+var_2] + push [bp+var_4] + push dx + call far ptr loc_2974 + inc byte_151CC + jmp short loc_E18B +; --------------------------------------------------------------------------- + +loc_E161: ; CODE XREF: sub_DFEC+14Ej + push large 0C0000Fh + call sub_F28 + mov ax, [bp+var_2] + add ax, 10h + push ax + mov ax, [bp+var_4] + add ax, 10h + push ax + mov al, [si+13h] + mov ah, 0 + push ax + call sub_D36 + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + +loc_E18B: ; CODE XREF: sub_DFEC+11Bj + ; sub_DFEC+173j + sub si, 14h + xor di, di + jmp loc_E21D +; --------------------------------------------------------------------------- + +loc_E193: ; CODE XREF: sub_DFEC+234j + cmp dword ptr [si], 0FFFFC190h + jz short loc_E219 + mov ax, word_151CE + neg ax + shl ax, 3 + add ax, 0FFC0h + cwde + cmp eax, [si] + jge short loc_E219 + mov ax, word_151CE + shl ax, 3 + add ax, 40h ; '@' + cwde + cmp eax, [si] + jle short loc_E219 + mov ax, word_151D0 + neg ax + shl ax, 3 + add ax, 0FFC0h + cwde + cmp eax, [si+4] + jge short loc_E219 + mov ax, word_151D0 + shl ax, 3 + add ax, 40h ; '@' + cwde + cmp eax, [si+4] + jle short loc_E219 + mov eax, [si] + mov ebx, 10h + cdq + idiv ebx + add ax, word_151D6 + add ax, 0FFFCh + mov [bp+var_2], ax + mov eax, [si+4] + cdq + idiv ebx + add ax, word_151D8 + add ax, 0FFFCh + mov [bp+var_4], ax + push [bp+var_2] + push ax + push word ptr [si+0Ch] + call sub_2DB6 + +loc_E219: ; CODE XREF: sub_DFEC+1AEj + ; sub_DFEC+1C0j ... + inc di + sub si, 14h + +loc_E21D: ; CODE XREF: sub_DFEC+1A4j + cmp di, 40h ; '@' + jl loc_E193 + push large 0C00001h + call sub_F28 + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D6 + sub dx, ax + add dx, 0FFF8h + push dx + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D8 + sub dx, ax + push dx + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D6 + sub dx, ax + dec dx + push dx + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D8 + dec ax + push ax + call sub_BCE + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D6 + push ax + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D8 + sub dx, ax + push dx + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D6 + add ax, 7 + push ax + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D8 + dec ax + push ax + call sub_BCE + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D6 + sub dx, ax + add dx, 0FFF8h + push dx + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D8 + sub dx, ax + add dx, 0FFF8h + push dx + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D6 + add ax, 7 + push ax + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D8 + sub dx, ax + dec dx + push dx + call sub_BCE + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + mov dx, word_151D6 + sub dx, ax + add dx, 0FFF8h + push dx + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D8 + push ax + mov ax, word_151CE + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D6 + add ax, 7 + push ax + mov ax, word_151D0 + cwd + sub ax, dx + sar ax, 1 + add ax, word_151D8 + add ax, 7 + push ax + call sub_BCE + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + pop di + pop si + leave + retn +sub_DFEC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E349 proc near ; CODE XREF: sub_E41D:loc_E573p + ; sub_E41D+16Bp ... + push bp + mov bp, sp + call sub_D5E1 + call sub_DFEC + push 1 + call sub_F282 + mov dx, 0A6h ; '' + mov al, byte_1183A + out dx, al ; Interrupt Controller #2, 8259A + mov al, 1 + sub al, byte_1183A + mov byte_1183A, al + mov dx, 0A4h ; '' + out dx, al ; Interrupt Controller #2, 8259A + cmp byte_11846, 0 + jz short loc_E37E + call sub_2298 + mov byte_11846, 0 + +loc_E37E: ; CODE XREF: sub_E349+29j + inc word_151E2 + call sub_F23C + mov word_151E0, ax + cmp word_151E0, 0 + jge short loc_E39D + mov ax, word_151E2 + mov bx, 16h + cwd + idiv bx + mov word_151E0, ax + +loc_E39D: ; CODE XREF: sub_E349+46j + pop bp + retn +sub_E349 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E39F proc near ; CODE XREF: sub_E41D+54p + ; sub_E41D+2EDp + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + push ds + push ds + pop es + assume es:dseg + mov ax, 0E000h + mov ds, ax + assume ds:nothing + xor si, si + mov di, [bp+arg_0] + add di, 56D8h + mov ax, 160h + +loc_E3B8: ; CODE XREF: sub_E39F+22j + mov cx, 14h + rep movsw + add si, 28h ; '(' + dec ax + jnz short loc_E3B8 + pop ds + assume ds:dseg + pop di + pop si + pop bp + retn 2 +sub_E39F endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E3CA proc near ; CODE XREF: sub_E41D+39Bp + +arg_0 = word ptr 4 + + push bp + mov bp, sp + push si + push di + push large 800001h + call sub_F28 + mov ax, 0A800h + mov es, ax + assume es:nothing + xor di, di + mov dx, 160h + +loc_E3E4: ; CODE XREF: sub_E3CA+23j + mov cx, 14h + rep stosw + add di, 28h ; '(' + dec dx + jnz short loc_E3E4 + push large 0C0000Dh + call sub_F28 + xor di, di + mov si, [bp+arg_0] + add si, 56D8h + mov dx, 160h + +loc_E406: ; CODE XREF: sub_E3CA+45j + mov cx, 14h + rep movsw + add di, 28h ; '(' + dec dx + jnz short loc_E406 + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + pop di + pop si + pop bp + retn 2 +sub_E3CA endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E41D proc near ; CODE XREF: _main+65p + +var_4 = word ptr -4 +var_2 = word ptr -2 + + enter 4, 0 + push si + push di + mov word_116E2, 20h ; ' ' + mov word_116E4, 0Dh + mov word_116E6, 0Dh + mov word_116E8, 10h + mov word_10338, 0 + call far ptr loc_1B8A + push large 0C00001h + call sub_F28 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + push large 0 + push large 4F018Fh + call sub_C9E + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + call sub_D21D + push 3700h + call sub_E39F + push large 0C00001h + call sub_F28 + push large 0 + push large 4F018Fh + call sub_C9E + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + push large 0 + push large 4F018Fh + call sub_C9E + mov dx, 7Ch ; '|' + mov al, 0 + out dx, al + push ds + push offset aStaff ; "staff" + push 600h + call sub_ED60 + push 0 + call sub_EE18 + push 0 + push ds + push offset aStf00_cdg ; "stf00.cdg" + call sub_F356 + push 1 + push ds + push offset aStf01_cdg ; "stf01.cdg" + call sub_F356 + push 2 + push ds + push offset aStf02_cdg ; "stf02.cdg" + call sub_F356 + push 3 + push ds + push offset aStf03_cdg ; "stf03.cdg" + call sub_F356 + push 4 + push ds + push offset aStf04_cdg ; "stf04.cdg" + call sub_F356 + push 5 + push ds + push offset aStf05_cdg ; "stf05.cdg" + call sub_F356 + push 6 + push ds + push offset aStf06_cdg ; "stf06.cdg" + call sub_F356 + push 7 + push ds + push offset aStf07_cdg ; "stf07.cdg" + call sub_F356 + push 8 + push ds + push offset aStf08_cdg ; "stf08.cdg" + call sub_F356 + push 9 + push ds + push offset aStf09_cdg ; "stf09.cdg" + call sub_F356 + push 0Ah + push ds + push offset aStf10_cdg ; "stf10.cdg" + call sub_F356 + push ds + push offset aStf01_bft ; "stf01.bft" + call sub_2894 + push ds + push offset aStf00_bft ; "stf00.bft" + call sub_2894 + xor si, si + jmp short loc_E550 +; --------------------------------------------------------------------------- + +loc_E549: ; CODE XREF: sub_E41D+136j + push si + call sub_2D1A + inc si + +loc_E550: ; CODE XREF: sub_E41D+12Aj + cmp si, 8 + jl short loc_E549 + mov byte_11E9C, 30h ; '0' + call sub_D387 + xor si, si + mov word_151E2, 0 + +loc_E565: ; CODE XREF: sub_E41D+15Fj + cmp si, 64h ; 'd' + jg short loc_E573 + mov word_10338, si + call far ptr loc_1B8A + +loc_E573: ; CODE XREF: sub_E41D+14Bj + call sub_E349 + inc si + cmp word_151E0, 1Eh + jl short loc_E565 + call sub_D49D + xor si, si + jmp short loc_E58C +; --------------------------------------------------------------------------- + +loc_E585: ; CODE XREF: sub_E41D+172j + call sub_D8F5 + call sub_E349 + inc si + +loc_E58C: ; CODE XREF: sub_E41D+166j + cmp si, 20h ; ' ' + jl short loc_E585 + call sub_D509 + +loc_E594: ; CODE XREF: sub_E41D+181j + ; sub_E41D+188j + call sub_D931 + mov si, ax + call sub_E349 + or si, si + jz short loc_E594 + cmp word_151E0, 30h ; '0' + jl short loc_E594 + xor si, si + xor di, di + +loc_E5AB: ; CODE XREF: sub_E41D+1C0j + call sub_D931 + cmp si, 80h ; '' + jle short loc_E5C9 + push large 21000F0h + push large 1004Ch + call sub_DE74 + or ax, ax + jz short loc_E5C9 + xor si, si + +loc_E5C9: ; CODE XREF: sub_E41D+195j + ; sub_E41D+1A8j + push large 1D000C0h + push large 4Ch ; 'L' + call sub_DCFC + mov di, ax + call sub_E349 + inc si + or di, di + jz short loc_E5AB + xor di, di + +loc_E5E1: ; CODE XREF: sub_E41D+1DDj + call sub_D931 + push large 1D000C8h + push large 2005Ch + call sub_DCFC + mov di, ax + call sub_E349 + or di, di + jz short loc_E5E1 + xor si, si + xor di, di + +loc_E600: ; CODE XREF: sub_E41D+218j + call sub_D931 + cmp si, 100h + jle short loc_E61E + push large 1D000E0h + push large 40078h + call sub_DE74 + or ax, ax + jz short loc_E61E + xor si, si + +loc_E61E: ; CODE XREF: sub_E41D+1EAj + ; sub_E41D+1FDj + push large 1D000B0h + push large 30078h + call sub_DCFC + mov di, ax + call sub_E349 + inc si + or di, di + jz short loc_E600 + call sub_D531 + +loc_E63A: ; CODE XREF: sub_E41D+227j + call sub_DAD7 + mov si, ax + call sub_E349 + or si, si + jz short loc_E63A + xor di, di + +loc_E648: ; CODE XREF: sub_E41D+244j + call sub_DAD7 + push large 0B000C8h + push large 500ACh + call sub_DCFC + mov di, ax + call sub_E349 + or di, di + jz short loc_E648 + +loc_E663: ; CODE XREF: sub_E41D+25Fj + call sub_DAD7 + push large 0B000C8h + push large 600BCh + call sub_DCFC + mov di, ax + call sub_E349 + or di, di + jz short loc_E663 + +loc_E67E: ; CODE XREF: sub_E41D+27Aj + call sub_DAD7 + push large 0B000C8h + push large 700CCh + call sub_DCFC + mov di, ax + call sub_E349 + or di, di + jz short loc_E67E + +loc_E699: ; CODE XREF: sub_E41D+295j + call sub_DAD7 + push large 0B000C8h + push large 800DCh + call sub_DCFC + mov di, ax + call sub_E349 + or di, di + jz short loc_E699 + +loc_E6B4: ; CODE XREF: sub_E41D+2B0j + call sub_DAD7 + push large 0B000C8h + push large 900ECh + call sub_DCFC + mov di, ax + call sub_E349 + or di, di + jz short loc_E6B4 + xor si, si + mov [bp+var_2], 0 + mov [bp+var_4], 0 + +loc_E6DB: ; CODE XREF: sub_E41D+3A1j + call sub_F202 + cmp si, 100h + jz short loc_E6EC + cmp si, 101h + jnz short loc_E6F1 + +loc_E6EC: ; CODE XREF: sub_E41D+2C7j + call sub_CA9B + jmp short loc_E70D +; --------------------------------------------------------------------------- + +loc_E6F1: ; CODE XREF: sub_E41D+2CDj + cmp si, 140h + jz short loc_E6FD + cmp si, 141h + jnz short loc_E702 + +loc_E6FD: ; CODE XREF: sub_E41D+2D8j + call sub_D16F + jmp short loc_E70D +; --------------------------------------------------------------------------- + +loc_E702: ; CODE XREF: sub_E41D+2DEj + cmp si, 15Eh + jnz short loc_E70D + push 0 + call sub_E39F + +loc_E70D: ; CODE XREF: sub_E41D+2D2j + ; sub_E41D+2E3j ... + call sub_DAD7 + push large 0B00170h + push large 0A0F9Ch + call sub_DCFC + inc si + cmp si, 190h + jl loc_E7BB + test byte ptr word_12AFA+1, 10h + jnz short loc_E757 + test byte ptr word_12AFA, 10h + jnz short loc_E757 + cmp [bp+var_4], 0 + jnz short loc_E781 + test byte ptr word_12AFA, 20h + jnz short loc_E74A + test byte ptr word_12AFA+1, 20h + jz short loc_E75C + +loc_E74A: ; CODE XREF: sub_E41D+324j + cmp [bp+var_2], 0 + jnz short loc_E757 + mov [bp+var_4], 1 + jmp short loc_E75C +; --------------------------------------------------------------------------- + +loc_E757: ; CODE XREF: sub_E41D+310j + ; sub_E41D+317j ... + call sub_E349 + jmp short loc_E7C1 +; --------------------------------------------------------------------------- + +loc_E75C: ; CODE XREF: sub_E41D+32Bj + ; sub_E41D+338j + test byte ptr word_12AFA, 2 + jz short loc_E76E + cmp [bp+var_2], 0 + jnz short loc_E76E + mov [bp+var_4], 1 + +loc_E76E: ; CODE XREF: sub_E41D+344j + ; sub_E41D+34Aj + test byte ptr word_12AFA, 1 + jz short loc_E781 + cmp [bp+var_2], 3700h + jnz short loc_E781 + mov [bp+var_4], 2 + +loc_E781: ; CODE XREF: sub_E41D+31Dj + ; sub_E41D+356j ... + cmp [bp+var_4], 1 + jnz short loc_E79A + add [bp+var_2], 140h + cmp [bp+var_2], 3700h + jbe short loc_E7B5 + mov [bp+var_2], 3700h + jmp short loc_E7B0 +; --------------------------------------------------------------------------- + +loc_E79A: ; CODE XREF: sub_E41D+368j + cmp [bp+var_4], 2 + jnz short loc_E7BB + sub [bp+var_2], 140h + cmp [bp+var_2], 0 + jge short loc_E7B5 + mov [bp+var_2], 0 + +loc_E7B0: ; CODE XREF: sub_E41D+37Bj + mov [bp+var_4], 0 + +loc_E7B5: ; CODE XREF: sub_E41D+374j + ; sub_E41D+38Cj + push [bp+var_2] + call sub_E3CA + +loc_E7BB: ; CODE XREF: sub_E41D+307j + ; sub_E41D+381j + call sub_E349 + jmp loc_E6DB +; --------------------------------------------------------------------------- + +loc_E7C1: ; CODE XREF: sub_E41D+33Dj + push 204h + call sub_EE18 + mov si, 64h ; 'd' + +loc_E7CC: ; CODE XREF: sub_E41D+3C1j + mov word_10338, si + call far ptr loc_1B8A + call sub_DAD7 + call sub_E349 + dec si + or si, si + jg short loc_E7CC + call sub_F3EE + call sub_2730 + push large 0 + push large 27F018Fh + call sub_DCC + pop di + pop si + leave + retn +sub_E41D endp + +seg001 ends + +; --------------------------------------------------------------------------- +; =========================================================================== + +; Segment type: Pure code +seg002 segment byte public 'CODE' use16 + assume cs:seg002 + ;org 0Ch + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + push di + xor ax, ax + mov di, 25DEh + xor dl, dl + jmp short loc_E811 +; --------------------------------------------------------------------------- + +loc_E806: ; CODE XREF: seg002:0026j + xor dl, dl + mov cx, 8 + +loc_E80B: ; CODE XREF: seg002:001Fj + rol al, 1 + rcr dl, 1 + loop loc_E80B + +loc_E811: ; CODE XREF: seg002:0014j + mov [di], dl + inc di + inc al + jnz short loc_E806 + pop di + retf + +; =============== S U B R O U T I N E ======================================= + + +sub_E81A proc far ; CODE XREF: sub_E878+Dp + xor ax, ax + mov byte_127DE, 60h ; '`' + mov byte_107DD, al + mov byte_107DC, al + mov byte_107DB, al + mov es, ax + assume es:seg000 + les bx, dword ptr es:loc_17E+2 + assume es:nothing + cmp byte ptr es:[bx+2], 50h ; 'P' + jnz short locret_E847 + cmp byte ptr es:[bx+3], 4Dh ; 'M' + jnz short locret_E847 + cmp byte ptr es:[bx+4], 44h ; 'D' + jnz short locret_E847 + inc ax + +locret_E847: ; CODE XREF: sub_E81A+1Cj sub_E81A+23j ... + retf +sub_E81A endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_E848 proc far ; CODE XREF: sub_E878+17p + xor ax, ax + mov es, ax + assume es:seg000 + les bx, dword ptr es:loc_182+2 + assume es:nothing + cmp byte ptr es:[bx+2], 4Dh ; 'M' + jnz short loc_E874 + cmp byte ptr es:[bx+3], 4Dh ; 'M' + jnz short loc_E874 + cmp byte ptr es:[bx+4], 44h ; 'D' + jnz short loc_E874 + mov byte_127DE, 61h ; 'a' + mov byte_107DD, 1 + mov ax, 1 + retf +; --------------------------------------------------------------------------- + +loc_E874: ; CODE XREF: sub_E848+Ej sub_E848+15j ... + xor ax, ax + retf +sub_E848 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_E878 proc far ; CODE XREF: _main+2DP + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + push si + push di + mov si, [bp+arg_2] + mov di, [bp+arg_0] + nop + push cs + call near ptr sub_E81A + cmp si, 3 + jnz short loc_E892 + nop + push cs + call near ptr sub_E848 + +loc_E892: ; CODE XREF: sub_E878+13j + mov ah, 9 + int 60h + cmp al, 0FFh + jnz short loc_E8A1 + mov byte_107DC, 0 + jmp short loc_E8B1 +; --------------------------------------------------------------------------- + +loc_E8A1: ; CODE XREF: sub_E878+20j + or al, al + jnz short loc_E8AC + mov byte_107DC, 1 + jmp short loc_E8B1 +; --------------------------------------------------------------------------- + +loc_E8AC: ; CODE XREF: sub_E878+2Bj + mov byte_107DC, 2 + +loc_E8B1: ; CODE XREF: sub_E878+27j sub_E878+32j + cmp di, 1 + jnz short loc_E8C9 + cmp byte_107DC, 0 + jz short loc_E8C2 + mov ax, 1 + jmp short loc_E8C4 +; --------------------------------------------------------------------------- + +loc_E8C2: ; CODE XREF: sub_E878+43j + xor ax, ax + +loc_E8C4: ; CODE XREF: sub_E878+48j + mov byte_107DB, al + jmp short loc_E8DA +; --------------------------------------------------------------------------- + +loc_E8C9: ; CODE XREF: sub_E878+3Cj + cmp di, 2 + jnz short loc_E8D5 + mov byte_107DB, 2 + jmp short loc_E8DA +; --------------------------------------------------------------------------- + +loc_E8D5: ; CODE XREF: sub_E878+54j + mov byte_107DB, 0 + +loc_E8DA: ; CODE XREF: sub_E878+4Fj sub_E878+5Bj + or si, si + jnz short loc_E8E5 + mov byte_107DC, 0 + jmp short loc_E909 +; --------------------------------------------------------------------------- + +loc_E8E5: ; CODE XREF: sub_E878+64j + cmp si, 3 + jnz short loc_E8F8 + cmp byte_107DD, 0 + jz short loc_E8F8 + mov byte_107DC, 3 + jmp short loc_E909 +; --------------------------------------------------------------------------- + +loc_E8F8: ; CODE XREF: sub_E878+70j sub_E878+77j + cmp si, 1 + jnz short loc_E909 + cmp byte_107DC, 0 + jz short loc_E909 + mov byte_107DC, 1 + +loc_E909: ; CODE XREF: sub_E878+6Bj sub_E878+7Ej ... + mov al, byte_107DC + mov ah, 0 + pop di + pop si + pop bp + retf 4 +sub_E878 endp + +; --------------------------------------------------------------------------- + +loc_E914: ; CODE XREF: sub_AFD6+1ACP + ; sub_B1B5+4BP ... + push bp + mov bp, sp + push si + push di + push ds + mov dx, [bp+0Ah] + mov al, 0C0h ; '' + pushf + cli + out 7Ch, al + popf + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + shr dx, 1 + sbb al, al + out 7Eh, al + mov ax, 0A800h + mov es, ax + assume es:nothing + mov dx, [bp+0Ch] + shl dx, 6 + mov di, dx + shr dx, 2 + add di, dx + mov cx, [bp+0Eh] + mov al, 0Bh + out 68h, al + mov bx, word_107BC + add bx, bx + cmp bx, 8 + jb short loc_E970 + cmp bx, 10h + jnb short loc_E970 + mov ax, [bx+68Ch] + mov cs:word_EA6B, ax + mov bx, 8 + +loc_E970: ; CODE XREF: seg002:016Ej seg002:0173j + mov ax, [bx+680h] + mov cs:word_E9D3, ax + mov ax, [bx+68Ah] + mov cs:word_EA25, ax + mov ax, word_107BE + mov cs:word_E9F2, ax + mov cs:word_EA39, ax + push ds + pop fs + assume fs:dseg + lds si, [bp+6] + lodsb + or al, al + jz short loc_E9FD + +loc_E996: ; CODE XREF: seg002:020Bj + mov dx, cx + shr dx, 3 + add di, dx + and cx, 7 + mov ah, 9 + test al, 0E0h + jns short loc_EA0F + jp short loc_EA0C + mov ah, al + lodsb + shl ah, 1 + cmp al, 9Fh ; 'E + jnb short loc_E9B6 + cmp al, 80h ; '' + adc ax, 0FEDFh + +loc_E9B6: ; CODE XREF: seg002:01BFj + sbb al, 0FEh ; '' + and ax, 7F7Fh + out 0A1h, al ; Interrupt Controller #2, 8259A + mov al, ah + out 0A3h, al ; Interrupt Controller #2, 8259A + nop + mov al, ch + or al, 20h + out 0A5h, al ; Interrupt Controller #2, 8259A + in al, 0A9h ; Interrupt Controller #2, 8259A + mov ah, al + mov al, ch + out 0A5h, al ; Interrupt Controller #2, 8259A + in al, 0A9h ; Interrupt Controller #2, 8259A +; --------------------------------------------------------------------------- + db 0E8h +word_E9D3 dw 78h ; DATA XREF: seg002:0184w + db 8Ah, 0F8h, 0B3h, 0, 0D3h, 0E8h, 0D3h, 0EBh, 86h, 0E0h + db 0ABh, 26h, 88h, 1Dh, 83h, 0C7h, 4Eh, 0FEh, 0C5h, 80h + db 0FDh, 10h, 72h, 0D5h, 81h, 0EFh, 0, 5, 0BAh +word_E9F2 dw 1234h ; DATA XREF: seg002:0193w +; --------------------------------------------------------------------------- + +loc_E9F4: ; CODE XREF: seg002:024Dj + xor ch, ch + add cx, dx + lodsb + or al, al + jnz short loc_E996 + +loc_E9FD: ; CODE XREF: seg002:01A4j + mov al, 0Ah + out 68h, al + xor al, al + out 7Ch, al + pop ds + pop di + pop si + pop bp + retf 0Ah +; --------------------------------------------------------------------------- + +loc_EA0C: ; CODE XREF: seg002:01B6j + add ax, 80h ; '' + +loc_EA0F: ; CODE XREF: seg002:01B4j + cmp al, 20h ; ' ' + jz short near ptr byte_EA38 + out 0A1h, al ; Interrupt Controller #2, 8259A + mov al, ah + out 0A3h, al ; Interrupt Controller #2, 8259A + nop + mov al, ch + or al, 20h + out 0A5h, al ; Interrupt Controller #2, 8259A + in al, 0A9h ; Interrupt Controller #2, 8259A + xor ah, ah +; --------------------------------------------------------------------------- + db 0E8h +word_EA25 dw 26h ; DATA XREF: seg002:018Cw + db 0D3h, 0C8h, 0ABh, 83h, 0C7h, 4Eh, 0FEh, 0C5h, 80h, 0FDh + db 10h, 72h, 0E6h, 81h, 0EFh, 0, 5 +byte_EA38 db 0BAh ; CODE XREF: seg002:0221j +word_EA39 dw 1234h ; DATA XREF: seg002:0197w +; --------------------------------------------------------------------------- + shr dx, 1 + jmp short loc_E9F4 +; --------------------------------------------------------------------------- + nop + mov dx, ax + add dx, dx + or ax, dx + retn +; --------------------------------------------------------------------------- + mov dx, ax + shl dx, 1 + or ax, dx + +; =============== S U B R O U T I N E ======================================= + + +sub_EA4D proc near + mov dx, ax + mov bp, ax + add bp, bp + or ax, bp + xor dx, ax + add dx, dx + not dx + and ax, dx + retn +sub_EA4D endp + +; --------------------------------------------------------------------------- + db 0E8h, 0ECh, 0FFh, 8Ah, 0DDh, 83h, 0E3h, 2 dup(3), 0DBh + db 64h, 23h, 87h +word_EA6B dw 1234h ; DATA XREF: seg002:0179w +; --------------------------------------------------------------------------- + retn + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EA6E proc far ; CODE XREF: sub_DCFC+52P sub_DE74+52P + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + push ds + mov ax, [bp+arg_2] + mov bx, ax + shl ax, 2 + add ax, bx + add ax, 0A800h + mov es, ax + assume es:nothing + add ax, 3800h + push ax + sub ax, 2800h + push ax + sub ax, 800h + push ax + mov si, [bp+arg_0] + shl si, 4 + add si, 29FEh + mov bx, [bp+arg_4] + sar bx, 3 + add bx, [si+6] + mov ax, [si+8] + mov bp, ax + shl ax, 2 + add ax, 50h ; 'P' + mov dx, ax + mov ax, [si+0Eh] + mov ds, ax + xor si, si + mov al, 4 + cld + nop + +loc_EABA: ; CODE XREF: sub_EA6E+5Cj + mov di, bx + +loc_EABC: ; CODE XREF: sub_EA6E+55j + mov cx, bp + rep movsd + sub di, dx + jns short loc_EABC + dec al + jz short loc_EACC + pop es + jmp short loc_EABA +; --------------------------------------------------------------------------- + +loc_EACC: ; CODE XREF: sub_EA6E+59j + pop ds + pop di + pop si + pop bp + retf 6 +sub_EA6E endp ; sp-analysis failed + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_EAD4 proc far ; CODE XREF: sub_A9C3+55DP + mov byte_107C1, 0 + mov byte_107C0, 0FFh + retf +sub_EAD4 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_EAE0 proc far ; CODE XREF: sub_A9C3+565P sub_C16C+CP ... + mov bx, sp + mov dx, ss:[bx+4] + cmp byte_107DB, 0 + jz short locret_EB16 + cmp byte_107C0, 0FFh + jnz short loc_EAFB + mov byte_107C0, dl + retf 2 +; --------------------------------------------------------------------------- + +loc_EAFB: ; CODE XREF: sub_EAE0+12j + mov bl, byte_107C0 + xor bh, bh + mov al, [bx+65Eh] + mov bx, dx + cmp al, [bx+65Eh] + ja short locret_EB16 + mov byte_107C0, dl + mov byte_107C1, 0 + +locret_EB16: ; CODE XREF: sub_EAE0+Bj sub_EAE0+2Bj + retf 2 +sub_EAE0 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_EB1A proc far ; CODE XREF: sub_A9C3+56AP sub_BD1E+3P + cmp byte_107DB, 0 + jz short locret_EB65 + cmp byte_107C0, 0FFh + jz short locret_EB65 + cmp byte_107C1, 0 + jnz short loc_EB47 + mov al, byte_107C0 + cmp byte_107DB, 2 + jz short loc_EB3F + mov ah, 0Ch + int 60h ; - Banyan VINES, 3com - GET STATION ADDRESS + ; Return: AL = status, 00h successful, ES:SI -> 6-byte station address + ; 02h semaphore service is unavailable + jmp short loc_EB47 +; --------------------------------------------------------------------------- + +loc_EB3F: ; CODE XREF: sub_EB1A+1Dj + xor ah, ah + push ax + call sub_344C + +loc_EB47: ; CODE XREF: sub_EB1A+13j sub_EB1A+23j + inc byte_107C1 + mov bl, byte_107C0 + xor bh, bh + mov al, [bx+66Fh] + cmp al, byte_107C1 + jnb short locret_EB65 + mov byte_107C1, 0 + mov byte_107C0, 0FFh + +locret_EB65: ; CODE XREF: sub_EB1A+5j sub_EB1A+Cj ... + retf +sub_EB1A endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_EB66 proc far ; CODE XREF: sub_A9C3+2FDP + ; sub_A9C3+348P ... + push si + push di + cmp word_107C2, 0 + jnz short loc_EB9B + push 7D00h + call sub_2560 + mov word_107C2, ax + push 7D00h + call sub_2560 + mov word_107C4, ax + push 7D00h + call sub_2560 + mov word_107C6, ax + push 7D00h + call sub_2560 + mov word_107C8, ax + +loc_EB9B: ; CODE XREF: sub_EB66+7j + mov dl, 4 + push ds + push 0E000h + push word_107C8 + push 0B800h + push word_107C6 + push 0B000h + push word_107C4 + push 0A800h + push word_107C2 + +loc_EBBA: ; CODE XREF: sub_EB66+62j + pop es + pop ds + xor si, si + xor di, di + mov cx, 1F40h + rep movsd + dec dl + jnz short loc_EBBA + pop ds + pop di + pop si + retf +sub_EB66 endp ; sp-analysis failed + +; --------------------------------------------------------------------------- + push si + push di + mov dl, 4 + push ds + push 0E000h + push word_107C8 + push 0B800h + push word_107C6 + push 0B000h + push word_107C4 + push 0A800h + push word_107C2 + +loc_EBEF: ; CODE XREF: seg002:040Dj + pop ds + pop es + xor si, si + xor di, di + mov cx, 1F40h + rep movsd + dec dl + jnz short loc_EBEF + pop ds + pop di + pop si + retf +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_EC04 proc far ; CODE XREF: sub_AFD6:loc_B196P + ; sub_C1DD:loc_C5CDP + cmp word_107C2, 0 + jz short locret_EC35 + push word_107C2 + call sub_2664 + push word_107C4 + call sub_2664 + push word_107C6 + call sub_2664 + push word_107C8 + call sub_2664 + mov word_107C2, 0 + +locret_EC35: ; CODE XREF: sub_EC04+5j + retf +sub_EC04 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EC36 proc far ; CODE XREF: sub_A576+12P + push bp + mov bp, sp + call sub_3A20 + mov dx, 0A6h ; '' + mov al, 1 + out dx, al ; Interrupt Controller #2, 8259A + call sub_1302 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + call sub_1302 + mov dx, 0A6h ; '' + mov al, 0 + out dx, al ; Interrupt Controller #2, 8259A + mov dx, 0A4h ; '' + out dx, al ; Interrupt Controller #2, 8259A + call sub_270C + call sub_23CE + call sub_2298 + call sub_1B84 + call sub_85A + call sub_36FA + pop bp + retf +sub_EC36 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + movsx eax, word ptr [bp+8] + movsx edx, word ptr [bp+6] + imul eax, edx + sar eax, 8 + add ax, [bp+0Ah] + pop bp + retf 6 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EC9A proc far ; CODE XREF: sub_BE76+E3P sub_D387+8BP ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + push si + mov si, [bp+arg_8] + mov bx, [bp+arg_0] + xor bh, bh + add bx, bx + movsx eax, [bp+arg_2] + movsx edx, word ptr [bx+2FAh] + imul eax, edx + sar eax, 8 + add ax, [bp+arg_6] + mov [si], ax + movsx eax, [bp+arg_2] + movsx edx, word ptr [bx+27Ah] + imul eax, edx + sar eax, 8 + add ax, [bp+arg_4] + mov [si+2], ax + pop si + pop bp + retf 0Ah +sub_EC9A endp + +; --------------------------------------------------------------------------- + +loc_ECDE: ; CODE XREF: sub_A92B+49P sub_A9C3+99P ... + push bp + mov bp, sp + push di + push si + push ds + cld + mov ax, [bp+0Ch] + mov dx, [bp+0Ah] + mov bx, ax + sar bx, 4 + shl bx, 1 + shl dx, 6 + add bx, dx + shr dx, 2 + add bx, dx + mov cs:word_ED44, bx + and ax, 0Fh + mov cx, ax + add ax, [bp+8] + shr ax, 4 + or cx, cx + jz short loc_ED11 + inc ax + +loc_ED11: ; CODE XREF: seg002:051Ej + mov cs:word_ED49, ax + jmp short $+2 + mov cx, 28h ; '(' + sub cx, ax + shl cx, 1 + mov ax, [bp+6] + mov bp, cx + push 0E000h + push word_107C8 + push 0B800h + push word_107C6 + push 0B000h + push word_107C4 + push 0A800h + push word_107C2 + mov dl, 4 + mov bx, ax +; --------------------------------------------------------------------------- + db 0BFh +word_ED44 dw 1234h ; DATA XREF: seg002:050Cw + db 1Fh, 7, 0B9h +word_ED49 dw 1234h ; DATA XREF: seg002:loc_ED11w + db 8Bh, 0F7h, 0F3h, 0A5h, 3, 0FDh, 4Bh, 75h, 0F4h, 0FEh + db 0CAh, 75h, 0E9h, 1Fh, 5Eh, 5Fh, 5Dh, 0CAh, 8, 0, 90h + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_ED60 proc far ; CODE XREF: _main+39P sub_A9C3+547P ... + +arg_0 = word ptr 6 +arg_2 = dword ptr 8 + + push bp + mov bp, sp + push si + push di + mov dx, ds + mov es, dx + assume es:dseg + mov di, 27A6h + lds si, [bp+arg_2] + mov bp, [bp+arg_0] + mov cx, 0Dh + rep movsb + mov ds, dx + mov di, 27A6h + dec cx + xor ax, ax + repne scasb + dec di + mov byte ptr [di], 2Eh ; '.' + inc di + cmp bp, 0B00h + jnz short loc_EDBB + cmp byte_107DB, 0 + jz short loc_EE12 + xor bx, bx + cmp byte_107DB, 2 + jnz short loc_EDD1 + mov dword ptr [di], 736665h + call sub_36FA + push 800h + call sub_3556 + push ds + push offset unk_128A6 + call sub_301A + jmp short loc_EE12 +; --------------------------------------------------------------------------- + +loc_EDBB: ; CODE XREF: sub_ED60+2Aj + cmp byte_107DC, 0 + jz short loc_EE12 + push 100h + push cs + call near ptr sub_EE18 + movzx bx, byte_107DC + shl bx, 2 + +loc_EDD1: ; CODE XREF: sub_ED60+3Aj + mov eax, [bx+6CCh] + +loc_EDD6: ; CODE XREF: sub_ED60+8Cj + mov [di], eax + mov dx, 27A6h + mov ax, 3D00h + int 21h ; DOS - 2+ - OPEN DISK FILE WITH HANDLE + ; DS:DX -> ASCIZ filename + ; AL = access mode + ; 0 - read + jnb short loc_EDEE + cmp ax, 2 + jnz short loc_EE12 + mov eax, dword_107D0 + jmp short loc_EDD6 +; --------------------------------------------------------------------------- + +loc_EDEE: ; CODE XREF: sub_ED60+81j + mov bx, ax + mov ax, bp + cmp ah, 6 + jnz short loc_EE02 + cmp byte_107DC, 3 + jnz short loc_EE02 + int 61h ; reserved for user interrupt + jmp short loc_EE04 +; --------------------------------------------------------------------------- + +loc_EE02: ; CODE XREF: sub_ED60+95j sub_ED60+9Cj + int 60h + +loc_EE04: ; CODE XREF: sub_ED60+A0j + mov ax, 3F00h + mov cx, 0FFFFh + int 21h ; DOS - 2+ - READ FROM FILE WITH HANDLE + ; BX = file handle, CX = number of bytes to read + ; DS:DX -> buffer + mov ah, 3Eh + int 21h ; DOS - 2+ - CLOSE A FILE WITH HANDLE + ; BX = file handle + push es + pop ds + +loc_EE12: ; CODE XREF: sub_ED60+31j sub_ED60+59j ... + pop di + pop si + pop bp + retf 6 +sub_ED60 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_EE18 proc far ; CODE XREF: _main+8CP sub_A9C3+4CBP ... + cmp byte_107DC, 0 + jz short locret_EE32 + mov bx, sp + mov ax, ss:[bx+4] + cmp byte_107DC, 3 + jz short loc_EE30 + int 60h + jmp short locret_EE32 +; --------------------------------------------------------------------------- + +loc_EE30: ; CODE XREF: sub_EE18+12j + int 61h ; reserved for user interrupt + +locret_EE32: ; CODE XREF: sub_EE18+5j sub_EE18+16j + retf 2 +sub_EE18 endp + +; --------------------------------------------------------------------------- + nop + push bp + mov bp, sp + push si + push di + mov si, [bp+8] + mov di, si + shl si, 2 + les si, [si+6FEh] + assume es:nothing + imul di, 48h + push word ptr [bp+0Ch] + push word ptr [bp+0Ah] + mov ax, [di+27CEh] + push ax + shr ax, 1 + push ax + mov di, [di+27D0h] + mov ax, [bp+6] + call sub_EEB2 + pop di + pop si + pop bp + retf 8 + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EE68 proc far ; CODE XREF: sub_A705+1BP sub_B273+8DP + +arg_0 = word ptr 6 +arg_2 = byte ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch +arg_8 = word ptr 0Eh + + push bp + mov bp, sp + push si + push di + xor ax, ax + xor dx, dx + mov si, [bp+arg_4] + mov cl, [bp+arg_2] + test cl, 1 + jz short loc_EE7F + mov ax, 0A0h ; '' + +loc_EE7F: ; CODE XREF: sub_EE68+12j + test cl, 2 + jz short loc_EE87 + mov dx, 0FA0h + +loc_EE87: ; CODE XREF: sub_EE68+1Aj + shl si, 2 + les si, [si+6FEh] + add si, ax + mov ax, es + add ax, dx + mov es, ax + assume es:nothing + mov di, 0C8h ; '' + push [bp+arg_8] + push [bp+arg_6] + push 140h + push 140h + mov ax, [bp+arg_0] + call sub_EEB2 + pop di + pop si + pop bp + retf 0Ah +sub_EE68 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EEB2 proc near ; CODE XREF: seg002:066Fp sub_EE68+40p + +arg_0 = word ptr 2 +arg_2 = word ptr 4 +arg_4 = word ptr 6 +arg_6 = word ptr 8 + + shl ax, 3 + add ax, 6DEh + mov word_128B4, ax + mov bp, sp + mov dx, [bp+arg_6] + shr dx, 3 + mov ax, [bp+arg_4] + shl ax, 6 + add dx, ax + shr ax, 2 + add dx, ax + mov word_128B8, dx + mov word_128B6, 0 + +loc_EEDA: ; CODE XREF: sub_EEB2+82j + push es + push (offset loc_F9EF+1 - (offset loc_F9EF+1)) + push 190h + push es + push si + push [bp+arg_2] + call sub_3778 + push ds + push di + push si + mov di, word_128B8 + add word_128B8, 50h ; 'P' + cmp word_128B8, 7D00h + jb short loc_EF04 + sub word_128B8, 7D00h + +loc_EF04: ; CODE XREF: sub_EEB2+4Aj + call sub_EF39 + mov ax, 0A800h + mov es, ax + assume es:nothing + mov ds, ax + assume ds:nothing + mov si, 7D00h + mov cx, [bp+arg_2] + shr cx, 4 + rep movsw + call sub_83A + pop si + pop di + pop ds + assume ds:dseg + pop es + assume es:nothing + add si, [bp+arg_0] + mov ax, si + shr ax, 4 + mov dx, es + add dx, ax + mov es, dx + and si, 0Fh + dec di + jnz short loc_EEDA + retn 8 +sub_EEB2 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_EF39 proc near ; CODE XREF: sub_EEB2:loc_EF04p + call sub_824 + mov ax, 0FFF0h + mov dx, 4A0h + out dx, ax + mov ax, 0FFh + mov dx, 4A2h + out dx, ax + mov ax, 3100h + mov dx, 4A4h + out dx, ax + mov ax, 0 + mov dx, 4ACh + out dx, ax + mov ax, 0Fh + mov dx, 4AEh + out dx, ax + mov bx, word_128B4 + mov ax, word_128B6 + and ax, 3 + shl ax, 1 + add bx, ax + mov ax, [bx] + mov dx, 4A8h + out dx, ax + inc word_128B6 + retn +sub_EF39 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EF7A proc far ; CODE XREF: sub_A9C3+3CFP + ; sub_B273+DFP ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov di, [bp+arg_4] + push di + push cs + call near ptr sub_F082 + mov si, di + shl si, 2 + add si, 6FEh + imul di, 48h + add di, 27BAh + push [bp+arg_2] + push [bp+arg_0] + push ds + push di + push ds + push si + call sub_1446 + pop di + pop si + pop bp + retf 6 +sub_EF7A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EFAC proc far ; CODE XREF: sub_A9C3+336P + ; sub_C1DD+3CP ... + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + push si + push di + mov si, [bp+arg_0] + mov di, si + shl si, 2 + les si, [si+6FEh] + imul di, 48h + push [bp+arg_4] + push [bp+arg_2] + mov ax, [di+27CEh] + push ax + shr ax, 1 + push ax + mov di, [di+27D0h] + call sub_F022 + pop di + pop si + pop bp + retf 6 +sub_EFAC endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_EFDC proc far ; CODE XREF: sub_A9C3+418P + ; sub_A9C3+495P ... + +arg_0 = byte ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push si + push di + xor ax, ax + xor dx, dx + mov si, [bp+arg_2] + mov cl, [bp+arg_0] + test cl, 1 + jz short loc_EFF3 + mov ax, 0A0h ; '' + +loc_EFF3: ; CODE XREF: sub_EFDC+12j + test cl, 2 + jz short loc_EFFB + mov dx, 0FA0h + +loc_EFFB: ; CODE XREF: sub_EFDC+1Aj + shl si, 2 + les si, [si+6FEh] + add si, ax + mov ax, es + add ax, dx + mov es, ax + assume es:nothing + push [bp+arg_6] + push [bp+arg_4] + +loc_F010: + push 140h + push 140h + mov di, 0C8h ; '' + call sub_F022 + pop di + pop si + pop bp + retf 8 +sub_EFDC endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F022 proc near ; CODE XREF: sub_EFAC+26p sub_EFDC+3Dp + +arg_0 = word ptr 2 +arg_2 = word ptr 4 +arg_4 = word ptr 6 +arg_6 = word ptr 8 + + mov bp, sp + +loc_F024: ; CODE XREF: sub_F022+35j + push es + push [bp+arg_6] + push [bp+arg_4] + push es + push si + push [bp+arg_2] + call sub_3778 + pop es + assume es:nothing + inc [bp+arg_4] + cmp [bp+arg_4], 190h + jb short loc_F045 + sub [bp+arg_4], 190h + +loc_F045: ; CODE XREF: sub_F022+1Cj + add si, [bp+arg_0] + mov ax, si + shr ax, 4 + mov dx, es + add dx, ax + mov es, dx + and si, 0Fh + dec di + jnz short loc_F024 + retn 8 +sub_F022 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_F05C proc far ; CODE XREF: sub_A9C3+32CP + ; sub_A9C3+368P ... + mov bx, sp + push si + push di + mov si, ss:[bx+4] + imul si, 48h + add si, 27D2h + mov di, 1D9Ah + mov ax, ds + mov es, ax + assume es:dseg + mov cx, 0Ch + rep movsd + call far ptr loc_1B8A + pop di + pop si + retf 2 +sub_F05C endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_F082 proc far ; CODE XREF: sub_A9C3+358P + ; sub_A9C3+3C3P ... + mov bx, sp + mov bx, ss:[bx+4] + mov ax, bx + shl bx, 2 + add bx, 6FEh + cmp dword ptr [bx], 0 + jz short locret_F0B0 + imul ax, 48h + add ax, 27BAh + push ds + push ax + push word ptr [bx+2] + push word ptr [bx] + mov dword ptr [bx], 0 + call sub_13EE + +locret_F0B0: ; CODE XREF: sub_F082+13j + retf 2 +sub_F082 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F0B4 proc far ; CODE XREF: _main+16P + +arg_0 = dword ptr 6 + + push bp + mov bp, sp + push word_107CA + call sub_24F0 + or ax, ax + jz short loc_F0CB + mov ax, 1 + pop bp + +locret_F0C8: + retf 4 +; --------------------------------------------------------------------------- + +loc_F0CB: ; CODE XREF: sub_F0B4+Ej + mov word_10370, 1000h + call sub_2320 + call sub_85A + call sub_12B4 + call sub_2E46 + push large [bp+arg_0] + call sub_3980 + push 800h + call sub_3556 + xor ax, ax + pop bp + retf 4 +sub_F0B4 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_F0FC proc near ; CODE XREF: sub_F202+1p + xor ax, ax + mov word_12AFA, ax + mov word_11E96, ax +sub_F0FC endp ; sp-analysis failed + + +; =============== S U B R O U T I N E ======================================= + + +sub_F104 proc far ; CODE XREF: sub_F202+Cp + xor ax, ax + mov es, ax + assume es:seg000 + mov ah, es:byte_531 + test ah, 4 + jz short loc_F117 + or byte ptr word_12AFA, 1 + +loc_F117: ; CODE XREF: sub_F104+Cj + test ah, 20h + jz short loc_F121 + or byte ptr word_12AFA, 2 + +loc_F121: ; CODE XREF: sub_F104+16j + test ah, 8 + jz short loc_F12B + or byte ptr word_12AFA, 4 + +loc_F12B: ; CODE XREF: sub_F104+20j + test ah, 10h + jz short loc_F135 + or byte ptr word_12AFA, 8 + +loc_F135: ; CODE XREF: sub_F104+2Aj + mov ah, es:byte_533 + test ah, 1 + jz short loc_F144 + or byte ptr word_12AFA, 8 + +loc_F144: ; CODE XREF: sub_F104+39j + test ah, 4 + jz short loc_F14E + or byte ptr word_12AFA+1, 4 + +loc_F14E: ; CODE XREF: sub_F104+43j + test ah, 8 + jz short loc_F158 + or byte ptr word_12AFA, 2 + +loc_F158: ; CODE XREF: sub_F104+4Dj + test ah, 10h + jz short loc_F162 + or byte ptr word_12AFA+1, 8 + +loc_F162: ; CODE XREF: sub_F104+57j + mov ah, es:byte_532 + test ah, 40h + jz short loc_F171 + or byte ptr word_12AFA, 4 + +loc_F171: ; CODE XREF: sub_F104+66j + test ah, 4 + jz short loc_F17B + or byte ptr word_12AFA+1, 1 + +loc_F17B: ; CODE XREF: sub_F104+70j + test ah, 8 + jz short loc_F185 + or byte ptr word_12AFA, 1 + +loc_F185: ; CODE XREF: sub_F104+7Aj + test ah, 10h + jz short loc_F18F + or byte ptr word_12AFA+1, 2 + +loc_F18F: ; CODE XREF: sub_F104+84j + mov ah, es:byte_52F + test ah, 2 + jz short loc_F19E + or byte ptr word_12AFA, 20h + +loc_F19E: ; CODE XREF: sub_F104+93j + test ah, 4 + jz short loc_F1A8 + or byte ptr word_12AFA, 10h + +loc_F1A8: ; CODE XREF: sub_F104+9Dj + mov ah, es:byte_52C + test ah, 1 + jz short loc_F1B7 + or byte ptr word_12AFA+1, 40h + +loc_F1B7: ; CODE XREF: sub_F104+ACj + mov ah, es:byte_52A + test ah, 1 + jz short loc_F1C6 + or byte ptr word_12AFA+1, 10h + +loc_F1C6: ; CODE XREF: sub_F104+BBj + mov ah, es:byte_52D + test ah, 10h + jz short loc_F1D5 + or byte ptr word_12AFA+1, 20h + +loc_F1D5: ; CODE XREF: sub_F104+CAj + mov ah, es:byte_530 + test ah, 10h + jz short loc_F1E4 + or byte ptr word_12AFA, 20h + +loc_F1E4: ; CODE XREF: sub_F104+D9j + mov ah, 2 + int 18h ; TRANSFER TO ROM BASIC + ; causes transfer to ROM-based BASIC (IBM-PC) + ; often reboots a compatible; often has no effect at all + and al, 1 + mov byte_12AFC, al + cmp word_1032E, 0 + jz short loc_F1FD + call sub_2E82 + or word_12AFA, ax + +loc_F1FD: ; CODE XREF: sub_F104+EEj + mov ax, word_12AFA + retf +sub_F104 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_F202 proc far ; CODE XREF: sub_A92B:loc_A93BP + ; sub_A92B:loc_A962P ... + push cs + call sub_F0FC + mov cx, 400h + +loc_F209: ; CODE XREF: sub_F202+9j + out 5Fh, al + loop loc_F209 + push cs + call near ptr sub_F104 + retf +sub_F202 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F212 proc far ; CODE XREF: sub_C1DD+3EBP + ; sub_D1B1+5EP + +arg_0 = word ptr 6 + + push bp + mov bp, sp + +loc_F215: ; CODE XREF: sub_F212+9j + push cs + call near ptr sub_F202 + or ax, ax + jnz short loc_F215 + mov bp, [bp+arg_0] + +loc_F220: ; CODE XREF: sub_F212+21j sub_F212+24j + push cs + call near ptr sub_F202 + or ax, ax + jnz short loc_F238 + mov ax, word_11ECA + +loc_F22B: ; CODE XREF: sub_F212+1Dj + cmp ax, word_11ECA + jz short loc_F22B + or bp, bp + jz short loc_F220 + dec bp + jnz short loc_F220 + +loc_F238: ; CODE XREF: sub_F212+14j + pop bp + retf 2 +sub_F212 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F23C proc far ; CODE XREF: sub_B37C+22P sub_E349+39P ... + push bp + mov bp, sp + cmp byte_107DC, 0 + jnz short loc_F24B + mov ax, 0FFFFh + pop bp + retf +; --------------------------------------------------------------------------- + +loc_F24B: ; CODE XREF: sub_F23C+8j + mov ah, 5 + cmp byte_107DC, 3 + jz short loc_F258 + int 60h ; - FTP Packet Driver - BASIC FUNC - TERMINATE DRIVER FOR HANDLE + ; BX = handle + ; Return: CF set on error, DH = error code + ; CF clear if successful + jmp short loc_F25D +; --------------------------------------------------------------------------- + +loc_F258: ; CODE XREF: sub_F23C+16j + mov dx, 0C0h ; '' + int 61h ; reserved for user interrupt + +loc_F25D: ; CODE XREF: sub_F23C+1Aj + pop bp + retf +sub_F23C endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F25F proc far ; CODE XREF: sub_A9C3+1A6P + +arg_0 = word ptr 6 +arg_2 = word ptr 8 + + push bp + mov bp, sp + push si + +loc_F263: ; CODE XREF: sub_F25F+1Bj + push cs + call near ptr sub_F23C + mov si, ax + or si, si + jge short loc_F277 + push [bp+arg_0] + nop + push cs + call near ptr sub_F282 + jmp short loc_F27C +; --------------------------------------------------------------------------- + +loc_F277: ; CODE XREF: sub_F25F+Cj + cmp si, [bp+arg_2] + jl short loc_F263 + +loc_F27C: ; CODE XREF: sub_F25F+16j + pop si + pop bp + retf 4 +sub_F25F endp + +; --------------------------------------------------------------------------- + db 0 + +; =============== S U B R O U T I N E ======================================= + + +sub_F282 proc far ; CODE XREF: _main+52P sub_A8EC+20P ... + mov bx, sp + mov bx, ss:[bx+4] + mov word_11ECA, 0 + +loc_F28E: ; CODE XREF: sub_F282+10j + cmp word_11ECA, bx + jb short loc_F28E + retf 2 +sub_F282 endp + +; --------------------------------------------------------------------------- + db 0 + mov byte_1082E, 1 + nop + push bp + mov bp, sp + push si + push di + mov di, [bp+0Ch] + push di + nop + push cs + call near ptr sub_F3B8 + shl di, 4 + add di, 29FEh + push large dword ptr [bp+8] + call sub_A66 + push ds + push di + push 10h + call sub_9B2 + mov ax, [di] + mov dx, ax + cmp byte ptr [di+0Bh], 0 + jz short loc_F2DA + shl ax, 2 + cmp byte ptr [di+0Bh], 2 + jz short loc_F2DA + add ax, dx + +loc_F2DA: ; CODE XREF: seg002:0ADDj seg002:0AE6j + mul word ptr [bp+6] + movzx eax, ax + push eax + push 1 + call sub_AA2 + call sub_F2FE + call sub_946 + mov byte_1082E, 0 + pop di + pop si + pop bp + retf 8 +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_F2FE proc near ; CODE XREF: seg002:0AFAp sub_F356+45p + mov al, [di+0Bh] + or al, al + jz short loc_F333 + cmp al, 2 + jz short loc_F310 + cmp byte_1082E, 0 + jnz short loc_F326 + +loc_F310: ; CODE XREF: sub_F2FE+9j + push word ptr [di] + call sub_2560 + mov [di+0Ch], ax + push ax + push 0 + push word ptr [di] + call sub_9B2 + jmp short loc_F333 +; --------------------------------------------------------------------------- + +loc_F326: ; CODE XREF: sub_F2FE+10j + movzx eax, word ptr [di] + push eax + push 1 + call sub_AA2 + +loc_F333: ; CODE XREF: sub_F2FE+5j sub_F2FE+26j + cmp byte ptr [di+0Bh], 2 + jz short locret_F355 + mov ax, [di] + shl ax, 2 + push ax + call sub_2560 + mov [di+0Eh], ax + push ax + push 0 + mov ax, [di] + shl ax, 2 + push ax + call sub_9B2 + +locret_F355: ; CODE XREF: sub_F2FE+39j + retn +sub_F2FE endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F356 proc far ; CODE XREF: sub_E41D+A3P sub_E41D+AEP ... + +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + mov byte_1082E, 1 + nop + push bp + mov bp, sp + push si + push di + push large [bp+arg_0] + call sub_A66 + mov di, [bp+arg_4] + shl di, 4 + add di, 29FEh + push ds + push di + push 10h + call sub_9B2 + mov si, di + mov bp, [bp+arg_4] + mov al, [si+0Ah] + mov byte_12EFE, al + push ds + pop es + assume es:dseg + +loc_F38A: ; CODE XREF: sub_F356+50j + push bp + push cs + call near ptr sub_F3B8 + mov cx, 3 + rep movsd + sub si, 0Ch + sub di, 0Ch + call sub_F2FE + inc bp + add di, 10h + dec byte_12EFE + jnz short loc_F38A + call sub_946 + mov byte_1082E, 0 + pop di + pop si + pop bp + retf 6 +sub_F356 endp + + +; =============== S U B R O U T I N E ======================================= + + +sub_F3B8 proc far ; CODE XREF: seg002:0AB9p sub_F356+36p ... + mov bx, sp + push di + mov di, ss:[bx+4] + shl di, 4 + add di, 2A0Ah + cmp word ptr [di], 0 + jz short loc_F3D6 + push word ptr [di] + call sub_2664 + mov word ptr [di], 0 + +loc_F3D6: ; CODE XREF: sub_F3B8+11j + add di, 2 + cmp word ptr [di], 0 + jz short loc_F3E9 + push word ptr [di] + call sub_2664 + mov word ptr [di], 0 + +loc_F3E9: ; CODE XREF: sub_F3B8+24j + pop di + retf 2 +sub_F3B8 endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_F3EE proc far ; CODE XREF: sub_A576+3P sub_E41D+3C3P + push si + mov si, 3Fh ; '?' + +loc_F3F2: ; CODE XREF: sub_F3EE+Aj + push si + push cs + call near ptr sub_F3B8 + dec si + jge short loc_F3F2 + pop si + retf +sub_F3EE endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_F3FC proc far ; CODE XREF: sub_A705+28P + ; sub_A9C3+4ADP + +arg_0 = word ptr 6 +arg_2 = word ptr 8 +arg_4 = word ptr 0Ah +arg_6 = word ptr 0Ch + + push bp + mov bp, sp + push di + call sub_F478 + mov dx, 4A4h + mov ax, 29F0h + out dx, ax + mov ax, [bp+arg_6] + mov dx, [bp+arg_4] + mov bx, ax + sar bx, 4 + shl bx, 1 + shl dx, 6 + add bx, dx + shr dx, 2 + add bx, dx + mov di, bx + and ax, 0Fh + mov cx, ax + add ax, [bp+arg_2] + shr ax, 4 + or cx, cx + jz short loc_F433 + inc ax + +loc_F433: ; CODE XREF: sub_F3FC+34j + mov word_12F86, ax + mov cx, 28h ; '(' + sub cx, ax + shl cx, 1 + mov bx, [bp+arg_0] + mov bp, cx + mov ax, 0A800h + mov es, ax + assume es:nothing + +loc_F447: ; CODE XREF: sub_F3FC+6Fj + mov cx, word_12F86 + +loc_F44B: ; CODE XREF: sub_F3FC+6Aj + or di, di + js short loc_F463 + cmp di, 7D00h + jnb short loc_F463 + mov al, 1 + out 0A6h, al ; Interrupt Controller #2, 8259A + mov dx, es:[di] + xor ax, ax + out 0A6h, al ; Interrupt Controller #2, 8259A + mov es:[di], dx + +loc_F463: ; CODE XREF: sub_F3FC+51j sub_F3FC+57j + add di, 2 + loop loc_F44B + add di, bp + dec bx + jns short loc_F447 + call sub_83A + pop di + pop bp + retf 8 +sub_F3FC endp + +; --------------------------------------------------------------------------- + nop + +; =============== S U B R O U T I N E ======================================= + + +sub_F478 proc near ; CODE XREF: sub_F3FC+4p + push es + push 0 + pop es + assume es:seg000 + pushf + cli + mov al, 80h ; '' + out 7Ch, al + mov es:byte_495, al + popf + pop es + assume es:nothing + mov al, 7 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 5 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov al, 6 + out 6Ah, al ; PC-98 GDC (6a): + ; + mov dx, 4A0h + mov ax, 0FFF0h + out dx, ax + mov dx, 4A2h + mov ax, 0FFh + out dx, ax + mov dx, 4A8h + mov ax, 0FFFFh + out dx, ax + mov dx, 4ACh + sub ax, ax + out dx, ax + mov dx, 4AEh + mov ax, 0Fh + out dx, ax + retn +sub_F478 endp + +seg002 ends + +; =========================================================================== + +; Segment type: Pure code +seg003 segment byte public 'CODE' use16 + assume cs:seg003 + ;org 7 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + nop + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; string::string(string const &) +@string@$bctr$qmx6string proc far ; CODE XREF: xmsg::xmsg(string &)+52P + ; xmsg::xmsg(xmsg &)+56P ... + +var_1E = word ptr -1Eh +arg_0 = dword ptr 6 +arg_4 = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 9E71h + call ___InitExceptBlocks + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_F4E7 + mov ax, 4 + push ax + call @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_F501 + +loc_F4E7: ; CODE XREF: string::string(string &)+19j + les bx, [bp+arg_4] + mov dx, es:[bx+2] + mov ax, es:[bx] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + les bx, es:[bx] + inc word ptr es:[bx] + +loc_F501: ; CODE XREF: string::string(string &)+2Dj + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + push [bp+var_1E] + call ___ExitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@string@$bctr$qmx6string endp + +; --------------------------------------------------------------------------- +byte_F527 db 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 2Eh, 0, 3Ah + ; DATA XREF: seg000:9E69o + db 0Dh dup(0), 2, 0, 2, 0, 77h, 9Eh + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 0B9h, 0 + dw seg seg003 + db 2 dup(0), 3, 0Dh dup(0), 4, 0, 3, 0, 26h, 0, 2 dup(0FFh) + db 3, 0, 2Ch, 0, 30h, 0Dh dup(0), 1, 0, 1, 0, 7Eh, 65h + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: library function bp-based frame + +; int __cdecl __far string__string(__int32, char *s) +@string@$bctr$qnxc proc far ; CODE XREF: string::contains(char *)+25P + ; seg003:03EDp ... + +var_22 = word ptr -22h +var_16 = word ptr -16h +var_4 = dword ptr -4 +arg_0 = dword ptr 6 +src = dword ptr 0Ah + + push bp + mov bp, sp + sub sp, 22h + push si + push di + mov ax, seg seg000 + mov bx, 9EE3h + call ___InitExceptBlocks + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_F5D0 + mov ax, 4 + push ax + call @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jz short loc_F644 + +loc_F5D0: ; CODE XREF: string::string(char *)+19j + mov ax, 0Ch + push ax + call @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+var_4+2], dx + mov word ptr [bp+var_4], ax + or ax, dx + jz short loc_F634 + mov [bp+var_16], 0Eh + xor ax, ax + push ax ; int + push ax ; int + push ax ; int + push ax ; int + mov ax, word ptr [bp+src] + or ax, word ptr [bp+src+2] + jz short loc_F606 + push word ptr [bp+src+2] + push word ptr [bp+src] ; s + call _strlen + pop cx + pop cx + jmp short loc_F608 +; --------------------------------------------------------------------------- + +loc_F606: ; CODE XREF: string::string(char *)+54j + xor ax, ax + +loc_F608: ; CODE XREF: string::string(char *)+63j + push ax ; n + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + push word ptr [bp+var_4+2] + push word ptr [bp+var_4] ; __int32 + nop + push cs + call near ptr sub_FA7A + add sp, 12h + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov [bp+var_16], 6 + +loc_F634: ; CODE XREF: string::string(char *)+41j + mov dx, word ptr [bp+var_4+2] + mov ax, word ptr [bp+var_4] + les bx, [bp+arg_0] + mov es:[bx+2], dx + mov es:[bx], ax + +loc_F644: ; CODE XREF: string::string(char *)+2Dj + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + push [bp+var_22] + call ___ExitExceptBlocks + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + mov sp, bp + pop bp + retf +@string@$bctr$qnxc endp + +; --------------------------------------------------------------------------- + db 4, 0, 90h, 20h, 0Ah, 0, 99h, 2 + dw seg seg003 +aTstringref db 'TStringRef *',0 +byte_F681 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 3Ah, 0, 46h + ; DATA XREF: seg000:9ECDo + db 0Dh dup(0), 2, 0, 2, 0, 0F9h, 9Eh + dw seg seg000 + db 5, 0, 4Ah, 0 +aStringLengther db 'string::lengtherror',0 + dd byte_F711 + db 2 dup(0), 3, 0Dh dup(0) +byte_F6CF db 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 2Eh, 0, 3Ah + ; DATA XREF: seg000:9EC9o + db 0Dh dup(0), 2, 0, 2, 0, 46h, 9Fh + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 61h, 2 + dw seg seg003 + db 2 dup(0), 3, 0Dh dup(0) +byte_F711 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + ; DATA XREF: seg003:020Bo + db 0Dh dup(0), 1, 0, 1, 0, 7Eh, 65h + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0), 0Ch, 0 + db 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 32h, 0, 3Eh, 0Dh dup(0) + db 1, 0, 1, 0, 0B0h, 6 + dw seg seg003 + db 5, 0, 42h, 0, 54h, 53h, 74h, 72h, 69h, 6Eh, 67h, 52h + db 65h, 66h, 2 dup(0), 0DFh, 2 + dw seg seg003 + db 2 dup(0), 3, 0Dh dup(0), 2, 0, 3, 0, 1Ah, 0, 2 dup(0FFh) + db 1, 0, 26h, 0, 2Ah, 0Dh dup(0), 54h, 52h, 65h, 66h, 65h + db 72h, 65h, 6Eh, 63h, 65h, 0Ah dup(0) + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_F7BD(void (*driver)(void), char) +sub_F7BD proc far ; CODE XREF: string::contains(char *)+45P + ; xmsg::~xmsg(void)+3FP ... + +var_1E = word ptr -1Eh +driver = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 9F9Ch + call ___InitExceptBlocks + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov ax, word ptr [bp+driver] + or ax, word ptr [bp+driver+2] + jz short loc_F835 + les bx, [bp+driver] + les bx, es:[bx] + dec word ptr es:[bx] + mov ax, es:[bx] + or ax, ax + jnz short loc_F822 + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov ax, 3 + push ax ; char + les bx, [bp+driver] + push word ptr es:[bx+2] + push word ptr es:[bx] ; driver + nop + push cs + call near ptr sub_FB60 + add sp, 6 + +loc_F822: ; CODE XREF: sub_F7BD+3Bj + test [bp+arg_4], 1 + jz short loc_F835 + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + call _registerbgidriver + pop cx + pop cx + +loc_F835: ; CODE XREF: sub_F7BD+2Bj sub_F7BD+69j + push [bp+var_1E] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_F7BD endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 28h + push si + push di + mov ax, seg seg000 + mov bx, 9FD0h + call ___InitExceptBlocks + mov ax, [bp+0Ah] + mov [bp-28h], ax + les bx, [bp+6] + les bx, es:[bx] + mov ax, es:[bx+6] + cmp ax, [bp-28h] + jbe short loc_F870 + mov ax, 1 + jmp short loc_F872 +; --------------------------------------------------------------------------- + +loc_F870: ; CODE XREF: seg003:03B9j + xor ax, ax + +loc_F872: ; CODE XREF: seg003:03BEj + or ax, ax + jnz short loc_F8F3 + xor ax, ax + push ax + push ax + push ax + push ax + mov ax, 5 + push ax + mov ax, seg seg000 + push ax + mov ax, 0A0C2h + push ax + xor ax, ax + push ax + push ax + mov word ptr [bp-1Ah], 6 + push ds + mov ax, 1CC8h + push ax + push ss + lea ax, [bp-4] + push ax + nop + push cs + call near ptr @string@$bctr$qnxc ; string::string(char *) + add sp, 8 + lea ax, [bp-4] + push ss + push ax + push ss + lea ax, [bp-8] + push ax + call @xmsg@$bctr$qmx6string ; xmsg::xmsg(string &) + add sp, 8 + mov word ptr [bp-1Ah], 0Eh + mov ax, 2 + push ax + push ss + lea ax, [bp-4] + push ax + push cs + call near ptr sub_F7BD + add sp, 6 + mov word ptr [bp-1Ah], 6 + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp-8] + push ss + push ax + push cs + mov ax, 0C02h + push ax + call @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_F8F3: ; CODE XREF: seg003:03C4j + push word ptr [bp-26h] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 28h + push si + push di + mov ax, seg seg000 + mov bx, 0A014h + call ___InitExceptBlocks + mov ax, [bp+0Ah] + mov [bp-28h], ax + les bx, [bp+6] + les bx, es:[bx] + mov ax, es:[bx+6] + cmp ax, [bp-28h] + jb short loc_F92E + mov ax, 1 + jmp short loc_F930 +; --------------------------------------------------------------------------- + +loc_F92E: ; CODE XREF: seg003:0477j + xor ax, ax + +loc_F930: ; CODE XREF: seg003:047Cj + or ax, ax + jnz short loc_F9B1 + xor ax, ax + push ax + push ax + push ax + push ax + mov ax, 5 + push ax + mov ax, seg seg000 + push ax + mov ax, 0A0C2h + push ax + xor ax, ax + push ax + push ax + mov word ptr [bp-1Ah], 6 + push ds + mov ax, 1CE6h + push ax + push ss + lea ax, [bp-4] + push ax + nop + push cs + call near ptr @string@$bctr$qnxc ; string::string(char *) + add sp, 8 + lea ax, [bp-4] + push ss + push ax + push ss + lea ax, [bp-8] + push ax + call @xmsg@$bctr$qmx6string ; xmsg::xmsg(string &) + add sp, 8 + mov word ptr [bp-1Ah], 0Eh + mov ax, 2 + push ax + push ss + lea ax, [bp-4] + push ax + push cs + call near ptr sub_F7BD + add sp, 6 + mov word ptr [bp-1Ah], 6 + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp-8] + push ss + push ax + push cs + mov ax, 0C02h + push ax + call @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_F9B1: ; CODE XREF: seg003:0482j + push word ptr [bp-26h] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 28h + push si + push di + mov ax, seg seg000 + mov bx, 0A058h + call ___InitExceptBlocks + mov ax, [bp+0Ah] + mov [bp-28h], ax + les bx, [bp+6] + mov ax, es:[bx+6] + cmp ax, [bp-28h] + jbe short loc_F9E9 + mov ax, 1 + jmp short loc_F9EB +; --------------------------------------------------------------------------- + +loc_F9E9: ; CODE XREF: seg003:0532j + xor ax, ax + +loc_F9EB: ; CODE XREF: seg003:0537j + or ax, ax + jnz short loc_FA6C + +loc_F9EF: ; DATA XREF: sub_EEB2+29o + xor ax, ax + push ax + push ax + push ax + push ax + mov ax, 5 + push ax + mov ax, seg seg000 + push ax + mov ax, 0A0C2h + push ax + xor ax, ax + push ax + push ax + mov word ptr [bp-1Ah], 6 + push ds + mov ax, 1D04h + push ax + push ss + lea ax, [bp-4] + push ax + nop + push cs + call near ptr @string@$bctr$qnxc ; string::string(char *) + add sp, 8 + lea ax, [bp-4] + push ss + push ax + push ss + lea ax, [bp-8] + push ax + call @xmsg@$bctr$qmx6string ; xmsg::xmsg(string &) + add sp, 8 + mov word ptr [bp-1Ah], 0Eh + mov ax, 2 + push ax + push ss + lea ax, [bp-4] + push ax + push cs + call near ptr sub_F7BD + add sp, 6 + mov word ptr [bp-1Ah], 6 + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + lea ax, [bp-8] + push ss + push ax + push cs + mov ax, 0C02h + push ax + call @_ThrowException$qnvt1t1t1uiuiuinuc ; _ThrowException(void *,void *,void *,void *,uint,uint,uint,uchar *) + add sp, 1Ah + +loc_FA6C: ; CODE XREF: seg003:053Dj + push word ptr [bp-26h] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_FA7A(__int32, void *src, size_t n, int, int, int, int) +sub_FA7A proc far ; CODE XREF: string::string(char *)+76p + +arg_0 = dword ptr 6 +src = dword ptr 0Ah +n = word ptr 0Eh +arg_A = word ptr 10h +arg_C = word ptr 12h +arg_E = word ptr 14h +arg_10 = word ptr 16h + + push bp + mov bp, sp + push si + push di + mov ax, word ptr [bp+arg_0] + or ax, word ptr [bp+arg_0+2] + jnz short loc_FA9E + mov ax, 0Ch + push ax + call @$bnew$qui ; operator new(uint) + pop cx + mov word ptr [bp+arg_0+2], dx + mov word ptr [bp+arg_0], ax + or ax, dx + jnz short loc_FA9E + jmp loc_FB44 +; --------------------------------------------------------------------------- + +loc_FA9E: ; CODE XREF: sub_FA7A+Bj sub_FA7A+1Fj + les bx, [bp+arg_0] + mov word ptr es:[bx], 1 + mov word ptr es:[bx+0Ah], 0 + mov ax, [bp+n] + add ax, [bp+arg_E] + mov es:[bx+6], ax + mov ax, es:[bx+6] + add ax, [bp+arg_10] + push ax + nop + push cs + call near ptr sub_FCF8 + pop cx + les bx, [bp+arg_0] + mov es:[bx+8], ax + mov ax, es:[bx+8] + inc ax + push ax + call far ptr sub_4C1A + pop cx + les bx, [bp+arg_0] + mov es:[bx+4], dx + mov es:[bx+2], ax + mov ax, es:[bx+2] + or ax, es:[bx+4] + jnz short loc_FAF8 + push ds + mov ax, 1A1Eh + push ax + call @xalloc@raise$qv ; xalloc::raise(void) + pop cx + pop cx + +loc_FAF8: ; CODE XREF: sub_FA7A+70j + push [bp+n] ; n + push word ptr [bp+src+2] + push word ptr [bp+src] ; src + les bx, [bp+arg_0] + push word ptr es:[bx+4] + push word ptr es:[bx+2] ; dest + call _memcpy + push [bp+arg_E] ; n + push [bp+arg_C] + push [bp+arg_A] ; src + les bx, [bp+arg_0] + mov ax, es:[bx+2] + add ax, [bp+n] + push word ptr es:[bx+4] + push ax ; dest + call _memcpy + add sp, 14h + les bx, [bp+arg_0] + les bx, es:[bx+2] + mov ax, [bp+n] + add ax, [bp+arg_E] + add bx, ax + mov byte ptr es:[bx], 0 + +loc_FB44: ; CODE XREF: sub_FA7A+21j + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + add word ptr es:[bx], 1 + adc word ptr es:[bx+2], 0 + mov dx, word ptr [bp+arg_0+2] + mov ax, word ptr [bp+arg_0] + pop di + pop si + pop bp + retf +sub_FA7A endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +; int __cdecl __far sub_FB60(void (*driver)(void), char) +sub_FB60 proc far ; CODE XREF: sub_F7BD+5Fp + +var_1E = word ptr -1Eh +driver = dword ptr 6 +arg_4 = byte ptr 0Ah + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 0A072h + call ___InitExceptBlocks + call @__RefDestructorCount$qv ; __RefDestructorCount(void) + mov bx, ax + mov es, dx + sub word ptr es:[bx], 1 + sbb word ptr es:[bx+2], 0 + mov ax, word ptr [bp+driver] + or ax, word ptr [bp+driver+2] + jz short loc_FBB2 + les bx, [bp+driver] + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_4AE7 + pop cx + pop cx + test [bp+arg_4], 1 + jz short loc_FBB2 + push word ptr [bp+driver+2] + push word ptr [bp+driver] ; driver + call _registerbgidriver + pop cx + pop cx + +loc_FBB2: ; CODE XREF: sub_FB60+2Bj sub_FB60+43j + push [bp+var_1E] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_FB60 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov ax, seg seg000 + mov bx, 0A084h + call ___InitExceptBlocks + les bx, [bp+6] + or word ptr es:[bx+0Ah], 1 + mov ax, [bp+0Ah] + inc ax + push ax + nop + push cs + call near ptr sub_FCF8 + pop cx + mov [bp-20h], ax + les bx, [bp+6] + mov ax, es:[bx+8] + sub ax, [bp-20h] + cmp ax, word_11DC6 + jbe short loc_FC20 + mov ax, [bp-20h] + inc ax + push ax + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_4D81 + add sp, 6 + les bx, [bp+6] + mov es:[bx+4], dx + mov es:[bx+2], ax + mov ax, [bp-20h] + mov es:[bx+8], ax + +loc_FC20: ; CODE XREF: seg003:0747j + push word ptr [bp-1Eh] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov ax, seg seg000 + mov bx, 0A08Eh + call ___InitExceptBlocks + les bx, [bp+6] + push word ptr es:[bx+6] + nop + push cs + call near ptr sub_FCF8 + pop cx + mov [bp-20h], ax + les bx, [bp+6] + mov ax, es:[bx+8] + sub ax, [bp-20h] + cmp ax, word_11DC6 + jbe short loc_FC88 + mov ax, [bp-20h] + inc ax + push ax + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_4D81 + add sp, 6 + les bx, [bp+6] + mov es:[bx+4], dx + mov es:[bx+2], ax + mov ax, [bp-20h] + mov es:[bx+8], ax + +loc_FC88: ; CODE XREF: seg003:07AFj + push word ptr [bp-1Eh] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_FC96 proc far ; CODE XREF: seg003:08C7p + +var_1E = word ptr -1Eh +arg_0 = dword ptr 6 +arg_4 = word ptr 0Ah + + push bp + mov bp, sp + sub sp, 1Eh + push si + push di + mov ax, seg seg000 + mov bx, 0A0A0h + call ___InitExceptBlocks + les bx, [bp+arg_0] + mov ax, [bp+arg_4] + mov es:[bx+8], ax + mov ax, es:[bx+8] + inc ax + push ax + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_4D81 + add sp, 6 + les bx, [bp+arg_0] + mov es:[bx+4], dx + +loc_FCD0: + mov es:[bx+2], ax + mov ax, es:[bx+2] + or ax, es:[bx+4] + jnz short loc_FCEA + push ds + mov ax, 1A1Eh + push ax + call @xalloc@raise$qv ; xalloc::raise(void) + pop cx + pop cx + +loc_FCEA: ; CODE XREF: sub_FC96+46j + push [bp+var_1E] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +sub_FC96 endp + + +; =============== S U B R O U T I N E ======================================= + +; Attributes: bp-based frame + +sub_FCF8 proc far ; CODE XREF: sub_FA7A+46p seg003:0732p ... + +var_20 = word ptr -20h +var_1E = word ptr -1Eh +arg_0 = word ptr 6 + + push bp + mov bp, sp + sub sp, 20h + push si + push di + mov ax, seg seg000 + mov bx, 0A0AAh + call ___InitExceptBlocks + mov ax, word_11DC2 + mov [bp+var_20], ax + mov cx, word_11DC4 + mov ax, [bp+arg_0] + sub ax, [bp+var_20] + add ax, cx + dec ax + xor dx, dx + div cx + imul cx + add ax, [bp+var_20] + push ax + push [bp+var_1E] + call ___ExitExceptBlocks + pop ax + pop di + pop si + mov sp, bp + pop bp + retf +sub_FCF8 endp + +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 26h + push si + push di + mov ax, seg seg000 + mov bx, 0A0BCh + call ___InitExceptBlocks + les bx, [bp+6] + mov ax, es:[bx+6] + add ax, [bp+12h] + sub ax, [bp+0Ch] + mov [bp-24h], ax + push ax + push cs + call near ptr sub_FCF8 + pop cx + mov [bp-26h], ax + les bx, [bp+6] + mov ax, es:[bx+8] + cmp ax, [bp-26h] + jnb short loc_FD7F + push word ptr [bp-26h] + push word ptr [bp+8] + push bx + push cs + call near ptr sub_FC96 + add sp, 6 + jmp short loc_FDEE +; --------------------------------------------------------------------------- + +loc_FD7F: ; CODE XREF: seg003:08BDj + les bx, [bp+6] + mov ax, es:[bx+8] + sub ax, [bp-26h] + +loc_FD89: + cmp ax, word_11DC6 + jbe short loc_FDEE + test byte ptr es:[bx+0Ah], 1 + jnz short loc_FDEE + mov ax, [bp-26h] + inc ax + push ax + call far ptr sub_4C1A + pop cx + mov [bp-20h], dx + mov [bp-22h], ax + les bx, [bp+6] + mov ax, es:[bx+2] + or ax, es:[bx+4] + jnz short loc_FDC0 + push ds + mov ax, 1A1Eh + push ax + call @xalloc@raise$qv ; xalloc::raise(void) + pop cx + pop cx + +loc_FDC0: ; CODE XREF: seg003:0902j + cmp word ptr [bp+0Ah], 0 + jz short loc_FDE2 + push word ptr [bp+0Ah] + les bx, [bp+6] + push word ptr es:[bx+4] + push word ptr es:[bx+2] + push word ptr [bp-20h] + push word ptr [bp-22h] + call _memcpy + add sp, 0Ah + +loc_FDE2: ; CODE XREF: seg003:0914j + les bx, [bp+6] + mov ax, [bp-26h] + mov es:[bx+8], ax + jmp short loc_FDFF +; --------------------------------------------------------------------------- + +loc_FDEE: ; CODE XREF: seg003:08CDj seg003:08DDj ... + les bx, [bp+6] + mov dx, es:[bx+4] + mov ax, es:[bx+2] + mov [bp-20h], dx + mov [bp-22h], ax + +loc_FDFF: ; CODE XREF: seg003:093Cj + les bx, [bp+6] + mov dx, es:[bx+4] + mov ax, es:[bx+2] + cmp dx, [bp-20h] + jnz short loc_FE1C + cmp ax, [bp-22h] + jnz short loc_FE1C + mov ax, [bp+12h] + cmp ax, [bp+0Ch] + jz short loc_FE4E + +loc_FE1C: ; CODE XREF: seg003:095Dj seg003:0962j + les bx, [bp+6] + mov ax, es:[bx+6] + sub ax, [bp+0Ah] + sub ax, [bp+0Ch] + push ax + mov ax, es:[bx+2] + add ax, [bp+0Ah] + add ax, [bp+0Ch] + push word ptr es:[bx+4] + push ax + mov ax, [bp-22h] + add ax, [bp+0Ah] + add ax, [bp+12h] + push word ptr [bp-20h] + push ax + call _memmove + add sp, 0Ah + +loc_FE4E: ; CODE XREF: seg003:096Aj + cmp word ptr [bp+12h], 0 + jz short loc_FE92 + mov ax, [bp+0Eh] + or ax, [bp+10h] + jz short loc_FE79 + push word ptr [bp+12h] + push word ptr [bp+10h] + push word ptr [bp+0Eh] + mov ax, [bp-22h] + add ax, [bp+0Ah] + push word ptr [bp-20h] + push ax + call _memmove + add sp, 0Ah + jmp short loc_FE92 +; --------------------------------------------------------------------------- + +loc_FE79: ; CODE XREF: seg003:09AAj + push word ptr [bp+12h] + mov ax, 20h ; ' ' + push ax + mov ax, [bp-22h] + add ax, [bp+0Ah] + push word ptr [bp-20h] + push ax + call _memset + add sp, 8 + +loc_FE92: ; CODE XREF: seg003:09A2j seg003:09C7j + les bx, [bp+6] + mov ax, [bp-24h] + mov es:[bx+6], ax + push es + les ax, [bp-22h] + mov dx, es + pop es + add ax, es:[bx+6] + mov bx, ax + mov es, dx + mov byte ptr es:[bx], 0 + les bx, [bp+6] + mov dx, es:[bx+4] + mov ax, es:[bx+2] + cmp dx, [bp-20h] + jnz short loc_FEC4 + cmp ax, [bp-22h] + jz short loc_FEE7 + +loc_FEC4: ; CODE XREF: seg003:0A0Dj + les bx, [bp+6] + push word ptr es:[bx+4] + push word ptr es:[bx+2] + call sub_4AE7 + pop cx + pop cx + les bx, [bp+6] + mov dx, [bp-20h] + mov ax, [bp-22h] + mov es:[bx+4], dx + mov es:[bx+2], ax + +loc_FEE7: ; CODE XREF: seg003:0A12j + push word ptr [bp-1Eh] + call ___ExitExceptBlocks + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word_11DBC + mov [bp-2], ax + mov ax, [bp+6] + mov word_11DBC, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word_11DBE + mov [bp-2], ax + mov ax, [bp+6] + mov word_11DBE, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word_11DC0 + mov [bp-2], ax + mov ax, [bp+6] + mov word_11DC0, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word_11DC2 + mov [bp-2], ax + mov ax, [bp+6] + mov word_11DC2, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word_11DC4 + mov [bp-2], ax + mov ax, [bp+6] + mov word_11DC4, ax + cmp word_11DC4, 0 + jnz short loc_FF8A + mov word_11DC4, 1 + +loc_FF8A: ; CODE XREF: seg003:0AD2j + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- + push bp + mov bp, sp + sub sp, 2 + push si + push di + mov ax, word_11DC6 + mov [bp-2], ax + mov ax, [bp+6] + mov word_11DC6, ax + mov ax, [bp-2] + pop di + pop si + mov sp, bp + pop bp + retf +; --------------------------------------------------------------------------- +byte_FFB0 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 3Ah, 0, 46h + ; DATA XREF: seg000:A098o seg000:A0B4o + db 0Dh dup(0), 2, 0, 2, 0, 0F7h, 0A0h + dw seg seg000 + db 5, 0, 4Ah, 0 +aStringLength_0 db 'string::lengtherror',0 + dd byte_10040 + dw 0 + db 3, 0Dh dup(0), 6, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0 + db 2Eh, 0, 3Ah, 0Dh dup(0), 2, 0, 2, 0, 44h, 0A1h + dw seg seg000 + db 5, 0, 3Eh, 0, 78h, 61h, 2 dup(6Ch), 6Fh, 63h, 2 dup(0) + db 90h, 0Bh + dw seg seg003 + db 2 dup(0), 3, 0Dh dup(0) +byte_10040 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Ch, 0, 30h + ; DATA XREF: seg003:0B3Ao + db 0Dh dup(0), 1, 0, 1, 0, 7Eh, 65h + dw seg seg000 + db 5, 0, 34h, 0, 78h, 6Dh, 73h, 67h, 0Eh dup(0), 4, 0 + db 3, 0, 26h, 0, 2 dup(0FFh), 3, 0, 2Eh, 0, 32h, 0Dh dup(0) + db 1, 0, 1, 0, 0Dh, 3 + dw seg seg003 + db 5, 0, 36h, 0, 73h, 74h, 72h, 69h, 6Eh, 67h, 0Eh dup(0) +byte_100B2 db 4, 0, 3, 0, 26h, 0, 2 dup(0FFh), 7, 0, 3Ah, 0, 46h + ; DATA XREF: seg000:A07Co + db 0Dh dup(0), 2, 0, 2, 0, 91h, 0A1h + dw seg seg000 + db 5, 0, 4Ah, 0 +aStringOutofran db 'string::outofrange',0 + db 0, 90h, 0Bh + dw seg seg003 + db 2 dup(0), 3, 0Dh dup(0) +seg003 ends + +; =========================================================================== + +; Segment type: Pure data +dseg segment para public 'DATA' use16 + assume cs:dseg +word_10100 dw 0 ; DATA XREF: sub_554+7r sub_4A16+20r ... +word_10102 dw 0 ; DATA XREF: sub_554+1Dw sub_554+32w ... +off_10104 dw offset sub_554E ; DATA XREF: sub_554+20w sub_4A87+Cr ... +off_10106 dw offset sub_4C4C ; DATA XREF: sub_554+Br sub_4A87+2r ... +word_10108 dw 4320h ; DATA XREF: sub_554+26r sub_49B3+24r ... + db 48h ; H + db 45h ; E +off_1010C dw offset sub_4B43 ; DATA XREF: sub_6CCE+77r sub_6CCE+A1r ... + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 42h ; B + db 6Fh ; o + db 72h ; r + db 6Ch ; l + db 61h ; a + db 6Eh ; n + db 64h ; d + db 20h + db 43h ; C + db 2Bh ; + + db 2Bh ; + + db 20h + db 2Dh ; - + db 20h + db 43h ; C + db 6Fh ; o + db 70h ; p + db 79h ; y + db 72h ; r + db 69h ; i + db 67h ; g + db 68h ; h + db 74h ; t + db 20h + db 31h ; 1 + db 39h ; 9 + db 39h ; 9 + db 33h ; 3 + db 20h + db 42h ; B + db 6Fh ; o + db 72h ; r + db 6Ch ; l + db 61h ; a + db 6Eh ; n + db 64h ; d + db 20h + db 49h ; I + db 6Eh ; n + db 74h ; t + db 6Ch ; l + db 2Eh ; . + db 0 + db 44h ; D + db 69h ; i + db 76h ; v + db 69h ; i + db 64h ; d + db 65h ; e + db 20h + db 65h ; e + db 72h ; r + db 72h ; r + db 6Fh ; o + db 72h ; r + db 0Dh + db 0Ah + db 0 +dword_1015A dd 0 ; DATA XREF: sub_178:loc_17Ew + ; __restorezero+4r ... +dword_1015E dd 0 ; DATA XREF: sub_178+13w + ; __restorezero+Fr ... +dword_10162 dd 0 ; DATA XREF: sub_178+20w + ; __restorezero+1Ar ... +dword_10166 dd 0 ; DATA XREF: sub_178+2Dw + ; __restorezero+25r ... +; int argc +argc dw 0 ; DATA XREF: start+137r +; char **argv +argv dw 0 ; DATA XREF: start+133r +word_1016E dw 0 ; DATA XREF: start+12Fr +; char **envp +envp dw 0 ; DATA XREF: start+12Br seg000:9E60w +word_10172 dw 0 ; DATA XREF: start+127r seg000:9E5Aw +word_10174 dw 0 ; DATA XREF: start+46w +word_10176 dw 0 ; DATA XREF: start+1Dw start+28r ... +word_10178 dw 0 ; DATA XREF: start+55w seg000:9E15r +; unsigned int segx +segx dw 0 ; DATA XREF: start+19w start+8Fr ... +word_1017C dw 0 ; DATA XREF: start+16w start+C7r ... +word_1017E dw 0 ; DATA XREF: __IOERROR:loc_41A2w + ; seg000:511Aw ... + db 0FFh + db 0FFh + db 6Eh ; n + db 0C5h ; +word_10184 dw 0 ; DATA XREF: __brk+9r __sbrk+45r +word_10186 dw 0 ; DATA XREF: start+87w __brk+5r ... +word_10188 dw 0 ; DATA XREF: sub_4E02+6Ew __sbrk+12r ... +word_1018A dw 0 ; DATA XREF: start+8Bw sub_4E02+6Aw ... +word_1018C dw 0 ; DATA XREF: sub_4E02+7Ew __brk+1Cr ... +word_1018E dw 0 ; DATA XREF: start+21w start+F5w ... +off_10190 dd a_ed00_txt ; DATA XREF: sub_A5A4+Er sub_A5A4+24r ... + ; "_ED00.TXT" +aMiko_cfg db 'MIKO.CFG',0 ; DATA XREF: sub_A545+6o +a_ed00_txt db '_ED00.TXT',0 ; DATA XREF: dseg:off_10190o +unk_101A7 db 89h ; E ; DATA XREF: _main+13o + db 0F6h ; E + db 0E3h ; E + db 59h ; Y + db 92h ; E + db 6Bh ; k + db 31h ; 1 + db 2Eh ; . + db 64h ; d + db 61h ; a + db 74h ; t + db 0 +aMiko db 'miko',0 ; DATA XREF: _main+33o +; char arg0[] +arg0 db 'op',0 ; DATA XREF: _main+92o + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 1 + db 1 + db 1 + db 1 + db 1 + db 2 + db 2 + db 2 + db 2 + db 2 + db 2 + db 3 + db 3 + db 3 + db 3 + db 3 + db 3 + db 3 + db 4 + db 4 + db 4 + db 4 + db 4 + db 4 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 6 + db 6 + db 6 + db 6 + db 6 + db 6 + db 6 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 9 + db 9 + db 9 + db 9 + db 9 + db 9 + db 0Ah + db 0Ah + db 0Ah + db 0Ah + db 0Ah + db 0Ah + db 0Ah + db 0Bh + db 0Bh + db 0Bh + db 0Bh + db 0Bh + db 0Bh + db 0Bh + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Ch + db 0Dh + db 0Dh + db 0Dh + db 0Dh + db 0Dh + db 0Dh + db 0Dh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Fh + db 0Fh + db 0Fh + db 0Fh + db 0Fh + db 0Fh + db 0Fh + db 10h + db 10h + db 10h + db 10h + db 10h + db 10h + db 10h + db 11h + db 11h + db 11h + db 11h + db 11h + db 11h + db 11h + db 11h + db 12h + db 12h + db 12h + db 12h + db 12h + db 12h + db 12h + db 13h + db 13h + db 13h + db 13h + db 13h + db 13h + db 13h + db 13h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 14h + db 15h + db 15h + db 15h + db 15h + db 15h + db 15h + db 15h + db 15h + db 15h + db 16h + db 16h + db 16h + db 16h + db 16h + db 16h + db 16h + db 16h + db 17h + db 17h + db 17h + db 17h + db 17h + db 17h + db 17h + db 17h + db 17h + db 18h + db 18h + db 18h + db 18h + db 18h + db 18h + db 18h + db 18h + db 18h + db 19h + db 19h + db 19h + db 19h + db 19h + db 19h + db 19h + db 19h + db 19h + db 19h + db 1Ah + db 1Ah + db 1Ah + db 1Ah + db 1Ah + db 1Ah + db 1Ah + db 1Ah + db 1Ah + db 1Bh + db 1Bh + db 1Bh + db 1Bh + db 1Bh + db 1Bh + db 1Bh + db 1Bh + db 1Bh + db 1Bh + db 1Ch + db 1Ch + db 1Ch + db 1Ch + db 1Ch + db 1Ch + db 1Ch + db 1Ch + db 1Ch + db 1Ch + db 1Ch + db 1Dh + db 1Dh + db 1Dh + db 1Dh + db 1Dh + db 1Dh + db 1Dh + db 1Dh + db 1Dh + db 1Dh + db 1Dh + db 1Eh + db 1Eh + db 1Eh + db 1Eh + db 1Eh + db 1Eh + db 1Eh + db 1Eh + db 1Eh + db 1Eh + db 1Eh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 1Fh + db 20h + db 20h + db 20h + db 20h + db 20h + db 20h + db 0 + db 0 +word_102BE dw 0 ; DATA XREF: seg000:050Ar +word_102C0 dw 0 ; DATA XREF: seg000:loc_50Er + ; seg000:0515r + db 0 + db 0 + db 42h ; B + db 46h ; F + db 4Eh ; N + db 54h ; T + db 1Ah + db 0 +word_102CA dw 0 ; DATA XREF: sub_BCE:loc_BE3r + ; sub_DCC+2Dw ... +word_102CC dw 27Fh ; DATA XREF: sub_BCE+19r sub_DCC+30w ... +word_102CE dw 27Fh ; DATA XREF: sub_DCC+36w sub_EE4+12r ... +word_102D0 dw 0 ; DATA XREF: sub_BCE:loc_C0Cr + ; sub_C9E+3r ... +word_102D2 dw 18Fh ; DATA XREF: sub_BCE+42r sub_C9E+1Fr ... +word_102D4 dw 18Fh ; DATA XREF: sub_DCC+6Bw sub_12B4+40w ... +word_102D6 dw 0A800h ; DATA XREF: sub_BCE+66r sub_C9E+19r ... +word_102D8 dw 7CB0h ; DATA XREF: sub_DCC+74w sub_12B4+46w + dw 0 + db 80h ; + db 0 + db 0C0h ; + db 0 + db 0E0h ; E + db 0 + db 0F0h ; E + db 0 + db 0F8h ; E + db 0 + db 0FCh ; E + db 0 + db 0FEh ; + db 0 + db 0FFh + db 0 + db 0FFh + db 80h ; + db 0FFh + db 0C0h ; + db 0FFh + db 0E0h ; E + db 0FFh + db 0F0h ; E + db 0FFh + db 0F8h ; E + db 0FFh + db 0FCh ; E + db 0FFh + db 0FEh ; + db 0FFh + db 0FFh +word_102FC dw 0 ; DATA XREF: sub_9B2+5r sub_9B2+26r ... +word_102FE dw 0FFFFh ; DATA XREF: sub_886+6r sub_886+1Fw ... +byte_10300 db 0 ; DATA XREF: sub_BAE+4r + db 0 + db 0Dh + db 16h + db 20h + db 22h ; " + db 27h ; ' + db 2Ah ; * + db 2Eh ; . + db 36h ; 6 + db 3Fh ; ? + db 0 + db 24h ; $ + db 49h ; I + db 42h ; B + db 4Dh ; M + db 41h ; A + db 44h ; D + db 53h ; S + db 50h ; P + db 0 + db 24h ; $ + db 49h ; I + db 42h ; B + db 4Dh ; M + db 41h ; A + db 46h ; F + db 4Eh ; N + db 54h ; T + db 0 +dword_1031E dd 0 ; DATA XREF: sub_11FE-8Cr +word_10322 dw 0A800h ; DATA XREF: sub_DCC+7Er sub_12B4+9w ... +word_10324 dw 3E80h ; DATA XREF: sub_12B4+Fw sub_1302+14r ... +word_10326 dw 190h ; DATA XREF: sub_DCC+4Fr sub_12B4+3Cw ... +word_10328 dw 50h ; DATA XREF: sub_DCC+19r sub_DCC+6Er +word_1032A dw 0 ; DATA XREF: sub_12B4+2Dw sub_1A2E+16r + db 55h ; U + db 0 +word_1032E dw 0 ; DATA XREF: sub_2E46:loc_2E6Bw + ; sub_F104+E9r + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_10336 dw 0 ; DATA XREF: sub_11FE:loc_1061w + ; sub_11FE:loc_11B4w ... +word_10338 dw 64h ; DATA XREF: sub_600+8w + ; sub_600:loc_627w ... + db 0 + db 0 + db 0 + db 0 + db 0 + db 0FFh + db 0FFh + db 0 + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0 + db 0FFh + db 0FFh + db 0FFh + db 0FFh + db 0 + db 0FFh + db 0FFh + db 0FFh + db 77h ; w + db 77h ; w + db 77h ; w + db 0 + db 0 + db 0AAh ; + db 0AAh ; + db 0 + db 0 + db 0AAh ; + db 0 + db 0AAh ; + db 0 + db 0AAh ; + db 0 + db 0 + db 0AAh ; + db 0AAh ; + db 0AAh ; + db 0AAh ; + db 0 + db 0AAh ; + db 0AAh ; + db 0AAh ; +word_1036A dw 0 ; DATA XREF: seg000:1BB5r + dd 0 +word_10370 dw 200h ; DATA XREF: sub_682+9r sub_682+2Fr ... +byte_10372 db 0 ; DATA XREF: sub_682:loc_6BEw + ; sub_682+48w + db 0 + db 0 + db 0 +dword_10376 dd 1 ; DATA XREF: sub_1DF8+Cr sub_1DF8+15r ... + dw 0 + db 6 + db 0 + db 0Dh + db 0 + db 13h + db 0 + db 19h + db 0 + db 1Fh + db 0 + db 26h ; & + db 0 + db 2Ch ; , + db 0 + db 32h ; 2 + db 0 + db 38h ; 8 + db 0 + db 3Eh ; > + db 0 + db 44h ; D + db 0 + db 4Ah ; J + db 0 + db 50h ; P + db 0 + db 56h ; V + db 0 + db 5Ch ; \ + db 0 + db 62h ; b + db 0 + db 68h ; h + db 0 + db 6Dh ; m + db 0 + db 73h ; s + db 0 + db 79h ; y + db 0 + db 7Eh ; ~ + db 0 + db 84h ; E + db 0 + db 89h ; E + db 0 + db 8Eh ; E + db 0 + db 93h ; E + db 0 + db 98h ; E + db 0 + db 9Dh ; E + db 0 + db 0A2h ; + db 0 + db 0A7h ; + db 0 + db 0ACh ; + db 0 + db 0B1h ; + db 0 + db 0B5h ; + db 0 + db 0B9h ; + db 0 + db 0BEh ; + db 0 + db 0C2h ; + db 0 + db 0C6h ; + db 0 + db 0CAh ; + db 0 + db 0CEh ; + db 0 + db 0D1h ; + db 0 + db 0D5h ; + db 0 + db 0D8h ; + db 0 + db 0DCh ; + db 0 + db 0DFh ; + db 0 + db 0E2h ; E + db 0 + db 0E5h ; E + db 0 + db 0E7h ; E + db 0 + db 0EAh ; E + db 0 + db 0EDh ; E + db 0 + db 0EFh ; E + db 0 + db 0F1h ; E + db 0 + db 0F3h ; E + db 0 + db 0F5h ; E + db 0 + db 0F7h ; E + db 0 + db 0F8h ; E + db 0 + db 0FAh ; E + db 0 + db 0FBh ; E + db 0 + db 0FCh ; E + db 0 + db 0FDh ; + db 0 + db 0FEh ; + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0 + db 1 + db 0 + db 1 + db 0 + db 1 + db 0 + db 1 + db 0 + db 1 + db 0FFh + db 0 + db 0FFh + db 0 + db 0FEh ; + db 0 + db 0FDh ; + db 0 + db 0FCh ; E + db 0 + db 0FBh ; E + db 0 + db 0FAh ; E + db 0 + db 0F8h ; E + db 0 + db 0F7h ; E + db 0 + db 0F5h ; E + db 0 + db 0F3h ; E + db 0 + db 0F1h ; E + db 0 + db 0EFh ; E + db 0 + db 0EDh ; E + db 0 + db 0EAh ; E + db 0 + db 0E7h ; E + db 0 + db 0E5h ; E + db 0 + db 0E2h ; E + db 0 + db 0DFh ; + db 0 + db 0DCh ; + db 0 + db 0D8h ; + db 0 + db 0D5h ; + db 0 + db 0D1h ; + db 0 + db 0CEh ; + db 0 + db 0CAh ; + db 0 + db 0C6h ; + db 0 + db 0C2h ; + db 0 + db 0BEh ; + db 0 + db 0B9h ; + db 0 + db 0B5h ; + db 0 + db 0B1h ; + db 0 + db 0ACh ; + db 0 + db 0A7h ; + db 0 + db 0A2h ; + db 0 + db 9Dh ; E + db 0 + db 98h ; E + db 0 + db 93h ; E + db 0 + db 8Eh ; E + db 0 + db 89h ; E + db 0 + db 84h ; E + db 0 + db 7Eh ; ~ + db 0 + db 79h ; y + db 0 + db 73h ; s + db 0 + db 6Dh ; m + db 0 + db 68h ; h + db 0 + db 62h ; b + db 0 + db 5Ch ; \ + db 0 + db 56h ; V + db 0 + db 50h ; P + db 0 + db 4Ah ; J + db 0 + db 44h ; D + db 0 + db 3Eh ; > + db 0 + db 38h ; 8 + db 0 + db 32h ; 2 + db 0 + db 2Ch ; , + db 0 + db 26h ; & + db 0 + db 1Fh + db 0 + db 19h + db 0 + db 13h + db 0 + db 0Dh + db 0 + db 6 + db 0 + db 0 + db 0 + db 0FAh ; E + db 0FFh + db 0F3h ; E + db 0FFh + db 0EDh ; E + db 0FFh + db 0E7h ; E + db 0FFh + db 0E1h ; E + db 0FFh + db 0DAh ; + db 0FFh + db 0D4h ; + db 0FFh + db 0CEh ; + db 0FFh + db 0C8h ; + db 0FFh + db 0C2h ; + db 0FFh + db 0BCh ; + db 0FFh + db 0B6h ; + db 0FFh + db 0B0h ; + db 0FFh + db 0AAh ; + db 0FFh + db 0A4h ; + db 0FFh + db 9Eh ; E + db 0FFh + db 98h ; E + db 0FFh + db 93h ; E + db 0FFh + db 8Dh ; E + db 0FFh + db 87h ; E + db 0FFh + db 82h ; E + db 0FFh + db 7Ch ; | + db 0FFh + db 77h ; w + db 0FFh + db 72h ; r + db 0FFh + db 6Dh ; m + db 0FFh + db 68h ; h + db 0FFh + db 63h ; c + db 0FFh + db 5Eh ; ^ + db 0FFh + db 59h ; Y + db 0FFh + db 54h ; T + db 0FFh + db 4Fh ; O + db 0FFh + db 4Bh ; K + db 0FFh + db 47h ; G + db 0FFh + db 42h ; B + db 0FFh + db 3Eh ; > + db 0FFh + db 3Ah ; : + db 0FFh + db 36h ; 6 + db 0FFh + db 32h ; 2 + db 0FFh + db 2Fh ; / + db 0FFh + db 2Bh ; + + db 0FFh + db 28h ; ( + db 0FFh + db 24h ; $ + db 0FFh + db 21h ; ! + db 0FFh + db 1Eh + db 0FFh + db 1Bh + db 0FFh + db 19h + db 0FFh + db 16h + db 0FFh + db 13h + db 0FFh + db 11h + db 0FFh + db 0Fh + db 0FFh + db 0Dh + db 0FFh + db 0Bh + db 0FFh + db 9 + db 0FFh + db 8 + db 0FFh + db 6 + db 0FFh + db 5 + db 0FFh + db 4 + db 0FFh + db 3 + db 0FFh + db 2 + db 0FFh + db 1 + db 0FFh + db 1 + db 0FFh + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0FFh + db 1 + db 0FFh + db 1 + db 0FFh + db 2 + db 0FFh + db 3 + db 0FFh + db 4 + db 0FFh + db 5 + db 0FFh + db 6 + db 0FFh + db 8 + db 0FFh + db 9 + db 0FFh + db 0Bh + db 0FFh + db 0Dh + db 0FFh + db 0Fh + db 0FFh + db 11h + db 0FFh + db 13h + db 0FFh + db 16h + db 0FFh + db 19h + db 0FFh + db 1Bh + db 0FFh + db 1Eh + db 0FFh + db 21h ; ! + db 0FFh + db 24h ; $ + db 0FFh + db 28h ; ( + db 0FFh + db 2Bh ; + + db 0FFh + db 2Fh ; / + db 0FFh + db 32h ; 2 + db 0FFh + db 36h ; 6 + db 0FFh + db 3Ah ; : + db 0FFh + db 3Eh ; > + db 0FFh + db 42h ; B + db 0FFh + db 47h ; G + db 0FFh + db 4Bh ; K + db 0FFh + db 4Fh ; O + db 0FFh + db 54h ; T + db 0FFh + db 59h ; Y + db 0FFh + db 5Eh ; ^ + db 0FFh + db 63h ; c + db 0FFh + db 68h ; h + db 0FFh + db 6Dh ; m + db 0FFh + db 72h ; r + db 0FFh + db 77h ; w + db 0FFh + db 7Ch ; | + db 0FFh + db 82h ; E + db 0FFh + db 87h ; E + db 0FFh + db 8Dh ; E + db 0FFh + db 93h ; E + db 0FFh + db 98h ; E + db 0FFh + db 9Eh ; E + db 0FFh + db 0A4h ; + db 0FFh + db 0AAh ; + db 0FFh + db 0B0h ; + db 0FFh + db 0B6h ; + db 0FFh + db 0BCh ; + db 0FFh + db 0C2h ; + db 0FFh + db 0C8h ; + db 0FFh + db 0CEh ; + db 0FFh + db 0D4h ; + db 0FFh + db 0DAh ; + db 0FFh + db 0E1h ; E + db 0FFh + db 0E7h ; E + db 0FFh + db 0EDh ; E + db 0FFh + db 0F3h ; E + db 0FFh + db 0FAh ; E + db 0FFh + db 0 + db 0 + db 6 + db 0 + db 0Dh + db 0 + db 13h + db 0 + db 19h + db 0 + db 1Fh + db 0 + db 26h ; & + db 0 + db 2Ch ; , + db 0 + db 32h ; 2 + db 0 + db 38h ; 8 + db 0 + db 3Eh ; > + db 0 + db 44h ; D + db 0 + db 4Ah ; J + db 0 + db 50h ; P + db 0 + db 56h ; V + db 0 + db 5Ch ; \ + db 0 + db 62h ; b + db 0 + db 68h ; h + db 0 + db 6Dh ; m + db 0 + db 73h ; s + db 0 + db 79h ; y + db 0 + db 7Eh ; ~ + db 0 + db 84h ; E + db 0 + db 89h ; E + db 0 + db 8Eh ; E + db 0 + db 93h ; E + db 0 + db 98h ; E + db 0 + db 9Dh ; E + db 0 + db 0A2h ; + db 0 + db 0A7h ; + db 0 + db 0ACh ; + db 0 + db 0B1h ; + db 0 + db 0B5h ; + db 0 + db 0B9h ; + db 0 + db 0BEh ; + db 0 + db 0C2h ; + db 0 + db 0C6h ; + db 0 + db 0CAh ; + db 0 + db 0CEh ; + db 0 + db 0D1h ; + db 0 + db 0D5h ; + db 0 + db 0D8h ; + db 0 + db 0DCh ; + db 0 + db 0DFh ; + db 0 + db 0E2h ; E + db 0 + db 0E5h ; E + db 0 + db 0E7h ; E + db 0 + db 0EAh ; E + db 0 + db 0EDh ; E + db 0 + db 0EFh ; E + db 0 + db 0F1h ; E + db 0 + db 0F3h ; E + db 0 + db 0F5h ; E + db 0 + db 0F7h ; E + db 0 + db 0F8h ; E + db 0 + db 0FAh ; E + db 0 + db 0FBh ; E + db 0 + db 0FCh ; E + db 0 + db 0FDh ; + db 0 + db 0FEh ; + db 0 + db 0FFh + db 0 + db 0FFh + db 0 + db 0 + db 1 + db 0 + db 1 + db 0 + db 0 +word_105FC dw 0A000h ; DATA XREF: sub_121A+13r sub_125E+13r ... + db 50h ; P + db 0 +word_10600 dw 1 ; DATA XREF: sub_1392+2Er +unk_10602 db 0 ; DATA XREF: seg000:23BAr + db 0 +word_10604 dw 0 ; DATA XREF: seg000:23ACr +word_10606 dw 0 ; DATA XREF: sub_2320+Ew sub_2320+16w ... +byte_10608 db 0 ; DATA XREF: sub_2320+24r sub_2320+4Cw ... + db 90h ; E + db 0FFh + db 7Fh ;  + db 3Fh ; ? + db 1Fh + db 0Fh + db 7 + db 3 + db 1 +word_10612 dw 0 ; DATA XREF: sub_2238r sub_2512+6w ... +word_10614 dw 0 ; DATA XREF: sub_24F0+15w sub_2512+1Bw ... +word_10616 dw 0 ; DATA XREF: sub_682+3w sub_1446+DFw ... +word_10618 dw 100h ; DATA XREF: sub_2538+8r + db 0 + db 0 + db 0 + db 0 + db 0 +byte_1061F db 0 ; DATA XREF: sub_2894+24r + ; sub_2894:loc_28DAr + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_10626 dw 0 ; DATA XREF: sub_2894+6Er +word_10628 dw 0 ; DATA XREF: sub_2894+6Br + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_10636 dw 0 ; DATA XREF: sub_2894+32r + db 0 + db 0 +word_1063A dw 0 ; DATA XREF: sub_2730r sub_2730+7r ... +word_1063C dw 0 ; DATA XREF: sub_2730:loc_274Dr + ; sub_2774+5r ... +word_1063E dw 0 ; DATA XREF: sub_2730+24r sub_2730+2Br +word_10640 dw 1 ; DATA XREF: seg000:3215r seg000:321Fw ... + db 48h ; H + db 57h ; W + db 0C0h ; + db 4Dh ; M + db 0D8h ; + db 92h ; E + db 0D8h ; + db 82h ; E + db 88h ; E + db 74h ; t + db 8 + db 6Eh ; n + db 0F8h ; E + db 61h ; a + db 64h ; d + db 0 + db 68h ; h + db 52h ; R + db 64h ; d + db 0 + db 0A0h ; + db 8Ah ; E + db 78h ; x + db 7Bh ; { + db 64h ; d + db 0 + db 0C8h ; + db 67h ; g + db 68h ; h + db 5Ch ; \ + db 64h ; d + db 0 + db 68h ; h + db 5Ch ; \ + db 68h ; h + db 52h ; R + db 64h ; d + db 0 + db 0A0h ; + db 8Ah ; E + db 78h ; x + db 7Bh ; { + db 64h ; d + db 0 + db 0C8h ; + db 67h ; g + db 64h ; d + db 0 + db 40h ; @ + db 0 + db 20h + db 0 + db 20h + db 0 + db 10h + db 0 + db 10h + db 0 + db 10h + db 0 + db 10h + db 0 + db 8 + db 0 + db 8 + db 0 + db 8 + db 0 + db 8 + db 0 + db 8 + db 0 + db 8 + db 0 + db 8 + db 0 + db 8 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 4 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 2 + db 0 + db 1 + db 0 +word_106F2 dw 0 ; DATA XREF: sub_315A+Cw sub_315A+31r ... +word_106F4 dw 0 ; DATA XREF: sub_315A+28r seg000:321Br ... +word_106F6 dw 0 ; DATA XREF: sub_3528+12w +word_106F8 dw 0 ; DATA XREF: seg000:324Cr seg000:3266w ... +word_106FA dw 0 ; DATA XREF: sub_3556+ABw +word_106FC dw 0 ; DATA XREF: sub_331E+6r + ; sub_331E:loc_33C8r ... +word_106FE dw 0 ; DATA XREF: sub_331E+CAw sub_331E+E1r ... +word_10700 dw 0 ; DATA XREF: seg000:325Fr sub_3556+BDw +word_10702 dw 0 ; DATA XREF: seg000:323Cw seg000:3240r ... +word_10704 dw 0 ; DATA XREF: sub_3556+2Ew + ; sub_3556+139r +word_10706 dw 0 ; DATA XREF: sub_3556+C9w +word_10708 dw 0 ; DATA XREF: sub_3556+9Fw +word_1070A dw 0 ; DATA XREF: sub_31C8+6r sub_3556+A5w + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_1072C dw 0 ; DATA XREF: sub_331E+FFr + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_1074E dw 0 ; DATA XREF: seg000:3280r seg000:328Fw ... +word_10750 dw 0 ; DATA XREF: sub_301A+64r sub_301A+CCr ... +word_10752 dw 0 ; DATA XREF: sub_344C+25w sub_3496r ... +word_10754 dw 0 ; DATA XREF: sub_3556+EFw +word_10756 dw 0 ; DATA XREF: sub_344C:loc_3465r + ; sub_3556+F5w +word_10758 dw 0 ; DATA XREF: sub_3556+Dr + ; sub_3556:loc_36EBw ... +word_1075A dw 0 ; DATA XREF: sub_3528+16r + ; sub_3556+126w +word_1075C dw 0 ; DATA XREF: sub_3528+19r + ; sub_3556+122w + dw 0 + db 20h + db 10h + db 2 + db 12h + db 12h + db 40h ; @ + db 10h + db 11h + db 2 + db 12h + db 20h + db 20h + db 20h + db 20h + db 0 + db 0 + db 0 + db 24h ; $ + db 10h + db 4 + db 10h + db 8 + db 30h ; 0 + db 50h ; P + db 11h + db 4 + db 0Bh + db 50h ; P + db 50h ; P + db 50h ; P + db 20h + db 0 + db 71h ; q + db 0 + db 6Bh ; k + db 0 + db 78h ; x + db 0 + db 72h ; r + db 0 + db 89h ; E + db 0 + db 1Fh + db 0 + db 19h + db 0 + db 26h ; & + db 0 + db 20h + db 0 + db 37h ; 7 + db 0 + db 9Ch ; E + db 6 + db 0A4h ; + db 6 + db 0ACh ; + db 6 + db 0B4h ; + db 6 + db 88h ; E + db 88h ; E + db 0 + db 0 + db 22h ; " + db 22h ; " + db 0 + db 0 + db 88h ; E + db 88h ; E + db 44h ; D + db 44h ; D + db 22h ; " + db 22h ; " + db 11h + db 11h + db 0AAh ; + db 0AAh ; + db 44h ; D + db 44h ; D + db 0AAh ; + db 0AAh ; + db 11h + db 11h + db 0AAh ; + db 0AAh ; + db 55h ; U + db 55h ; U + db 0AAh ; + db 0AAh ; + db 55h ; U + db 55h ; U +word_107BC dw 2 ; DATA XREF: sub_A9C3+E9w sub_AFD6+24w ... +word_107BE dw 10h ; DATA XREF: seg002:0190r +byte_107C0 db 0FFh ; DATA XREF: sub_EAD4+5w sub_EAE0+Dr ... +byte_107C1 db 0 ; DATA XREF: sub_EAD4w sub_EAE0+31w ... +word_107C2 dw 0 ; DATA XREF: sub_EB66+2r sub_EB66+11w ... +word_107C4 dw 0 ; DATA XREF: sub_EB66+1Cw sub_EB66+49r ... +word_107C6 dw 0 ; DATA XREF: sub_EB66+27w sub_EB66+42r ... +word_107C8 dw 0 ; DATA XREF: sub_EB66+32w sub_EB66+3Br ... +word_107CA dw 4E20h ; DATA XREF: _main+Cw sub_F0B4+3r + db 65h ; e + db 66h ; f + db 63h ; c + db 0 +dword_107D0 dd 6Dh ; DATA XREF: sub_ED60+88r + db 6Dh ; m + db 32h ; 2 + db 0 + db 6Dh ; m + db 6Dh ; m + db 64h ; d + db 0 +byte_107DB db 0 ; DATA XREF: sub_E81A+Dw + ; sub_E878:loc_E8C4w ... +byte_107DC db 0 ; DATA XREF: sub_E81A+Aw sub_E878+22w ... +byte_107DD db 0 ; DATA XREF: sub_E81A+7w sub_E848+23w ... + dw 0 + db 11h + db 11h + db 0 + db 0 + db 44h ; D + db 44h ; D + db 88h ; E + db 88h ; E + db 11h + db 11h + db 22h ; " + db 22h ; " + db 44h ; D + db 44h ; D + db 0AAh ; + db 0AAh ; + db 55h ; U + db 55h ; U + db 0AAh ; + db 0AAh ; + db 55h ; U + db 55h ; U + db 0EEh ; E + db 0EEh ; E + db 77h ; w + db 77h ; w + db 0BBh ; + db 0BBh ; + db 0DDh ; + db 0DDh ; + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +dword_1081E dd 0A8000000h ; DATA XREF: sub_A866+52r sub_A866+61r + db 0 + db 0 + db 0 + db 0B0h ; + db 0 + db 0 + db 0 + db 0B8h ; + db 0 + db 0 + db 0 + db 0E0h ; E +byte_1082E db 0 ; DATA XREF: seg002:0AA8w seg002:0B02w ... + db 0 +byte_10830 db 0 ; DATA XREF: sub_A9C3+575r + ; sub_A9C3+58Dr ... + db 0 + db 88h ; E + db 88h ; E + db 0 + db 0 + db 22h ; " + db 22h ; " + db 0 + db 0 + db 88h ; E + db 88h ; E + db 44h ; D + db 44h ; D + db 22h ; " + db 22h ; " + db 11h + db 11h + db 0AAh ; + db 0AAh ; + db 44h ; D + db 44h ; D + db 0AAh ; + db 0AAh ; + db 11h + db 11h + db 0AAh ; + db 0AAh ; + db 44h ; D + db 44h ; D + db 0AAh ; + db 0AAh ; + db 55h ; U + db 55h ; U + db 0FFh + db 0FFh + db 0FFh + db 0FFh + db 0FFh + db 0FFh + db 0FFh + db 0FFh + db 20h + db 20h + db 0 + db 0 +byte_1085E db 0 ; DATA XREF: sub_B37C+Dr sub_B37C+13r ... + db 0 + dd aExed01_pi ; "EXED01.pi" + dd aExed07_pi ; "EXED07.pi" + dd aExed08_pi ; "EXED08.pi" + dd aExed09_pi ; "EXED09.pi" + dd aExed10_pi ; "EXED10.pi" + dd aExed16_pi ; "EXED16.pi" + dd aExed15_pi ; "EXED15.pi" + dd 0 + dd aExed01_pi_0 ; "EXED01.pi" + dd aExed11_pi ; "EXED11.pi" + dd aExed11_pi_0 ; "EXED11.pi" + dd aExed11_pi_1 ; "EXED11.pi" + dd aExed03_pi ; "EXED03.pi" + dd aExed16_pi_0 ; "EXED16.pi" + dd aExed15_pi_0 ; "EXED15.pi" + dd 0 + dd aExed01_pi_1 ; "EXED01.pi" + dd aExed12_pi ; "EXED12.pi" + dd aExed12_pi_0 ; "EXED12.pi" + dd aExed13_pi ; "EXED13.pi" + dd aExed04_pi ; "EXED04.pi" + dd aExed16_pi_1 ; "EXED16.pi" + dd aExed15_pi_1 ; "EXED15.pi" + dd 0 + dd aExed01_pi_2 ; "EXED01.pi" + dd aExed14_pi ; "EXED14.pi" + dd aExed05_pi ; "EXED05.pi" + dd aExed14_pi_0 ; "EXED14.pi" + dd aExed06_pi ; "EXED06.pi" + dd aExed16_pi_2 ; "EXED16.pi" + dd aExed15_pi_2 ; "EXED15.pi" + dd 0 + db 1 + db 0 + db 0 + db 0 + db 1 + db 0 + db 3 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1 + db 0 + db 0 + db 0 + db 1 + db 0 + db 2 + db 0 + db 1 + db 0 + db 1 + db 0 + db 1 + db 0 + db 0 + db 0 + db 1 + db 0 + db 2 + db 0 + db 0 + db 0 + db 1 + db 0 + db 0 + db 0 + db 2 + db 0 + db 2 + db 0 + db 0 + db 0 + db 1 + db 0 + db 0 + db 0 + db 0 + db 0 + db 2 + db 0 + db 0 + db 0 + db 3 + db 0 + db 3 + db 0 + db 0 + db 0 +off_10920 dd aProjectOfTouho ; DATA XREF: sub_B1B5+11r sub_B1B5+Dr + dd aNo_1Buumx ; " Project of TOUHOU "... + dd aReimuHakureiSh + dd aNo_2Buumx + dd aReimuHakurei_0 + dd aRikaEngineer + dd aMeiraSamurai + dd aMarisaKirisame + dd aMimaGhost + dd aNo_3Buumx + dd aReimuHakurei_1 + dd aMarisaKirisa_0 + dd aMimaGhost_0 + dd aEllenWitch + dd aKotohimePrince + dd aKanaAnaberalPo + dd aRikakoAsakuraS + dd aTiyuriKitashir + dd aYumemiOkazakiP + dd aNo_4Buumx + dd aReimuHakurei_2 + dd aMarisaKirisa_1 + dd aOrangeOriental + dd aKurumiVampire + dd aElliyGateKeepe + dd aYukaOrientalDe + dd aMugetuMaid + dd aGengetuDemon + dd aNo_5Buumx + dd aReimuHakurei_3 + dd aMarisaKirisa_2 + dd aMimaGhost_1 + dd aYukaOriental_0 + dd aSaraGateKeeper + dd aLuizeDemon + dd aAliceWitchOfDe + dd aYukiBlackWitch + dd aMaiWhiteWitch + dd aYumekoMaid + dd aShinkiGoddessO + dd aProgramerZunJu + dd aGraphicsZunJun + dd aMusicComposeZu + dd aP_m_d_ProgramM + dd aSpecialThanksA + dd aAmusementMaker + dd aAndAllTestPlay + dw 1 + dw 2 + dw 6 + dw 0Ah + dw 9 + dw 0Ch + dw 7 + db 0 + db 0 +word_109EC dw 0 ; DATA XREF: sub_B1B5+2Er sub_B1B5+9Aw ... +aExed01_pi db 'EXED01.pi',0 ; DATA XREF: dseg:0760o +aExed07_pi db 'EXED07.pi',0 ; DATA XREF: dseg:0764o +aExed08_pi db 'EXED08.pi',0 ; DATA XREF: dseg:0768o +aExed09_pi db 'EXED09.pi',0 ; DATA XREF: dseg:076Co +aExed10_pi db 'EXED10.pi',0 ; DATA XREF: dseg:0770o +aExed16_pi db 'EXED16.pi',0 ; DATA XREF: dseg:0774o +aExed15_pi db 'EXED15.pi',0 ; DATA XREF: dseg:0778o +aExed01_pi_0 db 'EXED01.pi',0 ; DATA XREF: dseg:0780o +aExed11_pi db 'EXED11.pi',0 ; DATA XREF: dseg:0784o +aExed11_pi_0 db 'EXED11.pi',0 ; DATA XREF: dseg:0788o +aExed11_pi_1 db 'EXED11.pi',0 ; DATA XREF: dseg:078Co +aExed03_pi db 'EXED03.pi',0 ; DATA XREF: dseg:0790o +aExed16_pi_0 db 'EXED16.pi',0 ; DATA XREF: dseg:0794o +aExed15_pi_0 db 'EXED15.pi',0 ; DATA XREF: dseg:0798o +aExed01_pi_1 db 'EXED01.pi',0 ; DATA XREF: dseg:07A0o +aExed12_pi db 'EXED12.pi',0 ; DATA XREF: dseg:07A4o +aExed12_pi_0 db 'EXED12.pi',0 ; DATA XREF: dseg:07A8o +aExed13_pi db 'EXED13.pi',0 ; DATA XREF: dseg:07ACo +aExed04_pi db 'EXED04.pi',0 ; DATA XREF: dseg:07B0o +aExed16_pi_1 db 'EXED16.pi',0 ; DATA XREF: dseg:07B4o +aExed15_pi_1 db 'EXED15.pi',0 ; DATA XREF: dseg:07B8o +aExed01_pi_2 db 'EXED01.pi',0 ; DATA XREF: dseg:07C0o +aExed14_pi db 'EXED14.pi',0 ; DATA XREF: dseg:07C4o +aExed05_pi db 'EXED05.pi',0 ; DATA XREF: dseg:07C8o +aExed14_pi_0 db 'EXED14.pi',0 ; DATA XREF: dseg:07CCo +aExed06_pi db 'EXED06.pi',0 ; DATA XREF: dseg:07D0o +aExed16_pi_2 db 'EXED16.pi',0 ; DATA XREF: dseg:07D4o +aExed15_pi_2 db 'EXED15.pi',0 ; DATA XREF: dseg:07D8o +aProjectOfTouho db ' Project of TOUHOU All Cast',0 + ; DATA XREF: dseg:off_10920o +aNo_1Buumx db 'No.1 uˈٓ`v ` Highly Responsive to Prayers 1996,1997',0 + ; DATA XREF: dseg:off_10920o +aReimuHakureiSh db ' Reimu Hakurei ( Shaman )',0 + ; DATA XREF: dseg:off_10920o +aNo_2Buumx db 'No.2 u^v ` The story of eastern wonderland 1997',0 + ; DATA XREF: dseg:off_10920o +aReimuHakurei_0 db ' Reimu Hakurei ( Shaman )',0 + ; DATA XREF: dseg:off_10920o +aRikaEngineer db ' Rika ( Engineer )',0 + ; DATA XREF: dseg:off_10920o +aMeiraSamurai db ' Meira ( Samurai )',0 + ; DATA XREF: dseg:off_10920o +aMarisaKirisame db ' Marisa Kirisame ( Sorceress )',0 + ; DATA XREF: dseg:off_10920o +aMimaGhost db ' Mima ( Ghost )',0 + ; DATA XREF: dseg:off_10920o +aNo_3Buumx db 'No.3 uv ` The Phantasmagoria of Dim.Dream... 1997',0 + ; DATA XREF: dseg:off_10920o +aReimuHakurei_1 db ' Reimu Hakurei ( Shaman )',0 + ; DATA XREF: dseg:off_10920o +aMarisaKirisa_0 db ' Marisa Kirisame ( Sorceress )',0 + ; DATA XREF: dseg:off_10920o +aMimaGhost_0 db ' Mima ( Ghost )',0 + ; DATA XREF: dseg:off_10920o +aEllenWitch db ' Ellen ( Witch )',0 + ; DATA XREF: dseg:off_10920o +aKotohimePrince db ' Kotohime ( Princess )',0 + ; DATA XREF: dseg:off_10920o +aKanaAnaberalPo db ' Kana Anaberal ( Poltergeist )',0 + ; DATA XREF: dseg:off_10920o +aRikakoAsakuraS db ' Rikako Asakura ( Scientist )',0 + ; DATA XREF: dseg:off_10920o +aTiyuriKitashir db ' Tiyuri Kitashirakawa ( Assistant professor )',0 + ; DATA XREF: dseg:off_10920o +aYumemiOkazakiP db ' Yumemi Okazaki ( Professor )',0 + ; DATA XREF: dseg:off_10920o +aNo_4Buumx db 'No.4 uzv ` Lotus Land Story 1998',0 + ; DATA XREF: dseg:off_10920o +aReimuHakurei_2 db ' Reimu Hakurei ( Shaman )',0 + ; DATA XREF: dseg:off_10920o +aMarisaKirisa_1 db ' Marisa Kirisame ( Sorceress )',0 + ; DATA XREF: dseg:off_10920o +aOrangeOriental db ' Orange ( Oriental demon )',0 + ; DATA XREF: dseg:off_10920o +aKurumiVampire db ' Kurumi ( Vampire )',0 + ; DATA XREF: dseg:off_10920o +aElliyGateKeepe db ' Elliy ( Gate keeper )',0 + ; DATA XREF: dseg:off_10920o +aYukaOrientalDe db ' Yuka ( Oriental demon )',0 + ; DATA XREF: dseg:off_10920o +aMugetuMaid db ' Mugetu ( Maid )',0 + ; DATA XREF: dseg:off_10920o +aGengetuDemon db ' Gengetu ( Demon )',0 + ; DATA XREF: dseg:off_10920o +aNo_5Buumx db 'No.5 uYkv ` Mystic Square 1998',0 + ; DATA XREF: dseg:off_10920o +aReimuHakurei_3 db ' Reimu Hakurei ( Shaman )',0 + ; DATA XREF: dseg:off_10920o +aMarisaKirisa_2 db ' Marisa Kirisame ( Sorceress )',0 + ; DATA XREF: dseg:off_10920o +aMimaGhost_1 db ' Mima ( Ghost )',0 + ; DATA XREF: dseg:off_10920o +aYukaOriental_0 db ' Yuka ( Oriental demon )',0 + ; DATA XREF: dseg:off_10920o +aSaraGateKeeper db ' Sara ( Gate keeper )',0 + ; DATA XREF: dseg:off_10920o +aLuizeDemon db ' Luize ( Demon )',0 + ; DATA XREF: dseg:off_10920o +aAliceWitchOfDe db ' Alice ( Witch of death )',0 + ; DATA XREF: dseg:off_10920o +aYukiBlackWitch db ' Yuki ( Black witch )',0 + ; DATA XREF: dseg:off_10920o +aMaiWhiteWitch db ' Mai ( White witch )',0 + ; DATA XREF: dseg:off_10920o +aYumekoMaid db ' Yumeko ( Maid )',0 + ; DATA XREF: dseg:off_10920o +aShinkiGoddessO db ' Shinki ( Goddess of devil',27h,'s wo' + ; DATA XREF: dseg:off_10920o + db 'rld )',0 +aProgramerZunJu db ' Programer ZUN (Junya Ota)',0 + ; DATA XREF: dseg:off_10920o +aGraphicsZunJun db ' Graphics ZUN (Junya Ota)',0 + ; DATA XREF: dseg:off_10920o +aMusicComposeZu db ' Music Compose ZUN (Junya Ota)',0 + ; DATA XREF: dseg:off_10920o +aP_m_d_ProgramM db ' P.M.D. Program M.Kajihara(KAJA)',0 + ; DATA XREF: dseg:off_10920o +aSpecialThanksA db ' Special Thanks Aotaka',0 + ; DATA XREF: dseg:off_10920o +aAmusementMaker db ' Amusement Makers',0 + ; DATA XREF: dseg:off_10920o +aAndAllTestPlay db ' and all test player and you ... ',0 + ; DATA XREF: dseg:off_10920o +aExed db 'EXED',0 ; DATA XREF: sub_B3CB+7Co +byte_115EE db 0AAh ; DATA XREF: sub_C1DD+1D9r + db 0ABh ; + db 0ACh ; + db 0ADh ; + db 0AEh ; + db 0AFh ; + db 0B0h ; + db 0B1h ; + db 0B2h ; + db 0B3h ; + db 0B4h ; + db 0B5h ; + db 0B6h ; + db 0B7h ; + db 0B8h ; + db 0B9h ; + db 0BAh ; + db 0BBh ; + db 0BCh ; + db 0BDh ; + db 0BEh ; + db 0BFh ; + db 0C0h ; + db 0C1h ; + db 0C2h ; + db 0C3h ; + db 0C4h ; + db 0C5h ; + db 3 + db 6 + db 7 + db 8 + db 0Ch + db 0Fh + db 0A0h ; + db 0A1h ; + db 0A2h ; + db 0A3h ; + db 0A4h ; + db 0A5h ; + db 0A6h ; + db 0A7h ; + db 0A8h ; + db 0A9h ; + db 0E6h ; E + db 0E7h ; E + db 0E8h ; E + db 0CEh ; + db 0CFh ; + db 0CDh ; + db 0D5h ; +byte_11621 db 0 ; DATA XREF: sub_BD1E+15r sub_BD1E+1Br ... +word_11622 dw 0 ; DATA XREF: sub_BE76+65r + ; sub_C1DD+294r ... +aGensou_scr db 'GENSOU.SCR',0 ; DATA XREF: sub_B590+85o +aGensou_scr_0 db 'GENSOU.SCR',0 ; DATA XREF: sub_B646+4o +aGensou_scr_1 db 'GENSOU.SCR',0 ; DATA XREF: sub_B646+11o +aGensou_scr_2 db 'GENSOU.SCR',0 ; DATA XREF: sub_B6A3+8o +aHi01_pi db 'hi01.pi',0 ; DATA XREF: sub_C1DD+28o +aScnum_bft db 'scnum.bft',0 ; DATA XREF: sub_C1DD+50o +aSctm0_bft db 'sctm0.bft',0 ; DATA XREF: sub_C1DD+59o +aSctm1_bft db 'sctm1.bft',0 ; DATA XREF: sub_C1DD+62o +unk_11676 db 83h ; E ; DATA XREF: sub_C1DD+F5o + db 58h ; X + db 83h ; E + db 8Dh ; E + db 81h ; E + db 5Bh ; [ + db 83h ; E + db 82h ; E + db 81h ; E + db 5Bh ; [ + db 83h ; E + db 68h ; h + db 82h ; E + db 0C5h ; + db 82h ; E + db 0CCh ; + db 83h ; E + db 76h ; v + db 83h ; E + db 8Ch ; E + db 83h ; E + db 43h ; C + db 82h ; E + db 0C5h ; + db 82h ; E + db 0CDh ; + db 81h ; E + db 41h ; A + db 83h ; E + db 58h ; X + db 83h ; E + db 52h ; R + db 83h ; E + db 41h ; A + db 82h ; E + db 0CDh ; + db 8Bh ; E + db 4Ch ; L + db 98h ; E + db 5Eh ; ^ + db 82h ; E + db 0B3h ; + db 82h ; E + db 0EAh ; E + db 82h ; E + db 0DCh ; + db 82h ; E + db 0B9h ; + db 82h ; E + db 0F1h ; E + db 0 +unk_116A9 db 83h ; E ; DATA XREF: sub_C1DD+106o + db 58h ; X + db 83h ; E + db 8Dh ; E + db 81h ; E + db 5Bh ; [ + db 83h ; E + db 82h ; E + db 81h ; E + db 5Bh ; [ + db 83h ; E + db 68h ; h + db 82h ; E + db 0C5h ; + db 82h ; E + db 0CCh ; + db 83h ; E + db 76h ; v + db 83h ; E + db 8Ch ; E + db 83h ; E + db 43h ; C + db 82h ; E + db 0C5h ; + db 82h ; E + db 0CDh ; + db 81h ; E + db 41h ; A + db 83h ; E + db 58h ; X + db 83h ; E + db 52h ; R + db 83h ; E + db 41h ; A + db 82h ; E + db 0CDh ; + db 8Bh ; E + db 4Ch ; L + db 98h ; E + db 5Eh ; ^ + db 82h ; E + db 0B3h ; + db 82h ; E + db 0EAh ; E + db 82h ; E + db 0DCh ; + db 82h ; E + db 0B9h ; + db 82h ; E + db 0F1h ; E + db 0 +aName db 'name',0 ; DATA XREF: sub_C1DD+13Fo + db 0 +word_116E2 dw 150h ; DATA XREF: sub_C8AE+116r + ; sub_C8AE+12Br ... +word_116E4 dw 2 ; DATA XREF: sub_C5E7+8Ar sub_C67F+86r ... +word_116E6 dw 6 ; DATA XREF: sub_CA9B+6AEr + ; sub_D16F+18r ... +word_116E8 dw 30h ; DATA XREF: sub_C8AE+11Dr + ; sub_C8AE+132r ... +byte_116EA db 0 ; DATA XREF: sub_C729:loc_C786r + ; sub_CA9B+2B7w ... + db 2 + db 2 + db 2 + db 0AEh ; + db 0AAh ; + db 0BCh ; + db 0C2h ; + db 0 + db 2 + db 0B7h ; + db 0B8h ; + db 0BBh ; + db 0B6h ; + db 0AAh ; + db 0B5h ; + db 0 + db 2 + db 2 + db 2 + db 0B1h ; + db 0AAh ; + db 0BBh ; + db 0ADh ; + db 0 + db 0B5h ; + db 0BEh ; + db 0B7h ; + db 0AAh ; + db 0BDh ; + db 0B2h ; + db 0ACh ; + db 0 + db 2 + db 2 + db 0AEh ; + db 0C1h ; + db 0BDh ; + db 0BBh ; + db 0AAh ; + db 0 +byte_11713 db 0 ; DATA XREF: sub_C5E7+22r sub_C5E7+58r ... +unk_11714 db 93h ; E ; DATA XREF: sub_C67F+9Co + db 5Fh ; _ + db 0 +unk_11717 db 81h ; E ; DATA XREF: sub_C729+ECo + db 44h ; D + db 0 +unk_1171A db 81h ; E ; DATA XREF: sub_C729+FEo + db 93h ; E + db 0 +unk_1171D db 81h ; E ; DATA XREF: sub_C835+6Bo + db 44h ; D + db 0 +unk_11720 db 81h ; E ; DATA XREF: sub_C8AE+13Eo + db 93h ; E + db 0 +aB@b@b@b@b@b@b@ db '@@@@@@@ rO',0 ; DATA XREF: sub_CA9B+21o +aUqiUx db 'Փx',0 ; DATA XREF: sub_CA9B+39o +aNPiuU_ db 'ŏI_',0 ; DATA XREF: sub_CA9B+51o +unk_1174B db 83h ; E ; DATA XREF: sub_CA9B+69o + db 7Eh ; ~ + db 83h ; E + db 58h ; X + db 89h ; E + db 0F1h ; E + db 90h ; E + db 94h ; E + db 0 +unk_11754 db 83h ; E ; DATA XREF: sub_CA9B+81o + db 7Bh ; { + db 83h ; E + db 80h ; + db 8Eh ; E + db 67h ; g + db 97h ; E + db 70h ; p + db 89h ; E + db 0F1h ; E + db 90h ; E + db 94h ; E + db 0 +aGqbGatbrmcj db 'Q[B',0 ; DATA XREF: sub_CA9B+99o +aIlcSObcj db 'ގ',0 ; DATA XREF: sub_CA9B+B1o +unk_11779 db 83h ; E ; DATA XREF: sub_CA9B+C9o + db 41h ; A + db 83h ; E + db 43h ; C + db 83h ; E + db 65h ; e + db 83h ; E + db 80h ; + db 89h ; E + db 0F1h ; E + db 8Eh ; E + db 0FBh ; E + db 97h ; E + db 0A6h ; + db 0 +aUU_gagcgeganNv db '_ACeō_',0 ; DATA XREF: sub_CA9B+E1o +aLcnzvv db 'C',0 ; DATA XREF: sub_CA9B+F9o +aPicacovCj db '',0 ; DATA XREF: sub_CA9B+111o +aVavVVSrso db 'Ȃ̘rO',0 ; DATA XREF: sub_CA9B+129o +unk_117BC db 89h ; E ; DATA XREF: sub_CA9B+1D8o + db 0F1h ; E + db 0 +unk_117BF db 89h ; E ; DATA XREF: sub_CA9B+1F3o + db 0F1h ; E + db 0 +unk_117C2 db 93h ; E ; DATA XREF: sub_CA9B+5C7o + db 5Fh ; _ + db 0 +a_ude_txt db '_ude.txt',0 ; DATA XREF: sub_CA9B+5D0o +aBhbhbhbhbhbhu_ db 'HHHHHH_',0 ; DATA XREF: sub_CA9B+698o +aPicacovVVcvsfT db 'ɂ锻s',0 ; DATA XREF: sub_CA9B+6B3o +aUde_pi db 'ude.pi',0 ; DATA XREF: sub_D1B1+17o +aB@vpcB@ db '@Pʁ@',0 ; DATA XREF: sub_D21D+16o +aB@vqcB@ db '@Qʁ@',0 ; DATA XREF: sub_D21D+2Eo +aB@vrcB@ db '@Rʁ@',0 ; DATA XREF: sub_D21D+46o +aB@vscB@ db '@Sʁ@',0 ; DATA XREF: sub_D21D+5Eo +aB@vtcB@ db '@Tʁ@',0 ; DATA XREF: sub_D21D+76o +aB@vucB@ db '@Uʁ@',0 ; DATA XREF: sub_D21D+8Eo +aNPiuU__0 db 'ŏI_',0 ; DATA XREF: sub_D21D+A6o +byte_1183A db 0 ; DATA XREF: sub_D5E1+24Ar + ; sub_D8F5+33r ... + db 0 +word_1183C dw 0 ; DATA XREF: sub_D853+4r sub_D853+7w ... +word_1183E dw 0 ; DATA XREF: sub_D931+5w sub_D931+9r ... +byte_11840 db 0 ; DATA XREF: sub_D931:loc_D964r + ; sub_D931+5Aw ... + db 0 +word_11842 dw 0 ; DATA XREF: sub_DA36+4r sub_DA36+Fw ... +word_11844 dw 0 ; DATA XREF: sub_DAD7:loc_DAEFw + ; sub_DAD7+1Cr ... +byte_11846 db 0 ; DATA XREF: sub_DBE6+Fw sub_DCFC+166w ... + db 0 +word_11848 dw 0 ; DATA XREF: sub_DCFC+29r sub_DCFC+47w ... +word_1184A dw 0 ; DATA XREF: sub_DE74+29r sub_DE74+47w ... +unk_1184C db 20h ; DATA XREF: sub_DCFC+98o + db 20h + db 0 +unk_1184F db 20h ; DATA XREF: sub_DE74+98o + db 20h + db 0 +aStaff db 'staff',0 ; DATA XREF: sub_E41D+8Bo +aStf00_cdg db 'stf00.cdg',0 ; DATA XREF: sub_E41D+A0o +aStf01_cdg db 'stf01.cdg',0 ; DATA XREF: sub_E41D+ABo +aStf02_cdg db 'stf02.cdg',0 ; DATA XREF: sub_E41D+B6o +aStf03_cdg db 'stf03.cdg',0 ; DATA XREF: sub_E41D+C1o +aStf04_cdg db 'stf04.cdg',0 ; DATA XREF: sub_E41D+CCo +aStf05_cdg db 'stf05.cdg',0 ; DATA XREF: sub_E41D+D7o +aStf06_cdg db 'stf06.cdg',0 ; DATA XREF: sub_E41D+E2o +aStf07_cdg db 'stf07.cdg',0 ; DATA XREF: sub_E41D+EDo +aStf08_cdg db 'stf08.cdg',0 ; DATA XREF: sub_E41D+F8o +aStf09_cdg db 'stf09.cdg',0 ; DATA XREF: sub_E41D+103o +aStf10_cdg db 'stf10.cdg',0 ; DATA XREF: sub_E41D+10Eo +aStf01_bft db 'stf01.bft',0 ; DATA XREF: sub_E41D+117o +aStf00_bft db 'stf00.bft',0 ; DATA XREF: sub_E41D+120o +aAbnormalProgra db 'Abnormal program termination',0Dh,0Ah,0 + db 0 +word_118FA dw 0 ; DATA XREF: _atexit+5r + ; _atexit:loc_3D5Dr ... +off_118FC dd sub_3F70 ; DATA XREF: sub_3F75+29r _setvbuf+C0w ... +off_11900 dd sub_3F70 ; DATA XREF: sub_3F75+43r +off_11904 dd sub_3F70 ; DATA XREF: sub_3F75+47r + db 0 + db 0 +word_1190A dw 209h ; DATA XREF: seg000:456Dw seg000:4577r +byte_1190C db 0 ; DATA XREF: seg000:455Er + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 8 + db 18h + db 0 + db 0 +word_1191E dw 20Ah ; DATA XREF: seg000:45A6w seg000:45B0r +byte_11920 db 1 ; DATA XREF: seg000:4597r + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 1Ch + db 18h + db 0 + db 0 + db 2 + db 2 +byte_11934 db 2 ; DATA XREF: ___ErrorMessage+19r + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 30h ; 0 + db 18h + db 0 + db 0 + db 43h ; C + db 2 + db 3 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 44h ; D + db 18h + db 0 + db 0 + db 42h ; B + db 2 + db 4 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 58h ; X + db 18h + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_11A98 dw 14h ; DATA XREF: start+C0r start+E3r ... + db 1 + db 60h ; ` + db 2 + db 60h ; ` + db 2 + db 60h ; ` + db 4 + db 0A0h ; + db 2 + db 0A0h ; + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_11AC2 dw 0 ; DATA XREF: __IOERROR:loc_4185w + ; __IOERROR+2Bw + db 0 + db 13h + db 2 + db 2 + db 4 + db 5 + db 6 + db 8 + db 8 + db 8 + db 14h + db 15h + db 5 + db 13h + db 0Eh + db 5 + db 5 + db 11h + db 2 + db 1Eh + db 29h ; ) + db 2Ch ; , + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 29h ; ) + db 2Ch ; , + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 5 + db 5 + db 29h ; ) + db 17h + db 17h + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Fh + db 2Ch ; , + db 23h ; # + db 2 + db 2Ch ; , + db 0Fh + db 2Ah ; * + db 28h ; ( + db 28h ; ( + db 28h ; ( + db 13h + db 1Bh + db 1Ch + db 2 + db 2 + db 5 + db 0Fh + db 2 + db 17h + db 28h ; ( + db 2Ah ; * + db 13h + db 2Ah ; * + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 0Eh + db 23h ; # + db 0Eh + db 1Ch + db 28h ; ( + db 17h + db 23h ; # + db 25h ; % + db 13h + db 28h ; ( + db 0 +unk_11B1E db 0 ; DATA XREF: seg000:4354o + db 0 + db 0 + db 0 +word_11B22 dw 0 ; DATA XREF: seg000:425Cr +word_11B24 dw 4221h ; DATA XREF: set_new_handler(void (*)(void))+Cr + ; set_new_handler(void (*)(void))+1Fw ... +seg_11B26 dw seg seg000 ; DATA XREF: set_new_handler(void (*)(void))+8r + ; set_new_handler(void (*)(void))+1Bw ... +aOutOfMemory db 'Out of memory',0 +word_11B36 dw 1000h ; DATA XREF: start+62r start+70w ... + public __ctype +; unsigned __int8 _ctype[257] +__ctype db 0, 20h, 20h, 20h, 20h, 20h, 20h, 20h ; DATA XREF: _tolower+18r + db 20h, 20h, 21h, 21h, 21h, 21h, 21h, 20h + db 20h, 20h, 20h, 20h, 20h, 20h, 20h, 20h + db 20h, 20h, 20h, 20h, 20h, 20h, 20h, 20h + db 20h, 81h, 40h, 40h, 40h, 40h, 40h, 40h + db 40h, 40h, 40h, 40h, 40h, 40h, 40h, 40h + db 40h, 12h, 12h, 12h, 12h, 12h, 12h, 12h + db 12h, 12h, 12h, 40h, 40h, 40h, 40h, 40h + db 40h, 40h, 14h, 14h, 14h, 14h, 14h, 14h + db 4, 4, 4, 4, 4, 4, 4, 4 + db 4, 4, 4, 4, 4, 4, 4, 4 + db 4, 4, 4, 4, 40h, 40h, 40h, 40h + db 40h, 40h, 18h, 18h, 18h, 18h, 18h, 18h + db 8, 8, 8, 8, 8, 8, 8, 8 + db 8, 8, 8, 8, 8, 8, 8, 8 + db 8, 8, 8, 8, 40h, 40h, 40h, 40h + db 20h, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0, 0, 0, 0, 0, 0, 0, 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + dd @terminate$qv ; terminate(void) + dd @unexpected$qv ; unexpected(void) +word_11C4C dw 0 ; DATA XREF: __ExceptInit+28w +word_11C4E dw 0 ; DATA XREF: __ExceptInit+25w + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_11D62 dw 0 ; DATA XREF: seg000:495Cw seg000:496Fw ... +word_11D64 dw 0 ; DATA XREF: sub_4E02+22r sub_4E02+61w +byte_11D66 db 0 ; DATA XREF: seg000:5157r seg000:516Fw +byte_11D67 db 0 ; DATA XREF: seg000:50F2r seg000:5105w +word_11D68 dw 0 ; DATA XREF: seg000:505Fr seg000:5095w +word_11D6A dw 0 ; DATA XREF: seg000:505Br + ; seg000:loc_508Fw + dd 0 +word_11D70 dw 0 ; DATA XREF: seg000:4F79r seg000:4FAFw ... +word_11D72 dw 0 ; DATA XREF: seg000:4F75r + ; seg000:loc_4FA9w ... + dd 0 + dd 0 + dd 0 + db 2 + db 4 + db 8 + db 0Bh + db 0Fh + db 16h + db 0 + db 15h + db 8Ch ; E + db 0Bh + db 0 + db 0 +dword_11D8C dd 0 ; DATA XREF: seg000:52D3w sub_52E7+Ar ... + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 5Ch ; \ + db 0 +word_11DA0 dw 0 ; DATA XREF: _setvbuf:loc_5DB8r + ; _setvbuf+4Bw +word_11DA2 dw 0 ; DATA XREF: _setvbuf:loc_5DA2r + ; _setvbuf+35w +word_11DA4 dw 30h ; DATA XREF: __IOERROR+25r +aNotype db '',0 +aBccxh1 db '**BCCxh1',0 +dword_11DB8 dd 0 ; DATA XREF: _getenv+21r seg000:9E22w ... +word_11DBC dw 1 ; DATA XREF: seg003:0A4Dr seg003:0A56w +word_11DBE dw 0 ; DATA XREF: seg003:0A6Ar seg003:0A73w +word_11DC0 dw 1 ; DATA XREF: seg003:0A87r seg003:0A90w +word_11DC2 dw 3Fh ; DATA XREF: sub_FCF8+13r seg003:0AA4r ... +word_11DC4 dw 40h ; DATA XREF: sub_FCF8+19r seg003:0AC1r ... +word_11DC6 dw 3Fh ; DATA XREF: seg003:0743r seg003:07ABr ... +aStringReferenc db 'String reference out of range',0 +aStringRefere_0 db 'String reference out of range',0 +aStringRefere_1 db 'String reference out of range',0 +aPath db 'PATH',0 + db '/\',0 + db 0 + db 2Eh ; . + db 42h ; B + db 41h ; A + db 54h ; T + db 0 + db 2Eh ; . + db 43h ; C + db 4Fh ; O + db 4Dh ; M + db 0 + db 2Eh ; . + db 45h ; E + db 58h ; X + db 45h ; E + db 0 + db 2Eh ; . + db 42h ; B + db 41h ; A + db 54h ; T + db 0 + db 43h ; C + db 4Fh ; O + db 4Dh ; M + db 53h ; S + db 50h ; P + db 45h ; E + db 43h ; C + db 0 + db 2Fh ; / + db 63h ; c + db 0 + db 1 + db 20h + dd @string@contains$xqnxc ; string::contains(char *) + db 0 + db 2 + db 2Fh ; / + db 45h ; E + db 0 + db 0 + db 0 + db 10h + db 4Bh ; K + db 49h ; I + db 0 + db 0 + db 0 + db 0Fh + db 9Eh ; E + db 52h ; R + db 0 + db 0 + db 0 + db 10h + db 0Ch + db 9Eh ; E + db 0 + db 0 + db 1 + db 20h + dd loc_43CF +dword_11E6E dd 0 ; DATA XREF: sub_A545+26w sub_A5A4+3r ... + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +dword_11E86 dd 0 ; DATA XREF: sub_8DA+17r sub_9B2+2Er ... +word_11E8A dw 0 ; DATA XREF: sub_886+32w sub_886+46w ... +word_11E8C dw 0 ; DATA XREF: sub_886+35w sub_886+49w ... +word_11E8E dw 0 ; DATA XREF: sub_886+29w sub_8DA+9r ... +word_11E90 dw 0 ; DATA XREF: sub_886+26w sub_8DA+Cr ... +word_11E92 dw 0 ; DATA XREF: sub_886+2Cw sub_956+2Dw ... +word_11E94 dw 0 ; DATA XREF: sub_886+2Fw + ; sub_8DA:loc_90Bw ... +word_11E96 dw 0 ; DATA XREF: sub_F0FC+5w + db 0 + db 0 + db 0 + db 0 +byte_11E9C db 0 ; DATA XREF: sub_DAD7+F9r + ; sub_DAD7+100w ... + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_11ECA dw 0 ; DATA XREF: sub_2320+1Ew seg000:23A4w ... +word_11ECC dw 0 ; DATA XREF: sub_2320+21w seg000:23A8w +word_11ECE dw 0 ; DATA XREF: sub_2320+37w sub_23CE+2Br +word_11ED0 dw 0 ; DATA XREF: sub_2320+3Aw sub_23CE+27r +word_11ED2 dw 0 ; DATA XREF: seg000:239Ew +word_11ED4 dw 0 ; DATA XREF: sub_2512+Fw sub_2574+18r ... +word_11ED6 dw 0 ; DATA XREF: sub_2238+20r sub_2512+12w ... +word_11ED8 dw 0 ; DATA XREF: sub_2512+15w sub_2574+24r ... +word_11EDA dw 0 ; DATA XREF: sub_2222+7w sub_2238+19r ... + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +word_126DC dw 0 ; DATA XREF: seg000:298Ew seg000:2A1Dr + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +byte_127DE db 0 ; DATA XREF: sub_E81A+2w sub_E848+1Ew + db 0 +word_127E0 dw 0 ; DATA XREF: sub_315A+21w sub_319E+Fr +word_127E2 dw 0 ; DATA XREF: sub_315A+1Dw sub_319E+Br + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 +unk_128A6 db ? ; ; DATA XREF: sub_ED60+51o + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_128B4 dw ? ; DATA XREF: sub_EEB2+6w sub_EF39+28r +word_128B6 dw ? ; DATA XREF: sub_EEB2+22w sub_EF39+2Cr ... +word_128B8 dw ? ; DATA XREF: sub_EEB2+1Ew sub_EEB2+3Br ... + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_12AFA dw ? ; DATA XREF: sub_A92B+15r sub_A92B+59r ... +byte_12AFC db ? ; DATA XREF: sub_F104+E6w + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +byte_12EFE db ? ; DATA XREF: sub_F356+2Fw sub_F356+4Cw + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_12F80 dw ? ; DATA XREF: sub_3980+61w sub_3A20+29r ... +word_12F82 dw ? ; DATA XREF: sub_3980+67w seg000:3A88r +word_12F84 dw ? ; DATA XREF: sub_3980+2Fw sub_3980+40r ... +word_12F86 dw ? ; DATA XREF: sub_F3FC:loc_F433w + ; sub_F3FC:loc_F447r + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_14100 dw ? ; DATA XREF: sub_1446+10Bw + ; sub_1446+15Dr ... +word_14102 dw ? ; DATA XREF: sub_1446+11Bw +dword_14104 dd ? ; DATA XREF: sub_1446+150w + ; sub_1446+191r ... +word_14108 dw ? ; DATA XREF: sub_1446+12Dw + ; sub_1446:loc_18D0r +word_1410A dw ? ; DATA XREF: sub_1446+130w + ; sub_1446+159w ... + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +byte_1420C db ? ; DATA XREF: sub_1446+8Cw + ; sub_1446+16Dw + nop +word_1420E dw ? ; DATA XREF: sub_1446+21w + ; sub_1446+4A0r ... +word_14210 dw ? ; DATA XREF: sub_1446+34w + ; sub_1446+1B1r ... +byte_14212 db ? ; DATA XREF: sub_1446+25w + ; sub_1446+1A3r ... +byte_14213 db ? ; DATA XREF: sub_1446+2Aw + ; sub_1446+1A7r ... + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_14F88 dw ? ; DATA XREF: sub_A695+20w sub_A695+27r ... + db ? ; + db ? ; + db ? ; + db ? ; +byte_14F8E db ? ; DATA XREF: sub_A826+26r sub_A8EC+Dr ... + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_15004 dw ? ; DATA XREF: sub_A826+3w sub_A826+8r ... +word_15006 dw ? ; DATA XREF: sub_A826+10w sub_A826+1Br ... +word_15008 dw ? ; DATA XREF: sub_A8EC+1Cr + ; sub_A9C3+1C8w ... +byte_1500A db ? ; DATA XREF: sub_A9C3+D2w sub_AFD6+1Fw ... + nop +word_1500C dw ? ; DATA XREF: sub_A738+38r sub_A7FE+1Er ... +word_1500E dw ? ; DATA XREF: sub_B37C+27w sub_B37C+2Ar ... +word_15010 dw ? ; DATA XREF: sub_B37C+1Ew sub_B37C+31r +word_15012 dw ? ; DATA XREF: sub_B273:loc_B357w + ; sub_B273+F7w ... +word_15014 dw ? ; DATA XREF: sub_B1B5+1Br sub_B1B5+9Er ... +word_15016 dw ? ; DATA XREF: sub_B1B5+6r sub_B1B5+96w ... +byte_15018 db ? ; DATA XREF: sub_B273+9r sub_B273+C7r ... + nop +byte_1501A db ? ; DATA XREF: sub_B4D6+1Fr sub_B4D6+32r ... +byte_1501B db ? ; DATA XREF: sub_B4D6+11r sub_B52C+2Dw ... +word_1501C dw ? ; DATA XREF: sub_B4D6+4Er sub_B52C+5w ... + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +byte_15078 db ? ; DATA XREF: sub_B590:loc_B5A0w + ; sub_C1DD+125w + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +byte_15176 db ? ; DATA XREF: sub_B730+62w sub_B730+6Fw ... +byte_15177 db ? ; DATA XREF: sub_B646+1Fr sub_B6A3+18r ... +word_15178 dw ? ; DATA XREF: sub_B6A3+10r sub_B899+7Ar ... + align 4 +byte_1517C db ? ; DATA XREF: sub_C729+7Ar + ; sub_CA9B+1FBw ... + nop +dword_1517E dd ? ; DATA XREF: sub_C729+64r + ; sub_C729:loc_C797r ... +dword_15182 dd ? ; DATA XREF: sub_C729+89w + ; sub_CA9B+311r +byte_15186 db ? ; DATA XREF: sub_CA9B:loc_CBE3w + ; sub_CA9B+15Cr ... +byte_15187 db ? ; DATA XREF: sub_CA9B:loc_D01Aw + ; sub_CA9B+647o ... + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +byte_151A3 db ? ; DATA XREF: sub_CA9B+679w + db ? ; +byte_151A5 db ? ; DATA XREF: sub_CA9B+584w + ; sub_CA9B+66Ao ... + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +byte_151C1 db ? ; DATA XREF: sub_CA9B+67Ew + align 4 +word_151C4 dw ? ; DATA XREF: sub_DCFC+3Ew sub_DCFC+D8w ... +word_151C6 dw ? ; DATA XREF: sub_DCFC+41w sub_DCFC+C7w ... +word_151C8 dw ? ; DATA XREF: sub_DE74+3Ew sub_DE74+D8w ... +word_151CA dw ? ; DATA XREF: sub_DE74+41w sub_DE74+C7w ... +byte_151CC db ? ; DATA XREF: sub_DFEC+150r + ; sub_DFEC+16Fw + nop +word_151CE dw ? ; DATA XREF: sub_D31F+12w sub_D31F+1Br ... +word_151D0 dw ? ; DATA XREF: sub_D31F+18w sub_D31F+2Dr ... +word_151D2 dw ? ; DATA XREF: sub_D531+81r sub_D853+40r +word_151D4 dw ? ; DATA XREF: sub_D531+8Ar sub_D853+49r +word_151D6 dw ? ; DATA XREF: sub_D31F+6w sub_D31F+23r ... +word_151D8 dw ? ; DATA XREF: sub_D31F+Cw sub_D31F+35r ... +word_151DA dw ? ; DATA XREF: sub_D387+AEw sub_D5E1+27r ... +word_151DC dw ? ; DATA XREF: sub_D387+B4w sub_D5E1+33r ... +word_151DE dw ? ; DATA XREF: sub_D387+22w sub_D509+1Fw ... +word_151E0 dw ? ; DATA XREF: sub_DCFC:loc_DE01r + ; sub_DE74:loc_DF79r ... +word_151E2 dw ? ; DATA XREF: sub_D5E1:loc_D83Fr + ; sub_D931+3Ar ... + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_156E4 dw ? ; DATA XREF: sub_D531+56r sub_D853+2Ar ... + align 4 +word_156E8 dw ? ; DATA XREF: sub_D531+5Ar sub_D853+2Er ... + align 4 +word_156EC dw ? ; DATA XREF: sub_D931+E3w + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_156F8 dw ? ; DATA XREF: sub_D8B6+34w +word_156FA dw ? ; DATA XREF: sub_D8B6+3Aw + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +byte_18F2E db ? ; DATA XREF: seg000:0271w + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_1A7E8 dw ? ; DATA XREF: seg000:0277r + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; + db ? ; +word_1C658 dw ? ; DATA XREF: seg000:50FFw +word_1C65A dw ? ; DATA XREF: seg000:50F9w + align 8 +word_1C660 dw ? ; DATA XREF: seg000:509Fr seg000:516Cw ... +word_1C662 dw ? ; DATA XREF: seg000:509Br seg000:5168w ... +dword_1C664 dd ? ; DATA XREF: sub_8245+ACw sub_8245+C2r ... +dword_1C668 dd ? ; DATA XREF: __ExceptionHandler+2BEw + ; __ExceptionHandler+2D1r ... + align 8 +dseg ends + +; =========================================================================== + +; Segment type: Uninitialized +seg005 segment byte stack 'STACK' use16 + assume cs:seg005 + assume es:nothing, ss:nothing, ds:dseg, fs:nothing, gs:nothing + db 80h dup(?) +seg005 ends + + + end start