boolean appletAlive = true; public void stop() { appletAlive = false; } boolean Key_UP = false; boolean Key_DN = false; boolean Key_LT = false; boolean Key_RT = false; boolean Key_CT = false; boolean Key_SH = false; //-------------------------// //-- TILEMAP ENGINE --// // BY ANDRE-MICHELLE.COM --// //-------------------------// TileMapRenderer world; float x; float y; BitmapFont dfps; int ms; int frame; void setup() { size( 360 , 280 ); world = new TileMapRenderer(); dfps = new BitmapFont( "letters.gif" , "0123456789ABCDEFGHIJKLMNOPQRSTUVWZYX" , 16 , 22 ); world.loadBlocks( "mario.gif" ); world.setMapArray( mario_map ); x = 0; y = 0; // int ms = millis(); // for( int i = 0 ; i < 1000 ; i++ ) // { // world.render( (int)x , (int)y ); // } // println( millis() - ms); //world.render( (int)x , (int)y ); frame = 0; Timer t = new Timer(); t.scheduleAtFixedRate( (Impuls)new Impuls(t) , 0 , 1 ); } public void solve() { frame++; if ( millis() > ms + 1000 ) { dfps.setText( frame + " fps" ); frame = 0; ms = millis(); } if ( Key_RT ) x += 1; if ( Key_LT ) x -= 1; if ( Key_DN ) y += 1; if ( Key_UP ) y -= 1; if ( x < 0 ) x = 0; if ( y < 0 ) y = 0; if ( x > 2816 - width - 1 ) x = 2816 - width - 1; if ( y > 432 - height - 1 ) y = 432 - height - 1; world.render( (int)x , (int)y ); dfps.draw( 4 , 4 ); update(); } public class Impuls extends TimerTask { Timer t; Impuls( Timer t ) { this.t = t; }; public void run() { if ( !appletAlive ) t.cancel(); //int ms = millis(); solve(); //while( millis() - ms < 15 ){}; } } class TileMapRenderer { int[][] map; int cols, rows; BImage blocks; TileMapRenderer() { } void loadBlocks( String filename ) { blocks = loadImage( filename ); }; void setMapArray( int[][] m ) { map = m; }; void render( int x0 , int y0 ) { //-- RENDER WORLD TO IMAGE --// //-- STORE REFERENCES (FASTER) --// // int[][]bm = map; int[]bpx = blocks.pixels, bmy; int[]mpx = pixels; int ty,my; int x,y,i=0,x1=width+x0,y1=height+y0; for( y = y0 ; y < y1 ; y++ ) { bmy = bm[ y >> 4 ]; my = y % 16; for( x = x0 ; x < x1 ; x++ ) { mpx[ i++ ] = bpx[ ( ( ( bmy[ x >> 4 ] << 4 ) + my ) << 4 ) + x % 16 ]; } } } } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class BitmapFont { BImage fontmap; BImage resultImage; HashMap letters; int letterW; int letterH; int offset = 4; char newline; BitmapFont( String fontName , String content, int letterW, int letterH ) { fontmap = loadImage( fontName ); this.letterW = letterW; this.letterH = letterH; letters = new HashMap(); for( int i = 0 ; i < content.length() ; i++ ) { char key = content.charAt( i ); letters.put( key + "" , new Integer( i ) ); } newline = '*'; } void setText( String txt ) { int tw = txt.length(); int i; int linebreaks = 0; int maxWidth = 0; int lastBreak = 0; for ( i = 0 ; i < tw ; i++ ) { if( txt.charAt( i ) == newline ) { linebreaks++; maxWidth = max( maxWidth, i - lastBreak ); lastBreak = i; } } maxWidth = max( maxWidth, i - lastBreak ); //-- 1 row --// if( maxWidth == 0 ) maxWidth = tw; resultImage = new BImage( --maxWidth * letterW , letterH * ++linebreaks + offset * --linebreaks ); int col = 0; int row = 0; for( i = 0 ; i < tw ; i++ ) { char letter = txt.charAt( i ); if ( letter == newline ) { row++; col = 0; } else { Integer hashobj = (Integer)letters.get( letter + "" ); if ( hashobj != null ) { int position = hashobj.intValue(); int sx = position * letterW; int dx = col * letterW; int dy = row * letterH + row * offset; resultImage.replicate( fontmap, sx, 0 , sx + letterW , letterH , dx , dy , dx + letterW , dy + letterH ); } col++; } } } void draw( int x, int y ) { if ( resultImage != null ) { image( resultImage , x , y ); } }; void draw() { if ( resultImage != null ) { image( resultImage , width / 2 - resultImage.width / 2 , height / 2 - resultImage.height / 2 ); } } } public void keyPressed( KeyEvent e ) { int key = e.getKeyCode(); if ( key == 37 ) Key_LT = true; if ( key == 38 ) Key_UP = true; if ( key == 39 ) Key_RT = true; if ( key == 40 ) Key_DN = true; if ( key == 16 ) Key_SH = true; if ( key == 17 ) Key_CT = true; } public void keyReleased( KeyEvent e ) { int key = e.getKeyCode(); if ( key == 37 ) Key_LT = false; if ( key == 38 ) Key_UP = false; if ( key == 39 ) Key_RT = false; if ( key == 40 ) Key_DN = false; if ( key == 16 ) Key_SH = false; if ( key == 17 ) Key_CT = false; } int[][]mario_map={ {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1 }, {1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,3,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,3,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,3,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,3,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,2,3,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,4,5,5,5,5,5,5,5,6,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,4,5,5,6,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,4,5,5,5,5,5,5,5,5,6, 1,1,1,1,1,1,1,7,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,7,9,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,4,5,5,5,5,5,5,5,5,5,5,6,1,1,1, 1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,7,8,8,8,8,8,8,9,1, 1,1,2,3,1,1,1,7,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,4,5,5,5,5,5,5,5,5,6,1, 1,1,2,3,1,1,1,1,7,9,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,7,8,8,8,8,8,8,8,8,9,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,7,8,8,8,8,8,8,9,1, 1,1,1,1,1,1,1,7,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,1,2,3,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,7,8,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,4,5,5,6,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,3,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,2,3,1,1,1,1,1 }, {1,1,7,8,8,8,8,8,8,8,8,9,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,1, 1,1,1,1,1,1,1,7,8,8,8,8,8,8,9,1, 1,1,1,1,1,1,1,7,8,8,8,8,8,9,3,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,1, 1,1,1,1,1,1,7,8,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,7,9,1,1,1,2,3,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,7,8,8,8,8,8,8,8,8,9,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,7,8,8,8,8,8,8,9,1, 1,1,1,1,1,1,1,7,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,10,1,1,1,10,1,1,1,10,1,1,1, 1,1,1,1,1,1,7,8,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,7,9,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,7,8,8,8,8,8,8,8,8,9,1,1,1,1, 1,1,1,1,1,2,11,5,5,6,1,1,1,1,1,1, 1,4,5,5,5,5,5,5,5,5,12,8,8,8,9,1, 1,1,1,1,1,2,3,7,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,13,2,3,1,13,1,1,1,13,1,1,1, 1,1,1,1,1,1,7,8,8,8,8,8,8,9,1,1, 1,1,1,1,1,2,3,4,5,5,6,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,2,3,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,2,7,8,8,8,8,8,8,8,8,9,1,1,1,1, 1,1,1,1,1,1,1,7,9,1,1,1,1,1,1,1, 1,2,7,8,8,8,8,8,8,9,8,8,8,8,9,1, 1,1,1,1,1,1,1,7,8,8,8,8,8,9,1,1, 1,2,3,1,1,1,1,1,14,1,1,1,1,1,1,15, 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,1, 1,2,3,1,1,1,7,8,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,7,9,1,1,1,1,1,1, 1,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1 }, {1,1,7,8,8,8,8,8,8,8,8,9,1,1,1,16, 17,1,1,1,1,1,1,7,9,1,1,1,1,1,1,1, 1,1,7,8,8,8,8,8,8,9,8,8,8,8,9,16, 17,1,1,1,1,1,4,5,5,5,5,5,5,5,6,1, 1,1,1,1,1,1,1,1,18,1,1,1,1,1,1,16, 17,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,7,8,8,8,8,8,8,9,1,16, 17,1,1,1,1,1,1,1,7,9,1,1,1,1,1,1, 1,1,1,1,4,5,5,5,5,5,5,5,6,1,1,16, 17,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,16 }, {1,1,7,8,8,8,8,8,8,8,8,9,1,19,20,21, 22,23,1,1,1,1,1,7,9,24,1,1,1,1,1,1, 1,1,7,8,8,8,8,8,8,9,8,8,8,8,9,21, 22,23,1,1,1,1,1,7,8,8,8,8,8,9,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,21, 22,23,1,1,1,1,1,25,26,24,1,1,1,1,1,1, 1,1,1,1,1,1,7,8,8,8,8,8,8,9,20,21, 22,23,1,1,1,1,1,27,5,5,6,1,1,1,1,1, 1,1,1,1,1,7,8,8,8,8,8,9,1,1,20,21, 22,23,1,1,1,1,1,25,26,24,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,20,21 }, {1,1,7,8,8,8,8,8,8,8,8,9,16,28,21,29, 29,22,30,28,30,17,25,7,9,31,1,1,32,17,1,1, 1,1,7,8,8,8,8,8,8,9,8,8,8,8,9,29, 29,22,30,28,30,17,25,7,8,8,8,8,8,9,1,1, 1,1,1,1,1,25,33,24,1,1,1,1,16,28,21,29, 29,22,30,28,30,17,25,26,34,31,1,1,16,17,1,1, 1,1,1,1,1,25,7,8,8,8,8,8,8,9,21,29, 29,22,30,28,30,17,25,26,7,9,1,1,16,17,1,1, 1,1,1,1,1,7,8,8,8,8,8,9,16,28,21,29, 29,22,30,28,30,17,25,26,34,31,1,1,16,17,1,1, 1,1,1,1,1,25,33,24,1,1,1,1,16,28,21,29 }, {35,25,7,8,8,8,8,8,8,8,8,9,21,29,29,29, 29,29,29,29,29,22,36,7,9,37,1,20,38,22,30,28, 35,25,7,8,8,8,8,8,8,9,8,8,8,8,9,29, 29,29,39,29,29,22,36,7,8,8,8,8,8,9,30,28, 35,25,33,40,25,41,26,42,24,1,1,43,21,29,44,29, 29,29,29,29,29,22,36,26,45,37,1,20,21,22,30,28, 35,25,33,24,25,41,7,8,8,8,8,8,8,9,29,29, 39,29,29,29,29,22,36,26,7,9,1,20,21,22,30,28, 35,25,33,24,25,7,8,8,8,8,8,9,21,29,29,29, 29,29,29,29,46,22,36,26,45,37,1,20,21,22,30,28, 35,25,33,24,25,41,26,42,24,1,1,43,21,29,29,29 }, {47,41,7,8,8,8,8,8,8,8,8,9,29,29,29,29, 29,47,33,48,39,47,26,7,9,49,43,21,47,26,50,29, 47,41,7,8,8,8,8,8,8,9,8,8,8,8,9,29, 29,51,33,48,29,47,26,7,8,8,8,8,8,9,50,29, 47,41,52,53,54,26,34,55,31,25,56,50,29,29,57,29, 29,47,33,58,29,47,26,34,59,49,43,21,47,26,50,29, 47,41,60,42,61,26,7,8,8,8,8,8,8,9,29,39, 29,51,33,58,29,47,26,34,7,9,43,21,47,26,50,29, 47,41,60,42,61,7,8,8,8,8,8,9,29,29,29,29, 29,47,62,48,38,51,63,34,64,49,43,21,47,26,50,29, 51,65,52,42,61,26,34,55,31,25,56,50,29,29,29,29 }, {66,5,5,5,5,5,5,5,5,5,5,5,5,5,5,67, 68,26,69,37,68,63,70,7,9,26,50,29,36,60,42,50, 36,26,7,8,8,8,8,8,8,9,8,8,8,8,9,47, 68,26,34,37,68,26,34,7,8,8,8,8,8,9,42,50, 36,26,42,42,71,34,72,72,37,73,26,71,29,29,29,47, 68,26,34,37,68,26,34,74,75,26,50,29,36,60,42,50, 36,26,42,42,71,34,7,8,8,8,8,8,8,9,29,47, 68,26,34,37,68,26,34,74,7,9,50,29,36,60,42,50, 36,26,42,42,71,7,8,8,8,8,8,9,29,29,29,47, 68,26,34,37,68,26,34,74,41,26,50,29,36,60,42,50, 36,26,42,42,71,34,72,72,37,73,26,71,29,29,29,47 }, {26,7,8,8,8,8,8,8,8,8,8,8,8,8,9,61, 41,60,45,37,76,77,78,7,9,34,79,47,26,34,55,74, 26,34,7,8,8,8,8,8,8,9,8,8,8,8,9,61, 41,60,45,37,76,77,74,7,8,8,8,8,8,9,55,74, 26,34,80,81,77,72,72,72,82,81,83,56,50,47,33,61, 41,52,84,85,86,87,88,63,86,69,89,51,63,69,90,88, 63,34,80,81,77,72,7,8,8,8,8,8,8,9,33,61, 41,60,45,37,76,77,74,26,7,9,79,47,26,34,55,74, 26,34,80,81,77,7,8,8,8,8,8,9,50,47,33,61, 41,60,45,37,76,77,74,26,76,34,79,47,26,34,55,74, 26,34,80,81,77,72,72,72,82,81,83,56,50,47,33,61 }, {34,7,8,8,8,8,8,8,8,8,8,8,8,8,9,42, 61,91,45,82,34,74,26,7,9,74,33,92,80,45,74,26, 34,72,7,8,8,8,8,8,8,9,8,8,8,8,9,42, 61,60,45,82,34,74,26,7,8,8,8,8,8,9,74,26, 34,72,72,72,93,72,72,82,34,74,41,26,94,61,60,42, 61,60,45,82,34,74,26,42,34,74,33,92,80,45,74,26, 34,72,95,5,5,5,5,5,5,12,8,8,8,9,60,42, 61,60,45,82,34,74,96,5,5,5,5,5,5,97,74,26, 34,72,72,72,93,7,8,8,8,8,8,9,98,61,60,42, 61,99,5,5,5,5,5,100,34,74,33,92,80,45,74,26, 34,72,72,72,93,72,72,101,102,74,41,103,104,105,106,107 }, {108,7,8,8,8,8,8,8,8,8,8,8,8,8,9,42, 34,109,37,83,33,76,76,7,9,36,60,34,37,74,110,56, 108,72,7,8,8,8,8,8,8,9,8,8,8,8,9,42, 34,34,37,83,33,76,76,7,8,8,8,8,8,9,110,56, 108,72,74,33,111,112,113,5,5,5,5,5,5,5,5,5, 114,115,116,83,33,76,76,98,45,36,60,34,37,74,110,56, 108,72,74,7,8,8,8,8,9,8,8,8,8,9,60,42, 34,34,37,83,33,117,118,119,8,8,8,8,9,74,110,56, 108,72,74,33,120,7,8,8,8,8,121,122,123,74,60,42, 34,34,7,8,8,8,9,98,45,36,60,34,37,74,110,56, 108,72,74,33,120,74,33,124,125,41,26,126,127,128,129,130 }, {120,7,8,8,8,8,8,8,8,8,8,8,8,8,9,71, 131,132,133,41,26,134,5,5,5,135,136,137,132,138,61,26, 120,139,5,5,5,12,8,8,140,132,141,8,8,8,140,132, 142,108,143,144,96,5,5,5,12,8,8,8,140,132,145,26, 120,108,146,132,147,148,149,7,8,8,8,8,8,8,8,9, 72,150,151,41,26,42,34,31,74,41,136,120,72,152,61,26, 120,108,26,7,8,8,8,8,9,8,8,8,140,132,153,71, 72,108,154,132,155,156,157,158,8,8,8,8,9,152,61,26, 137,132,155,34,31,7,140,132,141,8,159,148,160,132,153,71, 72,108,7,8,8,8,9,31,74,41,161,132,142,152,61,26, 137,132,155,34,31,162,163,5,5,5,5,5,5,5,5,164 }, {165,166,167,167,167,167,167,167,168,169,167,167,167,167,170,171, 172,173,174,175,171,176,166,167,170,177,175,178,173,179,171,176, 165,180,166,167,170,167,167,167,181,182,183,167,167,167,184,185, 186,187,188,189,171,166,167,170,190,191,192,167,181,182,193,176, 165,180,194,173,195,196,197,166,167,167,167,167,167,167,167,170, 198,199,200,175,171,176,187,180,177,177,175,201,187,180,171,176, 165,180,202,166,167,167,167,167,170,167,167,167,181,182,203,171, 204,205,206,207,193,208,209,210,167,167,167,167,170,180,171,176, 211,212,213,187,214,215,216,217,183,167,218,219,220,221,203,171, 204,205,222,167,167,167,170,180,223,224,225,226,227,180,228,229, 230,212,213,187,231,232,187,166,167,167,167,167,167,167,170,171 }, {233,234,235,235,236,237,235,235,235,238,235,235,236,237,239,240, 241,242,243,244,245,246,234,235,239,247,245,241,233,248,249,233, 233,242,234,235,239,235,235,235,235,239,235,235,235,235,239,240, 241,242,250,251,245,234,235,239,252,253,254,235,235,239,249,233, 233,242,255,242,256,245,257,234,235,235,235,235,235,235,235,239, 241,258,259,260,245,246,233,248,243,247,245,241,233,261,249,233, 233,242,255,234,235,235,235,235,239,235,235,235,235,239,262,240, 263,253,264,244,245,246,233,234,235,235,235,235,239,248,249,233, 233,242,255,242,265,253,254,235,235,235,235,239,243,266,262,240, 263,253,267,235,235,235,239,248,268,253,269,241,233,248,270,253, 271,242,255,242,256,245,257,272,235,235,235,235,235,235,239,240 }, {248,234,235,235,235,238,235,235,235,235,235,235,235,238,239,245, 262,273,247,245,245,241,234,235,239,245,274,233,233,242,255,233, 248,246,234,235,239,235,235,235,235,239,235,235,235,235,239,245, 262,273,250,251,245,234,235,239,275,276,277,235,235,239,255,233, 248,246,242,243,255,278,279,234,235,235,235,235,235,235,235,239, 262,280,281,282,245,241,233,283,262,245,274,233,233,284,255,233, 248,246,242,234,235,235,235,235,239,235,235,235,235,239,245,245, 285,286,287,245,245,241,233,234,235,235,235,235,239,242,255,233, 248,246,242,243,288,289,277,235,235,235,235,239,290,256,245,245, 285,286,291,235,235,235,239,283,285,292,293,233,233,242,288,294, 295,246,242,243,255,278,279,296,235,235,235,235,235,235,239,245 } };