19a57b7d2SSøren Schmidt /*- 25e53a4f9SPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 35e53a4f9SPedro F. Giffuni * 4bf3f9db6SUlrich Spörlein * Copyright (c) 1991-1997 Søren Schmidt 59a57b7d2SSøren Schmidt * All rights reserved. 69a57b7d2SSøren Schmidt * 79a57b7d2SSøren Schmidt * Redistribution and use in source and binary forms, with or without 89a57b7d2SSøren Schmidt * modification, are permitted provided that the following conditions 99a57b7d2SSøren Schmidt * are met: 109a57b7d2SSøren Schmidt * 1. Redistributions of source code must retain the above copyright 119a57b7d2SSøren Schmidt * notice, this list of conditions and the following disclaimer 129a57b7d2SSøren Schmidt * in this position and unchanged. 139a57b7d2SSøren Schmidt * 2. Redistributions in binary form must reproduce the above copyright 149a57b7d2SSøren Schmidt * notice, this list of conditions and the following disclaimer in the 159a57b7d2SSøren Schmidt * documentation and/or other materials provided with the distribution. 169a57b7d2SSøren Schmidt * 3. The name of the author may not be used to endorse or promote products 1721dc7d4fSJens Schweikhardt * derived from this software without specific prior written permission 189a57b7d2SSøren Schmidt * 199a57b7d2SSøren Schmidt * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 209a57b7d2SSøren Schmidt * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 219a57b7d2SSøren Schmidt * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 229a57b7d2SSøren Schmidt * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 239a57b7d2SSøren Schmidt * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 249a57b7d2SSøren Schmidt * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 259a57b7d2SSøren Schmidt * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 269a57b7d2SSøren Schmidt * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 279a57b7d2SSøren Schmidt * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 289a57b7d2SSøren Schmidt * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 299a57b7d2SSøren Schmidt */ 309a57b7d2SSøren Schmidt 31e67f5b9fSMatthew Dillon #include <sys/cdefs.h> 32e67f5b9fSMatthew Dillon __FBSDID("$FreeBSD$"); 33e67f5b9fSMatthew Dillon 349a57b7d2SSøren Schmidt #include <stdio.h> 3500d25f51SPoul-Henning Kamp #include <sys/fbio.h> 369a57b7d2SSøren Schmidt #include "vgl.h" 379a57b7d2SSøren Schmidt 389c4ec222SPedro F. Giffuni static VGLText *VGLTextFont; 399a57b7d2SSøren Schmidt 409a57b7d2SSøren Schmidt extern byte VGLFont[]; 419a57b7d2SSøren Schmidt 429a57b7d2SSøren Schmidt int 439a57b7d2SSøren Schmidt VGLTextSetFontFile(char *filename) 449a57b7d2SSøren Schmidt { 459a57b7d2SSøren Schmidt FILE *fd; 469a57b7d2SSøren Schmidt 479a57b7d2SSøren Schmidt if (VGLTextFont) { 48e4f33369SSøren Schmidt if (VGLTextFont->BitmapArray != VGLFont) 499a57b7d2SSøren Schmidt free (VGLTextFont->BitmapArray); 509a57b7d2SSøren Schmidt free(VGLTextFont); 519a57b7d2SSøren Schmidt } 529a57b7d2SSøren Schmidt 539a57b7d2SSøren Schmidt if ((VGLTextFont=(VGLText*)malloc(sizeof(VGLText))) == (VGLText*)0) 549a57b7d2SSøren Schmidt return 1; 559a57b7d2SSøren Schmidt 569a57b7d2SSøren Schmidt if (filename==NULL) { 579a57b7d2SSøren Schmidt VGLTextFont->Width = 8; 589a57b7d2SSøren Schmidt VGLTextFont->Height = 8; 599a57b7d2SSøren Schmidt VGLTextFont->BitmapArray = VGLFont; 609a57b7d2SSøren Schmidt } 619a57b7d2SSøren Schmidt else { 629a57b7d2SSøren Schmidt if ((fd=fopen(filename, "r"))==(FILE*)0) 639a57b7d2SSøren Schmidt return 1; 649a57b7d2SSøren Schmidt fread(&VGLTextFont->Width, 1 , 1, fd); 659a57b7d2SSøren Schmidt fread(&VGLTextFont->Height, 1 , 1, fd); 669a57b7d2SSøren Schmidt VGLTextFont->BitmapArray = 675e7a62b2SKazutaka YOKOTA (byte*)malloc(256*((VGLTextFont->Width + 7)/8)*VGLTextFont->Height); 689a57b7d2SSøren Schmidt fread(VGLTextFont->BitmapArray, 1, 69dd38752cSBruce Evans (256*((VGLTextFont->Width + 7)/8)*VGLTextFont->Height), fd); 709a57b7d2SSøren Schmidt fclose(fd); 719a57b7d2SSøren Schmidt } 729a57b7d2SSøren Schmidt return 0; 739a57b7d2SSøren Schmidt } 749a57b7d2SSøren Schmidt 759a57b7d2SSøren Schmidt void 769a57b7d2SSøren Schmidt VGLBitmapPutChar(VGLBitmap *Object, int x, int y, byte ch, 77*dd31deb8SBruce Evans u_long fgcol, u_long bgcol, int fill, int dir) 789a57b7d2SSøren Schmidt { 79dd38752cSBruce Evans int b, Bpc, Bpl, lin, bit, topbit; 809a57b7d2SSøren Schmidt 81dd38752cSBruce Evans Bpl = (VGLTextFont->Width + 7) / 8; 82dd38752cSBruce Evans Bpc = Bpl * VGLTextFont->Height; 83dd38752cSBruce Evans topbit = VGLTextFont->Width - 1; 849a57b7d2SSøren Schmidt for(lin = 0; lin < VGLTextFont->Height; lin++) { 859a57b7d2SSøren Schmidt for(bit = 0; bit < VGLTextFont->Width; bit++) { 86dd38752cSBruce Evans b = bit + (-VGLTextFont->Width & 7); 87dd38752cSBruce Evans if (VGLTextFont->BitmapArray[(ch*Bpc)+(lin*Bpl)+(b/8)]&(1<<(b%8))) 889a57b7d2SSøren Schmidt switch (dir) { 899a57b7d2SSøren Schmidt case 0: 90dd38752cSBruce Evans VGLSetXY(Object, (x+topbit-bit), (y+lin), fgcol); 919a57b7d2SSøren Schmidt break; 929a57b7d2SSøren Schmidt case 1: 93dd38752cSBruce Evans VGLSetXY(Object, (x+lin), (y-topbit+bit), fgcol); 949a57b7d2SSøren Schmidt break; 959a57b7d2SSøren Schmidt case 2: 96dd38752cSBruce Evans VGLSetXY(Object, (x-topbit+bit), (y-lin), fgcol); 979a57b7d2SSøren Schmidt break; 989a57b7d2SSøren Schmidt case 3: 99dd38752cSBruce Evans VGLSetXY(Object, (x-lin), (y+topbit-bit), fgcol); 1009a57b7d2SSøren Schmidt break; 1019a57b7d2SSøren Schmidt case 4: 102dd38752cSBruce Evans VGLSetXY(Object, (x+lin+topbit-bit), (y+lin+bit), fgcol); 1039a57b7d2SSøren Schmidt break; 1049a57b7d2SSøren Schmidt } 1059a57b7d2SSøren Schmidt else if (fill) 1069a57b7d2SSøren Schmidt switch (dir) { 1079a57b7d2SSøren Schmidt case 0: 108dd38752cSBruce Evans VGLSetXY(Object, (x+topbit-bit), (y+lin), bgcol); 1099a57b7d2SSøren Schmidt break; 1109a57b7d2SSøren Schmidt case 1: 111dd38752cSBruce Evans VGLSetXY(Object, (x+lin), (y-topbit+bit), bgcol); 1129a57b7d2SSøren Schmidt break; 1139a57b7d2SSøren Schmidt case 2: 114dd38752cSBruce Evans VGLSetXY(Object, (x-topbit+bit), (y-lin), bgcol); 1159a57b7d2SSøren Schmidt break; 1169a57b7d2SSøren Schmidt case 3: 117dd38752cSBruce Evans VGLSetXY(Object, (x-lin), (y+topbit-bit), bgcol); 1189a57b7d2SSøren Schmidt break; 1199a57b7d2SSøren Schmidt case 4: 120dd38752cSBruce Evans VGLSetXY(Object, (x+lin+topbit-bit), (y+lin+bit), bgcol); 1219a57b7d2SSøren Schmidt break; 1229a57b7d2SSøren Schmidt } 1239a57b7d2SSøren Schmidt } 1249a57b7d2SSøren Schmidt } 1259a57b7d2SSøren Schmidt } 1269a57b7d2SSøren Schmidt 1279a57b7d2SSøren Schmidt void 1289a57b7d2SSøren Schmidt VGLBitmapString(VGLBitmap *Object, int x, int y, char *str, 129*dd31deb8SBruce Evans u_long fgcol, u_long bgcol, int fill, int dir) 1309a57b7d2SSøren Schmidt { 1319a57b7d2SSøren Schmidt int pos; 1329a57b7d2SSøren Schmidt 1339a57b7d2SSøren Schmidt for (pos=0; pos<strlen(str); pos++) { 1349a57b7d2SSøren Schmidt switch (dir) { 1359a57b7d2SSøren Schmidt case 0: 1369a57b7d2SSøren Schmidt VGLBitmapPutChar(Object, x+(pos*VGLTextFont->Width), y, 1379a57b7d2SSøren Schmidt str[pos], fgcol, bgcol, fill, dir); 1389a57b7d2SSøren Schmidt break; 1399a57b7d2SSøren Schmidt case 1: 1409a57b7d2SSøren Schmidt VGLBitmapPutChar(Object, x, y-(pos*VGLTextFont->Width), 1419a57b7d2SSøren Schmidt str[pos], fgcol, bgcol, fill, dir); 1429a57b7d2SSøren Schmidt break; 1439a57b7d2SSøren Schmidt case 2: 1449a57b7d2SSøren Schmidt VGLBitmapPutChar(Object, x-(pos*VGLTextFont->Width), y, 1459a57b7d2SSøren Schmidt str[pos], fgcol, bgcol, fill, dir); 1469a57b7d2SSøren Schmidt break; 1479a57b7d2SSøren Schmidt case 3: 1489a57b7d2SSøren Schmidt VGLBitmapPutChar(Object, x, y+(pos*VGLTextFont->Width), 1499a57b7d2SSøren Schmidt str[pos], fgcol, bgcol, fill, dir); 1509a57b7d2SSøren Schmidt break; 1519a57b7d2SSøren Schmidt case 4: 1529a57b7d2SSøren Schmidt VGLBitmapPutChar(Object, x+(pos*VGLTextFont->Width), 1539a57b7d2SSøren Schmidt y-(pos*VGLTextFont->Width), 1549a57b7d2SSøren Schmidt str[pos], fgcol, bgcol, fill, dir); 1559a57b7d2SSøren Schmidt break; 1569a57b7d2SSøren Schmidt } 1579a57b7d2SSøren Schmidt } 1589a57b7d2SSøren Schmidt } 1599a57b7d2SSøren Schmidt 1609a57b7d2SSøren Schmidt byte VGLFont[] = { 1619a57b7d2SSøren Schmidt 0,0,0,0,0,0,0,0,126,129,165,129,189,153,129,126,126,255,219,255,195,231, 1629a57b7d2SSøren Schmidt 255,126,108,254,254,254,124,56,16,0,16,56,124,254,124,56,16,0,56,124,56, 1639a57b7d2SSøren Schmidt 254,254,124,56,124,16,16,56,124,254,124,56,124,0,0,24,60,60,24,0,0,255, 1649a57b7d2SSøren Schmidt 255,231,195,195,231,255,255,0,60,102,66,66,102,60,0,255,195,153,189,189, 1659a57b7d2SSøren Schmidt 153,195,255,15,7,15,125,204,204,204,120,60,102,102,102,60,24,126,24,63, 1669a57b7d2SSøren Schmidt 51,63,48,48,112,240,224,127,99,127,99,99,103,230,192,153,90,60,231,231, 1679a57b7d2SSøren Schmidt 60,90,153,128,224,248,254,248,224,128,0,2,14,62,254,62,14,2,0,24,60,126, 1689a57b7d2SSøren Schmidt 24,24,126,60,24,102,102,102,102,102,0,102,0,127,219,219,123,27,27,27,0, 1699a57b7d2SSøren Schmidt 62,99,56,108,108,56,204,120,0,0,0,0,126,126,126,0,24,60,126,24,126,60,24, 1709a57b7d2SSøren Schmidt 255,24,60,126,24,24,24,24,0,24,24,24,24,126,60,24,0,0,24,12,254,12,24,0, 1719a57b7d2SSøren Schmidt 0,0,48,96,254,96,48,0,0,0,0,192,192,192,254,0,0,0,36,102,255,102,36,0,0, 1729a57b7d2SSøren Schmidt 0,24,60,126,255,255,0,0,0,255,255,126,60,24,0,0,0,0,0,0,0,0,0,0,48,120, 1739a57b7d2SSøren Schmidt 120,48,48,0,48,0,108,108,108,0,0,0,0,0,108,108,254,108,254,108,108,0,48, 1749a57b7d2SSøren Schmidt 124,192,120,12,248,48,0,0,198,204,24,48,102,198,0,56,108,56,118,220,204, 1759a57b7d2SSøren Schmidt 118,0,96,96,192,0,0,0,0,0,24,48,96,96,96,48,24,0,96,48,24,24,24,48,96,0, 1769a57b7d2SSøren Schmidt 0,102,60,255,60,102,0,0,0,48,48,252,48,48,0,0,0,0,0,0,0,48,48,96,0,0,0, 1779a57b7d2SSøren Schmidt 252,0,0,0,0,0,0,0,0,0,48,48,0,6,12,24,48,96,192,128,0,124,198,206,222,246, 1789a57b7d2SSøren Schmidt 230,124,0,48,112,48,48,48,48,252,0,120,204,12,56,96,204,252,0,120,204,12, 1799a57b7d2SSøren Schmidt 56,12,204,120,0,28,60,108,204,254,12,30,0,252,192,248,12,12,204,120,0,56, 1809a57b7d2SSøren Schmidt 96,192,248,204,204,120,0,252,204,12,24,48,48,48,0,120,204,204,120,204,204, 1819a57b7d2SSøren Schmidt 120,0,120,204,204,124,12,24,112,0,0,48,48,0,0,48,48,0,0,48,48,0,0,48,48, 1829a57b7d2SSøren Schmidt 96,24,48,96,192,96,48,24,0,0,0,252,0,0,252,0,0,96,48,24,12,24,48,96,0,120, 1839a57b7d2SSøren Schmidt 204,12,24,48,0,48,0,124,198,222,222,222,192,120,0,48,120,204,204,252,204, 1849a57b7d2SSøren Schmidt 204,0,252,102,102,124,102,102,252,0,60,102,192,192,192,102,60,0,248,108, 1859a57b7d2SSøren Schmidt 102,102,102,108,248,0,254,98,104,120,104,98,254,0,254,98,104,120,104,96, 1869a57b7d2SSøren Schmidt 240,0,60,102,192,192,206,102,62,0,204,204,204,252,204,204,204,0,120,48, 1879a57b7d2SSøren Schmidt 48,48,48,48,120,0,30,12,12,12,204,204,120,0,230,102,108,120,108,102,230, 1889a57b7d2SSøren Schmidt 0,240,96,96,96,98,102,254,0,198,238,254,254,214,198,198,0,198,230,246,222, 1899a57b7d2SSøren Schmidt 206,198,198,0,56,108,198,198,198,108,56,0,252,102,102,124,96,96,240,0,120, 1909a57b7d2SSøren Schmidt 204,204,204,220,120,28,0,252,102,102,124,108,102,230,0,120,204,224,112, 1919a57b7d2SSøren Schmidt 28,204,120,0,252,180,48,48,48,48,120,0,204,204,204,204,204,204,252,0,204, 1929a57b7d2SSøren Schmidt 204,204,204,204,120,48,0,198,198,198,214,254,238,198,0,198,198,108,56,56, 1939a57b7d2SSøren Schmidt 108,198,0,204,204,204,120,48,48,120,0,254,198,140,24,50,102,254,0,120,96, 1949a57b7d2SSøren Schmidt 96,96,96,96,120,0,192,96,48,24,12,6,2,0,120,24,24,24,24,24,120,0,16,56, 1959a57b7d2SSøren Schmidt 108,198,0,0,0,0,0,0,0,0,0,0,0,255,48,48,24,0,0,0,0,0,0,0,120,12,124,204, 1969a57b7d2SSøren Schmidt 118,0,224,96,96,124,102,102,220,0,0,0,120,204,192,204,120,0,28,12,12,124, 1979a57b7d2SSøren Schmidt 204,204,118,0,0,0,120,204,252,192,120,0,56,108,96,240,96,96,240,0,0,0,118, 1989a57b7d2SSøren Schmidt 204,204,124,12,248,224,96,108,118,102,102,230,0,48,0,112,48,48,48,120,0, 1999a57b7d2SSøren Schmidt 12,0,12,12,12,204,204,120,224,96,102,108,120,108,230,0,112,48,48,48,48, 2009a57b7d2SSøren Schmidt 48,120,0,0,0,204,254,254,214,198,0,0,0,248,204,204,204,204,0,0,0,120,204, 2019a57b7d2SSøren Schmidt 204,204,120,0,0,0,220,102,102,124,96,240,0,0,118,204,204,124,12,30,0,0, 2029a57b7d2SSøren Schmidt 220,118,102,96,240,0,0,0,124,192,120,12,248,0,16,48,124,48,48,52,24,0,0, 2039a57b7d2SSøren Schmidt 0,204,204,204,204,118,0,0,0,204,204,204,120,48,0,0,0,198,214,254,254,108, 2049a57b7d2SSøren Schmidt 0,0,0,198,108,56,108,198,0,0,0,204,204,204,124,12,248,0,0,252,152,48,100, 2059a57b7d2SSøren Schmidt 252,0,28,48,48,224,48,48,28,0,24,24,24,0,24,24,24,0,224,48,48,28,48,48, 2069a57b7d2SSøren Schmidt 224,0,118,220,0,0,0,0,0,0,0,16,56,108,198,198,254,0,0,0,0,0,0,0,0,0,0,0, 2079a57b7d2SSøren Schmidt 60,126,255,126,24,0,170,85,85,170,170,85,85,170,68,68,68,68,31,4,4,4,124, 2089a57b7d2SSøren Schmidt 64,64,64,31,16,16,16,56,68,68,56,30,17,20,19,64,64,64,124,31,16,16,16,56, 2099a57b7d2SSøren Schmidt 108,56,0,0,0,0,0,0,0,24,24,24,24,126,0,68,100,76,68,16,16,16,31,68,68,40, 2109a57b7d2SSøren Schmidt 16,31,4,4,4,24,24,24,24,248,0,0,0,0,0,0,0,248,24,24,24,0,0,0,0,31,24,24, 2119a57b7d2SSøren Schmidt 24,24,24,24,24,31,0,0,0,24,24,24,24,255,24,24,24,0,0,0,0,0,0,0,0,0,0,0, 2129a57b7d2SSøren Schmidt 0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,0,0,0,24,24,24, 2139a57b7d2SSøren Schmidt 24,31,24,24,24,24,24,24,24,248,24,24,24,24,24,24,24,255,0,0,0,0,0,0,0,255, 2149a57b7d2SSøren Schmidt 24,24,24,24,24,24,24,24,24,24,24,0,12,48,96,24,12,126,0,0,48,12,6,24,48, 2159a57b7d2SSøren Schmidt 126,0,0,0,3,62,54,54,108,0,0,0,4,126,16,126,64,0,0,28,48,48,48,48,126,0, 2169a57b7d2SSøren Schmidt 0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,48,0,48,48,120,120,48,0,0,0,16,124,192, 2179a57b7d2SSøren Schmidt 192,124,16,0,56,96,96,240,96,252,0,0,195,60,102,102,60,195,0,0,204,204, 2189a57b7d2SSøren Schmidt 120,48,252,48,0,24,24,24,0,24,24,24,0,126,192,124,198,124,6,252,0,198,0, 2199a57b7d2SSøren Schmidt 0,0,0,0,0,0,124,130,186,162,186,130,124,0,28,6,30,34,31,63,0,0,0,51,102, 2209a57b7d2SSøren Schmidt 204,102,51,0,0,0,254,6,0,0,0,0,0,0,0,0,0,0,0,0,0,124,130,186,178,170,130, 2219a57b7d2SSøren Schmidt 124,0,254,0,0,0,0,0,0,0,56,108,56,0,0,0,0,0,0,16,124,16,0,124,0,0,28,54, 2229a57b7d2SSøren Schmidt 6,24,62,0,0,0,30,2,14,2,30,0,0,0,24,48,0,0,0,0,0,0,0,0,204,204,204,204, 2239a57b7d2SSøren Schmidt 118,192,126,202,202,126,10,10,10,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,24,48,6, 2249a57b7d2SSøren Schmidt 14,6,6,6,0,0,0,14,17,17,17,14,31,0,0,0,204,102,51,102,204,0,0,96,224,102, 2259a57b7d2SSøren Schmidt 108,51,103,15,3,96,224,102,108,54,106,4,14,240,32,150,108,51,103,15,3,48, 2269a57b7d2SSøren Schmidt 0,48,96,192,204,120,0,24,12,48,120,204,252,204,0,96,192,48,120,204,252, 2279a57b7d2SSøren Schmidt 204,0,120,132,48,120,204,252,204,0,102,152,48,120,204,252,204,0,204,0,48, 2289a57b7d2SSøren Schmidt 120,204,252,204,0,48,72,48,120,204,252,204,0,62,120,152,156,248,152,158, 2299a57b7d2SSøren Schmidt 0,60,102,192,192,192,102,28,48,48,24,254,98,120,98,254,0,24,48,254,98,120, 2309a57b7d2SSøren Schmidt 98,254,0,56,68,254,98,120,98,254,0,102,0,254,98,120,98,254,0,96,48,120, 2319a57b7d2SSøren Schmidt 48,48,48,120,0,24,48,120,48,48,48,120,0,120,132,120,48,48,48,120,0,204, 2329a57b7d2SSøren Schmidt 0,120,48,48,48,120,0,120,108,102,246,102,108,120,0,102,152,230,246,222, 2339a57b7d2SSøren Schmidt 206,198,0,48,24,124,198,198,198,124,0,24,48,124,198,198,198,124,0,56,68, 2349a57b7d2SSøren Schmidt 124,198,198,198,124,0,102,152,124,198,198,198,124,0,198,0,124,198,198,198, 2359a57b7d2SSøren Schmidt 124,0,0,198,108,56,56,108,198,0,6,124,206,154,178,230,120,192,96,48,204, 2369a57b7d2SSøren Schmidt 204,204,204,252,0,24,48,204,204,204,204,252,0,120,132,204,204,204,204,252, 2379a57b7d2SSøren Schmidt 0,204,0,204,204,204,204,252,0,24,48,204,204,120,48,120,0,96,120,108,120, 2389a57b7d2SSøren Schmidt 96,96,96,0,120,204,196,220,198,198,220,192,48,24,120,12,124,204,118,0,24, 2399a57b7d2SSøren Schmidt 48,120,12,124,204,118,0,120,132,120,12,124,204,118,0,102,152,120,12,124, 2409a57b7d2SSøren Schmidt 204,118,0,204,0,120,12,124,204,118,0,48,72,56,12,124,204,118,0,0,0,236, 2419a57b7d2SSøren Schmidt 50,126,176,110,0,0,0,60,102,192,102,28,48,48,24,120,204,252,192,120,0,24, 2429a57b7d2SSøren Schmidt 48,120,204,252,192,120,0,120,132,120,204,252,192,120,0,204,0,120,204,252, 2439a57b7d2SSøren Schmidt 192,120,0,96,48,0,112,48,48,120,0,24,48,0,112,48,48,120,0,112,136,0,112, 2449a57b7d2SSøren Schmidt 48,48,120,0,204,0,0,112,48,48,120,0,108,56,108,12,108,204,120,0,102,152, 2459a57b7d2SSøren Schmidt 248,204,204,204,204,0,96,48,0,124,198,198,124,0,24,48,0,124,198,198,124, 2469a57b7d2SSøren Schmidt 0,56,68,0,124,198,198,124,0,102,152,0,124,198,198,124,0,198,0,0,124,198, 2479a57b7d2SSøren Schmidt 198,124,0,0,0,24,0,126,0,24,0,0,0,6,124,222,246,124,192,96,48,0,204,204, 2489a57b7d2SSøren Schmidt 204,118,0,24,48,0,204,204,204,118,0,48,72,0,204,204,204,118,0,204,0,0,204, 2499a57b7d2SSøren Schmidt 204,204,118,0,24,48,204,204,204,124,12,248,224,120,108,102,108,120,224, 2509a57b7d2SSøren Schmidt 0,204,0,204,204,204,124,12,248 2519a57b7d2SSøren Schmidt }; 252