splash and shameless plug updates:

removed experimental splash stuff from h3/h5 for non-windows.
if either of GLIDE_SPLASH or GLIDE_PLUG aren't defined their
respective data are completey excluded from the binary image,
and their respective functions aren't called at all.
This commit is contained in:
sezero
2018-08-04 01:47:50 +03:00
parent bbbb581698
commit 8b047bb95c
21 changed files with 248 additions and 844 deletions

View File

@@ -93,13 +93,11 @@
#ifdef GLIDE_PLUG #ifdef GLIDE_PLUG
#include "banner.inc" #include "banner.inc"
#endif
/* display the translucent 3Dfx powerfield logo */ /* display the translucent 3Dfx powerfield logo */
void void
_grShamelessPlug(void) _grShamelessPlug(void)
{ {
#ifdef GLIDE_PLUG
GrState state; GrState state;
GR_BEGIN_NOFIFOCHECK("_grShamelessPlug", 80); GR_BEGIN_NOFIFOCHECK("_grShamelessPlug", 80);
@@ -185,5 +183,5 @@ _grShamelessPlug(void)
grGlideSetState(&state); grGlideSetState(&state);
GR_END(); GR_END();
#endif /* GLIDE_PLUG */
} /* _grShamelessPlug */ } /* _grShamelessPlug */
#endif /* GLIDE_PLUG */

View File

@@ -978,8 +978,10 @@ GR_ENTRY(grBufferSwap, void, (FxU32 swapInterval))
#endif /* (GLIDE_PLATFORM & GLIDE_HW_CVG) */ #endif /* (GLIDE_PLATFORM & GLIDE_HW_CVG) */
#if ((GLIDE_PLATFORM & GLIDE_HW_CVG) || (GLIDE_PLATFORM & GLIDE_HW_H3)) #if ((GLIDE_PLATFORM & GLIDE_HW_CVG) || (GLIDE_PLATFORM & GLIDE_HW_H3))
#ifdef GLIDE_PLUG
/* optionally display the 3Dfx powerfield logo overlay */ /* optionally display the 3Dfx powerfield logo overlay */
if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug(); if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug();
#endif
/* check for environmental override. /* check for environmental override.
* *

View File

@@ -731,8 +731,16 @@ _GlideInitEnvironment(void)
(((envStr = GETENV(__envVar)) == NULL) ? (__defVal) : atol(envStr)) (((envStr = GETENV(__envVar)) == NULL) ? (__defVal) : atol(envStr))
_GlideRoot.environment.triBoundsCheck = (GETENV("FX_GLIDE_BOUNDS_CHECK") != NULL); _GlideRoot.environment.triBoundsCheck = (GETENV("FX_GLIDE_BOUNDS_CHECK") != NULL);
#ifdef GLIDE_SPLASH
_GlideRoot.environment.noSplash = (GETENV("FX_GLIDE_NO_SPLASH") != NULL); _GlideRoot.environment.noSplash = (GETENV("FX_GLIDE_NO_SPLASH") != NULL);
#else
_GlideRoot.environment.noSplash = 1;
#endif
#ifdef GLIDE_PLUG
_GlideRoot.environment.shamelessPlug = (GETENV("FX_GLIDE_SHAMELESS_PLUG") != NULL); _GlideRoot.environment.shamelessPlug = (GETENV("FX_GLIDE_SHAMELESS_PLUG") != NULL);
#else
_GlideRoot.environment.shamelessPlug = 0;
#endif
_GlideRoot.environment.ignoreReopen = (GETENV("FX_GLIDE_IGNORE_REOPEN") != NULL); _GlideRoot.environment.ignoreReopen = (GETENV("FX_GLIDE_IGNORE_REOPEN") != NULL);
_GlideRoot.environment.texLodDither = ((GETENV("FX_GLIDE_LOD_DITHER") == NULL) _GlideRoot.environment.texLodDither = ((GETENV("FX_GLIDE_LOD_DITHER") == NULL)
? 0x00UL ? 0x00UL

View File

@@ -129,6 +129,13 @@
#include "fxglide.h" #include "fxglide.h"
#include "fxinline.h" #include "fxinline.h"
#ifndef GLIDE_SPLASH
GR_DIENTRY(grSplash,void,(float x,float y,float w,float h,FxU32 _frame)) {
/* nothing */
}
#else /* GLIDE_SPLASH */
/*----------------------------- /*-----------------------------
Constants Constants
-----------------------------*/ -----------------------------*/
@@ -1103,4 +1110,4 @@ GR_DIENTRY(grSplash,void,(float x,float y,float w,float h,FxU32 _frame))
grVertexLayout(GR_PARAM_Q1, gc->state.vData.q1Info.offset , grVertexLayout(GR_PARAM_Q1, gc->state.vData.q1Info.offset ,
gc->state.vData.q1Info.mode); gc->state.vData.q1Info.mode);
} }
#endif /* GLIDE_SPLASH */

View File

@@ -1523,6 +1523,7 @@ __errSliExit:
/* -------------------------------------------------------- /* --------------------------------------------------------
Splash Screen Splash Screen
--------------------------------------------------------*/ --------------------------------------------------------*/
#ifdef GLIDE_SPLASH
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32) #if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
if (!_GlideRoot.environment.noSplash) { if (!_GlideRoot.environment.noSplash) {
HMODULE newSplash; HMODULE newSplash;
@@ -1586,6 +1587,7 @@ __errSliExit:
0); 0);
_GlideRoot.environment.noSplash = 1; _GlideRoot.environment.noSplash = 1;
} }
#endif
_GlideRoot.windowsInit = FXTRUE; /* to avoid race with grSstControl() */ _GlideRoot.windowsInit = FXTRUE; /* to avoid race with grSstControl() */

View File

@@ -105,29 +105,43 @@
#include "fxglide.h" #include "fxglide.h"
#include "fxcmd.h" #include "fxcmd.h"
#ifdef GLIDE_PLUG
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
static const void *
getPlugdata (FxU32* w, FxU32* h, FxI32* strideInBytes,
GrLfbWriteMode_t* format)
{
GR_DCL_GC;
if (gc->pluginInfo.plugProc != NULL)
return (*gc->pluginInfo.plugProc)(w,h,strideInBytes,format);
return NULL;
}
#else
static __inline const void *
getPlugdata (FxU32* w, FxU32* h, FxI32* strideInBytes,
GrLfbWriteMode_t* format)
{
return NULL;
}
#endif
void void
_grShamelessPlug(void) _grShamelessPlug(void)
{ {
GR_BEGIN_NOFIFOCHECK("_grShamelessPlug", 80); GR_BEGIN_NOFIFOCHECK("_grShamelessPlug", 80);
GDBG_INFO_MORE(gc->myLevel, "()\n"); GDBG_INFO_MORE(gc->myLevel, "()\n");
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32) GrState state;
if (gc->pluginInfo.plugProc != NULL) { FxU32 plugWidth, plugHeight;
FxU32 FxI32 plugStride;
plugWidth, plugHeight; GrLfbWriteMode_t plugFormat;
FxI32 const void* plugData =
plugStride; getPlugdata(&plugWidth, &plugHeight, &plugStride, &plugFormat);
GrLfbWriteMode_t
plugFormat; if (!plugData) return;
const void*
plugData = (*gc->pluginInfo.plugProc)(&plugWidth, &plugHeight,
&plugStride,
&plugFormat);
if (plugData != NULL) {
#ifdef GLIDE_PLUG
GrState state;
grGlideGetState(&state); grGlideGetState(&state);
grDisableAllEffects(); grDisableAllEffects();
@@ -165,10 +179,8 @@ _grShamelessPlug(void)
plugData); plugData);
grGlideSetState(&state); grGlideSetState(&state);
#endif /* GLIDE_PLUG */
}
}
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */
GR_END(); GR_END();
} /* _grShamelessPlug */ } /* _grShamelessPlug */
#endif /* GLIDE_PLUG */

View File

