Dark Bit Factory & Gravity

PROGRAMMING => General coding questions => Topic started by: Hotshot on June 12, 2008

Title: WHY it is JERKY on EBasic?
Post by: Hotshot on June 12, 2008
Hiya all,

I have been told to look the example of SMASHOUT where show how to do DOUBLE BUFFER. When I run the program in Dual core( E6750 ) and you will see the STRANGE picture that I have CAPTURE!

It already got DOUBLE BUFFER in SMASHOUT but still...why it is so JERKY?  ???



Title: Re: WHY it is JERKY on EBasic?
Post by: rain_storm on June 12, 2008
are you clearing the screen? Looking at the ball and the score I dont think you are. maybe thats why it looks the way it does.
Title: Re: WHY it is JERKY on EBasic?
Post by: Hotshot on June 12, 2008
Yep it is even got CLS inside the loop !!!

Code: [Select]
DO
CLS
FILLSCREEN 0
ShowStatus()
DrawBorder()
DrawBricks()
DrawPaddle()

IF game_over = FALSE
UpdateBall()
IF ball_captured
GETTEXTSIZE BackBuffer,LB$,tx,ty
WRITETEXT width/2 - tx/2,height/2 - ty/2, LB$
ENDIF
IF MOUSEDOWN(1) AND ball_captured
ball_captured = FALSE
current_yvel = level *2
SetSpriteVelY(pBallSprite,current_yvel)
current_xvel = level * 2
SetSpriteVelX(pBallSprite,current_xvel)
ENDIF
'calculate the mouse delta
CalculateDelta()
ELSE
'show game over graphics
GETTEXTSIZE BackBuffer,GO$,tx,ty
WRITETEXT width/2 - tx/2,height/2 - ty/2, GO$
GETTEXTSIZE BackBuffer,RES$,tx,ty
WRITETEXT width/2 - tx/2,height/2 - ty/2 + ty, RES$
ENDIF
'ESC to exit at any time
IF KEYDOWN(1) then exit_game = TRUE
'restart press 'R'
IF game_over AND KEYDOWN(0x13)
level = 1
ListRemoveAll(brickList,TRUE)
brickList = ListCreate()
num_lives = 3
num_lines = 10
score = 0
CalculateBrickSizes()
InitializeBricks()
ball_captured = TRUE
game_over = FALSE
ENDIF
'target 75 frames per second for ball movement.
mElapsed = timeGetTime() - mTimer
mTimer = timeGetTime()
mAdjust = mElapsed / 13.3333
fps = FLIP 1
'mAdjust = 1

UNTIL exit_game
Title: Re: WHY it is JERKY on EBasic?
Post by: Hotshot on June 12, 2008
I know what causing the problem!
Screen Refresh Rate as my Monitor is 1028 x 768  60hz

IF the code was design for 75hz refresh rate then all I have do is change my monitor refresh rate and the screen is still JERKY!  >:(
Title: Re: WHY it is JERKY on EBasic?
Post by: rain_storm on June 12, 2008
I have Ebasic downloaded and installed now could you please post the full source so I can try and help you track down this bug? The code above is incomplete

Edit:

Just found the smashout example in the installation. I replaced the original code block between
Code: [Select]
do
 ...
until exit_game
with the code you supplied. The screen shot is below. I am not getting any artifacts or jerkyness not even any shearing. It would appear that your code above is correct and the bug is elsewhere in the file.
Title: Re: WHY it is JERKY on EBasic?
Post by: Hotshot on June 12, 2008
OK....

CLICK FILE >> OPEN >> 2D SAMPLES

CLICK SMASHOUT (THAT THE CODE)

RUN THAT  :)

OR

IF U WANT CODE SAMPLE WHICH IS HERE

Code: [Select]
/*
SMASHOUT! a game remeniscent of the original breakout
A demo program for EBASIC and the 2D command set
2006 Ionic Wind Software. Free for whatever use you see fit.
*/
DECLARE IMPORT,timeGetTime(),UINT
'our brick type. Stored in a linked list
TYPE brick
int x,y /* upper left corner of brick */
int visible /*whether brick exists */
int smashed /*brick was hit, and is currently disolving */
float dissolve_time /*when brick is smashed this controls the dissolve effect */
uint col /*the color of the brick*/
ENDTYPE

'Our initial settings
GO$ = "Game Over"
RES$ = "Press R to restart, ESC to end"
LB$ = "Press left button to launch ball"
width = 640
height = 480
border_size = 7
const ball_size = 10
bricks_per_line = 16
num_lines = 10
topspace = 40 + border_size
bottomspace = border_size
border_color = RGB(0,0,255)
score = 0
fps = 0
ball_captured = TRUE
game_over = FALSE
exit_game = FALSE
UINT brick_colors[14]
brick_colors = RGB(255,0,0),RGB(0,255,0),RGB(0,0,255),RGB(255,255,0),RGB(0,255,255),RGB(255,0,255),RGB(255,255,255)
brick_colors[7] = RGB(192,0,0),RGB(0,192,0),RGB(0,0,192),RGB(192,192,0),RGB(0,192,192),RGB(192,0,192),RGB(192,192,192)
int brickXsize,brickYsize,paddleXpos,paddleYpos,mElapsed,mTimer,lastY
float ballXpos,ballYpos
double mAdjust
int current_xvel,current_yvel
int prev_mouseX,deltaX
pointer pBrickSprite,pBallSprite,pPaddleSprite
pBrickSprite = NULL
pBallSprite = NULL
pPaddleSprite = NULL
level = 1
current_xvel = 2
current_yvel = 2
num_lives = 3
memory sound1,sound2
char snddata
sndlength = 0
'load the sounds
GETDATA plink2,sndlength
ALLOCMEM sound1,1,sndlength
FOR x = 0 to sndlength-1
GETDATA plink2,snddata
WRITEMEM sound1,x+1,snddata
NEXT x
GETDATA carbrake,sndlength
ALLOCMEM sound2,1,sndlength
FOR x = 0 to sndlength-1
GETDATA carbrake,snddata
WRITEMEM sound2,x+1,snddata
NEXT x
playwave sound1,@SNDASYNC
IF CREATESCREEN(width,height,16) < 0
MESSAGEBOX 0,"Couldn't open screen\nThis program requires DirectX 7.0 or greater","Error"
ENDIF
'turn off the cursor
SETCURSOR FrontBuffer,@CSCUSTOM,0
'Set our font and text colors
SETFONT BackBuffer,"Ariel",12,600
FRONTPEN BackBuffer,RGB(192,192,255)
DRAWMODE BackBuffer,@TRANSPARENT
'creare the list of bricks
brickList = ListCreate
'calculate the brick sizes
CalculateBrickSizes()
'Initialize the brick list
InitializeBricks()
'Create the ball sprite
SetupBall()
'Create the paddle sprite
SetupPaddle()
'used to calculate the mouseX speed
prev_mouseX = MouseX()
check_mouse = 0
mTimer = timeGetTime()
int tx,ty
DO
CLS
FILLSCREEN 0
ShowStatus()
DrawBorder()
DrawBricks()
DrawPaddle()

IF game_over = FALSE
UpdateBall()
IF ball_captured
GETTEXTSIZE BackBuffer,LB$,tx,ty
WRITETEXT width/2 - tx/2,height/2 - ty/2, LB$
ENDIF
IF MOUSEDOWN(1) AND ball_captured
ball_captured = FALSE
current_yvel = level *2
SetSpriteVelY(pBallSprite,current_yvel)
current_xvel = level * 2
SetSpriteVelX(pBallSprite,current_xvel)
ENDIF
'calculate the mouse delta
CalculateDelta()
ELSE
'show game over graphics
GETTEXTSIZE BackBuffer,GO$,tx,ty
WRITETEXT width/2 - tx/2,height/2 - ty/2, GO$
GETTEXTSIZE BackBuffer,RES$,tx,ty
WRITETEXT width/2 - tx/2,height/2 - ty/2 + ty, RES$
ENDIF
'ESC to exit at any time
IF KEYDOWN(1) then exit_game = TRUE
'restart press 'R'
IF game_over AND KEYDOWN(0x13)
level = 1
ListRemoveAll(brickList,TRUE)
brickList = ListCreate()
num_lives = 3
num_lines = 10
score = 0
CalculateBrickSizes()
InitializeBricks()
ball_captured = TRUE
game_over = FALSE
ENDIF
'target 75 frames per second for ball movement.
mElapsed = timeGetTime() - mTimer
mTimer = timeGetTime()
mAdjust = mElapsed / 16.6666   
'13.3333
fps = FLIP 1
'mAdjust = 1

UNTIL exit_game
'clean up and end
IF pBrickSprite <> NULL THEN FREESPRITE(pBrickSprite)
IF pBallSprite <> NULL THEN FREESPRITE(pBallSprite)
IF pPaddleSprite <> NULL THEN FREESPRITE(pPaddleSprite)
IF sound1 <> NULL THEN FREEMEM sound1
IF sound2 <> NULL THEN FREEMEM sound2
CLOSESCREEN
ListRemoveAll(brickList,TRUE)
END

SUB CalculateBrickSizes()
'calculate how big the bricks will be in the x direction
brickXsize = (width - (border_size * 2)) / bricks_per_line
'subtract one pixel for spacing between bricks
brickXsize -= 1
'calculate how big the bricks will be in the y direction
'use 35% of x size
brickYsize = (.35 * (brickXsize+1))
'subtract one pixel for spacing between bricks
brickYsize -= 1
'create the fake brick sprite used for hit testing
IF pBrickSprite <> NULL THEN FreeSprite(pBrickSprite)
pBrickSprite = CREATESPRITE(brickXsize,brickYsize,1)
RETURN
ENDSUB

SUB CalculateDelta()
check_mouse++
if check_mouse > (fps / 10)
deltaX = MouseX() - prev_mouseX
deltaX *= (50.0/width)
if deltaX < -5 then deltaX = -5
if deltaX > 5 then deltaX = 5
prev_mouseX = MouseX()
check_mouse = 0
endif
RETURN
ENDSUB

SUB InitializeBricks()
FOR y=1 to num_lines
FOR x=1 to  bricks_per_line
pBrick = ListAdd(brickList,NEW(brick,1))
#<brick>pBrick.x = ((x-1) * (brickXsize+1))+ border_size + 1
#<brick>pBrick.y = ((y-1) * (brickYsize+1))+topspace+border_size
#<brick>pBrick.col = brick_colors[RAND(13)]
#<brick>pBrick.visible = TRUE
#<brick>pBrick.smashed = FALSE
#<brick>pBrick.dissolve_time = 100
lastY = #<brick>pBrick.y + brickYsize+2
NEXT x
NEXT y
RETURN
ENDSUB

