'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