[Scummvm-cvs-logs] SF.net SVN: scummvm: [25769] scummvm/trunk

cyx at users.sourceforge.net cyx at users.sourceforge.net
Wed Feb 21 21:27:51 CET 2007


Revision: 25769
          http://scummvm.svn.sourceforge.net/scummvm/?rev=25769&view=rev
Author:   cyx
Date:     2007-02-21 12:27:48 -0800 (Wed, 21 Feb 2007)

Log Message:
-----------
added initial support for FOTAQ amiga versions

Modified Paths:
--------------
    scummvm/trunk/engines/queen/bankman.cpp
    scummvm/trunk/engines/queen/bankman.h
    scummvm/trunk/engines/queen/display.cpp
    scummvm/trunk/engines/queen/display.h
    scummvm/trunk/engines/queen/graphics.cpp
    scummvm/trunk/engines/queen/journal.cpp
    scummvm/trunk/engines/queen/logic.cpp
    scummvm/trunk/engines/queen/music.cpp
    scummvm/trunk/engines/queen/queen.cpp
    scummvm/trunk/engines/queen/queen.h
    scummvm/trunk/engines/queen/resource.cpp
    scummvm/trunk/engines/queen/resource.h
    scummvm/trunk/engines/queen/sound.cpp
    scummvm/trunk/engines/queen/sound.h
    scummvm/trunk/engines/queen/talk.cpp
    scummvm/trunk/sound/mods/rjp1.cpp
    scummvm/trunk/sound/mods/rjp1.h
    scummvm/trunk/tools/qtable/qtable.c

Added Paths:
-----------
    scummvm/trunk/tools/qtable/fat_amiga_demo.h
    scummvm/trunk/tools/qtable/fat_amiga_eng_floppy.h
    scummvm/trunk/tools/qtable/fat_amiga_interview.h

