const char *usagetext="\n\ usage: c2t [-vh?]\n\ c2t [-elp] input[.mon],[addr] ... [output.mon]\n\ c2t {-1} [-cepr] input[.mon],[addr] ... [output.[aif[f]|wav[e]]]\n\ c2t {-2} [-abcdef8pmqr] input[.mon],[addr] ... [output.[aif[f]|wav[e]]]\n\ c2t [-n8] input.dsk ... [output.[aif[f]|wav[e]]]\n\ \n\ -1 or -2 for Apple I or II tape format\n\ -8 use 48k/8bit 8000 bps transfer (Apple II/II+/IIe 64K only)\n\ Implies -2a. Negates -f and -d.\n\ -a assembly autoload and run (Apple II/II+/IIe 64K only)\n\ -b basic autoload and run (Apple II+/IIe 64K only)\n\ Implies -2a.\n\ -c compress data\n\ -d use fast 44.1k/16bit transfer (Apple II/II+/IIe 64K only)\n\ Implies -2a. Negates -f and -8. Use for burning CDs.\n\ -e pad with $00 to end on page boundary\n\ -f use faster 48k/8bit (9600 bps) transfer (Apple II/II+/IIe 64K only)\n\ Implies -2a. Negates -8 and -d. Unreliable on some systems.\n\ -h|? this help\n\ -l long monitor format (24 bytes/line)\n\ -m jump to monitor after autoload\n\ -n do not format disks\n\ -p pipe to stdout\n\ -q parameters and data only (for use with custom client)\n\ -r #, where # overrides the sample rate (e.g. -r 48000)\n\ Negates -a, -b, -8, -q, -f, and -d\n\ -t 10 second preamble (default 4) for real tape use\n\ -v print version number and exit\n\ \n\ input(s) without a .mon or .dsk extension is assumed to be a binary with a 4\n\ byte header. If the header is missing then you must append ,load_address to\n\ each binary input missing a header, e.g. filename,800. The load address\n\ will be read as hex.\n\ \n\ input(s) with a .mon extension expected input format:\n\ \n\ 0280: A2 FF 9A 20 8C 02 20 4F\n\ 0288: 03 4C 00 FF 20 9E 02 A9\n\ \n\ A single input with a .dsk extension expected to be a 140K disk image.\n\ \n\ output must have aiff, aif, wav, wave, or mon extention.\n\ \n\ Examples:\n\ \n\ c2t hello hello.mon\n\ c2t -p hello.mon print.mon foo,800 | pbcopy\n\ c2t -2f moon.patrol,801 moon.patrol.aif\n\ c2t -2 hello,300 hello.aiff\n\ c2t -1 hello.mon hello.wav\n\ c2t -2 thief,801 thief.obj,3ffd thief.pic,2000 theif.aif\n\ c2t foo.dsk foo.wav\n\ \n\ "; //51 00 D5, 3 byte header, LENGTH LSB/MSB, D5 for autorun unsigned char header[] = {0x00,0x00,0xD5}; /* basic program "CALL 2060", 801.80B end of code[LSB,MSB] = 0x0B,0x08 line #[LSB,MSG] = 0x01,0x00 CALL[1] = 0x8C vec[4] = 0x32,0x30,0x36,0x30 (2060 in ASCII) end[2] = 0x00,0x00 */ unsigned char basic[] = {0x0B,0x08,0x01,0x00,0x8C,0x32,0x30,0x36,0x30,0x00,0x00}; /* ;autoload.s org = $BF00 ; should be $BF00 cout = $FDED ; character out sub crout = $FD8E ; CR out sub prbyte = $FDDA warm = $FF69 ; back to monitor readblk = $FEFD pointer = $06 endbas = $80C ;target = $1000 target = $801 chksum = $00 inflate = $BA00 inf_zp = $0 start: .org endbas move: ldx #0 move1: lda moved,x sta load,x inx bne move1 ; move 256 bytes jmp load moved: .org org load: lda #loadm jsr print lda ld_beg sta $3C ; starting tape address low lda ld_beg+1 sta $3D ; starting tape address high lda ld_end sta $3E ; ending tape address low lda ld_end+1 sta $3F ; ending tape address high jsr readblk ; read block from tape lda inf_flag ; if inf_flag = 0 runit beq runit inf: jsr crout lda #infm jsr print lda inf_src ;src lsb sta inf_zp+0 lda inf_src+1 ;src msb sta inf_zp+1 lda inf_dst ;dst lsb sta inf_zp+2 lda inf_dst+1 ;dst msb sta inf_zp+3 jsr inflate lda inf_end ;dst end +1 lsb cmp inf_zp+2 bne error lda inf_end+1 ;dst end +1 msb cmp inf_zp+3 bne error runit: lda warm_flag ; if warm_flag = 1 warm boot bne warmit jmp (runcode) warmit: jmp warm ; run it sumerror: jsr crout lda #chkm jsr print error: lda #errm jsr print jmp warm print: sta pointer sty pointer+1 ldy #0 lda (pointer),y ; load initial char print1: ora #$80 jsr cout iny lda (pointer),y bne print1 rts chkm: .asciiz "CHKSUM " errm: .asciiz "ERROR" infm: .asciiz "INFLATING " ld_beg: .org *+2 ld_end: .org *+2 inf_src: .org *+2 runcode: inf_dst: .org *+2 inf_end: .org *+2 inf_flag: .org *+1 warm_flag: .org *+1 loadm: ;.asciiz "LOADING " end: */ unsigned char autoloadcode[] = { 0xA2,0x00,0xBD,0x1A, 0x08,0x9D,0x00,0xBF,0xE8,0xD0,0xF7,0x4C, 0x00,0xBF,0xA9,0xA9,0xA0,0xBF,0x20,0x71, 0xBF,0xAD,0x9D,0xBF,0x85,0x3C,0xAD,0x9E, 0xBF,0x85,0x3D,0xAD,0x9F,0xBF,0x85,0x3E, 0xAD,0xA0,0xBF,0x85,0x3F,0x20,0xFD,0xFE, 0xAD,0xA7,0xBF,0xF0,0x2F,0x20,0x8E,0xFD, 0xA9,0x92,0xA0,0xBF,0x20,0x71,0xBF,0xAD, 0xA1,0xBF,0x85,0x00,0xAD,0xA2,0xBF,0x85, 0x01,0xAD,0xA3,0xBF,0x85,0x02,0xAD,0xA4, 0xBF,0x85,0x03,0x20,0x00,0xBA,0xAD,0xA5, 0xBF,0xC5,0x02,0xD0,0x1C,0xAD,0xA6,0xBF, 0xC5,0x03,0xD0,0x15,0xAD,0xA8,0xBF,0xD0, 0x03,0x6C,0xA3,0xBF,0x4C,0x69,0xFF,0x20, 0x8E,0xFD,0xA9,0x84,0xA0,0xBF,0x20,0x71, 0xBF,0xA9,0x8C,0xA0,0xBF,0x20,0x71,0xBF, 0x4C,0x69,0xFF,0x85,0x06,0x84,0x07,0xA0, 0x00,0xB1,0x06,0x09,0x80,0x20,0xED,0xFD, 0xC8,0xB1,0x06,0xD0,0xF6,0x60,0x43,0x48, 0x4B,0x53,0x55,0x4D,0x20,0x00,0x45,0x52, 0x52,0x4F,0x52,0x00,0x49,0x4E,0x46,0x4C, 0x41,0x54,0x49,0x4E,0x47,0x20,0x00 }; /* ; inflate - uncompress data stored in the DEFLATE format ; by Piotr Fusik ; Last modified: 2007-06-17 ; Compile with xasm (http://xasm.atari.org/), for example: ; xasm inflate.asx /l /d:inflate=$b700 /d:inflate_data=$b900 /d:inflate_zp=$f0 ; inflate is 509 bytes of code and initialized data ; inflate_data is 764 bytes of uninitialized data ; inflate_zp is 10 bytes on page zero ; hacked for apple ii and ca65 by Egan Ford ; dates ; compile nodes ; changes ;EFF .define equ = inflate = $BA00 inflate_zp = $0 inflate_data = $BC00 ; Pointer to compressed data inputPointer equ inflate_zp ; 2 bytes ; Pointer to uncompressed data outputPointer equ inflate_zp+2 ; 2 bytes ; Local variables getBit_buffer equ inflate_zp+4 ; 1 byte getBits_base equ inflate_zp+5 ; 1 byte inflateStoredBlock_pageCounter equ inflate_zp+5 ; 1 byte inflateCodes_sourcePointer equ inflate_zp+6 ; 2 bytes inflateDynamicBlock_lengthIndex equ inflate_zp+6 ; 1 byte inflateDynamicBlock_lastLength equ inflate_zp+7 ; 1 byte inflateDynamicBlock_tempCodes equ inflate_zp+7 ; 1 byte inflateCodes_lengthMinus2 equ inflate_zp+8 ; 1 byte inflateDynamicBlock_allCodes equ inflate_zp+8 ; 1 byte inflateCodes_primaryCodes equ inflate_zp+9 ; 1 byte ; Argument values for getBits GET_1_BIT equ $81 GET_2_BITS equ $82 GET_3_BITS equ $84 GET_4_BITS equ $88 GET_5_BITS equ $90 GET_6_BITS equ $a0 GET_7_BITS equ $c0 ; Maximum length of a Huffman code MAX_CODE_LENGTH equ 15 ; Huffman trees TREE_SIZE equ MAX_CODE_LENGTH+1 PRIMARY_TREE equ 0 DISTANCE_TREE equ TREE_SIZE ; Alphabet LENGTH_SYMBOLS equ 1+29+2 DISTANCE_SYMBOLS equ 30 CONTROL_SYMBOLS equ LENGTH_SYMBOLS+DISTANCE_SYMBOLS TOTAL_SYMBOLS equ 256+CONTROL_SYMBOLS ; Optional (recommend for c2t or DOS) ; DOS header location and size LSB/MSB ; .byte START,<(END-START),>(END-START) ; Uncompress DEFLATE stream starting from the address stored in inputPointer ; to the memory starting from the address stored in outputPointer ;; org inflate .org inflate START: ;; mvy #0 getBit_buffer LDY #0 STY getBit_buffer inflate_blockLoop: ; Get a bit of EOF and two bits of block type ; ldy #0 sty getBits_base lda #GET_3_BITS jsr getBits ;; lsr @ lsr A php tax bne inflateCompressedBlock ; Copy uncompressed block ; ldy #0 sty getBit_buffer jsr getWord jsr getWord sta inflateStoredBlock_pageCounter ; jmp inflateStoredBlock_firstByte bcs inflateStoredBlock_firstByte inflateStoredBlock_copyByte: jsr getByte inflateStoreByte: jsr storeByte bcc inflateCodes_loop inflateStoredBlock_firstByte: inx bne inflateStoredBlock_copyByte inc inflateStoredBlock_pageCounter bne inflateStoredBlock_copyByte inflate_nextBlock: plp bcc inflate_blockLoop rts inflateCompressedBlock: ; Decompress a block with fixed Huffman trees ; :144 dta 8 ; :112 dta 9 ; :24 dta 7 ; :6 dta 8 ; :2 dta 8 ; codes with no meaning ; :30 dta 5+DISTANCE_TREE ; ldy #0 inflateFixedBlock_setCodeLengths: lda #4 cpy #144 ;; rol @ rol A sta literalSymbolCodeLength,y cpy #CONTROL_SYMBOLS bcs inflateFixedBlock_noControlSymbol lda #5+DISTANCE_TREE cpy #LENGTH_SYMBOLS bcs inflateFixedBlock_setControlCodeLength cpy #24 adc #2-DISTANCE_TREE inflateFixedBlock_setControlCodeLength: sta controlSymbolCodeLength,y inflateFixedBlock_noControlSymbol: iny bne inflateFixedBlock_setCodeLengths ; mva #LENGTH_SYMBOLS inflateCodes_primaryCodes LDA #LENGTH_SYMBOLS STA inflateCodes_primaryCodes dex beq inflateCodes ; Decompress a block reading Huffman trees first ; Build the tree for temporary codes jsr buildTempHuffmanTree ; Use temporary codes to get lengths of literal/length and distance codes ldx #0 ; sec inflateDynamicBlock_decodeLength: php stx inflateDynamicBlock_lengthIndex ; Fetch a temporary code jsr fetchPrimaryCode ; Temporary code 0..15: put this length tax bpl inflateDynamicBlock_verbatimLength ; Temporary code 16: repeat last length 3 + getBits(2) times ; Temporary code 17: put zero length 3 + getBits(3) times ; Temporary code 18: put zero length 11 + getBits(7) times jsr getBits ; sec adc #1 cpx #GET_7_BITS ;; scc:adc #7 BCC S1 adc #7 S1: tay lda #0 cpx #GET_3_BITS ;; scs:lda inflateDynamicBlock_lastLength BCS S2 lda inflateDynamicBlock_lastLength S2: inflateDynamicBlock_verbatimLength: iny ldx inflateDynamicBlock_lengthIndex plp inflateDynamicBlock_storeLength: bcc inflateDynamicBlock_controlSymbolCodeLength ;; sta literalSymbolCodeLength,x+ sta literalSymbolCodeLength,x INX cpx #1 inflateDynamicBlock_storeNext: dey bne inflateDynamicBlock_storeLength sta inflateDynamicBlock_lastLength ; jmp inflateDynamicBlock_decodeLength beq inflateDynamicBlock_decodeLength inflateDynamicBlock_controlSymbolCodeLength: cpx inflateCodes_primaryCodes ;; scc:ora #DISTANCE_TREE BCC S3 ora #DISTANCE_TREE S3: ;; sta controlSymbolCodeLength,x+ sta controlSymbolCodeLength,x INX cpx inflateDynamicBlock_allCodes bcc inflateDynamicBlock_storeNext dey ; ldy #0 ; jmp inflateCodes ; Decompress a block inflateCodes: jsr buildHuffmanTree inflateCodes_loop: jsr fetchPrimaryCode bcc inflateStoreByte tax beq inflate_nextBlock ; Copy sequence from look-behind buffer ; ldy #0 sty getBits_base cmp #9 bcc inflateCodes_setSequenceLength tya ; lda #0 cpx #1+28 bcs inflateCodes_setSequenceLength dex txa ;; lsr @ lsr A ror getBits_base inc getBits_base ;; lsr @ lsr A rol getBits_base jsr getAMinus1BitsMax8 ; sec adc #0 inflateCodes_setSequenceLength: sta inflateCodes_lengthMinus2 ldx #DISTANCE_TREE jsr fetchCode ; sec sbc inflateCodes_primaryCodes tax cmp #4 bcc inflateCodes_setOffsetLowByte inc getBits_base ;; lsr @ lsr A jsr getAMinus1BitsMax8 inflateCodes_setOffsetLowByte: eor #$ff sta inflateCodes_sourcePointer lda getBits_base cpx #10 bcc inflateCodes_setOffsetHighByte lda getNPlus1Bits_mask-10,x jsr getBits clc inflateCodes_setOffsetHighByte: eor #$ff ; clc adc outputPointer+1 sta inflateCodes_sourcePointer+1 jsr copyByte jsr copyByte inflateCodes_copyByte: jsr copyByte dec inflateCodes_lengthMinus2 bne inflateCodes_copyByte ; jmp inflateCodes_loop beq inflateCodes_loop buildTempHuffmanTree: ; ldy #0 tya inflateDynamicBlock_clearCodeLengths: sta literalSymbolCodeLength,y sta literalSymbolCodeLength+TOTAL_SYMBOLS-256,y iny bne inflateDynamicBlock_clearCodeLengths ; numberOfPrimaryCodes = 257 + getBits(5) ; numberOfDistanceCodes = 1 + getBits(5) ; numberOfTemporaryCodes = 4 + getBits(4) ldx #3 inflateDynamicBlock_getHeader: lda inflateDynamicBlock_headerBits-1,x jsr getBits ; sec adc inflateDynamicBlock_headerBase-1,x sta inflateDynamicBlock_tempCodes-1,x sta inflateDynamicBlock_headerBase+1 dex bne inflateDynamicBlock_getHeader ; Get lengths of temporary codes in the order stored in tempCodeLengthOrder ; ldx #0 inflateDynamicBlock_getTempCodeLengths: lda #GET_3_BITS jsr getBits ldy tempCodeLengthOrder,x sta literalSymbolCodeLength,y ldy #0 inx cpx inflateDynamicBlock_tempCodes bcc inflateDynamicBlock_getTempCodeLengths ; Build Huffman trees basing on code lengths (in bits) ; stored in the *SymbolCodeLength arrays buildHuffmanTree: ; Clear nBitCode_totalCount, nBitCode_literalCount, nBitCode_controlCount tya ; lda #0 ;; sta:rne nBitCode_clearFrom,y+ R1: sta nBitCode_clearFrom,y INY BNE R1 ; Count number of codes of each length ; ldy #0 buildHuffmanTree_countCodeLengths: ldx literalSymbolCodeLength,y inc nBitCode_literalCount,x inc nBitCode_totalCount,x cpy #CONTROL_SYMBOLS bcs buildHuffmanTree_noControlSymbol ldx controlSymbolCodeLength,y inc nBitCode_controlCount,x inc nBitCode_totalCount,x buildHuffmanTree_noControlSymbol: iny bne buildHuffmanTree_countCodeLengths ; Calculate offsets of symbols sorted by code length ; lda #0 ldx #-3*TREE_SIZE buildHuffmanTree_calculateOffsets: sta nBitCode_literalOffset+3*TREE_SIZE-$100,x ;; add nBitCode_literalCount+3*TREE_SIZE-$100,x CLC ADC nBitCode_literalCount+3*TREE_SIZE-$100,x inx bne buildHuffmanTree_calculateOffsets ; Put symbols in their place in the sorted array ; ldy #0 buildHuffmanTree_assignCode: tya ldx literalSymbolCodeLength,y ;; ldy:inc nBitCode_literalOffset,x ldy nBitCode_literalOffset,x inc nBitCode_literalOffset,x sta codeToLiteralSymbol,y tay cpy #CONTROL_SYMBOLS bcs buildHuffmanTree_noControlSymbol2 ldx controlSymbolCodeLength,y ;; ldy:inc nBitCode_controlOffset,x ldy nBitCode_controlOffset,x inc nBitCode_controlOffset,x sta codeToControlSymbol,y tay buildHuffmanTree_noControlSymbol2: iny bne buildHuffmanTree_assignCode rts ; Read Huffman code using the primary tree fetchPrimaryCode: ldx #PRIMARY_TREE ; Read a code from input basing on the tree specified in X, ; return low byte of this code in A, ; return C flag reset for literal code, set for length code fetchCode: ; ldy #0 tya fetchCode_nextBit: jsr getBit ;; rol @ rol A inx ;; sub nBitCode_totalCount,x SEC SBC nBitCode_totalCount,x bcs fetchCode_nextBit ; clc adc nBitCode_controlCount,x bcs fetchCode_control ; clc adc nBitCode_literalOffset,x tax lda codeToLiteralSymbol,x clc rts fetchCode_control: ;; add nBitCode_controlOffset-1,x CLC ADC nBitCode_controlOffset-1,x tax lda codeToControlSymbol,x sec rts ; Read A minus 1 bits, but no more than 8 getAMinus1BitsMax8: rol getBits_base tax cmp #9 bcs getByte lda getNPlus1Bits_mask-2,x getBits: jsr getBits_loop getBits_normalizeLoop: lsr getBits_base ;; ror @ ror A bcc getBits_normalizeLoop rts ; Read 16 bits getWord: jsr getByte tax ; Read 8 bits getByte: lda #$80 getBits_loop: jsr getBit ;; ror @ ror A bcc getBits_loop rts ; Read one bit, return in the C flag getBit: lsr getBit_buffer bne getBit_return pha ; ldy #0 lda (inputPointer),y ;; inw inputPointer INC inputPointer BNE S4 INC inputPointer+1 S4: sec ;; ror @ ror A sta getBit_buffer pla getBit_return: rts ; Copy a previously written byte copyByte: ldy outputPointer lda (inflateCodes_sourcePointer),y ldy #0 ; Write a byte storeByte: sta (outputPointer),y inc outputPointer bne storeByte_return inc outputPointer+1 inc inflateCodes_sourcePointer+1 storeByte_return: rts getNPlus1Bits_mask: .byte GET_1_BIT,GET_2_BITS,GET_3_BITS,GET_4_BITS,GET_5_BITS,GET_6_BITS,GET_7_BITS tempCodeLengthOrder: .byte GET_2_BITS,GET_3_BITS,GET_7_BITS,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 inflateDynamicBlock_headerBits: .byte GET_4_BITS,GET_5_BITS,GET_5_BITS inflateDynamicBlock_headerBase: .byte 3,0,0 ; second byte is modified at runtime! .org inflate_data ; Data for building trees literalSymbolCodeLength: .org *+256 controlSymbolCodeLength: .org *+CONTROL_SYMBOLS ; Huffman trees nBitCode_clearFrom: nBitCode_totalCount: .org *+2*TREE_SIZE nBitCode_literalCount: .org *+TREE_SIZE nBitCode_controlCount: .org *+2*TREE_SIZE nBitCode_literalOffset: .org *+TREE_SIZE nBitCode_controlOffset: .org *+2*TREE_SIZE codeToLiteralSymbol: .org *+256 codeToControlSymbol: .org *+CONTROL_SYMBOLS END: */ unsigned char inflatecode[] = { 0xA0,0x00,0x84,0x04,0x84,0x05,0xA9,0x84, 0x20,0xA3,0xBB,0x4A,0x08,0xAA,0xD0,0x1F, 0x84,0x04,0x20,0xAC,0xBB,0x20,0xAC,0xBB, 0x85,0x05,0xB0,0x08,0x20,0xB0,0xBB,0x20, 0xD2,0xBB,0x90,0x75,0xE8,0xD0,0xF5,0xE6, 0x05,0xD0,0xF1,0x28,0x90,0xD6,0x60,0xA9, 0x04,0xC0,0x90,0x2A,0x99,0x00,0xBC,0xC0, 0x3E,0xB0,0x0D,0xA9,0x15,0xC0,0x20,0xB0, 0x04,0xC0,0x18,0x69,0xF2,0x99,0x00,0xBD, 0xC8,0xD0,0xE4,0xA9,0x20,0x85,0x09,0xCA, 0xF0,0x44,0x20,0xF5,0xBA,0xA2,0x00,0x08, 0x86,0x06,0x20,0x73,0xBB,0xAA,0x10,0x14, 0x20,0xA3,0xBB,0x69,0x01,0xE0,0xC0,0x90, 0x02,0x69,0x07,0xA8,0xA9,0x00,0xE0,0x84, 0xB0,0x02,0xA5,0x07,0xC8,0xA6,0x06,0x28, 0x90,0x0D,0x9D,0x00,0xBC,0xE8,0xE0,0x01, 0x88,0xD0,0xF5,0x85,0x07,0xF0,0xD0,0xE4, 0x09,0x90,0x02,0x09,0x10,0x9D,0x00,0xBD, 0xE8,0xE4,0x08,0x90,0xEB,0x88,0x20,0x24, 0xBB,0x20,0x73,0xBB,0x90,0x81,0xAA,0xF0, 0x8A,0x84,0x05,0xC9,0x09,0x90,0x14,0x98, 0xE0,0x1D,0xB0,0x0F,0xCA,0x8A,0x4A,0x66, 0x05,0xE6,0x05,0x4A,0x26,0x05,0x20,0x99, 0xBB,0x69,0x00,0x85,0x08,0xA2,0x10,0x20, 0x75,0xBB,0xE5,0x09,0xAA,0xC9,0x04,0x90, 0x06,0xE6,0x05,0x4A,0x20,0x99,0xBB,0x49, 0xFF,0x85,0x06,0xA5,0x05,0xE0,0x0A,0x90, 0x07,0xBD,0xD3,0xBB,0x20,0xA3,0xBB,0x18, 0x49,0xFF,0x65,0x03,0x85,0x07,0x20,0xCC, 0xBB,0x20,0xCC,0xBB,0x20,0xCC,0xBB,0xC6, 0x08,0xD0,0xF9,0xF0,0xA4,0x98,0x99,0x00, 0xBC,0x99,0x3E,0xBC,0xC8,0xD0,0xF7,0xA2, 0x03,0xBD,0xF6,0xBB,0x20,0xA3,0xBB,0x7D, 0xF9,0xBB,0x95,0x06,0x8D,0xFB,0xBB,0xCA, 0xD0,0xEF,0xA9,0x84,0x20,0xA3,0xBB,0xBC, 0xE4,0xBB,0x99,0x00,0xBC,0xA0,0x00,0xE8, 0xE4,0x07,0x90,0xEE,0x98,0x99,0x3E,0xBD, 0xC8,0xD0,0xFA,0xBE,0x00,0xBC,0xFE,0x5E, 0xBD,0xFE,0x3E,0xBD,0xC0,0x3E,0xB0,0x09, 0xBE,0x00,0xBD,0xFE,0x6E,0xBD,0xFE,0x3E, 0xBD,0xC8,0xD0,0xE7,0xA2,0xD0,0x9D,0xBE, 0xBC,0x18,0x7D,0x8E,0xBC,0xE8,0xD0,0xF6, 0x98,0xBE,0x00,0xBC,0xBC,0x8E,0xBD,0xFE, 0x8E,0xBD,0x99,0xBE,0xBD,0xA8,0xC0,0x3E, 0xB0,0x0D,0xBE,0x00,0xBD,0xBC,0x9E,0xBD, 0xFE,0x9E,0xBD,0x99,0xBE,0xBE,0xA8,0xC8, 0xD0,0xDE,0x60,0xA2,0x00,0x98,0x20,0xB9, 0xBB,0x2A,0xE8,0x38,0xFD,0x3E,0xBD,0xB0, 0xF5,0x7D,0x6E,0xBD,0xB0,0x09,0x7D,0x8E, 0xBD,0xAA,0xBD,0xBE,0xBD,0x18,0x60,0x18, 0x7D,0x9D,0xBD,0xAA,0xBD,0xBE,0xBE,0x38, 0x60,0x26,0x05,0xAA,0xC9,0x09,0xB0,0x10, 0xBD,0xDB,0xBB,0x20,0xB2,0xBB,0x46,0x05, 0x6A,0x90,0xFB,0x60,0x20,0xB0,0xBB,0xAA, 0xA9,0x80,0x20,0xB9,0xBB,0x6A,0x90,0xFA, 0x60,0x46,0x04,0xD0,0x0E,0x48,0xB1,0x00, 0xE6,0x00,0xD0,0x02,0xE6,0x01,0x38,0x6A, 0x85,0x04,0x68,0x60,0xA4,0x02,0xB1,0x06, 0xA0,0x00,0x91,0x02,0xE6,0x02,0xD0,0x04, 0xE6,0x03,0xE6,0x07,0x60,0x81,0x82,0x84, 0x88,0x90,0xA0,0xC0,0x82,0x84,0xC0,0x00, 0x08,0x07,0x09,0x06,0x0A,0x05,0x0B,0x04, 0x0C,0x03,0x0D,0x02,0x0E,0x01,0x0F,0x88, 0x90,0x90,0x03,0x00,0x00 }; /* ;fastload9600.s org = $BE80 ; should be $BE80 cout = $FDED ; character out sub crout = $FD8E ; CR out sub prbyte = $FDDA warm = $FF69 ; back to monitor tapein = $C060 pointer = $06 endbas = $80C ;target = $1000 target = $801 chksum = $00 inflate = $BA00 inf_zp = $0 start: .org endbas move: ldx #0 move1: lda moved,x sta fast,x inx bne move1 ; move 256 bytes ; ldx #0 move2: lda moved+256,x sta fast+256,x inx bpl move2 ; only 128 bytes to move jmp fast moved: .org org fast: lda #loadm jsr print lda #$ff sta chksum lda ld_beg ; setup point to target sta store+1 lda ld_beg+1 sta store+2 wait: bit tapein bpl wait waithi: bit tapein ; Wait for input to go high. bmi waithi pre: lda #1 ; Load sentinel bit ldx #0 ; Clear data index clc ; Clear carry (byte complete flag) data: bcc waitlo ; Skip if byte not complete store: sta store,x ; Store data byte eor chksum sta chksum lda #1 ; Re-load sentinel bit waitlo: bit tapein ; Wait for input to go low bpl waitlo bcc poll9 ; Poll at +9 cycles if no store inx ; Stored, so increment data index bne poll13 ; Poll at +13 cycles if no carry inc store+2 ; Increment data page bne poll21 ; (always) poll at +21 cycles one: sec ; one bit detected rol ; shift it into A jmp data ; and go handle data (C = sentinel) zero: clc ; zero bit detected rol ; shift it into A jmp data ; and go handle data (C = sentinel) poll9: bit tapein bpl zero ; zero bit (short)(9-15 cycles) poll13: bit tapein ; (2 cycles early if branched here) bpl zero ; zero bit (15-21 cycles) poll21: bit tapein bpl zero ; zero bit (21-27 cycles) bit tapein bpl zero ; zero bit (27-33 cycles) bit tapein bpl zero ; zero bit (33-39 cycles) bit tapein bpl zero ; zero bit (39-45 cycles) bit tapein bpl zero ; zero bit (45-51 cycles) bit tapein bpl zero ; zero bit (51-57 cycles) bit tapein bpl zero ; one bit (57-63 cycles) bit tapein bpl one ; one bit (63-69 cycles) bit tapein bpl one ; one bit (69-75 cycles) bit tapein bpl one ; one bit (75-81 cycles) bit tapein bpl one ; pre pulse (81-87 cycles) bit tapein bpl pre ; pre pulse (87-93 cycles) bit tapein bpl pre ; pre pulse (93-99 cycles) bit tapein bpl pre ; pre pulse (99-105 cycles) endcode: txa ; write end of file location + 1 clc adc store+1 sta store+1 bcc endcheck inc store+2 endcheck: lda ld_end cmp store+1 bne error lda ld_end+1 cmp store+2 bne error sumcheck: lda chksum bne sumerror lda inf_flag ; if inf_flag = 0 runit beq runit inf: jsr crout lda #infm jsr print lda inf_src ;src lsb sta inf_zp+0 lda inf_src+1 ;src msb sta inf_zp+1 lda inf_dst ;dst lsb sta inf_zp+2 lda inf_dst+1 ;dst msb sta inf_zp+3 jsr inflate lda inf_end ;dst end +1 lsb cmp inf_zp+2 bne error lda inf_end+1 ;dst end +1 msb cmp inf_zp+3 bne error runit: lda warm_flag ; if warm_flag = 1 warm boot bne warmit jmp (runcode) warmit: jmp warm ; run it sumerror: jsr crout lda #chkm jsr print error: lda #errm jsr print jmp warm print: sta pointer sty pointer+1 ldy #0 lda (pointer),y ; load initial char print1: ora #$80 jsr cout iny lda (pointer),y bne print1 rts chkm: .asciiz "CHKSUM " errm: .asciiz "ERROR" infm: .asciiz "INFLATING " ld_beg: .org *+2 ld_end: .org *+2 inf_src: .org *+2 runcode: inf_dst: .org *+2 inf_end: .org *+2 inf_flag: .org *+1 warm_flag: .org *+1 loadm: ;.asciiz "LOADING " end: */ unsigned char fastload9600[] = { 0xA2,0x00,0xBD,0x23, 0x08,0x9D,0x80,0xBE,0xE8,0xD0,0xF7,0xBD, 0x23,0x09,0x9D,0x80,0xBF,0xE8,0x10,0xF7, 0x4C,0x80,0xBE,0xA9,0xC6,0xA0,0xBF,0x20, 0x8E,0xBF,0xA9,0xFF,0x85,0x00,0xAD,0xBA, 0xBF,0x8D,0xA9,0xBE,0xAD,0xBB,0xBF,0x8D, 0xAA,0xBE,0x2C,0x60,0xC0,0x10,0xFB,0x2C, 0x60,0xC0,0x30,0xFB,0xA9,0x01,0xA2,0x00, 0x18,0x90,0x09,0x9D,0xA8,0xBE,0x45,0x00, 0x85,0x00,0xA9,0x01,0x2C,0x60,0xC0,0x10, 0xFB,0x90,0x12,0xE8,0xD0,0x14,0xEE,0xAA, 0xBE,0xD0,0x14,0x38,0x2A,0x4C,0xA6,0xBE, 0x18,0x2A,0x4C,0xA6,0xBE,0x2C,0x60,0xC0, 0x10,0xF6,0x2C,0x60,0xC0,0x10,0xF1,0x2C, 0x60,0xC0,0x10,0xEC,0x2C,0x60,0xC0,0x10, 0xE7,0x2C,0x60,0xC0,0x10,0xE2,0x2C,0x60, 0xC0,0x10,0xDD,0x2C,0x60,0xC0,0x10,0xD8, 0x2C,0x60,0xC0,0x10,0xD3,0x2C,0x60,0xC0, 0x10,0xCE,0x2C,0x60,0xC0,0x10,0xC4,0x2C, 0x60,0xC0,0x10,0xBF,0x2C,0x60,0xC0,0x10, 0xBA,0x2C,0x60,0xC0,0x10,0xB5,0x2C,0x60, 0xC0,0x10,0x91,0x2C,0x60,0xC0,0x10,0x8C, 0x2C,0x60,0xC0,0x10,0x87,0x8A,0x18,0x6D, 0xA9,0xBE,0x8D,0xA9,0xBE,0x90,0x03,0xEE, 0xAA,0xBE,0xAD,0xBC,0xBF,0xCD,0xA9,0xBE, 0xD0,0x55,0xAD,0xBD,0xBF,0xCD,0xAA,0xBE, 0xD0,0x4D,0xA5,0x00,0xD0,0x3F,0xAD,0xC4, 0xBF,0xF0,0x2F,0x20,0x8E,0xFD,0xA9,0xAF, 0xA0,0xBF,0x20,0x8E,0xBF,0xAD,0xBE,0xBF, 0x85,0x00,0xAD,0xBF,0xBF,0x85,0x01,0xAD, 0xC0,0xBF,0x85,0x02,0xAD,0xC1,0xBF,0x85, 0x03,0x20,0x00,0xBA,0xAD,0xC2,0xBF,0xC5, 0x02,0xD0,0x1C,0xAD,0xC3,0xBF,0xC5,0x03, 0xD0,0x15,0xAD,0xC5,0xBF,0xD0,0x03,0x6C, 0xC0,0xBF,0x4C,0x69,0xFF,0x20,0x8E,0xFD, 0xA9,0xA1,0xA0,0xBF,0x20,0x8E,0xBF,0xA9, 0xA9,0xA0,0xBF,0x20,0x8E,0xBF,0x4C,0x69, 0xFF,0x85,0x06,0x84,0x07,0xA0,0x00,0xB1, 0x06,0x09,0x80,0x20,0xED,0xFD,0xC8,0xB1, 0x06,0xD0,0xF6,0x60,0x43,0x48,0x4B,0x53, 0x55,0x4D,0x20,0x00,0x45,0x52,0x52,0x4F, 0x52,0x00,0x49,0x4E,0x46,0x4C,0x41,0x54, 0x49,0x4E,0x47,0x20,0x00 }; /* ;fastload8000.s org = $BE80 ; should be $BE80 cout = $FDED ; character out sub crout = $FD8E ; CR out sub prbyte = $FDDA warm = $FF69 ; back to monitor tapein = $C060 pointer = $06 endbas = $80C ;target = $1000 target = $801 chksum = $00 inflate = $BA00 inf_zp = $0 start: .org endbas move: ldx #0 move1: lda moved,x sta fast,x inx bne move1 ; move 256 bytes ; ldx #0 move2: lda moved+256,x sta fast+256,x inx bpl move2 ; only 128 bytes to move jmp fast moved: .org org fast: lda #loadm jsr print lda ld_beg ; load begin LSB location sta store+1 ; store it lda ld_beg+1 ; load begin MSB location sta store+2 ; store it ldx #0 ; set X to 0 lda #1 ; set A to 0 nsync: bit tapein ; 4 cycles, sync bit ; first pulse bpl nsync ; 2 + 1 cycles main: ldy #0 ; 2 set Y to 0 psync: bit tapein ; bmi psync ploop: iny ; 2 cycles bit tapein ; 4 cycles bpl ploop ; 2 +1 if branch, +1 if in another page ; total ~9 cycles cpy #$40 ; 2 cycles if Y - $40 > 0 endcode (770Hz) bpl endcode ; 2(3) cpy #$15 ; 2 cycles if Y - $15 > 0 main (2000Hz) bpl main ; 2(3) cpy #$07 ; 2, if Y<, then clear carry, if Y>= set carry store: rol store+1,x ; 7, roll carry bit into store ldy #0 ; 2 asl ; 2 A*=2 bne main ; 2(3) lda #1 ; 2 inx ; 2 cycles bne main ; 2(3) inc store+2 ; 6 cycles jmp main ; 3 cycles ; 34 subtotal max ; 36 subtotal max endcode: txa ; write end of file location + 1 clc adc store+1 sta store+1 bcc endcheck ; LSB didn't roll over to zero inc store+2 ; did roll over to zero, inc MSB endcheck: ; check for match of expected length lda ld_end cmp store+1 bne error lda ld_end+1 cmp store+2 bne error sumcheck: lda #0 sta pointer lda ld_beg+1 sta pointer+1 lda #$ff ; init checksum ldy ld_beg sumloop: eor (pointer),y ;last page? ldx pointer+1 cpx ld_end+1 beq last iny bne sumloop inc pointer+1 bne sumloop last: iny cpy ld_end bcc sumloop ; sty $01 sta chksum lda chksum bne sumerror lda inf_flag ; if inf_flag = 0 runit beq runit inf: jsr crout lda #infm jsr print lda inf_src ;src lsb sta inf_zp+0 lda inf_src+1 ;src msb sta inf_zp+1 lda inf_dst ;dst lsb sta inf_zp+2 lda inf_dst+1 ;dst msb sta inf_zp+3 jsr inflate lda inf_end ;dst end +1 lsb cmp inf_zp+2 bne error lda inf_end+1 ;dst end +1 msb cmp inf_zp+3 bne error runit: lda warm_flag ; if warm_flag = 1 warm boot bne warmit jmp (runcode) warmit: jmp warm ; run it sumerror: jsr crout lda #chkm jsr print error: lda #errm jsr print jmp warm print: sta pointer sty pointer+1 ldy #0 lda (pointer),y ; load initial char print1: ora #$80 jsr cout iny lda (pointer),y bne print1 rts chkm: .asciiz "CHKSUM " errm: .asciiz "ERROR" infm: .asciiz "INFLATING " ld_beg: .org *+2 ld_end: .org *+2 inf_src: .org *+2 runcode: inf_dst: .org *+2 inf_end: .org *+2 inf_flag: .org *+1 warm_flag: .org *+1 loadm: ;.asciiz "LOADING " end: */ unsigned char fastload8000[] = { 0xA2,0x00,0xBD,0x23, 0x08,0x9D,0x80,0xBE,0xE8,0xD0,0xF7,0xBD, 0x23,0x09,0x9D,0x80,0xBF,0xE8,0x10,0xF7, 0x4C,0x80,0xBE,0xA9,0x98,0xA0,0xBF,0x20, 0x60,0xBF,0xAD,0x8C,0xBF,0x8D,0xB4,0xBE, 0xAD,0x8D,0xBF,0x8D,0xB5,0xBE,0xA2,0x00, 0xA9,0x01,0x2C,0x60,0xC0,0x10,0xFB,0xA0, 0x00,0x2C,0x60,0xC0,0x30,0xFB,0xC8,0x2C, 0x60,0xC0,0x10,0xFA,0xC0,0x40,0x10,0x19, 0xC0,0x15,0x10,0xEB,0xC0,0x07,0x3E,0xB4, 0xBE,0xA0,0x00,0x0A,0xD0,0xE1,0xA9,0x01, 0xE8,0xD0,0xDC,0xEE,0xB5,0xBE,0x4C,0x9C, 0xBE,0x8A,0x18,0x6D,0xB4,0xBE,0x8D,0xB4, 0xBE,0x90,0x03,0xEE,0xB5,0xBE,0xAD,0x8E, 0xBF,0xCD,0xB4,0xBE,0xD0,0x7B,0xAD,0x8F, 0xBF,0xCD,0xB5,0xBE,0xD0,0x73,0xA9,0x00, 0x85,0x06,0xAD,0x8D,0xBF,0x85,0x07,0xA9, 0xFF,0xAC,0x8C,0xBF,0x51,0x06,0xA6,0x07, 0xEC,0x8F,0xBF,0xF0,0x07,0xC8,0xD0,0xF4, 0xE6,0x07,0xD0,0xF0,0xC8,0xCC,0x8E,0xBF, 0x90,0xEA,0x85,0x00,0xA5,0x00,0xD0,0x3F, 0xAD,0x96,0xBF,0xF0,0x2F,0x20,0x8E,0xFD, 0xA9,0x81,0xA0,0xBF,0x20,0x60,0xBF,0xAD, 0x90,0xBF,0x85,0x00,0xAD,0x91,0xBF,0x85, 0x01,0xAD,0x92,0xBF,0x85,0x02,0xAD,0x93, 0xBF,0x85,0x03,0x20,0x00,0xBA,0xAD,0x94, 0xBF,0xC5,0x02,0xD0,0x1C,0xAD,0x95,0xBF, 0xC5,0x03,0xD0,0x15,0xAD,0x97,0xBF,0xD0, 0x03,0x6C,0x92,0xBF,0x4C,0x69,0xFF,0x20, 0x8E,0xFD,0xA9,0x73,0xA0,0xBF,0x20,0x60, 0xBF,0xA9,0x7B,0xA0,0xBF,0x20,0x60,0xBF, 0x4C,0x69,0xFF,0x85,0x06,0x84,0x07,0xA0, 0x00,0xB1,0x06,0x09,0x80,0x20,0xED,0xFD, 0xC8,0xB1,0x06,0xD0,0xF6,0x60,0x43,0x48, 0x4B,0x53,0x55,0x4D,0x20,0x00,0x45,0x52, 0x52,0x4F,0x52,0x00,0x49,0x4E,0x46,0x4C, 0x41,0x54,0x49,0x4E,0x47,0x20,0x00 }; /* ;fastloadcd.s org = $BE80 ; should be $BE80 cout = $FDED ; character out sub crout = $FD8E ; CR out sub prbyte = $FDDA warm = $FF69 ; back to monitor tapein = $C060 pointer = $06 endbas = $80C ;target = $1000 target = $801 chksum = $00 inflate = $BA00 inf_zp = $0 start: .org endbas move: ldx #0 move1: lda moved,x sta fast,x inx bne move1 ; move 256 bytes ; ldx #0 move2: lda moved+256,x sta fast+256,x inx bpl move2 ; only 128 bytes to move jmp fast moved: .org org fast: lda #loadm jsr print lda #$ff sta chksum lda ld_beg ; setup point to target sta store+1 lda ld_beg+1 sta store+2 wait: bit tapein bpl wait waithi: bit tapein ; Wait for input to go high. bmi waithi pre: lda #1 ; Load sentinel bit ldx #0 ; Clear data index clc ; Clear carry (byte complete flag) data: bcc waitlo ; Skip if byte not complete store: sta store,x ; Store data byte eor chksum sta chksum lda #1 ; Re-load sentinel bit waitlo: bit tapein ; Wait for input to go low bpl waitlo bcc poll9 ; Poll at +9 cycles if no store inx ; Stored, so increment data index bne poll13 ; Poll at +13 cycles if no carry inc store+2 ; Increment data page bne poll21 ; (always) poll at +21 cycles one: sec ; one bit detected rol ; shift it into A jmp data ; and go handle data (C = sentinel) zero: clc ; zero bit detected rol ; shift it into A jmp data ; and go handle data (C = sentinel) poll9: bit tapein bpl zero ; zero bit (short)(9-15 cycles) poll13: bit tapein ; (2 cycles early if branched here) bpl zero ; zero bit (15-21 cycles) poll21: bit tapein bpl zero ; zero bit (21-27 cycles) bit tapein bpl zero ; zero bit (27-33 cycles) bit tapein bpl zero ; zero bit (33-39 cycles) bit tapein bpl zero ; zero bit (39-45 cycles) bit tapein bpl zero ; zero bit (45-51 cycles) bit tapein bpl zero ; zero bit (51-57 cycles) bit tapein bpl zero ; one bit (57-63 cycles) bit tapein bpl one ; one bit (63-69 cycles) bit tapein bpl one ; one bit (69-75 cycles) bit tapein bpl one ; one bit (75-81 cycles) bit tapein bpl one ; one pulse (81-87 cycles) bit tapein bpl one ; one pulse (87-93 cycles) bit tapein bpl pre ; pre pulse (93-99 cycles) bit tapein bpl pre ; pre pulse (99-105 cycles) bit tapein bpl pre ; pre pulse (99-111 cycles) endcode: txa ; write end of file location + 1 clc adc store+1 sta store+1 bcc endcheck inc store+2 endcheck: lda ld_end cmp store+1 bne error lda ld_end+1 cmp store+2 bne error sumcheck: lda chksum bne sumerror lda inf_flag ; if inf_flag = 0 runit beq runit inf: jsr crout lda #infm jsr print lda inf_src ;src lsb sta inf_zp+0 lda inf_src+1 ;src msb sta inf_zp+1 lda inf_dst ;dst lsb sta inf_zp+2 lda inf_dst+1 ;dst msb sta inf_zp+3 jsr inflate lda inf_end ;dst end +1 lsb cmp inf_zp+2 bne error lda inf_end+1 ;dst end +1 msb cmp inf_zp+3 bne error runit: lda warm_flag ; if warm_flag = 1 warm boot bne warmit jmp (runcode) warmit: jmp warm ; run it sumerror: jsr crout lda #chkm jsr print error: lda #errm jsr print jmp warm print: sta pointer sty pointer+1 ldy #0 lda (pointer),y ; load initial char print1: ora #$80 jsr cout iny lda (pointer),y bne print1 rts chkm: .asciiz "CHKSUM " errm: .asciiz "ERROR" infm: .asciiz "INFLATING " ld_beg: .org *+2 ld_end: .org *+2 inf_src: .org *+2 runcode: inf_dst: .org *+2 inf_end: .org *+2 inf_flag: .org *+1 warm_flag: .org *+1 loadm: ;.asciiz "LOADING " end: */ unsigned char fastloadcd[] = { 0xA2,0x00,0xBD,0x23, 0x08,0x9D,0x80,0xBE,0xE8,0xD0,0xF7,0xBD, 0x23,0x09,0x9D,0x80,0xBF,0xE8,0x10,0xF7, 0x4C,0x80,0xBE,0xA9,0xCB,0xA0,0xBF,0x20, 0x93,0xBF,0xA9,0xFF,0x85,0x00,0xAD,0xBF, 0xBF,0x8D,0xA9,0xBE,0xAD,0xC0,0xBF,0x8D, 0xAA,0xBE,0x2C,0x60,0xC0,0x10,0xFB,0x2C, 0x60,0xC0,0x30,0xFB,0xA9,0x01,0xA2,0x00, 0x18,0x90,0x09,0x9D,0xA8,0xBE,0x45,0x00, 0x85,0x00,0xA9,0x01,0x2C,0x60,0xC0,0x10, 0xFB,0x90,0x12,0xE8,0xD0,0x14,0xEE,0xAA, 0xBE,0xD0,0x14,0x38,0x2A,0x4C,0xA6,0xBE, 0x18,0x2A,0x4C,0xA6,0xBE,0x2C,0x60,0xC0, 0x10,0xF6,0x2C,0x60,0xC0,0x10,0xF1,0x2C, 0x60,0xC0,0x10,0xEC,0x2C,0x60,0xC0,0x10, 0xE7,0x2C,0x60,0xC0,0x10,0xE2,0x2C,0x60, 0xC0,0x10,0xDD,0x2C,0x60,0xC0,0x10,0xD8, 0x2C,0x60,0xC0,0x10,0xD3,0x2C,0x60,0xC0, 0x10,0xCE,0x2C,0x60,0xC0,0x10,0xC4,0x2C, 0x60,0xC0,0x10,0xBF,0x2C,0x60,0xC0,0x10, 0xBA,0x2C,0x60,0xC0,0x10,0xB5,0x2C,0x60, 0xC0,0x10,0xB0,0x2C,0x60,0xC0,0x10,0x8C, 0x2C,0x60,0xC0,0x10,0x87,0x2C,0x60,0xC0, 0x10,0x82,0x8A,0x18,0x6D,0xA9,0xBE,0x8D, 0xA9,0xBE,0x90,0x03,0xEE,0xAA,0xBE,0xAD, 0xC1,0xBF,0xCD,0xA9,0xBE,0xD0,0x55,0xAD, 0xC2,0xBF,0xCD,0xAA,0xBE,0xD0,0x4D,0xA5, 0x00,0xD0,0x3F,0xAD,0xC9,0xBF,0xF0,0x2F, 0x20,0x8E,0xFD,0xA9,0xB4,0xA0,0xBF,0x20, 0x93,0xBF,0xAD,0xC3,0xBF,0x85,0x00,0xAD, 0xC4,0xBF,0x85,0x01,0xAD,0xC5,0xBF,0x85, 0x02,0xAD,0xC6,0xBF,0x85,0x03,0x20,0x00, 0xBA,0xAD,0xC7,0xBF,0xC5,0x02,0xD0,0x1C, 0xAD,0xC8,0xBF,0xC5,0x03,0xD0,0x15,0xAD, 0xCA,0xBF,0xD0,0x03,0x6C,0xC5,0xBF,0x4C, 0x69,0xFF,0x20,0x8E,0xFD,0xA9,0xA6,0xA0, 0xBF,0x20,0x93,0xBF,0xA9,0xAE,0xA0,0xBF, 0x20,0x93,0xBF,0x4C,0x69,0xFF,0x85,0x06, 0x84,0x07,0xA0,0x00,0xB1,0x06,0x09,0x80, 0x20,0xED,0xFD,0xC8,0xB1,0x06,0xD0,0xF6, 0x60,0x43,0x48,0x4B,0x53,0x55,0x4D,0x20, 0x00,0x45,0x52,0x52,0x4F,0x52,0x00,0x49, 0x4E,0x46,0x4C,0x41,0x54,0x49,0x4E,0x47, 0x20,0x00 }; /* ;diskload9600.s org = $9000 ; should be $9000 cout = $FDED ; character out sub crout = $FD8E ; CR out sub prbyte = $FDDA ; print byte in hex tapein = $C060 ; read tape interface warm = $FF69 ; back to monitor clear = $FC58 ; clear screen endbas = $80C target = $1000 ; zero page parameters begload = $00 ; begin load location LSB/MSB endload = $02 ; end load location LSB/MSB chksum = $04 ; checksum location pointer = $0C ; LSB/MSB pointer start: .org endbas move: ; end of BASIC, move code to readtape addr ldx #0 move1: lda moved,x sta readtape,x ; lda moved+256,x ; sta readtape+256,x inx bne move1 phase1: jsr crout ; print LOADING... lda #loadm jsr print ; diskload2 ORG lda #$D0 ; store begin location LSB sta begload lda #$96 ; store begin location MSB sta begload+1 ; end of DOS + 1 for comparison lda #$00 ; store end location LSB sta endload lda #$C0 ; store end location MSB sta endload+1 jsr readtape ; get the code jmp $9700 ; run it loadm: .byte "LOADING INSTA-DISK, ETA " loadsec: ; 10 bytes for "XX SEC. ",$00 .byte 0,0,0,0,0,0,0,0,0,0 moved: .org org ; $9000 readtape: lda begload ; load begin LSB location sta store+1 ; store it lda begload+1 ; load begin MSB location sta store+2 ; store it lda #$ff ; init checksum sta chksum wait: bit tapein bpl wait waithi: bit tapein ; Wait for input to go high. bmi waithi pre: lda #1 ; Load sentinel bit ldx #0 ; Clear data index clc ; Clear carry (byte complete flag) data: bcc waitlo ; Skip if byte not complete store: sta target,x ; Store data byte eor chksum ; compute checksum sta chksum ; store checksum lda #1 ; Re-load sentinel bit waitlo: bit tapein ; Wait for input to go low bpl waitlo bcc poll9 ; Poll at +9 cycles if no store inx ; Stored, so increment data index bne poll13 ; Poll at +13 cycles if no carry inc store+2 ; Increment data page bne poll21 ; (always) poll at +21 cycles one: sec ; one bit detected rol ; shift it into A jmp data ; and go handle data (C = sentinel) zero: clc ; zero bit detected rol ; shift it into A jmp data ; and go handle data (C = sentinel) poll9: bit tapein bpl zero ; zero bit (short)(9-15 cycles) poll13: bit tapein ; (2 cycles early if branched here) bpl zero ; zero bit (15-21 cycles) poll21: bit tapein bpl zero ; zero bit (21-27 cycles) bit tapein bpl zero ; zero bit (27-33 cycles) bit tapein bpl zero ; zero bit (33-39 cycles) bit tapein bpl zero ; zero bit (39-45 cycles) bit tapein bpl zero ; zero bit (45-51 cycles) bit tapein bpl zero ; zero bit (51-57 cycles) bit tapein bpl zero ; one bit (57-63 cycles) bit tapein bpl one ; one bit (63-69 cycles) bit tapein bpl one ; one bit (69-75 cycles) bit tapein bpl one ; one bit (75-81 cycles) bit tapein bpl one ; one pulse (81-87 cycles) bit tapein bpl pre ; pre pulse (87-93 cycles) bit tapein bpl pre ; pre pulse (93-99 cycles) bit tapein bpl pre ; pre pulse (99-105 cycles) ; low freq signals end of data endcode: txa ; write end of file location + 1 clc adc store+1 sta store+1 bcc endcheck ; LSB didn't roll over to zero inc store+2 ; did roll over to zero, inc MSB endcheck: ; check for match of expected length lda endload cmp store+1 bne error lda endload+1 cmp store+2 bne error jsr ok sumcheck: jsr crout lda #chkm jsr print lda chksum bne error jmp ok ; return to caller error: lda #errm jsr print jmp warm ok: lda #okm print: sta pointer sty pointer+1 ldy #0 lda (pointer),y ; load initial char print1: ora #$80 jsr cout iny lda (pointer),y bne print1 rts chkm: .asciiz "CHKSUM " okm: .asciiz "OK" errm: .asciiz "ERROR" end: */ unsigned char diskload9600[] = { 0xA2,0x00,0xBD,0x59, 0x08,0x9D,0x00,0x90,0xE8,0xD0,0xF7,0x20, 0x8E,0xFD,0xA9,0x37,0xA0,0x08,0x20,0xCE, 0x90,0xA9,0xD0,0x85,0x00,0xA9,0x96,0x85, 0x01,0xA9,0x00,0x85,0x02,0xA9,0xC0,0x85, 0x03,0x20,0x00,0x90,0x4C,0x00,0x97,0x4C, 0x4F,0x41,0x44,0x49,0x4E,0x47,0x20,0x49, 0x4E,0x53,0x54,0x41,0x2D,0x44,0x49,0x53, 0x4B,0x2C,0x20,0x45,0x54,0x41,0x20,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xA5,0x00,0x8D,0x20,0x90,0xA5,0x01, 0x8D,0x21,0x90,0xA9,0xFF,0x85,0x04,0x2C, 0x60,0xC0,0x10,0xFB,0x2C,0x60,0xC0,0x30, 0xFB,0xA9,0x01,0xA2,0x00,0x18,0x90,0x09, 0x9D,0x00,0x10,0x45,0x04,0x85,0x04,0xA9, 0x01,0x2C,0x60,0xC0,0x10,0xFB,0x90,0x12, 0xE8,0xD0,0x14,0xEE,0x21,0x90,0xD0,0x14, 0x38,0x2A,0x4C,0x1D,0x90,0x18,0x2A,0x4C, 0x1D,0x90,0x2C,0x60,0xC0,0x10,0xF6,0x2C, 0x60,0xC0,0x10,0xF1,0x2C,0x60,0xC0,0x10, 0xEC,0x2C,0x60,0xC0,0x10,0xE7,0x2C,0x60, 0xC0,0x10,0xE2,0x2C,0x60,0xC0,0x10,0xDD, 0x2C,0x60,0xC0,0x10,0xD8,0x2C,0x60,0xC0, 0x10,0xD3,0x2C,0x60,0xC0,0x10,0xCE,0x2C, 0x60,0xC0,0x10,0xC4,0x2C,0x60,0xC0,0x10, 0xBF,0x2C,0x60,0xC0,0x10,0xBA,0x2C,0x60, 0xC0,0x10,0xB5,0x2C,0x60,0xC0,0x10,0x91, 0x2C,0x60,0xC0,0x10,0x8C,0x2C,0x60,0xC0, 0x10,0x87,0x8A,0x18,0x6D,0x20,0x90,0x8D, 0x20,0x90,0x90,0x03,0xEE,0x21,0x90,0xA5, 0x02,0xCD,0x20,0x90,0xD0,0x1B,0xA5,0x03, 0xCD,0x21,0x90,0xD0,0x14,0x20,0xCA,0x90, 0x20,0x8E,0xFD,0xA9,0xE1,0xA0,0x90,0x20, 0xCE,0x90,0xA5,0x04,0xD0,0x03,0x4C,0xCA, 0x90,0xA9,0xEC,0xA0,0x90,0x20,0xCE,0x90, 0x4C,0x69,0xFF,0xA9,0xE9,0xA0,0x90,0x85, 0x0C,0x84,0x0D,0xA0,0x00,0xB1,0x0C,0x09, 0x80,0x20,0xED,0xFD,0xC8,0xB1,0x0C,0xD0, 0xF6,0x60,0x43,0x48,0x4B,0x53,0x55,0x4D, 0x20,0x00,0x4F,0x4B,0x00,0x45,0x52,0x52, 0x4F,0x52,0x00 }; /* ;diskload8000.s org = $9000 ; should be $9000 cout = $FDED ; character out sub crout = $FD8E ; CR out sub prbyte = $FDDA ; print byte in hex tapein = $C060 ; read tape interface warm = $FF69 ; back to monitor clear = $FC58 ; clear screen endbas = $80C target = $1000 ; zero page parameters begload = $00 ; begin load location LSB/MSB endload = $02 ; end load location LSB/MSB chksum = $04 ; checksum location pointer = $0C ; LSB/MSB pointer start: .org endbas move: ; end of BASIC, move code to readtape addr ldx #0 move1: lda moved,x sta readtape,x ; lda moved+256,x ; sta readtape+256,x inx bne move1 phase1: jsr crout ; print LOADING... lda #loadm jsr print ; diskload2 ORG lda #$D0 ; store begin location LSB sta begload lda #$96 ; store begin location MSB sta begload+1 ; end of DOS + 1 for comparison lda #$00 ; store end location LSB sta endload lda #$C0 ; store end location MSB sta endload+1 jsr readtape ; get the code jmp $9700 ; run it loadm: .byte "LOADING INSTA-DISK, ETA " loadsec: ; 10 bytes for "XX SEC. ",$00 .byte 0,0,0,0,0,0,0,0,0,0 moved: .org org ; $9000 readtape: lda begload ; load begin LSB location sta store+1 ; store it lda begload+1 ; load begin MSB location sta store+2 ; store it ldx #0 ; set X to 0 lda #1 ; set A to 0 nsync: bit tapein ; 4 cycles, sync bit ; first pulse bpl nsync ; 2 + 1 cycles main: ldy #0 ; 2 set Y to 0 psync: bit tapein ; bmi psync ploop: iny ; 2 cycles bit tapein ; 4 cycles bpl ploop ; 2 +1 if branch, +1 if in another page ; total ~9 cycles cpy #$40 ; 2 cycles if Y - $40 > 0 endcode (770Hz) bpl endcode ; 2(3) cpy #$15 ; 2 cycles if Y - $15 > 0 main (2000Hz) bpl main ; 2(3) cpy #$07 ; 2, if Y<, then clear carry, if Y>= set carry store: rol store+1,x ; 7, roll carry bit into store ldy #0 ; 2 asl ; 2 A*=2 bne main ; 2(3) lda #1 ; 2 inx ; 2 cycles bne main ; 2(3) inc store+2 ; 6 cycles jmp main ; 3 cycles ; 34 subtotal max ; 36 subtotal max endcode: txa ; write end of file location + 1 clc adc store+1 sta store+1 bcc endcheck ; LSB didn't roll over to zero inc store+2 ; did roll over to zero, inc MSB endcheck: ; check for match of expected length lda endload cmp store+1 bne error lda endload+1 cmp store+2 bne error jsr ok sumcheck: jsr crout lda #chkm jsr print lda #0 sta pointer lda begload+1 sta pointer+1 lda #$ff ; init checksum ldy begload sumloop: eor (pointer),y ;last page? ldx pointer+1 cpx endload+1 beq last iny bne sumloop inc pointer+1 bne sumloop last: iny cpy endload bcc sumloop ldy #0 eor (endload),y ; sta chksum ; lda chksum bne error jmp ok ; return to caller error: lda #errm jsr print jmp warm ok: lda #okm print: sta pointer sty pointer+1 ldy #0 lda (pointer),y ; load initial char print1: ora #$80 jsr cout iny lda (pointer),y bne print1 rts chkm: .asciiz "CHKSUM " okm: .asciiz "OK" errm: .asciiz "ERROR" end: */ unsigned char diskload8000[] = { 0xA2,0x00,0xBD,0x59, 0x08,0x9D,0x00,0x90,0xE8,0xD0,0xF7,0x20, 0x8E,0xFD,0xA9,0x37,0xA0,0x08,0x20,0x9C, 0x90,0xA9,0xD0,0x85,0x00,0xA9,0x96,0x85, 0x01,0xA9,0x00,0x85,0x02,0xA9,0xC0,0x85, 0x03,0x20,0x00,0x90,0x4C,0x00,0x97,0x4C, 0x4F,0x41,0x44,0x49,0x4E,0x47,0x20,0x49, 0x4E,0x53,0x54,0x41,0x2D,0x44,0x49,0x53, 0x4B,0x2C,0x20,0x45,0x54,0x41,0x20,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xA5,0x00,0x8D,0x2B,0x90,0xA5,0x01, 0x8D,0x2C,0x90,0xA2,0x00,0xA9,0x01,0x2C, 0x60,0xC0,0x10,0xFB,0xA0,0x00,0x2C,0x60, 0xC0,0x30,0xFB,0xC8,0x2C,0x60,0xC0,0x10, 0xFA,0xC0,0x40,0x10,0x19,0xC0,0x15,0x10, 0xEB,0xC0,0x07,0x3E,0x2B,0x90,0xA0,0x00, 0x0A,0xD0,0xE1,0xA9,0x01,0xE8,0xD0,0xDC, 0xEE,0x2C,0x90,0x4C,0x13,0x90,0x8A,0x18, 0x6D,0x2B,0x90,0x8D,0x2B,0x90,0x90,0x03, 0xEE,0x2C,0x90,0xA5,0x02,0xCD,0x2B,0x90, 0xD0,0x3D,0xA5,0x03,0xCD,0x2C,0x90,0xD0, 0x36,0x20,0x98,0x90,0x20,0x8E,0xFD,0xA9, 0xAF,0xA0,0x90,0x20,0x9C,0x90,0xA9,0x00, 0x85,0x0C,0xA5,0x01,0x85,0x0D,0xA9,0xFF, 0xA4,0x00,0x51,0x0C,0xA6,0x0D,0xE4,0x03, 0xF0,0x07,0xC8,0xD0,0xF5,0xE6,0x0D,0xD0, 0xF1,0xC8,0xC4,0x02,0x90,0xEC,0xA0,0x00, 0x51,0x02,0xD0,0x03,0x4C,0x98,0x90,0xA9, 0xBA,0xA0,0x90,0x20,0x9C,0x90,0x4C,0x69, 0xFF,0xA9,0xB7,0xA0,0x90,0x85,0x0C,0x84, 0x0D,0xA0,0x00,0xB1,0x0C,0x09,0x80,0x20, 0xED,0xFD,0xC8,0xB1,0x0C,0xD0,0xF6,0x60, 0x43,0x48,0x4B,0x53,0x55,0x4D,0x20,0x00, 0x4F,0x4B,0x00,0x45,0x52,0x52,0x4F,0x52, 0x00 }; /* ;diskload2.s ; apple vectors cout = $FDED ; character out sub crout = $FD8E ; CR out sub prbyte = $FDDA ; print byte in hex tapein = $C060 ; read tape interface warm = $FF69 ; back to monitor clear = $FC58 ; clear screen movecur = $FB5B ; move cursor to ch,a dos = $9D84 asrom = $9D72 locrpl = $3E3 ; locate RWTS paramlist jsr rwts = $3D9 ; RWTS jsr cleos = $FC42 ; clear to end of screen init = $A54F motoroff= $C088 ; Turn drive motor off motoron = $C089 ; Turn drive motor on reboot = $FAA6 ; reboot machine bell = $FBDD ; ding rdkey = $FD0C ; read key ; my vectors ;print = $90CE ; from diskload.s readtape= $9000 inflate = $9B00 ; zero page parameters begload = $00 ; begin load location LSB/MSB endload = $02 ; end load location LSB/MSB chksum = $04 ; checksum location secnum = $05 ; loop var trknum = $06 ; loop var segcnt = $07 ; loop var buffer = $08 ; MSB of RWTS buffer trkcnt = $09 ; track counter (0-6) pointer = $0A ; pointer LSB/MSB prtptr = $0C ; pointer LSB/MSB fmptr = $0E ; file manager pointer inf_zp = $10 ; inflate vars (10) temp = $1E ; temp var ch = $24 ; cursor horizontal preg = $48 ; mon p reg ; other vars org = $9700 ; should be $9700 invsp = $60 ; inverse space for draw data = $1000 ; 7 track dump from inflate boot1o = $96D0 ; tape loaded boot 1 location boot1 = $3D0 ; target boot 1 location cmpbuf = $9200 ; buffer for sector check count = $900 .org org ldx #0 ; move 9cd0 to 3d0 move1: lda boot1o,x sta boot1,x inx cpx #$48 bne move1 ; branch on positive (0-127) patch: lda #$B3 ; hack since chksum could not be written to C000 sta $BFFF ; chksum was written do BFFF start: jsr clear ; clear screen lda #title jsr inv ; TRACK lda #19 ; col 20 sta ch lda #0 ; row 0 jsr movecur lda #<track ; print track ldy #>track jsr print lda #<header ; print header ldy #>header jsr print ldx #35 ; length of line jsr line lda #<left ; print left side of grid ldy #>left jsr print setupiob: jsr locrpl ; locate rwts paramlist sty pointer ; and save pointer sta pointer+1 lda #1 ; table type ldy #0 ; offset in RWTS sta (pointer),y ; write it to RWTS lda #6 * 16 ; slot 6 ldy #1 ; offset in RWTS sta (pointer),y ; write it to RWTS lda #1 ; drive number ldy #2 ; offset in RWTS sta (pointer),y ; write it to RWTS lda #254 ; volume number ldy #3 ; offset in RWTS sta (pointer),y ; write it to RWTS format: ; format the diskette lda infdata+20 ; check noformat flag bne endformat ; if not 0 jump to endformat jsr status lda #<formatm ; print formatting ldy #>formatm jsr print ;;; RWTS format (issues) ; lda #4 ; format(4) command ; ldy #$0C ; offset in RWTS ; sta (pointer),y ; write it to RWTS ; jsr locrpl ; locate rwts paramlist ; jsr rwts ; do it! ; bcs formaterror ; lda #0 ; sta preg ; fix p reg so mon is happy ; jmp endformat ;;; file manager format (works!) jsr $3DC ; load up Y and A sty fmptr sta fmptr+1 lda #$0B ; init command ldy #0 sta (fmptr),y lda #$9D ; DOS location ldy #1 sta (fmptr),y lda #254 ; volume number ldy #4 sta (fmptr),y lda #$01 ; drive number ldy #5 sta (fmptr),y lda #$06 ; slot number ldy #6 sta (fmptr),y lda #$00 ; scratch area LSB ldy #$0C sta (fmptr),y lda #$92 ; scratch area MSB ldy #$0D sta (fmptr),y jsr $3D6 ; doit! ldy #$0A ; return code lda (fmptr),y beq endformat formaterror: jmp diskerror endformat: ;;;begin segment loop (5) lda #0 ; 256 bytes/sector ldy #$0b ; offset in RWTS sta (pointer),y ; write it to RWTS lda #0 ; buffer LSB ldy #8 ; offset in RWTS sta (pointer),y ; write it to RWTS lda #0 sta trknum ; start with track 0 lda #5 sta segcnt segloop: ;;; fancy status here ; jsr status ; lda #<waitm ; print waiting for data ; ldy #>waitm ; jsr print ;countdown: ; lda #<count ; store begin location LSB ; sta begload ; lda #>count ; store begin location MSB ; sta begload+1 ; lda #<count+4 ; store end location LSB ; sta endload ; lda #>count ; store end location MSB ; sta endload+1 ;;;; hack readtape, fix later, POC for now ; lda #$60 ; return without check ; sta $9091 ; jsr readtape ; get the code ; lda #$8A ; put TXA back ; sta $9091 ;;;; end hack ; lda #18 ; sta $24 ; horiz ; lda #22 ; vert ; jsr movecur ; move cursor to $24,a; 0 base ; jsr cleos ; lda #<count ; print count down ; ldy #>count ; jsr print ; lda count ; cmp #$B0 ; bne countdown ; lda count+1 ; cmp #$B0 ; bne countdown ;;; end fancy stuff ;;; get 7 tracks from tape load: jsr status lda #<loadm ; print loading data ldy #>loadm jsr flash lda #<loadm2 ; print loading data ldy #>loadm2 jsr print sec lda #5 sbc segcnt asl asl tax stx temp lda infdata+2,x ; get sec jsr cout lda infdata+3,x ; get sec beq second jsr cout second: lda #<secm ; print sec ldy #>secm jsr print ldx temp lda infdata+0,x ; store begin location LSB sta begload lda infdata+1,x ; store begin location MSB sta begload+1 lda #$00 ; store end location LSB sta endload lda #$90 ; store end location MSB sta endload+1 jsr readtape ; get the code inf: ; turn motor on to save 1-2 sec ldx #$60 ; slot #6 lda motoron,x ; turn it on jsr status lda #<inflatem ; print inflating ldy #>inflatem jsr print ldx temp lda infdata+0,x ;src lsb sta inf_zp+0 lda infdata+1,x ;src msb sta inf_zp+1 lda #<data ;dst lsb sta inf_zp+2 lda #>data ;dst msb sta inf_zp+3 jsr inflate lda #$00 ;dst end +1 lsb cmp inf_zp+2 bne error lda #$80 ;dst end +1 msb cmp inf_zp+3 bne error ;;;begin track loop (7) jsr status lda #<writem ; print writing ldy #>writem jsr print lda #>data sta buffer lda #7 sta trkcnt ; do 7 tracks/segment trkloop: lda trknum ; track number ldy #4 ; offset in RWTS sta (pointer),y ; write it to RWTS ; lda #0 ; seek(0) command ; ldy #$0C ; offset in RWTS ; sta (pointer),y ; write it to RWTS ; jsr locrpl ; locate rwts paramlist ; jsr rwts ; do it! ; bcs diskerror ;;;begin sector loop (16), backwards is faster, much faster lda #$F sta secnum secloop: ;jsr draw_w ; write sector from buffer to disk jsr draw_s ; write sector from buffer to disk lda secnum ; sector number ldy #5 ; offset in RWTS sta (pointer),y ; write it to RWTS lda buffer ; buffer MSB clc adc secnum ldy #9 ; offset in RWTS sta (pointer),y ; write it to RWTS lda #2 ; read(1)/write(2) command ldy #$0C ; offset in RWTS sta (pointer),y ; write it to RWTS jsr locrpl ; locate rwts paramlist jsr rwts ; do it! bcs diskerror lda #0 sta preg ; fix p reg so mon is happy ;jsr draw_r ; read sector from disk to compare addr ;lda #>cmpbuf ; compare MSB ;ldy #9 ; offset in RWTS ;sta (pointer),y ; write it to RWTS ;lda #1 ; read(1)/write(2) command ;ldy #$0C ; offset in RWTS ;sta (pointer),y ; write it to RWTS ;jsr locrpl ; locate rwts paramlist ;jsr rwts ; do it! ;bcs diskerror ;lda #0 ;sta preg ; fix p reg so mon is happy ;;; compare code ;jsr draw_s ; draw a space in the grid if OK dec secnum bpl secloop ;;;end sector loop lda buffer ; buffer += $10 clc adc #$10 sta buffer inc trknum ; next track dec trkcnt ; bne trkloop ; 0, all done with 7 tracks ;;;end track loop dec segcnt ; beq done ; 0, all done with 5 segments jmp segloop ;;;end segment loop ;;; prompt for data only load? done: jsr status lda #<donem ; print done ldy #>donem jsr print jsr bell jsr rdkey jmp reboot error: ; turn motor off, just in case left on ldx #$60 ; slot #6 lda motoroff,x ; turn it off lda #<errorm ; print error ldy #>errorm jsr print jmp warm diskerror: lda #0 sta preg ; fix p reg so mon is happy jsr status lda #<diskerrorm ; print error ldy #>diskerrorm jsr print jmp warm status: lda #0 sta $24 ; horiz lda #22 ; vert jsr movecur ; move cursor to $24,a; 0 base jmp cleos draw_w: ; print a 'W' in the grid clc lda #4 adc secnum tay lda #4 adc trknum ldx #'W' jmp draw draw_r: ; print a 'R' in the grid clc lda #4 adc secnum tay lda #4 adc trknum ldx #'R' jmp draw draw_s: ; print a ' ' in the grid clc lda #4 adc secnum tay lda #4 adc trknum ldx #invsp draw: ; a=horiz, y=vert, x=letter sta $24 ; horiz tya jsr movecur txa eor #$40 jsr cout rts line: lda #'-' ora #$80 loop0: jsr cout dex bne loop0 jsr crout rts inv: sta prtptr sty prtptr+1 ldy #0 lda (prtptr),y ; load initial char inv1: and #$3F jsr cout iny lda (prtptr),y bne inv1 rts flash: sta prtptr sty prtptr+1 ldy #0 lda (prtptr),y ; load initial char flash1: ora #$40 jsr cout iny lda (prtptr),y bne flash1 rts print: sta prtptr sty prtptr+1 ldy #0 lda (prtptr),y ; load initial char print1: ora #$80 jsr cout iny lda (prtptr),y bne print1 rts title: .asciiz "INSTA-DISK" errorm: .asciiz "ERROR" diskerrorm: .asciiz "DISK ERROR" donem: .asciiz "DONE. PRESS [RETURN] TO REBOOT." inflatem: .asciiz "INFLATING DATA " loadm: .asciiz "LOADING DATA" loadm2: .asciiz ", ETA " secm: .asciiz " SEC. " formatm: .asciiz "FORMATTING DISK " waitm: .asciiz "WAITING FOR DATA: " writem: .asciiz "WRITING DATA " track: .byte "TRACK",$0D,0 header: .byte " 1111111111222222222233333",$0D .byte " 01234567890123456789012345678901234",$0D .byte " ",0 left: .byte " 0|",$0D .byte " 1|",$0D .byte " 2|",$0D .byte " 3|",$0D .byte " 4|",$0D .byte "S 5|",$0D .byte "E 6|",$0D .byte "C 7|",$0D .byte "T 8|",$0D .byte "O 9|",$0D .byte "R A|",$0D .byte " B|",$0D .byte " C|",$0D .byte " D|",$0D .byte " E|",$0D .byte " F|",$0D,0 infdata: ;.byte 0,0,0,0 ; LSB/MSB start, ETA in sec ;.byte 0,0,0,0 ; LSB/MSB start, ETA in sec ;.byte 0,0,0,0 ; LSB/MSB start, ETA in sec ;.byte 0,0,0,0 ; LSB/MSB start, ETA in sec ;.byte 0,0,0,0 ; LSB/MSB start, ETA in sec ;.byte 0 ; format flag, 1 = no format */ unsigned char diskloadcode2[] = { 0xA2,0x00,0xBD,0xD0,0x96,0x9D,0xD0,0x03, 0xE8,0xE0,0x48,0xD0,0xF5,0xA9,0xB3,0x8D, 0xFF,0xBF,0x20,0x58,0xFC,0xA9,0x4C,0xA0, 0x99,0x20,0x13,0x99,0xA9,0x13,0x85,0x24, 0xA9,0x00,0x20,0x5B,0xFB,0xA9,0xE5,0xA0, 0x99,0x20,0x39,0x99,0xA9,0xEC,0xA0,0x99, 0x20,0x39,0x99,0xA2,0x23,0x20,0x05,0x99, 0xA9,0x41,0xA0,0x9A,0x20,0x39,0x99,0x20, 0xE3,0x03,0x84,0x0A,0x85,0x0B,0xA9,0x01, 0xA0,0x00,0x91,0x0A,0xA9,0x60,0xA0,0x01, 0x91,0x0A,0xA9,0x01,0xA0,0x02,0x91,0x0A, 0xA9,0xFE,0xA0,0x03,0x91,0x0A,0xAD,0xA6, 0x9A,0xD0,0x47,0x20,0xC2,0x98,0xA9,0xB3, 0xA0,0x99,0x20,0x39,0x99,0x20,0xDC,0x03, 0x84,0x0E,0x85,0x0F,0xA9,0x0B,0xA0,0x00, 0x91,0x0E,0xA9,0x9D,0xA0,0x01,0x91,0x0E, 0xA9,0xFE,0xA0,0x04,0x91,0x0E,0xA9,0x01, 0xA0,0x05,0x91,0x0E,0xA9,0x06,0xA0,0x06, 0x91,0x0E,0xA9,0x00,0xA0,0x0C,0x91,0x0E, 0xA9,0x92,0xA0,0x0D,0x91,0x0E,0x20,0xD6, 0x03,0xA0,0x0A,0xB1,0x0E,0xF0,0x03,0x4C, 0xB1,0x98,0xA9,0x00,0xA0,0x0B,0x91,0x0A, 0xA9,0x00,0xA0,0x08,0x91,0x0A,0xA9,0x00, 0x85,0x06,0xA9,0x05,0x85,0x07,0x20,0xC2, 0x98,0xA9,0x98,0xA0,0x99,0x20,0x26,0x99, 0xA9,0xA5,0xA0,0x99,0x20,0x39,0x99,0x38, 0xA9,0x05,0xE5,0x07,0x0A,0x0A,0xAA,0x86, 0x1E,0xBD,0x94,0x9A,0x20,0xED,0xFD,0xBD, 0x95,0x9A,0xF0,0x03,0x20,0xED,0xFD,0xA9, 0xAC,0xA0,0x99,0x20,0x39,0x99,0xA6,0x1E, 0xBD,0x92,0x9A,0x85,0x00,0xBD,0x93,0x9A, 0x85,0x01,0xA9,0x00,0x85,0x02,0xA9,0x90, 0x85,0x03,0x20,0x00,0x90,0xA2,0x60,0xBD, 0x89,0xC0,0x20,0xC2,0x98,0xA9,0x88,0xA0, 0x99,0x20,0x39,0x99,0xA6,0x1E,0xBD,0x92, 0x9A,0x85,0x10,0xBD,0x93,0x9A,0x85,0x11, 0xA9,0x00,0x85,0x12,0xA9,0x10,0x85,0x13, 0x20,0x00,0x9B,0xA9,0x00,0xC5,0x12,0xD0, 0x71,0xA9,0x80,0xC5,0x13,0xD0,0x6B,0x20, 0xC2,0x98,0xA9,0xD7,0xA0,0x99,0x20,0x39, 0x99,0xA9,0x10,0x85,0x08,0xA9,0x07,0x85, 0x09,0xA5,0x06,0xA0,0x04,0x91,0x0A,0xA9, 0x0F,0x85,0x05,0x20,0xEC,0x98,0xA5,0x05, 0xA0,0x05,0x91,0x0A,0xA5,0x08,0x18,0x65, 0x05,0xA0,0x09,0x91,0x0A,0xA9,0x02,0xA0, 0x0C,0x91,0x0A,0x20,0xE3,0x03,0x20,0xD9, 0x03,0xB0,0x3E,0xA9,0x00,0x85,0x48,0xC6, 0x05,0x10,0xD8,0xA5,0x08,0x18,0x69,0x10, 0x85,0x08,0xE6,0x06,0xC6,0x09,0xD0,0xC1, 0xC6,0x07,0xF0,0x03,0x4C,0xBE,0x97,0x20, 0xC2,0x98,0xA9,0x68,0xA0,0x99,0x20,0x39, 0x99,0x20,0xDD,0xFB,0x20,0x0C,0xFD,0x4C, 0xA6,0xFA,0xA2,0x60,0xBD,0x88,0xC0,0xA9, 0x57,0xA0,0x99,0x20,0x39,0x99,0x4C,0x69, 0xFF,0xA9,0x00,0x85,0x48,0x20,0xC2,0x98, 0xA9,0x5D,0xA0,0x99,0x20,0x39,0x99,0x4C, 0x69,0xFF,0xA9,0x00,0x85,0x24,0xA9,0x16, 0x20,0x5B,0xFB,0x4C,0x42,0xFC,0x18,0xA9, 0x04,0x65,0x05,0xA8,0xA9,0x04,0x65,0x06, 0xA2,0x57,0x4C,0xF8,0x98,0x18,0xA9,0x04, 0x65,0x05,0xA8,0xA9,0x04,0x65,0x06,0xA2, 0x52,0x4C,0xF8,0x98,0x18,0xA9,0x04,0x65, 0x05,0xA8,0xA9,0x04,0x65,0x06,0xA2,0x60, 0x85,0x24,0x98,0x20,0x5B,0xFB,0x8A,0x49, 0x40,0x20,0xED,0xFD,0x60,0xA9,0x2D,0x09, 0x80,0x20,0xED,0xFD,0xCA,0xD0,0xFA,0x20, 0x8E,0xFD,0x60,0x85,0x0C,0x84,0x0D,0xA0, 0x00,0xB1,0x0C,0x29,0x3F,0x20,0xED,0xFD, 0xC8,0xB1,0x0C,0xD0,0xF6,0x60,0x85,0x0C, 0x84,0x0D,0xA0,0x00,0xB1,0x0C,0x09,0x40, 0x20,0xED,0xFD,0xC8,0xB1,0x0C,0xD0,0xF6, 0x60,0x85,0x0C,0x84,0x0D,0xA0,0x00,0xB1, 0x0C,0x09,0x80,0x20,0xED,0xFD,0xC8,0xB1, 0x0C,0xD0,0xF6,0x60,0x49,0x4E,0x53,0x54, 0x41,0x2D,0x44,0x49,0x53,0x4B,0x00,0x45, 0x52,0x52,0x4F,0x52,0x00,0x44,0x49,0x53, 0x4B,0x20,0x45,0x52,0x52,0x4F,0x52,0x00, 0x44,0x4F,0x4E,0x45,0x2E,0x20,0x50,0x52, 0x45,0x53,0x53,0x20,0x5B,0x52,0x45,0x54, 0x55,0x52,0x4E,0x5D,0x20,0x54,0x4F,0x20, 0x52,0x45,0x42,0x4F,0x4F,0x54,0x2E,0x00, 0x49,0x4E,0x46,0x4C,0x41,0x54,0x49,0x4E, 0x47,0x20,0x44,0x41,0x54,0x41,0x20,0x00, 0x4C,0x4F,0x41,0x44,0x49,0x4E,0x47,0x20, 0x44,0x41,0x54,0x41,0x00,0x2C,0x20,0x45, 0x54,0x41,0x20,0x00,0x20,0x53,0x45,0x43, 0x2E,0x20,0x00,0x46,0x4F,0x52,0x4D,0x41, 0x54,0x54,0x49,0x4E,0x47,0x20,0x44,0x49, 0x53,0x4B,0x20,0x00,0x57,0x41,0x49,0x54, 0x49,0x4E,0x47,0x20,0x46,0x4F,0x52,0x20, 0x44,0x41,0x54,0x41,0x3A,0x20,0x00,0x57, 0x52,0x49,0x54,0x49,0x4E,0x47,0x20,0x44, 0x41,0x54,0x41,0x20,0x00,0x54,0x52,0x41, 0x43,0x4B,0x0D,0x00,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x31,0x31,0x31,0x31,0x31,0x31, 0x31,0x31,0x31,0x31,0x32,0x32,0x32,0x32, 0x32,0x32,0x32,0x32,0x32,0x32,0x33,0x33, 0x33,0x33,0x33,0x0D,0x20,0x20,0x20,0x20, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, 0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35, 0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33, 0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31, 0x32,0x33,0x34,0x0D,0x20,0x20,0x20,0x20, 0x00,0x20,0x20,0x30,0x7C,0x0D,0x20,0x20, 0x31,0x7C,0x0D,0x20,0x20,0x32,0x7C,0x0D, 0x20,0x20,0x33,0x7C,0x0D,0x20,0x20,0x34, 0x7C,0x0D,0x53,0x20,0x35,0x7C,0x0D,0x45, 0x20,0x36,0x7C,0x0D,0x43,0x20,0x37,0x7C, 0x0D,0x54,0x20,0x38,0x7C,0x0D,0x4F,0x20, 0x39,0x7C,0x0D,0x52,0x20,0x41,0x7C,0x0D, 0x20,0x20,0x42,0x7C,0x0D,0x20,0x20,0x43, 0x7C,0x0D,0x20,0x20,0x44,0x7C,0x0D,0x20, 0x20,0x45,0x7C,0x0D,0x20,0x20,0x46,0x7C, 0x0D,0x00 }; /* ;diskload3.s ; inflate - uncompress data stored in the DEFLATE format ; by Piotr Fusik <fox@scene.pl> ; Last modified: 2007-06-17 ; Compile with xasm (http://xasm.atari.org/), for example: ; xasm inflate.asx /l /d:inflate=$b700 /d:inflate_data=$b900 /d:inflate_zp=$f0 ; inflate is 509 bytes of code and initialized data ; inflate_data is 764 bytes of uninitialized data ; inflate_zp is 10 bytes on page zero ; hacked for apple ii and ca65 by Egan Ford <egan@sense.net> ; dates ; compile nodes ; changes ;EFF .define equ = inflate = $9B00 inflate_zp = $10 inflate_data = $9200 ; Pointer to compressed data inputPointer equ inflate_zp ; 2 bytes ; Pointer to uncompressed data outputPointer equ inflate_zp+2 ; 2 bytes ; Local variables getBit_buffer equ inflate_zp+4 ; 1 byte getBits_base equ inflate_zp+5 ; 1 byte inflateStoredBlock_pageCounter equ inflate_zp+5 ; 1 byte inflateCodes_sourcePointer equ inflate_zp+6 ; 2 bytes inflateDynamicBlock_lengthIndex equ inflate_zp+6 ; 1 byte inflateDynamicBlock_lastLength equ inflate_zp+7 ; 1 byte inflateDynamicBlock_tempCodes equ inflate_zp+7 ; 1 byte inflateCodes_lengthMinus2 equ inflate_zp+8 ; 1 byte inflateDynamicBlock_allCodes equ inflate_zp+8 ; 1 byte inflateCodes_primaryCodes equ inflate_zp+9 ; 1 byte ; Argument values for getBits GET_1_BIT equ $81 GET_2_BITS equ $82 GET_3_BITS equ $84 GET_4_BITS equ $88 GET_5_BITS equ $90 GET_6_BITS equ $a0 GET_7_BITS equ $c0 ; Maximum length of a Huffman code MAX_CODE_LENGTH equ 15 ; Huffman trees TREE_SIZE equ MAX_CODE_LENGTH+1 PRIMARY_TREE equ 0 DISTANCE_TREE equ TREE_SIZE ; Alphabet LENGTH_SYMBOLS equ 1+29+2 DISTANCE_SYMBOLS equ 30 CONTROL_SYMBOLS equ LENGTH_SYMBOLS+DISTANCE_SYMBOLS TOTAL_SYMBOLS equ 256+CONTROL_SYMBOLS ; Optional (recommend for c2t or DOS) ; DOS header location and size LSB/MSB ; .byte <START,>START,<(END-START),>(END-START) ; Uncompress DEFLATE stream starting from the address stored in inputPointer ; to the memory starting from the address stored in outputPointer ;; org inflate .org inflate START: ;; mvy #0 getBit_buffer LDY #0 STY getBit_buffer inflate_blockLoop: ; Get a bit of EOF and two bits of block type ; ldy #0 sty getBits_base lda #GET_3_BITS jsr getBits ;; lsr @ lsr A php tax bne inflateCompressedBlock ; Copy uncompressed block ; ldy #0 sty getBit_buffer jsr getWord jsr getWord sta inflateStoredBlock_pageCounter ; jmp inflateStoredBlock_firstByte bcs inflateStoredBlock_firstByte inflateStoredBlock_copyByte: jsr getByte inflateStoreByte: jsr storeByte bcc inflateCodes_loop inflateStoredBlock_firstByte: inx bne inflateStoredBlock_copyByte inc inflateStoredBlock_pageCounter bne inflateStoredBlock_copyByte inflate_nextBlock: plp bcc inflate_blockLoop rts inflateCompressedBlock: ; Decompress a block with fixed Huffman trees ; :144 dta 8 ; :112 dta 9 ; :24 dta 7 ; :6 dta 8 ; :2 dta 8 ; codes with no meaning ; :30 dta 5+DISTANCE_TREE ; ldy #0 inflateFixedBlock_setCodeLengths: lda #4 cpy #144 ;; rol @ rol A sta literalSymbolCodeLength,y cpy #CONTROL_SYMBOLS bcs inflateFixedBlock_noControlSymbol lda #5+DISTANCE_TREE cpy #LENGTH_SYMBOLS bcs inflateFixedBlock_setControlCodeLength cpy #24 adc #2-DISTANCE_TREE inflateFixedBlock_setControlCodeLength: sta controlSymbolCodeLength,y inflateFixedBlock_noControlSymbol: iny bne inflateFixedBlock_setCodeLengths ; mva #LENGTH_SYMBOLS inflateCodes_primaryCodes LDA #LENGTH_SYMBOLS STA inflateCodes_primaryCodes dex beq inflateCodes ; Decompress a block reading Huffman trees first ; Build the tree for temporary codes jsr buildTempHuffmanTree ; Use temporary codes to get lengths of literal/length and distance codes ldx #0 ; sec inflateDynamicBlock_decodeLength: php stx inflateDynamicBlock_lengthIndex ; Fetch a temporary code jsr fetchPrimaryCode ; Temporary code 0..15: put this length tax bpl inflateDynamicBlock_verbatimLength ; Temporary code 16: repeat last length 3 + getBits(2) times ; Temporary code 17: put zero length 3 + getBits(3) times ; Temporary code 18: put zero length 11 + getBits(7) times jsr getBits ; sec adc #1 cpx #GET_7_BITS ;; scc:adc #7 BCC S1 adc #7 S1: tay lda #0 cpx #GET_3_BITS ;; scs:lda inflateDynamicBlock_lastLength BCS S2 lda inflateDynamicBlock_lastLength S2: inflateDynamicBlock_verbatimLength: iny ldx inflateDynamicBlock_lengthIndex plp inflateDynamicBlock_storeLength: bcc inflateDynamicBlock_controlSymbolCodeLength ;; sta literalSymbolCodeLength,x+ sta literalSymbolCodeLength,x INX cpx #1 inflateDynamicBlock_storeNext: dey bne inflateDynamicBlock_storeLength sta inflateDynamicBlock_lastLength ; jmp inflateDynamicBlock_decodeLength beq inflateDynamicBlock_decodeLength inflateDynamicBlock_controlSymbolCodeLength: cpx inflateCodes_primaryCodes ;; scc:ora #DISTANCE_TREE BCC S3 ora #DISTANCE_TREE S3: ;; sta controlSymbolCodeLength,x+ sta controlSymbolCodeLength,x INX cpx inflateDynamicBlock_allCodes bcc inflateDynamicBlock_storeNext dey ; ldy #0 ; jmp inflateCodes ; Decompress a block inflateCodes: jsr buildHuffmanTree inflateCodes_loop: jsr fetchPrimaryCode bcc inflateStoreByte tax beq inflate_nextBlock ; Copy sequence from look-behind buffer ; ldy #0 sty getBits_base cmp #9 bcc inflateCodes_setSequenceLength tya ; lda #0 cpx #1+28 bcs inflateCodes_setSequenceLength dex txa ;; lsr @ lsr A ror getBits_base inc getBits_base ;; lsr @ lsr A rol getBits_base jsr getAMinus1BitsMax8 ; sec adc #0 inflateCodes_setSequenceLength: sta inflateCodes_lengthMinus2 ldx #DISTANCE_TREE jsr fetchCode ; sec sbc inflateCodes_primaryCodes tax cmp #4 bcc inflateCodes_setOffsetLowByte inc getBits_base ;; lsr @ lsr A jsr getAMinus1BitsMax8 inflateCodes_setOffsetLowByte: eor #$ff sta inflateCodes_sourcePointer lda getBits_base cpx #10 bcc inflateCodes_setOffsetHighByte lda getNPlus1Bits_mask-10,x jsr getBits clc inflateCodes_setOffsetHighByte: eor #$ff ; clc adc outputPointer+1 sta inflateCodes_sourcePointer+1 jsr copyByte jsr copyByte inflateCodes_copyByte: jsr copyByte dec inflateCodes_lengthMinus2 bne inflateCodes_copyByte ; jmp inflateCodes_loop beq inflateCodes_loop buildTempHuffmanTree: ; ldy #0 tya inflateDynamicBlock_clearCodeLengths: sta literalSymbolCodeLength,y sta literalSymbolCodeLength+TOTAL_SYMBOLS-256,y iny bne inflateDynamicBlock_clearCodeLengths ; numberOfPrimaryCodes = 257 + getBits(5) ; numberOfDistanceCodes = 1 + getBits(5) ; numberOfTemporaryCodes = 4 + getBits(4) ldx #3 inflateDynamicBlock_getHeader: lda inflateDynamicBlock_headerBits-1,x jsr getBits ; sec adc inflateDynamicBlock_headerBase-1,x sta inflateDynamicBlock_tempCodes-1,x sta inflateDynamicBlock_headerBase+1 dex bne inflateDynamicBlock_getHeader ; Get lengths of temporary codes in the order stored in tempCodeLengthOrder ; ldx #0 inflateDynamicBlock_getTempCodeLengths: lda #GET_3_BITS jsr getBits ldy tempCodeLengthOrder,x sta literalSymbolCodeLength,y ldy #0 inx cpx inflateDynamicBlock_tempCodes bcc inflateDynamicBlock_getTempCodeLengths ; Build Huffman trees basing on code lengths (in bits) ; stored in the *SymbolCodeLength arrays buildHuffmanTree: ; Clear nBitCode_totalCount, nBitCode_literalCount, nBitCode_controlCount tya ; lda #0 ;; sta:rne nBitCode_clearFrom,y+ R1: sta nBitCode_clearFrom,y INY BNE R1 ; Count number of codes of each length ; ldy #0 buildHuffmanTree_countCodeLengths: ldx literalSymbolCodeLength,y inc nBitCode_literalCount,x inc nBitCode_totalCount,x cpy #CONTROL_SYMBOLS bcs buildHuffmanTree_noControlSymbol ldx controlSymbolCodeLength,y inc nBitCode_controlCount,x inc nBitCode_totalCount,x buildHuffmanTree_noControlSymbol: iny bne buildHuffmanTree_countCodeLengths ; Calculate offsets of symbols sorted by code length ; lda #0 ldx #-3*TREE_SIZE buildHuffmanTree_calculateOffsets: sta nBitCode_literalOffset+3*TREE_SIZE-$100,x ;; add nBitCode_literalCount+3*TREE_SIZE-$100,x CLC ADC nBitCode_literalCount+3*TREE_SIZE-$100,x inx bne buildHuffmanTree_calculateOffsets ; Put symbols in their place in the sorted array ; ldy #0 buildHuffmanTree_assignCode: tya ldx literalSymbolCodeLength,y ;; ldy:inc nBitCode_literalOffset,x ldy nBitCode_literalOffset,x inc nBitCode_literalOffset,x sta codeToLiteralSymbol,y tay cpy #CONTROL_SYMBOLS bcs buildHuffmanTree_noControlSymbol2 ldx controlSymbolCodeLength,y ;; ldy:inc nBitCode_controlOffset,x ldy nBitCode_controlOffset,x inc nBitCode_controlOffset,x sta codeToControlSymbol,y tay buildHuffmanTree_noControlSymbol2: iny bne buildHuffmanTree_assignCode rts ; Read Huffman code using the primary tree fetchPrimaryCode: ldx #PRIMARY_TREE ; Read a code from input basing on the tree specified in X, ; return low byte of this code in A, ; return C flag reset for literal code, set for length code fetchCode: ; ldy #0 tya fetchCode_nextBit: jsr getBit ;; rol @ rol A inx ;; sub nBitCode_totalCount,x SEC SBC nBitCode_totalCount,x bcs fetchCode_nextBit ; clc adc nBitCode_controlCount,x bcs fetchCode_control ; clc adc nBitCode_literalOffset,x tax lda codeToLiteralSymbol,x clc rts fetchCode_control: ;; add nBitCode_controlOffset-1,x CLC ADC nBitCode_controlOffset-1,x tax lda codeToControlSymbol,x sec rts ; Read A minus 1 bits, but no more than 8 getAMinus1BitsMax8: rol getBits_base tax cmp #9 bcs getByte lda getNPlus1Bits_mask-2,x getBits: jsr getBits_loop getBits_normalizeLoop: lsr getBits_base ;; ror @ ror A bcc getBits_normalizeLoop rts ; Read 16 bits getWord: jsr getByte tax ; Read 8 bits getByte: lda #$80 getBits_loop: jsr getBit ;; ror @ ror A bcc getBits_loop rts ; Read one bit, return in the C flag getBit: lsr getBit_buffer bne getBit_return pha ; ldy #0 lda (inputPointer),y ;; inw inputPointer INC inputPointer BNE S4 INC inputPointer+1 S4: sec ;; ror @ ror A sta getBit_buffer pla getBit_return: rts ; Copy a previously written byte copyByte: ldy outputPointer lda (inflateCodes_sourcePointer),y ldy #0 ; Write a byte storeByte: sta (outputPointer),y inc outputPointer bne storeByte_return inc outputPointer+1 inc inflateCodes_sourcePointer+1 storeByte_return: rts getNPlus1Bits_mask: .byte GET_1_BIT,GET_2_BITS,GET_3_BITS,GET_4_BITS,GET_5_BITS,GET_6_BITS,GET_7_BITS tempCodeLengthOrder: .byte GET_2_BITS,GET_3_BITS,GET_7_BITS,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 inflateDynamicBlock_headerBits: .byte GET_4_BITS,GET_5_BITS,GET_5_BITS inflateDynamicBlock_headerBase: .byte 3,0,0 ; second byte is modified at runtime! .org inflate_data ; Data for building trees literalSymbolCodeLength: .org *+256 controlSymbolCodeLength: .org *+CONTROL_SYMBOLS ; Huffman trees nBitCode_clearFrom: nBitCode_totalCount: .org *+2*TREE_SIZE nBitCode_literalCount: .org *+TREE_SIZE nBitCode_controlCount: .org *+2*TREE_SIZE nBitCode_literalOffset: .org *+TREE_SIZE nBitCode_controlOffset: .org *+2*TREE_SIZE codeToLiteralSymbol: .org *+256 codeToControlSymbol: .org *+CONTROL_SYMBOLS .byte 0,0,0 ; round out block END: */ unsigned char diskloadcode3[] = { 0xA0,0x00,0x84,0x14,0x84,0x15,0xA9,0x84, 0x20,0xA3,0x9C,0x4A,0x08,0xAA,0xD0,0x1F, 0x84,0x14,0x20,0xAC,0x9C,0x20,0xAC,0x9C, 0x85,0x15,0xB0,0x08,0x20,0xB0,0x9C,0x20, 0xD2,0x9C,0x90,0x75,0xE8,0xD0,0xF5,0xE6, 0x15,0xD0,0xF1,0x28,0x90,0xD6,0x60,0xA9, 0x04,0xC0,0x90,0x2A,0x99,0x00,0x92,0xC0, 0x3E,0xB0,0x0D,0xA9,0x15,0xC0,0x20,0xB0, 0x04,0xC0,0x18,0x69,0xF2,0x99,0x00,0x93, 0xC8,0xD0,0xE4,0xA9,0x20,0x85,0x19,0xCA, 0xF0,0x44,0x20,0xF5,0x9B,0xA2,0x00,0x08, 0x86,0x16,0x20,0x73,0x9C,0xAA,0x10,0x14, 0x20,0xA3,0x9C,0x69,0x01,0xE0,0xC0,0x90, 0x02,0x69,0x07,0xA8,0xA9,0x00,0xE0,0x84, 0xB0,0x02,0xA5,0x17,0xC8,0xA6,0x16,0x28, 0x90,0x0D,0x9D,0x00,0x92,0xE8,0xE0,0x01, 0x88,0xD0,0xF5,0x85,0x17,0xF0,0xD0,0xE4, 0x19,0x90,0x02,0x09,0x10,0x9D,0x00,0x93, 0xE8,0xE4,0x18,0x90,0xEB,0x88,0x20,0x24, 0x9C,0x20,0x73,0x9C,0x90,0x81,0xAA,0xF0, 0x8A,0x84,0x15,0xC9,0x09,0x90,0x14,0x98, 0xE0,0x1D,0xB0,0x0F,0xCA,0x8A,0x4A,0x66, 0x15,0xE6,0x15,0x4A,0x26,0x15,0x20,0x99, 0x9C,0x69,0x00,0x85,0x18,0xA2,0x10,0x20, 0x75,0x9C,0xE5,0x19,0xAA,0xC9,0x04,0x90, 0x06,0xE6,0x15,0x4A,0x20,0x99,0x9C,0x49, 0xFF,0x85,0x16,0xA5,0x15,0xE0,0x0A,0x90, 0x07,0xBD,0xD3,0x9C,0x20,0xA3,0x9C,0x18, 0x49,0xFF,0x65,0x13,0x85,0x17,0x20,0xCC, 0x9C,0x20,0xCC,0x9C,0x20,0xCC,0x9C,0xC6, 0x18,0xD0,0xF9,0xF0,0xA4,0x98,0x99,0x00, 0x92,0x99,0x3E,0x92,0xC8,0xD0,0xF7,0xA2, 0x03,0xBD,0xF6,0x9C,0x20,0xA3,0x9C,0x7D, 0xF9,0x9C,0x95,0x16,0x8D,0xFB,0x9C,0xCA, 0xD0,0xEF,0xA9,0x84,0x20,0xA3,0x9C,0xBC, 0xE4,0x9C,0x99,0x00,0x92,0xA0,0x00,0xE8, 0xE4,0x17,0x90,0xEE,0x98,0x99,0x3E,0x93, 0xC8,0xD0,0xFA,0xBE,0x00,0x92,0xFE,0x5E, 0x93,0xFE,0x3E,0x93,0xC0,0x3E,0xB0,0x09, 0xBE,0x00,0x93,0xFE,0x6E,0x93,0xFE,0x3E, 0x93,0xC8,0xD0,0xE7,0xA2,0xD0,0x9D,0xBE, 0x92,0x18,0x7D,0x8E,0x92,0xE8,0xD0,0xF6, 0x98,0xBE,0x00,0x92,0xBC,0x8E,0x93,0xFE, 0x8E,0x93,0x99,0xBE,0x93,0xA8,0xC0,0x3E, 0xB0,0x0D,0xBE,0x00,0x93,0xBC,0x9E,0x93, 0xFE,0x9E,0x93,0x99,0xBE,0x94,0xA8,0xC8, 0xD0,0xDE,0x60,0xA2,0x00,0x98,0x20,0xB9, 0x9C,0x2A,0xE8,0x38,0xFD,0x3E,0x93,0xB0, 0xF5,0x7D,0x6E,0x93,0xB0,0x09,0x7D,0x8E, 0x93,0xAA,0xBD,0xBE,0x93,0x18,0x60,0x18, 0x7D,0x9D,0x93,0xAA,0xBD,0xBE,0x94,0x38, 0x60,0x26,0x15,0xAA,0xC9,0x09,0xB0,0x10, 0xBD,0xDB,0x9C,0x20,0xB2,0x9C,0x46,0x15, 0x6A,0x90,0xFB,0x60,0x20,0xB0,0x9C,0xAA, 0xA9,0x80,0x20,0xB9,0x9C,0x6A,0x90,0xFA, 0x60,0x46,0x14,0xD0,0x0E,0x48,0xB1,0x10, 0xE6,0x10,0xD0,0x02,0xE6,0x11,0x38,0x6A, 0x85,0x14,0x68,0x60,0xA4,0x12,0xB1,0x16, 0xA0,0x00,0x91,0x12,0xE6,0x12,0xD0,0x04, 0xE6,0x13,0xE6,0x17,0x60,0x81,0x82,0x84, 0x88,0x90,0xA0,0xC0,0x82,0x84,0xC0,0x00, 0x08,0x07,0x09,0x06,0x0A,0x05,0x0B,0x04, 0x0C,0x03,0x0D,0x02,0x0E,0x01,0x0F,0x88, 0x90,0x90,0x03,0x00,0x00,0x00,0x00,0x00 }; //DOS 3.3 unsigned char dosboot1[] = { 0x4C,0xBF,0x9D,0x4C,0x84,0x9D,0x4C,0xFD, 0xAA,0x4C,0xB5,0xB7,0xAD,0x0F,0x9D,0xAC, 0x0E,0x9D,0x60,0xAD,0xC2,0xAA,0xAC,0xC1, 0xAA,0x60,0x4C,0x51,0xA8,0xEA,0xEA,0x4C, 0x59,0xFA,0xBF,0x9D,0x38,0x4C,0x58,0xFF, 0x4C,0x65,0xFF,0x4C,0x65,0xFF,0x65,0xFF, }; //DOS 3.3 unsigned char dosboot2[] = { 0xD3,0x9C,0x81,0x9E,0xBD,0x9E,0x75,0xAA, 0x93,0xAA,0x60,0xAA,0x00,0x9D,0xBB,0xB5, 0xEA,0x9E,0x11,0x9F,0x22,0x9F,0x2E,0x9F, 0x51,0x9F,0x60,0x9F,0x70,0x9F,0x4E,0xA5, 0x12,0xA4,0x96,0xA3,0xD0,0xA4,0xEF,0xA4, 0x62,0xA2,0x70,0xA2,0x74,0xA2,0xE9,0xA2, 0x1A,0xA5,0xC5,0xA5,0x0F,0xA5,0xDC,0xA5, 0xA2,0xA2,0x97,0xA2,0x80,0xA2,0x6D,0xA5, 0x32,0xA2,0x3C,0xA2,0x28,0xA2,0x2D,0xA2, 0x50,0xA2,0x79,0xA5,0x9D,0xA5,0x30,0xA3, 0x5C,0xA3,0x8D,0xA3,0x7C,0xA2,0xFC,0xA4, 0xFC,0xA4,0x65,0xD8,0x00,0xE0,0x3C,0xD4, 0xF2,0xD4,0x36,0xE8,0xE5,0xA4,0xE3,0xE3, 0x00,0xE0,0x03,0xE0,0xFC,0xA4,0xFC,0xA4, 0x65,0xD8,0x00,0xE0,0x3C,0xD4,0xF2,0xD4, 0x06,0xA5,0x06,0xA5,0x67,0x10,0x84,0x9D, 0x3C,0x0C,0xF2,0x0C,0xAD,0xE9,0xB7,0x4A, 0x4A,0x4A,0x4A,0x8D,0x6A,0xAA,0xAD,0xEA, 0xB7,0x8D,0x68,0xAA,0xAD,0x00,0xE0,0x49, 0x20,0xD0,0x11,0x8D,0xB6,0xAA,0xA2,0x0A, 0xBD,0x61,0x9D,0x9D,0x55,0x9D,0xCA,0xD0, 0xF7,0x4C,0xBC,0x9D,0xA9,0x40,0x8D,0xB6, 0xAA,0xA2,0x0C,0xBD,0x6B,0x9D,0x9D,0x55, 0x9D,0xCA,0xD0,0xF7,0x38,0xB0,0x12,0xAD, 0xB6,0xAA,0xD0,0x04,0xA9,0x20,0xD0,0x05, 0x0A,0x10,0x05,0xA9,0x4C,0x20,0xB2,0xA5, 0x18,0x08,0x20,0x51,0xA8,0xA9,0x00,0x8D, 0x5E,0xAA,0x8D,0x52,0xAA,0x28,0x6A,0x8D, 0x51,0xAA,0x30,0x03,0x6C,0x5E,0x9D,0x6C, 0x5C,0x9D,0x0A,0x10,0x19,0x8D,0xB6,0xAA, 0xA2,0x0C,0xBD,0x77,0x9D,0x9D,0x55,0x9D, 0xCA,0xD0,0xF7,0xA2,0x1D,0xBD,0x93,0xAA, 0x9D,0x75,0xAA,0xCA,0x10,0xF7,0xAD,0xB1, 0xAA,0x8D,0x57,0xAA,0x20,0xD4,0xA7,0xAD, 0xB3,0xAA,0xF0,0x09,0x48,0x20,0x9D,0xA6, 0x68,0xA0,0x00,0x91,0x40,0x20,0x5B,0xA7, 0xAD,0x5F,0xAA,0xD0,0x20,0xA2,0x2F,0xBD, 0x51,0x9E,0x9D,0xD0,0x03,0xCA,0x10,0xF7, 0xAD,0x53,0x9E,0x8D,0xF3,0x03,0x49,0xA5, 0x8D,0xF4,0x03,0xAD,0x52,0x9E,0x8D,0xF2, 0x03,0xA9,0x06,0xD0,0x05,0xAD,0x62,0xAA, 0xF0,0x06,0x8D,0x5F,0xAA,0x4C,0x80,0xA1, 0x60,0x4C,0xBF,0x9D,0x4C,0x84,0x9D,0x4C, 0xFD,0xAA,0x4C,0xB5,0xB7,0xAD,0x0F,0x9D, 0xAC,0x0E,0x9D,0x60,0xAD,0xC2,0xAA,0xAC, 0xC1,0xAA,0x60,0x4C,0x51,0xA8,0xEA,0xEA, 0x4C,0x59,0xFA,0x4C,0x65,0xFF,0x4C,0x58, 0xFF,0x4C,0x65,0xFF,0x4C,0x65,0xFF,0x65, 0xFF,0x20,0xD1,0x9E,0xAD,0x51,0xAA,0xF0, 0x15,0x48,0xAD,0x5C,0xAA,0x91,0x28,0x68, 0x30,0x03,0x4C,0x26,0xA6,0x20,0xEA,0x9D, 0xA4,0x24,0xA9,0x60,0x91,0x28,0xAD,0xB3, 0xAA,0xF0,0x03,0x20,0x82,0xA6,0xA9,0x03, 0x8D,0x52,0xAA,0x20,0xBA,0x9F,0x20,0xBA, 0x9E,0x8D,0x5C,0xAA,0x8E,0x5A,0xAA,0x4C, 0xB3,0x9F,0x6C,0x38,0x00,0x20,0xD1,0x9E, 0xAD,0x52,0xAA,0x0A,0xAA,0xBD,0x11,0x9D, 0x48,0xBD,0x10,0x9D,0x48,0xAD,0x5C,0xAA, 0x60,0x8D,0x5C,0xAA,0x8E,0x5A,0xAA,0x8C, 0x5B,0xAA,0xBA,0xE8,0xE8,0x8E,0x59,0xAA, 0xA2,0x03,0xBD,0x53,0xAA,0x95,0x36,0xCA, 0x10,0xF8,0x60,0xAE,0xB7,0xAA,0xF0,0x03, 0x4C,0x78,0x9F,0xAE,0x51,0xAA,0xF0,0x08, 0xC9,0xBF,0xF0,0x75,0xC5,0x33,0xF0,0x27, 0xA2,0x02,0x8E,0x52,0xAA,0xCD,0xB2,0xAA, 0xD0,0x19,0xCA,0x8E,0x52,0xAA,0xCA,0x8E, 0x5D,0xAA,0xAE,0x5D,0xAA,0x9D,0x00,0x02, 0xE8,0x8E,0x5D,0xAA,0xC9,0x8D,0xD0,0x75, 0x4C,0xCD,0x9F,0xC9,0x8D,0xD0,0x7D,0xA2, 0x00,0x8E,0x52,0xAA,0x4C,0xA4,0x9F,0xA2, 0x00,0x8E,0x52,0xAA,0xC9,0x8D,0xF0,0x07, 0xAD,0xB3,0xAA,0xF0,0x67,0xD0,0x5E,0x48, 0x38,0xAD,0xB3,0xAA,0xD0,0x03,0x20,0x5E, 0xA6,0x68,0x90,0xEC,0xAE,0x5A,0xAA,0x4C, 0x15,0x9F,0xC9,0x8D,0xD0,0x05,0xA9,0x05, 0x8D,0x52,0xAA,0x20,0x0E,0xA6,0x4C,0x99, 0x9F,0xCD,0xB2,0xAA,0xF0,0x85,0xC9,0x8A, 0xF0,0xF1,0xA2,0x04,0x8E,0x52,0xAA,0xD0, 0xE1,0xA9,0x00,0x8D,0x52,0xAA,0xF0,0x25, 0xA9,0x00,0x8D,0xB7,0xAA,0x20,0x51,0xA8, 0x4C,0xDC,0xA4,0xAD,0x00,0x02,0xCD,0xB2, 0xAA,0xF0,0x0A,0xA9,0x8D,0x8D,0x00,0x02, 0xA2,0x00,0x8E,0x5A,0xAA,0xA9,0x40,0xD0, 0x06,0xA9,0x10,0xD0,0x02,0xA9,0x20,0x2D, 0x5E,0xAA,0xF0,0x0F,0x20,0xBA,0x9F,0x20, 0xC5,0x9F,0x8D,0x5C,0xAA,0x8C,0x5B,0xAA, 0x8E,0x5A,0xAA,0x20,0x51,0xA8,0xAE,0x59, 0xAA,0x9A,0xAD,0x5C,0xAA,0xAC,0x5B,0xAA, 0xAE,0x5A,0xAA,0x38,0x60,0x6C,0x36,0x00, 0xA9,0x8D,0x4C,0xC5,0x9F,0xA0,0xFF,0x8C, 0x5F,0xAA,0xC8,0x8C,0x62,0xAA,0xEE,0x5F, 0xAA,0xA2,0x00,0x08,0xBD,0x00,0x02,0xCD, 0xB2,0xAA,0xD0,0x01,0xE8,0x8E,0x5D,0xAA, 0x20,0xA4,0xA1,0x29,0x7F,0x59,0x84,0xA8, 0xC8,0x0A,0xF0,0x02,0x68,0x08,0x90,0xF0, 0x28,0xF0,0x20,0xB9,0x84,0xA8,0xD0,0xD6, 0xAD,0x00,0x02,0xCD,0xB2,0xAA,0xF0,0x03, 0x4C,0xA4,0x9F,0xAD,0x01,0x02,0xC9,0x8D, 0xD0,0x06,0x20,0x5B,0xA7,0x4C,0x95,0x9F, 0x4C,0xC4,0xA6,0x0E,0x5F,0xAA,0xAC,0x5F, 0xAA,0x20,0x5E,0xA6,0x90,0x0C,0xA9,0x02, 0x39,0x09,0xA9,0xF0,0x05,0xA9,0x0F,0x4C, 0xD2,0xA6,0xC0,0x06,0xD0,0x02,0x84,0x33, 0xA9,0x20,0x39,0x09,0xA9,0xF0,0x61,0x20, 0x95,0xA0,0x08,0x20,0xA4,0xA1,0xF0,0x1E, 0x0A,0x90,0x05,0x30,0x03,0x4C,0x00,0xA0, 0x6A,0x4C,0x59,0xA0,0x20,0x93,0xA1,0xF0, 0x0D,0x99,0x75,0xAA,0xC8,0xC0,0x3C,0x90, 0xF3,0x20,0x93,0xA1,0xD0,0xFB,0x28,0xD0, 0x0F,0xAC,0x5F,0xAA,0xA9,0x10,0x39,0x09, 0xA9,0xF0,0x0C,0xA0,0x1E,0x08,0xD0,0xCB, 0xAD,0x93,0xAA,0xC9,0xA0,0xF0,0x13,0xAD, 0x75,0xAA,0xC9,0xA0,0xD0,0x4B,0xAC,0x5F, 0xAA,0xA9,0xC0,0x39,0x09,0xA9,0xF0,0x02, 0x10,0x3F,0x4C,0x00,0xA0,0xA0,0x3C,0xA9, 0xA0,0x99,0x74,0xAA,0x88,0xD0,0xFA,0x60, 0x8D,0x75,0xAA,0xA9,0x0C,0x39,0x09,0xA9, 0xF0,0x27,0x20,0xB9,0xA1,0xB0,0x1F,0xA8, 0xD0,0x17,0xE0,0x11,0xB0,0x13,0xAC,0x5F, 0xAA,0xA9,0x08,0x39,0x09,0xA9,0xF0,0x06, 0xE0,0x08,0xB0,0xCE,0x90,0x0B,0x8A,0xD0, 0x08,0xA9,0x02,0x4C,0xD2,0xA6,0x4C,0xC4, 0xA6,0xA9,0x00,0x8D,0x65,0xAA,0x8D,0x74, 0xAA,0x8D,0x66,0xAA,0x8D,0x6C,0xAA,0x8D, 0x6D,0xAA,0x20,0xDC,0xBF,0xAD,0x5D,0xAA, 0x20,0xA4,0xA1,0xD0,0x1F,0xC9,0x8D,0xD0, 0xF7,0xAE,0x5F,0xAA,0xAD,0x65,0xAA,0x1D, 0x0A,0xA9,0x5D,0x0A,0xA9,0xD0,0x93,0xAE, 0x63,0xAA,0xF0,0x76,0x8D,0x63,0xAA,0x8E, 0x5D,0xAA,0xD0,0xDC,0xA2,0x0A,0xDD,0x40, 0xA9,0xF0,0x05,0xCA,0xD0,0xF8,0xF0,0xB6, 0xBD,0x4A,0xA9,0x30,0x47,0x0D,0x65,0xAA, 0x8D,0x65,0xAA,0xCA,0x8E,0x64,0xAA,0x20, 0xB9,0xA1,0xB0,0xA2,0xAD,0x64,0xAA,0x0A, 0x0A,0xA8,0xA5,0x45,0xD0,0x09,0xA5,0x44, 0xD9,0x55,0xA9,0x90,0x8C,0xA5,0x45,0xD9, 0x58,0xA9,0x90,0x0B,0xD0,0x83,0xA5,0x44, 0xD9,0x57,0xA9,0x90,0x02,0xD0,0xF5,0xAD, 0x63,0xAA,0xD0,0x94,0x98,0x4A,0xA8,0xA5, 0x45,0x99,0x67,0xAA,0xA5,0x44,0x99,0x66, 0xAA,0x4C,0xE8,0xA0,0x48,0xA9,0x80,0x0D, 0x65,0xAA,0x8D,0x65,0xAA,0x68,0x29,0x7F, 0x0D,0x74,0xAA,0x8D,0x74,0xAA,0xD0,0xE9, 0xF0,0x9C,0x20,0x80,0xA1,0x4C,0x83,0x9F, 0x20,0x5B,0xA7,0x20,0xAE,0xA1,0xAD,0x5F, 0xAA,0xAA,0xBD,0x1F,0x9D,0x48,0xBD,0x1E, 0x9D,0x48,0x60,0xAE,0x5D,0xAA,0xBD,0x00, 0x02,0xC9,0x8D,0xF0,0x06,0xE8,0x8E,0x5D, 0xAA,0xC9,0xAC,0x60,0x20,0x93,0xA1,0xF0, 0xFA,0xC9,0xA0,0xF0,0xF7,0x60,0xA9,0x00, 0xA0,0x16,0x99,0xBA,0xB5,0x88,0xD0,0xFA, 0x60,0xA9,0x00,0x85,0x44,0x85,0x45,0x20, 0xA4,0xA1,0x08,0xC9,0xA4,0xF0,0x3C,0x28, 0x4C,0xCE,0xA1,0x20,0xA4,0xA1,0xD0,0x06, 0xA6,0x44,0xA5,0x45,0x18,0x60,0x38,0xE9, 0xB0,0x30,0x21,0xC9,0x0A,0xB0,0x1D,0x20, 0xFE,0xA1,0x65,0x44,0xAA,0xA9,0x00,0x65, 0x45,0xA8,0x20,0xFE,0xA1,0x20,0xFE,0xA1, 0x8A,0x65,0x44,0x85,0x44,0x98,0x65,0x45, 0x85,0x45,0x90,0xCF,0x38,0x60,0x06,0x44, 0x26,0x45,0x60,0x28,0x20,0xA4,0xA1,0xF0, 0xC5,0x38,0xE9,0xB0,0x30,0xEE,0xC9,0x0A, 0x90,0x08,0xE9,0x07,0x30,0xE6,0xC9,0x10, 0xB0,0xE2,0xA2,0x04,0x20,0xFE,0xA1,0xCA, 0xD0,0xFA,0x05,0x44,0x85,0x44,0x4C,0x04, 0xA2,0xA5,0x44,0x4C,0x95,0xFE,0xA5,0x44, 0x4C,0x8B,0xFE,0xAD,0x5E,0xAA,0x0D,0x74, 0xAA,0x8D,0x5E,0xAA,0x60,0x2C,0x74,0xAA, 0x50,0x03,0x20,0xC8,0x9F,0xA9,0x70,0x4D, 0x74,0xAA,0x2D,0x5E,0xAA,0x8D,0x5E,0xAA, 0x60,0xA9,0x00,0x8D,0xB3,0xAA,0xA5,0x44, 0x48,0x20,0x16,0xA3,0x68,0x8D,0x57,0xAA, 0x4C,0xD4,0xA7,0xA9,0x05,0x20,0xAA,0xA2, 0x20,0x64,0xA7,0xA0,0x00,0x98,0x91,0x40, 0x60,0xA9,0x07,0xD0,0x02,0xA9,0x08,0x20, 0xAA,0xA2,0x4C,0xEA,0xA2,0xA9,0x0C,0xD0, 0xF6,0xAD,0x08,0x9D,0x8D,0xBD,0xB5,0xAD, 0x09,0x9D,0x8D,0xBE,0xB5,0xA9,0x09,0x8D, 0x63,0xAA,0x20,0xC8,0xA2,0x4C,0xEA,0xA2, 0x20,0xA3,0xA2,0x20,0x8C,0xA6,0xD0,0xFB, 0x4C,0x71,0xB6,0xA9,0x00,0x4C,0xD5,0xA3, 0xA9,0x01,0x8D,0x63,0xAA,0xAD,0x6C,0xAA, 0xD0,0x0A,0xAD,0x6D,0xAA,0xD0,0x05,0xA9, 0x01,0x8D,0x6C,0xAA,0xAD,0x6C,0xAA,0x8D, 0xBD,0xB5,0xAD,0x6D,0xAA,0x8D,0xBE,0xB5, 0x20,0xEA,0xA2,0xA5,0x45,0xD0,0x03,0x4C, 0xC8,0xA6,0x85,0x41,0xA5,0x44,0x85,0x40, 0x20,0x43,0xA7,0x20,0x4E,0xA7,0x20,0x1A, 0xA7,0xAD,0x63,0xAA,0x8D,0xBB,0xB5,0x4C, 0xA8,0xA6,0xAD,0x75,0xAA,0xC9,0xA0,0xF0, 0x25,0x20,0x64,0xA7,0xB0,0x3A,0x20,0xFC, 0xA2,0x4C,0xEA,0xA2,0x20,0xAF,0xA7,0xD0, 0x05,0xA9,0x00,0x8D,0xB3,0xAA,0xA0,0x00, 0x98,0x91,0x40,0x20,0x4E,0xA7,0xA9,0x02, 0x8D,0xBB,0xB5,0x4C,0xA8,0xA6,0x20,0x92, 0xA7,0xD0,0x05,0x20,0x9A,0xA7,0xF0,0x10, 0x20,0xAF,0xA7,0xF0,0xF6,0x20,0xAA,0xA7, 0xF0,0xF1,0x20,0xFC,0xA2,0x4C,0x16,0xA3, 0x60,0xA9,0x09,0x2D,0x65,0xAA,0xC9,0x09, 0xF0,0x03,0x4C,0x00,0xA0,0xA9,0x04,0x20, 0xD5,0xA3,0xAD,0x73,0xAA,0xAC,0x72,0xAA, 0x20,0xE0,0xA3,0xAD,0x6D,0xAA,0xAC,0x6C, 0xAA,0x20,0xE0,0xA3,0xAD,0x73,0xAA,0xAC, 0x72,0xAA,0x4C,0xFF,0xA3,0x20,0xA8,0xA2, 0xA9,0x7F,0x2D,0xC2,0xB5,0xC9,0x04,0xF0, 0x03,0x4C,0xD0,0xA6,0xA9,0x04,0x20,0xD5, 0xA3,0x20,0x7A,0xA4,0xAA,0xAD,0x65,0xAA, 0x29,0x01,0xD0,0x06,0x8E,0x72,0xAA,0x8C, 0x73,0xAA,0x20,0x7A,0xA4,0xAE,0x72,0xAA, 0xAC,0x73,0xAA,0x4C,0x71,0xA4,0x20,0x5D, 0xA3,0x20,0x51,0xA8,0x6C,0x72,0xAA,0xAD, 0xB6,0xAA,0xF0,0x20,0xA5,0xD6,0x10,0x03, 0x4C,0xCC,0xA6,0xA9,0x02,0x20,0xD5,0xA3, 0x38,0xA5,0xAF,0xE5,0x67,0xA8,0xA5,0xB0, 0xE5,0x68,0x20,0xE0,0xA3,0xA5,0x68,0xA4, 0x67,0x4C,0xFF,0xA3,0xA9,0x01,0x20,0xD5, 0xA3,0x38,0xA5,0x4C,0xE5,0xCA,0xA8,0xA5, 0x4D,0xE5,0xCB,0x20,0xE0,0xA3,0xA5,0xCB, 0xA4,0xCA,0x4C,0xFF,0xA3,0x8D,0xC2,0xB5, 0x48,0x20,0xA8,0xA2,0x68,0x4C,0xC4,0xA7, 0x8C,0xC1,0xB5,0x8C,0xC3,0xB5,0x8D,0xC2, 0xB5,0xA9,0x04,0x8D,0xBB,0xB5,0xA9,0x01, 0x8D,0xBC,0xB5,0x20,0xA8,0xA6,0xAD,0xC2, 0xB5,0x8D,0xC3,0xB5,0x4C,0xA8,0xA6,0x8C, 0xC3,0xB5,0x8D,0xC4,0xB5,0xA9,0x02,0x4C, 0x86,0xB6,0x20,0xA8,0xA6,0x4C,0xEA,0xA2, 0x4C,0xD0,0xA6,0x20,0x16,0xA3,0x20,0xA8, 0xA2,0xA9,0x23,0x2D,0xC2,0xB5,0xF0,0xF0, 0x8D,0xC2,0xB5,0xAD,0xB6,0xAA,0xF0,0x28, 0xA9,0x02,0x20,0xB1,0xA4,0x20,0x7A,0xA4, 0x18,0x65,0x67,0xAA,0x98,0x65,0x68,0xC5, 0x74,0xB0,0x70,0x85,0xB0,0x85,0x6A,0x86, 0xAF,0x86,0x69,0xA6,0x67,0xA4,0x68,0x20, 0x71,0xA4,0x20,0x51,0xA8,0x6C,0x60,0x9D, 0xA9,0x01,0x20,0xB1,0xA4,0x20,0x7A,0xA4, 0x38,0xA5,0x4C,0xED,0x60,0xAA,0xAA,0xA5, 0x4D,0xED,0x61,0xAA,0x90,0x45,0xA8,0xC4, 0x4B,0x90,0x40,0xF0,0x3E,0x84,0xCB,0x86, 0xCA,0x8E,0xC3,0xB5,0x8C,0xC4,0xB5,0x4C, 0x0A,0xA4,0xAD,0x0A,0x9D,0x8D,0xC3,0xB5, 0xAD,0x0B,0x9D,0x8D,0xC4,0xB5,0xA9,0x00, 0x8D,0xC2,0xB5,0xA9,0x02,0x8D,0xC1,0xB5, 0xA9,0x03,0x8D,0xBB,0xB5,0xA9,0x02,0x8D, 0xBC,0xB5,0x20,0xA8,0xA6,0xAD,0x61,0xAA, 0x8D,0xC2,0xB5,0xA8,0xAD,0x60,0xAA,0x8D, 0xC1,0xB5,0x60,0x20,0xEA,0xA2,0x4C,0xCC, 0xA6,0xCD,0xC2,0xB5,0xF0,0x1A,0xAE,0x5F, 0xAA,0x8E,0x62,0xAA,0x4A,0xF0,0x03,0x4C, 0x9E,0xA5,0xA2,0x1D,0xBD,0x75,0xAA,0x9D, 0x93,0xAA,0xCA,0x10,0xF7,0x4C,0x7A,0xA5, 0x60,0xAD,0xB6,0xAA,0xF0,0x03,0x8D,0xB7, 0xAA,0x20,0x13,0xA4,0x20,0xC8,0x9F,0x20, 0x51,0xA8,0x6C,0x58,0x9D,0xA5,0x4A,0x85, 0xCC,0xA5,0x4B,0x85,0xCD,0x6C,0x56,0x9D, 0x20,0x16,0xA4,0x20,0xC8,0x9F,0x20,0x51, 0xA8,0x6C,0x56,0x9D,0x20,0x65,0xD6,0x85, 0x33,0x85,0xD8,0x4C,0xD2,0xD7,0x20,0x65, 0x0E,0x85,0x33,0x85,0xD8,0x4C,0xD4,0x0F, 0x20,0x26,0xA5,0xA9,0x05,0x8D,0x52,0xAA, 0x4C,0x83,0x9F,0x20,0x26,0xA5,0xA9,0x01, 0x8D,0x51,0xAA,0x4C,0x83,0x9F,0x20,0x64, 0xA7,0x90,0x06,0x20,0xA3,0xA2,0x4C,0x34, 0xA5,0x20,0x4E,0xA7,0xAD,0x65,0xAA,0x29, 0x06,0xF0,0x13,0xA2,0x03,0xBD,0x6E,0xAA, 0x9D,0xBD,0xB5,0xCA,0x10,0xF7,0xA9,0x0A, 0x8D,0xBB,0xB5,0x20,0xA8,0xA6,0x60,0xA9, 0x40,0x2D,0x65,0xAA,0xF0,0x05,0xAD,0x66, 0xAA,0xD0,0x05,0xA9,0xFE,0x8D,0x66,0xAA, 0xAD,0x0D,0x9D,0x8D,0xBC,0xB5,0xA9,0x0B, 0x20,0xAA,0xA2,0x4C,0x97,0xA3,0xA9,0x06, 0x20,0xAA,0xA2,0xAD,0xBF,0xB5,0x8D,0x66, 0xAA,0x60,0xA9,0x4C,0x20,0xB2,0xA5,0xF0, 0x2E,0xA9,0x00,0x8D,0xB6,0xAA,0xA0,0x1E, 0x20,0x97,0xA0,0xA2,0x09,0xBD,0xB7,0xAA, 0x9D,0x74,0xAA,0xCA,0xD0,0xF7,0xA9,0xC0, 0x8D,0x51,0xAA,0x4C,0xD1,0xA4,0xA9,0x20, 0x20,0xB2,0xA5,0xF0,0x05,0xA9,0x01,0x4C, 0xD2,0xA6,0xA9,0x00,0x8D,0xB7,0xAA,0x4C, 0x84,0x9D,0xCD,0x00,0xE0,0xF0,0x0E,0x8D, 0x80,0xC0,0xCD,0x00,0xE0,0xF0,0x06,0x8D, 0x81,0xC0,0xCD,0x00,0xE0,0x60,0x20,0xA3, 0xA2,0xAD,0x4F,0xAA,0x8D,0xB4,0xAA,0xAD, 0x50,0xAA,0x8D,0xB5,0xAA,0xAD,0x75,0xAA, 0x8D,0xB3,0xAA,0xD0,0x0E,0x20,0x64,0xA7, 0x90,0x06,0x20,0xA3,0xA2,0x4C,0xEB,0xA5, 0x20,0x4E,0xA7,0xAD,0x65,0xAA,0x29,0x04, 0xF0,0x1B,0xAD,0x6E,0xAA,0xD0,0x08,0xAE, 0x6F,0xAA,0xF0,0x11,0xCE,0x6F,0xAA,0xCE, 0x6E,0xAA,0x20,0x8C,0xA6,0xF0,0x38,0xC9, 0x8D,0xD0,0xF7,0xF0,0xE5,0x60,0x20,0x5E, 0xA6,0xB0,0x66,0xAD,0x5C,0xAA,0x8D,0xC3, 0xB5,0xA9,0x04,0x8D,0xBB,0xB5,0xA9,0x01, 0x8D,0xBC,0xB5,0x4C,0xA8,0xA6,0x20,0x5E, 0xA6,0xB0,0x4E,0xA9,0x06,0x8D,0x52,0xAA, 0x20,0x8C,0xA6,0xD0,0x0F,0x20,0xFC,0xA2, 0xA9,0x03,0xCD,0x52,0xAA,0xF0,0xCE,0xA9, 0x05,0x4C,0xD2,0xA6,0xC9,0xE0,0x90,0x02, 0x29,0x7F,0x8D,0x5C,0xAA,0xAE,0x5A,0xAA, 0xF0,0x09,0xCA,0xBD,0x00,0x02,0x09,0x80, 0x9D,0x00,0x02,0x4C,0xB3,0x9F,0x48,0xAD, 0xB6,0xAA,0xF0,0x0E,0xA6,0x76,0xE8,0xF0, 0x0D,0xA6,0x33,0xE0,0xDD,0xF0,0x07,0x68, 0x18,0x60,0xA5,0xD9,0x30,0xF9,0x68,0x38, 0x60,0x20,0xFC,0xA2,0x20,0x5B,0xA7,0x4C, 0xB3,0x9F,0x20,0x9D,0xA6,0x20,0x4E,0xA7, 0xA9,0x03,0xD0,0xA1,0xA9,0x03,0x8D,0xBB, 0xB5,0xA9,0x01,0x8D,0xBC,0xB5,0x20,0xA8, 0xA6,0xAD,0xC3,0xB5,0x60,0xAD,0xB5,0xAA, 0x85,0x41,0xAD,0xB4,0xAA,0x85,0x40,0x60, 0x20,0x06,0xAB,0x90,0x16,0xAD,0xC5,0xB5, 0xC9,0x05,0xF0,0x03,0x4C,0x5E,0xB6,0x4C, 0x92,0xB6,0xEA,0x20,0x69,0xBA,0xA2,0x00, 0x8E,0xC3,0xB5,0x60,0xA9,0x0B,0xD0,0x0A, 0xA9,0x0C,0xD0,0x06,0xA9,0x0E,0xD0,0x02, 0xA9,0x0D,0x8D,0x5C,0xAA,0x20,0xE6,0xBF, 0xAD,0xB6,0xAA,0xF0,0x04,0xA5,0xD8,0x30, 0x0E,0xA2,0x00,0x20,0x02,0xA7,0xAE,0x5C, 0xAA,0x20,0x02,0xA7,0x20,0xC8,0x9F,0x20, 0x51,0xA8,0x20,0x5E,0xA6,0xAE,0x5C,0xAA, 0xA9,0x03,0xB0,0x03,0x6C,0x5A,0x9D,0x6C, 0x5E,0x9D,0xBD,0x3F,0xAA,0xAA,0x8E,0x63, 0xAA,0xBD,0x71,0xA9,0x48,0x09,0x80,0x20, 0xC5,0x9F,0xAE,0x63,0xAA,0xE8,0x68,0x10, 0xED,0x60,0xAD,0x66,0xAA,0x8D,0xBF,0xB5, 0xAD,0x68,0xAA,0x8D,0xC0,0xB5,0xAD,0x6A, 0xAA,0x8D,0xC1,0xB5,0xAD,0x06,0x9D,0x8D, 0xC3,0xB5,0xAD,0x07,0x9D,0x8D,0xC4,0xB5, 0xA5,0x40,0x8D,0x4F,0xAA,0xA5,0x41,0x8D, 0x50,0xAA,0x60,0xA0,0x1D,0xB9,0x75,0xAA, 0x91,0x40,0x88,0x10,0xF8,0x60,0xA0,0x1E, 0xB1,0x40,0x99,0xA9,0xB5,0xC8,0xC0,0x26, 0xD0,0xF6,0x60,0xA0,0x00,0x8C,0x51,0xAA, 0x8C,0x52,0xAA,0x60,0xA9,0x00,0x85,0x45, 0x20,0x92,0xA7,0x4C,0x73,0xA7,0x20,0x9A, 0xA7,0xF0,0x1D,0x20,0xAA,0xA7,0xD0,0x0A, 0xA5,0x40,0x85,0x44,0xA5,0x41,0x85,0x45, 0xD0,0xEC,0xA0,0x1D,0xB1,0x40,0xD9,0x75, 0xAA,0xD0,0xE3,0x88,0x10,0xF6,0x18,0x60, 0x38,0x60,0xAD,0x00,0x9D,0xAE,0x01,0x9D, 0xD0,0x0A,0xA0,0x25,0xB1,0x40,0xF0,0x09, 0xAA,0x88,0xB1,0x40,0x86,0x41,0x85,0x40, 0x8A,0x60,0xA0,0x00,0xB1,0x40,0x60,0xAD, 0xB3,0xAA,0xF0,0x0E,0xAD,0xB4,0xAA,0xC5, 0x40,0xD0,0x08,0xAD,0xB5,0xAA,0xC5,0x41, 0xF0,0x01,0xCA,0x60,0x4D,0xC2,0xB5,0xF0, 0x0A,0x29,0x7F,0xF0,0x06,0x20,0xEA,0xA2, 0x4C,0xD0,0xA6,0x60,0x38,0xAD,0x00,0x9D, 0x85,0x40,0xAD,0x01,0x9D,0x85,0x41,0xAD, 0x57,0xAA,0x8D,0x63,0xAA,0xA0,0x00,0x98, 0x91,0x40,0xA0,0x1E,0x38,0xA5,0x40,0xE9, 0x2D,0x91,0x40,0x48,0xA5,0x41,0xE9,0x00, 0xC8,0x91,0x40,0xAA,0xCA,0x68,0x48,0xC8, 0x91,0x40,0x8A,0xC8,0x91,0x40,0xAA,0xCA, 0x68,0x48,0xC8,0x91,0x40,0xC8,0x8A,0x91, 0x40,0xCE,0x63,0xAA,0xF0,0x17,0xAA,0x68, 0x38,0xE9,0x26,0xC8,0x91,0x40,0x48,0x8A, 0xE9,0x00,0xC8,0x91,0x40,0x85,0x41,0x68, 0x85,0x40,0x4C,0xE5,0xA7,0x48,0xA9,0x00, 0xC8,0x91,0x40,0xC8,0x91,0x40,0xAD,0xB6, 0xAA,0xF0,0x0B,0x68,0x85,0x74,0x85,0x70, 0x68,0x85,0x73,0x85,0x6F,0x60,0x68,0x85, 0x4D,0x85,0xCB,0x68,0x85,0x4C,0x85,0xCA, 0x60,0xA5,0x39,0xCD,0x03,0x9D,0xF0,0x12, 0x8D,0x56,0xAA,0xA5,0x38,0x8D,0x55,0xAA, 0xAD,0x02,0x9D,0x85,0x38,0xAD,0x03,0x9D, 0x85,0x39,0xA5,0x37,0xCD,0x05,0x9D,0xF0, 0x12,0x8D,0x54,0xAA,0xA5,0x36,0x8D,0x53, 0xAA,0xAD,0x04,0x9D,0x85,0x36,0xAD,0x05, 0x9D,0x85,0x37,0x60,0x49,0x4E,0x49,0xD4, 0x4C,0x4F,0x41,0xC4,0x53,0x41,0x56,0xC5, 0x52,0x55,0xCE,0x43,0x48,0x41,0x49,0xCE, 0x44,0x45,0x4C,0x45,0x54,0xC5,0x4C,0x4F, 0x43,0xCB,0x55,0x4E,0x4C,0x4F,0x43,0xCB, 0x43,0x4C,0x4F,0x53,0xC5,0x52,0x45,0x41, 0xC4,0x45,0x58,0x45,0xC3,0x57,0x52,0x49, 0x54,0xC5,0x50,0x4F,0x53,0x49,0x54,0x49, 0x4F,0xCE,0x4F,0x50,0x45,0xCE,0x41,0x50, 0x50,0x45,0x4E,0xC4,0x52,0x45,0x4E,0x41, 0x4D,0xC5,0x43,0x41,0x54,0x41,0x4C,0x4F, 0xC7,0x4D,0x4F,0xCE,0x4E,0x4F,0x4D,0x4F, 0xCE,0x50,0x52,0xA3,0x49,0x4E,0xA3,0x4D, 0x41,0x58,0x46,0x49,0x4C,0x45,0xD3,0x46, 0xD0,0x49,0x4E,0xD4,0x42,0x53,0x41,0x56, 0xC5,0x42,0x4C,0x4F,0x41,0xC4,0x42,0x52, 0x55,0xCE,0x56,0x45,0x52,0x49,0x46,0xD9, 0x00,0x21,0x70,0xA0,0x70,0xA1,0x70,0xA0, 0x70,0x20,0x70,0x20,0x70,0x20,0x70,0x20, 0x70,0x60,0x00,0x22,0x06,0x20,0x74,0x22, 0x06,0x22,0x04,0x23,0x78,0x22,0x70,0x30, 0x70,0x40,0x70,0x40,0x80,0x40,0x80,0x08, 0x00,0x08,0x00,0x04,0x00,0x40,0x70,0x40, 0x00,0x21,0x79,0x20,0x71,0x20,0x71,0x20, 0x70,0xD6,0xC4,0xD3,0xCC,0xD2,0xC2,0xC1, 0xC3,0xC9,0xCF,0x40,0x20,0x10,0x08,0x04, 0x02,0x01,0xC0,0xA0,0x90,0x00,0x00,0xFE, 0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x07, 0x00,0x01,0x00,0xFF,0x7F,0x00,0x00,0xFF, 0x7F,0x00,0x00,0xFF,0x7F,0x00,0x00,0xFF, 0xFF,0x0D,0x07,0x8D,0x4C,0x41,0x4E,0x47, 0x55,0x41,0x47,0x45,0x20,0x4E,0x4F,0x54, 0x20,0x41,0x56,0x41,0x49,0x4C,0x41,0x42, 0x4C,0xC5,0x52,0x41,0x4E,0x47,0x45,0x20, 0x45,0x52,0x52,0x4F,0xD2,0x57,0x52,0x49, 0x54,0x45,0x20,0x50,0x52,0x4F,0x54,0x45, 0x43,0x54,0x45,0xC4,0x45,0x4E,0x44,0x20, 0x4F,0x46,0x20,0x44,0x41,0x54,0xC1,0x46, 0x49,0x4C,0x45,0x20,0x4E,0x4F,0x54,0x20, 0x46,0x4F,0x55,0x4E,0xC4,0x56,0x4F,0x4C, 0x55,0x4D,0x45,0x20,0x4D,0x49,0x53,0x4D, 0x41,0x54,0x43,0xC8,0x49,0x2F,0x4F,0x20, 0x45,0x52,0x52,0x4F,0xD2,0x44,0x49,0x53, 0x4B,0x20,0x46,0x55,0x4C,0xCC,0x46,0x49, 0x4C,0x45,0x20,0x4C,0x4F,0x43,0x4B,0x45, 0xC4,0x53,0x59,0x4E,0x54,0x41,0x58,0x20, 0x45,0x52,0x52,0x4F,0xD2,0x4E,0x4F,0x20, 0x42,0x55,0x46,0x46,0x45,0x52,0x53,0x20, 0x41,0x56,0x41,0x49,0x4C,0x41,0x42,0x4C, 0xC5,0x46,0x49,0x4C,0x45,0x20,0x54,0x59, 0x50,0x45,0x20,0x4D,0x49,0x53,0x4D,0x41, 0x54,0x43,0xC8,0x50,0x52,0x4F,0x47,0x52, 0x41,0x4D,0x20,0x54,0x4F,0x4F,0x20,0x4C, 0x41,0x52,0x47,0xC5,0x4E,0x4F,0x54,0x20, 0x44,0x49,0x52,0x45,0x43,0x54,0x20,0x43, 0x4F,0x4D,0x4D,0x41,0x4E,0xC4,0x8D,0x00, 0x03,0x19,0x19,0x24,0x33,0x3E,0x4C,0x5B, 0x64,0x6D,0x78,0x84,0x98,0xAA,0xBB,0x2D, 0x98,0x00,0x02,0x02,0xC1,0x1B,0xFD,0x03, 0x03,0xF0,0x58,0x00,0xA0,0x06,0x00,0x1B, 0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x00,0x06,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x10,0x00,0x00,0xCF,0xC1, 0xC4,0xC5,0xD2,0xAE,0xCF,0xC2,0xCA,0xB0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0x03,0x84,0x00,0x00,0x00,0x40,0x00, 0xC1,0xD0,0xD0,0xCC,0xC5,0xD3,0xCF,0xC6, 0xD4,0xE8,0xB7,0xBB,0xB3,0xBB,0xB4,0x00, 0xC0,0x7E,0xB3,0x21,0xAB,0x05,0xAC,0x57, 0xAC,0x6F,0xAC,0x2A,0xAD,0x97,0xAD,0xEE, 0xAC,0xF5,0xAC,0x39,0xAC,0x11,0xAD,0x8D, 0xAE,0x17,0xAD,0x7E,0xB3,0x7E,0xB3,0x89, 0xAC,0x95,0xAC,0x86,0xAC,0x92,0xAC,0x7E, 0xB3,0x7E,0xB3,0xBD,0xAC,0xC9,0xAC,0xBA, 0xAC,0xC6,0xAC,0x7E,0xB3,0xE0,0x00,0xF0, 0x02,0xA2,0x02,0x8E,0x5F,0xAA,0xBA,0x8E, 0x9B,0xB3,0x20,0x6A,0xAE,0xAD,0xBB,0xB5, 0xC9,0x0D,0xB0,0x0B,0x0A,0xAA,0xBD,0xCA, 0xAA,0x48,0xBD,0xC9,0xAA,0x48,0x60,0x4C, 0x63,0xB3,0x20,0x28,0xAB,0x4C,0x7F,0xB3, 0x20,0xDC,0xAB,0xA9,0x01,0x8D,0xE3,0xB5, 0xAE,0xBE,0xB5,0xAD,0xBD,0xB5,0xD0,0x05, 0xE0,0x00,0xD0,0x01,0xE8,0x8D,0xE8,0xB5, 0x8E,0xE9,0xB5,0x20,0xC9,0xB1,0x90,0x5E, 0x8E,0x9C,0xB3,0xAE,0x5F,0xAA,0xBD,0x09, 0xA9,0xAE,0x9C,0xB3,0x4A,0xB0,0x0D,0xAD, 0x51,0xAA,0xC9,0xC0,0xD0,0x03,0x4C,0x5F, 0xB3,0x4C,0x73,0xB3,0xA9,0x00,0x9D,0xE8, 0xB4,0xA9,0x01,0x9D,0xE7,0xB4,0x8E,0x9C, 0xB3,0x20,0x44,0xB2,0xAE,0x9C,0xB3,0x9D, 0xC7,0xB4,0x8D,0xD2,0xB5,0x8D,0xD4,0xB5, 0xAD,0xF1,0xB5,0x9D,0xC6,0xB4,0x8D,0xD1, 0xB5,0x8D,0xD3,0xB5,0xAD,0xC2,0xB5,0x9D, 0xC8,0xB4,0x20,0x37,0xB0,0x20,0x0C,0xAF, 0x20,0xD6,0xB7,0x20,0x3A,0xAF,0xAE,0x9C, 0xB3,0xA9,0x06,0x8D,0xC5,0xB5,0xBD,0xC6, 0xB4,0x8D,0xD1,0xB5,0xBD,0xC7,0xB4,0x8D, 0xD2,0xB5,0xBD,0xC8,0xB4,0x8D,0xC2,0xB5, 0x8D,0xF6,0xB5,0xBD,0xE7,0xB4,0x8D,0xEE, 0xB5,0xBD,0xE8,0xB4,0x8D,0xEF,0xB5,0x8E, 0xD9,0xB5,0xA9,0xFF,0x8D,0xE0,0xB5,0x8D, 0xE1,0xB5,0xAD,0xE2,0xB3,0x8D,0xDA,0xB5, 0x18,0x4C,0x5E,0xAF,0xA9,0x00,0xAA,0x9D, 0xD1,0xB5,0xE8,0xE0,0x2D,0xD0,0xF8,0xAD, 0xBF,0xB5,0x49,0xFF,0x8D,0xF9,0xB5,0xAD, 0xC0,0xB5,0x8D,0xF8,0xB5,0xAD,0xC1,0xB5, 0x0A,0x0A,0x0A,0x0A,0xAA,0x8E,0xF7,0xB5, 0xA9,0x11,0x8D,0xFA,0xB5,0x60,0x20,0x1D, 0xAF,0x20,0x34,0xAF,0x20,0xC3,0xB2,0xA9, 0x02,0x2D,0xD5,0xB5,0xF0,0x21,0x20,0xF7, 0xAF,0xA9,0x00,0x18,0x20,0x11,0xB0,0x38, 0xCE,0xD8,0xB5,0xD0,0xF7,0xAE,0xD9,0xB5, 0xAD,0xEE,0xB5,0x9D,0xE7,0xB4,0xAD,0xEF, 0xB5,0x9D,0xE8,0xB4,0x20,0x37,0xB0,0x4C, 0x7F,0xB3,0x20,0x28,0xAB,0xAD,0xF6,0xB5, 0x30,0x2B,0xAD,0xBD,0xB5,0x85,0x42,0xAD, 0xBE,0xB5,0x85,0x43,0xAE,0x9C,0xB3,0x20, 0x1C,0xB2,0x20,0x37,0xB0,0x4C,0x7F,0xB3, 0xAD,0xBC,0xB5,0xC9,0x05,0xB0,0x0B,0x0A, 0xAA,0xBD,0xE6,0xAA,0x48,0xBD,0xE5,0xAA, 0x48,0x60,0x4C,0x67,0xB3,0x4C,0x7B,0xB3, 0xAD,0xF6,0xB5,0x30,0xF8,0xAD,0xBC,0xB5, 0xC9,0x05,0xB0,0xEE,0x0A,0xAA,0xBD,0xF2, 0xAA,0x48,0xBD,0xF1,0xAA,0x48,0x60,0x20, 0x00,0xB3,0x20,0xA8,0xAC,0x8D,0xC3,0xB5, 0x4C,0x7F,0xB3,0x20,0x00,0xB3,0x20,0xB5, 0xB1,0x20,0xA8,0xAC,0x48,0x20,0xA2,0xB1, 0xA0,0x00,0x68,0x91,0x42,0x4C,0x96,0xAC, 0x20,0xB6,0xB0,0xB0,0x0B,0xB1,0x42,0x48, 0x20,0x5B,0xB1,0x20,0x94,0xB1,0x68,0x60, 0x4C,0x6F,0xB3,0x20,0x00,0xB3,0xAD,0xC3, 0xB5,0x20,0xDA,0xAC,0x4C,0x7F,0xB3,0x20, 0x00,0xB3,0x20,0xA2,0xB1,0xA0,0x00,0xB1, 0x42,0x20,0xDA,0xAC,0x20,0xB5,0xB1,0x4C, 0xCA,0xAC,0x48,0x20,0xB6,0xB0,0x68,0x91, 0x42,0xA9,0x40,0x0D,0xD5,0xB5,0x8D,0xD5, 0xB5,0x20,0x5B,0xB1,0x4C,0x94,0xB1,0xA9, 0x80,0x8D,0x9E,0xB3,0xD0,0x05,0xA9,0x00, 0x8D,0x9E,0xB3,0x20,0x28,0xAB,0xAE,0x9C, 0xB3,0xBD,0xC8,0xB4,0x29,0x7F,0x0D,0x9E, 0xB3,0x9D,0xC8,0xB4,0x20,0x37,0xB0,0x4C, 0x7F,0xB3,0x20,0x00,0xB3,0x4C,0x7F,0xB3, 0x20,0x28,0xAB,0x20,0xB6,0xB0,0xB0,0xEF, 0xEE,0xE4,0xB5,0xD0,0xF6,0xEE,0xE5,0xB5, 0x4C,0x1B,0xAD,0x20,0x28,0xAB,0xAE,0x9C, 0xB3,0xBD,0xC8,0xB4,0x10,0x03,0x4C,0x7B, 0xB3,0xAE,0x9C,0xB3,0xBD,0xC6,0xB4,0x8D, 0xD1,0xB5,0x9D,0xE6,0xB4,0xA9,0xFF,0x9D, 0xC6,0xB4,0xBC,0xC7,0xB4,0x8C,0xD2,0xB5, 0x20,0x37,0xB0,0x18,0x20,0x5E,0xAF,0xB0, 0x2A,0x20,0x0C,0xAF,0xA0,0x0C,0x8C,0x9C, 0xB3,0xB1,0x42,0x30,0x0B,0xF0,0x09,0x48, 0xC8,0xB1,0x42,0xA8,0x68,0x20,0x89,0xAD, 0xAC,0x9C,0xB3,0xC8,0xC8,0xD0,0xE7,0xAD, 0xD3,0xB5,0xAC,0xD4,0xB5,0x20,0x89,0xAD, 0x38,0xB0,0xD1,0x20,0xFB,0xAF,0x4C,0x7F, 0xB3,0x38,0x20,0xDD,0xB2,0xA9,0x00,0xA2, 0x05,0x9D,0xF0,0xB5,0xCA,0x10,0xFA,0x60, 0x20,0xDC,0xAB,0xA9,0xFF,0x8D,0xF9,0xB5, 0x20,0xF7,0xAF,0xA9,0x16,0x8D,0x9D,0xB3, 0x20,0x2F,0xAE,0x20,0x2F,0xAE,0xA2,0x0B, 0xBD,0xAF,0xB3,0x20,0xED,0xFD,0xCA,0x10, 0xF7,0x86,0x45,0xAD,0xF6,0xB7,0x85,0x44, 0x20,0x42,0xAE,0x20,0x2F,0xAE,0x20,0x2F, 0xAE,0x18,0x20,0x11,0xB0,0xB0,0x5D,0xA2, 0x00,0x8E,0x9C,0xB3,0xBD,0xC6,0xB4,0xF0, 0x53,0x30,0x4A,0xA0,0xA0,0xBD,0xC8,0xB4, 0x10,0x02,0xA0,0xAA,0x98,0x20,0xED,0xFD, 0xBD,0xC8,0xB4,0x29,0x7F,0xA0,0x07,0x0A, 0x0A,0xB0,0x03,0x88,0xD0,0xFA,0xB9,0xA7, 0xB3,0x20,0xED,0xFD,0xA9,0xA0,0x20,0xED, 0xFD,0xBD,0xE7,0xB4,0x85,0x44,0xBD,0xE8, 0xB4,0x85,0x45,0x20,0x42,0xAE,0xA9,0xA0, 0x20,0xED,0xFD,0xE8,0xE8,0xE8,0xA0,0x1D, 0xBD,0xC6,0xB4,0x20,0xED,0xFD,0xE8,0x88, 0x10,0xF6,0x20,0x2F,0xAE,0x20,0x30,0xB2, 0x90,0xA7,0xB0,0x9E,0x4C,0x7F,0xB3,0xA9, 0x8D,0x20,0xED,0xFD,0xCE,0x9D,0xB3,0xD0, 0x08,0x20,0x0C,0xFD,0xA9,0x15,0x8D,0x9D, 0xB3,0x60,0xA0,0x02,0xA9,0x00,0x48,0xA5, 0x44,0xD9,0xA4,0xB3,0x90,0x12,0xF9,0xA4, 0xB3,0x85,0x44,0xA5,0x45,0xE9,0x00,0x85, 0x45,0x68,0x69,0x00,0x48,0x4C,0x47,0xAE, 0x68,0x09,0xB0,0x20,0xED,0xFD,0x88,0x10, 0xDB,0x60,0x20,0x08,0xAF,0xA0,0x00,0x8C, 0xC5,0xB5,0xB1,0x42,0x99,0xD1,0xB5,0xC8, 0xC0,0x2D,0xD0,0xF6,0x18,0x60,0x20,0x08, 0xAF,0xA0,0x00,0xB9,0xD1,0xB5,0x91,0x42, 0xC8,0xC0,0x2D,0xD0,0xF6,0x60,0x20,0xDC, 0xAB,0xA9,0x04,0x20,0x58,0xB0,0xAD,0xF9, 0xB5,0x49,0xFF,0x8D,0xC1,0xB3,0xA9,0x11, 0x8D,0xEB,0xB3,0xA9,0x01,0x8D,0xEC,0xB3, 0xA2,0x38,0xA9,0x00,0x9D,0xBB,0xB3,0xE8, 0xD0,0xFA,0xA2,0x0C,0xE0,0x8C,0xF0,0x14, 0xA0,0x03,0xB9,0xA0,0xB3,0x9D,0xF3,0xB3, 0xE8,0x88,0x10,0xF6,0xE0,0x44,0xD0,0xEC, 0xA2,0x48,0xD0,0xE8,0x20,0xFB,0xAF,0xA2, 0x00,0x8A,0x9D,0xBB,0xB4,0xE8,0xD0,0xFA, 0x20,0x45,0xB0,0xA9,0x11,0xAC,0xF0,0xB3, 0x88,0x88,0x8D,0xEC,0xB7,0x8D,0xBC,0xB4, 0x8C,0xBD,0xB4,0xC8,0x8C,0xED,0xB7,0xA9, 0x02,0x20,0x58,0xB0,0xAC,0xBD,0xB4,0x88, 0x30,0x05,0xD0,0xEC,0x98,0xF0,0xE6,0x20, 0xC2,0xB7,0x20,0x4A,0xB7,0x4C,0x7F,0xB3, 0xA2,0x00,0xF0,0x06,0xA2,0x02,0xD0,0x02, 0xA2,0x04,0xBD,0xC7,0xB5,0x85,0x42,0xBD, 0xC8,0xB5,0x85,0x43,0x60,0x2C,0xD5,0xB5, 0x70,0x01,0x60,0x20,0xE4,0xAF,0xA9,0x02, 0x20,0x52,0xB0,0xA9,0xBF,0x2D,0xD5,0xB5, 0x8D,0xD5,0xB5,0x60,0xAD,0xD5,0xB5,0x30, 0x01,0x60,0x20,0x4B,0xAF,0xA9,0x02,0x20, 0x52,0xB0,0xA9,0x7F,0x2D,0xD5,0xB5,0x8D, 0xD5,0xB5,0x60,0xAD,0xC9,0xB5,0x8D,0xF0, 0xB7,0xAD,0xCA,0xB5,0x8D,0xF1,0xB7,0xAE, 0xD3,0xB5,0xAC,0xD4,0xB5,0x60,0x08,0x20, 0x34,0xAF,0x20,0x4B,0xAF,0x20,0x0C,0xAF, 0x28,0xB0,0x09,0xAE,0xD1,0xB5,0xAC,0xD2, 0xB5,0x4C,0xB5,0xAF,0xA0,0x01,0xB1,0x42, 0xF0,0x08,0xAA,0xC8,0xB1,0x42,0xA8,0x4C, 0xB5,0xAF,0xAD,0xBB,0xB5,0xC9,0x04,0xF0, 0x02,0x38,0x60,0x20,0x44,0xB2,0xA0,0x02, 0x91,0x42,0x48,0x88,0xAD,0xF1,0xB5,0x91, 0x42,0x48,0x20,0x3A,0xAF,0x20,0xD6,0xB7, 0xA0,0x05,0xAD,0xDE,0xB5,0x91,0x42,0xC8, 0xAD,0xDF,0xB5,0x91,0x42,0x68,0xAA,0x68, 0xA8,0xA9,0x02,0xD0,0x02,0xA9,0x01,0x8E, 0xD3,0xB5,0x8C,0xD4,0xB5,0x20,0x52,0xB0, 0xA0,0x05,0xB1,0x42,0x8D,0xDC,0xB5,0x18, 0x6D,0xDA,0xB5,0x8D,0xDE,0xB5,0xC8,0xB1, 0x42,0x8D,0xDD,0xB5,0x6D,0xDB,0xB5,0x8D, 0xDF,0xB5,0x18,0x60,0x20,0xE4,0xAF,0xA9, 0x01,0x4C,0x52,0xB0,0xAC,0xCB,0xB5,0xAD, 0xCC,0xB5,0x8C,0xF0,0xB7,0x8D,0xF1,0xB7, 0xAE,0xD6,0xB5,0xAC,0xD7,0xB5,0x60,0xA9, 0x01,0xD0,0x02,0xA9,0x02,0xAC,0xC3,0xAA, 0x8C,0xF0,0xB7,0xAC,0xC4,0xAA,0x8C,0xF1, 0xB7,0xAE,0xFA,0xB5,0xA0,0x00,0x4C,0x52, 0xB0,0x08,0x20,0x45,0xB0,0x28,0xB0,0x08, 0xAC,0xBD,0xB3,0xAE,0xBC,0xB3,0xD0,0x0A, 0xAE,0xBC,0xB4,0xD0,0x02,0x38,0x60,0xAC, 0xBD,0xB4,0x8E,0x97,0xB3,0x8C,0x98,0xB3, 0xA9,0x01,0x20,0x52,0xB0,0x18,0x60,0x20, 0x45,0xB0,0xAE,0x97,0xB3,0xAC,0x98,0xB3, 0xA9,0x02,0x4C,0x52,0xB0,0xAD,0xC5,0xAA, 0x8D,0xF0,0xB7,0xAD,0xC6,0xAA,0x8D,0xF1, 0xB7,0x60,0x8E,0xEC,0xB7,0x8C,0xED,0xB7, 0x8D,0xF4,0xB7,0xC9,0x02,0xD0,0x06,0x0D, 0xD5,0xB5,0x8D,0xD5,0xB5,0xAD,0xF9,0xB5, 0x49,0xFF,0x8D,0xEB,0xB7,0xAD,0xF7,0xB5, 0x8D,0xE9,0xB7,0xAD,0xF8,0xB5,0x8D,0xEA, 0xB7,0xAD,0xE2,0xB5,0x8D,0xF2,0xB7,0xAD, 0xE3,0xB5,0x8D,0xF3,0xB7,0xA9,0x01,0x8D, 0xE8,0xB7,0xAC,0xC1,0xAA,0xAD,0xC2,0xAA, 0x20,0xB5,0xB7,0xAD,0xF6,0xB7,0x8D,0xBF, 0xB5,0xA9,0xFF,0x8D,0xEB,0xB7,0xB0,0x01, 0x60,0xAD,0xF5,0xB7,0xA0,0x07,0xC9,0x20, 0xF0,0x08,0xA0,0x04,0xC9,0x10,0xF0,0x02, 0xA0,0x08,0x98,0x4C,0x85,0xB3,0xAD,0xE4, 0xB5,0xCD,0xE0,0xB5,0xD0,0x08,0xAD,0xE5, 0xB5,0xCD,0xE1,0xB5,0xF0,0x66,0x20,0x1D, 0xAF,0xAD,0xE5,0xB5,0xCD,0xDD,0xB5,0x90, 0x1C,0xD0,0x08,0xAD,0xE4,0xB5,0xCD,0xDC, 0xB5,0x90,0x12,0xAD,0xE5,0xB5,0xCD,0xDF, 0xB5,0x90,0x10,0xD0,0x08,0xAD,0xE4,0xB5, 0xCD,0xDE,0xB5,0x90,0x06,0x20,0x5E,0xAF, 0x90,0xD7,0x60,0x38,0xAD,0xE4,0xB5,0xED, 0xDC,0xB5,0x0A,0x69,0x0C,0xA8,0x20,0x0C, 0xAF,0xB1,0x42,0xD0,0x0F,0xAD,0xBB,0xB5, 0xC9,0x04,0xF0,0x02,0x38,0x60,0x20,0x34, 0xB1,0x4C,0x20,0xB1,0x8D,0xD6,0xB5,0xC8, 0xB1,0x42,0x8D,0xD7,0xB5,0x20,0xDC,0xAF, 0xAD,0xE4,0xB5,0x8D,0xE0,0xB5,0xAD,0xE5, 0xB5,0x8D,0xE1,0xB5,0x20,0x10,0xAF,0xAC, 0xE6,0xB5,0x18,0x60,0x8C,0x9D,0xB3,0x20, 0x44,0xB2,0xAC,0x9D,0xB3,0xC8,0x91,0x42, 0x8D,0xD7,0xB5,0x88,0xAD,0xF1,0xB5,0x91, 0x42,0x8D,0xD6,0xB5,0x20,0x10,0xAF,0x20, 0xD6,0xB7,0xA9,0xC0,0x0D,0xD5,0xB5,0x8D, 0xD5,0xB5,0x60,0xAE,0xEA,0xB5,0x8E,0xBD, 0xB5,0xAE,0xEB,0xB5,0x8E,0xBE,0xB5,0xAE, 0xEC,0xB5,0xAC,0xED,0xB5,0x8E,0xBF,0xB5, 0x8C,0xC0,0xB5,0xE8,0xD0,0x01,0xC8,0xCC, 0xE9,0xB5,0xD0,0x11,0xEC,0xE8,0xB5,0xD0, 0x0C,0xA2,0x00,0xA0,0x00,0xEE,0xEA,0xB5, 0xD0,0x03,0xEE,0xEB,0xB5,0x8E,0xEC,0xB5, 0x8C,0xED,0xB5,0x60,0xEE,0xE6,0xB5,0xD0, 0x08,0xEE,0xE4,0xB5,0xD0,0x03,0xEE,0xE5, 0xB5,0x60,0xAC,0xC3,0xB5,0xAE,0xC4,0xB5, 0x84,0x42,0x86,0x43,0xEE,0xC3,0xB5,0xD0, 0x03,0xEE,0xC4,0xB5,0x60,0xAC,0xC1,0xB5, 0xD0,0x08,0xAE,0xC2,0xB5,0xF0,0x07,0xCE, 0xC2,0xB5,0xCE,0xC1,0xB5,0x60,0x4C,0x7F, 0xB3,0x20,0xF7,0xAF,0xAD,0xC3,0xB5,0x85, 0x42,0xAD,0xC4,0xB5,0x85,0x43,0xA9,0x01, 0x8D,0x9D,0xB3,0xA9,0x00,0x8D,0xD8,0xB5, 0x18,0xEE,0xD8,0xB5,0x20,0x11,0xB0,0xB0, 0x51,0xA2,0x00,0x8E,0x9C,0xB3,0xBD,0xC6, 0xB4,0xF0,0x1F,0x30,0x22,0xA0,0x00,0xE8, 0xE8,0xE8,0xB1,0x42,0xDD,0xC6,0xB4,0xD0, 0x0A,0xC8,0xC0,0x1E,0xD0,0xF3,0xAE,0x9C, 0xB3,0x18,0x60,0x20,0x30,0xB2,0x90,0xDB, 0xB0,0xCF,0xAC,0x9D,0xB3,0xD0,0xC1,0xAC, 0x9D,0xB3,0xD0,0xEF,0xA0,0x00,0xE8,0xE8, 0xE8,0xB1,0x42,0x9D,0xC6,0xB4,0xC8,0xC0, 0x1E,0xD0,0xF5,0xAE,0x9C,0xB3,0x38,0x60, 0x18,0xAD,0x9C,0xB3,0x69,0x23,0xAA,0xE0, 0xF5,0x60,0xA9,0x00,0xAC,0x9D,0xB3,0xD0, 0x97,0x4C,0x77,0xB3,0xAD,0xF1,0xB5,0xF0, 0x21,0xCE,0xF0,0xB5,0x30,0x17,0x18,0xA2, 0x04,0x3E,0xF1,0xB5,0xCA,0xD0,0xFA,0x90, 0xF0,0xEE,0xEE,0xB5,0xD0,0x03,0xEE,0xEF, 0xB5,0xAD,0xF0,0xB5,0x60,0xA9,0x00,0x8D, 0xF1,0xB5,0xA9,0x00,0x8D,0x9E,0xB3,0x20, 0xF7,0xAF,0x18,0xAD,0xEB,0xB3,0x6D,0xEC, 0xB3,0xF0,0x09,0xCD,0xEF,0xB3,0x90,0x14, 0xA9,0xFF,0xD0,0x0A,0xAD,0x9E,0xB3,0xD0, 0x37,0xA9,0x01,0x8D,0x9E,0xB3,0x8D,0xEC, 0xB3,0x18,0x69,0x11,0x8D,0xEB,0xB3,0x8D, 0xF1,0xB5,0xA8,0x0A,0x0A,0xA8,0xA2,0x04, 0x18,0xB9,0xF6,0xB3,0x9D,0xF1,0xB5,0xF0, 0x06,0x38,0xA9,0x00,0x99,0xF6,0xB3,0x88, 0xCA,0xD0,0xEE,0x90,0xBD,0x20,0xFB,0xAF, 0xAD,0xF0,0xB3,0x8D,0xF0,0xB5,0xD0,0x89, 0x4C,0x77,0xB3,0xAD,0xF1,0xB5,0xD0,0x01, 0x60,0x48,0x20,0xF7,0xAF,0xAC,0xF0,0xB5, 0x68,0x18,0x20,0xDD,0xB2,0xA9,0x00,0x8D, 0xF1,0xB5,0x4C,0xFB,0xAF,0xA2,0xFC,0x7E, 0xF6,0xB4,0xE8,0xD0,0xFA,0xC8,0xCC,0xF0, 0xB3,0xD0,0xF2,0x0A,0x0A,0xA8,0xF0,0x0F, 0xA2,0x04,0xBD,0xF1,0xB5,0x19,0xF6,0xB3, 0x99,0xF6,0xB3,0x88,0xCA,0xD0,0xF3,0x60, 0xAD,0xBD,0xB5,0x8D,0xE6,0xB5,0x8D,0xEA, 0xB5,0xAD,0xBE,0xB5,0x8D,0xE4,0xB5,0x8D, 0xEB,0xB5,0xA9,0x00,0x8D,0xE5,0xB5,0xA0, 0x10,0xAA,0xAD,0xE6,0xB5,0x4A,0xB0,0x03, 0x8A,0x90,0x0E,0x18,0xAD,0xE5,0xB5,0x6D, 0xE8,0xB5,0x8D,0xE5,0xB5,0x8A,0x6D,0xE9, 0xB5,0x6A,0x6E,0xE5,0xB5,0x6E,0xE4,0xB5, 0x6E,0xE6,0xB5,0x88,0xD0,0xDB,0x18,0xAD, 0xBF,0xB5,0x8D,0xEC,0xB5,0x6D,0xE6,0xB5, 0x8D,0xE6,0xB5,0xAD,0xC0,0xB5,0x8D,0xED, 0xB5,0x6D,0xE4,0xB5,0x8D,0xE4,0xB5,0x90, 0x03,0xEE,0xE5,0xB5,0x60,0x00,0x00,0xA9, 0x01,0xD0,0x22,0xA9,0x02,0xD0,0x1E,0xA9, 0x03,0xD0,0x1A,0xA9,0x04,0xD0,0x16,0xA9, 0x05,0xD0,0x12,0xA9,0x06,0xD0,0x0E,0x4C, 0xED,0xBF,0xEA,0xA9,0x0A,0xD0,0x06,0xAD, 0xC5,0xB5,0x18,0x90,0x01,0x38,0x08,0x8D, 0xC5,0xB5,0xA9,0x00,0x85,0x48,0x20,0x7E, 0xAE,0x28,0xAE,0x9B,0xB3,0x9A,0x60,0x11, 0x0F,0x00,0x00,0xEC,0x46,0x01,0x00,0x00, 0x00,0x00,0xFF,0xFF,0x01,0x0A,0x64,0xD4, 0xC9,0xC1,0xC2,0xD3,0xD2,0xC1,0xC2,0xA0, 0xC5,0xCD,0xD5,0xCC,0xCF,0xD6,0xA0,0xCB, 0xD3,0xC9,0xC4,0x04,0x11,0x0F,0x03,0x00, 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x7A,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x13,0x01,0x00,0x00,0x23, 0x10,0x00,0x01,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, 0xFF,0x00,0x00,0x3F,0xFF,0x00,0x00,0x3F, 0xFF,0x00,0x00,0x00,0x7F,0x00,0x00,0xFF, 0xFF,0x00,0x00,0xFF,0xFF,0x00,0x00,0xFF, 0xFF,0x00,0x00,0x0F,0xFF,0x00,0x00,0x01, 0xFF,0x00,0x00,0x1F,0xFF,0x00,0x00,0x00, 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x03, 0xFF,0x00,0x00,0x1F,0xFF,0x00,0x00,0x03, 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1F,0xFF,0x00,0x00,0x00, 0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x1F, 0xFF,0x00,0x00,0x00,0x7F,0x00,0x00,0x1F, 0xFF,0x00,0x00,0x00,0x03,0x00,0x00,0x1F, 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x1F, 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x11,0x0E,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x0F, 0x82,0xC8,0xC5,0xCC,0xCC,0xCF,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0x03, 0x00,0x14,0x0F,0x81,0xC1,0xD0,0xD0,0xCC, 0xC5,0xD3,0xCF,0xC6,0xD4,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0x03,0x00,0x15,0x0F,0x84,0xCC, 0xCF,0xC1,0xC4,0xC5,0xD2,0xAE,0xCF,0xC2, 0xCA,0xB0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0x06,0x00,0x16, 0x0F,0x84,0xC6,0xD0,0xC2,0xC1,0xD3,0xC9, 0xC3,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0x2A,0x00,0x17,0x0F,0x84,0xC9,0xCE,0xD4, 0xC2,0xC1,0xD3,0xC9,0xC3,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0x2A,0x00,0x18,0x0F,0x82, 0xCD,0xC1,0xD3,0xD4,0xC5,0xD2,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0x03,0x00, 0x19,0x0F,0x84,0xCD,0xC1,0xD3,0xD4,0xC5, 0xD2,0xA0,0xC3,0xD2,0xC5,0xC1,0xD4,0xC5, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0,0xA0, 0xA0,0x09,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x15,0x0F,0x15,0x0F,0x00,0x15,0x0A, 0x01,0x46,0x7A,0x00,0x00,0x00,0x7A,0x00, 0x04,0x00,0x00,0x01,0x04,0x00,0x48,0x00, 0x01,0x00,0x48,0x04,0x00,0x00,0x06,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x60, 0x01,0xFF,0x11,0x00,0x00,0x00,0xFD,0xFE, 0x01,0xA5,0x27,0xC9,0x09,0xD0,0x18,0xA5, 0x2B,0x4A,0x4A,0x4A,0x4A,0x09,0xC0,0x85, 0x3F,0xA9,0x5C,0x85,0x3E,0x18,0xAD,0xFE, 0x08,0x6D,0xFF,0x08,0x8D,0xFE,0x08,0xAE, 0xFF,0x08,0x30,0x15,0xBD,0x4D,0x08,0x85, 0x3D,0xCE,0xFF,0x08,0xAD,0xFE,0x08,0x85, 0x27,0xCE,0xFE,0x08,0xA6,0x2B,0x6C,0x3E, 0x00,0xEE,0xFE,0x08,0xEE,0xFE,0x08,0x20, 0x89,0xFE,0x20,0x93,0xFE,0x20,0x2F,0xFB, 0xA6,0x2B,0x6C,0xFD,0x08,0x00,0x0D,0x0B, 0x09,0x07,0x05,0x03,0x01,0x0E,0x0C,0x0A, 0x08,0x06,0x04,0x02,0x0F,0x00,0x20,0x64, 0xA7,0xB0,0x08,0xA9,0x00,0xA8,0x8D,0x5D, 0xB6,0x91,0x40,0xAD,0xC5,0xB5,0x4C,0xD2, 0xA6,0xAD,0x5D,0xB6,0xF0,0x08,0xEE,0xBD, 0xB5,0xD0,0x03,0xEE,0xBE,0xB5,0xA9,0x00, 0x8D,0x5D,0xB6,0x4C,0x84,0xBA,0x8D,0xBC, 0xB5,0x20,0xA8,0xA6,0x20,0xEA,0xA2,0x4C, 0x7D,0xA2,0xA0,0x13,0xB1,0x42,0xD0,0x14, 0xC8,0xC0,0x17,0xD0,0xF7,0xA0,0x19,0xB1, 0x42,0x99,0xA4,0xB5,0xC8,0xC0,0x1D,0xD0, 0xF6,0x4C,0xBB,0xA6,0xA2,0xFF,0x8E,0x5D, 0xB6,0xD0,0xF6,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x09, 0x8E,0xE9,0xB7,0x8E,0xF7,0xB7,0xA9,0x01, 0x8D,0xF8,0xB7,0x8D,0xEA,0xB7,0xAD,0xE0, 0xB7,0x8D,0xE1,0xB7,0xA9,0x02,0x8D,0xEC, 0xB7,0xA9,0x04,0x8D,0xED,0xB7,0xAC,0xE7, 0xB7,0x88,0x8C,0xF1,0xB7,0xA9,0x01,0x8D, 0xF4,0xB7,0x8A,0x4A,0x4A,0x4A,0x4A,0xAA, 0xA9,0x00,0x9D,0xF8,0x04,0x9D,0x78,0x04, 0x20,0x93,0xB7,0xA2,0xFF,0x9A,0x8E,0xEB, 0xB7,0x4C,0xC8,0xBF,0x20,0x89,0xFE,0x4C, 0x84,0x9D,0xAD,0xE7,0xB7,0x38,0xED,0xF1, 0xB7,0x8D,0xE1,0xB7,0xAD,0xE7,0xB7,0x8D, 0xF1,0xB7,0xCE,0xF1,0xB7,0xA9,0x02,0x8D, 0xEC,0xB7,0xA9,0x04,0x8D,0xED,0xB7,0xA9, 0x02,0x8D,0xF4,0xB7,0x20,0x93,0xB7,0xAD, 0xE7,0xB7,0x8D,0xFE,0xB6,0x18,0x69,0x09, 0x8D,0xF1,0xB7,0xA9,0x0A,0x8D,0xE1,0xB7, 0x38,0xE9,0x01,0x8D,0xFF,0xB6,0x8D,0xED, 0xB7,0x20,0x93,0xB7,0x60,0x00,0x00,0x00, 0x00,0x00,0x00,0xAD,0xE5,0xB7,0xAC,0xE4, 0xB7,0x20,0xB5,0xB7,0xAC,0xED,0xB7,0x88, 0x10,0x07,0xA0,0x0F,0xEA,0xEA,0xCE,0xEC, 0xB7,0x8C,0xED,0xB7,0xCE,0xF1,0xB7,0xCE, 0xE1,0xB7,0xD0,0xDF,0x60,0x08,0x78,0x20, 0x00,0xBD,0xB0,0x03,0x28,0x18,0x60,0x28, 0x38,0x60,0xAD,0xBC,0xB5,0x8D,0xF1,0xB7, 0xA9,0x00,0x8D,0xF0,0xB7,0xAD,0xF9,0xB5, 0x49,0xFF,0x8D,0xEB,0xB7,0x60,0xA9,0x00, 0xA8,0x91,0x42,0xC8,0xD0,0xFB,0x60,0x00, 0x1B,0x00,0x0A,0x1B,0xE8,0xB7,0x00,0xB6, 0x01,0x60,0x01,0xFF,0x15,0x0A,0xFB,0xB7, 0x00,0x96,0x00,0x01,0x01,0x00,0xFE,0x60, 0x01,0x00,0x00,0x00,0x01,0xEF,0xD8,0x00, 0xA2,0x00,0xA0,0x02,0x88,0xB1,0x3E,0x4A, 0x3E,0x00,0xBC,0x4A,0x3E,0x00,0xBC,0x99, 0x00,0xBB,0xE8,0xE0,0x56,0x90,0xED,0xA2, 0x00,0x98,0xD0,0xE8,0xA2,0x55,0xBD,0x00, 0xBC,0x29,0x3F,0x9D,0x00,0xBC,0xCA,0x10, 0xF5,0x60,0x38,0x86,0x27,0x8E,0x78,0x06, 0xBD,0x8D,0xC0,0xBD,0x8E,0xC0,0x30,0x7C, 0xAD,0x00,0xBC,0x85,0x26,0xA9,0xFF,0x9D, 0x8F,0xC0,0x1D,0x8C,0xC0,0x48,0x68,0xEA, 0xA0,0x04,0x48,0x68,0x20,0xB9,0xB8,0x88, 0xD0,0xF8,0xA9,0xD5,0x20,0xB8,0xB8,0xA9, 0xAA,0x20,0xB8,0xB8,0xA9,0xAD,0x20,0xB8, 0xB8,0x98,0xA0,0x56,0xD0,0x03,0xB9,0x00, 0xBC,0x59,0xFF,0xBB,0xAA,0xBD,0x29,0xBA, 0xA6,0x27,0x9D,0x8D,0xC0,0xBD,0x8C,0xC0, 0x88,0xD0,0xEB,0xA5,0x26,0xEA,0x59,0x00, 0xBB,0xAA,0xBD,0x29,0xBA,0xAE,0x78,0x06, 0x9D,0x8D,0xC0,0xBD,0x8C,0xC0,0xB9,0x00, 0xBB,0xC8,0xD0,0xEA,0xAA,0xBD,0x29,0xBA, 0xA6,0x27,0x20,0xBB,0xB8,0xA9,0xDE,0x20, 0xB8,0xB8,0xA9,0xAA,0x20,0xB8,0xB8,0xA9, 0xEB,0x20,0xB8,0xB8,0xA9,0xFF,0x20,0xB8, 0xB8,0xBD,0x8E,0xC0,0xBD,0x8C,0xC0,0x60, 0x18,0x48,0x68,0x9D,0x8D,0xC0,0x1D,0x8C, 0xC0,0x60,0xA0,0x00,0xA2,0x56,0xCA,0x30, 0xFB,0xB9,0x00,0xBB,0x5E,0x00,0xBC,0x2A, 0x5E,0x00,0xBC,0x2A,0x91,0x3E,0xC8,0xC4, 0x26,0xD0,0xEB,0x60,0xA0,0x20,0x88,0xF0, 0x61,0xBD,0x8C,0xC0,0x10,0xFB,0x49,0xD5, 0xD0,0xF4,0xEA,0xBD,0x8C,0xC0,0x10,0xFB, 0xC9,0xAA,0xD0,0xF2,0xA0,0x56,0xBD,0x8C, 0xC0,0x10,0xFB,0xC9,0xAD,0xD0,0xE7,0xA9, 0x00,0x88,0x84,0x26,0xBC,0x8C,0xC0,0x10, 0xFB,0x59,0x00,0xBA,0xA4,0x26,0x99,0x00, 0xBC,0xD0,0xEE,0x84,0x26,0xBC,0x8C,0xC0, 0x10,0xFB,0x59,0x00,0xBA,0xA4,0x26,0x99, 0x00,0xBB,0xC8,0xD0,0xEE,0xBC,0x8C,0xC0, 0x10,0xFB,0xD9,0x00,0xBA,0xD0,0x13,0xBD, 0x8C,0xC0,0x10,0xFB,0xC9,0xDE,0xD0,0x0A, 0xEA,0xBD,0x8C,0xC0,0x10,0xFB,0xC9,0xAA, 0xF0,0x5C,0x38,0x60,0xA0,0xFC,0x84,0x26, 0xC8,0xD0,0x04,0xE6,0x26,0xF0,0xF3,0xBD, 0x8C,0xC0,0x10,0xFB,0xC9,0xD5,0xD0,0xF0, 0xEA,0xBD,0x8C,0xC0,0x10,0xFB,0xC9,0xAA, 0xD0,0xF2,0xA0,0x03,0xBD,0x8C,0xC0,0x10, 0xFB,0xC9,0x96,0xD0,0xE7,0xA9,0x00,0x85, 0x27,0xBD,0x8C,0xC0,0x10,0xFB,0x2A,0x85, 0x26,0xBD,0x8C,0xC0,0x10,0xFB,0x25,0x26, 0x99,0x2C,0x00,0x45,0x27,0x88,0x10,0xE7, 0xA8,0xD0,0xB7,0xBD,0x8C,0xC0,0x10,0xFB, 0xC9,0xDE,0xD0,0xAE,0xEA,0xBD,0x8C,0xC0, 0x10,0xFB,0xC9,0xAA,0xD0,0xA4,0x18,0x60, 0x86,0x2B,0x85,0x2A,0xCD,0x78,0x04,0xF0, 0x53,0xA9,0x00,0x85,0x26,0xAD,0x78,0x04, 0x85,0x27,0x38,0xE5,0x2A,0xF0,0x33,0xB0, 0x07,0x49,0xFF,0xEE,0x78,0x04,0x90,0x05, 0x69,0xFE,0xCE,0x78,0x04,0xC5,0x26,0x90, 0x02,0xA5,0x26,0xC9,0x0C,0xB0,0x01,0xA8, 0x38,0x20,0xEE,0xB9,0xB9,0x11,0xBA,0x20, 0x00,0xBA,0xA5,0x27,0x18,0x20,0xF1,0xB9, 0xB9,0x1D,0xBA,0x20,0x00,0xBA,0xE6,0x26, 0xD0,0xC3,0x20,0x00,0xBA,0x18,0xAD,0x78, 0x04,0x29,0x03,0x2A,0x05,0x2B,0xAA,0xBD, 0x80,0xC0,0xA6,0x2B,0x60,0x00,0x00,0x00, 0xA2,0x11,0xCA,0xD0,0xFD,0xE6,0x46,0xD0, 0x02,0xE6,0x47,0x38,0xE9,0x01,0xD0,0xF0, 0x60,0x01,0x30,0x28,0x24,0x20,0x1E,0x1D, 0x1C,0x1C,0x1C,0x1C,0x1C,0x70,0x2C,0x26, 0x22,0x1F,0x1E,0x1D,0x1C,0x1C,0x1C,0x1C, 0x1C,0x96,0x97,0x9A,0x9B,0x9D,0x9E,0x9F, 0xA6,0xA7,0xAB,0xAC,0xAD,0xAE,0xAF,0xB2, 0xB3,0xB4,0xB5,0xB6,0xB7,0xB9,0xBA,0xBB, 0xBC,0xBD,0xBE,0xBF,0xCB,0xCD,0xCE,0xCF, 0xD3,0xD6,0xD7,0xD9,0xDA,0xDB,0xDC,0xDD, 0xDE,0xDF,0xE5,0xE6,0xE7,0xE9,0xEA,0xEB, 0xEC,0xED,0xEE,0xEF,0xF2,0xF3,0xF4,0xF5, 0xF6,0xF7,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE, 0xFF,0xAE,0x5F,0xAA,0xE0,0x1C,0xF0,0x05, 0xA2,0x00,0x8E,0x5D,0xB6,0x60,0xA9,0xFF, 0x8D,0xFB,0x04,0x8D,0x0C,0xC0,0x8D,0x0E, 0xC0,0x4C,0x2F,0xFB,0xAD,0xBD,0xB5,0x8D, 0xE6,0xB5,0x8D,0xEA,0xB5,0xBA,0x8E,0x9B, 0xB3,0x4C,0x7F,0xB3,0x00,0x00,0x00,0x01, 0x98,0x99,0x02,0x03,0x9C,0x04,0x05,0x06, 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0x07,0x08, 0xA8,0xA9,0xAA,0x09,0x0A,0x0B,0x0C,0x0D, 0xB0,0xB1,0x0E,0x0F,0x10,0x11,0x12,0x13, 0xB8,0x14,0x15,0x16,0x17,0x18,0x19,0x1A, 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7, 0xC8,0xC9,0xCA,0x1B,0xCC,0x1C,0x1D,0x1E, 0xD0,0xD1,0xD2,0x1F,0xD4,0xD5,0x20,0x21, 0xD8,0x22,0x23,0x24,0x25,0x26,0x27,0x28, 0xE0,0xE1,0xE2,0xE3,0xE4,0x29,0x2A,0x2B, 0xE8,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32, 0xF0,0xF1,0x33,0x34,0x35,0x36,0x37,0x38, 0xF8,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3A,0x20,0x12,0x34, 0x05,0x29,0x0F,0x29,0x0F,0x34,0x00,0x22, 0x32,0x22,0x06,0x39,0x0E,0x21,0x0F,0x04, 0x00,0x32,0x26,0x39,0x0E,0x34,0x1A,0x29, 0x0B,0x2E,0x0F,0x00,0x24,0x0E,0x22,0x04, 0x3E,0x08,0x06,0x3F,0x08,0x06,0x3F,0x08, 0x34,0x3E,0x08,0x14,0x3E,0x21,0x0E,0x21, 0x0E,0x13,0x25,0x3D,0x08,0x2F,0x3F,0x29, 0x0D,0x08,0x29,0x3F,0x21,0x0D,0x28,0x05, 0x22,0x0C,0x12,0x36,0x33,0x3F,0x34,0x3E, 0x30,0x05,0x34,0x3A,0x29,0x0C,0x28,0x00, 0x31,0x0D,0x08,0x00,0x3F,0x13,0x25,0x3D, 0x29,0x0F,0x08,0x23,0x3E,0x2A,0x2F,0x00, 0x3E,0x31,0x10,0x34,0x04,0x2F,0x30,0x3E, 0x31,0x10,0x34,0x03,0x29,0x11,0x29,0x0B, 0x30,0x27,0x3C,0x22,0x31,0x0B,0x3C,0x27, 0x31,0x0F,0x34,0x37,0x39,0x11,0x31,0x0D, 0x3C,0x35,0x29,0x0D,0x26,0x2A,0x08,0x12, 0x3E,0x2A,0x37,0x08,0x3B,0x3F,0x08,0x0E, 0x3F,0x2A,0x28,0x21,0x0C,0x08,0x19,0x3F, 0x08,0x31,0x3F,0x2B,0x00,0x00,0x32,0x28, 0x3C,0x04,0x32,0x32,0x29,0x3C,0x24,0x22, 0x08,0x29,0x3F,0x32,0x24,0x34,0x35,0x22, 0x3C,0x34,0x08,0x1E,0x3F,0x2A,0x00,0x21, 0x0F,0x08,0x0D,0x3D,0x02,0x3A,0x2F,0x32, 0x30,0x24,0x30,0x02,0x02,0x28,0x01,0x02, 0x09,0x10,0x09,0x10,0x32,0x04,0x3E,0x31, 0x0F,0x3C,0x3D,0x04,0x39,0x28,0x01,0x08, 0x0D,0x3D,0x21,0x0D,0x37,0x2D,0x3E,0x34, 0x04,0x08,0x0D,0x3D,0x37,0x2E,0x3E,0x3C, 0x03,0x2F,0x2E,0x3E,0x3C,0x01,0x32,0x29, 0x3C,0x00,0x29,0x0D,0x06,0x22,0x09,0x11, 0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xBD, 0x8D,0xC0,0xBD,0x8E,0xC0,0x30,0x5E,0xA9, 0xFF,0x9D,0x8F,0xC0,0xDD,0x8C,0xC0,0x48, 0x68,0x20,0xC3,0xBC,0x20,0xC3,0xBC,0x9D, 0x8D,0xC0,0xDD,0x8C,0xC0,0xEA,0x88,0xD0, 0xF0,0xA9,0xD5,0x20,0xD5,0xBC,0xA9,0xAA, 0x20,0xD5,0xBC,0xA9,0x96,0x20,0xD5,0xBC, 0xA5,0x41,0x20,0xC4,0xBC,0xA5,0x44,0x20, 0xC4,0xBC,0xA5,0x3F,0x20,0xC4,0xBC,0xA5, 0x41,0x45,0x44,0x45,0x3F,0x48,0x4A,0x05, 0x3E,0x9D,0x8D,0xC0,0xBD,0x8C,0xC0,0x68, 0x09,0xAA,0x20,0xD4,0xBC,0xA9,0xDE,0x20, 0xD5,0xBC,0xA9,0xAA,0x20,0xD5,0xBC,0xA9, 0xEB,0x20,0xD5,0xBC,0x18,0xBD,0x8E,0xC0, 0xBD,0x8C,0xC0,0x60,0x48,0x4A,0x05,0x3E, 0x9D,0x8D,0xC0,0xDD,0x8C,0xC0,0x68,0xEA, 0xEA,0xEA,0x09,0xAA,0xEA,0xEA,0x48,0x68, 0x9D,0x8D,0xC0,0xDD,0x8C,0xC0,0x60,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x84,0x48,0x85,0x49,0xA0,0x02,0x8C,0xF8, 0x06,0xA0,0x04,0x8C,0xF8,0x04,0xA0,0x01, 0xB1,0x48,0xAA,0xA0,0x0F,0xD1,0x48,0xF0, 0x1B,0x8A,0x48,0xB1,0x48,0xAA,0x68,0x48, 0x91,0x48,0xBD,0x8E,0xC0,0xA0,0x08,0xBD, 0x8C,0xC0,0xDD,0x8C,0xC0,0xD0,0xF6,0x88, 0xD0,0xF8,0x68,0xAA,0xBD,0x8E,0xC0,0xBD, 0x8C,0xC0,0xA0,0x08,0xBD,0x8C,0xC0,0x48, 0x68,0x48,0x68,0x8E,0xF8,0x05,0xDD,0x8C, 0xC0,0xD0,0x03,0x88,0xD0,0xEE,0x08,0xBD, 0x89,0xC0,0xA0,0x06,0xB1,0x48,0x99,0x36, 0x00,0xC8,0xC0,0x0A,0xD0,0xF6,0xA0,0x03, 0xB1,0x3C,0x85,0x47,0xA0,0x02,0xB1,0x48, 0xA0,0x10,0xD1,0x48,0xF0,0x06,0x91,0x48, 0x28,0xA0,0x00,0x08,0x6A,0x90,0x05,0xBD, 0x8A,0xC0,0xB0,0x03,0xBD,0x8B,0xC0,0x66, 0x35,0x28,0x08,0xD0,0x0B,0xA0,0x07,0x20, 0x00,0xBA,0x88,0xD0,0xFA,0xAE,0xF8,0x05, 0xA0,0x04,0xB1,0x48,0x20,0x5A,0xBE,0x28, 0xD0,0x11,0xA4,0x47,0x10,0x0D,0xA0,0x12, 0x88,0xD0,0xFD,0xE6,0x46,0xD0,0xF7,0xE6, 0x47,0xD0,0xF3,0xA0,0x0C,0xB1,0x48,0xF0, 0x5A,0xC9,0x04,0xF0,0x58,0x6A,0x08,0xB0, 0x03,0x20,0x00,0xB8,0xA0,0x30,0x8C,0x78, 0x05,0xAE,0xF8,0x05,0x20,0x44,0xB9,0x90, 0x24,0xCE,0x78,0x05,0x10,0xF3,0xAD,0x78, 0x04,0x48,0xA9,0x60,0x20,0x95,0xBE,0xCE, 0xF8,0x06,0xF0,0x28,0xA9,0x04,0x8D,0xF8, 0x04,0xA9,0x00,0x20,0x5A,0xBE,0x68,0x20, 0x5A,0xBE,0x4C,0xBC,0xBD,0xA4,0x2E,0xCC, 0x78,0x04,0xF0,0x1C,0xAD,0x78,0x04,0x48, 0x98,0x20,0x95,0xBE,0x68,0xCE,0xF8,0x04, 0xD0,0xE5,0xF0,0xCA,0x68,0xA9,0x40,0x28, 0x4C,0x48,0xBE,0xF0,0x39,0x4C,0xAF,0xBE, 0xA0,0x03,0xB1,0x48,0x48,0xA5,0x2F,0xA0, 0x0E,0x91,0x48,0x68,0xF0,0x08,0xC5,0x2F, 0xF0,0x04,0xA9,0x20,0xD0,0xE1,0xA0,0x05, 0xB1,0x48,0xA8,0xB9,0xB8,0xBF,0xC5,0x2D, 0xD0,0x97,0x28,0x90,0x1C,0x20,0xDC,0xB8, 0x08,0xB0,0x8E,0x28,0xA2,0x00,0x86,0x26, 0x20,0xC2,0xB8,0xAE,0xF8,0x05,0x18,0x24, 0x38,0xA0,0x0D,0x91,0x48,0xBD,0x88,0xC0, 0x60,0x20,0x2A,0xB8,0x90,0xF0,0xA9,0x10, 0xB0,0xEE,0x48,0xA0,0x01,0xB1,0x3C,0x6A, 0x68,0x90,0x08,0x0A,0x20,0x6B,0xBE,0x4E, 0x78,0x04,0x60,0x85,0x2A,0x20,0x8E,0xBE, 0xB9,0x78,0x04,0x24,0x35,0x30,0x03,0xB9, 0xF8,0x04,0x8D,0x78,0x04,0xA5,0x2A,0x24, 0x35,0x30,0x05,0x99,0xF8,0x04,0x10,0x03, 0x99,0x78,0x04,0x4C,0xA0,0xB9,0x8A,0x4A, 0x4A,0x4A,0x4A,0xA8,0x60,0x48,0xA0,0x02, 0xB1,0x48,0x6A,0x66,0x35,0x20,0x8E,0xBE, 0x68,0x0A,0x24,0x35,0x30,0x05,0x99,0xF8, 0x04,0x10,0x03,0x99,0x78,0x04,0x60,0xA0, 0x03,0xB1,0x48,0x85,0x41,0xA9,0xAA,0x85, 0x3E,0xA0,0x56,0xA9,0x00,0x85,0x44,0x99, 0xFF,0xBB,0x88,0xD0,0xFA,0x99,0x00,0xBB, 0x88,0xD0,0xFA,0xA9,0x50,0x20,0x95,0xBE, 0xA9,0x28,0x85,0x45,0xA5,0x44,0x20,0x5A, 0xBE,0x20,0x0D,0xBF,0xA9,0x08,0xB0,0x24, 0xA9,0x30,0x8D,0x78,0x05,0x38,0xCE,0x78, 0x05,0xF0,0x19,0x20,0x44,0xB9,0xB0,0xF5, 0xA5,0x2D,0xD0,0xF1,0x20,0xDC,0xB8,0xB0, 0xEC,0xE6,0x44,0xA5,0x44,0xC9,0x23,0x90, 0xD3,0x18,0x90,0x05,0xA0,0x0D,0x91,0x48, 0x38,0xBD,0x88,0xC0,0x60,0xA9,0x00,0x85, 0x3F,0xA0,0x80,0xD0,0x02,0xA4,0x45,0x20, 0x56,0xBC,0xB0,0x6B,0x20,0x2A,0xB8,0xB0, 0x66,0xE6,0x3F,0xA5,0x3F,0xC9,0x10,0x90, 0xEC,0xA0,0x0F,0x84,0x3F,0xA9,0x30,0x8D, 0x78,0x05,0x99,0xA8,0xBF,0x88,0x10,0xFA, 0xA4,0x45,0x20,0x87,0xBF,0x20,0x87,0xBF, 0x20,0x87,0xBF,0x48,0x68,0xEA,0x88,0xD0, 0xF1,0x20,0x44,0xB9,0xB0,0x23,0xA5,0x2D, 0xF0,0x15,0xA9,0x10,0xC5,0x45,0xA5,0x45, 0xE9,0x01,0x85,0x45,0xC9,0x05,0xB0,0x11, 0x38,0x60,0x20,0x44,0xB9,0xB0,0x05,0x20, 0xDC,0xB8,0x90,0x1C,0xCE,0x78,0x05,0xD0, 0xF1,0x20,0x44,0xB9,0xB0,0x0B,0xA5,0x2D, 0xC9,0x0F,0xD0,0x05,0x20,0xDC,0xB8,0x90, 0x8C,0xCE,0x78,0x05,0xD0,0xEB,0x38,0x60, 0xA4,0x2D,0xB9,0xA8,0xBF,0x30,0xDD,0xA9, 0xFF,0x99,0xA8,0xBF,0xC6,0x3F,0x10,0xCA, 0xA5,0x44,0xD0,0x0A,0xA5,0x45,0xC9,0x10, 0x90,0xE5,0xC6,0x45,0xC6,0x45,0x18,0x60, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0D,0x0B,0x09,0x07,0x05,0x03,0x01, 0x0E,0x0C,0x0A,0x08,0x06,0x04,0x02,0x0F, 0x20,0x93,0xFE,0xAD,0x81,0xC0,0xAD,0x81, 0xC0,0xA9,0x00,0x8D,0x00,0xE0,0x20,0x76, 0xBA,0x4C,0x44,0xB7,0x8D,0x63,0xAA,0x8D, 0x70,0xAA,0x8D,0x71,0xAA,0x60,0x20,0x5B, 0xA7,0x8C,0xB7,0xAA,0x60,0x20,0x7E,0xAE, 0xAE,0x9B,0xB3,0x9A,0x20,0x16,0xA3,0xBA, 0x8E,0x9B,0xB3,0xA9,0x09,0x4C,0x85, };