SUB SetupBall()
pBallSprite = CREATESPRITE(ball_size,ball_size,1)
SpriteToBuffer(pBallSprite)
FILLSCREEN 0,SpriteBuffer
ELLIPSE SpriteBuffer,0,0,ball_size,ball_size,RGB(0,255,255),RGB(192,192,192)
SetSpriteVelX(pBallSprite,current_xvel)
SetSpriteVelY(pBallSprite,current_yvel)
SpriteMaskColor pBallSprite,0
SpriteDrawMode pBallSprite,@TRANS
RETURN
ENDSUB

SUB SetupPaddle()
pPaddleSprite = CREATESPRITE(brickXsize+10,6,1)
SpriteToBuffer(pPaddleSprite)
FILLSCREEN 0,SpriteBuffer
DrawFilledRect 0,0,brickXsize+10,6,RGB(255,255,0),SpriteBuffer
SpriteDrawMode pPaddleSprite,@BLOCKCOPY
RETURN
ENDSUB

SUB DrawBricks()
FOR pBrick = EACH brickList AS brick
IF #pBrick.visible
IF #pBrick.smashed
lockbuffer
FOR x = 0 to int(#pBrick.dissolve_time)
WritePixelFast #pBrick.x + RAND(brickXsize),#pBrick.y + RAND(brickYsize),#pBrick.col
NEXT x
unlockbuffer
#pBrick.dissolve_time -= (2 * mAdjust)
IF #pBrick.dissolve_time <= 0
#pBrick.visible = FALSE
ENDIF
ELSE
DrawFilledRect #pBrick.x,#pBrick.y,brickXsize,brickYsize,#pBrick.col
ENDIF
ENDIF
NEXT
RETURN
ENDSUB

SUB DrawBorder()
DrawFilledRect 0,0,width,border_size,border_color
DrawFilledRect 0,0,border_size,height,border_color
DrawFilledRect width-border_size,0,border_size,height,border_color
RETURN
ENDSUB

SUB DrawPaddle()
spw = GetSpriteWidth(pPaddleSprite)
x = MouseX() - spw / 2
y = height - GetSpriteHeight(pPaddleSprite) - bottomspace
IF x < (border_size + 1) THEN x = border_size+1
IF x + spw + border_size + 1 > width THEN x = width - border_size - spw - 1
MoveSprite pPaddleSprite,x,y
DrawSprite pPaddleSprite
paddleXpos = x
paddleYpos = y
RETURN
ENDSUB

SUB UpdateBall()
int dx,dy
int nCheck
IF ball_captured
'just draw above paddle
ballXpos = (paddleXpos + GetSpriteWidth(pPaddleSprite) / 2) - ball_size / 2
ballYpos = paddleYpos - ball_size
MoveSprite pBallSprite,ballXpos,ballYpos
ELSE
'update the x and y position if needed and check hits. Check for greatest pixels moved
'dx and dy represent a change in x or y position.
dx = FROUND(ballXpos) - FROUND(ballXpos - (GetSpriteVelX(pBallSprite) * mAdjust))
dy = FROUND(ballYpos) - FROUND(ballYpos - (GetSpriteVelY(pBallSprite) * mAdjust))
IF dy OR dx
IF (current_yvel > current_xvel) THEN nCheck = current_yvel ELSE nCheck = current_xvel
for x = 1 to nCheck
ballXpos -= (GetSpriteVelX(pBallSprite) * mAdjust)/nCheck
ballYpos -= (GetSpriteVelY(pBallSprite) * mAdjust)/nCheck
MoveSprite pBallSprite,FROUND(ballXpos),FROUND(ballYpos)
IF CheckAllHits() = TRUE THEN x = nCheck
next x
ELSE
ballXpos -= (GetSpriteVelX(pBallSprite) * mAdjust)
ballYpos -= (GetSpriteVelY(pBallSprite) * mAdjust)
'MoveSprite pBallSprite,FROUND(ballXpos),FROUND(ballYpos)
ENDIF
ENDIF
DrawSprite pBallSprite
RETURN
ENDSUB

SUB CheckAllHits(),INT
'are we captured?
INT bReturn:bReturn = FALSE
IF ball_captured = FALSE
'hit a wall?
IF ballXpos < border_size
playwave sound1,@SNDASYNC | @SNDNOSTOP
SetSpriteVelX(pBallSprite,-current_xvel)
ENDIF
IF (ballXpos + ball_size) > (width - border_size)
playwave sound1,@SNDASYNC | @SNDNOSTOP
SetSpriteVelX(pBallSprite,current_xvel)
ENDIF
'hit the ceiling?
IF ballYpos < border_size
playwave sound1,@SNDASYNC | @SNDNOSTOP
SetSpriteVelY(pBallSprite,-current_yvel)
ENDIF
'hit the paddle?
IF SpriteCollided(pBallSprite,pPaddleSprite)
playwave sound1,@SNDASYNC | @SNDNOSTOP
bReturn = TRUE
SetSpriteVelY(pBallSprite,-GetSpriteVelY(pBallSprite))
CalculateDelta()
temp = GetSpriteVelX(pBallSprite) - deltaX
if(temp < -ball_size) THEN temp = -ball_size
if(temp > ball_size) THEN temp = ball_size
current_xvel = abs(temp)
SetSpriteVelX(pBallSprite,temp)
'avoid multiple hits
ballYpos = paddleYpos - ball_size-1
ENDIF
'lost the ball?
IF ballYpos > height
playwave sound2,@SNDSYNC
ball_captured = TRUE
num_lives--
IF num_lives = 0 THEN game_over = TRUE
ENDIF
'hit a brick?
'no need to check if ball is below the last row of bricks
IF ballYpos < lastY
check_others = TRUE
FOR pBrick = EACH brickList AS brick
IF check_others
IF #pBrick.smashed = FALSE
MoveSprite(pBrickSprite,#pBrick.x,#pBrick.y)
IF SpriteCollided(pBrickSprite,pBallSprite)
playwave sound1,@SNDASYNC
#pBrick.smashed = TRUE
check_others = FALSE
score += 10
bReturn = TRUE
if abs(FROUND(ballYpos) - ( #pBrick.Y + brickYsize)) < 2 | abs(FROUND(ballYpos)+ball_size - #pBrick.y) < 2
'ball hit on top or bottom, reverse Y direction and place ball
SetSpriteVelY pBallSprite,-GetSpriteVelY(pBallSprite)
if abs(FROUND(ballYpos) - ( #pBrick.Y + brickYsize)) < 2
'ball hit on bottom
ballYpos = #pBrick.y + brickYsize + 2
else
ballYpos = #pBrick.y - ball_size - 2
endif
else
'ball hit on left or right, reverse X direction and place ball
SetSpriteVelX pBallSprite,-GetSpriteVelX(pBallSprite)
if abs(FROUND(ballXpos) - (#pBrick.x + brickXsize)) < 2
'ball hit on right
ballXpos = #pBrick.x + brickXsize + 2
else
ballXpos = #pBrick.x - ball_size - 2
endif
endif
ENDIF
ENDIF
ENDIF
NEXT
ENDIF
'check for end of level
level_end = TRUE
FOR pBrick = EACH brickList as brick
if #pBrick.visible THEN level_end = FALSE
NEXT
IF level_end
level++
ListRemoveAll(brickList,TRUE)
brickList = ListCreate()
num_lines += 2
CalculateBrickSizes()
InitializeBricks()
ball_captured = TRUE
ENDIF
ENDIF
RETURN bReturn
ENDSUB

SUB ShowStatus()
WriteText border_size+1,border_size+1,"Balls:" + str$(num_lives) + "  Level:"+str$(level) + "  Score:" + str$(score)
'WriteText border_size+1,25,str$(fps) + str$(current_xvel) + str$(deltaX)
RETURN
ENDSUB

SUB FROUND(flNum as FLOAT),INT
RETURN INT(flNum + .5)
ENDSUB

'sound files converted to data statements. First datum is length of sound
DATABEGIN plink2
DATA 1068
DATA 82,73,70,70,36,4,0,0,87,65,86,69,102,109,116,32,16,0,0,0,1,0,1,0,17,43
DATA 0,0,17,43,0,0,1,0,8,0,100,97,116,97,0,4,0,0,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,3,2,14,36,67,103,142,179,212,237,252,255,246,226,197
DATA 163,125,87,52,25,7,1,6,23,50,84,122,160,196,225,245,255,252,238,213,182,145,106,70,38
DATA 15,3,2,13,35,65,102,139,177,210,235,251,255,247,228,201,166,128,90,55,27,8,1,5,21
DATA 46,79,117,156,192,222,243,254,253,241,218,188,151,112,75,43,19,4,1,10,30,59,93,131,169
DATA 204,231,248,255,250,234,209,175,137,99,63,34,13,2,3,15,38,70,106,144,181,213,238,252,255
DATA 246,226,199,163,125,88,54,26,8,1,6,22,46,79,117,156,191,221,243,254,253,241,220,189,153
DATA 116,78,45,21,5,1,8,27,55,88,126,165,199,227,246,255,252,237,213,181,145,106,70,39,16
DATA 3,2,12,32,61,97,134,172,205,232,249,255,250,234,207,174,137,99,64,34,13,2,3,15,37
DATA 67,103,140,178,210,235,250,255,248,230,202,169,131,94,59,31,11,2,4,17,40,71,108,145,182
DATA 213,238,252,255,246,227,200,165,128,90,56,29,10,1,4,18,43,74,111,148,184,216,239,252,255
DATA 245,226,197,163,126,88,55,27,9,1,5,19,44,75,111,150,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,251,181,74,5,25,120,220,254,197,91,11,15,102,206,255,212,109
DATA 19,8,84,191,253,225,128,30,3,65,174,248,236,147,44,1,50,154,241,245,165,59,2,36,136
DATA 230,251,184,75,6,23,117,218,255,200,94,13,14,97,202,255,216,114,22,6,78,185,252,229,134
DATA 34,2,60,168,246,240,154,49,1,44,148,237,248,174,65,3,30,126,225,253,192,84,8,18,106
DATA 211,255,209,105,17,10,87,193,253,223,125,29,3,68,175,249,236,147,43,1,50,154,240,245,166
DATA 60,2,34,133,229,252,186,79,7,22,112,214,255,205,100,15,11,91,197,254,221,122,27,4,71
DATA 178,250,234,144,42,1,52,157,241,245,165,59,2,35,136,230,252,185,78,6,22,112,214,255,205
DATA 100,15,11,91,197,254,221,122,27,4,70,177,249,235,145,43,1,50,154,240,246,168,61,2,34
DATA 133,228,252,188,81,7,20,109,212,255,207,103,17,10,85,192,253,225,128,31,3,64,171,247,239
DATA 151,47,1,45,148,237,248,174,67,3,29,125,222,254,196,90,11,15,100,205,255,214,112,22,6
DATA 77,184,251,231,137,37,2,56,160,243,243,162,56,2,37,137,230,252,185,78,6,22,112,213,255
DATA 206,102,16,10,87,193,253,224,126,31,3,64,171,247,239,153,49,1,44,147,235,249,177,70,4
DATA 26,120,220,254,200,94,13,13,94,200,254,219,120,26,4,71,177,249,235,145,44,1,49,151,239
DATA 247,171,65,3,30,125,223,254,195,90,11,15,99,204,255,217,116,23,5,74,181,250,234,142,42
DATA 1,51,154,240,246,169,63,3,31,128,225,253,193,88,10,16,100,205,255,216,114,23,6,75,181
DATAEND

DATABEGIN carbrake
DATA 14076
DATA 82,73,70,70,244,54,0,0,87,65,86,69,102,109,116,32,16,0,0,0,1,0,1,0,17,43
DATA 0,0,17,43,0,0,1,0,8,0,100,97,116,97,208,54,0,0,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
DATA 126,126,126,126,126,126,126,126,126,126,126,126,125,125,125,125,125,125,125,123,123,125,125,125,125
DATA 125,126,126,126,126,128,128,128,128,128,130,130,130,130,130,130,130,130,130,131,131,131,131,131,131
DATA 131,130,130,128,128,128,128,126,126,126,125,123,123,123,123,123,123,123,123,123,125,125,125,123,123
DATA 123,125,126,125,125,123,125,125,126,125,125,125,125,125,126,126,128,126,126,128,130,130,130,128,130
DATA 130,130,130,130,131,131,131,131,131,133,133,133,133,133,135,136,138,139,138,139,141,143,144,144,143
DATA 143,141,143,141,139,138,138,136,135,133,133,131,131,131,130,128,128,128,125,125,125,123,121,120,118
DATA 118,117,117,115,113,113,112,112,110,110,108,110,110,112,112,113,115,115,115,117,118,118,117,118,118
DATA 120,120,120,121,123,123,123,123,125,126,126,126,128,128,130,128,128,128,128,128,128,126,125,125,123
DATA 123,123,123,123,126,128,128,128,130,128,130,133,131,133,135,136,135,136,138,138,136,136,136,138,136
DATA 138,139,136,135,136,136,135,136,138,139,136,136,138,136,133,133,131,130,131,126,128,126,126,130,126
DATA 125,123,120,120,121,117,118,120,121,126,126,125,125,121,126,128,130,131,128,131,131,133,131,130,131
DATA 131,135,135,130,130,126,126,128,125,125,123,128,126,126,125,121,125,120,120,117,120,117,118,118,118
DATA 118,120,123,121,121,125,121,121,121,125,126,128,126,126,128,130,130,126,126,121,121,125,128,131,130
DATA 130,138,138,141,143,143,143,144,141,144,139,135,135,136,136,136,133,128,130,135,133,128,120,118,118
DATA 121,128,125,115,112,115,123,123,113,105,107,115,117,113,103,105,113,115,113,110,108,113,117,115,110
DATA 112,115,120,123,123,123,123,128,135,138,135,136,136,144,153,153,148,143,146,154,159,156,148,144,151
DATA 158,154,149,146,144,141,141,141,139,138,136,133,130,130,128,128,123,121,121,123,121,120,113,113,117
DATA 117,112,110,103,108,112,113,112,110,112,113,115,117,115,117,125,125,120,120,121,121,128,131,123,123
DATA 123,126,130,130,130,125,125,131,135,138,139,136,130,131,141,144,141,136,128,131,138,135,128,120,120
DATA 121,120,118,113,112,113,118,117,110,110,113,117,115,115,115,115,115,115,113,113,117,117,115,118,120
DATA 123,126,128,130,133,138,141,141,141,146,149,153,151,149,151,153,156,154,154,153,154,154,153,149,146
DATA 146,149,146,144,143,141,141,139,139,138,133,131,128,126,123,123,125,123,117,115,113,107,105,112,110
DATA 105,103,103,107,112,118,115,112,115,118,117,121,123,120,120,121,121,123,121,120,121,125,126,121,120
DATA 123,128,128,123,121,125,125,126,126,123,117,118,118,118,120,117,110,107,113,117,110,108,110,112,113
DATA 117,120,118,121,128,130,125,125,130,131,133,133,131,130,131,135,136,136,135,136,138,138,136,136,139
DATA 138,139,139,143,141,139,138,139,139,138,136,136,136,136,138,136,138,139,139,138,143,149,148,146,148
DATA 148,148,149,148,146,149,151,148,141,136,135,130,131,125,118,118,118,115,112,110,107,108,107,105,105
DATA 108,112,113,117,117,118,120,121,121,123,121,117,117,113,112,112,110,110,113,117,118,120,120,117,118
DATA 118,120,125,131,133,131,135,138,139,136,131,130,126,123,126,125,125,125,125,128,130,130,128,130,136
DATA 136,139,139,139,141,143,143,139,133,123,120,120,118,112,107,110,112,112,112,117,117,113,115,115,108
DATA 105,110,113,115,117,115,115,115,120,120,121,120,123,130,139,141,144,149,153,154,154,154,154,158,159
DATA 159,156,158,159,154,148,149,149,146,135,133,135,139,138,139,135,136,133,133,128,130,128,131,128,123
DATA 118,113,112,112,107,105,108,110,103,97,98,108,118,117,112,113,123,131,131,126,130,133,138,135,131
DATA 131,135,135,130,123,121,130,136,136,131,130,130,135,131,130,125,125,118,121,117,117,113,108,107,107
DATA 110,112,110,107,105,108,108,108,107,108,112,113,112,108,110,115,121,121,123,125,126,125,131,135,138
DATA 138,144,146,149,149,153,153,158,159,159,159,161,162,161,159,158,156,154,151,146,143,138,141,138,135
DATA 131,130,128,128,130,126,126,128,128,125,120,117,117,113,113,110,113,112,108,102,102,102,102,102,108
DATA 105,107,108,115,120,120,120,120,120,126,131,130,126,128,130,130,131,133,131,126,126,126,128,128,126
DATA 131,131,131,135,138,138,136,138,136,135,133,135,136,133,128,123,117,113,117,117,112,105,103,107,112
DATA 112,117,123,125,126,130,135,138,141,141,136,136,136,135,133,130,126,128,130,133,136,135,133,135,135
DATA 135,139,136,135,133,138,143,146,146,141,141,143,143,133,130,131,133,131,131,126,125,126,125,125,123
DATA 121,123,130,135,136,133,128,130,133,135,131,126,118,117,118,113,113,115,115,118,126,130,128,131,135
DATA 133,130,125,123,126,125,120,115,115,112,105,102,100,100,100,102,107,112,115,118,123,126,125,120,117
DATA 117,117,115,117,117,117,117,115,118,120,118,118,120,121,125,130,131,133,133,136,143,146,144,143,146
DATA 148,148,149,146,146,144,144,148,144,144,144,143,143,141,138,138,138,139,143,146,149,149,144,144,146
DATA 146,148,149,144,141,141,143,143,143,138,138,135,128,128,128,126,126,121,117,113,105,102,100,100,100
DATA 98,97,97,98,102,97,94,95,97,98,97,100,102,102,108,107,107,108,115,120,118,120,126,126,130
DATA 126,128,131,125,136,136,131,135,133,135,131,130,136,136,136,136,139,146,146,148,148,146,146,141,146
DATA 146,141,143,139,136,136,135,133,135,128,130,135,133,139,143,143,149,149,146,143,141,146,144,143,139
DATA 138,133,128,125,123,121,121,118,117,118,118,118,121,121,118,118,120,123,120,121,115,108,103,98,103
DATA 98,95,100,95,98,105,108,113,121,126,126,125,131,138,138,135,128,128,135,131,123,115,118,126,125
DATA 128,128,128,128,131,136,136,138,139,135,133,128,131,133,133,131,123,120,126,126,125,118,113,113,117
DATA 120,123,121,120,120,126,128,130,130,126,125,126,130,130,128,126,130,130,133,136,139,146,146,149,146
DATA 143,143,148,151,148,141,135,138,139,136,138,138,136,138,146,148,144,136,136,143,146,146,136,130,143
DATA 151,146,130,121,135,144,139,125,113,120,131,135,125,115,120,120,125,121,117,115,115,120,123,123,118
DATA 120,118,117,112,103,100,102,107,100,95,95,94,90,90,97,97,95,97,97,90,90,92,87,95,98
DATA 103,98,98,103,105,108,108,110,115,123,135,138,136,139,141,144,149,156,154,151,151,158,161,164,164
DATA 161,161,166,171,169,162,161,162,158,156,156,151,154,158,144,138,141,143,136,135,143,143,130,123,128
DATA 136,138,128,125,135,143,139,133,131,139,148,156,144,141,156,158,151,162,159,149,141,135,131,121,126
DATA 121,103,97,98,105,92,84,84,79,80,71,71,74,75,72,61,67,67,59,67,77,74,62,64,72
DATA 79,94,94,95,110,113,118,128,130,136,136,144,153,158,159,162,171,171,167,171,174,172,167,172,171
DATA 174,171,171,171,166,167,169,167,167,161,161,158,156,154,153,149,146,146,144,143,146,144,136,135,135
DATA 131,126,123,123,118,118,121,115,110,107,108,113,110,102,103,112,118,110,105,118,123,117,108,110,115
DATA 112,115,112,103,102,110,118,113,103,105,108,120,121,117,112,113,117,121,121,115,108,108,112,110,107
DATA 108,113,118,115,112,115,121,121,118,123,125,126,128,133,136,139,135,135,130,133,139,141,136,135,141
DATA 146,144,144,139,143,144,149,151,144,141,139,144,146,141,141,139,141,146,148,138,133,136,133,130,128
DATA 126,120,120,128,126,120,120,128,139,143,141,138,141,156,161,153,139,133,143,148,146,131,117,113,125
DATA 133,128,113,103,107,112,120,115,107,107,112,113,108,105,108,108,110,105,103,103,103,108,105,98,98
DATA 95,98,102,105,112,112,112,117,121,126,126,125,128,135,136,133,135,135,135,135,136,136,136,138,141
DATA 143,143,146,149,154,159,162,162,162,167,169,167,167,164,159,158,154,146,136,131,128,126,123,120,115
DATA 118,123,120,118,121,123,125,125,131,133,126,123,126,130,125,121,120,118,118,112,107,105,108,112,110
DATA 105,103,100,103,107,103,100,95,95,103,107,107,107,102,100,102,105,110,110,108,108,107,112,110,115
DATA 118,117,115,121,126,128,133,136,133,131,135,136,135,136,135,138,141,143,153,151,148,151,149,153,156
DATA 159,162,161,162,169,166,167,172,167,166,159,156,154,151,149,144,139,136,133,126,121,125,130,131,133
DATA 131,131,133,133,135,128,128,131,131,130,126,123,125,117,112,107,107,108,107,108,107,108,110,113,115
DATA 108,108,108,110,110,107,107,107,105,100,97,100,105,105,98,92,95,100,102,105,105,105,105,110,118
DATA 117,120,120,121,120,120,126,128,128,130,131,135,139,141,139,141,144,143,141,144,153,158,162,166,167
DATA 159,158,161,162,159,156,153,149,153,144,139,143,143,144,146,141,143,144,149,144,143,139,138,139,138
DATA 135,133,123,120,120,117,112,105,112,110,102,105,102,100,103,103,102,97,102,102,103,105,112,108,105
DATA 105,105,102,102,97,102,100,100,103,108,103,107,110,112,118,128,130,136,146,148,151,153,156,153,156
DATA 158,153,159,154,159,154,149,148,146,151,144,144,143,143,139,144,144,144,144,146,149,146,146,138,133
DATA 131,126,126,117,110,107,112,118,121,115,120,126,125,130,133,126,128,126,126,125,123,121,125,123,110
DATA 103,108,115,117,112,110,115,118,123,123,123,123,123,123,123,126,126,121,120,123,121,120,113,113,117
DATA 118,121,120,117,113,113,121,125,117,112,113,110,118,118,120,126,125,121,121,118,118,115,112,120,121
DATA 112,113,115,123,138,143,135,138,156,162,158,156,166,179,184,169,151,151,164,169,162,154,144,144,158
DATA 166,159,156,158,156,154,151,149,148,141,135,131,131,121,105,92,94,94,89,87,80,74,75,75,77
DATA 84,89,92,94,90,94,105,112,115,115,120,113,112,117,117,117,115,117,112,112,117,123,130,136,130
DATA 128,136,148,146,146,146,151,148,149,143,135,136,138,136,133,117,112,126,146,136,120,126,138,144,143
DATA 141,133,117,135,153,151,158,167,161,149,158,181,187,185,176,161,167,194,199,166,143,153,153,154,161
DATA 148,128,113,120,125,115,94,72,67,85,80,61,46,46,51,51,43,34,30,33,48,49,43,41,49
DATA 56,62,74,79,84,95,110,115,117,128,138,138,149,158,156,156,161,162,167,179,182,179,179,189,195
DATA 200,200,194,190,192,192,189,184,189,189,184,184,181,177,171,167,158,154,161,159,151,146,144,144,143
DATA 148,146,136,136,138,133,128,125,118,108,102,95,85,84,87,82,74,71,74,77,84,87,82,79,82
DATA 89,92,85,85,89,87,94,97,94,94,98,105,108,107,102,97,100,108,117,113,110,117,115,118,131
DATA 135,138,144,146,146,146,148,146,149,144,144,146,148,169,172,161,161,169,177,181,176,162,156,159,154
DATA 146,154,159,149,139,141,148,154,149,135,130,139,146,139,133,128,123,123,120,112,105,102,107,115,108
DATA 100,95,102,103,92,82,82,89,98,100,87,84,94,105,110,108,105,97,98,103,107,103,102,102,100
DATA 107,105,98,105,113,118,113,115,120,125,131,138,139,141,144,158,164,164,169,172,174,177,185,189,182
DATA 179,184,181,177,181,169,158,164,164,159,151,146,151,162,166,161,144,141,149,161,156,136,130,135,133
DATA 126,113,110,120,115,100,92,108,118,110,89,84,97,103,97,89,80,85,97,94,87,77,77,82,77
DATA 75,75,80,84,82,85,87,92,95,89,97,107,110,110,108,115,126,135,130,120,118,131,144,148,143
DATA 143,148,156,156,151,149,154,158,156,154,159,162,162,167,167,172,177,176,172,172,176,177,172,166,161
DATA 159,159,149,139,141,146,151,148,133,121,125,131,125,112,105,108,112,112,107,98,100,98,90,85,90
DATA 94,90,87,85,89,90,94,95,97,92,94,98,100,107,110,108,108,108,113,121,121,121,125,128,130
DATA 131,135,139,143,149,156,158,158,162,167,159,156,158,161,161,164,156,154,162,164,166,161,161,162,159
DATA 162,161,158,159,153,141,141,139,139,135,128,118,118,118,113,105,102,97,100,90,89,92,85,90,85
DATA 82,85,84,82,89,85,92,92,85,84,87,95,100,95,92,97,98,105,112,115,120,125,128,130,125
DATA 128,136,136,136,138,138,141,141,141,144,156,153,153,151,159,166,171,166,164,161,164,167,166,158,159
DATA 166,169,162,156,153,154,162,162,154,144,141,141,141,135,133,136,135,123,118,125,125,120,112,115,120
DATA 113,117,107,98,103,108,95,98,103,110,105,103,113,113,110,110,107,102,108,118,103,95,100,95,100
DATA 107,100,90,85,103,121,110,100,97,108,117,108,105,105,97,110,120,117,110,112,120,136,139,151,164
DATA 171,171,172,182,197,203,185,176,185,195,210,199,181,187,199,190,179,174,176,185,184,167,156,149,156
DATA 148,128,113,113,100,95,85,79,75,67,57,48,61,59,48,51,62,67,67,74,82,85,90,89,85
DATA 80,95,95,85,84,103,105,100,112,120,123,118,120,125,123,126,125,130,138,120,110,117,135,143,138
DATA 141,139,146,144,136,179,179,141,117,138,176,192,194,192,194,218,228,226,225,217,217,218,222,220,220
DATA 210,184,179,189,192,177,144,136,133,141,139,120,100,82,82,74,57,44,38,33,28,20,7,10,10
DATA 8,3,0,2,10,20,23,16,16,39,62,59,61,84,108,118,120,128,135,148,153,153,149,159,174
DATA 177,176,184,189,187,194,202,203,195,189,200,215,212,197,195,199,195,203,205,200,194,194,189,182,189
DATA 185,167,162,158,154,146,141,141,135,133,133,121,112,112,115,120,103,85,87,87,89,77,66,61,66
DATA 82,89,84,67,54,54,69,74,75,75,77,77,82,87,97,97,92,92,98,103,108,100,90,100,113
DATA 120,123,118,118,128,141,162,158,149,149,151,166,177,179,192,210,208,195,195,200,207,213,210,195,194
DATA 197,192,176,158,146,144,143,139,128,123,130,133,110,90,94,108,107,87,75,72,75,74,67,66,56
DATA 49,51,61,61,57,67,72,67,62,66,85,89,80,82,102,110,107,113,131,143,144,139,143,143,146
DATA 146,148,161,162,159,167,171,171,176,181,176,166,176,190,194,187,176,174,181,190,192,179,177,184,182
DATA 177,169,151,144,141,131,123,118,120,121,123,108,92,100,110,108,105,102,102,98,103,102,87,77,77
DATA 82,92,92,89,92,92,94,84,82,92,100,98,90,100,113,112,108,118,128,125,123,110,121,133,130
DATA 115,115,121,125,126,126,125,128,135,136,133,149,164,159,164,177,184,182,176,174,182,181,172,166,166
DATA 159,148,146,146,143,131,123,126,135,131,118,113,117,121,118,118,117,113,117,115,108,105,103,90,80
DATA 82,89,85,75,72,80,87,89,89,92,97,98,107,105,108,115,117,120,126,135,138,136,136,131,131
DATA 138,143,146,153,153,156,156,162,166,167,181,181,184,182,195,192,185,177,176,171,169,166,162,154,143
DATA 136,120,112,117,117,112,110,120,113,113,110,110,110,112,110,113,107,100,97,89,87,87,80,75,75
DATA 79,82,89,87,90,92,94,94,105,107,110,121,130,131,130,138,141,139,144,144,141,149,146,143,139
DATA 146,146,146,144,141,143,151,149,151,151,162,161,154,149,156,162,166,153,138,130,136,130,117,97,92
DATA 110,120,117,112,118,130,133,126,118,121,133,126,125,133,139,133,120,103,105,113,112,107,100,100,102
DATA 102,107,105,105,110,110,107,95,102,110,110,113,94,90,110,121,105,98,113,115,118,121,143,154,151
DATA 149,149,159,185,190,176,161,185,217,212,192,187,195,202,197,182,177,177,166,154,144,154,148,120,110
DATA 108,118,112,102,84,75,79,94,95,87,89,92,87,92,94,94,92,92,92,90,87,92,94,82,80
DATA 94,98,92,87,89,97,100,98,98,100,95,98,105,131,133,103,100,107,125,143,126,94,118,153,161
DATA 167,184,182,177,176,205,223,231,233,220,217,226,241,235,228,213,202,203,202,200,182,162,161,146,139
DATA 138,120,102,102,117,95,69,56,51,53,44,30,20,18,18,20,15,10,8,2,18,39,43,33,36
DATA 57,77,82,87,100,120,121,120,126,144,162,151,131,146,172,174,169,169,177,179,181,185,189,197,212
DATA 210,195,200,213,212,189,176,179,185,190,185,149,131,159,177,166,143,126,128,156,156,135,115,120,130
DATA 131,123,120,110,103,103,100,87,80,80,80,72,64,71,74,72,75,82,77,71,77,87,102,97,75
DATA 82,105,126,120,98,100,123,135,138,126,108,110,128,151,158,138,135,171,185,192,194,185,192,207,210
DATA 205,194,195,194,192,194,185,171,154,154,159,156,144,130,125,126,123,108,98,112,113,100,82,75,79
DATA 77,67,56,54,51,51,53,48,53,54,66,74,71,69,71,94,112,120,117,120,126,138,141,135,126
DATA 133,146,153,141,131,144,156,161,174,176,171,167,169,172,187,197,182,164,164,164,169,167,159,141,138
DATA 139,138,135,131,130,125,126,126,121,112,115,125,121,118,126,126,125,120,117,123,117,112,103,98,100
DATA 98,95,92,90,94,90,89,94,98,100,112,117,117,126,130,131,136,133,131,130,120,115,115,130,138
DATA 131,138,146,153,154,153,153,159,164,166,176,171,166,159,158,162,156,144,135,139,146,139,130,126,128
DATA 125,120,120,118,125,126,125,118,117,112,107,103,97,87,84,89,95,89,77,77,90,100,100,89,92
DATA 103,115,120,115,117,126,130,130,125,123,138,149,146,151,162,164,159,153,156,161,159,156,154,156,154
DATA 149,143,141,138,135,133,136,138,136,136,133,126,120,121,125,120,113,113,112,118,120,115,115,108,112
DATA 115,108,105,110,108,97,102,102,102,110,105,102,112,120,125,125,126,138,144,153,154,156,161,171,181
DATA 167,162,162,159,164,158,153,149,151,154,149,144,143,144,148,141,136,128,130,113,100,105,107,98,90
DATA 85,90,89,97,95,92,105,110,102,102,115,118,115,115,108,108,112,105,95,92,105,97,77,75,89
DATA 107,112,103,84,89,128,126,98,97,115,138,148,141,133,136,166,177,172,171,174,167,185,189,179,181
DATA 184,190,195,182,187,195,197,189,181,185,194,187,174,158,153,151,139,112,110,123,117,100,87,79,82
DATA 95,98,74,59,67,79,89,89,80,77,77,75,67,64,77,75,69,71,59,66,80,82,79,85,92
DATA 95,98,121,125,112,120,141,148,153,149,149,154,164,162,158,149,172,195,208,223,215,207,217,223,218
DATA 213,207,195,205,212,202,190,185,182,181,190,171,148,143,133,138,110,92,89,79,66,54,48,44,36
DATA 28,25,23,21,16,8,11,28,28,23,33,46,56,69,80,90,100,121,130,128,136,146,144,148,153
DATA 149,143,156,176,174,177,192,200,205,197,195,200,199,202,190,182,182,187,189,179,174,177,174,162,162
DATA 166,161,159,138,121,126,136,131,123,120,117,113,108,90,79,79,67,67,79,82,77,71,57,61,74
DATA 75,71,74,75,77,97,115,107,94,94,100,97,97,112,125,139,148,148,161,167,167,167,187,189,171
DATA 166,174,181,200,195,179,174,176,176,172,176,158,149,154,161,166,148,125,120,123,136,139,121,113,121
DATA 125,113,100,87,75,69,89,82,74,89,95,84,74,80,87,82,80,87,89,97,102,100,98,94,97
DATA 110,108,103,117,126,136,135,146,149,161,172,166,161,174,187,189,174,174,182,182,176,159,148,149,148
DATA 149,151,143,133,131,125,131,131,121,118,123,120,123,112,108,110,95,82,95,105,108,105,97,103,103
DATA 97,102,102,102,103,102,98,108,113,108,108,110,115,123,118,112,105,118,136,141,135,130,131,130,141
DATA 151,154,153,154,158,158,171,176,171,154,153,161,161,167,162,154,153,153,158,153,148,144,141,138,138
DATA 135,117,105,95,94,98,103,95,85,98,108,102,98,95,105,112,107,107,105,95,98,102,112,110,103
DATA 103,105,112,126,133,141,146,143,144,154,159,166,161,158,159,154,158,158,156,149,146,146,141,139,139
DATA 138,136,144,133,128,133,125,120,110,105,108,108,102,92,89,85,74,74,75,77,80,85,95,97,103
DATA 95,94,103,117,126,136,131,138,148,151,151,154,151,153,153,156,164,171,171,169,167,171,177,187,184
DATA 172,166,176,181,169,156,141,136,139,144,138,131,135,136,126,108,102,117,123,108,84,82,108,120,105
DATA 85,69,67,79,89,69,62,71,71,72,75,69,77,77,90,98,90,100,115,125,131,138,144,148,133
DATA 123,138,156,146,144,153,158,169,164,166,184,176,174,185,194,199,190,182,172,174,190,176,143,144,153
DATA 153,141,117,103,112,121,115,115,105,102,118,115,100,100,100,102,95,95,94,94,90,82,69,77,89
DATA 84,74,71,67,95,107,80,77,105,133,123,107,107,115,131,123,92,121,154,167,158,171,182,187,207
DATA 212,205,195,199,217,215,195,200,205,207,208,210,190,181,184,176,167,151,138,133,125,117,103,85,69
DATA 69,72,62,39,26,36,39,41,34,39,53,53,44,49,61,72,72,72,75,77,92,107,120,126,135
DATA 138,141,162,167,153,158,164,166,172,176,174,171,166,156,151,154,151,149,158,153,153,158,159,167,179
DATA 161,146,161,162,144,135,146,139,128,130,125,121,131,126,115,107,105,97,92,97,100,85,77,92,89
DATA 89,103,90,69,77,95,105,97,75,74,107,138,143,130,126,148,166,172,182,181,184,190,187,194,192
DATA 174,181,182,172,162,158,159,174,181,148,121,123,135,125,103,90,90,97,97,90,82,92,98,95,90
DATA 90,97,97,102,112,107,90,98,107,103,100,100,89,92,110,118,118,117,126,130,118,110,120,144,156
DATA 139,121,136,169,177,159,153,153,164,158,159,172,171,158,151,156,171,172,149,126,135,148,144,128,126
DATA 126,110,100,103,107,107,110,107,112,110,107,108,120,115,107,102,107,118,112,103,102,103,103,85,89
DATA 115,115,103,105,107,115,130,133,125,131,138,135,144,161,151,133,120,130,153,169,153,126,118,128,148
DATA 158,146,133,133,146,156,146,139,136,143,141,139,136,133,133,139,139,130,121,123,126,118,121,135,126
DATA 126,125,110,112,117,121,113,108,110,115,121,125,115,107,110,112,125,123,113,120,125,133,141,148,138
DATA 131,130,139,146,139,136,144,139,133,130,126,118,121,126,120,112,117,120,118,113,107,113,112,103,98
DATA 98,103,110,103,103,103,107,112,113,120,123,131,133,139,146,146,149,161,164,161,162,167,169,162,164
DATA 166,162,162,161,151,158,164,156,143,138,154,149,138,130,126,123,128,133,121,117,112,113,113,107,97
DATA 100,92,84,82,79,85,85,77,80,82,84,95,102,90,79,89,100,115,112,105,110,128,133,148,158
DATA 151,161,159,146,149,171,181,161,138,128,158,174,174,167,167,171,174,176,172,161,162,164,143,138,141
DATA 128,121,126,143,138,108,87,87,115,128,98,77,71,89,113,107,87,80,84,85,87,89,90,84,72
DATA 82,92,92,72,69,87,102,110,89,82,117,131,120,103,123,146,148,153,162,162,166,167,179,195,199
DATA 199,195,213,235,225,218,220,208,203,212,213,205,194,176,172,176,167,148,131,113,117,112,97,87,77
DATA 71,56,43,54,36,34,43,39,48,51,53,54,66,72,64,67,77,85,77,85,112,131,130,135,151
DATA 153,159,154,149,156,159,162,162,161,158,154,146,151,151,143,149,167,161,144,151,161,171,154,138,146
DATA 158,156,135,113,123,120,121,125,118,120,117,126,130,126,115,105,108,90,69,71,79,89,85,84,89
DATA 79,100,120,123,125,120,126,136,146,154,169,172,171,162,158,167,182,182,161,156,169,166,161,156,158
DATA 139,121,126,136,153,149,130,118,118,120,113,92,84,102,100,90,90,92,110,117,105,103,107,112,110
DATA 110,113,118,121,121,117,117,120,138,148,148,151,143,144,149,148,146,135,141,141,123,118,123,139,148
DATA 133,117,118,135,141,125,125,117,112,120,133,139,126,115,100,112,139,138,123,120,118,135,153,151,133
DATA 135,135,118,110,121,121,118,113,105,107,125,118,98,115,141,141,120,105,112,135,143,117,98,118,146
DATA 151,146,141,126,121,115,121,130,128,126,123,123,117,118,131,131,131,141,130,117,138,148,141,131,113
DATA 125,136,135,128,117,131,139,135,135,135,136,139,128,120,117,117,120,123,121,125,133,135,141,148,148
DATA 148,148,138,138,143,135,130,120,123,117,112,123,135,138,126,118,112,113,115,112,107,107,108,108,110
DATA 115,115,103,87,94,98,103,113,112,113,118,117,123,131,133,139,136,136,156,161,149,141,149,158,161
DATA 158,161,166,177,174,161,153,159,154,149,151,148,146,141,138,128,130,135,128,126,126,121,110,105,121
DATA 115,94,74,71,98,113,97,80,53,54,94,105,72,64,89,94,120,131,120,126,131,146,151,130,138
DATA 133,148,153,141,148,169,166,159,154,162,182,169,146,141,156,164,146,139,158,169,164,133,126,136,144
DATA 120,105,117,117,105,97,107,113,120,115,100,103,110,117,118,105,84,89,98,113,117,105,87,85,102
DATA 90,89,113,117,94,89,102,97,102,121,118,92,105,130,133,148,156,148,149,159,149,151,167,181,197
DATA 195,164,159,187,207,208,197,174,164,190,205,179,149,139,139,131,141,148,128,117,115,98,108,100,84
DATA 69,71,69,53,53,64,82,85,87,89,87,84,102,131,139,117,125,133,128,139,153,154,156,159,143
DATA 139,158,151,146,139,149,143,143,146,128,128,146,154,130,113,97,100,128,149,130,105,107,130,138,112
DATA 100,89,100,113,95,100,121,130,110,102,110,117,113,112,107,92,103,110,115,128,135,126,133,141,154
DATA 151,158,161,143,138,141,159,159,158,166,164,161,166,161,159,161,153,131,123,131,133,115,107,110,118
DATA 121,97,92,110,110,102,103,95,97,107,100,94,92,105,107,95,112,123,125,125,125,121,136,167,176
DATA 177,164,159,176,185,194,189,179,164,156,144,139,156,154,139,121,100,102,115,126,123,110,85,84,112
DATA 133,112,98,89,89,103,110,108,107,113,112,105,108,117,113,118,113,120,121,115,121,128,130,131,120
DATA 112,118,121,130,131,138,138,123,121,144,153,149,136,115,108,125,153,141,128,123,126,143,143,130,118
DATA 135,136,121,135,141,141,153,154,146,131,131,131,128,135,130,115,105,108,107,95,103,108,103,115,117
DATA 105,117,133,130,138,136,131,133,144,148,144,154,159,154,146,143,143,146,146,138,128,130,131,133,133
DATA 123,112,108,112,110,103,107,112,110,113,112,108,112,107,98,89,84,98,105,117,113,115,125,131,148
DATA 143,133,146,144,141,141,148,153,161,159,158,148,146,149,154,151,153,136,135,153,161,146,136,131,136
DATA 139,136,121,115,125,131,120,115,123,113,115,110,107,108,89,80,79,102,115,90,87,100,108,120,118
DATA 105,123,139,123,128,139,148,154,138,125,133,161,174,131,123,159,167,158,151,141,130,133,136,131,136
DATA 138,125,117,110,126,123,115,131,108,118,126,113,121,115,110,117,125,125,103,90,125,143,148,126,107
DATA 113,110,126,138,123,112,110,128,131,133,133,113,102,95,90,112,120,118,118,102,118,143,148,151,153
DATA 144,130,136,154,182,169,162,161,154,171,169,164,148,151,159,133,126,135,138,135,130,126,133,131,115
DATA 89,95,113,105,82,80,90,92,100,97,92,92,92,80,112,133,136,131,125,133,139,153,151,148,149
DATA 146,139,139,143,135,130,131,131,143,158,144,131,131,123,117,117,128,131,125,112,113,133,151,153,125
DATA 131,125,131,138,112,130,135,117,94,97,113,115,117,110,105,121,143,131,126,118,115,125,105,123,130
DATA 133,126,113,123,121,126,130,123,144,153,144,143,159,164,166,144,139,151,162,156,126,125,146,144,125
DATA 110,107,110,112,108,108,100,95,89,94,103,98,94,90,100,113,118,125,139,141,126,125,139,151,167
DATA 164,138,123,143,161,174,158,125,123,151,171,153,133,125,121,126,130,135,128,126,121,120,130,133,120
DATA 110,113,107,113,126,120,120,138,138,126,143,136,121,123,121,135,144,146,120,118,136,135,126,121,126
DATA 135,133,113,108,120,113,108,103,95,97,120,123,115,110,107,105,123,144,135,123,128,131,138,136,135
DATA 133,125,120,130,133,130,131,128,120,130,125,115,121,125,123,121,108,103,121,125,125,123,125,133,141
DATA 138,139,141,143,149,153,148,139,136,151,156,154,143,143,141,135,135,133,128,126,128,130,120,115,115
DATA 95,108,112,103,98,90,98,105,117,117,108,112,115,112,125,131,131,128,135,144,144,146,153,148,144
DATA 146,144,143,139,144,151,154,158,151,139,136,135,131,128,128,125,121,131,136,126,115,118,121,103,97
DATA 110,117,121,112,92,94,112,118,115,105,103,117,126,131,115,118,128,121,118,136,144,146,143,135,135
DATA 149,158,133,130,143,151,158,158,136,123,144,146,133,128,126,126,118,112,108,113,131,117,98,113,118
DATA 117,125,112,100,110,113,115,126,148,138,126,128,117,118,130,113,94,112,130,135,135,133,130,123,138
DATA 126,105,108,113,121,131,138,131,143,151,148,141,154,164,159,154,151,149,164,171,159,144,144,148,133
DATA 131,138,130,117,98,94,102,118,115,100,92,92,92,98,95,80,72,79,84,72,89,112,115,108,94
DATA 102,130,153,154,138,141,154,161,164,156,151,156,169,162,159,162,156,159,159,153,153,162,169,161,149
DATA 149,133,123,133,115,98,110,118,118,125,125,105,102,100,97,97,105,105,87,98,113,115,113,108,107
DATA 117,123,123,113,120,123,123,133,130,118,130,143,135,128,135,135,138,141,138,133,144,149,149,149,146
DATA 144,133,130,131,135,136,125,118,121,128,130,123,118,117,113,100,107,110,118,117,112,113,120,133,130
DATA 117,120,126,126,126,131,131,136,148,144,136,139,146,146,146,144,139,138,136,143,146,143,136,141,144
DATA 139,131,123,125,128,130,123,113,112,117,120,123,118,115,117,113,113,115,115,118,117,123,117,120,128
DATA 121,120,123,123,118,120,128,125,123,125,125,121,128,130,121,125,130,131,123,125,128,133,135,136,139
DATA 136,139,143,144,141,135,135,133,138,143,144,139,131,123,118,120,118,120,115,118,117,113,113,107,105
DATA 110,110,107,107,105,115,121,118,118,125,128,133,133,135,139,144,143,139,138,141,149,146,146,146,141
DATA 135,138,135,133,138,130,121,118,120,120,115,110,110,115,112,110,113,115,120,118,117,117,120,125,126
DATA 125,125,131,128,131,135,139,146,144,138,139,146,144,146,153,149,151,153,146,148,148,146,138,126,125
DATA 126,130,126,120,120,123,125,126,120,110,110,113,117,120,118,112,112,115,115,117,123,125,121,126,128
DATA 126,120,117,120,125,128,125,121,120,125,126,125,126,131,128,121,120,121,126,121,121,120,112,115,118
DATA 120,120,117,113,115,123,130,135,141,135,131,133,139,138,136,130,128,136,146,141,131,136,141,141,146
DATA 139,126,128,141,143,146,141,136,135,143,148,139,136,141,139,135,133,128,131,135,130,128,125,121,121
DATA 118,121,118,107,105,102,102,103,102,103,105,105,105,107,107,102,105,108,107,102,107,112,121,125,125
DATA 121,123,131,141,141,139,138,143,156,156,149,154,161,159,154,149,151,153,154,154,151,148,144,144,141
DATA 138,130,121,117,117,118,113,108,103,105,105,103,103,107,107,108,113,112,113,115,118,120,121,115,118
DATA 131,135,135,133,130,136,144,144,144,146,143,138,136,139,144,144,136,128,123,123,120,112,103,107,113
DATA 115,113,118,128,139,136,130,118,118,118,115,115,112,113,120,120,123,138,148,146,141,136,133,133,128
DATA 117,117,121,130,138,146,148,154,161,162,161,143,123,115,115,115,112,125,136,143,148,156,159,161,153
DATA 128,103,90,95,100,112,123,117,115,125,146,156,144,130,117,112,107,94,82,75,100,125,115,103,118
DATA 143,153,154,153,144,138,128,107,92,94,110,121,126,131,125,136,164,185,189,162,141,113,100,98,105
DATA 120,128,126,148,164,148,146,149,128,102,80,67,77,102,115,130,161,143,130,130,117,115,108,98,112
DATA 139,139,105,105,149,192,184,146,92,77,123,167,164,130,121,107,89,97,130,167,166,125,100,130,179
DATA 192,166,118,84,97,128,159,125,94,103,126,133,143,156,166,156,108,71,98,151,151,97,59,62,85
DATA 110,108,135,176,177,158,143,128,133,139,107,75,79,94,123,177,185,189,166,153,154,149,154,161,156
DATA 107,80,94,143,192,187,139,97,107,118,149,172,176,141,92,57,72,128,164,139,102,79,84,108,138
DATA 156,149,113,69,59,67,61,92,128,166,123,71,94,136,171,141,103,123,144,98,71,90,141,194,172
DATA 110,80,105,144,176,176,177,182,161,107,80,84,138,166,113,85,115,154,195,192,139,144,169,166,123
DATA 97,84,85,108,123,172,187,139,133,151,179,194,184,164,139,87,62,75,97,159,189,136,77,84,139
DATA 166,138,135,161,120,62,71,59,75,128,143,141,103,56,48,84,112,143,156,120,66,41,75,117,143
DATA 158,121,113,100,80,90,144,176,177,179,120,138,184,217,212,199,149,133,146,159,117,103,108,161,158
DATA 112,136,164,195,194,167,136,84,108,143,108,69,48,57,79,94,117,153,164,162,164,156,130,113,108
DATA 102,71,51,75,94,85,103,125,143,166,194,199,184,171,151,115,80,87,108,90,67,82,103,118,141
DATA 179,195,182,184,166,144,125,94,80,87,92,85,98,112,128,146,164,182,192,192,179,161,139,115,87
DATA 87,89,67,62,75,97,115,128,153,182,190,181,179,166,144,126,87,61,69,69,113,135,128,102,102
DATA 130,159,205,185,154,172,187,166,98,110,95,113,190,144,84,72,98,146,182,103,95,153,185,182,138
DATA 77,95,113,149,120,84,54,49,72,102,118,112,135,166,189,194,148,82,136,167,143,102,67,54,85
DATA 139,123,105,94,128,146,184,171,126,179,184,171,154,120,74,75,107,95,64,67,90,108,125,154,162
DATA 135,176,195,185,171,139,90,94,136,125,82,66,82,102,121,133,156,184,161,194,210,195,167,138,105
DATA 115,128,90,64,74,102,139,177,153,125,120,151,195,213,174,113,120,158,171,143,105,67,89,117,136
DATA 80,54,74,108,159,161,103,57,85,120,141,117,105,113,128,128,98,74,51,72,103,97,87,107,131
DATA 171,187,161,202,210,194,194,185,156,143,130,108,97,105,100,115,135,121,128,144,162,187,199,185,174
DATA 146,130,118,100,66,41,33,38,51,87,90,89,117,136,156,176,179,167,138,126,125,98,74,57,53
DATA 69,103,90,87,118,138,151,176,202,208,203,197,185,166,131,113,100,118,98,71,66,75,105,125,148
DATA 174,162,195,208,192,174,164,139,143,146,131,107,75,64,82,77,125,118,110,133,164,181,208,197,151
DATA 123,162,190,184,164,148,117,74,89,130,113,71,57,75,92,123,141,131,156,158,167,171,161,138,113
DATA 103,84,56,30,31,57,84,82,77,100,121,139,169,182,166,153,154,156,141,126,112,103,90,71,69
DATA 85,90,107,135,148,162,192,218,212,190,182,176,149,128,130,133,117,66,49,66,64,97,115,87,80
DATA 108,128,154,169,166,171,181,172,156,144,130,92,61,71,82,105,103,92,110,133,151,169,192,199,200
DATA 192,174,161,135,90,74,112,117,84,69,82,107,125,143,162,174,187,203,203,184,158,110,89,115,139
DATA 103,64,51,67,97,133,121,121,151,174,199,192,162,98,117,130,148,115,80,57,67,72,115,161,118
DATA 123,138,169,202,182,158,110,148,166,166,118,74,123,113,123,135,82,62,59,112,177,128,75,115,135
DATA 176,197,166,118,57,89,162,135,108,95,72,117,161,153,133,71,82,153,156,118,75,89,79,74,108
DATA 133,172,179,179,169,112,108,118,110,146,141,108,95,100,118,141,202,203,141,87,112,167,200,169,108
DATA 67,92,158,177,128,120,118,144,117,94,100,135,146,159,130,125,158,174,172,153,136,113,66,72,79
DATA 105,100,75,74,105,125,161,179,189,192,167,128,92,117,108,103,105,103,136,195,194,126,123,164,210
DATA 200,179,112,67,117,161,110,92,126,125,139,166,135,66,87,153,149,117,67,46,67,143,107,59,61
DATA 90,138,169,151,128,131,154,139,156,144,115,71,56,79,133,181,115,110,130,156,182,210,210,192,162
DATA 123,120,117,125,112,79,100,98,79,82,102,108,121,143,172,179,143,128,149,136,102,89,89,97,90
DATA 51,53,54,74,95,108,130,149,184,171,181,205,195,187,169,144,108,77,98,131,148,87,84,100,117
DATA 120,128,154,184,203,200,190,194,151,138,135,95,136,105,82,79,72,82,105,125,171,151,151,200,189
DATA 169,159,126,92,164,149,156,100,67,94,131,105,94,89,95,85,105,162,192,136,117,158,179,207,199
DATA 179,156,100,95,113,117,59,54,54,94,143,126,107,92,95,121,149,167,144,143,126,84,71,71,107
DATA 100,61,41,57,84,103,156,194,158,146,162,154,199,212,189,167,117,69,112,187,159,103,79,84,112
DATA 179,203,133,90,126,144,182,195,153,87,98,154,128,90,54,39,49,74,128,141,102,102,139,172,192
DATA 176,154,128,130,128,102,74,57,74,98,123,172,162,167,162,161,166,167,149,136,153,133,133,125,98
DATA 59,61,103,112,117,110,110,133,148,161,176,197,210,197,177,161,138,95,103,125,107,75,80,94,120
DATA 143,135,151,171,199,205,181,158,117,108,120,105,90,74,59,75,84,135,146,112,123,154,197,197,136
DATA 120,146,154,159,113,67,62,59,126,153,89,53,74,74,130,139,126,156,103,117,167,151,148,74,43
DATA 105,143,141,103,62,72,67,131,149,84,64,97,118,167,212,133,123,169,208,203,194,172,115,115,131
DATA 172,141,107,80,85,113,131,144,148,162,185,213,202,190,169,135,128,135,97,64,54,61,66,90,105
DATA 120,139,159,182,197,184,135,123,166,143,126,100,56,53,75,97,71,75,94,118,161,171,120,149,189
DATA 179,166,144,164,143,115,80,69,103,146,121,80,90,118,133,156,169,162,182,200,220,208,182,164,146
DATA 130,105,79,48,53,57,71,90,90,112,126,144,169,162,161,164,144,136,121,108,97,77,43,26,36
DATA 62,85,107,125,154,190,205,197,164,115,164,184,167,153,136,105,80,97,108,97,100,115,131,146,158
DATA 172,192,203,197,172,151,133,102,56,67,75,87,97,66,59,77,102,139,166,110,131,162,189,189,176
DATA 159,113,133,133,102,69,51,61,69,89,98,112,135,151,166,195,203,192,154,141,139,126,143,130,100
DATA 66,69,84,113,103,95,115,139,176,213,197,136,126,121,156,185,159,176,156,102,92,112,139,125,97
DATA 115,135,151,184,184,148,136,151,166,174,154,138,123,108,82,59,59,84,84,77,90,108,128,143,154
DATA 171,179,184,184,162,146,128,108,77,39,21,46,90,89,66,72,84,125,144,141,139,133,141,161,176
DATA 167,162,139,121,89,64,87,92,117,139,146,151,144,118,141,156,172,166,174,199,207,182,159,141,102
DATA 66,79,89,89,74,92,125,92,139,130,87,110,117,130,154,184,182,159,125,95,130,135,95,69,56
DATA 74,98,117,125,144,169,181,197,174,177,187,179,162,146,82,80,121,103,79,102,130,75,75,103,121
DATA 138,151,166,194,215,200,177,159,103,85,92,98,135,112,94,130,138,148,121,136,146,161,185,182,158
DATA 136,113,66,53,56,75,71,77,98,121,158,128,158,179,172,166,154,144,118,80,59,77,87,110,131
DATA 89,110,135,176,190,199,156,166,185,164,133,85,61,66,97,158,177,97,80,98,135,169,167,112,89
DATA 149,153,141,108,79,33,41,100,153,125,61,77,102,151,172,153,148,141,146,151,164,110,72,71,89
DATA 138,172,166,167,102,139,185,207,167,89,123,164,192,174,144,118,77,57,138,141,92,69,92,108,139
DATA 177,169,159,131,148,190,181,123,87,110,105,139,143,89,97,80,97,156,128,92,125,135,141,162,192
DATA 172,174,154,136,120,77,36,77,105,69,121,130,117,121,136,103,143,161,192,197,200,179,149,148,113
DATA 100,72,54,71,113,141,98,117,125,156,199,195,120,85,148,153,166,113,57,54,84,148,69,46,82
DATA 138,139,143,139,98,102,164,185,181,123,89,125,148,146,90,113,92,117,177,126,112,149,172,189,171
DATA 181,181,128,97,113,118,95,67,67,85,110,102,97,84,105,125,149,190,161,159,149,166,162,135,84
DATA 57,72,120,84,103,103,123,146,202,200,158,92,100,172,149,144,144,115,108,161,110,85,136,144,159
DATA 184,123,77,100,153,138,120,138,103,148,195,143,79,87,130,159,120,95,123,166,162,151,105,117,105
DATA 107,82,107,125,166,189,177,136,153,161,103,79,87,89,87,136,174,138,143,143,131,113,115,136,154
DATA 194,192,179,113,136,154,94,61,56,69,105,171,148,77,112,148,138,115,62,97,130,167,162,139,110
DATA 85,57,44,54,90,158,149,107,143,181,194,177,94,94,118,162,179,181,156,130,115,120,110,82,75
DATA 102,121,138,174,194,166,139,159,159,108,77,105,153,148,123,100,92,85,64,48,74,98,151,158,117
DATA 149,184,187,161,98,74,113,164,151,139,118,107,120,133,135,171,179,141,169,192,184,185,154,136,144
DATA 138,98,64,64,79,87,90,87,125,135,115,123,113,146,192,195,126,149,164,164,130,92,72,123,162
DATA 162,121,85,100,112,87,77,105,120,154,179,166,130,156,148,77,80,79,103,146,169,167,148,105,74
DATA 115,75,62,90,110,133,177,144,174,177,176,130,95,125,121,107,108,89,97,98,90,118,131,141,158
DATA 189,192,190,169,141,115,95,90,89,72,92,105,95,107,123,138,139,146,171,184,176,156,141,126,110
DATA 80,54,61,85,125,139,125,123,148,185,143,108,146,177,187,166,146,126,128,100,71,71,95,121,159
DATA 162,148,166,172,130,120,98,156,195,181,151,117,126,128,77,61,89,110,123,156,166,161,166,133,112
DATA 121,149,172,156,138,113,90,97,89,54,54,71,92,123,146,125,130,172,187,171,174,154,146,130,113
DATA 105,97,77,62,82,107,123,143,154,171,195,210,199,138,85,103,156,162,125,118,102,87,64,46,51
DATA 67,94,102,115,153,184,182,153,108,107,103,153,144,151,102,71,117,143,87,102,85,108,120,138,184
DATA 203,153,139,205,177,146,182,162,159,135,115,85,97,95,59,62,80,110,169,156,138,143,100,166,154
DATA 115,103,156,174,164,138,125,108,89,87,79,82,67,97,121,118,171,184,118,153,158,162,192,172,148
DATA 136,125,100,79,75,62,82,97,102,113,151,194,194,169,108,100,162,185,158,133,141,118,97,82,69
DATA 75,100,112,126,141,159,192,200,190,187,158,158,139,95,121,103,82,75,72,95,95,100,120,144,162
DATA 181,192,184,189,158,108,100,123,118,110,139,113,103,85,69,103,131,176,151,89,141,182,164,108,97
DATA 97,103,89,74,110,144,117,130,131,92,57,79,84,67,102,143,172,161,146,121,130,182,177,144,102
DATA 126,138,167,146,102,100,102,123,148,138,154,161,171,192,194,187,171,144,133,110,95,82,87,95,90
DATA 54,69,69,74,95,112,125,139,172,192,187,159,167,153,133,120,107,71,61,59,128,141,102,102,131
DATA 141,154,174,197,210,197,161,154,153,135,112,66,43,66,125,149,115,97,90,115,133,143,156,182,197
DATA 184,174,162,146,133,95,53,80,108,141,105,102,82,100,121,128,146,164,189,174,172,161,141,131,108
DATA 54,61,131,121,74,75,87,107,121,136,151,177,203,187,167,161,149,130,113,85,56,85,112,80,87
DATA 102,123,138,149,159,177,194,185,174,151,136,120,102,79,51,43,64,84,98,113,118,135,156,184,159
DATA 136,154,161,133,120,108,97,74,49,53,82,110,100,95,123,154,195,182,148,130,174,199,185,164,148
DATA 130,131,94,79,84,117,98,120,121,121,144,161,182,208,192,202,179,153,156,126,108,92,67,54,75
DATA 112,153,131,113,117,148,181,169,156,92,138,139,141,149,118,110,87,46,51,108,136,107,90,98,118
DATA 126,143,166,184,166,162,171,159,138,121,100,67,53,84,135,135,125,89,112,135,182,154,135,187,192
DATA 174,161,141,130,113,80,51,64,90,144,120,94,112,136,172,159,113,158,171,158,149,125,115,105,71
DATA 38,46,69,94,125,112,125,141,171,194,171,133,146,156,154,126,112,77,82,108,123,71,87,115,130
DATA 154,176,158,217,217,166,136,141,171,133,92,89,113,151,102,94,90,102,115,135,146,181,189,144,159
DATA 172,144,120,74,39,71,143,138,77,95,87,128,113,108,131,167,172,162,176,154,139,123,92,51,54
DATA 113,126,149,105,84,105,135,133,148,161,174,199,202,187,161,146,128,102,72,49,66,92,161,167,112
DATA 92,126,131,138,149,161,185,195,185,174,154,136,103,64,44,59,84,151,171,103,80,108,123,130,143
DATA 162,176,162,164,171,149,120,107,77,44,71,105,92,89,123,97,120,151,189,164,113,113,138,159,131
DATA 113,102,97,92,84,94,89,105,118,130,151,184,184,190,164,143,107,87,97,85,108,154,158,141,117
DATA 97,130,161,133,135,136,139,172,151,103,121,117,107,131,128,102,136,179,158,153,126,128,135,117,108
DATA 85,75,112,164,153,146,143,138,141,153,123,90,143,185,154,138,133,110,105,89,75,98,121,161,172
DATA 161,158,144,143,144,136,135,130,131,138,113,72,82,75,74,103,135,117,120,146,174,179,166,130,102
DATA 100,97,85,85,87,98,126,126,128,143,121,121,112,144,171,162,171,169,141,121,113,105,89,75,80
DATA 100,117,130,148,158,176,195,182,176,162,136,100,105,95,94,94,98,95,85,95,115,131,156,187,167
DATA 177,185,158,146,133,110,79,64,69,85,107,154,158,117,125,148,154,161,179,182,161,159,144,126,107
DATA 77,51,57,59,71,87,105,117,130,153,184,164,161,154,136,141,146,118,100,72,85,84,89,97,108
DATA 112,136,172,187,128,164,200,185,153,179,169,138,108,72,71,100,167,144,94,92,100,120,126,135,149
DATA 177,184,172,174,151,128,107,69,38,66,125,164,102,82,77,107,120,128,149,185,172,174,185,167,144
DATA 128,107,77,57,69,112,156,103,107,138,151,159,195,189,151,156,153,161,154,125,112,100,89,66,56
DATA 80,126,108,102,128,143,167,208,169,148,153,156,171,135,130,112,100,87,71,48,53,79,123,151,97
DATA 98,133,159,187,192,130,97,136,154,135,148,138,110,103,77,44,66,133,115,97,94,117,138,158,192
DATA 200,187,161,120,121,171,182,153,126,90,72,80,126,107,77,84,110,126,139,146,159,187,195,171,118
DATA 138,138,146,118,95,57,41,100,102,97,115,117,102,148,159,117,158,208,181,113,138,149,179,151,121
DATA 82,69,95,154,139,130,110,120,156,185,172,158,135,139,143,156,139,113,100,80,56,69,113,138,103
DATA 102,123,133,154,182,164,158,139,141,159,148,123,103,79,72,87,89,84,107,120,128,148,182,179,167
DATA 171,164,144,113,95,130,138,138,139,87,107,103,100,120,115,105,146,167,141,144,169,162,115,141,139
DATA 90,110,112,102,97,110,108,143,141,131,123,123,113,107,136,136,85,107,105,102,107,123,103,94,153
DATA 125,120,130,136,113,135,166,143,110,151,143,98,141,130,138,179,158,105,92,117,139,176,169,131,126
DATA 143,176,159,138,110,72,110,141,123,108,92,113,139,181,182,117,125,117,125,154,120,80,64,121,133
DATA 126,118,105,136,151,117,151,143,138,144,133,120,115,103,161,146,135,113,113,135,156,139,118,107,138
DATA 177,148,117,89,64,72,75,100,117,154,199,190,158,143,133,130,125,75,79,107,149,181,151,125,95
DATA 128,169,139,136,135,146,166,135,92,84,87,103,117,97,89,85,110,128,153,153,138,136,151,153,115
DATA 79,72,123,153,130,151,103,102,102,100,115,123,128,158,203,194,164,118,120,112,102,153,177,153,144
DATA 144,144,135,118,90,92,136,161,135,138,159,141,123,110,103,98,80,72,100,144,174,149,136,113,118
DATA 128,120,118,143,151,100,95,120,117,107,87,112,123,153,172,174,144,133,144,115,117,115,100,85,92
DATA 148,162,151,171,148,95,82,82,141,139,113,112,164,154,164,128,100,75,79,102,128,176,195,138,105
DATA 123,181,144,105,139,164,156,167,130,89,57,79,136,125,139,117,123,118,136,143,125,102,123,136,167
DATA 189,181,151,133,112,87,64,64,92,108,121,159,192,169,162,166,128,110,118,120,117,112,120,126,110
DATA 139,128,64,54,82,115,162,156,128,85,117,171,149,130,130,128,143,164,135,103,100,85,87,97,123
DATA 144,118,133,158,190,195,159,130,125,118,128,117,79,126,166,131,92,97,107,103,95,108,130,146,171
DATA 199,177,164,159,176,146,103,146,103,49,69,120,125,131,141,75,79,113,154,192,133,120,139,153,171
DATA 139,117,77,64,97,161,166,107,120,92,113,166,181,161,97,97,126,171,169,141,128,108,80,89,102
DATA 141,85,92,118,125,153,121,144,148,126,125,167,179,156,149,171,144,113,97,107,77,80,113,162,148
DATA 159,123,100,95,87,154,169,112,125,126,143,153,105,89,107,115,151,103,92,148,139,146,130,121,123
DATA 172,181,153,154,153,143,141,139,125,148,135,54,64,131,135,115,62,62,98,149,169,162,113,71,95
DATA 108,133,113,117,110,84,107,167,141,162,112,94,130,171,167,177,107,97,121,161,139,97,113,113,108
DATA 133,117,128,130,138,156,151,158,158,151,149,167,131,118,102,94,84,105,115,118,100,146,171,166,156
DATA 113,110,126,184,156,143,120,130,139,166,130,105,115,107,90,72,107,161,166,146,94,118,120,130,125
DATA 126,128,136,166,167,118,98,113,108,87,113,143,182,174,138,113,126,95,126,174,148,148,143,113,136
DATA 141,100,113,113,97,71,97,143,171,105,118,110,95,141,130,162,138,136,149,143,82,89,94,98,61
DATA 87,141,141,105,85,112,144,172,151,148,148,144,149,148,105,82,95,92,77,89,120,172,159,158,162
DATA 144,144,136,133,136,144,148,141,148,148,133,121,113,103,120,154,174,120,118,136,128,117,128,144,102
DATA 102,135,171,174,172,141,117,74,66,80,144,136,110,103,172,153,126,90,143,162,138,159,153,126,94
DATA 56,61,92,123,123,108,126,153,189,195,162,117,113,113,108,107,120,158,128,102,113,113,113,108,98
DATA 113,161,189,192,148,103,120,135,117,117,126,148,167,126,90,105,110,102,103,100,108,138,179,184,138
DATA 118,108,156,161,123,115,117,118,118,115,121,143,80,62,59,98,143,115,92,121,167,185,169,144,136
DATA 130,97,125,172,172,144,90,90,98,171,179,98,94,113,171,146,151,151,130,128,128,151,144,136,135
DATAEND
Title: Re: WHY it is JERKY on EBasic?
Post by: Hotshot on June 12, 2008
I have check the Sprite_example_1
I have add the code to move the sprites
no flicker...no problem...

that because there arent any refesh rate code in there.

Code: [Select]
/*
Sample from the users guide showing how to animate a sprite
The bitmap file "mouth.bmp" must be located in the same
directory as the compiled executable
Requires EBASIC 1.0 or greater and the 2D command set
*/
DEF M:INT

speed = 0
Frame = 0
Change = 0
'Create a screen
IF CREATESCREEN( 640, 480, 32) < 0
    MESSAGEBOX 0,"Error creating screen","error"
    END
ENDIF
'Load the sprite
sprite = LoadSprite(GETSTARTPATH + "mouth.bmp",0 ,0 ,3)
IF sprite <> NULL
    'Set the sprites drawing mode to transparent and specify a mask color
    SpriteDrawMode sprite,@TRANS
    SpriteMaskColor sprite,RGB(87,87,87)
    'The main loop
    DO
        FILLSCREEN RGB(0, 0, 255)
        WRITETEXT 0, 0, "Press ESC to close"
        change++
        IF change > (speed / 4)
            frame++
            IF frame > 2 THEN frame = 0
            change = 0
        ENDIF
        'Set the sprites image frame and draw the sprite
        SpriteFrame sprite, frame
        'DrawSpriteXY sprite, 320+M, 240
        MOVESPRITE SPRITE, M, 17
        DRAWSPRITE SPRITE
        speed = FLIP
        M=M+1
'continue until ESCape is pressed
    UNTIL KEYDOWN(1)
    FREESPRITE sprite
ENDIF
CLOSESCREEN
END

so the only problem I having is SMASHOUT CODE.  what your monitor refresh rate?
Title: Re: WHY it is JERKY on EBasic?
Post by: Hotshot on June 13, 2008
What I am to do is code right now is moving the sprites or bitmap around the screen without having worry about bloody Screen refresh rate because it is too much hassle. Yes it is important to have timer on because when you run the program on every computer then you want like 60FPS on every computer otherwise one slow computer would be 60FPS where FASTER Computer would be 120FPS !!!

I hope everyone get what I mean  :)

I just do what I suppose do

ADD Background
basic sprites or bitmap moving around(FOREGROUND)

Take it from there
Title: Re: WHY it is JERKY on EBasic?
Post by: rain_storm on June 13, 2008
The double buffering takes care of refresh rates for you Iv tried it on 60Hz 75Hz both the same as the last screen shot, none of the glitchy stuff like in your screeny. Are these the original examples or the modified ones your working on that you are having trouble with?

From the screen shot you put up though its like the images are being drawn but not cleared afterwords.
Title: Re: WHY it is JERKY on EBasic?
Post by: Hotshot on June 13, 2008
when I run the code and it is the oringal example....I havnt change any code. I still dont know why I am still getting JERKY Screen even thought my monitor refresh rate is 60hz where the oringal code say it is for 75 Refresh rate....so I decide simple solutions is change my monitor to 75hz then it is still got JERKY Screen. 
It would be nice to know and why it is so jerky on my system as my system are

E6750
2GB RAM
Geforce 8800GTS 640MB


At the moment....I have been coding my basic game for EBASIC, ..I have done my spaceship drawing  and I got the sprites(or bitmap) moving without ANY Flicker. Now I going to draw enemy ship.
take it from there.  :)
Title: Re: WHY it is JERKY on EBasic?
Post by: rain_storm on June 13, 2008
At the moment....I have been coding my basic game for EBASIC, ..I have done my spaceship drawing  and I got the sprites(or bitmap) moving without ANY Flicker. Now I going to draw enemy ship.
take it from there.  :)

Im glad you got it sorted mate keep at it buddy
Title: Re: WHY it is JERKY on EBasic?
Post by: Jim on June 13, 2008
It's JERKY because you keep SHOUTING!  Capitals are shouting - either you really are shouting those words, in which case you need to have your blood pressure checked(!), or you need to simmer down, post your code - all of it, not just snippets - and then we can all take a chill pill and work out what's wrong with it.

Jim
Title: Re: WHY it is JERKY on EBasic?
Post by: va!n on June 13, 2008
here is the link where you can d/l ebasic from:
http://www.ionicwind.com/ (http://www.ionicwind.com/)
Title: Re: WHY it is JERKY on EBasic?
Post by: Paul on June 14, 2008
Are you running the program in fullscreen? If not windows might not update your window as often as you would like.
Title: Re: WHY it is JERKY on EBasic?
Post by: Hotshot on June 14, 2008
yes full screen.  I am not updating my window now because last time I did update my window and it fuck up my computer and I had to install window again before!
Title: Re: WHY it is JERKY on EBasic?
Post by: Jim on June 15, 2008
->Hotshot - I think you misread what Paul wrote.  He's not asking you to update Windows.  He's saying that if you are using a window instead of full screen then you might not be able to update the window as fast as 75Hz and that might be causing the drawing problem.

Jim