@@ -1061,8 +1061,10 @@ GR_ENTRY(grBufferSwap, void, (FxU32 swapInterval))
GR_BEGIN_NOFIFOCHECK(FN_NAME,86); GR_BEGIN_NOFIFOCHECK(FN_NAME,86);
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",swapInterval); GDBG_INFO_MORE(gc->myLevel,"(%d)\n",swapInterval);
#ifdef GLIDE_PLUG
/* optionally display the 3Dfx powerfield logo overlay */ /* optionally display the 3Dfx powerfield logo overlay */
if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug(); if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug();
#endif
/* check for environmental override */ /* check for environmental override */
if (_GlideRoot.environment.swapInterval >= 0) { if (_GlideRoot.environment.swapInterval >= 0) {
@@ -1180,8 +1182,10 @@ GR_ENTRY(grDRIBufferSwap, void, (FxU32 swapInterval))
GR_BEGIN_NOFIFOCHECK(FN_NAME,86); GR_BEGIN_NOFIFOCHECK(FN_NAME,86);
GDBG_INFO_MORE(gc->myLevel,"(%d)\n",swapInterval); GDBG_INFO_MORE(gc->myLevel,"(%d)\n",swapInterval);
#ifdef GLIDE_PLUG
/* optionally display the 3Dfx powerfield logo overlay */ /* optionally display the 3Dfx powerfield logo overlay */
if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug(); if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug();
#endif
/* check for environmental override */ /* check for environmental override */
if (_GlideRoot.environment.swapInterval >= 0) { if (_GlideRoot.environment.swapInterval >= 0) {

View File

@@ -864,9 +864,17 @@ _GlideInitEnvironment(void)
_GlideRoot.environment.triBoundsCheck = (GETENV("FX_GLIDE_BOUNDS_CHECK") != NULL); _GlideRoot.environment.triBoundsCheck = (GETENV("FX_GLIDE_BOUNDS_CHECK") != NULL);
GDBG_INFO(80," triBoundsCheck: %d\n",_GlideRoot.environment.triBoundsCheck); GDBG_INFO(80," triBoundsCheck: %d\n",_GlideRoot.environment.triBoundsCheck);
#ifdef GLIDE_SPLASH
_GlideRoot.environment.noSplash = (GETENV("FX_GLIDE_NO_SPLASH") != NULL); _GlideRoot.environment.noSplash = (GETENV("FX_GLIDE_NO_SPLASH") != NULL);
#else
_GlideRoot.environment.noSplash = 1;
#endif
GDBG_INFO(80," noSplash: %d\n",_GlideRoot.environment.noSplash); GDBG_INFO(80," noSplash: %d\n",_GlideRoot.environment.noSplash);
#ifdef GLIDE_PLUG
_GlideRoot.environment.shamelessPlug = (GETENV("FX_GLIDE_SHAMELESS_PLUG") != NULL); _GlideRoot.environment.shamelessPlug = (GETENV("FX_GLIDE_SHAMELESS_PLUG") != NULL);
#else
_GlideRoot.environment.shamelessPlug = 0;
#endif
GDBG_INFO(80," shamelessPlug: %d\n",_GlideRoot.environment.shamelessPlug); GDBG_INFO(80," shamelessPlug: %d\n",_GlideRoot.environment.shamelessPlug);
_GlideRoot.environment.ignoreReopen = (GETENV("FX_GLIDE_IGNORE_REOPEN") != NULL); _GlideRoot.environment.ignoreReopen = (GETENV("FX_GLIDE_IGNORE_REOPEN") != NULL);
GDBG_INFO(80," ignoreReopen: %d\n",_GlideRoot.environment.ignoreReopen); GDBG_INFO(80," ignoreReopen: %d\n",_GlideRoot.environment.ignoreReopen);

View File

@@ -156,6 +156,19 @@
* Updated grSplash code to set all of the necessary state itself rather * Updated grSplash code to set all of the necessary state itself rather
* than expecting the caller to do so. * than expecting the caller to do so.
*/ */
#ifndef GLIDE_SPLASH
#include <3dfx.h>
#define FX_DLL_DEFINITION
#include <fxdll.h>
#include <glide.h>
#include "fxglide.h"
GR_DIENTRY(grSplash,void,(float x, float y,
float w, float h,
FxU32 frameNumber)) {
/* nothing */
}
#elif defined(_WIN32)
#include <math.h> #include <math.h>
#include <3dfx.h> #include <3dfx.h>
@@ -188,7 +201,6 @@ GR_DIENTRY(grSplash,void,(float x, float y,
GR_BEGIN_NOFIFOCHECK("grSplash", 85); GR_BEGIN_NOFIFOCHECK("grSplash", 85);
GDBG_INFO_MORE(gc->myLevel,"(%f,%f,%f,%f,%d)\n", x, y, w, h, frameNumber); GDBG_INFO_MORE(gc->myLevel,"(%f,%f,%f,%f,%d)\n", x, y, w, h, frameNumber);
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
{ {
GrState glideState; GrState glideState;
@@ -201,8 +213,20 @@ GR_DIENTRY(grSplash,void,(float x, float y,
} }
grGlideSetState((const void*)&glideState); grGlideSetState((const void*)&glideState);
} }
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */
GR_END(); GR_END();
#undef FN_NAME #undef FN_NAME
} }
#else /* others */
#include <3dfx.h>
#define FX_DLL_DEFINITION
#include <fxdll.h>
#include <glide.h>
#include "fxglide.h"
GR_DIENTRY(grSplash,void,(float x, float y,
float w, float h,
FxU32 frameNumber)) {
/* nothing */
}
#endif

View File

@@ -696,9 +696,11 @@ clearBuffers( GrGC *gc )
static void static void
doSplash( void ) doSplash( void )
{ {
#if defined(GLIDE_SPLASH) || ((GLIDE_PLATFORM & GLIDE_OS_WIN32) && defined(GLIDE_PLUG))
GR_DCL_GC; GR_DCL_GC;
#endif
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32) #if (GLIDE_PLATFORM & GLIDE_OS_WIN32) && (defined(GLIDE_SPLASH)||defined(GLIDE_PLUG))
{ {
FxBool FxBool
didLoad; didLoad;
@@ -742,6 +744,7 @@ doSplash( void )
} }
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */ #endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */
#ifdef GLIDE_SPLASH
if (_GlideRoot.environment.noSplash == 0) { if (_GlideRoot.environment.noSplash == 0) {
grSplash(0.0f, 0.0f, grSplash(0.0f, 0.0f,
(float)gc->state.screen_width, (float)gc->state.screen_width,
@@ -749,6 +752,7 @@ doSplash( void )
0); 0);
} }
_GlideRoot.environment.noSplash = 1; _GlideRoot.environment.noSplash = 1;
#endif
} /* doSplash */ } /* doSplash */

View File

@@ -1,457 +0,0 @@
static unsigned long fxPlugWidth = 180;
static unsigned long fxPlugHeight = 90;
static unsigned long fxPlugStride = 360;
static unsigned char tga_16rle[] = {
0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00,
0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00,
0xff, 0x00, 0x00, 0x98, 0x00, 0x00, 0x06, 0x00, 0x00, 0x40, 0x10, 0xa0,
0x20, 0xe0, 0x30, 0x40, 0x41, 0x60, 0x51, 0xa0, 0x59, 0x81, 0xa0, 0x59,
0x05, 0x80, 0x59, 0x60, 0x49, 0x20, 0x41, 0xc0, 0x28, 0x60, 0x10, 0x20,
0x00, 0xff, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x0b, 0x20, 0x08, 0xa0, 0x20,
0x40, 0x49, 0xe0, 0x69, 0xa1, 0x92, 0x41, 0xb3, 0xc1, 0xd3, 0xe1, 0xdb,
0xe1, 0xdb, 0x01, 0xe4, 0x21, 0xe4, 0x21, 0xec, 0x81, 0x21, 0xec, 0x09,
0x21, 0xec, 0x01, 0xe4, 0x01, 0xe4, 0xe1, 0xdb, 0xc1, 0xd3, 0x41, 0xbb,
0x81, 0x8a, 0xc0, 0x61, 0xc0, 0x28, 0x00, 0x00, 0xff, 0x00, 0x00, 0x97,
0x00, 0x00, 0x1d, 0x00, 0x00, 0xa0, 0x20, 0x80, 0x51, 0x61, 0x8a, 0x61,
0xbb, 0xe1, 0xdb, 0x21, 0xec, 0x41, 0xf4, 0x41, 0xf4, 0x41, 0xec, 0x21,
0xec, 0x21, 0xec, 0x21, 0xec, 0x21, 0xe4, 0x01, 0xe4, 0x01, 0xe4, 0x01,
0xe4, 0x01, 0xe4, 0x01, 0xe4, 0x01, 0xe4, 0x01, 0xe4, 0x01, 0xe4, 0x01,
0xe4, 0x21, 0xe4, 0x21, 0xec, 0x21, 0xec, 0xe1, 0xdb, 0x41, 0xb3, 0xe0,
0x69, 0xa0, 0x20, 0xff, 0x00, 0x00, 0x92, 0x00, 0x00, 0x13, 0x00, 0x00,
0xa0, 0x20, 0x00, 0x72, 0x41, 0xb3, 0x01, 0xe4, 0x61, 0xf4, 0x61, 0xfc,
0x21, 0xec, 0x01, 0xe4, 0xe1, 0xdb, 0xc1, 0xd3, 0x61, 0xc3, 0x41, 0xbb,
0x41, 0xbb, 0x41, 0xbb, 0x41, 0xbb, 0x81, 0xc3, 0xc1, 0xd3, 0xe1, 0xdb,
0x01, 0xe4, 0x81, 0x21, 0xec, 0x01, 0x01, 0xe4, 0x01, 0xe4, 0x83, 0x01,
0xe4, 0x06, 0x01, 0xe4, 0x01, 0xe4, 0x21, 0xec, 0x21, 0xec, 0xe1, 0xdb,
0x81, 0x8a, 0x80, 0x20, 0xff, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x0f, 0xa0,
0x20, 0x00, 0x72, 0x41, 0xbb, 0x21, 0xec, 0x41, 0xf4, 0x01, 0xe4, 0x41,
0xbb, 0x81, 0x8a, 0xe0, 0x69, 0x60, 0x49, 0xe0, 0x30, 0x80, 0x18, 0x40,
0x10, 0x20, 0x08, 0x20, 0x00, 0x00, 0x00, 0x81, 0x20, 0x00, 0x09, 0x20,
0x08, 0x40, 0x10, 0xc0, 0x28, 0x20, 0x41, 0xc0, 0x61, 0xa1, 0x92, 0xa1,
0xcb, 0x01, 0xe4, 0x21, 0xec, 0x01, 0xe4, 0x85, 0x01, 0xe4, 0x04, 0x01,
0xe4, 0x41, 0xec, 0xc1, 0xd3, 0xe0, 0x69, 0x20, 0x08, 0xff, 0x00, 0x00,
0x89, 0x00, 0x00, 0x09, 0x40, 0x10, 0x80, 0x59, 0x01, 0xab, 0x01, 0xe4,
0x21, 0xe4, 0x41, 0xbb, 0x20, 0x7a, 0x40, 0x49, 0x80, 0x18, 0x00, 0x00,
0x90, 0x00, 0x00, 0x05, 0x40, 0x10, 0x20, 0x41, 0x61, 0x82, 0xc1, 0xd3,
0x21, 0xec, 0x01, 0xe4, 0x85, 0x01, 0xe4, 0x03, 0x01, 0xe4, 0x41, 0xec,
0x21, 0xb3, 0xc0, 0x28, 0xff, 0x00, 0x00, 0x86, 0x00, 0x00, 0x07, 0xc0,
0x28, 0x61, 0x8a, 0xa1, 0xcb, 0xe1, 0xdb, 0xe1, 0xa2, 0xa0, 0x59, 0xa0,
0x20, 0x00, 0x00, 0x97, 0x00, 0x00, 0x04, 0x80, 0x18, 0x00, 0x72, 0xa1,
0xd3, 0x21, 0xec, 0x01, 0xe4, 0x84, 0x01, 0xe4, 0x03, 0x01, 0xe4, 0x21,
0xec, 0xc1, 0xd3, 0x40, 0x49, 0xff, 0x00, 0x00, 0x83, 0x00, 0x00, 0x05,
0x40, 0x41, 0xe1, 0xa2, 0xc1, 0xd3, 0x01, 0xab, 0xa0, 0x59, 0x80, 0x18,
0x9d, 0x00, 0x00, 0x03, 0x80, 0x20, 0x81, 0x8a, 0x21, 0xec, 0x01, 0xe4,
0x85, 0x01, 0xe4, 0x02, 0x21, 0xec, 0x01, 0xe4, 0x60, 0x51, 0xff, 0x00,
0x00, 0x05, 0x00, 0x00, 0x40, 0x49, 0x01, 0xab, 0x81, 0xcb, 0x81, 0x8a,
0xe0, 0x30, 0xa2, 0x00, 0x00, 0x02, 0xa0, 0x59, 0xe1, 0xdb, 0x21, 0xec,
0x85, 0x01, 0xe4, 0x02, 0x21, 0xe4, 0xe1, 0xdb, 0x00, 0x39, 0xfc, 0x00,
0x00, 0x05, 0x00, 0x00, 0x60, 0x51, 0x01, 0xab, 0x21, 0xb3, 0xc0, 0x61,
0x40, 0x10, 0xa5, 0x00, 0x00, 0x02, 0x00, 0x39, 0xa1, 0xd3, 0x21, 0xec,
0x85, 0x01, 0xe4, 0x02, 0x21, 0xec, 0xa1, 0xcb, 0x80, 0x20, 0xf9, 0x00,
0x00, 0x05, 0x00, 0x00, 0x40, 0x49, 0xe1, 0xa2, 0xe1, 0xa2, 0x40, 0x49,
0x00, 0x00, 0xa8, 0x00, 0x00, 0x02, 0xe0, 0x30, 0xc1, 0xd3, 0x21, 0xec,
0x85, 0x01, 0xe4, 0x02, 0x21, 0xec, 0x21, 0xb3, 0x20, 0x08, 0xf7, 0x00,
0x00, 0x03, 0x00, 0x39, 0xa1, 0x92, 0xa1, 0x9a, 0x00, 0x39, 0xac, 0x00,
0x00, 0x02, 0x00, 0x39, 0xe1, 0xdb, 0x01, 0xe4, 0x85, 0x01, 0xe4, 0x01,
0x41, 0xec, 0x00, 0x72, 0xf5, 0x00, 0x00, 0x03, 0x80, 0x20, 0x61, 0x8a,
0xc1, 0x9a, 0x00, 0x39, 0xaf, 0x00, 0x00, 0x02, 0xa0, 0x61, 0x21, 0xec,
0x01, 0xe4, 0x84, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0xc1, 0xd3, 0x80, 0x20,
0xf2, 0x00, 0x00, 0x04, 0x20, 0x08, 0xc0, 0x61, 0x81, 0x92, 0x40, 0x49,
0x00, 0x00, 0xb0, 0x00, 0x00, 0x02, 0x00, 0x00, 0xe1, 0xa2, 0x21, 0xec,
0x85, 0x01, 0xe4, 0x01, 0x41, 0xec, 0x40, 0x7a, 0xf1, 0x00, 0x00, 0x03,
0x20, 0x41, 0x61, 0x8a, 0xa0, 0x59, 0x20, 0x08, 0xb3, 0x00, 0x00, 0x02,
0xc0, 0x28, 0xe1, 0xdb, 0x01, 0xe4, 0x84, 0x01, 0xe4, 0x02, 0x01, 0xe4,
0xc1, 0xd3, 0x60, 0x18, 0xee, 0x00, 0x00, 0x03, 0x80, 0x20, 0x20, 0x7a,
0xe0, 0x69, 0x60, 0x18, 0xb6, 0x00, 0x00, 0x01, 0x81, 0x8a, 0x21, 0xec,
0x85, 0x01, 0xe4, 0x01, 0x21, 0xec, 0xc0, 0x61, 0xec, 0x00, 0x00, 0x03,
0x00, 0x00, 0x80, 0x51, 0x20, 0x7a, 0xe0, 0x30, 0xb8, 0x00, 0x00, 0x02,
0xc0, 0x28, 0xe1, 0xdb, 0x01, 0xe4, 0x84, 0x01, 0xe4, 0x02, 0x21, 0xec,
0x21, 0xab, 0x00, 0x00, 0xea, 0x00, 0x00, 0x03, 0xa0, 0x20, 0xe0, 0x69,
0xa0, 0x59, 0x00, 0x00, 0xba, 0x00, 0x00, 0x01, 0xc1, 0x9a, 0x21, 0xec,
0x84, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0xe1, 0xdb, 0xa0, 0x20, 0xe8, 0x00,
0x00, 0x03, 0x00, 0x00, 0x40, 0x41, 0xe0, 0x69, 0xa0, 0x20, 0xbc, 0x00,
0x00, 0x02, 0x80, 0x51, 0x21, 0xec, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02,
0x01, 0xe4, 0x21, 0xec, 0x80, 0x51, 0xe7, 0x00, 0x00, 0x03, 0x60, 0x18,
0xa0, 0x61, 0x40, 0x49, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x02, 0x80, 0x18,
0xe1, 0xdb, 0x01, 0xe4, 0x84, 0x01, 0xe4, 0x01, 0x41, 0xec, 0x41, 0x82,
0xe6, 0x00, 0x00, 0x02, 0x00, 0x39, 0xc0, 0x61, 0x80, 0x20, 0xbf, 0x00,
0x00, 0x02, 0x00, 0x00, 0x21, 0xb3, 0x21, 0xec, 0x84, 0x01, 0xe4, 0x02,
0x21, 0xec, 0x21, 0xb3, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x03, 0x20, 0x08,
0x60, 0x51, 0x60, 0x49, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00,
0x87, 0x20, 0x00, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x09, 0xa2, 0x10,
0x49, 0x4a, 0x4d, 0x6b, 0xef, 0x7b, 0x10, 0x84, 0x8e, 0x73, 0x0c, 0x63,
0x49, 0x4a, 0x45, 0x29, 0x20, 0x00, 0x8f, 0x00, 0x00, 0x01, 0x41, 0x82,
0x41, 0xec, 0x84, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0xa1, 0xd3, 0x40, 0x10,
0xe2, 0x00, 0x00, 0x02, 0x60, 0x18, 0x80, 0x59, 0xc0, 0x28, 0x94, 0x00,
0x00, 0x00, 0x8a, 0x52, 0x87, 0x59, 0xce, 0x00, 0x8a, 0x52, 0x88, 0x00,
0x00, 0x02, 0x28, 0x42, 0x55, 0xad, 0x5d, 0xef, 0x86, 0xff, 0xff, 0x01,
0xdf, 0xff, 0x28, 0x42, 0x8f, 0x00, 0x00, 0x02, 0xa0, 0x59, 0x21, 0xec,
0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0xe1, 0xdb, 0xc0, 0x28,
0xe1, 0x00, 0x00, 0x02, 0xe0, 0x30, 0x60, 0x51, 0x60, 0x10, 0x95, 0x00,
0x00, 0x00, 0x6d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x6d, 0x6b, 0x87, 0x00,
0x00, 0x01, 0x30, 0x84, 0xff, 0xff, 0x89, 0xff, 0xff, 0x00, 0x49, 0x4a,
0x8f, 0x00, 0x00, 0x00, 0x20, 0x41, 0x81, 0x01, 0xe4, 0x83, 0x01, 0xe4,
0x02, 0x01, 0xe4, 0x01, 0xe4, 0x20, 0x41, 0xdf, 0x00, 0x00, 0x03, 0x00,
0x00, 0x20, 0x41, 0x20, 0x41, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x4d,
0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x86, 0x00, 0x00, 0x00, 0xcf,
0x7b, 0x8b, 0xff, 0xff, 0x00, 0x49, 0x4a, 0x8f, 0x00, 0x00, 0x02, 0xc0,
0x28, 0xe1, 0xdb, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0x21,
0xe4, 0x80, 0x51, 0xde, 0x00, 0x00, 0x02, 0x40, 0x10, 0x40, 0x49, 0xa0,
0x28, 0x98, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x85, 0x00, 0x00, 0x01, 0x45, 0x29, 0xbe, 0xf7, 0x8b, 0xff, 0xff,
0x00, 0x49, 0x4a, 0x8f, 0x00, 0x00, 0x02, 0x80, 0x20, 0xe1, 0xdb, 0x01,
0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0x21, 0xec, 0xa0, 0x59, 0xdd,
0x00, 0x00, 0x02, 0x60, 0x18, 0x40, 0x49, 0x60, 0x18, 0x99, 0x00, 0x00,
0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x85, 0x00, 0x00,
0x00, 0x51, 0x8c, 0x8c, 0xff, 0xff, 0x00, 0x49, 0x4a, 0x8f, 0x00, 0x00,
0x02, 0x60, 0x10, 0xc1, 0xd3, 0x01, 0xe4, 0x84, 0x01, 0xe4, 0x01, 0x21,
0xec, 0xc0, 0x61, 0xdc, 0x00, 0x00, 0x02, 0xa0, 0x20, 0x20, 0x41, 0x20,
0x08, 0x9a, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0x00, 0x00, 0x38, 0xc6, 0x8c, 0xff, 0xff,
0x00, 0x49, 0x4a, 0x8f, 0x00, 0x00, 0x02, 0x40, 0x10, 0xc1, 0xd3, 0x01,
0xe4, 0x84, 0x01, 0xe4, 0x01, 0x21, 0xec, 0xc0, 0x61, 0xdb, 0x00, 0x00,
0x02, 0xe0, 0x30, 0x00, 0x39, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x4d,
0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0x61,
0x08, 0x5d, 0xef, 0x89, 0xff, 0xff, 0x03, 0x7d, 0xef, 0x9a, 0xd6, 0x59,
0xce, 0xc7, 0x39, 0x8f, 0x00, 0x00, 0x02, 0x40, 0x10, 0xc1, 0xd3, 0x01,
0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0x21, 0xec, 0xa0, 0x59, 0xd9,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x39, 0xc0, 0x28, 0x9d, 0x00, 0x00,
0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xc3, 0x18, 0xbe, 0xf7, 0x87, 0xff, 0xff, 0x05, 0x3c, 0xe7, 0x2c,
0x63, 0xa2, 0x10, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00,
0x02, 0x60, 0x10, 0xc1, 0xd3, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01,
0xe4, 0x21, 0xec, 0x80, 0x51, 0xd8, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
0x39, 0xa0, 0x20, 0x9e, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff,
0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0x04, 0x21, 0xbe, 0xf7, 0x86,
0xff, 0xff, 0x01, 0xff, 0xff, 0x28, 0x42, 0x94, 0x00, 0x00, 0x02, 0x80,
0x20, 0xe1, 0xdb, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0x01,
0xe4, 0x40, 0x41, 0xd7, 0x00, 0x00, 0x02, 0x20, 0x08, 0x00, 0x39, 0x80,
0x18, 0x9f, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x01, 0x79, 0xce, 0x00, 0x00, 0x94, 0x00, 0x00, 0x02, 0xc0, 0x28, 0xe1,
0xdb, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0xe1, 0xdb, 0xe0,
0x30, 0xd6, 0x00, 0x00, 0x02, 0x40, 0x08, 0x20, 0x39, 0x60, 0x10, 0xa0,
0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84,
0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xb6,
0xb5, 0x95, 0x00, 0x00, 0x02, 0x00, 0x39, 0x01, 0xe4, 0x01, 0xe4, 0x83,
0x01, 0xe4, 0x02, 0x01, 0xe4, 0xc1, 0xdb, 0x80, 0x18, 0xd5, 0x00, 0x00,
0x02, 0x20, 0x08, 0x00, 0x39, 0x40, 0x08, 0xa1, 0x00, 0x00, 0x00, 0x4d,
0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3,
0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x95, 0x00, 0x00,
0x02, 0x60, 0x51, 0x21, 0xe4, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01,
0xe4, 0x81, 0xc3, 0x20, 0x08, 0xd5, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
0x00, 0xa2, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x00, 0xd7, 0xbd, 0x95, 0x00, 0x00, 0x01, 0xe0, 0x69, 0x41, 0xec, 0x84,
0x01, 0xe4, 0x02, 0x21, 0xec, 0xe1, 0xa2, 0x00, 0x00, 0xfa, 0x00, 0x00,
0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x95,
0x00, 0x00, 0x01, 0x81, 0x8a, 0x41, 0xec, 0x84, 0x01, 0xe4, 0x01, 0x41,
0xec, 0x41, 0x82, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff,
0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86,
0xff, 0xff, 0x00, 0xb6, 0xb5, 0x94, 0x00, 0x00, 0x02, 0x00, 0x00, 0x21,
0xb3, 0x21, 0xec, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0x21, 0xec, 0xa0,
0x61, 0xdb, 0x00, 0x00, 0x07, 0x20, 0x00, 0x86, 0x31, 0xcb, 0x5a, 0x4d,
0x6b, 0x4d, 0x6b, 0xaa, 0x52, 0x86, 0x31, 0x61, 0x08, 0x8f, 0x00, 0x00,
0x05, 0x04, 0x21, 0x69, 0x4a, 0x2c, 0x63, 0x0c, 0x63, 0xe7, 0x39, 0x61,
0x08, 0x81, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x81, 0x00, 0x00, 0x82, 0x00, 0x00, 0x01, 0x04, 0x21, 0xbe, 0xf7,
0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x84, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0x00, 0x87, 0x00, 0x00, 0x85, 0x00, 0x00, 0x02, 0x60, 0x10, 0xc1,
0xd3, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0x01, 0xe4, 0x00,
0x39, 0xd9, 0x00, 0x00, 0x03, 0x20, 0x00, 0x0c, 0x63, 0x59, 0xce, 0xdf,
0xff, 0x83, 0xff, 0xff, 0x03, 0xdf, 0xff, 0xfb, 0xde, 0x30, 0x84, 0x24,
0x21, 0x8b, 0x00, 0x00, 0x02, 0x24, 0x21, 0x14, 0xa5, 0x9e, 0xf7, 0x82,
0xff, 0xff, 0x04, 0xff, 0xff, 0xdb, 0xde, 0x6d, 0x6b, 0x00, 0x00, 0x2c,
0x63, 0x87, 0xff, 0xff, 0x02, 0x4d, 0x6b, 0x00, 0x00, 0x0c, 0x63, 0x81,
0xf7, 0xbd, 0x02, 0xf7, 0xbd, 0x38, 0xc6, 0xff, 0xff, 0x86, 0xff, 0xff,
0x00, 0x7d, 0xef, 0x81, 0xf7, 0xbd, 0x81, 0xf7, 0xbd, 0x03, 0x14, 0xa5,
0x00, 0x00, 0xe7, 0x39, 0x18, 0xc6, 0x86, 0xf7, 0xbd, 0x00, 0xcf, 0x7b,
0x84, 0x00, 0x00, 0x02, 0x00, 0x39, 0x01, 0xe4, 0x01, 0xe4, 0x83, 0x01,
0xe4, 0x02, 0x01, 0xe4, 0xc1, 0xd3, 0x60, 0x10, 0xd8, 0x00, 0x00, 0x01,
0xc3, 0x18, 0xb6, 0xb5, 0x89, 0xff, 0xff, 0x01, 0x5d, 0xef, 0xeb, 0x5a,
0x89, 0x00, 0x00, 0x01, 0x86, 0x31, 0x1c, 0xe7, 0x87, 0xff, 0xff, 0x01,
0xb2, 0x94, 0x6d, 0x6b, 0x87, 0xff, 0xff, 0x02, 0x4d, 0x6b, 0x00, 0x00,
0x30, 0x84, 0x90, 0xff, 0xff, 0x03, 0x1c, 0xe7, 0x20, 0x00, 0xa2, 0x10,
0xbe, 0xf7, 0x86, 0xff, 0xff, 0x01, 0x5d, 0xef, 0x61, 0x08, 0x83, 0x00,
0x00, 0x02, 0xc0, 0x61, 0x21, 0xec, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02,
0x21, 0xec, 0x21, 0xab, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x01, 0xe3, 0x18,
0x9a, 0xd6, 0x8c, 0xff, 0xff, 0x00, 0xcf, 0x7b, 0x87, 0x00, 0x00, 0x01,
0xc3, 0x18, 0xfb, 0xde, 0x89, 0xff, 0xff, 0x00, 0x3c, 0xe7, 0x87, 0xff,
0xff, 0x02, 0x4d, 0x6b, 0x00, 0x00, 0x10, 0x84, 0x90, 0xff, 0xff, 0x03,
0xdb, 0xde, 0x41, 0x08, 0x00, 0x00, 0xd3, 0x9c, 0x87, 0xff, 0xff, 0x00,
0xeb, 0x5a, 0x83, 0x00, 0x00, 0x01, 0xa1, 0x92, 0x21, 0xec, 0x84, 0x01,
0xe4, 0x01, 0x41, 0xec, 0x21, 0x7a, 0xd7, 0x00, 0x00, 0x01, 0x20, 0x00,
0xf7, 0xbd, 0x8e, 0xff, 0xff, 0x00, 0xcb, 0x5a, 0x85, 0x00, 0x00, 0x01,
0x00, 0x00, 0x75, 0xad, 0x93, 0xff, 0xff, 0x02, 0x4d, 0x6b, 0x00, 0x00,
0x10, 0x84, 0x90, 0xff, 0xff, 0x03, 0xdb, 0xde, 0x41, 0x08, 0x00, 0x00,
0x08, 0x42, 0x87, 0xff, 0xff, 0x00, 0xb6, 0xb5, 0x82, 0x00, 0x00, 0x02,
0x40, 0x10, 0xa1, 0xcb, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4,
0x01, 0xe4, 0x40, 0x49, 0xd7, 0x00, 0x00, 0x00, 0x8e, 0x73, 0x8f, 0xff,
0xff, 0x01, 0x3c, 0xe7, 0xa2, 0x10, 0x84, 0x00, 0x00, 0x00, 0x28, 0x42,
0x94, 0xff, 0xff, 0x02, 0x4d, 0x6b, 0x00, 0x00, 0x10, 0x84, 0x90, 0xff,
0xff, 0x04, 0xdb, 0xde, 0x41, 0x08, 0x00, 0x00, 0x20, 0x00, 0x9a, 0xd6,
0x86, 0xff, 0xff, 0x01, 0xbe, 0xf7, 0x24, 0x21, 0x81, 0x00, 0x00, 0x02,
0x40, 0x49, 0x21, 0xe4, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4,
0xc1, 0xd3, 0x60, 0x18, 0xd6, 0x00, 0x00, 0x01, 0x61, 0x08, 0xfb, 0xde,
0x86, 0xff, 0xff, 0x01, 0xba, 0xd6, 0x7d, 0xef, 0x87, 0xff, 0xff, 0x00,
0x6d, 0x6b, 0x84, 0x00, 0x00, 0x00, 0x75, 0xad, 0x87, 0xff, 0xff, 0x03,
0x3c, 0xe7, 0x92, 0x94, 0x51, 0x8c, 0x59, 0xce, 0x88, 0xff, 0xff, 0x02,
0x4d, 0x6b, 0x00, 0x00, 0x10, 0x84, 0x90, 0xff, 0xff, 0x01, 0xfb, 0xde,
0x41, 0x08, 0x81, 0x00, 0x00, 0x00, 0x8e, 0x73, 0x87, 0xff, 0xff, 0x00,
0x10, 0x84, 0x81, 0x00, 0x00, 0x01, 0x61, 0x82, 0x41, 0xec, 0x84, 0x01,
0xe4, 0x01, 0x21, 0xec, 0xc1, 0xa2, 0xd7, 0x00, 0x00, 0x00, 0xaa, 0x52,
0x85, 0xff, 0xff, 0x04, 0x7d, 0xef, 0xaa, 0x52, 0x41, 0x08, 0x45, 0x29,
0xdb, 0xde, 0x86, 0xff, 0xff, 0x01, 0xf7, 0xbd, 0x00, 0x00, 0x82, 0x00,
0x00, 0x01, 0xe3, 0x18, 0x9e, 0xf7, 0x86, 0xff, 0xff, 0x01, 0x7d, 0xef,
0x86, 0x31, 0x81, 0x00, 0x00, 0x01, 0x41, 0x08, 0x55, 0xad, 0x87, 0xff,
0xff, 0x02, 0x4d, 0x6b, 0x00, 0x00, 0xef, 0x7b, 0x82, 0xdf, 0xff, 0x00,
0xdf, 0xff, 0x87, 0xff, 0xff, 0x00, 0xff, 0xff, 0x83, 0xdf, 0xff, 0x01,
0xba, 0xd6, 0x41, 0x08, 0x81, 0x00, 0x00, 0x01, 0xe3, 0x18, 0x7d, 0xef,
0x86, 0xff, 0xff, 0x04, 0xfb, 0xde, 0x41, 0x08, 0x00, 0x00, 0x41, 0xbb,
0x21, 0xe4, 0x84, 0x01, 0xe4, 0x01, 0x21, 0xec, 0xc0, 0x61, 0xd7, 0x00,
0x00, 0x00, 0xb2, 0x94, 0x85, 0xff, 0xff, 0x00, 0x6d, 0x6b, 0x82, 0x00,
0x00, 0x00, 0x2c, 0x63, 0x86, 0xff, 0xff, 0x01, 0x9e, 0xf7, 0xa2, 0x10,
0x82, 0x00, 0x00, 0x00, 0xcb, 0x5a, 0x87, 0xff, 0xff, 0x00, 0xf3, 0x9c,
0x83, 0x00, 0x00, 0x00, 0x2c, 0x63, 0x87, 0xff, 0xff, 0x02, 0x4d, 0x6b,
0x00, 0x00, 0xa2, 0x10, 0x81, 0x65, 0x29, 0x02, 0x65, 0x29, 0x28, 0x42,
0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0x38, 0xc6, 0x83, 0x65, 0x29, 0x01,
0x24, 0x21, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x55, 0xad, 0x87, 0xff,
0xff, 0x01, 0x29, 0x42, 0x80, 0x28, 0x81, 0x01, 0xe4, 0x83, 0x01, 0xe4,
0x02, 0x01, 0xe4, 0xe1, 0xdb, 0xa0, 0x28, 0xd7, 0x00, 0x00, 0x00, 0x18,
0xc6, 0x84, 0xff, 0xff, 0x01, 0x3c, 0xe7, 0x41, 0x08, 0x82, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x85, 0xff, 0xff, 0x01, 0xdf, 0xff, 0x86,
0x31, 0x82, 0x00, 0x00, 0x00, 0x92, 0x94, 0x87, 0xff, 0xff, 0x00, 0x0c,
0x63, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xc3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x00, 0xb6, 0xb5, 0x88, 0x00, 0x00, 0x00, 0x8a, 0x52, 0x87, 0xff, 0xff,
0x02, 0x15, 0x9d, 0x20, 0x7a, 0x21, 0xec, 0x84, 0x01, 0xe4, 0x02, 0x21,
0xec, 0x01, 0xab, 0x00, 0x00, 0xd6, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0c,
0x63, 0x92, 0x94, 0x34, 0xa5, 0xf7, 0xbd, 0x9a, 0xd6, 0x7d, 0xef, 0x96,
0xb5, 0x83, 0x00, 0x00, 0x01, 0x41, 0x08, 0xfb, 0xde, 0x85, 0xff, 0xff,
0x01, 0xff, 0xff, 0xe7, 0x39, 0x81, 0x00, 0x00, 0x01, 0x20, 0x00, 0x59,
0xce, 0x86, 0xff, 0xff, 0x01, 0xff, 0xff, 0xc7, 0x39, 0x83, 0x00, 0x00,
0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x88,
0x00, 0x00, 0x01, 0x41, 0x08, 0xdb, 0xde, 0x86, 0xff, 0xff, 0x02, 0x9d,
0xf7, 0xe3, 0xd3, 0xe1, 0xe3, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0x21,
0xec, 0xa0, 0x61, 0xdb, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x82,
0x10, 0xa2, 0x10, 0x00, 0x00, 0x82, 0x00, 0x00, 0x01, 0x20, 0x00, 0x9a,
0xd6, 0x85, 0xff, 0xff, 0x01, 0xff, 0xff, 0xc7, 0x39, 0x81, 0x00, 0x00,
0x01, 0xa2, 0x10, 0x9e, 0xf7, 0x86, 0xff, 0xff, 0x01, 0xbe, 0xf7, 0xe3,
0x18, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x00, 0xd7, 0xbd, 0x89, 0x00, 0x00, 0x00, 0x71, 0x8c, 0x86, 0xff, 0xff,
0x02, 0xb5, 0xf6, 0xe1, 0xe3, 0xe1, 0xe3, 0x83, 0x01, 0xe4, 0x02, 0x01,
0xe4, 0xe1, 0xdb, 0x80, 0x20, 0xe3, 0x00, 0x00, 0x01, 0x20, 0x00, 0x79,
0xce, 0x85, 0xff, 0xff, 0x01, 0xdf, 0xff, 0x65, 0x29, 0x81, 0x00, 0x00,
0x01, 0x86, 0x31, 0xdf, 0xff, 0x86, 0xff, 0xff, 0x01, 0x7d, 0xef, 0x61,
0x08, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x00, 0xd7, 0xbd, 0x89, 0x00, 0x00, 0x01, 0xa6, 0x31, 0xdf, 0xff, 0x85,
0xff, 0xff, 0x01, 0x4b, 0xed, 0xc0, 0xdb, 0x84, 0x01, 0xe4, 0x02, 0x21,
0xec, 0xc1, 0x9a, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x01, 0x20, 0x00, 0xfb,
0xde, 0x85, 0xff, 0xff, 0x01, 0x9e, 0xf7, 0xc3, 0x18, 0x81, 0x00, 0x00,
0x00, 0x69, 0x4a, 0x87, 0xff, 0xff, 0x01, 0x1c, 0xe7, 0x41, 0x08, 0x83,
0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84,
0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7,
0xbd, 0x89, 0x00, 0x00, 0x01, 0x00, 0x00, 0x18, 0xc6, 0x84, 0xff, 0xff,
0x02, 0x7b, 0xff, 0x23, 0xe4, 0xe1, 0xe3, 0x83, 0x01, 0xe4, 0x02, 0x01,
0xe4, 0x01, 0xe4, 0x20, 0x41, 0xe4, 0x00, 0x00, 0x01, 0x86, 0x31, 0xdf,
0xff, 0x85, 0xff, 0xff, 0x01, 0x79, 0xce, 0x20, 0x00, 0x81, 0x00, 0x00,
0x00, 0x0c, 0x63, 0x87, 0xff, 0xff, 0x01, 0xdb, 0xde, 0x41, 0x08, 0x83,
0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84,
0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7,
0xbd, 0x8a, 0x00, 0x00, 0x00, 0x6d, 0x6b, 0x84, 0xff, 0xff, 0x01, 0xcf,
0xed, 0xc0, 0xdb, 0x84, 0x01, 0xe4, 0x02, 0x21, 0xec, 0x41, 0xbb, 0x00,
0x00, 0xe3, 0x00, 0x00, 0x01, 0x00, 0x00, 0x96, 0xb5, 0x86, 0xff, 0xff,
0x00, 0x30, 0x84, 0x82, 0x00, 0x00, 0x00, 0x8e, 0x73, 0x87, 0xff, 0xff,
0x01, 0x9a, 0xd6, 0x20, 0x00, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87,
0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe,
0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x8a, 0x00, 0x00, 0x01, 0xc3,
0x18, 0x7d, 0xef, 0x82, 0xff, 0xff, 0x02, 0x9d, 0xff, 0x44, 0xe4, 0xe0,
0xdb, 0x84, 0x01, 0xe4, 0x01, 0x21, 0xec, 0xe0, 0x69, 0xdf, 0x00, 0x00,
0x05, 0x00, 0x00, 0x41, 0x08, 0x61, 0x08, 0xc3, 0x18, 0x49, 0x4a, 0x96,
0xb5, 0x86, 0xff, 0xff, 0x01, 0xdf, 0xff, 0x65, 0x29, 0x82, 0x00, 0x00,
0x00, 0xef, 0x7b, 0x87, 0xff, 0xff, 0x01, 0x79, 0xce, 0x20, 0x00, 0x83,
0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84,
0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7,
0xbd, 0x8b, 0x00, 0x00, 0x00, 0x55, 0xad, 0x82, 0xff, 0xff, 0x01, 0x53,
0xf6, 0xc0, 0xdb, 0x84, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0xc1, 0xd3, 0x60,
0x18, 0xdf, 0x00, 0x00, 0x03, 0x04, 0x21, 0x9a, 0xd6, 0x1c, 0xe7, 0x9e,
0xf7, 0x88, 0xff, 0xff, 0x00, 0xcf, 0x7b, 0x83, 0x00, 0x00, 0x00, 0x30,
0x84, 0x87, 0xff, 0xff, 0x01, 0x59, 0xce, 0x20, 0x00, 0x83, 0x00, 0x00,
0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x8b,
0x00, 0x00, 0x00, 0x8a, 0x52, 0x81, 0xff, 0xff, 0x02, 0xde, 0xff, 0xa6,
0xe4, 0xe0, 0xdb, 0x84, 0x01, 0xe4, 0x01, 0x41, 0xec, 0x81, 0x8a, 0xe0,
0x00, 0x00, 0x01, 0x24, 0x21, 0xff, 0xff, 0x87, 0xff, 0xff, 0x03, 0xff,
0xff, 0x3c, 0xe7, 0xae, 0x73, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x92,
0x94, 0x87, 0xff, 0xff, 0x01, 0x59, 0xce, 0x20, 0x00, 0x83, 0x00, 0x00,
0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x8b,
0x00, 0x00, 0x05, 0x20, 0x00, 0x9a, 0xd6, 0xff, 0xff, 0x95, 0xf6, 0xc0,
0xdb, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0xe1, 0xdb, 0xc0,
0x28, 0xe0, 0x00, 0x00, 0x01, 0x24, 0x21, 0xbe, 0xf7, 0x87, 0xff, 0xff,
0x01, 0x9e, 0xf7, 0x8e, 0x73, 0x85, 0x00, 0x00, 0x00, 0xd3, 0x9c, 0x87,
0xff, 0xff, 0x01, 0x59, 0xce, 0x20, 0x00, 0x83, 0x00, 0x00, 0x00, 0x4d,
0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3,
0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x8c, 0x00, 0x00,
0x03, 0xcf, 0x73, 0xff, 0xff, 0xc7, 0xe4, 0xc0, 0xdb, 0x84, 0x01, 0xe4,
0x01, 0x21, 0xec, 0xa1, 0x9a, 0xe1, 0x00, 0x00, 0x01, 0x24, 0x21, 0xbe,
0xf7, 0x87, 0xff, 0xff, 0x03, 0xff, 0xff, 0xdf, 0xff, 0x38, 0xc6, 0x86,
0x31, 0x83, 0x00, 0x00, 0x00, 0xf3, 0x9c, 0x87, 0xff, 0xff, 0x01, 0x59,
0xce, 0x20, 0x00, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff,
0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86,
0xff, 0xff, 0x00, 0xd7, 0xbd, 0x8c, 0x00, 0x00, 0x03, 0x66, 0x29, 0x54,
0xee, 0xe0, 0xe3, 0x01, 0xe4, 0x83, 0x01, 0xe4, 0x02, 0x01, 0xe4, 0xe1,
0xe3, 0xe0, 0x38, 0xe1, 0x00, 0x00, 0x01, 0x24, 0x21, 0xbe, 0xf7, 0x8a,
0xff, 0xff, 0x01, 0x5d, 0xef, 0x86, 0x31, 0x82, 0x00, 0x00, 0x00, 0xd3,
0x9c, 0x87, 0xff, 0xff, 0x01, 0x59, 0xce, 0x20, 0x00, 0x83, 0x00, 0x00,
0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x8c,
0x00, 0x00, 0x02, 0x20, 0x00, 0xc3, 0xc3, 0x01, 0xe4, 0x84, 0x01, 0xe4,
0x02, 0xe0, 0xe3, 0x09, 0xed, 0x28, 0x42, 0xe1, 0x00, 0x00, 0x01, 0x24,
0x21, 0xff, 0xff, 0x8b, 0xff, 0xff, 0x01, 0x79, 0xce, 0x41, 0x08, 0x81,
0x00, 0x00, 0x00, 0x71, 0x8c, 0x87, 0xff, 0xff, 0x01, 0x59, 0xce, 0x20,
0x00, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x00, 0xd7, 0xbd, 0x8c, 0x00, 0x00, 0x02, 0x40, 0x49, 0x01, 0xe4, 0x01,
0xe4, 0x83, 0x01, 0xe4, 0x03, 0xe1, 0xe3, 0xe1, 0xe3, 0x58, 0xff, 0x55,
0xa5, 0xe1, 0x00, 0x00, 0x05, 0x61, 0x08, 0xeb, 0x5a, 0x2c, 0x63, 0x8e,
0x73, 0xf3, 0x9c, 0x7d, 0xef, 0x88, 0xff, 0xff, 0x00, 0xaa, 0x52, 0x81,
0x00, 0x00, 0x00, 0x51, 0x8c, 0x87, 0xff, 0xff, 0x01, 0x59, 0xce, 0x20,
0x00, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x00, 0xd7, 0xbd, 0x8b, 0x00, 0x00, 0x02, 0x20, 0x08, 0x41, 0xbb, 0x21,
0xec, 0x84, 0x01, 0xe4, 0x04, 0xc0, 0xdb, 0x09, 0xed, 0xff, 0xff, 0x7d,
0xef, 0xa2, 0x10, 0xe5, 0x00, 0x00, 0x01, 0x45, 0x29, 0x79, 0xce, 0x87,
0xff, 0xff, 0x00, 0x34, 0xa5, 0x81, 0x00, 0x00, 0x00, 0x10, 0x84, 0x87,
0xff, 0xff, 0x01, 0x79, 0xce, 0x20, 0x00, 0x83, 0x00, 0x00, 0x00, 0x4d,
0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3,
0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x8b, 0x00, 0x00,
0x01, 0xe0, 0x69, 0x41, 0xec, 0x84, 0x01, 0xe4, 0x02, 0xe1, 0xe3, 0xe1,
0xdb, 0xf8, 0xf6, 0x81, 0xff, 0xff, 0x00, 0x6d, 0x6b, 0xe6, 0x00, 0x00,
0x01, 0x08, 0x42, 0xff, 0xff, 0x86, 0xff, 0xff, 0x03, 0xfb, 0xde, 0x41,
0x08, 0x00, 0x00, 0xae, 0x73, 0x87, 0xff, 0xff, 0x01, 0x9a, 0xd6, 0x20,
0x00, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x00, 0xd7, 0xbd, 0x8a, 0x00, 0x00, 0x02, 0x60, 0x18, 0xa1, 0xcb, 0x01,
0xe4, 0x84, 0x01, 0xe4, 0x01, 0xc0, 0xdb, 0x6c, 0xed, 0x82, 0xff, 0xff,
0x00, 0xf7, 0xbd, 0xe6, 0x00, 0x00, 0x01, 0x20, 0x00, 0xba, 0xd6, 0x86,
0xff, 0xff, 0x03, 0xbe, 0xf7, 0x04, 0x21, 0x00, 0x00, 0x2c, 0x63, 0x87,
0xff, 0xff, 0x01, 0xdb, 0xde, 0x41, 0x08, 0x83, 0x00, 0x00, 0x00, 0x4d,
0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3,
0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x8a, 0x00, 0x00,
0x01, 0x61, 0x82, 0x41, 0xec, 0x84, 0x01, 0xe4, 0x02, 0xe1, 0xdb, 0x02,
0xe4, 0x5a, 0xff, 0x82, 0xff, 0xff, 0x01, 0xdf, 0xff, 0x65, 0x29, 0xe6,
0x00, 0x00, 0x00, 0xd7, 0xbd, 0x86, 0xff, 0xff, 0x03, 0xdf, 0xff, 0xa6,
0x31, 0x00, 0x00, 0x8a, 0x52, 0x87, 0xff, 0xff, 0x01, 0xfb, 0xde, 0x41,
0x08, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d,
0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff,
0x00, 0xd7, 0xbd, 0x89, 0x00, 0x00, 0x02, 0xe0, 0x30, 0x01, 0xdc, 0x01,
0xe4, 0x84, 0x01, 0xe4, 0x01, 0xc0, 0xdb, 0xcf, 0xed, 0x84, 0xff, 0xff,
0x00, 0x51, 0x8c, 0xde, 0x00, 0x00, 0x02, 0x00, 0x00, 0x41, 0x08, 0x20,
0x00, 0x84, 0x00, 0x00, 0x00, 0x96, 0xb5, 0x86, 0xff, 0xff, 0x04, 0xff,
0xff, 0xe7, 0x39, 0x00, 0x00, 0xe7, 0x39, 0xff, 0xff, 0x86, 0xff, 0xff,
0x01, 0x7d, 0xef, 0x61, 0x08, 0x83, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87,
0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe,
0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x88, 0x00, 0x00, 0x02, 0x00,
0x00, 0x01, 0xab, 0x21, 0xec, 0x84, 0x01, 0xe4, 0x02, 0xe0, 0xdb, 0x64,
0xe4, 0xbd, 0xff, 0x84, 0xff, 0xff, 0x01, 0xdb, 0xde, 0x41, 0x08, 0xd8,
0x00, 0x00, 0x07, 0x45, 0x29, 0xef, 0x7b, 0x71, 0x8c, 0xf3, 0x9c, 0x96,
0xb5, 0x18, 0xc6, 0xba, 0xd6, 0x30, 0x84, 0x84, 0x00, 0x00, 0x00, 0xb6,
0xb5, 0x86, 0xff, 0xff, 0x04, 0xff, 0xff, 0xc7, 0x39, 0x00, 0x00, 0x04,
0x21, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x01, 0xbe, 0xf7, 0xe3, 0x18, 0x83,
0x00, 0x00, 0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84,
0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7,
0xbd, 0x88, 0x00, 0x00, 0x02, 0xa0, 0x59, 0x21, 0xec, 0x01, 0xe4, 0x83,
0x01, 0xe4, 0x02, 0xe1, 0xe3, 0xe0, 0xe3, 0x73, 0xf6, 0x86, 0xff, 0xff,
0x00, 0x69, 0x4a, 0xd8, 0x00, 0x00, 0x00, 0x0c, 0x63, 0x85, 0xff, 0xff,
0x00, 0x34, 0xa5, 0x83, 0x00, 0x00, 0x01, 0x00, 0x00, 0x38, 0xc6, 0x86,
0xff, 0xff, 0x04, 0xbe, 0xf7, 0x04, 0x21, 0x00, 0x00, 0x41, 0x08, 0x1c,
0xe7, 0x86, 0xff, 0xff, 0x01, 0xff, 0xff, 0xe7, 0x39, 0x83, 0x00, 0x00,
0x00, 0x4d, 0x6b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x87,
0x00, 0x00, 0x02, 0x60, 0x18, 0xa1, 0xcb, 0x21, 0xe4, 0x84, 0x01, 0xe4,
0x02, 0xe0, 0xe3, 0x46, 0xd4, 0xdf, 0xff, 0x86, 0xff, 0xff, 0x00, 0x96,
0xb5, 0xd8, 0x00, 0x00, 0x01, 0xc7, 0x39, 0xff, 0xff, 0x84, 0xff, 0xff,
0x00, 0x38, 0xc6, 0x83, 0x00, 0x00, 0x01, 0x61, 0x08, 0x5d, 0xef, 0x86,
0xff, 0xff, 0x01, 0xba, 0xd6, 0x20, 0x00, 0x81, 0x00, 0x00, 0x00, 0x75,
0xad, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x83, 0x00, 0x00, 0x00, 0x2c,
0x63, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3,
0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x86, 0x00, 0x00,
0x02, 0x00, 0x00, 0xc1, 0x9a, 0x21, 0xec, 0x84, 0x01, 0xe4, 0x03, 0x01,
0xe4, 0xa1, 0xd3, 0x22, 0x31, 0xbb, 0xd6, 0x86, 0xff, 0xff, 0x01, 0xdf,
0xff, 0x45, 0x29, 0xd7, 0x00, 0x00, 0x01, 0x82, 0x10, 0x5d, 0xef, 0x84,
0xff, 0xff, 0x01, 0xbe, 0xf7, 0x86, 0x31, 0x82, 0x00, 0x00, 0x00, 0xaa,
0x52, 0x87, 0xff, 0xff, 0x00, 0x92, 0x94, 0x82, 0x00, 0x00, 0x00, 0xae,
0x73, 0x87, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x83, 0x00, 0x00, 0x00, 0xef,
0x7b, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3,
0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x86, 0x00, 0x00,
0x02, 0x80, 0x51, 0x21, 0xec, 0x01, 0xe4, 0x84, 0x01, 0xe4, 0x03, 0x21,
0xec, 0x00, 0x72, 0x00, 0x00, 0x51, 0x8c, 0x87, 0xff, 0xff, 0x00, 0xcf,
0x7b, 0xd8, 0x00, 0x00, 0x00, 0x96, 0xb5, 0x85, 0xff, 0xff, 0x04, 0x79,
0xce, 0xe7, 0x39, 0x61, 0x08, 0xc7, 0x39, 0xdb, 0xde, 0x87, 0xff, 0xff,
0x00, 0x08, 0x42, 0x82, 0x00, 0x00, 0x00, 0xe7, 0x39, 0x87, 0xff, 0xff,
0x05, 0xff, 0xff, 0xb2, 0x94, 0x28, 0x42, 0x49, 0x4a, 0x71, 0x8c, 0x9e,
0xf7, 0x87, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3,
0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x85, 0x00, 0x00,
0x02, 0x80, 0x20, 0xc1, 0xd3, 0x21, 0xe4, 0x84, 0x01, 0xe4, 0x05, 0x21,
0xec, 0x41, 0xb3, 0x20, 0x08, 0x00, 0x00, 0x65, 0x29, 0xdf, 0xff, 0x86,
0xff, 0xff, 0x01, 0xba, 0xd6, 0x20, 0x00, 0xd7, 0x00, 0x00, 0x00, 0xcb,
0x5a, 0x86, 0xff, 0xff, 0x02, 0xff, 0xff, 0x7d, 0xef, 0xdf, 0xff, 0x87,
0xff, 0xff, 0x01, 0x59, 0xce, 0x20, 0x00, 0x82, 0x00, 0x00, 0x01, 0x41,
0x08, 0xdb, 0xde, 0x94, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x84,
0x00, 0x00, 0x02, 0x00, 0x00, 0xc1, 0x9a, 0x21, 0xec, 0x84, 0x01, 0xe4,
0x02, 0x01, 0xe4, 0x01, 0xe4, 0x20, 0x39, 0x82, 0x00, 0x00, 0x00, 0x18,
0xc6, 0x87, 0xff, 0xff, 0x00, 0x08, 0x42, 0xd7, 0x00, 0x00, 0x01, 0x20,
0x00, 0x59, 0xce, 0x90, 0xff, 0xff, 0x00, 0x28, 0x42, 0x84, 0x00, 0x00,
0x00, 0xcf, 0x7b, 0x94, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00,
0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7, 0xbd, 0x84,
0x00, 0x00, 0x02, 0xa0, 0x59, 0x21, 0xec, 0x01, 0xe4, 0x84, 0x01, 0xe4,
0x01, 0x41, 0xec, 0x40, 0x82, 0x83, 0x00, 0x00, 0x00, 0x6d, 0x6b, 0x87,
0xff, 0xff, 0x00, 0xb2, 0x94, 0x81, 0x00, 0x00, 0x02, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x01, 0xe7, 0x39, 0xbe, 0xf7, 0x8e,
0xff, 0xff, 0x00, 0x71, 0x8c, 0x85, 0x00, 0x00, 0x01, 0xc3, 0x18, 0x3c,
0xe7, 0x8a, 0xff, 0xff, 0x01, 0xba, 0xd6, 0x9e, 0xf7, 0x86, 0xff, 0xff,
0x00, 0x4d, 0x6b, 0x84, 0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86,
0xff, 0xff, 0x00, 0xd7, 0xbd, 0x83, 0x00, 0x00, 0x02, 0xc0, 0x28, 0xe1,
0xdb, 0x01, 0xe4, 0x84, 0x01, 0xe4, 0x02, 0x21, 0xec, 0x61, 0xbb, 0x40,
0x08, 0x83, 0x00, 0x00, 0x01, 0xa2, 0x10, 0x7d, 0xef, 0x86, 0xff, 0xff,
0x08, 0x7d, 0xef, 0xa2, 0x10, 0x00, 0x00, 0xc7, 0x39, 0x92, 0x94, 0x4d,
0x6b, 0x10, 0x84, 0xae, 0x73, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x01, 0x0c,
0x63, 0xdf, 0xff, 0x8c, 0xff, 0xff, 0x01, 0xf3, 0x9c, 0x20, 0x00, 0x86,
0x00, 0x00, 0x01, 0x8a, 0x52, 0xdf, 0xff, 0x88, 0xff, 0xff, 0x02, 0x9a,
0xd6, 0x65, 0x29, 0x5d, 0xef, 0x86, 0xff, 0xff, 0x00, 0x4d, 0x6b, 0x84,
0x00, 0x00, 0x01, 0xe3, 0x18, 0xbe, 0xf7, 0x86, 0xff, 0xff, 0x00, 0xd7,
0xbd, 0x82, 0x00, 0x00, 0x02, 0x40, 0x10, 0x21, 0xb3, 0x21, 0xec, 0x84,
0x01, 0xe4, 0x02, 0x01, 0xe4, 0xe1, 0xdb, 0x00, 0x39, 0x85, 0x00, 0x00,
0x00, 0x34, 0xa5, 0x87, 0xff, 0xff, 0x07, 0x0c, 0x63, 0x00, 0x00, 0xe3,
0x18, 0x71, 0x8c, 0x8e, 0x73, 0x7d, 0xef, 0x55, 0xad, 0x00, 0x00, 0xd2,
0x00, 0x00, 0x01, 0xcb, 0x5a, 0x5d, 0xef, 0x89, 0xff, 0xff, 0x01, 0xdf,
0xff, 0xef, 0x7b, 0x89, 0x00, 0x00, 0x01, 0x6d, 0x6b, 0xff, 0xff, 0x86,
0xff, 0xff, 0x02, 0x79, 0xce, 0x04, 0x21, 0x20, 0x00, 0x87, 0xff, 0xff,
0x00, 0x8e, 0x73, 0x84, 0x00, 0x00, 0x00, 0x04, 0x21, 0x87, 0xff, 0xff,
0x00, 0x38, 0xc6, 0x81, 0x00, 0x00, 0x02, 0x20, 0x00, 0xc1, 0x9a, 0x81,
0xfc, 0x84, 0x41, 0xec, 0x02, 0x41, 0xf4, 0x61, 0xf4, 0xe0, 0x69, 0x86,
0x00, 0x00, 0x00, 0x69, 0x4a, 0x87, 0xff, 0xff, 0x07, 0x59, 0xce, 0x00,
0x00, 0xa2, 0x10, 0x51, 0x8c, 0xeb, 0x5a, 0x79, 0xce, 0x34, 0xa5, 0x00,
0x00, 0xd3, 0x00, 0x00, 0x02, 0x24, 0x21, 0x92, 0x94, 0x5d, 0xef, 0x85,
0xff, 0xff, 0x02, 0x7d, 0xef, 0x14, 0xa5, 0xc7, 0x39, 0x8b, 0x00, 0x00,
0x0c, 0x49, 0x4a, 0xd7, 0xbd, 0xbe, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xdf,
0xff, 0xdb, 0xde, 0xef, 0x7b, 0x82, 0x10, 0x00, 0x00, 0x41, 0x08, 0x30,
0x84, 0x92, 0x94, 0x84, 0x71, 0x8c, 0x01, 0x92, 0x94, 0xe7, 0x39, 0x84,
0x00, 0x00, 0x01, 0x82, 0x10, 0x51, 0x8c, 0x85, 0x71, 0x8c, 0x01, 0x92,
0x94, 0x2c, 0x63, 0x81, 0x00, 0x00, 0x02, 0x80, 0x18, 0x40, 0x7a, 0x40,
0x82, 0x84, 0x40, 0x7a, 0x02, 0x40, 0x82, 0x00, 0x72, 0x20, 0x08, 0x86,
0x00, 0x00, 0x03, 0x20, 0x00, 0x10, 0x84, 0x71, 0x8c, 0xb2, 0x94, 0x84,
0xf3, 0x9c, 0x07, 0xb2, 0x94, 0x82, 0x10, 0x41, 0x08, 0x8a, 0x52, 0xa6,
0x31, 0x8a, 0x52, 0xeb, 0x5a, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x07, 0xc3,
0x18, 0x69, 0x4a, 0x6d, 0x6b, 0xef, 0x7b, 0xef, 0x7b, 0x4d, 0x6b, 0x49,
0x4a, 0xe3, 0x18, 0x8f, 0x00, 0x00, 0x04, 0x04, 0x21, 0xe7, 0x39, 0x08,
0x42, 0x65, 0x29, 0x41, 0x08, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff,
0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xa3, 0x00, 0x00
};

View File

@@ -104,28 +104,43 @@
#include "fxglide.h" #include "fxglide.h"
#include "fxcmd.h" #include "fxcmd.h"
#ifdef GLIDE_PLUG
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
static const void *
getPlugdata (FxU32* w, FxU32* h, FxI32* strideInBytes,
GrLfbWriteMode_t* format)
{
GR_DCL_GC;
if (gc->pluginInfo.plugProc != NULL)
return (*gc->pluginInfo.plugProc)(w,h,strideInBytes,format);
return NULL;
}
#else
static __inline const void *
getPlugdata (FxU32* w, FxU32* h, FxI32* strideInBytes,
GrLfbWriteMode_t* format)
{
return NULL;
}
#endif
void void
_grShamelessPlug(void) _grShamelessPlug(void)
{ {
GR_BEGIN_NOFIFOCHECK("_grShamelessPlug", 80); GR_BEGIN_NOFIFOCHECK("_grShamelessPlug", 80);
GDBG_INFO_MORE(gc->myLevel, "()\n"); GDBG_INFO_MORE(gc->myLevel, "()\n");
if (gc->pluginInfo.plugProc != NULL) { GrState state;
FxU32 FxU32 plugWidth, plugHeight;
plugWidth, plugHeight; FxI32 plugStride;
FxI32 GrLfbWriteMode_t plugFormat;
plugStride; const void* plugData =
GrLfbWriteMode_t getPlugdata(&plugWidth, &plugHeight, &plugStride, &plugFormat);
plugFormat;
const void* if (!plugData) return;
plugData = (*gc->pluginInfo.plugProc)(&plugWidth, &plugHeight,
&plugStride,
&plugFormat);
if (plugData != NULL) {
#ifdef GLIDE_PLUG
GrState state;
grGlideGetState(&state); grGlideGetState(&state);
grDisableAllEffects(); grDisableAllEffects();
@@ -163,259 +178,8 @@ _grShamelessPlug(void)
plugData); plugData);
grGlideSetState(&state); grGlideSetState(&state);
#endif /* GLIDE_PLUG */
}
}
GR_END(); GR_END();
} /* _grShamelessPlug */ } /* _grShamelessPlug */
#endif /* GLIDE_PLUG */
#if !(GLIDE_PLATFORM & GLIDE_OS_WIN32)
#if GLIDE_PLUG
#if GLIDE_PLUG_EXT
static FxU32 fxPlugWidth;
static FxU32 fxPlugHeight;
static FxU32 fxPlugStride;
#else
#include "banner.inc"
#endif
static GrLfbWriteMode_t fxPlugFormat = GR_LFBWRITEMODE_565;
static FxU16 *fxPlugData;
#endif /* GLIDE_PLUG */
void FX_CALL fxSplashShutdown (void)
{
#if GLIDE_PLUG
if (fxPlugData != NULL) {
free(fxPlugData);
fxPlugData = NULL;
}
#endif
}
FxBool FX_CALL fxSplashInit (FxU32 hWnd,
FxU32 screenWidth, FxU32 screenHeight,
FxU32 numColBuf, FxU32 numAuxBuf,
GrColorFormat_t colorFormat)
{
#if GLIDE_PLUG
if (fxPlugData == NULL) {
#if GLIDE_PLUG_EXT
/* [dBorca]
* we should try to extract TGA resource from 3dfxspl3.dll
*/
FILE *f;
if ((f = fopen("3dfxplug.tga", "rb")) != NULL) {
int bpp, skip;
unsigned int i, j, decoded;
unsigned char header[18], b1[4], b0;
/* read TGA header */
if (!fread(header, 18, 1, f)) {
fclose(f);
return FXFALSE;
}
/* fill in values */
fxPlugWidth = ((unsigned short *)header)[6];
fxPlugHeight = ((unsigned short *)header)[7];
fxPlugStride = fxPlugWidth * 2;
/* compute bits/pixel, then bytes/pixel; also check TGA type */
bpp = header[16];
if (((bpp != 16) && (bpp != 24) && (bpp != 32)) || ((header[2] & ~0x8) != 2)) {
fclose(f);
return FXFALSE;
}
bpp >>= 3;
/* skip colormap + junk */
skip = header[0];
if (header[1]) {
skip += *(unsigned short *)&header[5] * header[7] >> 3;
}
fseek(f, skip, SEEK_CUR);
/* allocate datablock */
if ((fxPlugData = malloc(fxPlugStride * fxPlugHeight)) == NULL) {
fclose(f);
return FXFALSE;
}
if (header[2] == 10) {
/* RLE */
j = 0;
while (j < (fxPlugWidth * fxPlugHeight)) {
/* packet header */
if (!fread(&b0, 1, 1, f)) {
fxSplashShutdown();
fclose(f);
return FXFALSE;
}
if (b0 & 0x80) {
/* replicate pixels */
b0 &= 0x7f;
if (!fread(b1, bpp, 1, f)) {
fxSplashShutdown();
fclose(f);
return FXFALSE;
}
switch (bpp) {
case 2:
decoded = *(unsigned short *)&b1[0];
decoded = ((decoded & 0x7fe0) << 1)
| ((decoded & 0x0200) >> 4)
| (decoded & 0x001f);
break;
case 3:
case 4:
decoded = (b1[0]>>3) + ((b1[1]>>2)<<5) + ((b1[2]>>3)<<11);
break;
}
for (i = 0; i <= b0; i++) {
fxPlugData[j++] = decoded;
}
} else {
/* read pixels */
for (i = 0; i <= b0; i++) {
if (!fread(b1, bpp, 1, f)) {
fxSplashShutdown();
fclose(f);
return FXFALSE;
}
switch (bpp) {
case 2:
decoded = *(unsigned short *)&b1[0];
decoded = ((decoded & 0x7fe0) << 1)
| ((decoded & 0x0200) >> 4)
| (decoded & 0x001f);
break;
case 3:
case 4:
decoded = (b1[0]>>3) + ((b1[1]>>2)<<5) + ((b1[2]>>3)<<11);
break;
}
fxPlugData[j++] = decoded;
}
}
}
/* flip (RLE can cross scanlines, thus we can't use tricks) */
if (!(header[17] & 0x20)) {
for (i = 0; i < fxPlugHeight / 2; i++) {
unsigned short *src = &fxPlugData[fxPlugWidth * i];
unsigned short *dst = &fxPlugData[fxPlugWidth * (fxPlugHeight - i - 1)];
for (j = 0; j < fxPlugWidth; j++) {
decoded = dst[j];
dst[j] = src[j];
src[j] = decoded;
}
}
}
} else if (header[2] == 2) {
/* normal (flip on-the-fly) */
for (i = 0; i < fxPlugHeight; i++) {
int l = (header[17] & 0x20) ? i : (fxPlugHeight-i-1);
unsigned short *line = &fxPlugData[fxPlugWidth * l];
for (j = 0; j < fxPlugWidth; j++) {
if (!fread(b1, bpp, 1, f)) {
fxSplashShutdown();
fclose(f);
return FXFALSE;
}
switch (bpp) {
case 2:
decoded = *(unsigned short *)&b1[0];
decoded = ((decoded & 0x7fe0) << 1)
| ((decoded & 0x0200) >> 4)
| (decoded & 0x001f);
break;
case 3:
case 4:
decoded = (b1[0]>>3) + ((b1[1]>>2)<<5) + ((b1[2]>>3)<<11);
break;
}
line[j] = decoded;
}
}
}
fclose(f);
}
#else /* GLIDE_PLUG_EXT */
/* [dBorca]
* embedded image is always 16bit RLE and does not need to be flipped
*/
int k = 0;
unsigned int i, j, decoded;
unsigned char b0;
/* allocate datablock */
if ((fxPlugData = malloc(fxPlugStride * fxPlugHeight)) == NULL) {
return FXFALSE;
}
/* RLE */
j = 0;
while (j < (fxPlugWidth * fxPlugHeight)) {
/* packet header */
b0 = tga_16rle[k++];
if (b0 & 0x80) {
/* replicate pixels */
b0 &= 0x7f;
decoded = *(unsigned short *)&tga_16rle[k];
k += 2;
for (i = 0; i <= b0; i++) {
fxPlugData[j++] = decoded;
}
} else {
/* read pixels */
for (i = 0; i <= b0; i++) {
decoded = *(unsigned short *)&tga_16rle[k];
k += 2;
fxPlugData[j++] = decoded;
}
}
}
#endif /* GLIDE_PLUG_EXT */
}
return FXTRUE;
#else /* GLIDE_PLUG */
return FXFALSE;
#endif /* GLIDE_PLUG */
}
const void * FX_CALL fxSplashPlug (FxU32* w, FxU32* h,
FxI32* strideInBytes,
GrLfbWriteMode_t* format)
{
#if GLIDE_PLUG
*w = fxPlugWidth;
*h = fxPlugHeight;
*strideInBytes = fxPlugStride;
*format = fxPlugFormat;
return fxPlugData;
#else
return NULL;
#endif
}
void FX_CALL fxSplash (float x, float y, float w, float h, FxU32 frameNumber)
{
}
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */

View File

@@ -2676,8 +2676,10 @@ GR_ENTRY(grBufferSwap, void, (FxU32 swapInterval))
} }
#endif #endif
#ifdef GLIDE_PLUG
/* optionally display the 3Dfx powerfield logo overlay */ /* optionally display the 3Dfx powerfield logo overlay */
if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug(); if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug();
#endif
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32) #if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
if (_GlideRoot.environment.aaToggleKey) { if (_GlideRoot.environment.aaToggleKey) {
@@ -2796,7 +2798,6 @@ GR_ENTRY(grBufferSwap, void, (FxU32 swapInterval))
GR_ASSERT(j != -1); GR_ASSERT(j != -1);
gc->swapsPending++; gc->swapsPending++;
} }
#endif #endif
@@ -2954,8 +2955,10 @@ GR_ENTRY(grDRIBufferSwap, void, (FxU32 swapInterval))
_grChipMask( SST_CHIP_MASK_ALL_CHIPS ); _grChipMask( SST_CHIP_MASK_ALL_CHIPS );
} }
#endif #endif
#ifdef GLIDE_PLUG
/* optionally display the 3Dfx powerfield logo overlay */ /* optionally display the 3Dfx powerfield logo overlay */
if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug(); if (_GlideRoot.environment.shamelessPlug) _grShamelessPlug();
#endif
/* check for environmental override */ /* check for environmental override */
if (_GlideRoot.environment.swapInterval >= 0) { if (_GlideRoot.environment.swapInterval >= 0) {

View File

@@ -1426,7 +1426,11 @@ _GlideInitEnvironment(void)
#endif #endif
GDBG_INFO(80," noSplash: %d\n",_GlideRoot.environment.noSplash); GDBG_INFO(80," noSplash: %d\n",_GlideRoot.environment.noSplash);
#ifdef GLIDE_PLUG
_GlideRoot.environment.shamelessPlug = GETENV("FX_GLIDE_SHAMELESS_PLUG") != NULL; _GlideRoot.environment.shamelessPlug = GETENV("FX_GLIDE_SHAMELESS_PLUG") != NULL;
#else
_GlideRoot.environment.shamelessPlug = 0;
#endif
GDBG_INFO(80," shamelessPlug: %d\n",_GlideRoot.environment.shamelessPlug); GDBG_INFO(80," shamelessPlug: %d\n",_GlideRoot.environment.shamelessPlug);
_GlideRoot.environment.ignoreReopen = GETENV("FX_GLIDE_IGNORE_REOPEN") != NULL; _GlideRoot.environment.ignoreReopen = GETENV("FX_GLIDE_IGNORE_REOPEN") != NULL;
GDBG_INFO(80," ignoreReopen: %d\n",_GlideRoot.environment.ignoreReopen); GDBG_INFO(80," ignoreReopen: %d\n",_GlideRoot.environment.ignoreReopen);

View File

@@ -159,6 +159,19 @@
* Updated grSplash code to set all of the necessary state itself rather * Updated grSplash code to set all of the necessary state itself rather
* than expecting the caller to do so. * than expecting the caller to do so.
*/ */
#ifndef GLIDE_SPLASH
#include <3dfx.h>
#define FX_DLL_DEFINITION
#include <fxdll.h>
#include <glide.h>
#include "fxglide.h"
GR_DIENTRY(grSplash,void,(float x, float y,
float w, float h,
FxU32 frameNumber)) {
/* nothing */
}
#elif defined(_WIN32)
#include <math.h> #include <math.h>
#include <3dfx.h> #include <3dfx.h>
@@ -196,7 +209,6 @@ GR_DIENTRY(grSplash,void,(float x, float y,
GDBG_INFO_MORE(gc->myLevel,"(%f,%f,%f,%f,%d)\n", GDBG_INFO_MORE(gc->myLevel,"(%f,%f,%f,%f,%d)\n",
x, y, w, h, frameNumber); x, y, w, h, frameNumber);
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
#if (GLIDE_PLATFORM & GLIDE_HW_SST2) #if (GLIDE_PLATFORM & GLIDE_HW_SST2)
#else #else
{ {
@@ -212,8 +224,20 @@ GR_DIENTRY(grSplash,void,(float x, float y,
grGlideSetState((const void*)&glideState); grGlideSetState((const void*)&glideState);
} }
#endif #endif
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */
GR_END(); GR_END();
#undef FN_NAME #undef FN_NAME
} }
#else /* others */
#include <3dfx.h>
#define FX_DLL_DEFINITION
#include <fxdll.h>
#include <glide.h>
#include "fxglide.h"
GR_DIENTRY(grSplash,void,(float x, float y,
float w, float h,
FxU32 frameNumber)) {
/* nothing */
}
#endif

View File

@@ -1083,97 +1083,68 @@ clearBuffers( GrGC *gc )
static void static void
doSplash( void ) doSplash( void )
{ {
#if defined(GLIDE_SPLASH) || ((GLIDE_PLATFORM & GLIDE_OS_WIN32) && defined(GLIDE_PLUG))
GR_DCL_GC; GR_DCL_GC;
#endif
FxBool didLoad;
/* The splash screen wants a swapped Y origin, which doesn't /* The splash screen wants a swapped Y origin, which doesn't
* work in all SLI configs. */ * work in all SLI configs. */
if(_GlideRoot.environment.sliBandHeightForce) if(_GlideRoot.environment.sliBandHeightForce)
return; return;
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32) #if (GLIDE_PLATFORM & GLIDE_OS_WIN32) && (defined(GLIDE_SPLASH)||defined(GLIDE_PLUG))
if (gc->pluginInfo.moduleHandle == NULL) {
gc->pluginInfo.moduleHandle = LoadLibrary("3dfxspl3.dll"); FxBool
didLoad;
didLoad = (gc->pluginInfo.moduleHandle != NULL);
if (didLoad) {
gc->pluginInfo.initProc = (GrSplashInitProc) GetProcAddress(gc->pluginInfo.moduleHandle,
"_fxSplashInit@24");
gc->pluginInfo.shutdownProc = (GrSplashShutdownProc)GetProcAddress(gc->pluginInfo.moduleHandle,
"_fxSplashShutdown@0");
gc->pluginInfo.splashProc = (GrSplashProc) GetProcAddress(gc->pluginInfo.moduleHandle,
"_fxSplash@20");
gc->pluginInfo.plugProc = (GrSplashPlugProc) GetProcAddress(gc->pluginInfo.moduleHandle,
"_fxSplashPlug@16");
didLoad = (!_GlideRoot.environment.noSplash &&
(gc->pluginInfo.initProc != NULL) &&
(gc->pluginInfo.splashProc != NULL) &&
(gc->pluginInfo.plugProc != NULL) &&
(gc->pluginInfo.shutdownProc != NULL));
if (didLoad) {
GrState glideState;
/* Protect ourselves from the splash screen */
grGlideGetState(&glideState);
didLoad = (*gc->pluginInfo.initProc)(gc->grHwnd,
gc->state.screen_width, gc->state.screen_height,
gc->grColBuf, gc->grAuxBuf,
gc->state.color_format);
if (didLoad) {
(*gc->pluginInfo.splashProc)(0.0f, 0.0f,
(float)gc->state.screen_width,
(float)gc->state.screen_height,
0);
(*gc->pluginInfo.shutdownProc)();
}
grGlideSetState((const void*)&glideState);
}
}
/* Clear all the info if we could not load for some reason */
if (!didLoad) {
if (gc->pluginInfo.moduleHandle)
FreeLibrary(gc->pluginInfo.moduleHandle);
memset(&gc->pluginInfo, 0, sizeof(gc->pluginInfo));
}
#else
gc->pluginInfo.initProc = fxSplashInit;
gc->pluginInfo.shutdownProc = fxSplashShutdown;
gc->pluginInfo.splashProc = fxSplash;
gc->pluginInfo.plugProc = fxSplashPlug;
didLoad = (!_GlideRoot.environment.noSplash &&
(gc->pluginInfo.initProc != NULL) &&
(gc->pluginInfo.splashProc != NULL) &&
(gc->pluginInfo.plugProc != NULL) &&
(gc->pluginInfo.shutdownProc != NULL));
if (didLoad) {
GrState glideState;
/* Protect ourselves from the splash screen */
grGlideGetState(&glideState);
didLoad = (*gc->pluginInfo.initProc)(gc->grHwnd,
gc->state.screen_width, gc->state.screen_height,
gc->grColBuf, gc->grAuxBuf,
gc->state.color_format);
if (didLoad) {
(*gc->pluginInfo.splashProc)(0.0f, 0.0f,
(float)gc->state.screen_width,
(float)gc->state.screen_height,
0);
(*gc->pluginInfo.shutdownProc)();
}
grGlideSetState((const void*)&glideState);
}
/* Clear all the info if we could not load for some reason */ if (gc->pluginInfo.moduleHandle == NULL) gc->pluginInfo.moduleHandle = LoadLibrary("3dfxspl3.dll");
if (!didLoad) memset(&gc->pluginInfo, 0, sizeof(gc->pluginInfo)); didLoad = (gc->pluginInfo.moduleHandle != NULL);
if (didLoad) {
gc->pluginInfo.initProc = (GrSplashInitProc)GetProcAddress(gc->pluginInfo.moduleHandle,
"_fxSplashInit@24");
gc->pluginInfo.shutdownProc = (GrSplashShutdownProc)GetProcAddress(gc->pluginInfo.moduleHandle,
"_fxSplashShutdown@0");
gc->pluginInfo.splashProc = (GrSplashProc)GetProcAddress(gc->pluginInfo.moduleHandle,
"_fxSplash@20");
gc->pluginInfo.plugProc = (GrSplashPlugProc)GetProcAddress(gc->pluginInfo.moduleHandle,
"_fxSplashPlug@16");
didLoad = ((gc->pluginInfo.initProc != NULL) &&
(gc->pluginInfo.splashProc != NULL) &&
(gc->pluginInfo.plugProc != NULL) &&
(gc->pluginInfo.shutdownProc != NULL));
if (didLoad) {
GrState glideState;
/* Protect ourselves from the splash screen */
grGlideGetState(&glideState);
{
didLoad = (*gc->pluginInfo.initProc)(gc->grHwnd,
gc->state.screen_width, gc->state.screen_height,
gc->grColBuf, gc->grAuxBuf,
gc->state.color_format);
if (!didLoad) (*gc->pluginInfo.shutdownProc)();
}
grGlideSetState((const void*)&glideState);
}
if (!didLoad) FreeLibrary(gc->pluginInfo.moduleHandle);
}
/* Clear all the info if we could not load for some reason */
if (!didLoad) memset(&gc->pluginInfo, 0, sizeof(gc->pluginInfo));
}
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */ #endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */
#ifdef GLIDE_SPLASH
if (_GlideRoot.environment.noSplash == 0) {
grSplash(0.0f, 0.0f,
(float)gc->state.screen_width,
(float)gc->state.screen_height,
0);
}
_GlideRoot.environment.noSplash = 1; _GlideRoot.environment.noSplash = 1;
#endif
} /* doSplash */ } /* doSplash */
@@ -3141,6 +3112,8 @@ GR_ENTRY(grSstWinClose, FxBool, (GrContext_t context))
#if (GLIDE_PLATFORM & GLIDE_OS_WIN32) #if (GLIDE_PLATFORM & GLIDE_OS_WIN32)
/* free splashscreen DLL */ /* free splashscreen DLL */
if (gc->pluginInfo.moduleHandle) { if (gc->pluginInfo.moduleHandle) {
if (gc->pluginInfo.shutdownProc)
(*gc->pluginInfo.shutdownProc)();
FreeLibrary(gc->pluginInfo.moduleHandle); FreeLibrary(gc->pluginInfo.moduleHandle);
memset(&gc->pluginInfo, 0, sizeof(gc->pluginInfo)); memset(&gc->pluginInfo, 0, sizeof(gc->pluginInfo));
} }

View File

@@ -58,13 +58,11 @@
#ifdef GLIDE_PLUG #ifdef GLIDE_PLUG
#include "banner.inc" #include "banner.inc"
#endif
/* display the translucent 3Dfx powerfield logo */ /* display the translucent 3Dfx powerfield logo */
void void
_grShamelessPlug( void ) _grShamelessPlug( void )
{ {
#ifdef GLIDE_PLUG
GrState state; GrState state;
GrLfbInfo_t info; GrLfbInfo_t info;
@@ -193,5 +191,5 @@ _grShamelessPlug( void )
GR_END(); GR_END();
#endif
} /* _grShamelessPlug */ } /* _grShamelessPlug */
#endif

View File

@@ -584,9 +584,11 @@ GR_ENTRY(grBufferSwap, void, ( FxU32 swapInterval ))
pending = _grBufferNumPending(); pending = _grBufferNumPending();
} }
#ifdef GLIDE_PLUG
/* optionally display the 3Dfx powerfield logo overlay */ /* optionally display the 3Dfx powerfield logo overlay */
if (_GlideRoot.environment.shamelessPlug) if (_GlideRoot.environment.shamelessPlug)
_grShamelessPlug(); _grShamelessPlug();
#endif
initSwapBuffers( swapInterval ); initSwapBuffers( swapInterval );
@@ -603,9 +605,11 @@ GR_ENTRY(grBufferSwap, void, ( FxU32 swapInterval ))
P6_NUDGE_OF_LOVE; P6_NUDGE_OF_LOVE;
#elif ( GLIDE_PLATFORM & GLIDE_HW_SST1 ) #elif ( GLIDE_PLATFORM & GLIDE_HW_SST1 )
#ifdef GLIDE_PLUG
/* optionally display the 3Dfx powerfield logo overlay */ /* optionally display the 3Dfx powerfield logo overlay */
if (_GlideRoot.environment.shamelessPlug) if (_GlideRoot.environment.shamelessPlug)
_grShamelessPlug(); _grShamelessPlug();
#endif
/* check for environmental override */ /* check for environmental override */
if (_GlideRoot.environment.swapInterval >= 0) { if (_GlideRoot.environment.swapInterval >= 0) {

View File

@@ -436,8 +436,16 @@ _GlideInitEnvironment( void )
_GlideRoot.environment.swFifoLWM = -1; _GlideRoot.environment.swFifoLWM = -1;
_GlideRoot.environment.triBoundsCheck = (getenv("FX_GLIDE_BOUNDS_CHECK") != NULL); _GlideRoot.environment.triBoundsCheck = (getenv("FX_GLIDE_BOUNDS_CHECK") != NULL);
#ifdef GLIDE_SPLASH
_GlideRoot.environment.noSplash = (getenv("FX_GLIDE_NO_SPLASH") != NULL); _GlideRoot.environment.noSplash = (getenv("FX_GLIDE_NO_SPLASH") != NULL);
#else
_GlideRoot.environment.noSplash = 1;
#endif
#ifdef GLIDE_PLUG
_GlideRoot.environment.shamelessPlug = (getenv("FX_GLIDE_SHAMELESS_PLUG") != NULL); _GlideRoot.environment.shamelessPlug = (getenv("FX_GLIDE_SHAMELESS_PLUG") != NULL);
#else
_GlideRoot.environment.shamelessPlug = 0;
#endif
_GlideRoot.environment.ignoreReopen = (getenv("FX_GLIDE_IGNORE_REOPEN") != NULL); _GlideRoot.environment.ignoreReopen = (getenv("FX_GLIDE_IGNORE_REOPEN") != NULL);
_GlideRoot.environment.disableDitherSub = (getenv("FX_GLIDE_NO_DITHER_SUB") != NULL); _GlideRoot.environment.disableDitherSub = (getenv("FX_GLIDE_NO_DITHER_SUB") != NULL);

View File

@@ -132,6 +132,13 @@
#include "fxglide.h" #include "fxglide.h"
#include "fxinline.h" #include "fxinline.h"
#ifndef GLIDE_SPLASH
GR_DIENTRY(grSplash,void,(float x,float y,float w,float h,FxU32 _frame)) {
/* nothing */
}
#else /* GLIDE_SPLASH */
/*----------------------------- /*-----------------------------
Constants Constants
-----------------------------*/ -----------------------------*/
@@ -1074,3 +1081,4 @@ GR_DIENTRY(grSplash,void,(float x,float y,float w,float h,FxU32 _frame))
grVertexLayout(GR_PARAM_Q1, gc->state.vData.q1Info.offset , grVertexLayout(GR_PARAM_Q1, gc->state.vData.q1Info.offset ,
gc->state.vData.q1Info.mode); gc->state.vData.q1Info.mode);
} }
#endif /* GLIDE_SPLASH */

View File

@@ -1002,21 +1002,25 @@ GR_ENTRY(grSstWinOpen, GrContext_t, (FxU32 hWnd,
grSstOrigin( GR_ORIGIN_LOWER_LEFT ); grSstOrigin( GR_ORIGIN_LOWER_LEFT );
#ifdef GLIDE_SPLASH
if (!_GlideRoot.environment.noSplash) { if (!_GlideRoot.environment.noSplash) {
HMODULE newSplash; HMODULE newSplash = LoadLibrary("3dfxspl3.dll");
if (newSplash = LoadLibrary("3dfxspl3.dll")) { if (newSplash) {
FARPROC fxSplash; FARPROC fxSplash = GetProcAddress(newSplash, "_fxSplash@16");
if (fxSplash = GetProcAddress(newSplash, "_fxSplash@16")) { if (fxSplash) {
fxSplash(hWnd, gc->state.screen_width, fxSplash(hWnd, gc->state.screen_width,
gc->state.screen_height, nAuxBuffers); gc->state.screen_height, nAuxBuffers);
_GlideRoot.environment.noSplash = 1; _GlideRoot.environment.noSplash = 1;
} }
FreeLibrary(newSplash);
} }
} }
#endif
#endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */ #endif /* (GLIDE_PLATFORM & GLIDE_OS_WIN32) */
#ifdef GLIDE_SPLASH
/* If it's still 0, then do the old one */ /* If it's still 0, then do the old one */
if (!_GlideRoot.environment.noSplash) { if (!_GlideRoot.environment.noSplash) {
grSplash(0.0f, 0.0f, grSplash(0.0f, 0.0f,
@@ -1025,6 +1029,8 @@ GR_ENTRY(grSstWinOpen, GrContext_t, (FxU32 hWnd,
0); 0);
_GlideRoot.environment.noSplash = 1; _GlideRoot.environment.noSplash = 1;
} }
#endif
grGlideSetState(&state); grGlideSetState(&state);
} }