package org.jzy3d.plot3d.text.renderers;
import org.jzy3d.colors.Color;
import org.jzy3d.maths.BoundingBox3d;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.rendering.compat.GLES2CompatUtils;
import org.jzy3d.plot3d.rendering.view.Camera;
import org.jzy3d.plot3d.text.AbstractTextRenderer;
import org.jzy3d.plot3d.text.ITextRenderer;
import org.jzy3d.plot3d.text.align.Halign;
import org.jzy3d.plot3d.text.align.Valign;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.glu.GLU;
/**
* A {@link TextBillboardRenderer} allows writing 2d text always facing the
* Camera of a 3d Scene.
* TextBillboard provides the pixel definition of all characters of the ASCII
* alphabet. A default bitmap (plain rectangle) is provided for unrecognized
* characters (those that do not have an ASCII code). The bitmap library is
* static, and thus no overhead is generated by the use of several instances of
* TextBillboard.
* It is however not necessary to have an instance of TextBillboard for each
* drawn string.
*
* String s = new String("2d text in 3d Scene");
* TextBillboard txt = new TextBillboard();
* BoundingBox3d box;
*
* txt.drawText(gl, s, Coord3d.ORIGIN, Halign.LEFT, Valign.GROUND, Color.BLACK);
* box = txt.drawText(gl, glu, cam, s, Coord3d.ORIGIN, Halign.LEFT, Valign.GROUND, Color.BLACK);
*
* Layout constants
* As demonstrated in the previous example, the {@link TextBillboardRenderer}
* handles vertical and horizontal layout of text according to the given text
* coordinate.
* The following picture illustrates the text layout when using the various
* layout constants
*
*
*
* @author Martin Pernollet
*/
public class TextBillboardRenderer extends AbstractTextRenderer implements ITextRenderer {
/**
* The TextBillboard class provides support for drawing ASCII characters Any
* non ascii caracter will be replaced by a square.
*/
public TextBillboardRenderer() {
}
@Override
public void drawSimpleText(GL gl, GLU glu, Camera cam, String s, Coord3d position, Color color, int fonttype) {
glRaster(gl, position, color);
printString(gl, s, Halign.RIGHT, Valign.GROUND);
}
/** Draw a string at the specified position. */
public void drawText(GL gl, String s, Coord3d position, Halign halign, Valign valign, Color color) {
}
/**
* Draw a string at the specified position and compute the 3d volume
* occupied by the string according to the current Camera configuration.
*/
@Override
public BoundingBox3d drawText(GL gl, GLU glu, Camera cam, String s, Coord3d position, Halign halign, Valign valign, Color color, Coord2d screenOffset, Coord3d sceneOffset, int fonttype) {
glRaster(gl, position, color);
BillBoardSize dims = printString(gl, s, halign, valign);
BoundingBox3d txtBounds = computeTextBounds(gl, glu, cam, position, dims);
return txtBounds;
}
public void glRaster(GL gl, Coord3d position, Color color) {
if (gl.isGL2()) {
gl.getGL2().glColor3f(color.r, color.g, color.b);
gl.getGL2().glRasterPos3f(position.x, position.y, position.z);
} else {
GLES2CompatUtils.glColor3f(color.r, color.g, color.b);
GLES2CompatUtils.glRasterPos3f(position.x, position.y, position.z);
}
}
public BoundingBox3d computeTextBounds(GL gl, GLU glu, Camera cam, Coord3d position, BillBoardSize dims) {
Coord3d posScreen = cam.modelToScreen(gl, glu, position);
Coord3d botLeft = new Coord3d();
Coord3d topRight = new Coord3d();
botLeft.x = posScreen.x + dims.xoffset;
botLeft.y = posScreen.y + dims.yoffset;
botLeft.z = posScreen.z;
topRight.x = botLeft.x + dims.width;
topRight.y = botLeft.y + dims.height;
topRight.z = botLeft.z;
BoundingBox3d txtBounds = new BoundingBox3d();
txtBounds.add(cam.screenToModel(gl, glu, botLeft));
txtBounds.add(cam.screenToModel(gl, glu, topRight));
return txtBounds;
}
/********************************************************************/
/**
* Performs actual display of the string.
*
* @param gl
* GL2 context.
* @param s
* the String that must be displayed.
* @param halign
* the horizontal alignment constant.
* @param valign
* the vertical alignment constant.
* @throws an
* IllegalArgumentException if the vertical or horizontal
* alignment constant value is unknown.
*/
private BillBoardSize printString(GL gl, String s, Halign halign, Valign valign) {
byte[] acodes = s.getBytes();
int nchar = s.length();
float xorig = 0.0f;
float yorig = 2.0f;
float xmove = charWidth + charOffset;
float ymove = 0.0f;
// Compute horizontal alignment
if (halign == Halign.RIGHT)
;/* xorig = xorig; */
else if (halign == Halign.CENTER)
xorig = nchar * xmove / 2;
else if (halign == Halign.LEFT)
xorig = nchar * xmove;
else
throw new IllegalArgumentException("Horizontal alignement constant unknown: " + halign);
// Compute vertical alignment
if (valign == Valign.TOP)
yorig = 0.0f;
else if (valign == Valign.GROUND)
;/* yorig = yorig; */
else if (valign == Valign.CENTER)
yorig = charHeight / 2;
else if (valign == Valign.BOTTOM)
yorig = charHeight;
else
throw new IllegalArgumentException("Vertical alignement constant unknown: " + valign);
// Draw the bitmaps
gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
int idx;
for (int c = 0; c < acodes.length; c++) {
idx = acodes[c] - 32;
if (idx < 0 || idx > ascii.length)
glBitmap(gl, charWidth, charHeight, xorig, yorig, xmove, ymove, nonascii, 0);
else
glBitmap(gl, charWidth, charHeight, xorig, yorig, xmove, ymove, ascii[idx], 0);
}
// Compute occupied space
return new BillBoardSize(xmove * nchar, charHeight, -xorig, -yorig);
}
/********************************************************************/
private void glBitmap(GL gl, int charWidth2, int charHeight2, float xorig, float yorig, float xmove, float ymove, byte[] nonascii2, int i) {
if (gl.isGL2()) {
gl.getGL2().glBitmap(charWidth, charHeight, xorig, yorig, xmove, ymove, nonascii, 0);
} else {
GLES2CompatUtils.glBitmap(charWidth, charHeight, xorig, yorig, xmove, ymove, nonascii, 0);
}
}
/**
* Provides information on the 2d space occupied by a
* {@link TextBillboardRenderer}
*/
private class BillBoardSize {
BillBoardSize(float width, float height, float xoffset, float yoffset) {
this.width = width;
this.height = height;
this.xoffset = xoffset;
this.yoffset = yoffset;
}
float width;
float height;
float xoffset;
float yoffset;
}
/********************************************************************/
private static int charHeight = 13; // px heigth
private static int charWidth = 8; // px width
private static int charOffset = 2; // px between 2 characters
static private byte ascii[][] = { // each of the 95 line is a letter, each
// of the (charHeight) byte of a line
// represent a raw of (charWidth) pixels
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x18, (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18,
(byte) 0x18 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x36, (byte) 0x36, (byte) 0x36,
(byte) 0x36 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x66, (byte) 0x66, (byte) 0xff, (byte) 0x66, (byte) 0x66, (byte) 0xff, (byte) 0x66, (byte) 0x66, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x7e, (byte) 0xff, (byte) 0x1b, (byte) 0x1f, (byte) 0x7e, (byte) 0xf8, (byte) 0xd8, (byte) 0xff, (byte) 0x7e,
(byte) 0x18 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x0e, (byte) 0x1b, (byte) 0xdb, (byte) 0x6e, (byte) 0x30, (byte) 0x18, (byte) 0x0c, (byte) 0x76, (byte) 0xdb, (byte) 0xd8,
(byte) 0x70 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7f, (byte) 0xc6, (byte) 0xcf, (byte) 0xd8, (byte) 0x70, (byte) 0x70, (byte) 0xd8, (byte) 0xcc, (byte) 0xcc, (byte) 0x6c,
(byte) 0x38 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x1c, (byte) 0x0c,
(byte) 0x0e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x0c, (byte) 0x18, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x18,
(byte) 0x0c },
{ (byte) 0x00, (byte) 0x00, (byte) 0x30, (byte) 0x18, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x18,
(byte) 0x30 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x99, (byte) 0x5a, (byte) 0x3c, (byte) 0xff, (byte) 0x3c, (byte) 0x5a, (byte) 0x99, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0xff, (byte) 0xff, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x30, (byte) 0x18, (byte) 0x1c, (byte) 0x1c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x38, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x60, (byte) 0x60, (byte) 0x30, (byte) 0x30, (byte) 0x18, (byte) 0x18, (byte) 0x0c, (byte) 0x0c, (byte) 0x06, (byte) 0x06, (byte) 0x03,
(byte) 0x03 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x3c, (byte) 0x66, (byte) 0xc3, (byte) 0xe3, (byte) 0xf3, (byte) 0xdb, (byte) 0xcf, (byte) 0xc7, (byte) 0xc3, (byte) 0x66,
(byte) 0x3c },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x78, (byte) 0x38,
(byte) 0x18 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xc0, (byte) 0xc0, (byte) 0x60, (byte) 0x30, (byte) 0x18, (byte) 0x0c, (byte) 0x06, (byte) 0x03, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0x03, (byte) 0x03, (byte) 0x07, (byte) 0x7e, (byte) 0x07, (byte) 0x03, (byte) 0x03, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0xff, (byte) 0xcc, (byte) 0x6c, (byte) 0x3c, (byte) 0x1c,
(byte) 0x0c },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0x03, (byte) 0x03, (byte) 0x07, (byte) 0xfe, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0,
(byte) 0xff },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0xc3, (byte) 0xc3, (byte) 0xc7, (byte) 0xfe, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x18, (byte) 0x0c, (byte) 0x06, (byte) 0x03, (byte) 0x03, (byte) 0x03,
(byte) 0xff },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0xc3, (byte) 0xc3, (byte) 0xe7, (byte) 0x7e, (byte) 0xe7, (byte) 0xc3, (byte) 0xc3, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0x03, (byte) 0x03, (byte) 0x03, (byte) 0x7f, (byte) 0xe7, (byte) 0xc3, (byte) 0xc3, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x38, (byte) 0x00, (byte) 0x00, (byte) 0x38, (byte) 0x38, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x30, (byte) 0x18, (byte) 0x1c, (byte) 0x1c, (byte) 0x00, (byte) 0x00, (byte) 0x1c, (byte) 0x1c, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x06, (byte) 0x0c, (byte) 0x18, (byte) 0x30, (byte) 0x60, (byte) 0xc0, (byte) 0x60, (byte) 0x30, (byte) 0x18, (byte) 0x0c,
(byte) 0x06 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xff, (byte) 0x00, (byte) 0xff, (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x60, (byte) 0x30, (byte) 0x18, (byte) 0x0c, (byte) 0x06, (byte) 0x03, (byte) 0x06, (byte) 0x0c, (byte) 0x18, (byte) 0x30,
(byte) 0x60 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x18, (byte) 0x0c, (byte) 0x06, (byte) 0x03, (byte) 0xc3, (byte) 0xc3,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x3f, (byte) 0x60, (byte) 0xcf, (byte) 0xdb, (byte) 0xd3, (byte) 0xdd, (byte) 0xc3, (byte) 0x7e, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xff, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0x66, (byte) 0x3c,
(byte) 0x18 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xfe, (byte) 0xc7, (byte) 0xc3, (byte) 0xc3, (byte) 0xc7, (byte) 0xfe, (byte) 0xc7, (byte) 0xc3, (byte) 0xc3, (byte) 0xc7,
(byte) 0xfe },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0xfc, (byte) 0xce, (byte) 0xc7, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc7, (byte) 0xce,
(byte) 0xfc },
{ (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xfc, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0,
(byte) 0xff },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xfc, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0,
(byte) 0xff },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0xc3, (byte) 0xc3, (byte) 0xcf, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xff, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3,
(byte) 0xc3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7c, (byte) 0xee, (byte) 0xc6, (byte) 0x06, (byte) 0x06, (byte) 0x06, (byte) 0x06, (byte) 0x06, (byte) 0x06, (byte) 0x06,
(byte) 0x06 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0xc6, (byte) 0xcc, (byte) 0xd8, (byte) 0xf0, (byte) 0xe0, (byte) 0xf0, (byte) 0xd8, (byte) 0xcc, (byte) 0xc6,
(byte) 0xc3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0,
(byte) 0xc0 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xdb, (byte) 0xff, (byte) 0xff, (byte) 0xe7,
(byte) 0xc3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc7, (byte) 0xc7, (byte) 0xcf, (byte) 0xcf, (byte) 0xdf, (byte) 0xdb, (byte) 0xfb, (byte) 0xf3, (byte) 0xf3, (byte) 0xe3,
(byte) 0xe3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xfe, (byte) 0xc7, (byte) 0xc3, (byte) 0xc3, (byte) 0xc7,
(byte) 0xfe },
{ (byte) 0x00, (byte) 0x00, (byte) 0x3f, (byte) 0x6e, (byte) 0xdf, (byte) 0xdb, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0x66,
(byte) 0x3c },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0xc6, (byte) 0xcc, (byte) 0xd8, (byte) 0xf0, (byte) 0xfe, (byte) 0xc7, (byte) 0xc3, (byte) 0xc3, (byte) 0xc7,
(byte) 0xfe },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0x03, (byte) 0x03, (byte) 0x07, (byte) 0x7e, (byte) 0xe0, (byte) 0xc0, (byte) 0xc0, (byte) 0xe7,
(byte) 0x7e },
{ (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18,
(byte) 0xff },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xe7, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3,
(byte) 0xc3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x3c, (byte) 0x3c, (byte) 0x66, (byte) 0x66, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3,
(byte) 0xc3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0xe7, (byte) 0xff, (byte) 0xff, (byte) 0xdb, (byte) 0xdb, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3,
(byte) 0xc3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0x66, (byte) 0x66, (byte) 0x3c, (byte) 0x3c, (byte) 0x18, (byte) 0x3c, (byte) 0x3c, (byte) 0x66, (byte) 0x66,
(byte) 0xc3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x3c, (byte) 0x3c, (byte) 0x66, (byte) 0x66,
(byte) 0xc3 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0xc0, (byte) 0xc0, (byte) 0x60, (byte) 0x30, (byte) 0x7e, (byte) 0x0c, (byte) 0x06, (byte) 0x03, (byte) 0x03,
(byte) 0xff },
{ (byte) 0x00, (byte) 0x00, (byte) 0x3c, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30,
(byte) 0x3c },
{ (byte) 0x00, (byte) 0x03, (byte) 0x03, (byte) 0x06, (byte) 0x06, (byte) 0x0c, (byte) 0x0c, (byte) 0x18, (byte) 0x18, (byte) 0x30, (byte) 0x30, (byte) 0x60,
(byte) 0x60 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x3c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c,
(byte) 0x3c },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0x66, (byte) 0x3c,
(byte) 0x18 },
{ (byte) 0xff, (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x38, (byte) 0x30,
(byte) 0x70 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7f, (byte) 0xc3, (byte) 0xc3, (byte) 0x7f, (byte) 0x03, (byte) 0xc3, (byte) 0x7e, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xfe, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xfe, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0,
(byte) 0xc0 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xc3, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc3, (byte) 0x7e, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7f, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0x7f, (byte) 0x03, (byte) 0x03, (byte) 0x03, (byte) 0x03,
(byte) 0x03 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7f, (byte) 0xc0, (byte) 0xc0, (byte) 0xfe, (byte) 0xc3, (byte) 0xc3, (byte) 0x7e, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0xfc, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x33,
(byte) 0x1e },
{ (byte) 0x7e, (byte) 0xc3, (byte) 0x03, (byte) 0x03, (byte) 0x7f, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0x7e, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xfe, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0,
(byte) 0xc0 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x00, (byte) 0x00, (byte) 0x18,
(byte) 0x00 },
{ (byte) 0x38, (byte) 0x6c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x0c, (byte) 0x00, (byte) 0x00, (byte) 0x0c,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc6, (byte) 0xcc, (byte) 0xf8, (byte) 0xf0, (byte) 0xd8, (byte) 0xcc, (byte) 0xc6, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0,
(byte) 0xc0 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18,
(byte) 0x78 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xdb, (byte) 0xdb, (byte) 0xdb, (byte) 0xdb, (byte) 0xdb, (byte) 0xdb, (byte) 0xfe, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xfc, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7c, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0x7c, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xfe, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xfe, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x03, (byte) 0x03, (byte) 0x03, (byte) 0x7f, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0x7f, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xc0, (byte) 0xe0, (byte) 0xfe, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xfe, (byte) 0x03, (byte) 0x03, (byte) 0x7e, (byte) 0xc0, (byte) 0xc0, (byte) 0x7f, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x1c, (byte) 0x36, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0x30, (byte) 0xfc, (byte) 0x30, (byte) 0x30, (byte) 0x30,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x7e, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0xc6, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x18, (byte) 0x3c, (byte) 0x3c, (byte) 0x66, (byte) 0x66, (byte) 0xc3, (byte) 0xc3, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0xe7, (byte) 0xff, (byte) 0xdb, (byte) 0xc3, (byte) 0xc3, (byte) 0xc3, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xc3, (byte) 0x66, (byte) 0x3c, (byte) 0x18, (byte) 0x3c, (byte) 0x66, (byte) 0xc3, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0xc0, (byte) 0x60, (byte) 0x60, (byte) 0x30, (byte) 0x18, (byte) 0x3c, (byte) 0x66, (byte) 0x66, (byte) 0xc3, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xff, (byte) 0x60, (byte) 0x30, (byte) 0x18, (byte) 0x0c, (byte) 0x06, (byte) 0xff, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x0f, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x38, (byte) 0xf0, (byte) 0x38, (byte) 0x18, (byte) 0x18, (byte) 0x18,
(byte) 0x0f },
{ (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x18,
(byte) 0x18 },
{ (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x18, (byte) 0x18, (byte) 0x18, (byte) 0x1c, (byte) 0x0f, (byte) 0x1c, (byte) 0x18, (byte) 0x18, (byte) 0x18,
(byte) 0xf0 },
{ (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x06, (byte) 0x8f, (byte) 0xf1, (byte) 0x60, (byte) 0x00, (byte) 0x00,
(byte) 0x00 } };
static private byte nonascii[] = { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
(byte) 0xff, (byte) 0xff, (byte) 0xff };
}
Ads help maintain this website.