Modified: scummvm/trunk/engines/queen/bankman.cpp
===================================================================
--- scummvm/trunk/engines/queen/bankman.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/bankman.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -31,7 +31,6 @@
 	: _res(res) {
 	memset(_frames, 0, sizeof(_frames));
 	memset(_banks, 0, sizeof(_banks));
-	memset(_loadedBanks, 0, sizeof(_loadedBanks));
 }
 
 BankManager::~BankManager() {
@@ -43,102 +42,189 @@
 
 void BankManager::load(const char *bankname, uint32 bankslot) {
 	debug(9, "BankManager::load(%s, %d)", bankname, bankslot);
+
 	assert(bankslot < MAX_BANKS_NUMBER);
+	PackedBank *bank = &_banks[bankslot];
 
-	if (!scumm_stricmp(bankname, _loadedBanks[bankslot])) {
+	if (!scumm_stricmp(bankname, bank->name)) {
 		debug(9, "BankManager::load() bank '%s' already loaded", bankname);
 		return;
 	}
 
 	close(bankslot);
-	_banks[bankslot].data = _res->loadFile(bankname);
+	bank->data = _res->loadFile(bankname);
 
-	uint16 entries = READ_LE_UINT16(_banks[bankslot].data);
-	assert(entries < MAX_BANK_SIZE);
-	debug(9, "BankManager::load() entries = %d", entries);
-
-	uint32 offset = 2;
-	const uint8 *p = _banks[bankslot].data;
-	for (uint16 i = 1; i <= entries; ++i) {
-		_banks[bankslot].indexes[i] = offset;
-		uint16 w = READ_LE_UINT16(p + offset + 0);
-		uint16 h = READ_LE_UINT16(p + offset + 2);
-		// jump to next entry, skipping data & header
-		offset += w * h + 8;
+	if (_res->getPlatform() == Common::kPlatformAmiga) {
+		uint16 entries = READ_BE_UINT16(bank->data + 4);
+		assert(entries < MAX_BANK_SIZE);
+		debug(9, "BankManager::load() entries = %d", entries);
+		uint32 offset = 6;
+		for (uint16 i = 1; i <= entries; ++i) {
+			_banks[bankslot].indexes[i] = offset;
+			uint16 dataSize = READ_BE_UINT16(bank->data + offset + 10);
+			offset += dataSize + 12;
+		}
+	} else {
+		uint16 entries = READ_LE_UINT16(bank->data);
+		assert(entries < MAX_BANK_SIZE);
+		debug(9, "BankManager::load() entries = %d", entries);
+		uint32 offset = 2;
+		for (uint16 i = 1; i <= entries; ++i) {
+			_banks[bankslot].indexes[i] = offset;
+			uint16 w = READ_LE_UINT16(bank->data + offset + 0);
+			uint16 h = READ_LE_UINT16(bank->data + offset + 2);
+			offset += w * h + 8;
+		}
 	}
 
 	// mark this bank as loaded
-	strcpy(_loadedBanks[bankslot], bankname);
+	strcpy(bank->name, bankname);
 }
 
+static void convertPlanarBitmap(uint8 *dst, int dstPitch, const uint8 *src, int w, int h, int plane) {
+	assert(w != 0 && h != 0);
+	int planarSize = plane * h * w * 2;
+	uint8 *planarBuf = new uint8[ planarSize ];
+	uint8 *dstPlanar = planarBuf;
+	while (planarSize > 0) {
+		if (src[0] == 0) {
+			int count = src[1];
+			memset(dstPlanar, 0, count);
+			dstPlanar += count;
+			src += 2;
+			planarSize -= count;
+		} else {
+			*dstPlanar++ = *src++;
+			--planarSize;
+		}
+	}
+
+	src = planarBuf;
+	int i = 0;
+	int planeSize = h * w * 2;
+	while (h--) {
+		for (int x = 0; x < w * 2; ++x) {
+			for (int b = 0; b < 8; ++b) {
+				const uint8 mask = (1 << (7 - b));
+				uint8 color = 0;
+				for (int p = 0; p < plane; ++p) {
+					if (src[planeSize * p + i] & mask) {
+						color |= (1 << p);
+					}
+				}
+				dst[8 * x + b] = color;
+			}
+			++i;
+		}
+		dst += dstPitch;
+	}
+
+	delete[] planarBuf;
+}
+
 void BankManager::unpack(uint32 srcframe, uint32 dstframe, uint32 bankslot) {
 	debug(9, "BankManager::unpack(%d, %d, %d)", srcframe, dstframe, bankslot);
+
 	assert(bankslot < MAX_BANKS_NUMBER);
-	assert(_banks[bankslot].data != NULL);
+	PackedBank *bank = &_banks[bankslot];
+	assert(bank->data != NULL);
 
-	BobFrame *pbf = &_frames[dstframe];
-	const uint8 *p = _banks[bankslot].data + _banks[bankslot].indexes[srcframe];
-	pbf->width    = READ_LE_UINT16(p + 0);
-	pbf->height   = READ_LE_UINT16(p + 2);
-	pbf->xhotspot = READ_LE_UINT16(p + 4);
-	pbf->yhotspot = READ_LE_UINT16(p + 6);
+	assert(dstframe < MAX_FRAMES_NUMBER);
+	BobFrame *bf = &_frames[dstframe];
+	delete[] bf->data;
+	bf->data = NULL;
 
-	uint32 size = pbf->width * pbf->height;
-	delete[] pbf->data;
-	pbf->data = new uint8[ size ];
-	memcpy(pbf->data, p + 8, size);
+	const uint8 *p = bank->data + bank->indexes[srcframe];
+
+	if (_res->getPlatform() == Common::kPlatformAmiga) {
+		uint16 w     = READ_BE_UINT16(p + 0);
+		uint16 h     = READ_BE_UINT16(p + 2);
+		uint16 plane = READ_BE_UINT16(p + 4);
+		bf->xhotspot = READ_BE_UINT16(p + 6);
+		bf->yhotspot = READ_BE_UINT16(p + 8);
+		bf->width    = w * 16;
+		bf->height   = h;
+
+		uint32 size = bf->width * bf->height;
+		bf->data = new uint8[ size ];
+		convertPlanarBitmap(bf->data, bf->width, p + 12, w, h, plane);
+	} else {
+		bf->width    = READ_LE_UINT16(p + 0);
+		bf->height   = READ_LE_UINT16(p + 2);
+		bf->xhotspot = READ_LE_UINT16(p + 4);
+		bf->yhotspot = READ_LE_UINT16(p + 6);
+
+		uint32 size = bf->width * bf->height;
+		bf->data = new uint8[ size ];
+		memcpy(bf->data, p + 8, size);
+	}
 }
 
 void BankManager::overpack(uint32 srcframe, uint32 dstframe, uint32 bankslot) {
 	debug(9, "BankManager::overpack(%d, %d, %d)", srcframe, dstframe, bankslot);
+
 	assert(bankslot < MAX_BANKS_NUMBER);
-	assert(_banks[bankslot].data != NULL);
+	PackedBank *bank = &_banks[bankslot];
+	assert(bank->data != NULL);
 
-	const uint8 *p = _banks[bankslot].data + _banks[bankslot].indexes[srcframe];
-	uint16 src_w = READ_LE_UINT16(p + 0);
-	uint16 src_h = READ_LE_UINT16(p + 2);
+	assert(dstframe < MAX_FRAMES_NUMBER);
+	BobFrame *bf = &_frames[dstframe];
 
-	// unpack if destination frame is smaller than source one
-	if (_frames[dstframe].width < src_w || _frames[dstframe].height < src_h) {
-		unpack(srcframe, dstframe, bankslot);
+	const uint8 *p = bank->data + bank->indexes[srcframe];
+
+	if (_res->getPlatform() == Common::kPlatformAmiga) {
+		uint16 w     = READ_BE_UINT16(p + 0);
+		uint16 h     = READ_BE_UINT16(p + 2);
+		uint16 plane = READ_BE_UINT16(p + 4);
+		uint16 src_w = w * 16;
+		uint16 src_h = h;
+
+		if (bf->width < src_w || bf->height < src_h) {
+			unpack(srcframe, dstframe, bankslot);
+		} else {
+			convertPlanarBitmap(bf->data, bf->width, p + 12, w, h, plane);
+		}
 	} else {
-		// copy data 'over' destination frame (without changing frame header)
-		memcpy(_frames[dstframe].data, p + 8, src_w * src_h);
+		uint16 src_w = READ_LE_UINT16(p + 0);
+		uint16 src_h = READ_LE_UINT16(p + 2);
+
+		// unpack if destination frame is smaller than source
+		if (bf->width < src_w || bf->height < src_h) {
+			unpack(srcframe, dstframe, bankslot);
+		} else {
+			// copy data 'over' destination frame (without updating frame header)
+			memcpy(bf->data, p + 8, src_w * src_h);
+		}
 	}
 }
 
 void BankManager::close(uint32 bankslot) {
 	debug(9, "BankManager::close(%d)", bankslot);
 	assert(bankslot < MAX_BANKS_NUMBER);
-	delete[] _banks[bankslot].data;
-	memset(&_banks[bankslot], 0, sizeof(PackedBank));
-	_loadedBanks[bankslot][0] = '\0';
+	PackedBank *bank = &_banks[bankslot];
+	delete[] bank->data;
+	memset(bank, 0, sizeof(PackedBank));
 }
 
 BobFrame *BankManager::fetchFrame(uint32 index) {
 	debug(9, "BankManager::fetchFrame(%d)", index);
 	assert(index < MAX_FRAMES_NUMBER);
-	BobFrame *pbf = &_frames[index];
-	assert(pbf->data != 0);
-	return pbf;
+	BobFrame *bf = &_frames[index];
+	assert(bf->data != 0);
+	return bf;
 }
 
 void BankManager::eraseFrame(uint32 index) {
 	debug(9, "BankManager::eraseFrame(%d)", index);
 	assert(index < MAX_FRAMES_NUMBER);
-	BobFrame *pbf = &_frames[index];
-	delete[] pbf->data;
-	memset(pbf, 0, sizeof(BobFrame));
+	BobFrame *bf = &_frames[index];
+	delete[] bf->data;
+	memset(bf, 0, sizeof(BobFrame));
 }
 
 void BankManager::eraseFrames(bool joe) {
-	uint32 i = 0;
-	if (!joe) {
-		i = FRAMES_JOE;
-	}
-	while (i < MAX_FRAMES_NUMBER) {
+	for (uint32 i = joe ? 0 : FRAMES_JOE; i < MAX_FRAMES_NUMBER; ++i) {
 		eraseFrame(i);
-		++i;
 	}
 }
 

Modified: scummvm/trunk/engines/queen/bankman.h
===================================================================
--- scummvm/trunk/engines/queen/bankman.h	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/bankman.h	2007-02-21 20:27:48 UTC (rev 25769)
@@ -68,6 +68,7 @@
 	struct PackedBank {
 		uint32 indexes[MAX_BANK_SIZE];
 		uint8 *data;
+		char name[20];
 	};
 
 	//! unpacked bob frames
@@ -76,9 +77,6 @@
 	 //! banked bob frames
 	PackedBank _banks[MAX_BANKS_NUMBER];
 
-	//! loaded banks names
-	char _loadedBanks[MAX_BANKS_NUMBER][20];
-
 	Resource *_res;
 };
 

Modified: scummvm/trunk/engines/queen/display.cpp
===================================================================
--- scummvm/trunk/engines/queen/display.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/display.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -45,18 +45,11 @@
 	: _fullscreen(true), _horizontalScroll(0), _bdWidth(0), _bdHeight(0),
 	_system(system), _vm(vm) {
 
-	if (vm->resource()->getLanguage() == Common::HB_ISR)
-		_font = _fontHebrew;
-	else if (vm->resource()->getLanguage() == Common::RU_RUS)
-		_font = _fontRussian;
-	else
-		_font = _fontRegular;
-
 	initFont();
 
-	_screenBuf   = new uint8[SCREEN_W * SCREEN_H];
-	_panelBuf    = new uint8[PANEL_W * PANEL_H];
-	_backdropBuf = new uint8[BACKDROP_W * BACKDROP_H];
+	_screenBuf   = new uint8[ SCREEN_W * SCREEN_H ];
+	_panelBuf    = new uint8[ PANEL_W * PANEL_H ];
+	_backdropBuf = new uint8[ BACKDROP_W * BACKDROP_H ];
 	memset(_screenBuf,   0, SCREEN_W * SCREEN_H);
 	memset(_panelBuf,    0, PANEL_W * PANEL_H);
 	memset(_backdropBuf, 0, BACKDROP_W * BACKDROP_H);
@@ -77,6 +70,11 @@
 	_pal.dirtyMax = 255;
 	_pal.scrollable = true;
 
+	_imageExt = (_vm->resource()->getPlatform() == Common::kPlatformAmiga) ? "LBM" : "PCX";
+
+	_curTextColor = 0;
+	memset(_texts, 0, sizeof(_texts));
+
 	memset(&_dynalum, 0, sizeof(_dynalum));
 }
 
@@ -106,10 +104,10 @@
 
 	if (!isPalFadingDisabled(roomNum)) {
 		char filename[20];
-		sprintf(filename, "%s.msk", roomName);
+		sprintf(filename, "%s.MSK", roomName);
 		if (_vm->resource()->fileExists(filename)) {
 			_dynalum.mskBuf = (uint8 *)_vm->resource()->loadFile(filename, 0, &_dynalum.mskSize);
-			sprintf(filename, "%s.lum", roomName);
+			sprintf(filename, "%s.LUM", roomName);
 			if (_vm->resource()->fileExists(filename)) {
 				_dynalum.lumBuf = (int8 *)_vm->resource()->loadFile(filename, 0, &_dynalum.lumSize);
 				_dynalum.valid = true;
@@ -628,35 +626,44 @@
 }
 
 void Display::setupPanel() {
-	uint32 size;
-	uint8 *pcxBuf = _vm->resource()->loadFile("panel.pcx", 0, &size);
-	uint8 *dst = _panelBuf + PANEL_W * 10;
-	readPCX(dst, PANEL_W, pcxBuf + 128, PANEL_W, PANEL_H - 10);
-	const uint8 *pal = pcxBuf + size - 768 + 144 * 3;
-	memcpy(_pal.panel, pal, (256 - 144) * 3);
-	delete[] pcxBuf;
+	uint16 panelWidth, panelHeight;
 
+	uint32 dataSize;
+	char dataName[20];
+	sprintf(dataName, "PANEL.%s", _imageExt);
+	uint8 *data = _vm->resource()->loadFile(dataName, 0, &dataSize);
+
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		decodeLBM(data, dataSize, _panelBuf, PANEL_W, &panelWidth, &panelHeight, _pal.panel, 0, 32, 144);
+	} else {
+		WRITE_LE_UINT16(data + 14, PANEL_H - 10);
+		decodePCX(data, dataSize, _panelBuf + PANEL_W * 10, PANEL_W, &panelWidth, &panelHeight, _pal.panel, 144, 256);
+	}
 	palSetPanel();
+
+	delete[] data;
 }
 
 void Display::setupNewRoom(const char *name, uint16 room) {
 	dynalumInit(name, room);
-	uint32 size;
-	char filename[20];
-	sprintf(filename, "%s.PCX", name);
-	uint8 *pcxBuf = _vm->resource()->loadFile(filename, 0, &size);
-	_bdWidth  = READ_LE_UINT16(pcxBuf + 12);
-	_bdHeight = READ_LE_UINT16(pcxBuf + 14);
-	readPCX(_backdropBuf, BACKDROP_W, pcxBuf + 128, _bdWidth, _bdHeight);
-	int n = getNumColorsForRoom(room);
-	if (n != 256) {
-		n = 144;
+
+	uint32 dataSize;
+	char dataName[20];
+	sprintf(dataName, "%s.%s", name, _imageExt);
+	uint8 *data = _vm->resource()->loadFile(dataName, 0, &dataSize);
+
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		decodeLBM(data, dataSize, _backdropBuf, BACKDROP_W, &_bdWidth, &_bdHeight, _pal.room, 0, 32);
+	} else {
+		int n = getNumColorsForRoom(room);
+		if (n != 256) {
+			n = 144;
+		}
+		decodePCX(data, dataSize, _backdropBuf, BACKDROP_W, &_bdWidth, &_bdHeight, _pal.room, 0, n);
+		palCustomColors(room);
 	}
-	memcpy(_pal.room, pcxBuf + size - 768, n * 3);
-	delete[] pcxBuf;
 
-	palCustomColors(room);
-
+	delete[] data;
 	forceFullRefresh();
 }
 
@@ -670,10 +677,24 @@
 }
 
 void Display::drawInventoryItem(const uint8 *data, uint16 x, uint16 y, uint16 w, uint16 h) {
-	if (data != NULL) {
-		blit(_panelBuf, PANEL_W, x, y, data, w, w, h, false, false);
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		if (data != NULL) {
+			uint8 *dst = _panelBuf + y * PANEL_W + x;
+			while (h--) {
+				for (int i = 0; i < w; ++i) {
+					dst[i] = 144 + *data++;
+				}
+				dst += PANEL_W;
+			}
+		} else {
+			fill(_panelBuf, PANEL_W, x, y, w, h, 144 + 2);
+		}
 	} else {
-		fill(_panelBuf, PANEL_W, x, y, w, h, INK_BG_PANEL);
+		if (data != NULL) {
+			blit(_panelBuf, PANEL_W, x, y, data, w, w, h, false, false);
+		} else {
+			fill(_panelBuf, PANEL_W, x, y, w, h, INK_BG_PANEL);
+		}
 	}
 	setDirtyBlock(x, 150 + y, w, h);
 }
@@ -722,10 +743,18 @@
 	}
 }
 
-void Display::readPCX(uint8 *dst, uint16 dstPitch, const uint8 *src, uint16 w, uint16 h) {
-	while (h--) {
+void Display::decodePCX(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd) {
+	*w = READ_LE_UINT16(src + 12);
+	*h = READ_LE_UINT16(src + 14);
+
+	assert(palStart <= palEnd && palEnd <= 256);
+	const uint8 *palData = src + srcSize - 768;
+	memcpy(pal, palData + palStart * 3, (palEnd - palStart) * 3);
+
+	src += 128;
+	for (int y = 0; y < *h; ++y) {
 		uint8 *p = dst;
-		while (p < dst + w) {
+		while (p < dst + *w) {
 			uint8 col = *src++;
 			if ((col & 0xC0) == 0xC0) {
 				uint8 len = col & 0x3F;
@@ -739,6 +768,75 @@
 	}
 }
 
+void Display::decodeLBM(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd, uint8 colorBase) {
+	int planeCount, planePitch;
+	const uint8 *srcEnd = src + srcSize;
+	src += 12;
+	while (src < srcEnd) {
+		uint32 type = READ_BE_UINT32(src);
+		uint32 size = READ_BE_UINT32(src + 4);
+		src += 8;
+		switch (type) {
+		case MKID_BE('BMHD'): {
+				*w = READ_BE_UINT16(src + 0);
+				*h = READ_BE_UINT16(src + 2);
+				planeCount = src[8];
+				planePitch = ((*w + 15) >> 4) * 2;
+			}
+			break;
+		case MKID_BE('CMAP'): {
+				assert(palStart <= palEnd && palEnd <= size / 3);
+				memcpy(pal, src + palStart * 3, (palEnd - palStart) * 3);
+			}
+			break;
+		case MKID_BE('BODY'): {
+				uint32 planarSize = (*h) * planeCount * planePitch;
+				uint8 *planarBuf = new uint8[planarSize];
+				uint8 *dstPlanar = planarBuf;
+				for (int y = 0; y < *h; ++y) {
+					for (int p = 0; p < planeCount; ++p) {
+						const uint8 *end = dstPlanar + planePitch;
+						while (dstPlanar < end) {
+							int code = (int8)*src++;
+							if (code != -128) {
+								if (code < 0) {
+									code = -code + 1;
+									memset(dstPlanar, *src++, code);
+								} else {
+									++code;
+									memcpy(dstPlanar, src, code);
+									src += code;
+								}
+								dstPlanar += code;
+							}
+						}
+					}
+				}
+				src = planarBuf;
+				for (int y = 0; y < *h; ++y) {
+					for (int x = 0; x < *w / 8; ++x) {
+						for (int b = 0; b < 8; ++b) {
+							const uint8 mask = (1 << (7 - b));
+							uint8 color = 0;
+							for (int p = 0; p < planeCount; ++p) {
+								if (src[planePitch * p + x] & mask) {
+									color |= 1 << p;
+								}
+							}
+							dst[x * 8 + b] = colorBase + color;
+						}
+					}
+					src += planeCount * planePitch;
+					dst += dstPitch;
+				}
+				delete[] planarBuf;
+			}
+			return;
+		}
+		src += size;
+	}
+}
+
 void Display::horizontalScrollUpdate(int16 xCamera) {
 	debug(9, "Display::horizontalScrollUpdate(%d)", xCamera);
 	if (_bdWidth <= 320) {
@@ -790,6 +888,17 @@
 }
 
 void Display::initFont() {
+	switch (_vm->resource()->getLanguage()) {
+	case Common::HB_ISR:
+		_font = _fontHebrew;
+		break;
+	case Common::RU_RUS:
+		_font = _fontRussian;
+		break;
+	default:
+		_font = _fontRegular;
+		break;
+	}
 	// calculate font justification sizes
 	for (int i = 0; i < 256; ++i) {
 		_charWidth[i] = 0;
@@ -1017,264 +1126,264 @@
 
 #ifndef PALMOS_68K
 const uint8 Display::_fontRegular[] = {
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, 
-	0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 
-	0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, 
-	0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, 
-	0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, 
-	0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00, 
-	0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, 
-	0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, 
-	0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, 
-	0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00, 
-	0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, 
-	0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 
-	0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00, 
-	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 
-	0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, 
-	0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00, 
-	0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00, 
-	0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 
-	0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, 
-	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, 
-	0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 
-	0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C, 
-	0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, 
-	0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 
-	0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, 
-	0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, 
-	0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, 
-	0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, 
-	0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 
-	0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 
-	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00, 
-	0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, 
-	0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 
-	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 
-	0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, 
-	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00, 
-	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 
-	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 
-	0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00, 
-	0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 
-	0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00, 
-	0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0, 
-	0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00, 
-	0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00, 
-	0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00, 
-	0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 
-	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 
-	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 
-	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 
-	0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x18, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x18, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 
-	0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, 
-	0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00, 
-	0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00, 
-	0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, 
-	0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 
-	0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00, 
-	0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00, 
-	0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0, 
-	0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 
-	0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, 
-	0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E, 
-	0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 
-	0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 
-	0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 
-	0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 
-	0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 
-	0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 
-	0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 
-	0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 
-	0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 
-	0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, 
-	0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 
-	0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 
-	0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, 
-	0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00, 
-	0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60, 
-	0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 
-	0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 
-	0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 
-	0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18, 
-	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 
-	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 
-	0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 
-	0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 
-	0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 
-	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, 
-	0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30, 
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00,
+	0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
+	0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
+	0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00,
+	0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
+	0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00,
+	0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
+	0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
+	0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
+	0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00,
+	0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0,
+	0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00,
+	0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00,
+	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+	0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00,
+	0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00,
+	0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00,
+	0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00,
+	0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00,
+	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
+	0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
+	0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C,
+	0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00,
+	0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+	0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
+	0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
+	0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00,
+	0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00,
+	0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+	0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00,
+	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
+	0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
+	0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78,
+	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
+	0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
+	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00,
+	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
+	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C,
+	0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00,
+	0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+	0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00,
+	0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0,
+	0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00,
+	0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00,
+	0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00,
+	0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
+	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+	0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x18, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x18, 0x30, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x18, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+	0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
+	0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00,
+	0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00,
+	0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
+	0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
+	0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00,
+	0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00,
+	0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0,
+	0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+	0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
+	0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E,
+	0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00,
+	0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+	0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+	0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+	0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
+	0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
+	0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
+	0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
+	0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
+	0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
+	0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+	0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+	0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00,
+	0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00,
+	0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60,
+	0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+	0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+	0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+	0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18,
+	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+	0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00,
+	0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+	0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00,
+	0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30,
 	0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30
 };
 
 const uint8 Display::_fontHebrew[] = {
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00, 
-	0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 
-	0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00, 
-	0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00, 
-	0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00, 
-	0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00, 
-	0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00, 
-	0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00, 
-	0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, 
-	0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00, 
-	0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0, 
-	0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00, 
-	0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00, 
-	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 
-	0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00, 
-	0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00, 
-	0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00, 
-	0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 
-	0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00, 
-	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00, 
-	0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 
-	0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C, 
-	0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00, 
-	0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 
-	0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, 
-	0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00, 
-	0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, 
-	0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, 
-	0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 
-	0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00, 
-	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00, 
-	0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, 
-	0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78, 
-	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 
-	0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00, 
-	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00, 
-	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 
-	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 
-	0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00, 
-	0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 
-	0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00, 
-	0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0, 
-	0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00, 
-	0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00, 
-	0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00, 
-	0xCC, 0x66, 0x76, 0xBC, 0x98, 0x8C, 0xE6, 0x00, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFE, 0x00, 
-	0x78, 0x18, 0x18, 0x18, 0x38, 0x78, 0xD8, 0x00, 0xFE, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0xFE, 0x06, 0x06, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x7C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 
-	0xDC, 0x66, 0xE6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0xF0, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0xFE, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF8, 0x00, 
-	0xC0, 0xFE, 0x06, 0x06, 0x0C, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00, 
-	0xFC, 0x76, 0x66, 0x66, 0x66, 0x66, 0x6E, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 
-	0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 
-	0xEE, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0xC6, 0xC6, 0xF6, 0x06, 0x06, 0x06, 0x06, 
-	0xFE, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0xFE, 0x00, 0xFE, 0x66, 0x6C, 0x78, 0x60, 0x60, 0x60, 0x60, 
-	0xEE, 0x66, 0x3C, 0x18, 0x0C, 0x06, 0xFE, 0x00, 0xFE, 0x06, 0x0E, 0xD8, 0xF0, 0xF0, 0xC0, 0xC0, 
-	0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0xEE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x7C, 0x00, 
-	0xFF, 0x67, 0x67, 0x67, 0x67, 0x67, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x00, 0x0C, 0x3E, 0x6C, 0x3E, 0x0C, 0x00, 0x00, 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x60, 0xFC, 0x00, 
-	0x42, 0x3C, 0x66, 0x3C, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x18, 0x18, 0x00, 
-	0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00, 
-	0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00, 
-	0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00, 
-	0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 
-	0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-	0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00, 
-	0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00, 
-	0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0, 
-	0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 
-	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 
-	0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00, 
-	0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E, 
-	0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00, 
-	0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 
-	0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 
-	0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 
-	0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18, 
-	0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 
-	0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 
-	0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 
-	0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 
-	0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00, 
-	0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 
-	0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 
-	0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00, 
-	0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00, 
-	0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60, 
-	0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 
-	0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 
-	0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 
-	0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18, 
-	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 
-	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 
-	0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 
-	0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00, 
-	0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 
-	0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 
-	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00, 
-	0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 
-	0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30, 
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00, 0xF8, 0xB0, 0xB0, 0x80, 0xB0, 0xB0, 0xC0, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x00,
+	0xD8, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
+	0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00, 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
+	0x38, 0x6C, 0x68, 0x36, 0xDC, 0xCC, 0x76, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x30, 0x60, 0xC0, 0xC0, 0xC0, 0x60, 0x30, 0x00, 0xC0, 0x60, 0x30, 0x30, 0x30, 0x60, 0xC0, 0x00,
+	0x00, 0x6C, 0x38, 0xFE, 0x38, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00,
+	0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x30, 0x70, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x00,
+	0x78, 0xCC, 0x0C, 0x78, 0xC0, 0xC0, 0xFC, 0x00, 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
+	0x1C, 0x3C, 0x6C, 0xCC, 0xFC, 0x0C, 0x0C, 0x00, 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
+	0x78, 0xCC, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00, 0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
+	0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00, 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00,
+	0x00, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0xC0,
+	0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC, 0x00, 0x00, 0x00,
+	0xC0, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC0, 0x00, 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00,
+	0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x38, 0x7C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+	0xF8, 0xCC, 0xCC, 0xF8, 0xCC, 0xCC, 0xF8, 0x00, 0x78, 0xCC, 0xC0, 0xC0, 0xC0, 0xCC, 0x78, 0x00,
+	0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xFC, 0x00,
+	0xFC, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xC0, 0xDC, 0xCC, 0xCC, 0x7C, 0x00,
+	0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00,
+	0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00, 0xC6, 0xCC, 0xD8, 0xF8, 0xD8, 0xCC, 0xC6, 0x00,
+	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xFC, 0x00, 0x82, 0xC6, 0xEE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
+	0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
+	0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0xC0, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xDC, 0x78, 0x0C,
+	0xF8, 0xCC, 0xCC, 0xF8, 0xD8, 0xCC, 0xCC, 0x00, 0x78, 0xCC, 0xC0, 0x78, 0x0C, 0xCC, 0x78, 0x00,
+	0xFC, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+	0xC6, 0xC6, 0x6C, 0x6C, 0x38, 0x38, 0x10, 0x00, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00,
+	0xC6, 0x6C, 0x38, 0x10, 0x38, 0x6C, 0xC6, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x00,
+	0xFC, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xFC, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00,
+	0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x00, 0xF0, 0x30, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00,
+	0xE8, 0x4D, 0x4A, 0x48, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+	0xC0, 0xC0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x7C, 0x00,
+	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xF8, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
+	0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x7C, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
+	0x38, 0x6C, 0x60, 0xF8, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x78,
+	0xC0, 0xC0, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
+	0x0C, 0x00, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0x78, 0xC0, 0xC0, 0xCC, 0xD8, 0xF0, 0xD8, 0xCC, 0x00,
+	0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0xCC, 0xEE, 0xD6, 0xC6, 0xC6, 0x00,
+	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
+	0x00, 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC0, 0xC0, 0x00, 0x00, 0x7C, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C,
+	0x00, 0x00, 0xF8, 0xCC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x7C, 0xC0, 0x78, 0x0C, 0x78, 0x00,
+	0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x00,
+	0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00, 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0x6C, 0x6C, 0x00,
+	0x00, 0x00, 0xCC, 0x78, 0x30, 0x78, 0xCC, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0xE0,
+	0x00, 0x00, 0xFC, 0x18, 0x30, 0x60, 0xFC, 0x00, 0x38, 0x60, 0x60, 0xC0, 0x60, 0x60, 0x38, 0x00,
+	0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0xE0, 0x30, 0x30, 0x18, 0x30, 0x30, 0xE0, 0x00,
+	0x38, 0x44, 0xBA, 0xAA, 0xBA, 0x44, 0x38, 0x00, 0x00, 0x98, 0x30, 0x60, 0xC8, 0x98, 0x30, 0x00,
+	0xCC, 0x66, 0x76, 0xBC, 0x98, 0x8C, 0xE6, 0x00, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFE, 0x00,
+	0x78, 0x18, 0x18, 0x18, 0x38, 0x78, 0xD8, 0x00, 0xFE, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0xFE, 0x06, 0x06, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x7C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00,
+	0xDC, 0x66, 0xE6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0xF0, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xFE, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0xF8, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xF8, 0x00,
+	0xC0, 0xFE, 0x06, 0x06, 0x0C, 0x18, 0x18, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0x00,
+	0xFC, 0x76, 0x66, 0x66, 0x66, 0x66, 0x6E, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+	0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00, 0xFE, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00,
+	0xEE, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0xFE, 0xC6, 0xC6, 0xF6, 0x06, 0x06, 0x06, 0x06,
+	0xFE, 0xC6, 0xC6, 0xFE, 0x06, 0x06, 0xFE, 0x00, 0xFE, 0x66, 0x6C, 0x78, 0x60, 0x60, 0x60, 0x60,
+	0xEE, 0x66, 0x3C, 0x18, 0x0C, 0x06, 0xFE, 0x00, 0xFE, 0x06, 0x0E, 0xD8, 0xF0, 0xF0, 0xC0, 0xC0,
+	0xFC, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0xEE, 0xCA, 0xCA, 0xCA, 0xCA, 0xCA, 0x7C, 0x00,
+	0xFF, 0x67, 0x67, 0x67, 0x67, 0x67, 0xE7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x00, 0x0C, 0x3E, 0x6C, 0x3E, 0x0C, 0x00, 0x00, 0x38, 0x6C, 0x60, 0xF0, 0x60, 0x60, 0xFC, 0x00,
+	0x42, 0x3C, 0x66, 0x3C, 0x42, 0x00, 0x00, 0x00, 0xC3, 0x66, 0x3C, 0x18, 0x3C, 0x18, 0x18, 0x00,
+	0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x3C, 0x60, 0x3C, 0x66, 0x3C, 0x06, 0x3C, 0x00,
+	0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x4E, 0x58, 0x4E, 0x40, 0x3F, 0x00,
+	0x1C, 0xA4, 0xC4, 0xBC, 0x80, 0xFE, 0x00, 0x00, 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
+	0x3E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
+	0x81, 0xB9, 0xA5, 0xB9, 0xA5, 0x81, 0x7E, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x78, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0xFC, 0x00,
+	0xF0, 0x18, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00, 0xF0, 0x18, 0x30, 0x18, 0xF0, 0x00, 0x00, 0x00,
+	0x30, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xFE, 0xC0,
+	0x3E, 0x7A, 0x7A, 0x3A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0x60, 0xE0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00,
+	0x38, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
+	0x40, 0xC6, 0x4C, 0x58, 0x32, 0x66, 0xCF, 0x02, 0x40, 0xC6, 0x4C, 0x58, 0x3E, 0x62, 0xC4, 0x0E,
+	0xC0, 0x23, 0x66, 0x2C, 0xD9, 0x33, 0x67, 0x01, 0x18, 0x00, 0x18, 0x30, 0x60, 0x66, 0x3C, 0x00,
+	0x60, 0x30, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x0C, 0x18, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+	0x38, 0xC6, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x71, 0x8E, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+	0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00, 0x38, 0x44, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
+	0x1F, 0x3C, 0x3C, 0x6F, 0x7C, 0xCC, 0xCF, 0x00, 0x1E, 0x30, 0x60, 0x60, 0x30, 0x1E, 0x0C, 0x18,
+	0x60, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0x18, 0x30, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
+	0x30, 0xCC, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00, 0xCC, 0x00, 0xFC, 0xC0, 0xF0, 0xC0, 0xFC, 0x00,
+	0x60, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0x18, 0x30, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
+	0x30, 0xCC, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00, 0xCC, 0x00, 0x78, 0x30, 0x30, 0x30, 0x78, 0x00,
+	0x78, 0x6C, 0x66, 0xF6, 0x66, 0x6C, 0x78, 0x00, 0x71, 0xCE, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0x00,
+	0x30, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+	0x18, 0x66, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00,
+	0xC3, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00, 0x00,
+	0x3F, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0xFC, 0x00, 0x30, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x0C, 0x18, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x66, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x06, 0x08, 0xC3, 0x66, 0x3C, 0x18, 0x18, 0x00,
+	0x60, 0x60, 0x7E, 0x63, 0x7E, 0x60, 0x60, 0x00, 0x3C, 0x66, 0x66, 0x6C, 0x66, 0x66, 0x6C, 0x60,
+	0x30, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+	0x18, 0x66, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x71, 0x8E, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+	0x66, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, 0x18, 0x24, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00,
+	0x00, 0x00, 0x7E, 0x1B, 0x7F, 0xD8, 0x77, 0x00, 0x00, 0x00, 0x3C, 0x60, 0x60, 0x60, 0x3C, 0x18,
+	0x30, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x0C, 0x18, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+	0x18, 0x66, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, 0x66, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
+	0x30, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x0C, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x18, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x66, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
+	0x60, 0xFC, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x00,
+	0x30, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x0C, 0x18, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+	0x18, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x71, 0x8E, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00,
+	0x00, 0x66, 0x00, 0x3C, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x00, 0x00,
+	0x00, 0x02, 0x7C, 0xCE, 0xD6, 0xE6, 0x7C, 0x80, 0x30, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x0C, 0x18, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x18, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00,
+	0x00, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x00, 0x0C, 0x18, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30,
 	0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x00, 0x66, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x30
 };
 

Modified: scummvm/trunk/engines/queen/display.h
===================================================================
--- scummvm/trunk/engines/queen/display.h	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/display.h	2007-02-21 20:27:48 UTC (rev 25769)
@@ -109,9 +109,12 @@
 	void blit(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, const uint8 *srcBuf, uint16 srcPitch, uint16 w, uint16 h, bool xflip, bool masked);
 	void fill(uint8 *dstBuf, uint16 dstPitch, uint16 x, uint16 y, uint16 w, uint16 h, uint8 color);
 
-	//! decode a PCX stream
-	void readPCX(uint8 *dst, uint16 dstPitch, const uint8 *src, uint16 w, uint16 h);
+	//! decode PCX picture data
+	void decodePCX(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd);
 
+	//! decode ILBM picture data
+	void decodeLBM(const uint8 *src, uint32 srcSize, uint8 *dst, uint16 dstPitch, uint16 *w, uint16 *h, uint8 *pal, uint16 palStart, uint16 palEnd, uint8 colorBase = 0);
+
 	void horizontalScrollUpdate(int16 xCamera);
 	void horizontalScroll(int16 scroll);
 	int16 horizontalScroll() const { return _horizontalScroll; }
@@ -223,6 +226,8 @@
 	uint16 _horizontalScroll;
 	uint16 _bdWidth, _bdHeight;
 
+	const char *_imageExt;
+
 	//! texts list
 	TextSlot _texts[GAME_SCREEN_HEIGHT];
 

Modified: scummvm/trunk/engines/queen/graphics.cpp
===================================================================
--- scummvm/trunk/engines/queen/graphics.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/graphics.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -246,31 +246,76 @@
 }
 
 void Graphics::unpackControlBank() {
-	_vm->bankMan()->load("control.BBK",17);
-	_vm->bankMan()->unpack(1, 1, 17); // Mouse pointer
-	// unpack arrows frames and change hotspot to be always on top
-	for (int i = 3; i <= 4; ++i) {
-		_vm->bankMan()->unpack(i, i, 17);
-		BobFrame *bf = _vm->bankMan()->fetchFrame(i);
-		bf->yhotspot += 200;
+	if (_vm->resource()->getPlatform() == Common::kPlatformPC) {
+		_vm->bankMan()->load("CONTROL.BBK",17);
+
+		// unpack mouse pointer frame
+		_vm->bankMan()->unpack(1, 1, 17);
+
+		// unpack arrows frames and change hotspot to be always on top
+		_vm->bankMan()->unpack(3, 3, 17);
+		_vm->bankMan()->fetchFrame(3)->yhotspot += 200;
+		_vm->bankMan()->unpack(4, 4, 17);
+		_vm->bankMan()->fetchFrame(4)->yhotspot += 200;
+
+		_vm->bankMan()->close(17);
 	}
-	_vm->bankMan()->close(17);
 }
 
 void Graphics::setupArrows() {
-	int scrollX = _vm->display()->horizontalScroll();
-	BobSlot *arrow;
-	arrow = bob(ARROW_BOB_UP);
-	arrow->curPos(303 + 8 + scrollX, 150 + 1 + 200);
-	arrow->frameNum = 3;
-	arrow = bob(ARROW_BOB_DOWN);
-	arrow->curPos(303 + scrollX, 175 + 200);
-	arrow->frameNum = 4;
+	if (_vm->resource()->getPlatform() == Common::kPlatformPC) {
+		int scrollX = _vm->display()->horizontalScroll();
+		BobSlot *arrow;
+		arrow = bob(ARROW_BOB_UP);
+		arrow->curPos(303 + 8 + scrollX, 150 + 1 + 200);
+		arrow->frameNum = 3;
+		arrow = bob(ARROW_BOB_DOWN);
+		arrow->curPos(303 + scrollX, 175 + 200);
+		arrow->frameNum = 4;
+	}
 }
 
 void Graphics::setupMouseCursor() {
-	BobFrame *bf = _vm->bankMan()->fetchFrame(1);
-	_vm->display()->setMouseCursor(bf->data, bf->width, bf->height);
+	if (_vm->resource()->getPlatform() == Common::kPlatformAmiga) {
+		static const uint8 defaultAmigaCursor[4 * 15] = {
+			0x00, 0x00, 0xFF, 0xC0,
+			0x7F, 0x80, 0x80, 0x40,
+			0x7F, 0x00, 0x80, 0x80,
+			0x7E, 0x00, 0x81, 0x00,
+			0x7F, 0x00, 0x80, 0x80,
+			0x7F, 0x80, 0x80, 0x40,
+			0x7F, 0xC0, 0x80, 0x20,
+			0x6F, 0xE0, 0x90, 0x10,
+			0x47, 0xF0, 0xA8, 0x08,
+			0x03, 0xF8, 0xC4, 0x04,
+			0x01, 0xFC, 0x02, 0x02,
+			0x00, 0xF8, 0x01, 0x04,
+			0x00, 0x70, 0x00, 0x88,
+			0x00, 0x20, 0x00, 0x50,
+			0x00, 0x00, 0x00, 0x20
+		};
+		uint8 cursorData[16 * 15];
+		const uint8 *src = defaultAmigaCursor;
+		int i = 0;
+		for (int h = 0; h < 15; ++h) {
+			for (int b = 0; b < 16; ++b) {
+				const uint16 mask = (1 << (15 - b));
+				cursorData[i] = 0;
+				if (READ_BE_UINT16(src + 0) & mask) {
+					cursorData[i] |= 4;
+				}
+				if (READ_BE_UINT16(src + 2) & mask) {
+					cursorData[i] |= 8;
+				}
+				++i;
+			}
+			src += 4;
+		}
+		_vm->display()->setMouseCursor(cursorData, 16, 15);
+	} else {
+		BobFrame *bf = _vm->bankMan()->fetchFrame(1);
+		_vm->display()->setMouseCursor(bf->data, bf->width, bf->height);
+	}
 }
 
 void Graphics::drawBob(const BobSlot *bs, const BobFrame *bf, const Box *bbox, int16 x, int16 y) {
@@ -1119,7 +1164,7 @@
 }
 
 void BamScene::playSfx() {
-	// Don't try to play all the sounds. This is only necessary for the 
+	// Don't try to play all the sounds. This is only necessary for the
 	// fight bam, in which the number of 'sfx bam frames' is too much
 	// important / too much closer. The original game does not have
 	// this problem since its playSfx() function returns immediately

Modified: scummvm/trunk/engines/queen/journal.cpp
===================================================================
--- scummvm/trunk/engines/queen/journal.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/journal.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -268,7 +268,7 @@
 				if (_saveDescriptions[currentSlot][0]) {
 					_vm->graphics()->clearBobs();
 					_vm->display()->palFadeOut(ROOM_JOURNAL);
-					_vm->music()->stopSong();
+					_vm->sound()->stopSong();
 					_vm->loadGameState(currentSlot);
 					_vm->display()->clearTexts(0, GAME_SCREEN_HEIGHT - 1);
 					_quitMode = QM_RESTORE;
@@ -320,7 +320,7 @@
 			break;
 		case ZN_MUSIC_VOLUME:
 			val = (x - 136) * QueenEngine::MAX_MUSIC_VOLUME / (266 - 136);
-			_vm->music()->setVolume(val);
+			_vm->sound()->setVolume(val);
 			drawConfigPanel();
 			break;
 		case ZN_DESC_1:
@@ -357,7 +357,7 @@
 			if (_vm->sound()->musicOn()) {
 				_vm->sound()->playLastSong();
 			} else {
-				_vm->music()->stopSong();
+				_vm->sound()->stopSong();
 			}
 			drawConfigPanel();
 			break;
@@ -447,7 +447,7 @@
 	_vm->checkOptionSettings();
 
 	drawSlideBar(_vm->talkSpeed(), QueenEngine::MAX_TEXT_SPEED, BOB_TALK_SPEED, 164, FRAME_BLUE_PIN);
-	drawSlideBar(_vm->music()->volume(), QueenEngine::MAX_MUSIC_VOLUME, BOB_MUSIC_VOLUME, 177, FRAME_GREEN_PIN);
+	drawSlideBar(_vm->sound()->volume(), QueenEngine::MAX_MUSIC_VOLUME, BOB_MUSIC_VOLUME, 177, FRAME_GREEN_PIN);
 
 	drawCheckBox(_vm->sound()->sfxOn(), BOB_SFX_TOGGLE, 221, 155, FRAME_CHECK_BOX);
 	drawCheckBox(_vm->sound()->speechOn(), BOB_SPEECH_TOGGLE, 158, 155, FRAME_CHECK_BOX);
@@ -468,12 +468,6 @@
 	case 'a':
 		_vm->display()->setTextCentered(132, "Amiga A500/600", false);
 		break;
-	case 'A':
-		_vm->display()->setTextCentered(132, "Amiga A1200", false);
-		break;
-	case 'c':
-		_vm->display()->setTextCentered(132, "Amiga CD-32", false);
-		break;
 	}
 	switch (ver[1]) {
 	case 'E':

Modified: scummvm/trunk/engines/queen/logic.cpp
===================================================================
--- scummvm/trunk/engines/queen/logic.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/logic.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -98,7 +98,8 @@
 	}
 	_roomData[_numRooms + 1] = _numObjects;
 
-	if (_vm->resource()->isDemo()) {
+	if ((_vm->resource()->isDemo() && _vm->resource()->getPlatform() == Common::kPlatformPC) ||
+		(_vm->resource()->isInterview() && _vm->resource()->getPlatform() == Common::kPlatformAmiga)) {
 		_sfxName = NULL;
 	} else {
 		_sfxName = new uint16[_numRooms + 1];

Modified: scummvm/trunk/engines/queen/music.cpp
===================================================================
--- scummvm/trunk/engines/queen/music.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/music.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -56,7 +56,7 @@
 		volume = 255;
 
 	if (_masterVolume == volume)
-			return;
+		return;
 
 	_masterVolume = volume;
 

Modified: scummvm/trunk/engines/queen/queen.cpp
===================================================================
--- scummvm/trunk/engines/queen/queen.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/queen.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -40,14 +40,11 @@
 #include "queen/grid.h"
 #include "queen/input.h"
 #include "queen/logic.h"
-#include "queen/music.h"
 #include "queen/resource.h"
 #include "queen/sound.h"
 #include "queen/talk.h"
 #include "queen/walk.h"
 
-#include "sound/mididrv.h"
-
 static const PlainGameDescriptor queenGameDescriptor = {
 	"queen", "Flight of the Amazon Queen"
 };
@@ -80,7 +77,7 @@
 			}
 			Queen::DetectedGameVersion version;
 			if (Queen::Resource::detectVersion(&version, &dataFile)) {
-				GameDescriptor dg(queenGameDescriptor.gameid, queenGameDescriptor.description, version.language, Common::kPlatformPC);
+				GameDescriptor dg(queenGameDescriptor.gameid, queenGameDescriptor.description, version.language, version.platform);
 				if (version.features & Queen::GF_DEMO) {
 					dg.updateDesc("Demo");
 				} else if (version.features & Queen::GF_INTERVIEW) {
@@ -123,7 +120,6 @@
 	delete _grid;
 	delete _input;
 	delete _logic;
-	delete _music;
 	delete _sound;
 	delete _walk;
 }
@@ -153,7 +149,7 @@
 }
 
 void QueenEngine::readOptionSettings() {
-	_music->setVolume(ConfMan.getInt("music_volume"));
+	_sound->setVolume(ConfMan.getInt("music_volume"));
 	_sound->musicToggle(!ConfMan.getBool("music_mute"));
 	_sound->sfxToggle(!ConfMan.getBool("sfx_mute"));
 	_talkSpeed = (ConfMan.getInt("talkspeed") * (MAX_TEXT_SPEED - MIN_TEXT_SPEED) + 255 / 2) / 255 + MIN_TEXT_SPEED;
@@ -163,7 +159,7 @@
 }
 
 void QueenEngine::writeOptionSettings() {
-	ConfMan.setInt("music_volume", _music->volume());
+	ConfMan.setInt("music_volume", _sound->volume());
 	ConfMan.setBool("music_mute", !_sound->musicOn());
 	ConfMan.setBool("sfx_mute", !_sound->sfxOn());
 	ConfMan.setInt("talkspeed", ((_talkSpeed - MIN_TEXT_SPEED) * 255 + (MAX_TEXT_SPEED - MIN_TEXT_SPEED) / 2) / (MAX_TEXT_SPEED - MIN_TEXT_SPEED));
@@ -388,16 +384,6 @@
 	// Set mixer music volume to maximum, since music volume is regulated by MusicPlayer's MIDI messages
 	_mixer->setVolumeForSoundType(Audio::Mixer::kMusicSoundType, Audio::Mixer::kMaxMixerVolume);
 
-	int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);
-	bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
-
-	MidiDriver *driver = MidiDriver::createMidi(midiDriver);
-	if (native_mt32)
-		driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
-
-	_music = new Music(driver, this);
-	_music->hasNativeMT32(native_mt32);
-
 	_sound = Sound::makeSoundInstance(_mixer, this, _resource->getCompression());
 	_walk = new Walk(this);
 	//_talkspeedScale = (MAX_TEXT_SPEED - MIN_TEXT_SPEED) / 255.0;

Modified: scummvm/trunk/engines/queen/queen.h
===================================================================
--- scummvm/trunk/engines/queen/queen.h	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/queen.h	2007-02-21 20:27:48 UTC (rev 25769)
@@ -65,7 +65,6 @@
 class Grid;
 class Input;
 class Logic;
-class Music;
 class Resource;
 class Sound;
 class Walk;
@@ -85,7 +84,6 @@
 	Grid *grid() const { return _grid; }
 	Input *input() const { return _input; }
 	Logic *logic() const { return _logic; }
-	Music *music() const { return _music; }
 	Resource *resource() const { return _resource; }
 	Sound *sound() const { return _sound; }
 	Walk *walk() const { return _walk; }
@@ -146,7 +144,6 @@
 	Grid *_grid;
 	Input *_input;
 	Logic *_logic;
-	Music *_music;
 	Resource *_resource;
 	Sound *_sound;
 	Walk *_walk;

Modified: scummvm/trunk/engines/queen/resource.cpp
===================================================================
--- scummvm/trunk/engines/queen/resource.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/resource.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -46,7 +46,10 @@
 	{ "CHM10", 0x000DA981, 190705558 },
 	{ "PE100", 0x00101EC6,   3724538 },
 	{ "PE100", 0x00102B7F,   3732177 },
-	{ "PEint", 0x00103838,   1915913 }
+	{ "PEint", 0x00103838,   1915913 },
+	{ "aEM10", 0x00103F1E,    351775 },
+	{ "CE101", 0x00107D8D,    563335 },
+	{ "PE100", 0x001086D4,    597032 }
 };
 
 static int compareResourceEntry(const void *a, const void *b) {
@@ -107,26 +110,41 @@
 	return re;
 }
 
+static uint8 emptyBank[] = { 0, 0 };
+
 uint8 *Resource::loadFile(const char *filename, uint32 skipBytes, uint32 *size) {
+	debug(7, "Resource::loadFile('%s')", filename);
 	ResourceEntry *re = resourceEntry(filename);
+	if (_version.platform == Common::kPlatformAmiga && re == NULL) {
+		return emptyBank;
+	}
 	assert(re != NULL);
 	uint32 sz = re->size - skipBytes;
 	if (size != NULL) {
 		*size = sz;
 	}
-
 	byte *dstBuf = new byte[sz];
-	_resourceFile.seek(re->offset + skipBytes);
-	_resourceFile.read(dstBuf, sz);
+	if (re->bundle == 1) {
+		_resourceFile.seek(re->offset + skipBytes);
+		_resourceFile.read(dstBuf, sz);
+	} else {
+		Common::File resourceFile;
+		char name[20];
+		sprintf(name, "queen.%d", re->bundle);
+		if (!resourceFile.open(name)) {
+			error("Could not open resource file '%s'", name);
+		}
+		resourceFile.seek(re->offset + skipBytes);
+		resourceFile.read(dstBuf, sz);
+	}
 	return dstBuf;
 }
 
 bool Resource::detectVersion(DetectedGameVersion *ver, Common::File *f) {
 	memset(ver, 0, sizeof(DetectedGameVersion));
 
-	char versionStr[6];
 	if (f->readUint32BE() == MKID_BE('QTBL')) {
-		f->read(versionStr, 6);
+		f->read(ver->str, 6);
 		f->skip(2);
 		ver->compression = f->readByte();
 		ver->features = GF_REBUILT;
@@ -137,13 +155,26 @@
 			warning("Unknown/unsupported FOTAQ version");
 			return false;
 		}
-		strcpy(versionStr, gameVersion->str);
+		strcpy(ver->str, gameVersion->str);
 		ver->compression = COMPRESSION_NONE;
 		ver->features = 0;
 		ver->tableOffset = gameVersion->tableOffset;
+		strcpy(ver->str, gameVersion->str);
+
+		// Handle game versions for which versionStr information is irrevelant
+		if (gameVersion == &_gameVersions[VER_AMI_DEMO]) { // CE101
+			ver->features |= GF_FLOPPY | GF_DEMO;
+			ver->platform = Common::kPlatformAmiga;
+			return true;
+		}
+		if (gameVersion == &_gameVersions[VER_AMI_INTERVIEW]) { // PE100
+			ver->features |= GF_FLOPPY | GF_INTERVIEW;
+			ver->platform = Common::kPlatformAmiga;
+			return true;
+		}
 	}
 
-	switch (versionStr[1]) {
+	switch (ver->str[1]) {
 	case 'E':
 		if (Common::parseLanguage(ConfMan.get("language")) == Common::RU_RUS) {
 			ver->language = Common::RU_RUS;
@@ -167,33 +198,43 @@
 		ver->language = Common::HB_ISR;
 		break;
 	default:
-		warning("Unknown language id '%c', defaulting to English", versionStr[1]);
-		ver->language = Common::EN_ANY;
+		error("Invalid language id '%c'", ver->str[1]);
 		break;
 	}
 
-	switch (versionStr[0]) {
+	switch (ver->str[0]) {
 	case 'P':
 		ver->features |= GF_FLOPPY;
+		ver->platform = Common::kPlatformPC;
 		break;
 	case 'C':
 		ver->features |= GF_TALKIE;
+		ver->platform = Common::kPlatformPC;
 		break;
+	case 'a':
+		ver->features |= GF_FLOPPY;
+		ver->platform = Common::kPlatformAmiga;
+		break;
+	default:
+		error("Invalid platform id '%c'", ver->str[0]);
+		break;
 	}
 
-	if (strcmp(versionStr, "PE100") == 0) {
+	if (strcmp(ver->str + 2, "100") == 0 || strcmp(ver->str + 2, "101") == 0) {
 		ver->features |= GF_DEMO;
-	} else if (strcmp(versionStr, "PEint") == 0) {
+	} else if (strcmp(ver->str + 2, "int") == 0) {
 		ver->features |= GF_INTERVIEW;
 	}
-
-	strcpy(ver->str, versionStr);
 	return true;
 }
 
 void Resource::checkJASVersion() {
+	if (_version.platform == Common::kPlatformAmiga) {
+		warning("Resource::checkJASVersion() disabled for Amiga versions");
+		return;
+	}
 	ResourceEntry *re = resourceEntry("QUEEN.JAS");
-	assert(re != NULL);
+	assert(re != NULL && re->bundle == 1);
 	uint32 offset = re->offset;
 	if (isDemo())
 		offset += JAS_VERSION_OFFSET_DEMO;
@@ -252,17 +293,14 @@
 }
 
 Common::File *Resource::findSound(const char *filename, uint32 *size) {
-	assert(strstr(filename, ".SB"));
-	Common::File *f = NULL;
+	assert(strstr(filename, ".SB") != NULL || strstr(filename, ".AMR") != NULL);
 	ResourceEntry *re = resourceEntry(filename);
-	if (re) {
-		if (size != NULL) {
-			*size = re->size;
-		}
+	if (re && re->bundle == 1) {
+		*size = re->size;
 		_resourceFile.seek(re->offset);
-		f = &_resourceFile;
+		return &_resourceFile;
 	}
-	return f;
+	return NULL;
 }
 
 LineReader::LineReader(char *buffer, uint32 bufsize) : _buffer(buffer), _bufSize(bufsize), _current(0) {

Modified: scummvm/trunk/engines/queen/resource.h
===================================================================
--- scummvm/trunk/engines/queen/resource.h	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/resource.h	2007-02-21 20:27:48 UTC (rev 25769)
@@ -44,6 +44,7 @@
 };
 
 struct DetectedGameVersion {
+	Common::Platform platform;
 	Common::Language language;
 	uint8 features;
 	uint8 compression;
@@ -87,29 +88,34 @@
 	//! returns the language of the game
 	Common::Language getLanguage() const { return _version.language; }
 
+	Common::Platform getPlatform() const { return _version.platform; }
+
 	//! detect game version
 	static bool detectVersion(DetectedGameVersion *ver, Common::File *f);
 
 	enum Version {
-		VER_ENG_FLOPPY   = 0,
-		VER_ENG_TALKIE   = 1,
-		VER_FRE_FLOPPY   = 2,
-		VER_FRE_TALKIE   = 3,
-		VER_GER_FLOPPY   = 4,
-		VER_GER_TALKIE   = 5,
-		VER_ITA_FLOPPY   = 6,
-		VER_ITA_TALKIE   = 7,
-		VER_SPA_TALKIE   = 8,
-		VER_HEB_TALKIE	 = 9,
-		VER_DEMO_PCGAMES = 10,
-		VER_DEMO         = 11,
-		VER_INTERVIEW    = 12,
+		VER_ENG_FLOPPY     = 0,
+		VER_ENG_TALKIE     = 1,
+		VER_FRE_FLOPPY     = 2,
+		VER_FRE_TALKIE     = 3,
+		VER_GER_FLOPPY     = 4,
+		VER_GER_TALKIE     = 5,
+		VER_ITA_FLOPPY     = 6,
+		VER_ITA_TALKIE     = 7,
+		VER_SPA_TALKIE     = 8,
+		VER_HEB_TALKIE	   = 9,
+		VER_DEMO_PCGAMES   = 10,
+		VER_DEMO           = 11,
+		VER_INTERVIEW      = 12,
+		VER_AMI_ENG_FLOPPY = 13,
+		VER_AMI_DEMO       = 14,
+		VER_AMI_INTERVIEW  = 15,
 
-		VER_COUNT        = 13
+		VER_COUNT          = 16
 	};
 
 	enum {
-		CURRENT_TBL_VERSION = 1
+		CURRENT_TBL_VERSION = 2
 	};
 
 	enum {

Modified: scummvm/trunk/engines/queen/sound.cpp
===================================================================
--- scummvm/trunk/engines/queen/sound.cpp	2007-02-21 16:38:35 UTC (rev 25768)
+++ scummvm/trunk/engines/queen/sound.cpp	2007-02-21 20:27:48 UTC (rev 25769)
@@ -21,45 +21,47 @@
  */
 
 #include "common/stdafx.h"
+#include "common/config-manager.h"
 #include "common/endian.h"
+#include "common/stream.h"
 
 #include "queen/sound.h"
-
 #include "queen/input.h"
+#include "queen/logic.h"
 #include "queen/music.h"
 #include "queen/queen.h"
 #include "queen/resource.h"
 
 #include "sound/flac.h"
+#include "sound/mididrv.h"
 #include "sound/mp3.h"
 #include "sound/vorbis.h"
 
 #define	SB_HEADER_SIZE_V104 110
 #define	SB_HEADER_SIZE_V110 122
-#define	STOP_MUSIC	-1
 
 namespace Queen {
 
-class SilentSound : public Sound {
+class SilentSound : public PCSound {
 public:
-	SilentSound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {}
+	SilentSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {}
 protected:
 	void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
 		// Do nothing
 	}
 };
 
-class SBSound : public Sound {
+class SBSound : public PCSound {
 public:
-	SBSound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {}
+	SBSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {}
 protected:
 	void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle);
 };
 
 #ifdef USE_MAD
-class MP3Sound : public Sound {
+class MP3Sound : public PCSound {
 public:
-	MP3Sound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {}
+	MP3Sound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {}
 protected:
 	void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
 		_mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeMP3Stream(f, size));
@@ -68,9 +70,9 @@
 #endif
 
 #ifdef USE_VORBIS
-class OGGSound : public Sound {
+class OGGSound : public PCSound {
 public:
-	OGGSound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {}
+	OGGSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {}
 protected:
 	void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
 		_mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeVorbisStream(f, size));
@@ -79,9 +81,9 @@
 #endif
 
 #ifdef USE_FLAC
-class FLACSound : public Sound {
+class FLACSound : public PCSound {
 public:
-	FLACSound(Audio::Mixer *mixer, QueenEngine *vm) : Sound(mixer, vm) {};
+	FLACSound(Audio::Mixer *mixer, QueenEngine *vm) : PCSound(mixer, vm) {};
 protected:
 	void playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
 		_mixer->playInputStream(Audio::Mixer::kSFXSoundType, soundHandle, Audio::makeFlacStream(f, size));
@@ -90,15 +92,13 @@
 #endif // #ifdef USE_FLAC
 
 Sound::Sound(Audio::Mixer *mixer, QueenEngine *vm) :
-	_mixer(mixer), _vm(vm), _sfxToggle(true), _speechToggle(true), _musicToggle(true), _lastOverride(0) {
-#ifdef ENABLE_AMIGA_MUSIC
-	_lastModuleOverride = -1;
-#endif
+	_mixer(mixer), _vm(vm), _sfxToggle(true), _speechToggle(true), _musicToggle(true),
+	_speechSfxExists(false), _lastOverride(0), _masterVolume(0) {
 }
 
 Sound *Sound::makeSoundInstance(Audio::Mixer *mixer, QueenEngine *vm, uint8 compression) {
-	if (!mixer->isReady())
-		return new SilentSound(mixer, vm);
+	if (vm->resource()->getPlatform() == Common::kPlatformAmiga)
+		return new AmigaSound(mixer, vm);
 
 	switch (compression) {
 	case COMPRESSION_NONE:
@@ -130,135 +130,52 @@
 	}
 }
 
-void Sound::waitFinished(bool isSpeech) {
-	while (_mixer->isSoundHandleActive(isSpeech ? _speechHandle : _sfxHandle))
-		_vm->input()->delay(10);
+void Sound::saveState(byte *&ptr) {
+	WRITE_BE_UINT16(ptr, _lastOverride); ptr += 2;
 }
 
-void Sound::playSfx(uint16 sfx) {
-	if (sfxOn() && sfx != 0) {
-#ifndef PALMOS_68K
-		playSound(_sfxName[sfx - 1], false);
-#else
-		playSound(_sfxName + 10 * (sfx - 1), false);	// saved as 8char + /0/0
-#endif
-	}
+void Sound::loadState(uint32 ver, byte *&ptr) {
+	_lastOverride = (int16)READ_BE_INT16(ptr); ptr += 2;
 }
 
-void Sound::playSpeech(const char *base) {
-	if (speechOn()) {
-		playSound(base, true);
-	}
-}
+PCSound::PCSound(Audio::Mixer *mixer, QueenEngine *vm)
+	: Sound(mixer, vm) {
 
-void Sound::playSound(const char *base, bool isSpeech) {
-	char name[13];
-	strcpy(name, base);
-	// alter filename to add zeros and append ".SB"
-	for (int i = 0; i < 8; i++) {
-		if (name[i] == ' ')
-			name[i] = '0';
-	}
-	strcat(name, ".SB");
-	waitFinished(isSpeech);
-	uint32 size;
-	Common::File *f = _vm->resource()->findSound(name, &size);
-	if (f) {
-		playSoundData(f, size, isSpeech ? &_speechHandle : &_sfxHandle);
-		_speechSfxExists = isSpeech;
-	} else {
-		_speechSfxExists = false;
-	}
-}
+	int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);
+	bool native_mt32 = ((midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));
 
-#ifdef ENABLE_AMIGA_MUSIC
+	MidiDriver *driver = MidiDriver::createMidi(midiDriver);
+	if (native_mt32)
+		driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE);
 
-static struct {
-	const char *name;
-	uint8 songNum;
-	uint8 remapSongNumTable[6];
-} amigaMusicData[] = {
-	{ "HOTEL",    1, {   1,   2,  39,   0 } },
-	{ "HOTEL",    2, {  20,  30,  34,   0 } },
-	{ "HOTEL",    3, {  19,   0 } },
-	{ "HOTEL",    4, {  29,  35,  36,   0 } },
-	{ "JUNG",     1, {  40,   0 } },
-	{ "JUNG",     2, {   3,  38,  89,   0 } },
-	{ "TEMPLE",   1, {  54,   0 } },
-	{ "TEMPLE",   2, {  12,   0 } },
-	{ "TEMPLE",   3, {   7,   9,  10,  11, 0 } },
-	{ "TEMPLE",   4, {  31,   0 } },
-	{ "FLODA",    1, {  16,   0 } },
-	{ "FLODA",    2, {  17,   0 } },
-	{ "FLODA",    3, {  13,   0 } },
-	{ "FLODA",    4, {  41,   0 } },
-	{ "FLODA",    5, {  30,  43,   0 } },
-	{ "TITLE",    1, {  67,  88, 203,   0 } },
-	{ "AWESTRUK", 1, {  37,  52,  90, 196, 0 } },
-	{ "'JUNGLE'", 1, {  91,   0 } },
-	{ "FRANK",    1, {  46,   0 } },
-	{ "BOB",      1, {   6,   0 } },
-	{ "AZURA",    1, {  44,  53, 204, 0 } },
-	{ "FORT",     1, {  21,   0 } },
-	{ "ROCKET",   1, {  32, 194, 195, 0 } },
-	{ "ROBOT",    1, {  92,   0 } }
-};
+	_music = new Music(driver, vm);
+	_music->hasNativeMT32(native_mt32);
+}
 
-void Sound::playSong(int16 songNum) {
-	debug(2, "Sound::playSong %d override %d/%d", songNum, _lastModuleOverride, _lastOverride);
+PCSound::~PCSound() {
+	delete _music;
+}
 
-	const char *moduleName = 0;
-	for (int i = 0; i < ARRAYSIZE(amigaMusicData) && !moduleName; ++i) {
-		for (int j = 0; amigaMusicData[i].remapSongNumTable[j] != 0; ++j) {
-			if (amigaMusicData[i].remapSongNumTable[j] == songNum) {
-				moduleName = amigaMusicData[i].name;
-				songNum = amigaMusicData[i].songNum;
-
-				if (_lastModuleOverride == i && _lastOverride == songNum)
-					return;
-
-				_lastModuleOverride = i;
-				_lastOverride = songNum;
-				break;
-			}
-		}
+void PCSound::playSfx(uint16 sfx) {
+	if (sfxOn() && sfx != 0) {
+#ifndef PALMOS_68K
+		playSound(_sfxName[sfx - 1], false);
+#else
+		playSound(_sfxName + 10 * (sfx - 1), false);	// saved as 8char + /0/0
+#endif
 	}
-	if (!moduleName)
-		return;
-
-	_mixer->stopHandle(_musicHandle);
-
-	debug(1, "playAmigaSong name '%s' subsong %d", moduleName, songNum);
-
-	char buf[16];
-	sprintf(buf, "%s.SNG", moduleName);
-	Common::File fsng;
-	if (!fsng.open(buf))
-		return;
-
-	sprintf(buf, "%s.INS", moduleName);
-	Common::File fins;
-	if (!fins.open(buf))
-		return;
-
-	Audio::AudioStream *rjp1Stream = Audio::makeRjp1Stream(&fsng, &fins, songNum);
-	if (rjp1Stream) {
-		_mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_musicHandle, rjp1Stream);
-	}
 }
 
-#else
-
-void Sound::playSong(int16 songNum) {
+void PCSound::playSong(int16 songNum) {
 	if (songNum <= 0) {
-		_vm->music()->stopSong();
+		_music->stopSong();
 		return;
 	}
 
 	int16 newTune;
 	if (_vm->resource()->isDemo()) {
 		if (songNum == 17) {
-			_vm->music()->stopSong();
+			_music->stopSong();
 			return;
 		}
 		newTune = _songDemo[songNum - 1].tuneList[0] - 1;
@@ -281,27 +198,60 @@
 		break;
 	// Alter song settings (such as volume) and exit
 	case  2:
-		_vm->music()->toggleVChange();
+		_music->toggleVChange();
 	default:
 		return;
 	}
 
 	_lastOverride = songNum;
 
-	_vm->music()->queueTuneList(newTune);
-	_vm->music()->playMusic();
+	_music->queueTuneList(newTune);
+	_music->playMusic();
 }
 
-#endif // ENABLE_AMIGA_MUSIC
+void PCSound::stopSong() {
+	_music->stopSong();
+}
 
-void Sound::saveState(byte *&ptr) {
-	WRITE_BE_UINT16(ptr, _lastOverride); ptr += 2;
+void PCSound::playSpeech(const char *base) {
+	if (speechOn()) {
+		playSound(base, true);
+	}
 }
 
-void Sound::loadState(uint32 ver, byte *&ptr) {
-	_lastOverride = (int16)READ_BE_INT16(ptr); ptr += 2;
+void PCSound::setVolume(int vol) {
+	_music->setVolume(vol);
 }
 
+int PCSound::volume() {
+	return _music->volume();
+}
+
+void PCSound::waitFinished(bool isSpeech) {
+	while (_mixer->isSoundHandleActive(isSpeech ? _speechHandle : _sfxHandle))
+		_vm->input()->delay(10);
+}
+
+void PCSound::playSound(const char *base, bool isSpeech) {
+	char name[13];
+	strcpy(name, base);
+	// alter filename to add zeros and append ".SB"
+	for (int i = 0; i < 8; i++) {
+		if (name[i] == ' ')
+			name[i] = '0';
+	}
+	strcat(name, ".SB");
+	waitFinished(isSpeech);
+	uint32 size;
+	Common::File *f = _vm->resource()->findSound(name, &size);
+	if (f) {
+		playSoundData(f, size, isSpeech ? &_speechHandle : &_sfxHandle);
+		_speechSfxExists = isSpeech;
+	} else {
+		_speechSfxExists = false;
+	}
+}
+
 void SBSound::playSoundData(Common::File *f, uint32 size, Audio::SoundHandle *soundHandle) {
 	int headerSize;
 	f->seek(2, SEEK_CUR);
@@ -328,4 +278,425 @@
 	}
 }
 
+AmigaSound::AmigaSound(Audio::Mixer *mixer, QueenEngine *vm)
+	: Sound(mixer, vm), _fanfareRestore(0), _fanfareCount(0), _fluteCount(0) {
+}
+
+void AmigaSound::playSfx(uint16 sfx) {
+	if (_vm->logic()->currentRoom() == 111) {
+		// lightning sound
+		playSound("88SSSSSS");
+	}
+}
+
+void AmigaSound::playSong(int16 song) {
+	debug(2, "Sound::playSong %d override %d", song, _lastOverride);
+
+    if (song < 0) {
+    	stopSong();
+    	return;
+    }
+
+    // remap song numbers for the Amiga
+    switch (song)
+    {
+	case 1:
+	case 2:
+		song = 39;
+		break;
+	case 37:
+	case 52:
+	case 196:
+		song = 90;
+		break;
+	case 38:
+	case 89:
+		song = 3;
+		break;
+	case 24:
+	case 158:
+		song = 117;
+		break;
+    case 71:
+    case 72:
+    case 73:
+    case 75:
+		song = 133;
+		break;
+	case 203:
+		song = 67;
+		break;
+	case 145:
+		song = 140;
+		break;
+    case 53:
+    case 204:
+        song = 44;
+        break;
+    case 136:
+    case 142:
+    case 179:
+        song = 86;
+        break;
+    case 101:
+    case 102:
+    case 143:
+        song = 188;
+        break;
+    case 65:
+    case 62:
+        song = 69;
+        break;
+    case 118:
+    case 119:
+        song = 137;
+        break;
+    case 130:
+    case 131:
+        song = 59;
+        break;
+    case 174:
+    case 175:
+        song = 57;
+        break;
+    case 171:
+    case 121:
+        song = 137;
+        break;
+    case 138:
+    case 170:
+    case 149:
+        song = 28;
+        break;
+    case 122:
+    case 180:
+    case 83:
+    case 98:
+        song = 83;
+        break;
+    case 20:
+    case 33:
+        song = 34;
+        break;
+    case 29:
+    case 35:
+        song = 36;
+        break;
+    case 7:
+    case 9:
+    case 10:
+        song = 11;
+        break;
+    case 110:
+        song = 94;
+        break;
+    case 111:
+        song = 95;
+        break;
+    case 30:
+        song = 43;
+        break;
+    case 76:
+        song = 27;
+        break;
+    case 194:
+    case 195:
+        song = 32;
+        break;
+    }
+
+    if (_lastOverride != 32 && _lastOverride != 44) {
+    	if (playSpecialSfx(song)) {
+    		return;
+    	}
+    }
+
+    if (_lastOverride == song && _mixer->isSoundHandleActive(_modHandle)) {
+	    return;
+    }
+    switch (song) {
+    // hotel
+	case 39:
+        playModule("HOTEL", 1);
+        break;
+    case 19:
+        playModule("HOTEL", 3);
+        break;
+    case 34:
+        playModule("HOTEL", 2);
+        break;
+    case 36:
+        playModule("HOTEL", 4);
+		_fanfareRestore = _lastOverride;
+        _fanfareCount = 60;
+        break;
+	// jungle
+	case 40:
+		playModule("JUNG", 1);
+		_fanfareRestore = _lastOverride;
+		_fanfareCount = 80;
+		_fluteCount = 100;
+		break;
+	case 3:
+		playModule("JUNG", 2);
+		_fluteCount = 100;
+		break;
+	// temple
+	case 54:
+        playModule("TEMPLE", 1);
+        break;
+    case 12:
+        playModule("TEMPLE", 2);
+        break;
+    case 11:
+        playModule("TEMPLE", 3);
+        break;
+    case 31:
+        playModule("TEMPLE", 4);
+        _fanfareRestore = _lastOverride;
+        _fanfareCount = 80;
+        break;
+	// floda
+    case 41:
+        playModule("FLODA", 4);
+		_fanfareRestore = _lastOverride;
+        _fanfareCount = 60;
+        break;
+    case 13:
+        playModule("FLODA", 3);
+        break;
+    case 16:
+        playModule("FLODA", 1);
+        break;
+    case 17:
+        playModule("FLODA", 2);
+        break;
+    case 43:
+        playModule("FLODA", 5);
+        break;
+	// end credits
+    case 67:
+        playModule("TITLE", 1);
+        break;
+    // intro credits
+    case 88:
+        playModule("TITLE", 1);
+        break;
+    // valley
+    case 90:
+        playModule("AWESTRUK", 1);
+        break;
+    // confrontation
+    case 91:
+        playModule("'JUNGLE'", 1);
+        break;
+    // Frank
+    case 46:
+        playModule("FRANK", 1);
+        break;
+    // trader bob
+    case 6:
+        playModule("BOB", 1);
+        break;
+    // azura
+    case 44:
+        playModule("AZURA", 1);
+        break;
+    // amazon fortress
+    case 21:
+        playModule("FORT", 1);
+        break;
+    // rocket
+    case 32:
+        playModule("ROCKET", 1);
+        break;
+    // robot
+    case 92:
+        playModule("ROBOT", 1);
+        break;
+	default:
+		// song not available in the amiga version
+		return;
+    }
+    _lastOverride = song;
+}
+
+void AmigaSound::stopSfx() {
+	_mixer->stopHandle(_sfxHandle);
+}
+
+void AmigaSound::stopSong() {
+	_mixer->stopHandle(_modHandle);
+	_fanfareCount = _fluteCount = 0;
+}
+
+void AmigaSound::updateMusic() {
+	if (_fanfareCount > 0) {
+		--_fanfareCount;
+		if (_fanfareCount == 0) {
+			playSong(_fanfareRestore);
+		}
+	}
+	if (_fluteCount > 0 && (_lastOverride == 40 || _lastOverride == 3)) {
+		--_fluteCount;
+		if (_fluteCount == 0) {
+//			playPattern(3, 5 + (getRandomNumber() & 7));
+			_fluteCount = 100;
+		}
+	}
+}
+
+void AmigaSound::playSound(const char *base) {
+	char soundName[20];
+	sprintf(soundName, "%s.AMR", base);
+
+	uint32 soundSize;
+	Common::File *f = _vm->resource()->findSound(soundName, &soundSize);
+	if (f) {
+		uint8 *soundData = (uint8 *)malloc(soundSize);
+		if (soundData) {
+			f->read(soundData, soundSize);
+			byte flags = Audio::Mixer::FLAG_AUTOFREE;
+			_mixer->playRaw(Audio::Mixer::kSFXSoundType, &_sfxHandle, soundData, soundSize, 11025, flags);
+		}
+	}
+}
+
+void AmigaSound::playModule(const char *base, int song) {
+	char name[20];
+
+	// load song/pattern data
+	uint32 sngDataSize;
+	sprintf(name, "%s.SNG", base);
+	uint8 *sngData = _vm->resource()->loadFile(name, 0, &sngDataSize);
+	Common::MemoryReadStream sngStr(sngData, sngDataSize);
+
+	// load instruments/wave data
+	uint32 insDataSize;
+	sprintf(name, "%s.INS", base);
+	uint8 *insData = _vm->resource()->loadFile(name, 0, &insDataSize);
+	Common::MemoryReadStream insStr(insData, insDataSize);
+
+	_mixer->stopHandle(_modHandle);
+	Audio::AudioStream *stream = Audio::makeRjp1Stream(&sngStr, &insStr, song, _mixer->getOutputRate());
+	if (stream) {
+		_mixer->playInputStream(Audio::Mixer::kMusicSoundType, &_modHandle, stream);
+	}
+
+	delete[] sngData;
+	delete[] insData;
+
+	_fanfareCount = 0;
+}
+
+bool AmigaSound::playSpecialSfx(int16 sfx) {
+	switch (sfx) {
+	case 5: // normal volume
+		break;
+	case 15: // soft volume
+		break;
+	case 14: // medium volume
+		break;
+	case 25: // open door
+		playSound("116BSSSS");
+		break;
+	case 26: // close door
+		playSound("105ASSSS");
+		break;
+	case 56: // light switch
+		playSound("27SSSSSS");
+		break;
+	case 57: // hydraulic doors open
+		playSound("96SSSSSS");
+		break;
+	case 58: // hydraulic doors close
+		playSound("97SSSSSS");
+		break;
+	case 59: // metallic door slams
+		playSound("105SSSSS");
+		break;
+	case 63: // oracle rezzes in
+		playSound("132SSSSS");
+		break;
+	case 27: // cloth slide 1
+		playSound("135SSSSS");
+		break;
+	case 83: // splash
+		playSound("18SSSSSS");
+		break;
+	case 85: // agression enhancer
+		playSound("138BSSSS");
+		break;
+	case 68: // dino ray
+		playSound("138SSSSS");
+		break;
+	case 140: // dino transformation
+		playSound("55BSSSSS");
+		break;
+	case 141: // experimental laser
+		playSound("55SSSSSS");
+		break;
+	case 94: // plane hatch open
+		playSound("3SSSSSSS");
+		break;
+	case 95: // plane hatch close
+		playSound("4SSSSSSS");
+		break;
+	case 117: // oracle rezzes out
+		playSound("70SSSSSS");
+		break;

@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list