'S U B P R O G R A M S I N T H I S L I B R A R Y '- CHARACTERS ' - A_CHAR(C,A) : GET THE ADDRESS (A) OF CHARACTER (C) ' - W_CHAR(C,BMAP()) : SET ALL PIXELS OF CHARACTER (C) TO AN 8X8 PIXEL ARRAY (BMAP()) ' - R_CHAR(C,BMAP()) : GET AN 8X8 PIXEL ARRAY (BMAP()) OF ALL PIXELS IN CHARACTER (C) ' - W_PIXEL(C,IX,IY,V) : SET THE PIXEL (IX,IY) OF CHARACTER (C) TO COLOR V ' - R_PIXEL(C,IX,IY,V) : GET THE COLOR (V) OF CHARACTER (C) AT PIXEL (IX,IY) ' - DISP_BMP(X0,Y0,IMG()) : DISPLAY THE 8X8 PIXEL ARRAY (IMG()) AT CELL (X0,Y0) '- CHARACTER TRANSFORMATIONS ' - CHAR_SHIFT_X(C,V) : SHIFT CHARACTER (C) HORIZONTALLY BY (V) PIXELS ' - CHAR_SHIFT_Y(C,V) : SHIFT CHARACTER (C) VERTICALLY BY (V) PIXELS ' - CHAR_FLIP_X(C) : FLIP CHARACTER (C) HORIZONTALLY ' - CHAR_FLIP_Y(C) : FLIP CHARACTER (C) VERTICALLY ' - CHAR_FLIP_DL(C) : FLIP CHARACTER (C) DIAGONALLY LEFT-UP ' - CHAR_FLIP_DR(C) : FLIP CHARACTER (C) DIAGONALLY RIGHT-UP ' - CHAR_ROT_R(C) : ROTATE CHARACTER (C) CLOCKWISE ' - CHAR_ROT_L(C) : ROTATE CHARACTER (C) ANTI-CLOCKWISE '- MATRIX ' - MATRIX_TRANSFORM(C0,C1,A, : SHIFT(DX,DY), SCALE(S), AND ROTATE(A) AROUND PIVOT(PX,PY) ' S,PX,PY,DX,DY) : SOURCE CHARACTER (C0) TO TARGET CHARACTER (C1) '- PIXEL COPY ' - COPYO3(X0,Y0,X1,Y1,X2,Y2, : LIKE BG COPY BUT COPIES PIXELS FROM X0 Y0, X1 Y1 TO X2 Y2 ' C0,C1) : WITH CHARACTER OFFSETS C0 FOR X0,Y0,X1,Y1 AND C1 FOR X2,Y2 ' - OVERLAY2(A0,C0,C1) : OVERLAYS PIXEL BYTES (C0,C1) ON ADDRESS (A0)'S PIXELS '- CORE ALGORITHMS AND FUNNY BUGS ' - CHAR_TRANSFORMER_A(C,T0,T1): THE CORE OF DIAGONAL FLIP AND CHARACTER ROTATION ' - CHAR_TRANSFORMER_B(C,T0,T1): DOES THE SAME AS THE PREVIOUS, BUT IT WORKS DIFFERENTLY ' - CHAR_SHIFT_Y_C(C,V) : "CHAR_SHIFT_Y" BUT THE PALLETTE INVERTS (FUNNY BUG) ' - CCOP6O(C0,C22,X22,Y22,W,H,CXXX0,CY0,CXXX1,CY1) : THE CORE OF "COPYO3" '- POINTS AND SHAPES ' - VIEW_CHARACTERS(X,Y,C0,C1) : PRINT THE CHARACTERS (C0 TO C1) AT CELL (X,Y) ' - PLOT(X,Y,C) : PLOT A POINT AT PIXEL (X,Y) WITH COLOR (C (0-3)) ' - LINE(X1,Y1,X2,Y2,C) : DRAW A LINE FROM (X1,Y1) TO (X2,Y2) WITH COLOR (C (0-3)) ' - CIRCLE(X1,Y1,X2,Y2,C) : DRAW A CIRCLE IN (X1,Y1) (X2,Y2) WITH COLOR (C (0-3)) ' - BOX(X1,Y1,X2,Y2,C) : DRAW A BOX IN (X1,Y1) (X2,Y2) WITH COLOR (C (0-3)) ' - BAR(X1,Y1,X2,Y2,C) : DRAW A SOLID BAR IN (X1,Y1) (X2,Y2) WITH COLOR (C (0-3)) ' - MANHATTAN(X,Y,R,C) : DRAW A SOLID DIAMOND AT (X,Y) WITH COLOR (C) AND SIZE (R) 'ROTATE SOURCE CHARACTER (C0) INTO (C1), 'ROTATE AROUND PIVOT (PX,PY) BY ANGLE (A), SCALE (S), AND SHIFT (DX,DY) 'S E T U P GLOBAL A_TEMP_CHARS A_TEMP_CHARS=$A000 SUB RASTERFX SCROLL 1,0,RASTER0(RASTER) END SUB 'BG COPY 0,0,20,16 TO 0,0 DIM BMAP(7,7) PAL 1 'P O I N T S A N D S H A P E S CALL VIEW_CHARACTERS(2,8,64,191) FOR I=-10 TO 10 'TRACE I-PI LX=64+INT(70*I) LY=33+INT(70*1) CALL SAVE_LINE(LX,LY,64,32,1,0,0,127,127) NEXT I 'PROGRAMMING LANGUAGE DESIGNED TO VIEW VARIABLES AS SINGLE CHARACTERS (THE FULL NAME IS HIDDEN TO MAKE YOUR CALCULATIONS LOOK LIKE CLEAN MATH) 'FOR I=0 TO 1.05*PI STEP 0.05*PI 'TRACE I-PI 'LX=64+INT(100*COS(I)) 'LY=33+INT(100*SIN(I)) 'CALL CLAMP(LX,0,127) 'CALL CLAMP(LY,0,127) 'CALL LINE(LX,LY,64,32,1) 'NEXT I BG 1 PAL 4 BG FILL 0,0 TO 19,15 CHAR 30 PAL 1 DIM GLOBAL RASTER0(127) ON RASTER CALL RASTERFX 'DO 'SETUP RASTER FOR I=0 TO 127 'RASTER0(I)=MIN(128,-I+INT(1.03^I)) 'RASTER0(I)=MIN(128,MAX(-1,INT( -I+ (1.03^(I)) ))) 'RASTER0(I)=INT( -I+ (1.03^(I)) ) 'RASTER0(I)=INT( -I+ 128-(1.03^(I)) ) 'RASTER0(I)=INT( -I+ (1.03^(128-I)) ) RASTER0(I)=INT( -I+ MIN(64, (1.03^(64+128-I))) ) IF I<64 THEN RASTER0(I)=-I-10 'RASTER0(I)= -I+ 1.03^(128-I) 'TRACE I,(1.03^(I)) 'TRACE I,RASTER0(I) 'RASTER0(I)=I*I 'WAIT VBL NEXT I DO CALL CHAR_SHIFT_Y(30,1) WAIT 10 LOOP SUB WAITING 'THIS IS THE SAME AS "WAIT 3", EXCEPT IT CAN PERFORM TASKS EACH LOOP FOR I=0 TO 2 CALL MATRIX_TRANSFORM(11,12,TIMER*0.01,1,4,4,0,0) WAIT VBL NEXT I END SUB SUB CLAMP(V,L,H) V=MIN(H,MAX(L,V)) END SUB SUB SAVE_LINE2(X1,Y1,X2,Y2,C,BX0,BY0,BX1,BY1) 'CALL CLAMP(LX0,0,127) 'CALL CLAMP(LY0,0,127) DX=X2-X1 DY=Y2-Y1 L=SQR(DY*DY+DX*DX) T=0 STEPS=1 FX=DX/(L+0.001) FY=DY/(L+0.001) CALL CLAMP(X1,0,127) CALL CLAMP(Y1,0,127) CALL CLAMP(X2,0,127) CALL CLAMP(Y2,0,127) DX=X2-X1 DY=Y2-Y1 L=SQR(DY*DY+DX*DX) REPEAT X=FX*T+X1 Y=FY*T+Y1 CALL PLOT(X,Y,C) ADD T,STEPS UNTIL T>=L T=0 END SUB SUB SAVE_LINE(X1,Y1,X2,Y2,C,BX0,BY0,BX1,BY1) DX=X2-X1 DY=Y2-Y1 L=SQR(DY*DY+DX*DX) T=0 STEPS=1 FX=DX/(L+0.001) FY=DY/(L+0.001) REPEAT X=FX*T+X1 Y=FY*T+Y1 X=X*-(X>=BX0 AND X<=BX1) Y=Y*-(Y>=BY0 AND Y<=BY1) CALL PLOT(X,Y,C) ADD T,STEPS UNTIL T>=L T=0 END SUB 'C H A R A C T E R S SUB A_CHAR(C,A) A=$8000+C*16 END SUB SUB W_CHAR(C,BMAP()) A=$8000+C*16 FOR IY=0 TO 7 V0=0 V1=0 FOR IX=0 TO 7 E=2^(7-IX) V=BMAP(IX,IY) V0=V0 OR (V AND 1)*E V1=V1 OR (V AND 2)*E NEXT IX POKE A+IY ,V0 POKE A+IY+8,V1*0.5 NEXT IY END SUB SUB R_CHAR(C,BMAP()) A=$8000+C*16 FOR IY=0 TO 7 V0=PEEK(A+IY ) V1=PEEK(A+IY+8)*2 FOR IX=0 TO 7 E=2^(7-IX) BMAP(IX,IY)=((V0 AND 1*E) OR (V1 AND 2*E))/E NEXT IX NEXT IY END SUB SUB W_PIXEL(C,IX,IY,V) A=$8000+C*16 E=2^(7-IX) V0=(V AND 1)*E V1=(V AND 2)*E POKE A+IY ,V0 POKE A+IY+8,V1*0.5 END SUB SUB R_PIXEL(C,IX,IY,V) A=$8000+C*16 V0=PEEK(A+IY ) V1=PEEK(A+IY+8)*2 E=2^(7-IX) V=((V0 AND 1*E) OR (V1 AND 2*E))/E END SUB 'S H I F T C H A R A C T E R S SUB CHAR_SHIFT_X(C,V) A=$8000+C*16 FOR I=0 TO 15 ROR A+I,V NEXT I END SUB SUB CHAR_SHIFT_Y(C,V) A=$8000+C*16 COPY A,16 TO A_TEMP_CHARS FOR J=0 TO 8 STEP 8 IF V>0 THEN COPY A_TEMP_CHARS+J+V,8-V TO A+J COPY A_TEMP_CHARS+J,V TO A+J+8-V ELSE IF V<0 THEN COPY A_TEMP_CHARS+J,8+V TO A+J-V COPY A_TEMP_CHARS+J+8+V,-V TO A+J END IF NEXT J END SUB SUB CHAR_SHIFT_Y_C(C,V) A=$8000+C*16 COPY A,16 TO A_TEMP_CHARS IF V>0 THEN COPY A_TEMP_CHARS+V,16-V TO A COPY A_TEMP_CHARS,V TO A+16-V ELSE IF V<0 THEN COPY A_TEMP_CHARS,16+V TO A-V COPY A_TEMP_CHARS+16+V,-V TO A END IF END SUB 'F L I P C H A R A C T E R S SUB CHAR_FLIP_X(C) A=$8000+C*16 FOR I=0 TO 15 V=PEEK(A+I) V2=0 FOR J=0 TO 3 E0=2^J E1=2^(7-J) E2=E0/E1 E3=1/E2 V0=V AND E0 V1=V AND E1 V2=V2 OR V0*E3 OR V1*E2 NEXT J POKE A+I,V2 NEXT I END SUB SUB CHAR_FLIP_Y(C) A=$8000+C*16 COPY A,16 TO A_TEMP_CHARS FOR I=0 TO 7 FOR J=0 TO 8 STEP 8 COPY A_TEMP_CHARS+I+J,1 TO A+J+7-I NEXT J NEXT I END SUB 'D I A G O N A L F L I P SUB CHAR_FLIP_DL(C) CALL CHAR_TRANSFORMER_A(C,0,0) END SUB SUB CHAR_FLIP_DR(C) CALL CHAR_TRANSFORMER_A(C,1,1) END SUB 'Q U A R T E R R O T A T I O N S SUB CHAR_ROT_R(C) CALL CHAR_TRANSFORMER_A(C,1,0) END SUB SUB CHAR_ROT_L(C) CALL CHAR_TRANSFORMER_A(C,0,1) END SUB 'D I A G O N A L F L I P A N D Q U A R T E R R O T A T I O N S SUB CHAR_TRANSFORMER_A(C,T0,T1) 'DOES THE SAME AS CHAR_TRANSFORMER_B, BUT WORKS DIFFERENTLY, THIS ONE SEEMS FASTER T2=T0*7 T4=T1*7 T3=1-T0*2 T5=1-T1*2 A=$8000+C*16 COPY A,16 TO A_TEMP_CHARS FILL A,16 FOR D=0 TO 7 FOR J=0 TO 8 STEP 8 V=PEEK(A_TEMP_CHARS+D+J) FOR I=0 TO 7 E0=2^(T2+T3*I) E1=2^(T4+T5*D) E2=E1/E0 POKE A+I+J,PEEK(A+I+J) OR (V AND E0)*E2 NEXT I NEXT J NEXT D END SUB SUB CHAR_TRANSFORMER_B(C,T0,T1) 'DOES THE SAME AS CHAR_TRANSFORMER_A, BUT WORKS DIFFERENTLY T2=T1*7 T4=T0*7 T3=1-T1*2 T5=1-T0*2 A=$8000+C*16 COPY A,16 TO A_TEMP_CHARS FILL A,16 FOR D=0 TO 7 FOR J=0 TO 8 STEP 8 FOR I=0 TO 7 E0=2^(T2+T3*I) E1=2^(T4+T5*D) E2=E0/E1 POKE A+D+J,PEEK(A+D+J) OR ((PEEK(A_TEMP_CHARS+I+J) AND E1)*E2) NEXT I NEXT J NEXT D END SUB 'M A T R I X T R A N S F O R M A T I O N S SUB MATRIX_TRANSFORM(C0,C1,A,S,PX,PY,DX,DY) 'DEFINE MATRIX M00= S* COS(A) M10= S* SIN(A) M01= S* -SIN(A) M11= S* COS(A) OX=0 OY=0 DIM BMAP(7,7) DIM BMAP2(7,7) CALL R_CHAR(C0,BMAP()) FOR IY=0 TO 7 FOR IX=0 TO 7 'USE MATRIX TO ROTATE (IX,IY) AROUND PIVOT POINT (PX,PY) TO GET (OX,OY) X=IX-PX Y=IY-PY OX= MIN(7,MAX(0, M00*X + M10*Y +PX +DX )) OY= MIN(7,MAX(0, M01*X + M11*Y +PY +DY )) BMAP2(OX,OY)=BMAP(IX,IY) NEXT IX NEXT IY CALL W_CHAR(C1,BMAP2()) END SUB 'D I S P L A Y B I T M A P A R R A Y S SUB DISP_BMP(X0,Y0,IMG()) UX=UBOUND(IMG,1) UY=UBOUND(IMG,2) FOR Y=0 TO UX FOR X=0 TO UY CELL X0+X,Y0+Y,48+IMG(X,Y) NEXT X NEXT Y END SUB 'M U L T I T O O L 'COPY PIXELS BETWEEN CHAR(C0) + RECTANGLE((X0,Y0),(X1,Y1)) TO CHAR(C1) + POINT(X2,Y2) 'IT'S SIMILAR TO BG COPY, EXEPT IT COPIES PIXELS 'THE CHARACTER INPUTS ARE OFFSETS, YOU CAN SET THEM TO ZERO SUB COPYO3(X0,Y0,X1,Y1,X2,Y2,C0,C1) 'THIS IS A PARAMETER EXCHANGE BOX TO PATCH UP THE MESS W=31 H=31 'W=15 'H=15 CALL CCOP6O(C0,C1,X2+1-X0,Y2+8-Y0,W,H,X0+7,Y0,W-X1,H-Y1) END SUB SUB CCOP6O(C0,C22,X22,Y22,W,H,CXXX0,CY0,CXXX1,CY1) 'CROP 1: SHIFT UP-LEFT, CROP 'CROP 2: CROP FROM BOTTOM-RIGHT 'BITWISE CROPPING (BITWISE AND) FOR X 'LOGICAL CROPPING FOR UPY 'CX0=4 'CY0=4 'CX1=4 'CY1=4 C2=C22+INT(X22/8)+INT(Y22/8)*16 X2=X22-INT(X22/8)*8 Y2=Y22-INT(Y22/8)*8 CX1=CXXX1-INT(CXXX1/8)*8 CX0=7-(CXXX0-INT(CXXX0/8)*8) X3=X2 E0=2^( -X3) 'E1=2^(8-X3) E1=E0*256 CXX0=CX0-X2 CXX1=CX1-X2 'ADD CXX1,-INT(CXX1/8)*8 M0A=2^(CXX0 )-1 M0B=2^(CXX0+8)-1 M1A=255 XOR (2^MAX(0,MIN(7,CXX1 ))-1) M1B=255 XOR (2^MAX(0,MIN(8,CXX1+8))-1) 'M1A=255 XOR (2^CXX1 -1) 'M1B=255 XOR (2^CXX1+8-1) 'S=W\8 -MAX(0,INT(CXXX1\8)) S=W\8 -INT(CXXX1\8) S00=-1+INT(CXXX0\8) FOR X=S00 TO S FOR YY=CY0 TO H-CY1 YYY=YY+Y2 A0=$8000+(C0+X)*16+YY+(YY\8)*(256-8) A1=$8000+(C2+X)*16+YYY+(YYY\8)*(256-8) IF (MIN(A0,A1)>=$8000) AND MAX(A0,A1)<$9000 THEN IF X=S AND X=S00 THEN M2=M0A AND M1A M3=M0B AND M1B ELSE IF X=S THEN 'IT SHOULD MOVE TOGETHER WITH X2 M2=M1A M3=M1B ELSE IF X=S00 THEN M2=M0A M3=M0B ELSE M2=255 M3=255 END IF 'OVERLAY: (P0 AND (255 XOR (P0 AND P1))) OR P1) CALL OVERLAY2(A1 , ((PEEK(A0 )*E0) AND M2), ((PEEK(A0+8)*E0) AND M2)) CALL OVERLAY2(A1+16, ((PEEK(A0 )*E1) AND M3), ((PEEK(A0+8)*E1) AND M3)) END IF NEXT YY NEXT X END SUB SUB OVERLAY2(A0,C0,C1) A1=A0+8 B0=PEEK(A0) B1=PEEK(A1) M=255 XOR (C0 OR C1) POKE A0,(B0 AND M) OR C0 POKE A1,(B1 AND M) OR C1 END SUB 'P O I N T S A N D S H A P E S SUB VIEW_CHARACTERS(X,Y,C0,C1) CY0=C0\16 CY1=C1\16 CX0=C0 MOD 16 CX1=C1 MOD 16 FOR IY=CY0 TO CY1 FOR IX=0-(IY=CY0)*CX0 TO 15-(IY=CY1)*(CX1-15) CELL X+IX,Y+IY-CY0,IX+IY*16 NEXT IX NEXT IY END SUB SUB PLOT(X,Y,C) A=$8000+(Y\8)*256+(X\8)*16+(Y MOD 8) N=2^(7-(X MOD 8)) 'IF C MOD 2 THEN POKE A ,PEEK(A ) OR N 'IF C\2 THEN POKE A+8,PEEK(A+8) OR N C0=N*(C MOD 2 ) C1=N*(C\2) CALL OVERLAY2(A,C0,C1) 'POKE A ,PEEK(A ) OR (2^N * C MOD 2) 'POKE A+8,PEEK(A+8) OR (2^N * C\2) END SUB SUB LINE(X1,Y1,X2,Y2,C) DX=X2-X1 DY=Y2-Y1 L=SQR(DY*DY+DX*DX) T=0 STEPS=1 FX=DX/(L+0.001) FY=DY/(L+0.001) REPEAT X=FX*T+X1 Y=FY*T+Y1 X=X*-(X>0 AND X<1024) Y=Y*-(Y>0 AND Y<1024) CALL PLOT(X,Y,C) ADD T,STEPS UNTIL T>=L T=0 END SUB SUB CIRCLE(X1,Y1,X2,Y2,C) DX=X2-X1 DY=Y2-Y1 L=SQR(DY*DY+DX*DX) DX=DX*0.5 DY=DY*0.5 X3=X1+DX Y3=Y1+DY 'STEPS=50*1/((DX+DY)*PI) STEPS=0.01*PI T=0 REPEAT X=COS(T)*DX+X3 Y=SIN(T)*DY+Y3 X=MIN(1024,MAX(0,X)) Y=MIN(1024,MAX(0,Y)) CALL PLOT(X,Y,C) ADD T,STEPS UNTIL T>=L END SUB SUB BOX(X1,Y1,X2,Y2,C) STEPS=1 D1=-(X2-X1>0)*2-1 D2=-(Y2-Y1>0)*2-1 FOR I=X1 TO X2 STEP STEPS*D1 CALL PLOT(I,Y1,C) CALL PLOT(I,Y2,C) NEXT I FOR I=Y1 TO Y2 STEP STEPS*D2 CALL PLOT(X1,I,C) CALL PLOT(X2,I,C) NEXT I END SUB SUB BAR(X1,Y1,X2,Y2,C) STEPS=1 D1=-(X2-X1>0)*2-1 D2=-(Y2-Y1>0)*2-1 FOR IY=Y1 TO Y2 STEP STEPS*D2 FOR IX=X1 TO X2 STEP STEPS*D1 CALL PLOT(IX,IY,C) NEXT IX NEXT IY 'OPTIMIZATIONS: 'GENERATE THE BYTES FOR ONE HORIZONTAL LINE, WRITE THE BYTES 'CENTER BYTES ARE ALWAYS 255 'THE BYTES NEED TO BE STORED FOR ONE COLOR (JUST THE SHAPE) END SUB SUB MANHATTAN(X,Y,R,C) 'SOLID DIAMOND SHAPE (EASIER THAN A SOLID CIRCLE) FOR J=-R TO R FOR I=ABS(J)-R TO -ABS(J)+R CALL PLOT(INT((X+I)),INT((Y+J)),C) NEXT I NEXT J END SUB #1:MAIN PALETTES 2F3F2F0000000B00000F0B0000153C00 00332211003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 000804FFFF660000C3810000666681C3 00000000000000000000000000000000 00000000000000000000000000000000 00020702020202000000000000000000 047E0400000000000000000000000000 00020102000201020000000000000000 00000000030000000000000000000000 08080000000000000000000000000000 01020000000000000000000000000000 80400000000040800000000000000000 047E040000047E040000000000000000 047E040000207E200000000000000000 0040404043E040000000000000000000 0E0E0E0E0E0E0E0E0000000000000000 00000000FFFFFF000000000000000000 00FFFFFFFFFFFF000000000000000000 80000000000000000000000000000000 FF00FF00FF00FF0000FFFF0000FFFF00 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFFFFFFFFFFF0000000000000000 0000000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF #3:MAIN BG 00001410000011130000000000001413 151300000000111300000D0100000000 00000000000000000000000000000101 10030301100B05010000070110030901 101B1A03000000000000000000000000 00000000000018030000000000001403 000000001603170B00001A0300000000 00000000000000000000000000000201 1013040119030601130B080110130A01 100B1A03000000000000000000000000 000000000000110B0000000000000000 150300000000110300001A0300000000 00000000000000000000000000000000 00000000000000000000000000000C01 00001A03000000000000000000000000 00000000000000000000000000000000 000000000000000000001A0300000000 00000000000000000000000000000000 00000000000000000000000000000000 00001A03000000000000000000000000 0000000000001B031B031B031B031B03 1B031B031B031B031B031B031C131C13 1C131C131C131B131B131B131A030000 00000000000000000000000000000000 00000000000000000000000000001A0B 000000001A0300000000000000000000 00000000000000000000000000000000 0000000000001A0B000000001A030000 00000000000000000000000000000000 00000000000000000000000000001A0B 000000001A0300000000000000000000 00000000000000000000000000000000 0000000000001A0B000000001A030000 00000000000000000000000000000000 00000000000000000000000000001A0B 000000001A0300000000000000000000 00000000000000000000000000000000 0000000000001A0B000000001A030000 00000000000000000000000000000000 00000000000000000000000000001A0B 00000000