'MOST SIGNIFICANT BITS ARE FIRST: DON'T USE PEEKW AND PEEKL 'BUGS '- IN RUNNING STATUS FILES: KEY IS ALWAYS 2 WHILE CONVERTING: NO KEY UP COMMANDS '- MAYBE ALL KEY-UP COMMANDS ARE BLOCKED, BUT ONLY THE CONVERTER REALLY NEEDS IT '- CONVERSION VELOCITIES ARE 0 TOO OFTEN ' - DATA GOES SOMETHING LIKE THIS ' - HANDLE DT=0 BETTER ' ' 'MERGE THE MIDI FILE READER,PLAYER, AND CONVERTER IN ONE PROGRAM FOR EASY DEVELOPMENT 'AFTER ASKING WHAT FILE TO LOAD, ASK WHAT TO DO: '- READ MIDI '- PLAY MIDI '- CONVERT AND SAVE TO LOCATION (ASK LOCATION) ' 'TO DO: '- WRITE PALETTE DATA INTO THE PALETTE PART OF THE SIMULATED RAM (SEE MEMORY MAP) ' - PUT THE DATA AS DATA IN CODE, FOR LOOP TROUGH IT, DO SOMETHING LIKE: READ X, POKE(A,X) '- MORE PLAYBACK OPTIONS AFTER CONVERSION ' - JUST ADD THE TRACK COUNTER, SO THAT YOU CAN SEE IF IT LINES UP ' - ADD AN INDEX ARRAY FOR THE CONVERTOR OUTPUT ARRAY: AT WHAT TIMES DO TRACKS START ' - CHANGE SETTINGS BEFORE PLAYBACK: TRANSPOSE, START TIME ' - MAYBE DO THIS WHILE PLAYING WITH THE KEYBOARD ' - SET PLAYBACK TIME ' - HIT R TO REPLAY THE SONG ' - HIT L TO REWRITE MUSIC DATA ' - SKIP TRACKS OR GO BACK (WITH N AND P) ' - MUSIC FILE TRACK PLAYING OPTIONS: ONE AFTER ANOTHER OR AT THE SAME TIME '- MORE MIDI PLAYBACK OPTIONS ' - SKIP TRACKS OR GO BACK (WITH N AND P) '- USE MORE MIDI INFORMATION: ' - PLAYBACK SPEED ' - MIDI INSTRUMENT (LIKE DRUMS) '- PLAY TRACKS PARALLEL (MELODY, BASS, DRUMS, ALL INSTRUMENTS ALL AT ONCE) '[DONE] MAKE A FILE IMPORTER: ' - [DONE] IMPORT LOCAL OR EXTERNAL FILES, SPECIFY THE FILE NUMBER 'TEST THE ALGORITHM ON MORE MIDI FILES '- (SOME ARE POLYPHONIC, SOME ARE MORE COMPLEX, MANY TRACKS) '[DONE] A MESSAGE WHEN THE FILE IS TOO BIG 'ADD A SCANNING OPTION FOR WHEN THE PROGRAM GETS AN INVALID STATUS BYTE (AND GETS LOST) ' - FIRST ASSUME IT'S MIDI: SKIP 2 BYTES NOPE, IT CAN BE ONE BYTE, JUST SCAN ' - IT'LL SCAN FOR BYTES WITH BIT 7 (MSB) TURNED ON, THIS EITHER MEANS: ' - FIRST PART OF A LONG TIME VALUE ' - OR IT MEANS: NEW STATUS BYTE FOUND, ASSUME THIS, ERROR?: ASSUME THE OTHER OPTION 'MAKE IT WORK WITH BIG FILES: ' - IDEA: MAKE A FUNCTION WHICH LOADS VALUES FROM RAM AND SWAPS OUT THE RAM IF NECCESARY ' - LOAD THE FIRST 16KB IN RAM ' - WHEN IT HAS REACHED THE END: LOAD THE SECOND 16KB ' - IT CAN BE UP TO 32KB: THE CONVERSION OUTPUT WILL BE IN ANOTHER DISK ' - USE BOTH THE INTERNAL AND THE EXTERNAL DISK TO GET 2 X 32KB FILE INPUT 'REPLACE ADDRESS VARIABLE I WITH A, I IS TOO COMMON 'MARIO FILE NOT WORKING: '- [NOPE] MAYBE IT HAS DETECTED A TOO SMALL LENGTH OF A META EVENT (LENGTH HAS VAR LEN QUANTITY) '- [NOPE] CHECK HEX EDITOR ASCII '- THE FILE MAY HAVE BEEN CORRUPTED, CHECK WITH ANOTHER MIDI PLAYER TOUCHSCREEN DIM GLOBAL TRACKD(31,2) DIM GLOBAL INDEX(31) DIM GLOBAL TA(1,16383) DIM GLOBAL PLAYING(1,3) DIM GLOBAL VIRTUAL_VOICE(3,31) 'TA: TRACK ATTRIBUTES 'WRITE MAIN PALETTES DATA 0,12,8,4,0,56,36,16,0,15,11,7,0,44,40,20,0,63,42,21,0,63,42,21,0,63,42,21,0,63,42,21 FOR I=0 TO 31 READ V POKE $FF00+I,V NEXT I 'WRITE MAIN CHARACTERS DATA "00000000000000000000000000000000" DATA "00181404040C100C00000C1C1C0C080C" DATA "004812121200000000247E3612000000" DATA "0024601B12401B1200001E3F363E3F12" DATA "000830271021170400000E1F1E1F1F04" DATA "00401132040C11230022753A142A5723" DATA "00102A021013001D000C1E3A7E773A1D" DATA "0010040C1800000000081C3C18000000" DATA "0008160C0800000600040E3C38180C06" DATA "0030000002060C180000180C0E1E3C18" DATA "00002012402708120000040A3E3F2C12" DATA "000018144027040C0000000C3E3F1C0C" DATA "0000000010040C1800000000081C3C18" DATA "00000000603F0000000000001E3F0000" DATA "000000000010040C0000000000081C0C" DATA "00040B060C1830200002071E3C787020" DATA "002058110119031E001C3E7F777F3F1E" DATA "001024040404403F00081C1C1C1C3E3F" DATA "00205833060C003F001C3E3F1E3C7E3F" DATA "002058330041031E001C3E3F06273F1E" DATA "00665501390101030000337F3F070703" DATA "00605F003801433E001E3F7C3E073F3E" DATA "00102E001811031E000C1E7C7E773F1E" DATA "00603903060C0818001E3F0F1E3C3818" DATA "002058031811031E001C3E3F7E773F1E" DATA "002058011941031E001C3E3F1F273F1E" DATA "000000100C100C00000000080C080C00" DATA "000000100C100C18000000080C083C18" DATA "000008160C0000060000040E3C180C06" DATA "000000603F403F000000001E3F3E3F00" DATA "0000300000060C18000000180C1E3C18" DATA "00205833060C100C001C3E3F1E0C080C" DATA "002058191117001E001C3E777F773C1E" DATA "001020180119113300081C7E7F7F7733" DATA "006058031811033E001C3E7F7E777F3E" DATA "002058131010031E001C3E7370763F1E" DATA "006050101113063C00183C76777F7E3C" DATA "00605F001C10003F001E3F787C707E3F" DATA "00605F001C101030001E3F787C707030" DATA "00205E1C1111031E001C3E7277773F1E" DATA "00665501191111330000337F7F777733" DATA "003006040404001E000C1E1C1C1C3C1E" DATA "001C09010141031E00020F0707273F1E" DATA "00645B06041010330002377E7C7C7633" DATA "006050101010003F0000307070707E3F" DATA "0042450901191133000023777F7F7733" DATA "00664501111111330000337F7F777733" DATA "002058111111031E001C3E7777773F1E" DATA "006058031E101030001C3E7F7E707030" DATA "002058111111001F001C3E777B7D3E1F" DATA "0060580306101033001C3E7F7E7C7633" DATA "00205F001801033E001E3F3C1E077F3E" DATA "007027040404040C000E3F1C1C1C1C0C" DATA "006655111111031E0000337777773F1E" DATA "006655111103060C00003377773F1E0C" DATA "00665515011931210000336B7F7F7321" DATA "00640B06001811330002371E3C7E7733" DATA "0066550B0604040C000033371E1C1C0C" DATA "006033060C58003F001E3F1E3C387E3F" DATA "00302E080808001E000C1E3838383C1E" DATA "0060000000000101000030180C060301" DATA "003812020202021E00041E0E0E0E3E1E" DATA "001020183300000000081C7E33000000" DATA "000000000000603F0000000000001E3F" FOR J=0 TO 63 READ V$ FOR I=0 TO 15 V1=ASC(MID$(V$,I*2+1,1))-48 V2=ASC(MID$(V$,I*2+2,2))-48 V1=V1+7*(V1>9) V2=V2+7*(V2>9) V=V1*16+V2 TRACE V POKE $8000+I+J*16,V NEXT I NEXT J FONT 0 GLOBAL TYPE,S,V,V0,V1,V2,V3,F,F1,I,CSIZE,TN,TRACKS,TIME,STATUS,KEY,RECENT80,PITCH,VELOCITY,FILE_PART,ADDR_END,CHANNEL_MODE,K$,O$,OPERATION,DIV,TIME_UNIT I=$A000 TYPE=0 CSIZE=0 TN=0 DT=0 TIME=0 KEY=0 STATUS=0 RECENT80=0 TIME_UNIT=10000 FILE_PART=0 CHANNEL_MODE=0 OPERATION=-1 ROT=0 'S E T U P : U S E R I N P U T PRINT "DISK:" PRINT "LOCAL(L)/EXTERNAL(E)/BOTH(B)" KEYBOARD ON REPEAT 'K$=INKEY$ K$="L" IF K$="L" OR K$="E" OR K$="B" THEN PRINT K$ WAIT 1 UNTIL K$="L" OR K$="E" OR K$="B" PRINT "" 'INPUT "FILE NUMBER (1-15) ";F F=4 PRINT "" PRINT "OPERATION:" PRINT "READ(R)/PLAY(P)" PRINT "/CONVERT(C)/PLAY" PRINT "TRACKS MONO(M)" DO 'O$=INKEY$ O$="P" IF O$="R" OR O$="P" OR O$="C" OR O$="M" THEN PRINT O$ EXIT END IF WAIT 1 LOOP IF O$="C" THEN PRINT "" INPUT "OUTPUT FILE (1-15) ";F1 END IF KEYBOARD OFF CLW 'B A S I C F I L E I N F O A N D H E A D E R PAL 3 PRINT "MIDI FILE LOADED" PRINT "DISK: "; IF K$="L" THEN PRINT "LOCAL "; S=SIZE(F) IF S>$4000 THEN S=$4000 COPY ROM(F),S TO $A000 ELSE IF K$="E" THEN PRINT "EXTERNAL "; FILES S=FSIZE(F) 'REMOVE THIS SOON!!!!! - I FORGOT :( 'IF S>$4000 THEN S=$4000 LOAD F,$A000,$4000 ELSE IF K$="B" THEN PRINT "EXT+LOCAL "; FILES S=FSIZE(F) LOAD F,$A000,$4000 END IF PRINT F ADDR_END=$A000+S PRINT "SIZE:",S PRINT "" PAL 0 'PRINT HEX$(S) 'PRINT HEX$(ADDR_END) 'HEADER TYPE ASC CODES 4D546864 'PRINT $6468544D=PEEKL($A000)+63 'RETURNS TRUE -> SIX BITS GET LOST 'THESE FLOAT VARIABLES CAN'T STORE 32-BIT VALUES, THEY PROBABLY HAVE A 6-BIT EXPONENT 'DO 'WAIT 60 'LOOP 'R E A D H E A D E R PRINT "FORMAT:",256*PEEK($A008)+PEEK($A009) PRINT "TRACKS:",256*PEEK($A00A)+PEEK($A00B) D=256*PEEK($A00C)+PEEK($A00D) D1=D\2^15 D2=D MOD 2^15 IF D1=0 THEN PRINT "DIVISION:",D2 PRINT "TICKS/QUARTER NOTE" DIV=D2\24 ELSE IF D1=1 THEN PRINT "DIVISION:",D2\2^8,D2 MOD 2^8 PRINT "F/S AND TICKS/F" END IF PRINT "" CALL TAP_TO_CONTINUE 'I N D E X T H E F I L E REPEAT 'V=PEEK(I) 'V1=PEEK(I+1) 'V2=PEEK(I+2) 'V3=PEEK(I+3) CALL RAM_PEEK4(I) CALL DETERMINE_TYPE WAIT 1 UNTIL I=ADDR_END INDEX(TN)=ADDR_END TRACKS=TN-1 PRINT "" 'D E T E R M I N E B L O C K T Y P E SUB DETERMINE_TYPE IF V0=77 AND V1=84 THEN IF V2=104 AND V3=100 THEN TYPE=1 PRINT "HEADER: SIZE="; ADD I,4 CALL DETERMINE_SIZE ELSE IF V2=114 AND V3=107 THEN TYPE=2 PRINT "TRACK: SIZE="; INDEX(TN)=I INC TN ADD I,4 CALL DETERMINE_SIZE END IF ELSE I=ADDR_END END IF END SUB 'D E T E R M I N E B L O C K S I Z E SUB DETERMINE_SIZE 'THESE FLOAT VARIABLES CAN'T STORE 32-BIT VALUES 'BUT THE SIZE CAN'T BE 2^32-1, IT WON'T FIT IN NX, SO IT'S FINE 'MSB FIRST, SWAP THAT 'CSIZE=2^24*PEEK(I)+2^16*PEEK(I+1)+2^8*PEEK(I+2)+PEEK(I+3) CALL RAM_PEEK4(I) CSIZE=2^24*V0+2^16*V1+2^8*V2+V3 ADD I,4 PRINT CSIZE 'SKIP_CHUNK I=I+CSIZE END SUB CALL TAP_TO_CONTINUE 'DISPLAY STORED INDEX VALUES PRINT "INDEX:" FOR I=0 TO 15 V=INDEX(I) IF V<>0 THEN PRINT HEX$(V),""; NEXT I PRINT "" PRINT "" CALL TAP_TO_CONTINUE 'T A P T O C O N T I N U E SUB TAP_TO_CONTINUE PAL 2 PRINT "TAP TO CONTINUE" PAL 0 'WHILE NOT TAP 'WAIT VBL 'WEND FOR J=0 TO 16 PRINT "" NEXT J CLW END SUB 'R E A D M I D I IF O$="R" THEN TIME=0 FOR J=0 TO TRACKS PAL 2 PRINT "===================" PRINT "===== TRACK",J,"=====" PRINT "===================" PRINT HEX$(INDEX(J)+8) PRINT "" PAL 0 'BUG MEMORIAL: FORGOT TO OFFSET THE INDEX VALUES FOR I=INDEX(J)+8 TO INDEX(J+1)-1 'TRACE " "+HEX$(I) 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V 'DT2=DT/TIME_UNIT PRINT "DT=",V CALL STATUS(I,J,ROT) 'TRACE HEX$(I-$A000) PVELOCITY=VELOCITY PPITCH=PITCH WAIT 1 WHILE NOT TAP WAIT 1 WEND PRINT "" NEXT I NEXT J STOP PAL 2 PRINT "" PRINT "===================" PRINT "=== END OF SONG ===" PRINT "===================" PAL 0 'P L A Y M I D I S I N G L E T R A C K ELSE IF O$="M" THEN O$="P" TIME=0 FOR J=0 TO TRACKS 'TRACE "TRACK",HEX$(I-$A000) FOR I=INDEX(J)+8 TO INDEX(J+1)-1 'TRACE "START",HEX$(I-$A000) 'TRACE " "+HEX$(I) 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V 'DT2=DT/TIME_UNIT DT3=DT\DIV PRINT "DT=",DT IF DT3>0 THEN WAIT DT3 CLW 'TRACE "TIME ",HEX$(I-$A000) CALL STATUS(I,J,ROT) 'TRACE HEX$(I-$A000) PVELOCITY=VELOCITY PPITCH=PITCH 'TRACE "END ",HEX$(I-$A000) NEXT I NEXT J STOP PAL 2 PRINT "" PRINT "===================" PRINT "=== END OF SONG ===" PRINT "===================" PAL 0 'P L A Y M I D I M U L T I T R A C K 'MULTITRACKPLAYER: ELSE IF O$="P" THEN 'O$="P" 'BUG MEMORIAL: FORGOT TO OFFSET THE INDEX VALUES (AGAIN): FIRST 8 BYTES AREN'T MIDI 'FILL ARRAY WITH FIRST DT AND ADDR OF EACH TRACK 'FIND LOWEST VALUE OF ARRAY, LOAD ITS PARAMETERS, AND ACT AS IF THERE WAS ONE TRACK 'AFTERWARDS, WRITE THE NEW VALUES TO THE ARRAY T_ZERO=TIMER FOR J=0 TO TRACKS I=INDEX(J)+8 CALL VAR_LEN_QUANTITY 'TRACE V,J,HEX$(I-$A000) DT=V DT3=DT\DIV 'DT3=0 ADD TRACKD(J,2),DT TRACKD(J,0)=TIMER-(DT3>=0)*DT3 TRACKD(J,1)=I 'TRACE J,HEX$(I-$A000),TIMER-(DT3>0)*DT3 NEXT J 'WAIT 60000 TIME=0 'FOR J=0 TO TRACKS J=0 'DO 'FOR I=INDEX(J)+8 TO INDEX(J+1)-1 I=INDEX(J)+8 'IF TRACKD(0,0)=-1 THEN TRACE TRACKD(0,0) 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V DT3=DT\DIV ADD TRACKD(J,2),DT TRACKD(J,0)=TIMER-(DT3>0)*DT3 TRACKD(J,1)=I PRINT "DT=",V LOCATE 0,11 PRINT "V PI VE TRACK" LOCATE 0,0 'REPEAT DO 'TRACE " "+HEX$(I) 'TRACE "START",J,HEX$(I-$A000) SOONEST=-1 'IF TRACKD(0,0)<>-1 THEN TRACE "T0",TRACKD(0,0)-TIMER MIDI_TIMER=TIMER*DIV 'FIND THE LOWEST NUMBER, I COULD USE THE "MIN" FUNCTION FOR I=0 TO TRACKS IF (SOONEST<0 OR TRACKD(I,0)0 THEN 'IF (SOONEST<0 OR TRACKD(I,2)0 THEN 'NEW TIME VALUE SOONEST=T_ZERO+TRACKD(I,2)\DIV J=I 'TRACE TRACKD(I,0),T_ZERO+TRACKD(I,2)\DIV 'OLD TIME VALUE 'SOONEST=TRACKD(I,0) 'JUST PLAY'S TRACK 1 FOR SOME REASON 'SOONEST=TRACKD(I,2) END IF 'TRACE I,J,SOONEST-TIMER,TRACKD(I,0)-TIMER NEXT I IF SOONEST=-1 THEN EXIT 'IF J=0 THEN TRACE "J=0",TIMER,I,TRACKD(0,0) 'TRACE J,SOONEST-TIMER 'WAIT 60 'TRACE J I=TRACKD(J,1) 'OLD TIME GENERATOR: EVERYTHING HAS BEEN ROUNDED BADLY BEFORE 'TI=TRACKD(J,0)-TIMER 'NEW TIME GENERATOR: IT'S SHARP AND ACCURATE TI=TRACKD(J,2)\DIV+T_ZERO-TIMER 'TRACE TRACKD(J,0)-TIMER,TRACKD(J,2)\DIV+T_ZERO-TIMER IF TI>0 THEN WAIT TI BG FILL 0,0 TO 19,7 CHAR 192 BG TINT 0,12 TO 19,15 PAL 0 LOCATE 0,0 'CLW 'TRACE "LOAD ",J,HEX$(I-$A000) PRINT "TRACK:",J CALL STATUS(I,J,ROT) 'TRACE "DONE ",J,HEX$(I-$A000) 'TRACE HEX$(I-$A000) PVELOCITY=VELOCITY PPITCH=PITCH INC I 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V DT3=DT\DIV ADD TRACKD(J,2),DT TRACKD(J,0)=TIMER-(DT3>0)*DT3 TRACKD(J,1)=I PRINT "DT=",V IF I>=INDEX(J+1)-1 THEN TRACKD(J,0)=-1 'IF TRACKD(0,0)=-1 THEN TRACE TRACKD(0,0) 'TRACE "SAVE ",J,HEX$(I-$A000) LOOP 'UNTIL I>=INDEX(J+1)-1 'NEXT I 'LOOP 'NEXT J STOP PAL 2 PRINT "" PRINT "===================" PRINT "=== END OF SONG ===" PRINT "===================" PAL 0 'C O N V E R T M I D I ELSE IF O$="C" THEN PRINT "PLEASE WAIT" PRINT "FINDING SMALLEST DT" FOR OPERATION=0 TO 1 TIME=0 FOR J=0 TO TRACKS FOR I=INDEX(J)+8 TO INDEX(J+1)-1 'TRACE " "+HEX$(I) 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V DT2=DT/TIME_UNIT IF OPERATION=0 AND V>0 THEN TIME_UNIT=MIN(TIME_UNIT,V) CALL STATUS(I,J,ROT) 'TRACE HEX$(I-$A000) 'IT NEEDS TO KEEP WRITING NOTES WHILE IT'S DOING CONTROLLER THINGS IF OPERATION=1 THEN IF NOT(STATUS>$7F AND STATUS<$A0) THEN FOR A=0 TO DT2-1 IF A+TIME<16384 THEN TA(0,A+TIME)=PPITCH TA(1,A+TIME)=PVELOCITY ELSE IF CURSOR.Y>3 THEN CLW LOCATE 0,0 PAL 1 PRINT TIME PRINT "CONVERTOR" PRINT "OUT OF MEMORY" PAL 0 END IF NEXT A END IF ADD TIME,DT2 END IF PVELOCITY=VELOCITY PPITCH=PITCH NEXT I NEXT J IF OPERATION=0 THEN PRINT "SMALLEST DT=",TIME_UNIT PRINT "CONVERTING..." PAL 2 INPUT "PRECISION 1,2,4,8...";PRECISION KEYBOARD OFF PAL 0 TIME_UNIT=TIME_UNIT*PRECISION END IF NEXT OPERATION 'E N C O D E T O N X STOP PRINT "ENCODING NX MUSIC..." 'WRITE TRACK DATA IN NX FORMAT 'TRACKS (6144 BYTES) FILL $A000,$4000 COPY ROM(14),SIZE(14) TO $A000 ADDR=$A180 FOR J=0 TO 63 FOR I=0 TO 31 K=I+32*J CALL SAVEDATA(ADDR,TA(0,K),0) INC ADDR CALL SAVEDATA(ADDR,TA(1,K),0) 'CALL SAVEDATA(ADDR,TSYNTH(J),4) INC ADDR 'CALL SAVEDATA(ADDR,TA(2,K),0) 'CALL SAVEDATA(ADDR,TA(3,K),4) INC ADDR NEXT I NEXT J SAVE 15,"MUSIC",$A000,ADDR-$A000 FILL $A000,$4000 PRINT "DONE" WAIT 1 'PLAY SONG FROM ARRAY CLW LOCATE 0,0 PRINT "TIME" LOCATE 5,0 PRINT "PIT" LOCATE 9,0 PRINT "VOL" 'PLAY FOR I=0 TO TIME LOCATE 0,1 PRINT " " LOCATE 0,1 IF I>2047 THEN PAL 1 PRINT I PAL 0 LOCATE 5,1 PRINT TA(0,I) LOCATE 9,1 PRINT TA(1,I) VOLUME 0,TA(1,I), PITCH=TA(0,I)-24 IF PITCH>0 AND PITCH<97 THEN 'OCT -2 PLAY 0,PITCH PRINT " " ELSE IF PITCH<1 THEN PLAY 0,PITCH MOD 12 PAL 1 PRINT "PITCH TOO LOW" PAL 0 ELSE PLAY 0,84+PITCH MOD 12 PAL 1 PRINT "PITCH TOO HIGH" PAL 0 END IF WAIT 4 '+PRECISION NEXT I CLW PAL 2 PRINT "===================" PRINT "=== END OF SONG ===" PRINT "===================" PAL 0 END IF 'S U B P R O G R A M S 'S T A T U S I N T E R P R E T E R SUB STATUS(I,TRACKN,ROT) 'INTERPRET THE STATUS BYTE: '- 00 TO 7F: NOT A STATUS CODE -> RUNNING STATUS (CONTINUE WITH PREVIOUS STATUS) '- 80 TO EF: MIDI STATUS CODE -> NEXT IS PITCH -> NEXT IS VELOCITY ' - 9N: KEY DOWN ' - 8N: KEY UP ' N=MIDI CHANNEL NUMBER (0 TO 15) '- F0=SYSEX 1 -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING '- F7=SYSEX 2 -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING '- FF=META -> NEXT IS META-CODE -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING CALL RAM_PEEK(I) 'TRACE "STATS",HEX$(I-$A000) 'WAIT 30 IF V\128=1 THEN STATUS=V INC I IF O$="P" THEN PRINT "" ELSE IF O$<>"C" THEN PRINT "RUNNING STATUS" END IF 'IF V>=$80 AND V<=$89 THEN TRACE "V1" 'IF STATUS>=$80 AND STATUS<=$89 THEN TRACE "K1" IF O$<>"C" THEN PAL 3 PRINT "STATUS:",HEX$(STATUS),""; END IF 'TRACE "SLOAD",HEX$(I-$A000) 'I N T E R P R E T E R IF STATUS>$7F AND STATUS<$F0 THEN 'TRACE "S",HEX$(I-$A000) 'MIDI 'TRACKM=STATUS AND 16 'TRACKM=STATUS AND 15 TRACKM=STATUS MOD 16 IF O$<>"C" THEN PRINT "MIDI" IF STATUS<$A0 THEN IF STATUS<$90 THEN IF O$<>"C" THEN PRINT "KEY UP" KEY=1 RECENT80=1 DT2=INT(DT2+0.5) ELSE IF STATUS<$A0 THEN IF O$<>"C" THEN PRINT "KEY DOWN" KEY=2 DT2=INT(DT2+0.49) END IF CALL RAM_PEEK(I) IF O$<>"C" THEN PAL 0 PRINT "PITCH=",V,""; END IF 'ROUTE NOT TAKEN AT PROBLEM 'TRACE 2,HEX$(I-$A000) 'MIDI PITCH STARTS AT 0, IT HAS TO BE TRANSPOSED +1 PITCH=V+1 INC I CALL RAM_PEEK(I) IF O$<>"C" THEN PRINT "VEL=",V VELOCITY=V\8 IF O$="P" THEN 'VOLUME 0,VELOCITY, IF KEY=2 THEN CALL KEYDOWN(ROT,TRACKN,TRACKM,PITCH,VELOCITY) ELSE IF KEY=1 THEN CALL KEYUP(TRACKN,TRACKM,PITCH) END IF 'TRACE 3,HEX$(I-$A000) ELSE IF O$="C" AND OPERATION=1 THEN 'TRACE HEX$(I),TIME,VELOCITY,-(KEY=1 OR KEY=2 AND RECENT80=0) IF KEY=2 AND RECENT80=1 THEN RECENT80=0 END IF IF KEY=1 OR (KEY=2 AND RECENT80=0) THEN FOR A=0 TO DT2-1 IF A+TIME<16384 THEN TA(0,A+TIME)=PPITCH TA(1,A+TIME)=PVELOCITY ELSE IF CURSOR.Y>3 THEN CLW LOCATE 0,0 PAL 1 PRINT TIME PRINT "CONVERTOR" PRINT "OUT OF MEMORY" PAL 0 END IF 'TRACE A+TIME NEXT A END IF END IF ELSE IF STATUS<$B0 THEN 'TRACE "A",HEX$(I-$A000) 'A0-AF IF O$<>"C" THEN PRINT "AFTERTOUCH" PAL 0 CALL RAM_PEEK(I) PRINT "KEY=",V,""; LOCATE 0,12+VOI PAL 2 PRINT VOI,PITCH,VELOCITY," " LOCATE 0,5 PAL 0 END IF INC I CALL RAM_PEEK(I) IF O$<>"C" THEN PRINT "PRESS=",V ELSE IF STATUS<$C0 THEN 'TRACE "B",HEX$(I-$A000) 'B0-BF CALL RAM_PEEK(I) CTRL=V IF O$<>"C" THEN PAL 0 PRINT "CONTR=",HEX$(V),""; END IF INC I CALL RAM_PEEK(I) IF O$<>"C" THEN PRINT "VAL=",V IF CTRL=$7E THEN CHANNEL_MODE=0 STOP ELSE IF CTRL=$7F THEN CHANNEL_MODE=1 STOP END IF ELSE IF STATUS<$E0 THEN 'TRACE "CD",HEX$(I-$A000) 'C0-DF IF O$<>"C" THEN PAL 0 CALL RAM_PEEK(I) PRINT "VAL=",V END IF ELSE 'TRACE "E",HEX$(I-$A000) 'V0=PEEK(I) CALL RAM_PEEK(I) V0=V INC I CALL RAM_PEEK(I) V0=V0+256*V IF O$<>"C" THEN PAL 0 PRINT "VAL=",V END IF END IF ELSE IF STATUS>$EF THEN 'TRACE "F",HEX$(I-$A000) IF STATUS=$F0 THEN 'SYSEX 1 IF O$<>"C" THEN PRINT "SYSEX 1" PAL 0 END IF CALL VAR_LEN_QUANTITY IF O$<>"C" THEN PRINT "LENGTH= ",V LENGTH=V ADD I,V-1 ELSE IF STATUS=$F7 THEN 'TRACE "F7",HEX$(I-$A000) 'SYSEX 2 IF O$<>"C" THEN PRINT "SYSEX 2" PAL 0 END IF CALL VAR_LEN_QUANTITY IF O$<>"C" THEN PRINT "LENGTH= ",V LENGTH=V ADD I,V-1 ELSE IF STATUS=$FF THEN 'TRACE "FF",HEX$(I-$A000) 'META IF O$<>"C" THEN PRINT "META" PAL 0 END IF 'V=PEEK(I) CALL RAM_PEEK(I) IF O$<>"C" THEN PRINT "META CODE=",HEX$(V) IF V=$2F THEN PAL 1 PRINT "END OF TRACK" PAL 0 END IF END IF INC I CALL VAR_LEN_QUANTITY IF O$<>"C" THEN PRINT "LENGTH= ",V LENGTH=V 'TRACE V ADD I,V-1 'TRACE "F0",HEX$(I-$A000) END IF ELSE 'TRACE "R",HEX$(I-$A000) IF O$<>"C" THEN PAL 1 PRINT "RUNNING STATUS" PAL 0 END IF END IF 'TRACE 4,HEX$(I-$A000) CALL VOICESELECT(ROT,TRACKN,PITCH,VELOCITY) END SUB 'K E Y D O W N 2 ( C O N C E P T ) SUB KEYDOWN2(ROT,TRACKN,TRACKM,PITCH,VELOCITY) 'REUSE VIRTUAL VOICES T=0 FOR X=0 TO 31 VAR=VIRTUAL_VOICE(1,X) IF VAR=PITCH OR VAR=0 THEN T=X EXIT END IF NEXT X 'WRITE SOUND TO VIRTUAL VOICE VIRTUAL_VOICE(0,T)=TRACKN*16+TRACKM VIRTUAL_VOICE(1,T)=PITCH VIRTUAL_VOICE(2,T)=VELOCITY VIRTUAL_VOICE(3,T)=TIMER 'FIND OLDEST TRACK ON VOICE OLDEST=0 VOI=0 FOR X=0 TO 3 IF PLAYING(1,X)>OLDEST THEN OLDEST=PLAYING(1,X) VOI=X END IF NEXT X PLAYING(0,VOI)=VIRTUAL_VOICE(0,T) PLAYING(1,VOI)=VIRTUAL_VOICE(1,T) OFFSET=0 CALL PLAYSOUND(VOI,PITCH,VELOCITY,OFFSET) END SUB SUB PLAYSOUND(VOI,PITCH,VELOCITY,OFFSET) VOLUME VOI,VELOCITY, PLAY VOI,PITCH-24 END SUB SUB VOICESELECT(ROT,TRACKN,PITCH,VELOCITY) END SUB SUB KEYDOWN(ROT,TRACKN,TRACKM,PITCH,VELOCITY) 'CALL KEYDOWN2(ROT,TRACKN,TRACKM,PITCH,VELOCITY) 'EXIT SUB TRA=TRACKN*16+TRACKM VOI=ROT 'VOI=-1 'FIND AVAILABLE VOICES FOR X=0 TO 3 IF X<>ROT THEN 'OR PLAYING(1,X)=TRA IF PLAYING(0,X)=PITCH OR PLAYING(0,X)=0 THEN VOI=X EXIT END IF END IF NEXT X 'IF VOI=-1 THEN EXIT SUB IF VOI=ROT THEN ADD ROT,1,0 TO 3 'OVERWRITE VOICE IF THE SAME KEY IS ALREADY PRESSED (SAME PITCH) 'TRACE VOI,PITCH,PLAYING(0),PLAYING(1),PLAYING(2),PLAYING(3) PLAYING(0,VOI)=PITCH PLAYING(1,VOI)=TRA 'STOP SOUND IF VELOCITY=0 THEN 'TRACE "STOP",VOI PLAYING(0,VOI)=0 STOP VOI LOCATE 0,12+VOI PAL 1 'PRINT VOI,PITCH,0," " PRINT VOI," " LOCATE 0,5 PAL 0 ELSE LOCATE 0,12+VOI PAL 3 PRINT VOI,PITCH,VELOCITY," "; LOCATE 9,12+VOI PRINT TRACKN,TRACKM," " LOCATE 0,5 PAL 0 END IF 'VELOCITY VELOCITY=-VELOCITY*(VELOCITY>=0 AND VELOCITY<=15)-15*(VELOCITY>15) VOLUME VOI,VELOCITY, 'TWO OCTAVES DOWN ADD PITCH,-24 'OCT -2 'PLAY OR CLIP IF PITCH>0 AND PITCH<97 THEN PLAY VOI,PITCH ELSE IF PITCH<1 THEN PLAY VOI,PITCH AND 12 PRINT "PITCH TOO LOW" ELSE PLAY VOI,84+PITCH AND 12 PRINT "PITCH TOO HIGH" END IF END SUB SUB KEYUP(TRACKN,TRACKM,PITCH) FOR X=0 TO 3 IF PITCH=PLAYING(0,X) THEN STOP X PLAYING(0,X)=0 'TRACE "STOP",X LOCATE 0,12+X PAL 1 'PRINT X,PITCH,0," " PRINT X," " LOCATE 0,5 PAL 0 END IF NEXT X END SUB 'V A R I A B L E L E N G T H Q U A N T I T Y SUB VAR_LEN_QUANTITY V0=0 REPEAT V0=V0*128 CALL RAM_PEEK(I) 'PRINT " ",HEX$(V) ADD V0,V MOD 128 'PRINT " ",HEX$(V0) INC I UNTIL V\128=0 V=V0 END SUB SUB NEW_VAR_LEN_QUANTITY(I,V) V0=0 V=0 REPEAT V0=V0*128 CALL RAM_PEEK(I) 'PRINT " ",HEX$(V) ADD V0,V MOD 128 'PRINT " ",HEX$(V0) INC I UNTIL V\128=0 V=V0 END SUB 'THIS FUNCTION SIMULATES A 64KB RAM: 'IF THE ADDRESS IS OUT OF RANGE IT'LL CHANGE THE DATA BLOCK 'CALL RAM_PEEK(I) WILL BE USED INSTEAD OF PEEK(I) 'R A M P E E K SUB RAM_PEEK(A) 'TRACE HEX$(A-$A000) IF (A-$A000)\$4000 = FILE_PART THEN V=PEEK(A-FILE_PART*$4000) ELSE 'TRACE "SWITCH",FILE_PART FILE_PART=(A-$A000)\$4000 OFFSET=$4000*(FILE_PART MOD 2) IF K$<>"B" AND FILE_PART>1 THEN IF OPERATION<>-1 THEN PAL 1 PRINT "" PRINT "OUT OF DATA" PAL 0 END IF ELSE IF K$="L" OR K$="B" AND FILE_PART\2=1 THEN COPY ROM(F)+OFFSET,-(FILE_PART=1)*(S-$4000)-(FILE_PART=0)*$4000 TO $A000 ELSE IF K$="E" OR K$="B" AND FILE_PART\2=0 THEN LOAD F,$A000,$4000,OFFSET END IF V=PEEK(A-FILE_PART*$4000) 'TRACE "SWITCHED",FILE_PART END IF END IF END SUB 'R A M P E E K F O U R SUB RAM_PEEK4(A) CALL RAM_PEEK(A) V0=V CALL RAM_PEEK(A+1) V1=V CALL RAM_PEEK(A+2) V2=V CALL RAM_PEEK(A+3) V3=V END SUB 'S A V E SUB SAVEDATA(ADDR,V,OFFSET) 'BITSHIFT POKE ADDR,PEEK(ADDR)+INT(V*2^OFFSET)MOD 256 END SUB 'T R A S H SUB NOT_IN_USE WHILE 0 'V=PEEK(I) CALL RAM_PEEK(I) PRINT HEX$(V) WHILE NOT TAP WAIT 1 WEND INC I WAIT 1 WEND END SUB #4:MIDI DUCKTALES THE MOON 4D546864000000060001000A00784D54 726B0000005300FF58040402180800FF 5902000000FF510304F2E400FF063644 75636B74616C6573203A204D6F6F6E20 5374616765205B474D5D205365717565 6E636564206279202D4D61726B204A61 6E73656E2D00FF2F004D54726B000006 A100FF21010000FF03094368616E6E65 6C203100B0000000B0200000C05100B0 077200B00A3600B0640000650000060C 874090496400B0074103074603074B04 075103075603075C0407610307670307 6C040772815201148170010A78904900 004E6400B0010078904E000050647850 00005364785300005364817053000052 643C52000052648134B0011478010978 90520000506400B0010078905000004E 64784E0000556482685500004E648268 4E00005A648171B00113835F01008170 905A00005C64785C00005A643C5A0000 6164822CB0011381700118836001095A 9061008116466400B001000301003990 46000047643C47000049643C49000049 6481344900004E64784E00004D64784D 00004E64784E00005064785000005264 3C5200004E648170B001138324904E00 004D6400B001003C904D00004E643C4E 0000556481345500004E643C4E00004E 6484584E00004E643C4E00004E643C4E 00004E64822C4E000050643C5000004E 643C4E00004D648134B0011381700109 78904D0000466400B00100822C904600 0044643C44000042643C420000496482 2C4900004E64784E0000506478500000 5364813453000052643C520000526479 B00113817001097790520000556401B0 0100779055000053647853000052643C 52000053643C53000052643C5200004E 64784E00004964817049000050643C50 00004E643C4E00004D643C4D00004B64 3C4B00004D6481344D00004E645A4E00 5A4E645A4E005A4E64784E00003B6400 E000400A00410600420700430700440A 00450600460700470700480A00490600 4A07004B07004C0A004D06004E07004F 0700500A00510600520700530700540A 00550600560700570700580A00590600 5A07005B07005C0A005D06005E07005F 0700600A00610600620700630700640A 00650600660700670700680A00690600 6A07006B07006C0A006D06006E07006F 0700700A00710600720700730700740A 00750600760700770700780A00790600 7A07007B07007C0A007D06007E07007F 04903B0001E0004002904E643C4E0000 4E643C4E007850643C50000050643C50 003C4C6481704C00004964784900004C 643C4C000047642D47000048640F4800 0047640F47000045642D450000476478 47000045643C45000047643C47003C45 643C45003C4964841C4900004E643C4E 00004E643C4E007850643C5000005064 3C50003C5164785100004C64784C0000 4C64784C00004C643C4C000051643C51 00005364832453000051643C51000055 64836055000055503C55000055648550 550000326478320000346478340000B0 0109817090466400B001000301003990 46000047643C47000049643C49000049 6481344900004E64784E00004D64784D 00004E64784E00005064785000005264 3C5200004E648170B001138324904E00 004D6400B001003C904D00004E643C4E 0000556481345500004E643C4E00004E 6484584E00004E643C4E00004E643C4E 00004E64822C4E000050643C5000004E 643C4E00004D648134B0011381700109 78904D0000466400B00100822C904600 0044643C44000042643C420000496482 2C4900004E64784E0000506478500000 5364813453000052643C520000526479 B00113817001097790520000556401B0 0100779055000053647853000052643C 52000053643C53000052643C5200004E 64784E00004964817049000050643C50 00004E643C4E00004D643C4D00004B64 3C4B00004D6481344D00004E645A4E00 5A4E645A4E005A4E64784E00003B6400 E000400A00410600420700430700440A 00450600460700470700480A00490600 4A07004B07004C0A004D06004E07004F 0700500A00510600520700530700540A 00550600560700570700580A00590600 5A07005B07005C0A005D06005E07005F 0700600A00610600620700630700640A 00650600660700670700680A00690600 6A07006B07006C0A006D06006E07006F 0700700A00710600720700730700740A 00750600760700770700780A00790600 7A07007B07007C0A007D06007E07007F 04903B0001E0004002904E643C4E0000 4E643C4E007850643C50000050643C50 003C4C6481704C00004964784900004C 643C4C000047642D47000048640F4800 0047640F47000045642D450000476478 47000045643C45000047643C47003C45 643C45003C4964841C4900004E643C4E 00004E643C4E007850643C5000005064 3C50003C5164785100004C64784C0000 4C64784C00004C643C4C000051643C51 00005364832453000051643C51000055 64836055000055503C55000055648550 550000326478320000346478340000FF 2F004D54726B00000AA400FF21010000 FF03094368616E6E656C203200B10000 00B1200000C10100B1077800B10A5400 915A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F51642D51000F56642D 56000F5C642D5C000F53642D53000F5C 642D5C000F5F642D5F000F5E642D5E00 0F5A642D5A000F55642D55000F53642D 53000F52642D52000F4E642D4E000F49 642D49000F47642D47000F46642D4600 0F45643C45000045643C45007847643C 47000047643C47003C45647845000050 642D50000F51642D51000F58642D5800 4B5C642D5C000F5D642D5D000F64642D 64000F3E64783E00003E643C3E00003E 643C3E003C3E643C3E003C4164836041 003C4A643C4A00004A643C4A00784764 3C47000047643C47003C496478490000 49647849000049647849000049643C49 00004C643C4C00004E6483244E00004E 64784E00004D64822C4D643C4D00004D 00004D643C4D00004E643C4E00005A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F51642D51000F56642D56000F 5C642D5C000F53642D53000F5C642D5C 000F5F642D5F000F5E642D5E000F5A64 2D5A000F55642D55000F53642D53000F 52642D52000F4E642D4E000F49642D49 000F47642D47000F46642D46000F4564 3C45000045643C45007847643C470000 47643C47003C45647845000050642D50 000F51642D51000F58642D58004B5C64 2D5C000F5D642D5D000F64642D64000F 3E64783E00003E643C3E00003E643C3E 003C3E643C3E003C4164836041003C4A 643C4A00004A643C4A007847643C4700 0047643C47003C496478490000496478 49000049647849000049643C4900004C 643C4C00004E6483244E00004E64784E 00004D64822C4D643C4D00004D00004D 643C4D00004E643C4E00005A642D5A00 0F4E642D4E000F55642D55000F5A642D 5A000F5C642D5C000F55642D55000F5A 642D5A000F5C642D5C000F5F642D5F00 0F55642D55000F5F642D5F000F5E642D 5E000F55642D55000F5E642D5E000F5C 642D5C000F5A642D5A0000FF2F004D54 726B0000097B00FF21010000FF030943 68616E6E656C203300B2000000B22000 00C22000B2077300B20A408740922A64 81342A00003164813431000036648458 360000286481342800002F6481342F00 0034648458340000276481342700002E 6481342E000033648458330000266481 342600002D6481342D00003264845832 000036643C3600003664783600003664 3C36000036643C36000036643C360000 36643C36000036647836000036643C36 000036643C36000036643C3600003664 3C36000036643C36000036643C360000 36643C36000036643C36000036643C36 000036643C36000036643C3600003664 3C36000036643C36000036643C360000 36643C36000035643C35000035643C35 000035643C35000035643C3500003564 3C35000035643C350000356478350000 33643C33000033643C33000033647833 000033643C33000033643C3300003364 3C33000033643C33000031643C310000 31643C31000031643C31000031643C31 000031643C31000031643C3100003164 3C31000031643C3100002F643C2F0000 2F643C2F00002F643C2F00002F643C2F 00002F643C2F00002F643C2F00002F64 3C2F00002F643C2F000030643C300000 30643C30000030643C30000030643C30 000030643C30000030643C3000003064 3C30000030643C30000031643C310000 31643C31000031643C31000031643C31 000031643C31000031643C3100003164 3C31000031643C31000031643C310000 31643C31000031643C31000031643C31 000031643C31000031643C3100003164 3C31000031643C310000366478360000 36643C36000036643C36000036643C36 000036643C36000036643C3600003664 3C36000034643C34000034643C340000 34643C34000034643C34000034643C34 000034643C34000034643C3400003464 3C34000033643C33000033643C330000 33643C33000033643C33000033643C33 000033643C33000033643C3300003364 3C33000032643C32000032643C320000 32643C32000032643C32000032648134 32000032643C32000031643C31000031 643C31000031643C31000031643C3100 0031643C31000031643C31000031643C 31000031643C31000030643C30000030 643C30000030643C30000030643C3000 0031643C31000031643C31000031643C 31000031643C31000032645A32005A34 645A34005A366481343600002A643C2A 00002A643C2A00002A643C2A00002A64 3C2A00002A643C2A00002A643C2A0000 2A643C2A00002F643C2F00002F643C2F 007834643C34000034643C34003C2D64 782D00002D643C2D00002D643C2D0000 2D643C2D00002D503C2D00002D643C2D 00002D503C2D00002D643C2D00002F64 3C2F00002F643C2F00002F643C2F0000 2F643C2F00002F643C2F00002F643C2F 00002F643C2F00002F643C2F00003164 3C31000031643C31000031643C310000 31643C31000031643C31000031643C31 000031643C31000031643C3100002F64 3C2F00002F643C2F007834643C340000 34643C34003C2D64782D00002D643C2D 00002D643C2D00002D643C2D00002D50 3C2D00002D643C2D00002D503C2D0000 2D643C2D00002F643C2F00002F643C2F 00002F643C2F00002F643C2F00002F64 3C2F00002F643C2F00002F643C2F0000 2F643C2F000031643C31000031643C31 000031643C31000031643C3100003164 3C31000031643C31000031643C310000 31643C31000032643C32000032643C32 000032643C32000032643C3200003264 813432000032643C32000032643C3200 81342664003264783200002600002864 0034647834000028000036643C360000 36643C36000036643C36000036643C36 000036643C36000036643C3600003664 3C36000036643C36000035643C350000 35643C35000035643C35000035643C35 000035643C35000035643C3500003564 7835000033643C33000033643C330000 33647833000033643C33000033643C33 000033643C33000033643C3300003164 3C31000031643C31000031643C310000 31643C31000031643C31000031643C31 000031643C31000031643C3100002F64 3C2F00002F643C2F00002F643C2F0000 2F643C2F00002F643C2F00002F643C2F 00002F643C2F00002F643C2F00003064 3C30000030643C30000030643C300000 30643C30000030643C30000030643C30 000030643C30000030643C3000003164 3C31000031643C31000031643C310000 31643C31000031643C31000031643C31 000031643C31000031643C3100003164 3C31000031643C31000031643C310000 31643C31000031643C31000031643C31 000031643C31000031643C3100003664 7836000036643C36000036643C360000 36643C36000036643C36000036643C36 000036643C36000034643C3400003464 3C34000034643C34000034643C340000 34643C34000034643C34000034643C34 000034643C34000033643C3300003364 3C33000033643C33000033643C330000 33643C33000033643C33000033643C33 000033643C33000032643C3200003264 3C32000032643C32000032643C320000 3264813432000032643C32000031643C 31000031643C31000031643C31000031 643C31000031643C31000031643C3100 0031643C31000031643C31000030643C 30000030643C30000030643C30000030 643C30000031643C31000031643C3100 0031643C31000031643C31000032645A 32005A34645A34005A36648134360000 2A643C2A00002A643C2A00002A643C2A 00002A643C2A00002A643C2A00002A64 3C2A00002A643C2A00002F643C2F0000 2F643C2F007834643C34000034643C34 003C2D64782D00002D643C2D00002D64 3C2D00002D643C2D00002D503C2D0000 2D643C2D00002D503C2D00002D643C2D 00002F643C2F00002F643C2F00002F64 3C2F00002F643C2F00002F643C2F0000 2F643C2F00002F643C2F00002F643C2F 000031643C31000031643C3100003164 3C31000031643C31000031643C310000 31643C31000031643C31000031643C31 00002F643C2F00002F643C2F00783464 3C34000034643C34003C2D64782D0000 2D643C2D00002D643C2D00002D643C2D 00002D503C2D00002D643C2D00002D50 3C2D00002D643C2D00002F643C2F0000 2F643C2F00002F643C2F00002F643C2F 00002F643C2F00002F643C2F00002F64 3C2F00002F643C2F000031643C310000 31643C31000031643C31000031643C31 000031643C31000031643C3100003164 3C31000031643C31000032643C320000 32643C32000032643C32000032643C32 00003264813432000032643C32000032 643C3200813426640032647832000026 0000286400346478340000280000FF2F 004D54726B00000AA500FF21010000FF 030A4368616E6E656C20326200B30000 00B3200000C30100B3076C00B30A2C1E 935A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F4E642D4E000F55642D 55000F5A642D5A000F5C642D5C000F55 642D55000F5A642D5A000F5C642D5C00 0F5F642D5F000F55642D55000F5F642D 5F000F5E642D5E000F55642D55000F5E 642D5E000F5C642D5C000F5A642D5A00 0F5A642D5A000F51642D51000F56642D 56000F5C642D5C000F53642D53000F5C 642D5C000F5F642D5F000F5E642D5E00 0F5A642D5A000F55642D55000F53642D 53000F52642D52000F4E642D4E000F49 642D49000F47642D47000F46642D4600 0F45643C45000045643C45007847643C 47000047643C47003C45647845000050 642D50000F51642D51000F58642D5800 4B5C642D5C000F5D642D5D000F64642D 64000F3E64783E00003E643C3E00003E 643C3E003C3E643C3E003C4164836041 003C4A643C4A00004A643C4A00784764 3C47000047643C47003C496478490000 49647849000049647849000049643C49 00004C643C4C00004E6483244E00004E 64784E00004D64822C4D643C4D00004D 00004D643C4D00004E643C4E00005A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F4E642D4E000F55642D55000F 5A642D5A000F5C642D5C000F55642D55 000F5A642D5A000F5C642D5C000F5F64 2D5F000F55642D55000F5F642D5F000F 5E642D5E000F55642D55000F5E642D5E 000F5C642D5C000F5A642D5A000F5A64 2D5A000F51642D51000F56642D56000F 5C642D5C000F53642D53000F5C642D5C 000F5F642D5F000F5E642D5E000F5A64 2D5A000F55642D55000F53642D53000F 52642D52000F4E642D4E000F49642D49 000F47642D47000F46642D46000F4564 3C45000045643C45007847643C470000 47643C47003C45647845000050642D50 000F51642D51000F58642D58004B5C64 2D5C000F5D642D5D000F64642D64000F 3E64783E00003E643C3E00003E643C3E 003C3E643C3E003C4164836041003C4A 643C4A00004A643C4A007847643C4700 0047643C47003C496478490000496478 49000049647849000049643C4900004C 643C4C00004E6483244E00004E64784E 00004D64822C4D643C4D00004D00004D 643C4D00004E643C4E00005A642D5A00 0F4E642D4E000F55642D55000F5A642D 5A000F5C642D5C000F55642D55000F5A 642D5A000F5C642D5C000F5F642D5F00 0F55642D55000F5F642D5F000F5E642D 5E000F55642D55000F5E642D5E000F5C 642D5C000F5A642D5A0000FF2F004D54 726B000006A200FF21010000FF030A43 68616E6E656C20316300B4000000B420 0000C43000B4076A00B40A541EB46400 00650000060C874094496400B4074103 074603074B04075103075603075C0407 6103076703076C040772815201148170 010A78944900004E6400B4010078944E 00005064785000005364785300005364 817053000052643C52000052648134B4 01147801097894520000506400B40100 78945000004E64784E00005564826855 00004E6482684E00005A648171B40113 835F01008170945A00005C64785C0000 5A643C5A00006164822CB40113817001 18836001095A9461008116466400B401 00030100399446000047643C47000049 643C490000496481344900004E64784E 00004D64784D00004E64784E00005064 7850000052643C5200004E648170B401 138324944E00004D6400B401003C944D 00004E643C4E0000556481345500004E 643C4E00004E6484584E00004E643C4E 00004E643C4E00004E64822C4E000050 643C5000004E643C4E00004D648134B4 01138170010978944D0000466400B401 00822C9446000044643C44000042643C 4200004964822C4900004E64784E0000 5064785000005364813453000052643C 520000526479B4011381700109779452 0000556401B401007794550000536478 53000052643C52000053643C53000052 643C5200004E64784E00004964817049 000050643C5000004E643C4E00004D64 3C4D00004B643C4B00004D6481344D00 004E645A4E005A4E645A4E005A4E6478 4E00003B6400E400400A004106004207 00430700440A00450600460700470700 480A004906004A07004B07004C0A004D 06004E07004F0700500A005106005207 00530700540A00550600560700570700 580A005906005A07005B07005C0A005D 06005E07005F0700600A006106006207 00630700640A00650600660700670700 680A006906006A07006B07006C0A006D 06006E07006F0700700A007106007207 00730700740A00750600760700770700 780A007906007A07007B07007C0A007D 06007E07007F04943B0001E400400294 4E643C4E00004E643C4E007850643C50 000050643C50003C4C6481704C000049 64784900004C643C4C000047642D4700 0048640F48000047640F47000045642D 45000047647847000045643C45000047 643C47003C45643C45003C4964841C49 00004E643C4E00004E643C4E00785064 3C50000050643C50003C516478510000 4C64784C00004C64784C00004C643C4C 000051643C5100005364832453000051 643C5100005564836055000055503C55 00005564855055000032643C32003C34 643C34003CB40109817094466400B401 00030100399446000047643C47000049 643C490000496481344900004E64784E 00004D64784D00004E64784E00005064 7850000052643C5200004E648170B401 138324944E00004D6400B401003C944D 00004E643C4E0000556481345500004E 643C4E00004E6484584E00004E643C4E 00004E643C4E00004E64822C4E000050 643C5000004E643C4E00004D648134B4 01138170010978944D0000466400B401 00822C9446000044643C44000042643C 4200004964822C4900004E64784E0000 5064785000005364813453000052643C 520000526479B4011381700109779452 0000556401B401007794550000536478 53000052643C52000053643C53000052 643C5200004E64784E00004964817049 000050643C5000004E643C4E00004D64 3C4D00004B643C4B00004D6481344D00 004E645A4E005A4E645A4E005A4E6478 4E00003B6400E400400A004106004207 00430700440A00450600460700470700 480A004906004A07004B07004C0A004D 06004E07004F0700500A005106005207 00530700540A00550600560700570700 580A005906005A07005B07005C0A005D 06005E07005F0700600A006106006207 00630700640A00650600660700670700 680A006906006A07006B07006C0A006D 06006E07006F0700700A007106007207 00730700740A00750600760700770700 780A007906007A07007B07007C0A007D 06007E07007F04943B0001E400400294 4E643C4E00004E643C4E007850643C50 000050643C50003C4C6481704C000049 64784900004C643C4C000047642D4700 0048640F48000047640F47000045642D 45000047647847000045643C45000047 643C47003C45643C45003C4964841C49 00004E643C4E00004E643C4E00785064 3C50000050643C50003C516478510000 4C64784C00004C64784C00004C643C4C 000051643C5100005364832453000051 643C5100005564836055000055503C55 00005564855055000032647832000034 643C340000FF2F004D54726B00000FF2 00FF21010000FF030A50657263757373 696F6E00C90000B9076EA54099276400 25640E25000027002E25640E25002E25 640027640E27000025002E25640E2500 2E27640025640E25000027002E25640E 25002E25640027640E27000025002E25 640E25002E27640025640E2500002700 2E25640E25002E27640025640E250000 27002E25640E25002E27640025640E25 000027002E25640E25002E2764002564 0E25000027002E27640025640E250000 27002E27640025640025000E27002E25 640025003C27640025640025000E2700 2E25640025003C25640025000027640E 27002E25640025003C25640025000027 640E27002E25640025003C2564002500 0027640E27002E25640025003C256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E256400 27640E27000025002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640027640E27000025002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640027640E27 000025002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640027640E27000025002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640027640E2700002500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E2564002764 0E27000025002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640027640E27000025002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640027640E270000 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E256400 27640E27000025002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640027640E27000025002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640027640E27 000025002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640027640E27000025002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640027640E2700002500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E2564002764 0E27000025002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640027640E27000025002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640027640E270000 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E256400 27640E27000025002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640027640E27000025002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640027640E27 000025002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640027640E27000025002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640027640E2700002500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E2564002764 0E27000025002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640027640E27000025002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640027640E270000 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640E25002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E256400 27640E27000025002E25640027640E27 000025002E25640E25002E2564002764 0E27000025002E25640E25002E256400 27640E27000025002E25640E25002E25 640027640E27000025002E25640E2500 2E25640027640E27000025002E25640E 25002E25640027640E27000025002E25 640E25002E25640027640E2700002500 2E25640E25002E25640027640E270000 25002E25640027640E270000250000FF 2F004D54726B0000000900FF21010000 FF2F004D54726B0000001900FF210100 00FF030C53657175656E636564206279 00FF2F004D54726B0000001800FF2101 0000FF030B4D61726B204A616E73656E 00FF2F00