DevFile.c 。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/******************************************************************************
* *
* M O D U L E D E F I N E *
* *
******************************************************************************/
#define DEVFFILE_C
/******************************************************************************
* *
* C O M P I L E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* U S E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
#include "Common.h"
#include "XCore.h"
#include "XNutOS.h"
#include "XLib.h"
#include "File.h"
#include "DevFile.h"
#if defined(NUTOS)
/******************************************************************************
* *
* L O C A L D E F I N E S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* L O C A L T Y P E D E F S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* L O C A L F U N C T I O N P R O T O T Y P E S *
* *
******************************************************************************/
static int FileRead(NUTFILE * fp, void *buffer, int size);
static int FileWrite(NUTFILE * fp, CONST void *buffer, int len);
static NUTFILE *FileOpen(NUTDEVICE * dev, CONST char *name, int mode, int acc);
static int FileClose(NUTFILE * fp);
static long FileSize(NUTFILE * fp);
static int FileIOCtl(NUTDEVICE * dev, int req, void *conf);
/******************************************************************************
* *
* L O C A L I N I T I A L I Z E D D A T A D E F I N I T I O N S *
* *
******************************************************************************/
/*!
* \brief CARD device information structure.
*
* All this CARD stuff is so simple, that it even mimics
* its own device driver.
*/
NUTDEVICE devCARD = {
0, /*!< Pointer to next device. */
{'C', 'A', 'R', 'D', 0, 0, 0, 0, 0}, /*!< Unique device name. */
IFTYP_FS, /*!< Type of device. Obsolete. */
CARD_DEVICE, /*!< Base address. */
0, /*!< First interrupt number. Unused. */
0, /*!< Interface control block. Unused. */
0, /*!< Driver control block. Unused. */
0, /*!< Driver initialization routine. Not supported. */
FileIOCtl, /*!< Driver specific control function. */
FileRead, /*!< Read data from a file. */
FileWrite, /*!< Write data to a file. */
FileOpen, /*!< Open a file. */
FileClose, /*!< Close a file. */
FileSize /*!< Return file size. */
};
/******************************************************************************
* *
* L O C A L U N I T I A L I Z E D D A T A D E F I N I T I O N S *
* *
******************************************************************************/
static int FileSeek(NUTFILE * fp, long * pos, int whence)
{
return Fseek((_FileHandle *) fp->nf_fcb, *pos, whence);
}
/*!
* \brief Read from a file.
*/
static int FileRead(NUTFILE * fp, void * buffer, int size)
{
return Fread(buffer, sizeof(CHAR), size, (_FileHandle *) fp->nf_fcb);
}
/*!
* \brief Write data to a file.
*/
static int FileWrite(NUTFILE * fp, CONST void * buffer, int len)
{
return Fwrite(buffer, sizeof(CHAR), len, (_FileHandle *) fp->nf_fcb);
}
/*!
* \brief Open a file.
*/
static NUTFILE *FileOpen(NUTDEVICE * dev, CONST char * name, int mode, int acc)
{
NUTFILE * fp = NutHeapAlloc(sizeof(NUTFILE));
char fmode[2] = "r";
if (fp == 0) {
return NUTFILE_EOF;
}
if ((mode & 0x0003) != _O_RDONLY) {
*fmode = 'w';
}
if (mode & _O_APPEND) {
*fmode = 'a';
}
if (fp->nf_fcb = (void *) Fopen((_eFileDevice) dev->dev_base, name, fmode)) {
fp->nf_next = 0;
fp->nf_dev = dev;
} else {
NutHeapFree(fp);
fp = NUTFILE_EOF;
}
return fp;
}
/*!
* \brief Close a file.
*/
static int FileClose(NUTFILE * fp)
{
if (fp && fp != NUTFILE_EOF) {
if (fp->nf_fcb)
Fclose((_FileHandle *) fp->nf_fcb);
NutHeapFree(fp);
}
return 0;
}
/*!
* \brief Query file size.
*/
static long FileSize(NUTFILE * fp)
{
return FileLength(FileNo((_FileHandle *) fp->nf_fcb));
}
/*!
* \brief Device specific functions.
*/
static int FileIOCtl(NUTDEVICE * dev, int req, void * conf)
{
int rc = -1;
switch (req) {
case FS_FILE_SEEK:
FileSeek((NUTFILE *) ((IOCTL_ARG3 *) conf)->arg1, /* */
(long *) ((IOCTL_ARG3 *) conf)->arg2, /* */
(int) ((IOCTL_ARG3 *) conf)->arg3);
break;
}
return rc;
}
#endif
DevFile.h 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#ifndef DEVFILE_H
/******************************************************************************
* *
* M O D U L E D E F I N E *
* *
******************************************************************************/
#define DEVFILE_H
/******************************************************************************
* *
* C O M P I L E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* U S E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
#include "XNutOS.h"
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
/******************************************************************************
* *
* G L O B A L D E F I N E S *
* *
******************************************************************************/
#ifndef DEV_CARD
#define DEV_CARD devCARD
#endif
#ifndef DEV_CARD_NAME
#define DEV_CARD_NAME "CARD"
#endif
/******************************************************************************
* *
* S T R U C T U R E D E F I N I T I O N S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* G L O B A L V A R I A B L E S - N O I N I T I A L I Z E R S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* G L O B A L V A R I A B L E S - I N I T I A L I Z E R S *
* *
******************************************************************************/
/*
* Available drivers.
*/
extern NUTDEVICE devCARD;
/******************************************************************************
* *
* F U N C T I O N P R O T O T Y P E S *
* *
******************************************************************************/
#ifdef __cplusplus
} /* End of extern "C" { */
#endif /* __cplusplus */
#endif
DevUrom.c 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/******************************************************************************
* *
* M O D U L E D E F I N E *
* *
******************************************************************************/
#define DEVUROM_C
/******************************************************************************
* *
* C O M P I L E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
#include <string.h>
/******************************************************************************
* *
* U S E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
#include "Common.h"
#include "XCore.h"
#include "XNutOS.h"
#include "UromFile.h"
#include "DevUrom.h"
#if defined(NUTOS)
/******************************************************************************
* *
* L O C A L D E F I N E S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* L O C A L T Y P E D E F S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* L O C A L F U N C T I O N P R O T O T Y P E S *
* *
******************************************************************************/
static int UromRead(NUTFILE * fp, void *buffer, int size);
static int UromWrite(NUTFILE * fp, CONST void *buffer, int len);
static NUTFILE *UromOpen(NUTDEVICE * dev, CONST char *name, int mode, int acc);
static int UromClose(NUTFILE * fp);
static long UromSize(NUTFILE * fp);
static int UromIOCtl(NUTDEVICE * dev, int req, void *conf);
/******************************************************************************
* *
* L O C A L I N I T I A L I Z E D D A T A D E F I N I T I O N S *
* *
******************************************************************************/
/*!
* \brief List of all microROM files.
*/
static ROMENTRY romEntryList[] = {
{"index.asp", urom_index_asp, sizeof(urom_index_asp)},
{"title.asp", urom_title_asp, sizeof(urom_title_asp)},
{"setup.htm", urom_setup_htm, sizeof(urom_setup_htm)},
{"menu.htm", urom_menu_htm, sizeof(urom_menu_htm)},
{"tscicon.ico", urom_favicon_ico, sizeof(urom_favicon_ico)},
{"tsclogo.gif", urom_tsclogo_gif, sizeof(urom_tsclogo_gif)},
{"oemlogo.gif", urom_oemlogo_gif, sizeof(urom_oemlogo_gif)},
{"del.png", urom_del_png, sizeof(urom_del_png)},
{"run.png", urom_run_png, sizeof(urom_run_png)},
{(char *)0, 0, 0},
};
/*!
* \brief UROM device information structure.
*
* All this UROM stuff is so simple, that it even mimics
* its own device driver.
*/
NUTDEVICE devUROM = {
0, /*!< Pointer to next device. */
{'U', 'R', 'O', 'M', 0, 0, 0, 0, 0}, /*!< Unique device name. */
IFTYP_ROM, /*!< Type of device. Obsolete. */
0, /*!< Base address. Unused. */
0, /*!< First interrupt number. Unused. */
0, /*!< Interface control block. Unused. */
0, /*!< Driver control block. Unused. */
0, /*!< Driver initialization routine. Not supported. */
UromIOCtl, /*!< Driver specific control function. Not supported. */
UromRead, /*!< Read data from a file. */
UromWrite, /*!< Write data to a file. */
UromOpen, /*!< Open a file. */
UromClose, /*!< Close a file. */
UromSize /*!< Return file size. */
};
/******************************************************************************
* *
* L O C A L U N I T I A L I Z E D D A T A D E F I N I T I O N S *
* *
******************************************************************************/
static int UromSeek(NUTFILE * fp, long *pos, int whence)
{
ROMFILE *romf = fp->nf_fcb;
ROMENTRY *rome = romf->romf_entry;
int rc = 0;
long npos = *pos;
switch (whence) {
case SEEK_CUR:
npos += romf->romf_pos;
break;
case SEEK_END:
npos += rome->rome_size;
break;
}
if (npos < 0 || npos > rome->rome_size) {
rc = -1;
} else {
romf->romf_pos = npos;
*pos = npos;
}
return rc;
}
/*!
* \brief Read from device.
*/
static int UromRead(NUTFILE * fp, void *buffer, int size)
{
ROMFILE *romf = fp->nf_fcb;
ROMENTRY *rome = romf->romf_entry;
if ((u_int) size > rome->rome_size - romf->romf_pos)
size = rome->rome_size - romf->romf_pos;
if (size) {
memcpy(buffer, (void *)(rome->rome_data + romf->romf_pos), size);
romf->romf_pos += size;
}
return size;
}
/*!
* \brief Write data to a file.
*
* \return Always returns -1.
*/
static int UromWrite(NUTFILE * fp, CONST void *buffer, int len)
{
return -1;
}
/*!
* \brief Open a file.
*/
static NUTFILE *UromOpen(NUTDEVICE * dev, CONST char *name, int mode,
int acc)
{
NUTFILE *fp = NutHeapAlloc(sizeof(NUTFILE));
ROMENTRY *rome;
ROMFILE *romf = 0;
if (fp == 0) {
return NUTFILE_EOF;
}
for (rome = romEntryList; rome->rome_name; rome++) {
if (strcmp(name, rome->rome_name) == 0)
break;
}
if (rome->rome_name) {
if ((romf = NutHeapAllocClear(sizeof(ROMFILE))) != 0)
romf->romf_entry = rome;
}
if (romf) {
fp->nf_next = 0;
fp->nf_dev = dev;
fp->nf_fcb = romf;
} else {
NutHeapFree(fp);
fp = NUTFILE_EOF;
}
return fp;
}
/*!
* \brief Close a file.
*/
static int UromClose(NUTFILE * fp)
{
if (fp && fp != NUTFILE_EOF) {
if (fp->nf_fcb)
NutHeapFree(fp->nf_fcb);
NutHeapFree(fp);
}
return 0;
}
/*!
* \brief Query file size.
*/
static long UromSize(NUTFILE * fp)
{
ROMFILE *romf = fp->nf_fcb;
ROMENTRY *rome = romf->romf_entry;
return (long) rome->rome_size;
}
/*!
* \brief Device specific functions.
*/
static int UromIOCtl(NUTDEVICE * dev, int req, void *conf)
{
int rc = -1;
switch (req) {
case FS_FILE_SEEK:
UromSeek((NUTFILE *) ((IOCTL_ARG3 *) conf)->arg1, /* */
(long *) ((IOCTL_ARG3 *) conf)->arg2, /* */
(int) ((IOCTL_ARG3 *) conf)->arg3);
break;
}
return rc;
}
#endif
DevUrom.h 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#ifndef DEVUROM_H
/******************************************************************************
* *
* M O D U L E D E F I N E *
* *
******************************************************************************/
#define DEVUROM_H
/******************************************************************************
* *
* C O M P I L E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* U S E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
#include "XNutOS.h"
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
/******************************************************************************
* *
* G L O B A L D E F I N E S *
* *
******************************************************************************/
#ifndef DEV_UROM
#define DEV_UROM devUROM
#endif
#ifndef DEV_UROM_NAME
#define DEV_UROM_NAME "UROM"
#endif
/******************************************************************************
* *
* S T R U C T U R E D E F I N I T I O N S *
* *
******************************************************************************/
/*!
* \brief Mikro-ROM directory entry type.
*/
typedef struct {
const char *rome_name;/*!< Filename. */
const char *rome_data; /*!< File data. */
u_int rome_size; /*!< File size. */
} ROMENTRY;
/*!
* \brief Mikro-ROM file information type.
*/
typedef struct _ROMFILE ROMFILE;
/*!
* \brief Mikro-ROM file information structure.
*/
struct _ROMFILE {
ROMENTRY *romf_entry; /*!< Points to ROMENTRY */
u_int romf_pos; /*!< Current read position. */
};
/******************************************************************************
* *
* G L O B A L V A R I A B L E S - N O I N I T I A L I Z E R S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* G L O B A L V A R I A B L E S - I N I T I A L I Z E R S *
* *
******************************************************************************/
/*
* Available drivers.
*/
extern NUTDEVICE devUROM;
/******************************************************************************
* *
* F U N C T I O N P R O T O T Y P E S *
* *
******************************************************************************/
#ifdef __cplusplus
} /* End of extern "C" { */
#endif /* __cplusplus */
#endif
File.c 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
/******************************************************************************
* *
* M O D U L E D E F I N E *
* *
******************************************************************************/
#define FILE_C
/******************************************************************************
* *
* C O M P I L E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
#include <ctype.h>
#include <string.h>
/******************************************************************************
* *
* U S E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
#include "Common.h"
#include "XCore.h"
#include "XADC.h"
#include "XProFile.h"
#include "File.h"
/******************************************************************************
* *
* L O C A L D E F I N E S *
* *
******************************************************************************/
#define HANDLE_MAX 6
/******************************************************************************
* *
* L O C A L T Y P E D E F S *
* *
******************************************************************************/
#if defined(AT91SAM9260)
#define RAM_PHYSICAL (8 * 1024 * 1024) // 8MB
#elif defined(N3290)
#define RAM_PHYSICAL (2 * 1024 * 1024) // 2MB
#elif defined(SH7040)
#define RAM_PHYSICAL (2 * 1024 * 1024) // 2MB
#endif
#if defined(XPH500B) ||defined(DELUXE_2045) ||defined(XPH400B)
#define RAM_CAPACITY (128 * 1024) // 128KB
#else
#define RAM_CAPACITY (256 * 1024) // 256KB
#endif
#define RAM_FILE_QUANTITY 256
#define FLASH_FILE_QUANTITY 256
#define CARD_FILE_QUANTITY 256
/******************************************************************************
* *
* L O C A L F U N C T I O N P R O T O T Y P E S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* L O C A L I N I T I A L I Z E D D A T A D E F I N I T I O N S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* L O C A L U N I T I A L I Z E D D A T A D E F I N I T I O N S *
* *
******************************************************************************/
STATIC _FileHandle FileHandle[HANDLE_MAX];
#if defined(TSCFS)
STATIC _TscFileSystem TscFsRAM;
STATIC _TscFileSystem TscFsFlash;
#endif
#if defined(DEFAULT_MCARD_MODEL) && defined(TSCFS)
STATIC _TscFileSystem TscFsDefault;
#elif defined(FLASH_MCARD_MODEL) && defined(TSCFS)
STATIC _TscFileSystem TscFsCard;
#elif defined(SDCARD_MODEL) && defined(EFSL)
STATIC EmbeddedFileSystem efsSD;
#endif
/******************************************************************************
*
* Function:
* CompareFileName
*
* Description:
*
*
* Return:
* None.
*
******************************************************************************/
STATIC BOOL CompareFileName(CHAR *dst, CHAR *src)
{
if (!isprint(*dst))
return FALSE;
if (*src == '*')
{
if ((src = strchr(src, '.')) == 0)
return TRUE;
if (*(src + 1) == '*')
return TRUE;
if ((dst = strchr(dst, '.')) == 0)
return FALSE;
}
while (1)
{
if (*dst == '.' && *src == '.')
break;
if (*dst++ != *src++)
return FALSE;
if (*dst == 0 && *src == 0)
return TRUE;
}
if (*(src + 1) == '*')
return TRUE;
if (strcmp(dst, src) == 0)
return TRUE;
return FALSE;
}
#if defined(TSCFS)
STATIC INT TscFs_FindHandle(_TscFileSystem *TscFs, CHAR *filename)
{
INT i;
for (i = 0; i < HANDLE_MAX; i++)
{
if (FileHandle[i].TscFile.TscFs == TscFs)
{
if (filename == _NULL)
return i;
if (strcmp((CHAR *)FileHandle[i].TscFile.FileTable->FileName, filename) == 0)
return i;
}
}
return (-1);
}
#endif
#if defined(EFSL)
STATIC INT efs_FindHandle(FileSystem *fs, CHAR *filename)
{
CHAR ffname[11];
INT i;
for (i = 0; i < HANDLE_MAX; i++)
{
if (FileHandle[i].efsFile.fs == fs)
{
if (filename == _NULL)
return i;
file_normalToFatName((CHAR *)filename, ffname);
if (memcmp((CHAR *)FileHandle[i].efsFile.DirEntry.FileName, ffname, 11) == 0)
return i;
}
}
return (-1);
}
#endif
#if defined(FLASH_MCARD_MODEL) || defined(SDCARD_MODEL)
BOOL IsCardDevice(VOID)
{
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
return TscFs_IsCardDevice(&TscFsCard);
#elif defined(SDCARD_MODEL) && defined(EFSL)
return efs_IsCardDevice(&efsSD.myFs);
#else
return FALSE;
#endif
}
#endif
/******************************************************************************
*
* Function:
* InitialFile
*
* Description:
* This function initial all device of a file system
*
* Return:
* None.
*
******************************************************************************/
VOID InitialFile(XCALLBACK MakeMsg)
{
#if defined(TSCFS)
INT PhysicalRAM, CapacityRAM, FilesRAM, FilesFlash, FilesCard;
FLOAT data;
PhysicalRAM = RAM_PHYSICAL;
CapacityRAM = RAM_CAPACITY;
if (GetProfileInt("ALLOCATION SIZE DRAM", &data))
CapacityRAM = (INT)data * 1024;
FilesRAM = RAM_FILE_QUANTITY;
if (GetProfileInt("FILE QUANTITY DRAM", &data))
FilesRAM = (INT)data;
FilesFlash = FLASH_FILE_QUANTITY;
if (GetProfileInt("FLASH QUANTITY", &data))
FilesFlash = (INT)data;
FilesCard = CARD_FILE_QUANTITY;
if (GetProfileInt("CARD QUANTITY", &data))
FilesFlash = (INT)data;
#endif
memset(FileHandle, 0, sizeof(FileHandle));
#if defined(TSCFS)
if (InitFileRAM(&TscFsRAM, PhysicalRAM, CapacityRAM, FilesRAM) == (-2))
MakeTscFileSystam(&TscFsRAM);
#endif
#if defined(TSCFS)
if (InitFileFlash(&TscFsFlash, FilesFlash) == (-2))
{
if (MakeMsg) MakeMsg();
MakeTscFileSystam(&TscFsFlash);
}
#endif
#if defined(DEFAULT_MCARD_MODEL) && defined(TSCFS)
if (InitFileDefault(&TscFsDefault) == (-2))
{
if (MakeMsg) MakeMsg();
MakeTscFileSystam(&TscFsDefault);
}
#elif defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (InitFileCard(&TscFsCard, FilesCard) == (-2))
{
if (MakeMsg) MakeMsg();
MakeTscFileSystam(&TscFsCard);
}
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (efs_init(&efsSD, 0) == (-2))
{
if (!efs_IsWriteProtect(&efsSD.myFs))
{
if (MakeMsg) MakeMsg();
if (mkfs_makevfat(&efsSD.myPart) == 0)
efs_init(&efsSD, 0);
}
}
#endif
}
/******************************************************************************
*
* Function:
* EmptySpace
*
* Description:
* 计算真正可立即使用的內存空间
*
* Return:
* returns a value the empty space in kbytes.
*
******************************************************************************/
INT EmptySpace(_eFileDevice device)
{
switch (device)
{
case DRAM_DEVICE:
#if defined(TSCFS)
return TscFs_EmptySpace(&TscFsRAM);
#else
break;
#endif
case FLASH_DEVICE:
#if defined(TSCFS)
return TscFs_EmptySpace(&TscFsFlash);
#else
break;
#endif
case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (IsCardDevice())
return TscFs_EmptySpace(&TscFsCard);
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (IsCardDevice())
return efs_AvailableSpace(&efsSD.myFs);
#endif
break;
}
return (0);
}
/******************************************************************************
*
* Function:
* FreeSpace
*
* Description:
* 计算可用的內存空间(包含那些尚未清空的Sectors)
*
* Return:
* returns a value the free space in kbytes.
*
******************************************************************************/
INT FreeSpace(_eFileDevice device)
{
switch (device)
{
case DRAM_DEVICE:
#if defined(TSCFS)
return TscFs_FreeSpace(&TscFsRAM);
#else
break;
#endif
case FLASH_DEVICE:
#if defined(TSCFS)
return TscFs_FreeSpace(&TscFsFlash);
#else
break;
#endif
case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (IsCardDevice())
return TscFs_FreeSpace(&TscFsCard);
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (IsCardDevice())
return efs_AvailableSpace(&efsSD.myFs);
#endif
break;
}
return (0);
}
/******************************************************************************
*
* Function:
* TotalSpace
*
* Description:
*
*
* Return:
* returns a value the filesystem's capacity in kbytes.
*
******************************************************************************/
INT TotalSpace(_eFileDevice device)
{
switch (device)
{
case DRAM_DEVICE:
#if defined(TSCFS)
return TscFs_TotalSpace(&TscFsRAM);
#else
break;
#endif
case FLASH_DEVICE:
#if defined(TSCFS)
return TscFs_TotalSpace(&TscFsFlash);
#else
break;
#endif
case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (IsCardDevice())
return TscFs_TotalSpace(&TscFsCard);
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (IsCardDevice())
return efs_Capacity(&efsSD.myFs);
#endif
break;
}
return (0);
}
/******************************************************************************
*
* Function:
* PhysicalSpace
*
* Description:
*
*
* Return:
* returns a value the device's capacity in kbytes.
*
******************************************************************************/
INT PhysicalSpace(_eFileDevice device)
{
switch (device)
{
case DRAM_DEVICE:
#if defined(TSCFS)
return TscFs_PhysicalSpace(&TscFsRAM);
#else
break;
#endif
case FLASH_DEVICE:
#if defined(TSCFS)
return TscFs_PhysicalSpace(&TscFsFlash);
#else
break;
#endif
case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (IsCardDevice())
return TscFs_PhysicalSpace(&TscFsCard);
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (IsCardDevice())
return efs_Capacity(&efsSD.myFs);
#endif
break;
}
return (0);
}
/******************************************************************************
*
* Function:
* Fopen
*
* Description:
* Opens a stream.
*
* Return:
* On successful completion fopen returns a pointer to the newly opened stream.
* In the event of error it returns NULL.
*
******************************************************************************/
_FileHandle *Fopen(_eFileDevice device, CONST CHAR *filename, CONST CHAR *mode)
{
_FileHandle *File;
INT Handle;
for (Handle = 0; Handle < HANDLE_MAX; Handle++)
{
#if defined(TSCFS)
if (FileHandle[Handle].TscFile.TscFs != 0)
continue;
#endif
#if defined(EFSL)
if (FileHandle[Handle].efsFile.fs != 0)
continue;
#endif
break;
}
if (Handle == HANDLE_MAX)
return _NULL;
File = &FileHandle[Handle];
switch (device)
{
case DRAM_DEVICE:
#if defined(TSCFS)
if (TscFs_Fopen(&File->TscFile, &TscFsRAM, (CHAR *)filename, *mode) == 0)
return File;
#endif
break;
case FLASH_DEVICE:
#if defined(TSCFS)
if (TscFs_Fopen(&File->TscFile, &TscFsFlash, (CHAR *)filename, *mode) == 0)
return File;
#endif
break;
case CARD_DEVICE:
#if defined(DEFAULT_MCARD_MODEL) && defined(TSCFS)
if (TscFs_Fopen(&File->TscFile, &TscFsDefault, (CHAR *)filename, *mode) == 0)
return File;
#elif defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (IsCardDevice())
{
if (TscFs_Fopen(&File->TscFile, &TscFsCard, (CHAR *)filename, *mode) == 0)
return File;
}
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (IsCardDevice())
{
if (*mode == 'r' || !efs_IsWriteProtect(&efsSD.myFs))
{
if (file_fopen(&File->efsFile, &efsSD.myFs, (CHAR *)filename, *mode) == 0)
return File;
}
}
#endif
break;
}
return _NULL;
}
/******************************************************************************
*
* Function:
* Fclose
*
* Description:
* Closes a stream.
*
* Return:
* fclose returns 0 on success. It returns EOF if any errors were detected.
*
******************************************************************************/
INT Fclose(_FileHandle *stream)
{
if (stream == _NULL)
return END_OF_FILE; // fclose returns EOF if any errors were detected.
#if defined(TSCFS)
else if (stream->TscFile.TscFs != 0)
{
if (TscFs_Fclose(&stream->TscFile) == 0)
return (0); // fclose returns 0 on success.
}
#endif
#if defined(EFSL)
else if (stream->efsFile.fs != 0)
{
FileSystem *fs = 0;
if (file_getAttr(&stream->efsFile, FILE_STATUS_WRITE))
fs = stream->efsFile.fs;
if (file_fclose(&stream->efsFile) == 0)
{
if (fs && !efs_IsWriteProtect(fs))
fs_flushFs(fs);
return (0); // fclose returns 0 on success.
}
}
#endif
return END_OF_FILE; // fclose returns EOF if any errors were detected.
}
/******************************************************************************
*
* Function:
* Fgetc
*
* Description:
* Gets character from stream.
*
* Return:
* On success fgetc returns the character read after converting it to an int
* without sign extension. On end-of-file or error it returns EOF.
*
******************************************************************************/
INT Fgetc(_FileHandle *stream)
{
if (stream == _NULL)
return END_OF_FILE; // On end-of-file or error it returns EOF.
#if defined(TSCFS)
else if (stream->TscFile.TscFs != 0)
{
return TscFs_Fgetc(&stream->TscFile);
}
#endif
#if defined(EFSL)
else if (stream->efsFile.fs != 0)
{
BYTE data;
if (file_read(&stream->efsFile, 1, (BYTE *)&data) != 0)
return (INT)data; // On success fgetc returns the character read
// after converting it to an int without sign extension.
}
#endif
return END_OF_FILE; // On end-of-file or error it returns EOF.
}
/******************************************************************************
*
* Function:
* Fgets
*
* Description:
* Gets a string from a stream.
*
* Return:
* On success fgets returns the string pointed to by s.
* it returns NULL on end-of-file or error.
*
******************************************************************************/
CHAR *Fgets(CHAR *s, INT n, _FileHandle *stream)
{
INT i, data, follow;
// The function stops reading when it reads either n - 1 characters.
for (i = 0; i < (n - 1); i++)
{
if ((data = Fgetc(stream)) == END_OF_FILE)
{
*(s + i) = '\0'; // A null byte is appended to s to mark the end of the string.
return (CHAR *)_NULL; // fgets returns NULL on end-of-file or error.
}
// fgets reads characters from stream into the string s.
*(s + i) = (CHAR)data;
// The function stops reading a newline character whichever comes first.
if ((CHAR)data == '\r' || (CHAR)data == '\n')
{
i += 1; // fgets retains the newline character at the end of s.
// The function stops reading when it reads either n - 1 characters.
if (i >= (n - 1))
break;
if ((follow = Fgetc(stream)) == END_OF_FILE)
break;
if (follow == data || ((CHAR)follow != '\r' && (CHAR)follow != '\n'))
{
Fseek(stream, (-1), SEEK_CUR);
break;
}
// fgets retains the newline character at the end of s.
*(s + i) = (CHAR)follow;
i += 1;
break;
}
}
*(s + i) = '\0'; // A null byte is appended to s to mark the end of the string.
return s; // On success fgets returns the string pointed to by s.
}
/******************************************************************************
*
* Function:
* Fputc
*
* Description:
* Puts a character on a stream.
*
* Return:
* On success, fputc returns the character c. On error, it returns EOF.
*
******************************************************************************/
INT Fputc(INT c, _FileHandle *stream)
{
if (stream == _NULL)
return END_OF_FILE; // On error, fputc returns EOF.
#if defined(TSCFS)
else if (stream->TscFile.TscFs != 0)
{
return TscFs_Fputc(c, &stream->TscFile);
}
#endif
#if defined(EFSL)
else if (stream->efsFile.fs != 0 && !efs_IsWriteProtect(stream->efsFile.fs))
{
BYTE data;
data = (BYTE)c;
if (file_write(&stream->efsFile, 1, (BYTE *)&data) != 0)
return (BYTE)c;
}
#endif
return END_OF_FILE; // On error, fputc returns EOF.
}
/******************************************************************************
*
* Function:
* Fputs
*
* Description:
* Outputs a string on a stream.
*
* Return:
* On success fputs returns a non-negative value.
* On error it returns a value of EOF.
*
******************************************************************************/
INT Fputs(CONST CHAR *s, _FileHandle *stream)
{
INT n = strlen(s);
// fputs copies the null-terminated string s to the given output stream;
// it does not append a newline character and the terminating null character is not copied.
if (Fwrite(s, sizeof(CHAR), n, stream) != n)
return END_OF_FILE;
return _NULL;
}
/******************************************************************************
*
* Function:
* Fread
*
* Description:
* Reads data from a stream.
*
* Return:
* On success fread returns the number of items (not bytes) actually read.
* On end-of-file or error it returns a short count (possibly 0).
*
******************************************************************************/
INT Fread(VOID *ptr, INT size, INT n, _FileHandle *stream)
{
if (size == 0)
return (0);
if (stream == _NULL)
return (0);
#if defined(TSCFS)
else if (stream->TscFile.TscFs != 0)
{
if (TscFs_Fread(ptr, size, n, &stream->TscFile) != 0)
return n;
}
#endif
#if defined(EFSL)
else if (stream->efsFile.fs != 0)
{
if (stream->efsFile.FilePtr + (n * size) > stream->efsFile.FileSize)
n = (stream->efsFile.FileSize - stream->efsFile.FilePtr) / size;
// The total number of bytes read is (n * size).
if (file_read(&stream->efsFile, (n * size), (BYTE *)ptr) != 0)
return n;
}
#endif
return (0);
}
/******************************************************************************
*
* Function:
* Fwrite
*
* Description:
* Writes to a stream.
*
* Return:
* On successful completion fwrite returns the number of items (not bytes) actually written.
* On error it returns a short count.
*
******************************************************************************/
INT Fwrite(CONST VOID *ptr, INT size, INT n, _FileHandle *stream)
{
if (stream == _NULL)
return (0);
#if defined(TSCFS)
else if (stream->TscFile.TscFs != 0)
{
return TscFs_Fwrite(ptr, size, n, &stream->TscFile);
}
#endif
#if defined(EFSL)
else if (stream->efsFile.fs != 0 && !efs_IsWriteProtect(stream->efsFile.fs))
{
// The total number of bytes written is (n x size).
return (file_write(&stream->efsFile, (n * size), (BYTE *)ptr) / size);
}
#endif
return (0);
}
/******************************************************************************
*
* Function:
* Feof
*
* Description:
* Detects end-of-file on a stream.
*
* Return:
* feof returns nonzero if an end-of-file indicator was detected on the last
* input operation on the named stream and 0 if end-of-file has not been reached.
*
******************************************************************************/
INT Feof(_FileHandle *stream)
{
if (stream == _NULL)
return END_OF_FILE;
#if defined(TSCFS)
else if (stream->TscFile.TscFs != 0)
{
if (stream->TscFile.FilePtr < stream->TscFile.FileSize)
return (0);
}
#endif
#if defined(EFSL)
else if (stream->efsFile.fs != 0)
{
if (stream->efsFile.FilePtr < stream->efsFile.FileSize)
return (0);
}
#endif
return END_OF_FILE;
}
/******************************************************************************
*
* Function:
* Fseek
*
* Description:
* Repositions a file pointer on a stream.
*
* Return:
* fseek returns 0 if the pointer is successfully moved and nonzero on failure.
*
******************************************************************************/
INT Fseek(_FileHandle *stream, LONG offset, INT whence)
{
if (stream == _NULL)
return END_OF_FILE;
#if defined(TSCFS)
else if (stream->TscFile.TscFs != 0)
{
if (whence == SEEK_CUR)
offset = stream->TscFile.FilePtr + offset;
else if (whence == SEEK_END)
offset = stream->TscFile.FileSize + offset;
if (TscFs_Fsetpos(&stream->TscFile, offset) == 0)
return (0);
}
#endif
#if defined(EFSL)
else if (stream->efsFile.fs != 0)
{
if (whence == SEEK_CUR)
offset = stream->efsFile.FilePtr + offset;
else if (whence == SEEK_END)
offset = stream->efsFile.FileSize + offset;
if (file_setpos(&stream->efsFile, offset) == 0)
return (0);
}
#endif
return END_OF_FILE;
}
/******************************************************************************
*
* Function:
* Ftell
*
* Description:
* Returns the current file pointer.
*
* Return:
* ftell returns the current file pointer position on success.
*
******************************************************************************/
LONG Ftell(_FileHandle *stream)
{
if (stream == _NULL)
return (0);
#if defined(TSCFS)
else if (stream->TscFile.TscFs != 0)
return (stream->TscFile.FilePtr);
#endif
#if defined(EFSL)
else if (stream->efsFile.fs != 0)
return (stream->efsFile.FilePtr);
#endif
return (0);
}
/******************************************************************************
*
* Function:
* FileNo
*
* Description:
* Gets the file handle.
*
* Return:
* returns the integer file handle associated with stream.
*
******************************************************************************/
INT FileNo(_FileHandle *stream)
{
INT i;
for (i = 0; i < HANDLE_MAX; i++)
{
if (&FileHandle[i] == stream)
return i;
}
return (-1);
}
/******************************************************************************
*
* Function:
* Open
*
* Description:
* Opens a file for reading or writing.
*
* Return:
* On success, Open returns a nonnegative integer (the file handle).
* On error, Open returns -1.
*
******************************************************************************/
INT Open(_eFileDevice device, CONST CHAR *path, INT access)
{
if ((access & O_APPEND) || (access & O_CREAT))
return FileNo(Fopen(device, path, "a"));
else if (access & O_WRONLY)
return FileNo(Fopen(device, path, "w"));
else if (access & O_RDONLY)
return FileNo(Fopen(device, path, "r"));
return (-1);
}
/******************************************************************************
*
* Function:
* Close
*
* Description:
* Closes a file
*
* Return:
* Upon successful completion, Close returns 0.
* On error, Close returns a value of -1.
*
******************************************************************************/
INT Close(INT handle)
{
if (handle < 0 || handle >= HANDLE_MAX)
return (-1);
if (Fclose(&FileHandle[handle]) == 0)
return (0);
return (-1);
}
/******************************************************************************
*
* Function:
* Read
*
* Description:
* Reads from file.
*
* Return:
* On successful completion, Read returns an integer indicating the number of
* bytes placed in the buffer.
* On end-of-file, read returns 0. On error, Read returns -1.
*
******************************************************************************/
INT Read(INT handle, VOID *buf, UINT len)
{
if (handle < 0 || handle >= HANDLE_MAX)
return (-1);
if (Fread(buf, sizeof(CHAR), len, &FileHandle[handle]) == len)
return len;
return (0);
}
/******************************************************************************
*
* Function:
* Write
*
* Description:
* Writes to a file.
*
* Return:
* Write returns the number of bytes written.
* In case of error, Write returns -1.
*
******************************************************************************/
INT Write(INT handle, VOID *buf, UINT len)
{
if (handle < 0 || handle >= HANDLE_MAX)
return (-1);
return Fwrite(buf, sizeof(CHAR), len, &FileHandle[handle]);
}
/******************************************************************************
*
* Function:
* Eof
*
* Description:
* Checks for end-of-file.
*
* Return:
* If the current position is end-of-file, Eof returns the value 1; otherwise,
* it returns 0.
* A return value of -1 indicates an error
*
******************************************************************************/
INT Eof(INT handle)
{
if (handle < 0 || handle >= HANDLE_MAX)
return (-1);
if (Feof(&FileHandle[handle]) == END_OF_FILE)
return (1);
return (0);
}
/******************************************************************************
*
* Function:
* Lseek
*
* Description:
* Moves file pointer.
*
* Return:
* Lseek returns the offset of the pointer's new position measured in bytes
* from the file beginning.
* Lseek returns -1L on error.
*
******************************************************************************/
LONG Lseek(INT handle, LONG offset, INT fromwhere)
{
if (handle < 0 || handle >= HANDLE_MAX)
return (-1);
if (Fseek(&FileHandle[handle], offset, fromwhere) == (0))
return offset;
return (-1);
}
/******************************************************************************
*
* Function:
* Tell
*
* Description:
* Gets the current position of a file pointer.
*
* Return:
* Tell returns the current file pointer position.
* A return of -1 (long) indicates an error.
*
******************************************************************************/
LONG Tell(INT handle)
{
if (handle < 0 || handle >= HANDLE_MAX)
return (-1);
return Ftell(&FileHandle[handle]);
}
/******************************************************************************
*
* Function:
* FileLength
*
* Description:
* Gets file size in bytes.
*
* Return:
* On success filelength returns a long value the file length in bytes.
*
******************************************************************************/
LONG FileLength(INT handle)
{
if (handle == (-1))
return (0);
#if defined(TSCFS)
else if (FileHandle[handle].TscFile.TscFs != 0)
return (FileHandle[handle].TscFile.FileSize);
#endif
#if defined(EFSL)
else if ( FileHandle[handle].efsFile.fs != 0 )
return (FileHandle[handle].efsFile.FileSize);
#endif
return (0);
}
/******************************************************************************
*
* Function:
* Remove
*
* Description:
* Removes a file.
*
* Return:
* On successful completion, remove returns 0.
* On error, it returns -1.
*
******************************************************************************/
INT Remove(_eFileDevice device, CONST CHAR *filename)
{
switch (device)
{
case DRAM_DEVICE:
#if defined(TSCFS)
if (TscFs_FindHandle(&TscFsRAM, (CHAR *)filename) == (-1))
return TscFs_Remove(&TscFsRAM, filename);
#endif
break;
case FLASH_DEVICE:
#if defined(TSCFS)
if (TscFs_FindHandle(&TscFsFlash, (CHAR *)filename) == (-1))
return TscFs_Remove(&TscFsFlash, filename);
#endif
break;
case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (IsCardDevice())
{
if (TscFs_FindHandle(&TscFsCard, (CHAR *)filename) == (-1))
return TscFs_Remove(&TscFsCard, filename);
}
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (IsCardDevice() && !efs_IsWriteProtect(&efsSD.myFs))
{
if (efs_FindHandle(&efsSD.myFs, (CHAR *)filename) == (-1))
{
if (rmfile(&efsSD.myFs, (BYTE *)filename) == (0))
{
fs_flushFs(&efsSD.myFs);
return (0);
}
}
}
#endif
break;
}
return (-1);
}
/******************************************************************************
*
* Function:
* OpenList
*
* Description:
*
*
* Return:
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero.
*
******************************************************************************/
BOOL OpenList(_FileList *list, _eFileDevice device)
{
if (list == _NULL)
return FALSE;
memset(list, 0, sizeof(_FileList));
switch (device)
{
case DRAM_DEVICE:
#if defined(TSCFS)
if (TscFs_OpenList(&list->TscList, &TscFsRAM) == 0)
return TRUE;
#endif
break;
case FLASH_DEVICE:
#if defined(TSCFS)
if (TscFs_OpenList(&list->TscList, &TscFsFlash) == 0)
return TRUE;
#endif
break;
case CARD_DEVICE:
#if defined(DEFAULT_MCARD_MODEL) && defined(TSCFS)
if (TscFs_OpenList(&list->TscList, &TscFsDefault) == 0)
return TRUE;
#elif defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (IsCardDevice())
{
if (TscFs_OpenList(&list->TscList, &TscFsCard) == 0)
return TRUE;
}
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (IsCardDevice())
{
if (ls_openDir(&list->efsList, &efsSD.myFs, "/") == 0)
return TRUE;
}
#endif
break;
}
return FALSE;
}
/******************************************************************************
*
* Function:
* NextFile
*
* Description:
*
*
* Return:
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero.
*
******************************************************************************/
BOOL NextFile(_FileList *list, CHAR *filename)
{
if (list == _NULL)
return FALSE;
#if defined(TSCFS)
else if (list->TscList.TscFs != 0)
{
while (TscFs_NextFile(&list->TscList) == 0)
{
if (CompareFileName((CHAR *)list->TscList.FileName, filename))
{
strcpy(list->FileName, (CHAR *)list->TscList.FileName);
list->FileSize = list->TscList.FileSize;
return TRUE;
}
}
}
#endif
#if defined(EFSL)
else if (list->efsList.fs != 0)
{
while (ls_getNext(&list->efsList) == 0)
{
ListDirEntry *entry = &list->efsList.currentEntry;
CHAR name[FILENAME_LENGTH];
INT n, i;
if (entry->Attribute & (ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID | ATTR_DIRECTORY))
continue;
for (n = i = 0; i < LIST_MAXLENFILENAME - 1; i++)
{
if (isgraph(entry->FileName[i]))
{
if (i == 8)
name[n++] = '.';
name[n++] = entry->FileName[i];
}
}
name[n] = '\0';
if (CompareFileName(name, filename))
{
strcpy(list->FileName, name);
list->FileSize = entry->FileSize;
return TRUE;
}
}
}
#endif
return FALSE;
}
/******************************************************************************
*
* Function:
* PrevFile
*
* Description:
*
*
* Return:
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero.
*
******************************************************************************/
BOOL PrevFile(_FileList *list, CHAR *filename)
{
if (list == _NULL)
return FALSE;
#if defined(TSCFS)
else if (list->TscList.TscFs != 0)
{
while (TscFs_PrevFile(&list->TscList) == 0)
{
if (CompareFileName((CHAR *)list->TscList.FileName, filename))
{
strcpy(list->FileName, (CHAR *)list->TscList.FileName);
list->FileSize = list->TscList.FileSize;
return TRUE;
}
}
}
#endif
#if defined(EFSL)
else if (list->efsList.fs != 0)
{
while (ls_getPrev(&list->efsList) == 0)
{
ListDirEntry *entry = &list->efsList.currentEntry;
CHAR name[FILENAME_LENGTH];
INT n, i;
if (entry->Attribute & (ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID | ATTR_DIRECTORY))
continue;
for (n = i = 0; i < LIST_MAXLENFILENAME - 1; i++)
{
if (isgraph(entry->FileName[i]))
{
if (i == 8)
name[n++]= '.';
name[n++] = entry->FileName[i];
}
}
name[n] = '\0';
if (CompareFileName(name, filename))
{
strcpy(list->FileName, name);
list->FileSize = entry->FileSize;
return TRUE;
}
}
}
#endif
return FALSE;
}
/******************************************************************************
*
* Function:
* DeleteFile
*
* Description:
* The DeleteFile function deletes an existing file.
*
* Return:
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero.
*
******************************************************************************/
BOOL DeleteFile(_eFileDevice device, CHAR *filename)
{
_FileList List;
if (strcmp(filename, "*") != 0 && strcmp(filename, "*.*") != 0)
{
OpenList(&List, device);
while (NextFile(&List, filename))
Remove(device, List.FileName);
return TRUE;
}
switch (device)
{
case DRAM_DEVICE:
#if defined(TSCFS)
if (TscFs_FindHandle(&TscFsRAM, _NULL) != (-1))
return FALSE;
MakeTscFileSystam(&TscFsRAM);
#endif
break;
case FLASH_DEVICE:
#if defined(TSCFS)
if (TscFs_FindHandle(&TscFsFlash, _NULL) != (-1))
return FALSE;
MakeTscFileSystam(&TscFsFlash);
#endif
break;
case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
if (IsCardDevice())
{
if (TscFs_FindHandle(&TscFsCard, _NULL) != (-1))
return FALSE;
MakeTscFileSystam(&TscFsCard);
}
#elif defined(SDCARD_MODEL) && defined(EFSL)
if (IsCardDevice() && !efs_IsWriteProtect(&efsSD.myFs))
{
if (efs_FindHandle(&efsSD.myFs, _NULL) != (-1))
return FALSE;
if (mkfs_makevfat(&efsSD.myPart) != 0)
return FALSE;
efs_init(&efsSD, 0);
}
#endif
break;
}
return TRUE;
}
/******************************************************************************
*
* Function:
* CopyFile
*
* Description:
* The CopyFile function copies an existing file to a new file.
*
* Return:
* If the function succeeds, the return value is nonzero.
* If the function fails, the return value is zero.
*
******************************************************************************/
BOOL CopyFile(_eFileDevice existdev, CHAR *existname, _eFileDevice newdev, CHAR *newname)
{
_FileHandle *ExistFile, *NewFile;
_FileList ExistList;
CHAR NewFileName[FILENAME_LENGTH];
BOOL ret = TRUE;
INT state = END_OF_FILE;
INT i;
OpenList(&ExistList, existdev);
while (NextFile(&ExistList, existname))
{
if (*newname == '*') // if *.???
strcpy(NewFileName, ExistList.FileName);
else
strcpy(NewFileName, newname);
*strchr(NewFileName, '.') = '\0';
if (*(strchr(newname, '.') + 1) == '*') // if ???.*
strcat(NewFileName, strchr(ExistList.FileName, '.'));
else
strcat(NewFileName, strchr(newname, '.'));
if ((ExistFile = Fopen(existdev, ExistList.FileName, "r")) == _NULL)
break;
Remove(newdev, NewFileName);
NewFile = Fopen(newdev, NewFileName, "w");
for (i = 0; i < ExistList.FileSize; i++)
{
if ((state = Fputc(Fgetc(ExistFile), NewFile)) == END_OF_FILE)
break;
}
Fclose(NewFile);
Fclose(ExistFile);
if (state == END_OF_FILE)
{
Remove(newdev, NewFileName);
ret = FALSE;
}
}
return ret;
}
File.h 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#ifndef FILE_H
/******************************************************************************
* *
* M O D U L E D E F I N E *
* *
******************************************************************************/
#define FILE_H
/******************************************************************************
* *
* C O M P I L E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* U S E R D E F I N E D I N C L U D E F I L E S *
* *
******************************************************************************/
#if defined(TSCFS)
#include "TscFs\TscFs_File.h"
#endif
#if defined(EFSL)
#include "EFSL\efsl_efs.h"
#endif
#ifdef __cplusplus
extern "C" { /* Assume C declarations for C++ */
#endif /* __cplusplus */
/******************************************************************************
* *
* G L O B A L D E F I N E S *
* *
******************************************************************************/
#define O_RDONLY (1 << 0)
#define O_WRONLY (1 << 1)
#define O_RDWR (O_RDONLY | O_WRONLY)
#define O_APPEND (1 << 2)
#define O_CREAT (1 << 3)
#define SEEK_SET 0
#define SEEK_CUR 1
#define SEEK_END 2
#define END_OF_FILE -1
#define FILENAME_LENGTH 16
/******************************************************************************
* *
* S T R U C T U R E D E F I N I T I O N S *
* *
******************************************************************************/
typedef enum
{
NO_SELECT_DEVICE,
DRAM_DEVICE,
FLASH_DEVICE,
CARD_DEVICE,
} _eFileDevice;
typedef struct
{
INT Dummy;
#if defined(TSCFS)
_TscFile TscFile;
#endif
#if defined(EFSL)
File efsFile;
#endif
} _FileHandle;
typedef struct
{
CHAR FileName[FILENAME_LENGTH];
DWORD FileSize;
#if defined(TSCFS)
_TscList TscList;
#endif
#if defined(EFSL)
DirList efsList;
#endif
} _FileList;
/******************************************************************************
* *
* G L O B A L V A R I A B L E S - N O I N I T I A L I Z E R S *
* *
******************************************************************************/
#ifdef FILE_C
#define EXTERN
#else
#define EXTERN extern
#endif
/******************************************************************************
* *
* G L O B A L V A R I A B L E S - I N I T I A L I Z E R S *
* *
******************************************************************************/
/* None */
/******************************************************************************
* *
* F U N C T I O N P R O T O T Y P E S *
* *
******************************************************************************/
#if defined(FLASH_MCARD_MODEL) || defined(SDCARD_MODEL)
BOOL IsCardDevice(VOID);
#endif
VOID InitialFile(XCALLBACK);
INT EmptySpace(_eFileDevice);
INT FreeSpace(_eFileDevice);
INT TotalSpace(_eFileDevice);
INT PhysicalSpace(_eFileDevice);
_FileHandle *Fopen(_eFileDevice, CONST CHAR *, CONST CHAR *);
INT Fclose(_FileHandle *);
INT Fgetc(_FileHandle *);
CHAR *Fgets(CHAR *, INT, _FileHandle *);
INT Fputc(INT, _FileHandle *);
INT Fputs(CONST CHAR *, _FileHandle *);
INT Fread(VOID *, INT, INT, _FileHandle *);
INT Fwrite(CONST VOID *, INT, INT, _FileHandle *);
INT Feof(_FileHandle *);
INT Fseek(_FileHandle *, LONG, INT);
LONG Ftell(_FileHandle *);
INT FileNo(_FileHandle *);
INT Open(_eFileDevice, CONST CHAR *, INT);
INT Close(INT);
INT Read(INT, VOID *, UINT);
INT Write(INT, VOID *, UINT);
INT Eof(INT);
LONG Lseek(INT, LONG, INT);
LONG Tell(INT);
LONG FileLength(INT);
INT Remove(_eFileDevice, CONST CHAR *);
BOOL OpenList(_FileList *, _eFileDevice);
BOOL NextFile(_FileList *, CHAR *);
BOOL PrevFile(_FileList *, CHAR *);
BOOL DeleteFile(_eFileDevice, CHAR *);
BOOL CopyFile(_eFileDevice, CHAR *, _eFileDevice, CHAR *);
#undef EXTERN
#ifdef __cplusplus
} /* End of extern "C" { */
#endif /* __cplusplus */
#endif
UromFile.h 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
#if defined(NUTOS)
const char urom_index_asp[] =
{
"<HTML>"
"<HEAD>"
"<LINK rel='shortcut icon' href=<%icon%> >"
"<LINK rel='icon' href=<%icon%> type='image/ico'>"
"<TITLE><%model_name%> Print Server</TITLE>"
"</HEAD>"
"<FRAMESET border=false frameSpacing=0 frameBorder=0 rows=105,*>"
"<FRAME name=title src=/title.asp scrolling=no target=title>"
"<FRAME name=setup src=/setup.htm scrolling=no target=setup>"
"</FRAMESET>"
"</HTML>"
};
const char urom_title_asp[] =
{
"<HTML>"
"<HEAD>"
"<STYLE type=text/css>"
".maintext {FONT-FAMILY:Arial,Helvetica,sans-serif;FONT-SIZE:12px}"
".whitetext{FONT-FAMILY:Arial,Helvetica,sans-serif;FONT-SIZE:12px;FONT-WEIGHT:bold;COLOR:white}"
"</STYLE>"
"</HEAD>"
"<BODY bgColor=white>"
"<TABLE cellSpacing=0 cellPadding=0 width=730 border=0><TBODY>"
"<TR><TD width=230><A href=/index.asp target=_top><IMG SRC=<%logo%> border=0></A></TD>"
"<TD>"
"<TABLE cellSpacing=0 cellPadding=2 width=100% bgColor=#183C94 border=0><TBODY>"
"<TR><TD>"
"<TABLE class=maintext cellSpacing=0 cellPadding=3 width=100% bgColor=#DDDDFF border=0><TBODY>"
"<TR bgColor=#183C94><TD class=whitetext width=30%>Printer Information</TD><TD></TD></TR>"
"<TR><TD>Version :</TD><TD><%model_name%> Version <%var_name%> <%ext_name%></TD></TR>"
"<TR><TD>Checksum :</TD><TD><%checksum%></TD></TR>"
"<TR><TD>Milage :</TD><TD><%milage%> Km</TD></TR>"
"</TBODY></TABLE>"
"</TD></TR>"
"</TBODY></TABLE>"
"</TD>"
"</TR>"
"</TBODY></TABLE>"
"</BODY>"
"</HTML>"
};
const char urom_setup_htm[] =
{
"<HTML>"
"<HEAD></HEAD>"
"<FRAMESET border=false frameSpacing=0 frameBorder=0 cols=230,*>"
"<FRAME name=menu src=/menu.htm scrolling=no target=menu>"
"<FRAME name=content src=/cgi-bin/general.cgi target=content>"
"</FRAMESET>"
"</HTML>"
};
const char urom_menu_htm[] =
{
"<HTML>"
"<HEAD>"
"<STYLE type=text/css>"
"A:link {FONT-FAMILY:Arial,Helvetica,sans-serif;FONT-SIZE:12px;FONT-WEIGHT:bold;COLOR:#0061A3}"
".whitetext{FONT-FAMILY:Arial,Helvetica,sans-serif;FONT-SIZE:12px;FONT-WEIGHT:bold;COLOR:white}"
"</STYLE>"
"</HEAD>"
"<BODY bgColor=white>"
"<TABLE cellSpacing=1 width=100% bgColor=#0061A3 border=0><TBODY><TR><TD>"
"<TABLE cellSpacing=2 cellPadding=2 width=100% bgColor=white border=0><TBODY>"
"<TR><TD class=whitetext align=middle bgColor=#0061A3>Configuration</TD></TR>"
"<TR><TD><A href=/cgi-bin/general.cgi target=content style=\"color:#FF0000\">General</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/adjust.cgi target=content>Adjust</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/media.cgi target=content>Media</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/calibrate.cgi target=content>Calibration</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/serial.cgi target=content>Serial</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/network.cgi target=content>Network</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/mail.cgi target=content>Mail</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/clock.cgi target=content>Clock</A></TD></TR>"
"<TR><TD><A href=/admin/cgi-bin/password.cgi target=content>Password</A></TD></TR>"
"</TBODY></TABLE>"
"</TD></TR></TBODY></TABLE><P>"
"<TABLE cellSpacing=1 width=100% bgColor=#0061A3 border=0><TBODY><TR><TD>"
"<TABLE cellSpacing=2 cellPadding=2 width=100% bgColor=white border=0><TBODY>"
"<TR><TD class=whitetext align=middle bgColor=#0061A3>Tools</TD></TR>"
"<TR><TD><A href=/cgi-bin/function.cgi target=content>Function</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/upgrade.cgi target=content>Upgrade</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/status.cgi target=content>Status</A></TD></TR>"
"<TR><TD><A href=/cgi-bin/file.cgi target=content>File</A></TD></TR>"
"</TBODY></TABLE>"
"</TD></TR></TBODY></TABLE>"
"</BODY>"
"</HTML>"
};
#if 0
const char urom_favicon_ico[] =
{
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x05,
0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x31, 0x2c, 0xde, 0x00, 0x94, 0x3c, 0x18, 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, 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, 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, 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, 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, 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, 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,
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, 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, 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, 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, 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, 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, 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, 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, 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, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 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, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xcc, 0x38,
0x00, 0x00, 0xcc, 0x10, 0x00, 0x00, 0xcf, 0x83, 0x00, 0x00, 0xcf, 0x87, 0x00, 0x00, 0xce, 0x07,
0x00, 0x00, 0xcc, 0x27, 0x00, 0x00, 0xcc, 0xe7, 0x00, 0x00, 0xcc, 0xe3, 0x00, 0x00, 0x00, 0x10,
0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
};
#else
const char urom_favicon_ico[] =
{
0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x10, 0x00, 0x01, 0x00, 0x04, 0x00, 0x28, 0x01,
0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x0B,
0x00, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x6D, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20,
0x02, 0x20, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x00, 0x00, 0x00, 0x22,
0x22, 0x00, 0x02, 0x22, 0x22, 0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x22, 0x22, 0x22, 0x00, 0x02,
0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x00, 0x22, 0x22, 0x00, 0x02, 0x20, 0x00, 0x02, 0x02, 0x22,
0x02, 0x20, 0x02, 0x20, 0x00, 0x02, 0x02, 0x20, 0x02, 0x22, 0x02, 0x22, 0x22, 0x22, 0x22, 0x00,
0x00, 0x22, 0x02, 0x22, 0x22, 0x22, 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,
0x30, 0x2E, 0x00, 0x00, 0x43, 0x6F, 0x00, 0x00, 0x6F, 0x6E, 0x00, 0x00, 0x6F, 0x67, 0x00, 0x00,
0x6D, 0x46, 0x00, 0x00, 0x65, 0x73, 0x00, 0x00, 0x3A, 0x5C, 0x00, 0x00, 0x6F, 0x67, 0x00, 0x00,
0x6D, 0x20, 0x00, 0x00, 0x6C, 0x65, 0x00, 0x00, 0x43, 0x6F, 0x00, 0x00, 0x6F, 0x6E, 0x00, 0x00,
0x69, 0x6C, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x50, 0x55, 0x00, 0x00, 0x52, 0x4E,
};
#endif
#if 0
const char urom_tsclogo_gif[] =
{
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xd2, 0x00, 0x4f, 0x00, 0xf7, 0x00, 0x00, 0xff, 0xff, 0xff,
0xff, 0xff, 0xcc, 0xff, 0xff, 0x99, 0xff, 0xff, 0x66, 0xff, 0xff, 0x33, 0xff, 0xff, 0x00, 0xff,
0xcc, 0xff, 0xff, 0xcc, 0xcc, 0xff, 0xcc, 0x99, 0xff, 0xcc, 0x66, 0xff, 0xcc, 0x33, 0xff, 0xcc,
0x00, 0xff, 0x99, 0xff, 0xff, 0x99, 0xcc, 0xff, 0x99, 0x99, 0xff, 0x99, 0x66, 0xff, 0x99, 0x33,
0xff, 0x99, 0x00, 0xff, 0x66, 0xff, 0xff, 0x66, 0xcc, 0xff, 0x66, 0x99, 0xff, 0x66, 0x66, 0xff,
0x66, 0x33, 0xff, 0x66, 0x00, 0xff, 0x33, 0xff, 0xff, 0x33, 0xcc, 0xff, 0x33, 0x99, 0xff, 0x33,
0x66, 0xff, 0x33, 0x33, 0xff, 0x33, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xcc, 0xff, 0x00, 0x99,
0xff, 0x00, 0x66, 0xff, 0x00, 0x33, 0xff, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xcc, 0xff, 0xcc, 0xcc,
0xff, 0x99, 0xcc, 0xff, 0x66, 0xcc, 0xff, 0x33, 0xcc, 0xff, 0x00, 0xcc, 0xcc, 0xff, 0xcc, 0xcc,
0xcc, 0xcc, 0xcc, 0x99, 0xcc, 0xcc, 0x66, 0xcc, 0xcc, 0x33, 0xcc, 0xcc, 0x00, 0xcc, 0x99, 0xff,
0xcc, 0x99, 0xcc, 0xcc, 0x99, 0x99, 0xcc, 0x99, 0x66, 0xcc, 0x99, 0x33, 0xcc, 0x99, 0x00, 0xcc,
0x66, 0xff, 0xcc, 0x66, 0xcc, 0xcc, 0x66, 0x99, 0xcc, 0x66, 0x66, 0xcc, 0x66, 0x33, 0xcc, 0x66,
0x00, 0xcc, 0x33, 0xff, 0xcc, 0x33, 0xcc, 0xcc, 0x33, 0x99, 0xcc, 0x33, 0x66, 0xcc, 0x33, 0x33,
0xcc, 0x33, 0x00, 0xcc, 0x00, 0xff, 0xcc, 0x00, 0xcc, 0xcc, 0x00, 0x99, 0xcc, 0x00, 0x66, 0xcc,
0x00, 0x33, 0xcc, 0x00, 0x00, 0x99, 0xff, 0xff, 0x99, 0xff, 0xcc, 0x99, 0xff, 0x99, 0x99, 0xff,
0x66, 0x99, 0xff, 0x33, 0x99, 0xff, 0x00, 0x99, 0xcc, 0xff, 0x99, 0xcc, 0xcc, 0x99, 0xcc, 0x99,
0x99, 0xcc, 0x66, 0x99, 0xcc, 0x33, 0x99, 0xcc, 0x00, 0x99, 0x99, 0xff, 0x99, 0x99, 0xcc, 0x99,
0x99, 0x99, 0x99, 0x99, 0x66, 0x99, 0x99, 0x33, 0x99, 0x99, 0x00, 0x99, 0x66, 0xff, 0x99, 0x66,
0xcc, 0x99, 0x66, 0x99, 0x99, 0x66, 0x66, 0x99, 0x66, 0x33, 0x99, 0x66, 0x00, 0x99, 0x33, 0xff,
0x99, 0x33, 0xcc, 0x99, 0x33, 0x99, 0x99, 0x33, 0x66, 0x99, 0x33, 0x33, 0x99, 0x33, 0x00, 0x99,
0x00, 0xff, 0x99, 0x00, 0xcc, 0x99, 0x00, 0x99, 0x99, 0x00, 0x66, 0x99, 0x00, 0x33, 0x99, 0x00,
0x00, 0x66, 0xff, 0xff, 0x66, 0xff, 0xcc, 0x66, 0xff, 0x99, 0x66, 0xff, 0x66, 0x66, 0xff, 0x33,
0x66, 0xff, 0x00, 0x66, 0xcc, 0xff, 0x66, 0xcc, 0xcc, 0x66, 0xcc, 0x99, 0x66, 0xcc, 0x66, 0x66,
0xcc, 0x33, 0x66, 0xcc, 0x00, 0x66, 0x99, 0xff, 0x66, 0x99, 0xcc, 0x66, 0x99, 0x99, 0x66, 0x99,
0x66, 0x66, 0x99, 0x33, 0x66, 0x99, 0x00, 0x66, 0x66, 0xff, 0x66, 0x66, 0xcc, 0x66, 0x66, 0x99,
0x66, 0x66, 0x66, 0x66, 0x66, 0x33, 0x66, 0x66, 0x00, 0x66, 0x33, 0xff, 0x66, 0x33, 0xcc, 0x66,
0x33, 0x99, 0x66, 0x33, 0x66, 0x66, 0x33, 0x33, 0x66, 0x33, 0x00, 0x66, 0x00, 0xff, 0x66, 0x00,
0xcc, 0x66, 0x00, 0x99, 0x66, 0x00, 0x66, 0x66, 0x00, 0x33, 0x66, 0x00, 0x00, 0x33, 0xff, 0xff,
0x33, 0xff, 0xcc, 0x33, 0xff, 0x99, 0x33, 0xff, 0x66, 0x33, 0xff, 0x33, 0x33, 0xff, 0x00, 0x33,
0xcc, 0xff, 0x33, 0xcc, 0xcc, 0x33, 0xcc, 0x99, 0x33, 0xcc, 0x66, 0x33, 0xcc, 0x33, 0x33, 0xcc,
0x00, 0x33, 0x99, 0xff, 0x33, 0x99, 0xcc, 0x33, 0x99, 0x99, 0x33, 0x99, 0x66, 0x33, 0x99, 0x33,
0x33, 0x99, 0x00, 0x33, 0x66, 0xff, 0x33, 0x66, 0xcc, 0x33, 0x66, 0x99, 0x33, 0x66, 0x66, 0x33,
0x66, 0x33, 0x33, 0x66, 0x00, 0x33, 0x33, 0xff, 0x33, 0x33, 0xcc, 0x33, 0x33, 0x99, 0x33, 0x33,
0x66, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x33, 0x00, 0xff, 0x33, 0x00, 0xcc, 0x33, 0x00, 0x99,
0x33, 0x00, 0x66, 0x33, 0x00, 0x33, 0x33, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xcc, 0x00,
0xff, 0x99, 0x00, 0xff, 0x66, 0x00, 0xff, 0x33, 0x00, 0xff, 0x00, 0x00, 0xcc, 0xff, 0x00, 0xcc,
0xcc, 0x00, 0xcc, 0x99, 0x00, 0xcc, 0x66, 0x00, 0xcc, 0x33, 0x00, 0xcc, 0x00, 0x00, 0x99, 0xff,
0x00, 0x99, 0xcc, 0x00, 0x99, 0x99, 0x00, 0x99, 0x66, 0x00, 0x99, 0x33, 0x00, 0x99, 0x00, 0x00,
0x66, 0xff, 0x00, 0x66, 0xcc, 0x00, 0x66, 0x99, 0x00, 0x66, 0x66, 0x00, 0x66, 0x33, 0x00, 0x66,
0x00, 0x00, 0x33, 0xff, 0x00, 0x33, 0xcc, 0x00, 0x33, 0x99, 0x00, 0x33, 0x66, 0x00, 0x33, 0x33,
0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x99, 0x00, 0x00, 0x66, 0x00,
0x00, 0x33, 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, 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, 0x2c, 0x00, 0x00,
0x00, 0x00, 0xd2, 0x00, 0x4f, 0x00, 0x40, 0x08, 0xff, 0x00, 0x49, 0x21, 0x1b, 0x48, 0xb0, 0xa0,
0xc1, 0x83, 0x08, 0x13, 0x2a, 0x5c, 0x98, 0x07, 0x80, 0xc3, 0x87, 0x10, 0x23, 0x3e, 0x54, 0xf1,
0x24, 0xcf, 0x28, 0x52, 0x02, 0x17, 0x6a, 0xdc, 0xc8, 0x71, 0x60, 0x43, 0x89, 0x20, 0x43, 0x82,
0x24, 0xf1, 0xa4, 0x8a, 0x45, 0x8c, 0x1d, 0x53, 0x72, 0xc4, 0xe8, 0xac, 0xa5, 0xcb, 0x97, 0x30,
0x63, 0xca, 0x9c, 0x49, 0xb3, 0xe6, 0x47, 0x88, 0xa4, 0x6a, 0xea, 0xdc, 0xc9, 0xb3, 0x67, 0xcc,
0x51, 0x22, 0x25, 0xe6, 0xf1, 0x49, 0xb4, 0x68, 0x4f, 0x64, 0x41, 0x45, 0xe6, 0x24, 0x7a, 0x33,
0x69, 0xc8, 0xa5, 0x44, 0xab, 0x38, 0x9d, 0x4a, 0xb5, 0xaa, 0xc4, 0x27, 0x46, 0x5b, 0x3e, 0xb1,
0xca, 0xb5, 0xab, 0x55, 0xa8, 0x3d, 0x9b, 0x7a, 0x1d, 0x9a, 0xb5, 0xac, 0x51, 0x64, 0xa4, 0xaa,
0xa8, 0xa0, 0x8a, 0xac, 0x28, 0x32, 0x12, 0x5e, 0xe3, 0xca, 0x4d, 0x0a, 0x96, 0xa7, 0xd8, 0xb9,
0x13, 0xc9, 0x9a, 0xdd, 0x5b, 0xb4, 0x29, 0xd6, 0xa2, 0xa4, 0xf0, 0x0a, 0x1e, 0x5c, 0x77, 0xe7,
0xdd, 0xc1, 0x88, 0xe3, 0xea, 0xf5, 0x19, 0xf8, 0xe1, 0xe2, 0xa8, 0x89, 0x23, 0x4f, 0x2d, 0xac,
0xf3, 0xb0, 0x57, 0xca, 0x7c, 0x33, 0xf3, 0x6c, 0x2c, 0x72, 0x94, 0xe6, 0xcf, 0x3c, 0x91, 0x76,
0xc5, 0x4c, 0xd3, 0xf2, 0x68, 0xd0, 0xa8, 0x5b, 0x22, 0xcb, 0xb3, 0x36, 0x32, 0x89, 0x2a, 0xa4,
0x53, 0x1f, 0x95, 0x4c, 0xbb, 0xb6, 0xed, 0xdb, 0xb8, 0xe5, 0x02, 0xd9, 0xcd, 0xbb, 0xb7, 0x6f,
0xde, 0x07, 0x1c, 0xf0, 0xae, 0x00, 0x00, 0x08, 0x71, 0x20, 0x07, 0x1a, 0x00, 0x01, 0xf0, 0xe3,
0x78, 0xf0, 0x1c, 0xcc, 0x1d, 0x1c, 0x80, 0xfe, 0x63, 0x77, 0xf0, 0x23, 0xd2, 0x91, 0x3b, 0x80,
0x8e, 0xfc, 0x80, 0xf6, 0xde, 0x0e, 0x81, 0x64, 0xff, 0xcf, 0x0e, 0x20, 0x47, 0x0e, 0xef, 0xd9,
0xc1, 0xe7, 0x00, 0x02, 0xbd, 0x42, 0x05, 0xef, 0x07, 0x28, 0x38, 0xf7, 0xee, 0x7c, 0x7b, 0xf1,
0xe0, 0xc8, 0xc5, 0x7b, 0xdf, 0x4d, 0x5c, 0x3a, 0x7c, 0xe1, 0xe4, 0xd9, 0x27, 0x9e, 0x03, 0x47,
0xbc, 0xd7, 0xdd, 0x72, 0x39, 0x8c, 0xb7, 0xdf, 0x80, 0xc1, 0x1d, 0xf0, 0x43, 0x76, 0xc1, 0x41,
0xe8, 0x00, 0x05, 0xe8, 0x79, 0x07, 0x80, 0x70, 0xbf, 0x65, 0xa8, 0x21, 0x6f, 0xb1, 0xc9, 0xe6,
0x93, 0x69, 0x24, 0x78, 0xe6, 0xa1, 0x6c, 0x40, 0x8d, 0xd5, 0xd6, 0x88, 0x7c, 0x21, 0x53, 0x52,
0x15, 0x2c, 0xb6, 0xe8, 0xe2, 0x8b, 0x2c, 0x9e, 0xc8, 0x18, 0x8c, 0x34, 0xbe, 0xd8, 0x1a, 0x00,
0x24, 0xc8, 0x68, 0xd4, 0x28, 0x79, 0xd4, 0xe8, 0xe3, 0x8f, 0x40, 0xd2, 0xb8, 0x15, 0x5d, 0x7c,
0x91, 0xc2, 0x63, 0x90, 0x48, 0x26, 0x39, 0x24, 0x57, 0x1d, 0xc6, 0x64, 0xda, 0x64, 0x46, 0x71,
0x96, 0x5b, 0x5c, 0x39, 0x1a, 0x25, 0xd5, 0x94, 0xb7, 0x35, 0x09, 0xd3, 0x93, 0x5f, 0xa1, 0x28,
0x9b, 0x8a, 0x20, 0x55, 0x61, 0x14, 0x97, 0x58, 0x0a, 0xa6, 0xe5, 0x4b, 0x64, 0x96, 0x29, 0x18,
0x09, 0x8f, 0xf9, 0xb4, 0xe4, 0x99, 0x2f, 0x21, 0x73, 0xa3, 0x9a, 0x91, 0xc1, 0xd9, 0x52, 0x9a,
0x74, 0xce, 0xb5, 0x82, 0x8e, 0x3e, 0x5d, 0x09, 0x51, 0x9b, 0x44, 0x91, 0xb2, 0x64, 0x9e, 0x97,
0xf5, 0x85, 0x98, 0x9d, 0x5e, 0xf6, 0x54, 0xa2, 0x55, 0x80, 0x26, 0x7a, 0x16, 0xa1, 0x90, 0x46,
0x2a, 0xe9, 0x94, 0x1b, 0x56, 0x6a, 0xe9, 0xa5, 0x96, 0xae, 0x87, 0xe9, 0xa6, 0x98, 0x6a, 0xca,
0xa9, 0x86, 0x9e, 0x56, 0x1a, 0xea, 0x6f, 0xd5, 0x7d, 0x6a, 0xea, 0xa8, 0xc3, 0xb9, 0x67, 0x9c,
0xa9, 0xac, 0x86, 0x8a, 0xea, 0x86, 0x15, 0xf0, 0xff, 0xf6, 0x83, 0xa6, 0xb3, 0x5a, 0x8a, 0x1f,
0xa8, 0x9e, 0xbe, 0xba, 0x69, 0xac, 0x9b, 0x96, 0xca, 0xea, 0x6f, 0xba, 0xf2, 0x96, 0xde, 0x86,
0xe6, 0xf1, 0x56, 0xec, 0x6e, 0xa1, 0x56, 0x10, 0xec, 0xa7, 0x88, 0x3a, 0x7a, 0xe7, 0x54, 0xb0,
0x39, 0x6b, 0xd6, 0xa2, 0x71, 0xa9, 0x90, 0x47, 0xb3, 0x5e, 0xa2, 0x25, 0xad, 0xa1, 0x12, 0xa9,
0xc0, 0xe7, 0xb6, 0x65, 0x51, 0x3b, 0xd5, 0x13, 0xdf, 0x82, 0x1b, 0x1a, 0xb6, 0x8e, 0x36, 0xa5,
0x82, 0xb9, 0xa0, 0x89, 0x1b, 0xd2, 0x5f, 0xec, 0x96, 0x25, 0x1a, 0x93, 0xdc, 0x2a, 0x96, 0x15,
0x9e, 0x93, 0xc2, 0x3b, 0xe6, 0x9c, 0x93, 0x52, 0x85, 0x28, 0xbe, 0x20, 0x95, 0xab, 0xd3, 0xa0,
0xfd, 0xbe, 0x7b, 0x6f, 0xc1, 0x72, 0xfd, 0x3b, 0x97, 0xbe, 0x44, 0xad, 0xf6, 0x84, 0x0a, 0x24,
0x44, 0x2c, 0xf1, 0xc4, 0x14, 0x57, 0x6c, 0x31, 0x5c, 0x78, 0x35, 0x6a, 0x13, 0xc2, 0x73, 0x29,
0x8c, 0x97, 0x98, 0xf1, 0x9e, 0xf5, 0xe4, 0x0a, 0x3b, 0x72, 0xdc, 0x71, 0xbd, 0x83, 0x69, 0x1c,
0x72, 0x4d, 0x72, 0x46, 0x04, 0x32, 0x51, 0xee, 0x9a, 0x5c, 0x95, 0xc7, 0xb7, 0x55, 0x24, 0xd0,
0xca, 0x95, 0x4d, 0x94, 0x15, 0xc1, 0x32, 0xfb, 0x8b, 0x72, 0xcf, 0x71, 0x35, 0xbb, 0x28, 0xc9,
0x67, 0xf1, 0x0b, 0x74, 0x50, 0x34, 0x1f, 0x5d, 0x28, 0x60, 0x11, 0x89, 0xb8, 0xb3, 0xd2, 0x48,
0xff, 0x2c, 0xd7, 0xb5, 0x18, 0x55, 0x6d, 0xf5, 0xd5, 0x58, 0x67, 0xad, 0xf5, 0xd6, 0xe8, 0xb6,
0x24, 0x25, 0x44, 0x0c, 0xef, 0xa5, 0xd2, 0xd8, 0x07, 0x7d, 0xed, 0x33, 0x53, 0x87, 0xe2, 0x5c,
0x16, 0x9e, 0x5d, 0x9b, 0x3b, 0x6f, 0x97, 0x68, 0x13, 0xa6, 0xf6, 0x51, 0x7e, 0x2a, 0x26, 0xf0,
0xdc, 0x6f, 0x57, 0x95, 0xc7, 0xde, 0x7c, 0xf7, 0xff, 0xed, 0x37, 0xdf, 0x3c, 0x2b, 0xf6, 0xf7,
0xe0, 0x84, 0x17, 0x6e, 0xf8, 0xe1, 0x55, 0x3c, 0x4c, 0x28, 0x09, 0x14, 0x99, 0x74, 0xf8, 0xe3,
0x90, 0x13, 0x0e, 0xf5, 0xe4, 0x94, 0x4f, 0xb9, 0xec, 0xaf, 0x98, 0x67, 0xae, 0xf9, 0xe6, 0x9c,
0x77, 0xee, 0x79, 0xab, 0xbf, 0x1e, 0xe0, 0x1d, 0xad, 0xcb, 0x7a, 0x5a, 0xeb, 0x6e, 0xb5, 0x52,
0x50, 0xdc, 0xaa, 0x19, 0x1e, 0x6b, 0xdd, 0x7f, 0xec, 0xf9, 0x6a, 0xeb, 0x7e, 0xb7, 0x1a, 0xab,
0xa1, 0xec, 0xc8, 0xa2, 0xbe, 0xfa, 0x6e, 0x00, 0x28, 0x7b, 0x21, 0xea, 0xac, 0x03, 0x51, 0x2a,
0x71, 0xb1, 0x56, 0x80, 0x3b, 0xb2, 0xa1, 0xfe, 0x00, 0x40, 0x85, 0xb9, 0xdb, 0xde, 0xdb, 0x71,
0xec, 0xf1, 0xca, 0x5f, 0x05, 0xd2, 0x61, 0xf8, 0x79, 0x6f, 0xa2, 0x03, 0xe7, 0x80, 0x11, 0xcf,
0x15, 0x07, 0x61, 0xac, 0xf7, 0x2d, 0x78, 0x2b, 0x77, 0xcb, 0xb9, 0x87, 0x9e, 0x03, 0xca, 0x1b,
0xb7, 0x3b, 0xef, 0xeb, 0xe1, 0xd7, 0x3b, 0x85, 0xdf, 0x31, 0xd7, 0x5b, 0x7a, 0x0d, 0x6c, 0x1f,
0x1c, 0xf4, 0xec, 0xad, 0x7e, 0x80, 0xf1, 0x06, 0x0c, 0x38, 0x5f, 0xf9, 0xda, 0x33, 0x02, 0x7f,
0xf6, 0x53, 0x1e, 0x03, 0x39, 0x40, 0x38, 0xf2, 0x73, 0x1f, 0x10, 0xe0, 0xd7, 0x3b, 0xe5, 0x79,
0xaa, 0x3c, 0xd0, 0xb1, 0x90, 0xf5, 0x7e, 0xc7, 0x3b, 0xf0, 0xf1, 0x4a, 0x79, 0xee, 0x39, 0x1e,
0xa7, 0x34, 0x78, 0x3d, 0xce, 0xa9, 0xaa, 0x83, 0x20, 0x0c, 0xe1, 0x07, 0x43, 0x98, 0xb9, 0x1f,
0xb4, 0x0d, 0x45, 0xf8, 0xb2, 0xd9, 0xdc, 0x64, 0x62, 0xb6, 0xb8, 0xac, 0xe0, 0x5a, 0x77, 0xdb,
0x96, 0xb6, 0x56, 0xb8, 0xa5, 0xa4, 0x3c, 0xe1, 0x84, 0xce, 0x8a, 0x19, 0x55, 0xac, 0x15, 0xc3,
0x90, 0xcd, 0x90, 0x86, 0x2e, 0xb1, 0x8c, 0x0a, 0xff, 0x70, 0xb8, 0x2d, 0x1d, 0x06, 0x65, 0x88,
0x40, 0x94, 0xc9, 0x0f, 0x93, 0x78, 0x17, 0x6f, 0x25, 0x91, 0x27, 0x46, 0x04, 0x89, 0xca, 0x80,
0xb8, 0x44, 0x20, 0x8a, 0x65, 0x8a, 0x4f, 0x74, 0x49, 0x14, 0xff, 0x94, 0x45, 0x9a, 0x0c, 0xa4,
0x8b, 0x4d, 0x71, 0x5a, 0x17, 0x6b, 0xd2, 0xc2, 0x88, 0xac, 0x6b, 0x8c, 0x33, 0xc9, 0xdb, 0xd9,
0x3e, 0xb4, 0xb0, 0x70, 0x19, 0xad, 0x67, 0x58, 0xf4, 0x62, 0x1e, 0x56, 0x50, 0x39, 0x87, 0x24,
0xed, 0x34, 0x4c, 0xab, 0x1c, 0xba, 0xea, 0x56, 0x47, 0x00, 0xdc, 0x91, 0x2b, 0x3d, 0x94, 0x09,
0x1d, 0x29, 0x87, 0xad, 0xc0, 0xd5, 0xf1, 0x8f, 0x70, 0x8b, 0x1b, 0xd4, 0xc4, 0x38, 0x9b, 0x3e,
0x82, 0x04, 0x91, 0x7a, 0xcb, 0xca, 0x28, 0x30, 0x06, 0xb4, 0xb0, 0xed, 0x44, 0x8d, 0x8e, 0xb4,
0xa3, 0xd4, 0x00, 0x99, 0x22, 0xb2, 0x69, 0x04, 0x23, 0x7b, 0x7b, 0x02, 0x25, 0xd7, 0xe8, 0xa6,
0x4c, 0x3e, 0x72, 0x93, 0x56, 0xa9, 0x12, 0x1a, 0x55, 0xc3, 0x9a, 0xa4, 0x9c, 0x31, 0x50, 0xa6,
0x3c, 0xa5, 0x22, 0xe7, 0x12, 0x47, 0x1a, 0x92, 0xe2, 0x8d, 0x00, 0xb0, 0x64, 0xce, 0x62, 0x19,
0x11, 0x48, 0x2e, 0x6d, 0x95, 0x2f, 0xe1, 0xd9, 0xcb, 0xd8, 0xc8, 0x4b, 0x9c, 0xa0, 0x52, 0x2e,
0x55, 0x08, 0xa4, 0x2d, 0x5d, 0x16, 0xa5, 0x62, 0x1a, 0x73, 0x96, 0x91, 0xe1, 0x21, 0x30, 0x9d,
0x71, 0x23, 0xa2, 0x15, 0x05, 0x97, 0x8e, 0xf4, 0xa5, 0x64, 0x18, 0x57, 0x92, 0xc8, 0x79, 0x73,
0x6f, 0x37, 0xcb, 0xca, 0xdb, 0x94, 0x09, 0x93, 0x2d, 0xea, 0xf1, 0x98, 0xbc, 0x1c, 0x26, 0x31,
0x01, 0x50, 0xcb, 0x1a, 0x3a, 0x53, 0x9b, 0xbc, 0x6c, 0xa7, 0x4b, 0xa4, 0x44, 0xce, 0x72, 0xbe,
0x13, 0x9d, 0xf1, 0x6c, 0xa6, 0xce, 0xca, 0x62, 0xff, 0x48, 0x42, 0xe2, 0xd3, 0x94, 0xba, 0xdc,
0xe5, 0x43, 0xac, 0x79, 0xb0, 0x4c, 0xc2, 0xb3, 0x8f, 0xd2, 0xcc, 0x8a, 0xd1, 0x54, 0x69, 0x16,
0x52, 0xe4, 0xe1, 0x61, 0xa3, 0x04, 0xda, 0x41, 0x49, 0x39, 0xcd, 0x97, 0xf0, 0x91, 0x8b, 0x15,
0x75, 0x09, 0x26, 0x9d, 0x32, 0x51, 0x28, 0x65, 0x34, 0x98, 0x1c, 0xfd, 0xe8, 0x46, 0x89, 0x04,
0xcd, 0x84, 0x7d, 0xb4, 0x25, 0xe6, 0x84, 0x08, 0x23, 0xc7, 0x38, 0xd2, 0xa8, 0x95, 0x34, 0x68,
0x1f, 0x05, 0x18, 0xd8, 0x88, 0x88, 0xa2, 0x96, 0x2a, 0xe5, 0x9f, 0x14, 0x05, 0x23, 0x36, 0xad,
0x92, 0xd0, 0x24, 0xda, 0x34, 0x24, 0xf5, 0x7c, 0x96, 0xdc, 0x9e, 0xe8, 0x50, 0x51, 0xe2, 0x86,
0x22, 0x30, 0x54, 0xdb, 0x4f, 0x9d, 0xc9, 0xd4, 0xa6, 0x3a, 0xf5, 0xa9, 0x50, 0x8d, 0xaa, 0x54,
0xa7, 0x4a, 0xd5, 0xaa, 0x52, 0x85, 0x84, 0x58, 0xcd, 0xaa, 0x56, 0xb7, 0xca, 0xd5, 0xcd, 0x35,
0x40, 0x74, 0xd2, 0xdb, 0x1c, 0xaf, 0x28, 0x68, 0xab, 0x0a, 0x18, 0xe1, 0x3d, 0x97, 0x93, 0x95,
0xe8, 0x44, 0x47, 0x81, 0x03, 0x0a, 0x70, 0x73, 0xbd, 0x13, 0xd6, 0x5a, 0x7d, 0x03, 0x00, 0x0a,
0xfc, 0x86, 0x57, 0xb5, 0xb3, 0xd5, 0xf6, 0x0c, 0x84, 0xa9, 0xfd, 0x65, 0xe8, 0x80, 0x07, 0x5c,
0x10, 0x08, 0x1d, 0xb0, 0x3e, 0xff, 0x00, 0x48, 0x74, 0xc5, 0x79, 0xcf, 0x01, 0x2e, 0x64, 0x04,
0xc3, 0xea, 0x67, 0x7f, 0x8b, 0x75, 0x80, 0x81, 0xd6, 0x4a, 0xbb, 0xc8, 0x0e, 0xa7, 0x41, 0x8f,
0x15, 0x0e, 0x7e, 0x2a, 0xe4, 0x57, 0xeb, 0x50, 0x40, 0x80, 0xcb, 0xcb, 0x9e, 0x62, 0x39, 0xab,
0xd8, 0xd0, 0x56, 0xb6, 0x80, 0x0b, 0x22, 0x5f, 0xef, 0xbe, 0x0a, 0xd9, 0xee, 0x64, 0x2f, 0xb2,
0x3f, 0xe0, 0x6c, 0x79, 0x5c, 0xbb, 0xa0, 0xf7, 0xba, 0x30, 0x07, 0x3f, 0xfe, 0x89, 0x55, 0x6e,
0x1f, 0xcb, 0x59, 0xeb, 0x19, 0x8b, 0x83, 0x9d, 0x33, 0x80, 0xf5, 0x44, 0x57, 0xa0, 0xfb, 0x98,
0xe7, 0x7c, 0xdc, 0xa3, 0x5e, 0x68, 0xf5, 0xc3, 0x9b, 0xb8, 0x2a, 0xd0, 0x40, 0xb3, 0xed, 0xac,
0x75, 0xec, 0x47, 0x20, 0xe9, 0x70, 0x07, 0x7e, 0xd2, 0x55, 0xdf, 0x6e, 0xa4, 0x83, 0x9d, 0xfd,
0x85, 0xd6, 0x82, 0x8d, 0xd5, 0x6c, 0x73, 0xa6, 0x93, 0x58, 0xd8, 0x6d, 0xf7, 0x7e, 0xbc, 0x9b,
0xee, 0x72, 0x8c, 0x03, 0x1f, 0xb3, 0x42, 0x28, 0x07, 0xb1, 0x2d, 0x1f, 0xf7, 0xec, 0x6a, 0x1d,
0xe5, 0xc2, 0x47, 0x74, 0x9a, 0xc5, 0xaf, 0x76, 0x8e, 0x80, 0xdb, 0xe5, 0x75, 0xf5, 0x79, 0x6b,
0x35, 0x9f, 0x68, 0xcf, 0x97, 0x1f, 0x03, 0x8d, 0xd6, 0x38, 0x06, 0xe8, 0x1e, 0xfa, 0x08, 0xec,
0x57, 0xca, 0x02, 0xf8, 0xbc, 0xf8, 0x21, 0x0e, 0x5b, 0xcf, 0xe3, 0x9b, 0x5b, 0x35, 0x38, 0x56,
0x6b, 0xcd, 0x01, 0x5f, 0xe9, 0xd3, 0x5e, 0xd7, 0x22, 0x90, 0xbe, 0xc8, 0x91, 0xde, 0x01, 0xd9,
0xc3, 0x60, 0xf0, 0x29, 0x67, 0x3a, 0x06, 0xcc, 0xef, 0x62, 0x8d, 0x45, 0xbb, 0xed, 0x39, 0xf6,
0xc5, 0x73, 0xf5, 0x8f, 0x04, 0xff, 0x4b, 0x63, 0xde, 0xd6, 0xf8, 0xc6, 0x77, 0x0d, 0x30, 0x8e,
0x2b, 0x15, 0x10, 0x00, 0x3b,
};
#else
const char urom_tsclogo_gif[] =
{
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xD2, 0x00, 0x4F, 0x00, 0xF7, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00,
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x61, 0xA3, 0xFC, 0xEC, 0xED, 0xDB, 0x30, 0x40, 0xE3, 0x5F,
0x6B, 0xE4, 0x63, 0x6F, 0xE6, 0x6D, 0x78, 0xE6, 0x6E, 0x79, 0xE8, 0x7D, 0x87, 0xF6, 0xCB, 0xCF,
0xFB, 0xE5, 0xE7, 0xFC, 0xF0, 0xF1, 0xFD, 0xF2, 0xF3, 0xDA, 0x2A, 0x3B, 0xDC, 0x38, 0x48, 0xDF,
0x45, 0x54, 0xE1, 0x4E, 0x5C, 0xE1, 0x53, 0x61, 0xE2, 0x55, 0x63, 0xE2, 0x57, 0x65, 0xE2, 0x5A,
0x67, 0xE4, 0x65, 0x71, 0xE5, 0x69, 0x75, 0xE5, 0x6C, 0x78, 0xE6, 0x6E, 0x7A, 0xE6, 0x70, 0x7C,
0xE7, 0x76, 0x81, 0xE8, 0x79, 0x84, 0xE8, 0x7B, 0x86, 0xE9, 0x82, 0x8C, 0xEB, 0x89, 0x93, 0xEB,
0x8D, 0x96, 0xEC, 0x8F, 0x98, 0xEC, 0x93, 0x9C, 0xEE, 0x9B, 0xA3, 0xEE, 0x9D, 0xA5, 0xEF, 0xA5,
0xAC, 0xF0, 0xA7, 0xAE, 0xF0, 0xAB, 0xB2, 0xF2, 0xB3, 0xB9, 0xF5, 0xC6, 0xCB, 0xF6, 0xCE, 0xD2,
0xF7, 0xD1, 0xD5, 0xF8, 0xD9, 0xDC, 0xF9, 0xDD, 0xE0, 0xFB, 0xE7, 0xE9, 0xFD, 0xF4, 0xF5, 0xFC,
0xEE, 0xF0, 0xFE, 0xF8, 0xF9, 0xFE, 0xF9, 0xFA, 0xFE, 0xFE, 0xFF, 0xF6, 0xF9, 0xFC, 0xF9, 0xFB,
0xFD, 0xFC, 0xFD, 0xFE, 0xEE, 0xF4, 0xF9, 0xCC, 0xDF, 0xED, 0xDF, 0xEC, 0xF6, 0xEC, 0xF4, 0xFA,
0xE9, 0xF1, 0xF7, 0xF1, 0xF6, 0xFA, 0x00, 0x60, 0xA2, 0x01, 0x62, 0xA3, 0x02, 0x62, 0xA4, 0x04,
0x63, 0xA4, 0x05, 0x64, 0xA5, 0x06, 0x65, 0xA5, 0x07, 0x65, 0xA6, 0x08, 0x66, 0xA6, 0x09, 0x68,
0xA8, 0x0A, 0x67, 0xA7, 0x0B, 0x68, 0xA7, 0x0C, 0x68, 0xA7, 0x0D, 0x69, 0xA8, 0x0E, 0x6A, 0xA8,
0x0E, 0x6A, 0xA7, 0x10, 0x6B, 0xA9, 0x11, 0x6C, 0xA9, 0x12, 0x6C, 0xA9, 0x13, 0x6D, 0xAA, 0x14,
0x6F, 0xAD, 0x14, 0x6D, 0xAA, 0x15, 0x6E, 0xAB, 0x17, 0x6F, 0xAB, 0x18, 0x70, 0xAC, 0x1A, 0x71,
0xAC, 0x1B, 0x72, 0xAD, 0x1C, 0x72, 0xAD, 0x1F, 0x76, 0xB1, 0x1E, 0x74, 0xAE, 0x21, 0x75, 0xAF,
0x22, 0x76, 0xAF, 0x23, 0x77, 0xB0, 0x24, 0x77, 0xB0, 0x25, 0x78, 0xB0, 0x27, 0x79, 0xB1, 0x28,
0x7A, 0xB1, 0x29, 0x7A, 0xB2, 0x2A, 0x7B, 0xB2, 0x2B, 0x7C, 0xB3, 0x2C, 0x7C, 0xB3, 0x2C, 0x7B,
0xB2, 0x2E, 0x7E, 0xB4, 0x30, 0x7F, 0xB4, 0x32, 0x80, 0xB5, 0x34, 0x81, 0xB6, 0x35, 0x82, 0xB6,
0x37, 0x83, 0xB7, 0x38, 0x84, 0xB7, 0x39, 0x84, 0xB8, 0x3A, 0x85, 0xB8, 0x3B, 0x86, 0xB8, 0x3D,
0x87, 0xB9, 0x3E, 0x87, 0xB9, 0x3F, 0x88, 0xBA, 0x40, 0x89, 0xBA, 0x43, 0x8B, 0xBB, 0x44, 0x8B,
0xBC, 0x45, 0x8C, 0xBC, 0x46, 0x8C, 0xBC, 0x48, 0x8E, 0xBD, 0x4A, 0x8F, 0xBE, 0x4E, 0x94, 0xC5,
0x4D, 0x91, 0xBF, 0x4E, 0x91, 0xBF, 0x4F, 0x92, 0xC0, 0x52, 0x94, 0xC1, 0x51, 0x93, 0xC0, 0x54,
0x95, 0xC1, 0x55, 0x96, 0xC2, 0x57, 0x97, 0xC2, 0x59, 0x98, 0xC3, 0x5B, 0x99, 0xC4, 0x5A, 0x99,
0xC3, 0x5C, 0x9A, 0xC4, 0x5E, 0x9B, 0xC5, 0x62, 0xA0, 0xCB, 0x5F, 0x9C, 0xC5, 0x61, 0x9D, 0xC6,
0x63, 0x9E, 0xC7, 0x64, 0x9F, 0xC7, 0x67, 0xA1, 0xC8, 0x68, 0xA1, 0xC9, 0x69, 0xA2, 0xC9, 0x6B,
0xA3, 0xCA, 0x6A, 0xA3, 0xC9, 0x6E, 0xA5, 0xCB, 0x6F, 0xA6, 0xCB, 0x71, 0xA7, 0xCC, 0x70, 0xA6,
0xCB, 0x73, 0xA8, 0xCC, 0x76, 0xAA, 0xCE, 0x75, 0xA9, 0xCD, 0x7C, 0xB1, 0xD6, 0x78, 0xAB, 0xCE,
0x7A, 0xAD, 0xCF, 0x7C, 0xAE, 0xD0, 0x7F, 0xB0, 0xD1, 0x7E, 0xAF, 0xD0, 0x81, 0xB1, 0xD2, 0x82,
0xB2, 0xD2, 0x85, 0xB3, 0xD3, 0x86, 0xB4, 0xD3, 0x87, 0xB5, 0xD4, 0x88, 0xB5, 0xD4, 0x89, 0xB6,
0xD4, 0x8B, 0xB7, 0xD5, 0x8D, 0xB8, 0xD6, 0x8E, 0xB9, 0xD6, 0x8F, 0xBA, 0xD7, 0x90, 0xBA, 0xD7,
0x92, 0xBB, 0xD8, 0x93, 0xBC, 0xD8, 0x98, 0xBF, 0xDA, 0x99, 0xC0, 0xDA, 0x9A, 0xC0, 0xDB, 0x9D,
0xC2, 0xDC, 0x9E, 0xC3, 0xDC, 0xA0, 0xC4, 0xDD, 0xA3, 0xC6, 0xDE, 0xA2, 0xC5, 0xDD, 0xAA, 0xCD,
0xE5, 0xA7, 0xC8, 0xDF, 0xA8, 0xC9, 0xE0, 0xA9, 0xCA, 0xE0, 0xAA, 0xCA, 0xE0, 0xAE, 0xCD, 0xE2,
0xB1, 0xCF, 0xE3, 0xB3, 0xD0, 0xE4, 0xB2, 0xCF, 0xE3, 0xB6, 0xD2, 0xE5, 0xB5, 0xD1, 0xE4, 0xB9,
0xD4, 0xE6, 0xB8, 0xD3, 0xE5, 0xBC, 0xD5, 0xE7, 0xBD, 0xD6, 0xE7, 0xBF, 0xD7, 0xE8, 0xC1, 0xD9,
0xE9, 0xC2, 0xD9, 0xE9, 0xC4, 0xDA, 0xEA, 0xC7, 0xDC, 0xEB, 0xC8, 0xDD, 0xEB, 0xC9, 0xDE, 0xEC,
0xCD, 0xE0, 0xED, 0xCF, 0xE1, 0xEE, 0xD2, 0xE3, 0xEF, 0xD1, 0xE2, 0xEE, 0xD6, 0xE7, 0xF3, 0xD5,
0xE5, 0xF0, 0xD4, 0xE4, 0xEF, 0xDA, 0xE8, 0xF2, 0xD9, 0xE7, 0xF1, 0xDD, 0xEA, 0xF3, 0xDC, 0xE9,
0xF2, 0xDF, 0xEB, 0xF3, 0xE0, 0xEC, 0xF4, 0xE2, 0xED, 0xF5, 0xE5, 0xEF, 0xF6, 0xE4, 0xEE, 0xF5,
0xED, 0xF4, 0xF9, 0xEC, 0xF3, 0xF8, 0xF7, 0xFA, 0xFC, 0x65, 0xA0, 0xC7, 0x6D, 0xA5, 0xCA, 0x94,
0xBD, 0xD8, 0x97, 0xBF, 0xD9, 0x9C, 0xC2, 0xDB, 0x9F, 0xC4, 0xDC, 0xA4, 0xC7, 0xDE, 0xAC, 0xCC,
0xE1, 0xBB, 0xD5, 0xE6, 0xC3, 0xDA, 0xE9, 0xD0, 0xE4, 0xF1, 0xCB, 0xDF, 0xEC, 0xCE, 0xE1, 0xED,
0xD3, 0xE4, 0xEF, 0xD6, 0xE6, 0xF0, 0xE3, 0xEE, 0xF5, 0xEB, 0xF3, 0xF8, 0xEA, 0xF2, 0xF7, 0xE8,
0xF2, 0xF8, 0xE6, 0xF0, 0xF6, 0xF3, 0xF8, 0xFB, 0xF2, 0xF7, 0xFA, 0xF5, 0xF9, 0xFB, 0xFB, 0xFD,
0xFE, 0xFA, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFB, 0xFB, 0xFF, 0xFD, 0xFD, 0x2C, 0x00, 0x00,
0x00, 0x00, 0xD2, 0x00, 0x4F, 0x00, 0x00, 0x08, 0xFF, 0x00, 0x01, 0x08, 0x1C, 0x48, 0xB0, 0xA0,
0xC1, 0x83, 0x08, 0x13, 0x2A, 0x5C, 0xC8, 0xB0, 0xA1, 0xC3, 0x87, 0x10, 0x23, 0x4A, 0x9C, 0x48,
0xB1, 0xA2, 0xC5, 0x8B, 0x18, 0x33, 0x6A, 0xDC, 0xC8, 0xB1, 0xA3, 0xC7, 0x8F, 0x20, 0x43, 0x8A,
0x1C, 0x49, 0xB2, 0xA4, 0xC9, 0x93, 0x28, 0x53, 0xAA, 0x5C, 0xC9, 0xB2, 0xA5, 0xCB, 0x97, 0x30,
0x63, 0xCA, 0x9C, 0x49, 0xB3, 0xA6, 0xCD, 0x9B, 0x38, 0x73, 0xEA, 0xDC, 0xC9, 0xB3, 0xA7, 0xCF,
0x9F, 0x40, 0x83, 0x0A, 0x1D, 0x4A, 0xB4, 0xA8, 0xD1, 0xA3, 0x48, 0x93, 0x2A, 0x5D, 0xCA, 0xB4,
0xA9, 0xD3, 0xA7, 0x50, 0xA3, 0x4A, 0x9D, 0x4A, 0x10, 0xD8, 0xA2, 0x47, 0x8F, 0x12, 0xD9, 0xA2,
0xCA, 0x55, 0x24, 0x2B, 0x44, 0xD8, 0x04, 0x06, 0x99, 0xE4, 0xA9, 0xAB, 0x59, 0x8E, 0xCD, 0x08,
0xED, 0xB3, 0x24, 0x68, 0x50, 0x2B, 0x00, 0x90, 0x7E, 0x9D, 0x9D, 0x7B, 0xB1, 0x9C, 0xB2, 0x1C,
0x5C, 0x82, 0x39, 0x53, 0x02, 0x8F, 0x1B, 0xA3, 0xA0, 0xCD, 0xCC, 0xD1, 0x0A, 0x96, 0x83, 0x2E,
0x4A, 0x46, 0x41, 0x76, 0x8C, 0x69, 0x54, 0x49, 0xCF, 0x3D, 0x1E, 0x89, 0xF0, 0x01, 0x0D, 0x86,
0x00, 0x41, 0x9D, 0xC2, 0x86, 0x4D, 0x36, 0xF2, 0xB6, 0xA3, 0xCC, 0xAA, 0x2E, 0xAF, 0x00, 0xE4,
0x43, 0x34, 0x0E, 0x28, 0x2F, 0x04, 0x55, 0xCC, 0x65, 0x3E, 0x69, 0x6A, 0x6B, 0x97, 0x7B, 0xD0,
0x94, 0x64, 0x53, 0x66, 0x69, 0x22, 0x0F, 0x6A, 0xF3, 0x56, 0x62, 0x42, 0x90, 0xA7, 0xC7, 0xC0,
0x1D, 0xF7, 0xC2, 0x09, 0x17, 0xB7, 0x23, 0xA1, 0x10, 0x71, 0xC3, 0xE9, 0x91, 0xEC, 0xD7, 0x03,
0xB9, 0x38, 0xC9, 0x3F, 0xBF, 0xF1, 0xA1, 0x96, 0xAC, 0xB4, 0x32, 0x61, 0x7F, 0xA6, 0x4D, 0x1C,
0x17, 0x46, 0x0A, 0x2B, 0x90, 0xCF, 0x82, 0x89, 0xFF, 0x33, 0x98, 0xA3, 0x0F, 0x82, 0x22, 0xD7,
0x06, 0xE6, 0xBB, 0x93, 0x45, 0x8B, 0x96, 0x2C, 0x7D, 0xF6, 0x1D, 0x9C, 0x06, 0xC6, 0xBD, 0x16,
0x2A, 0xDF, 0x47, 0x86, 0x43, 0xE3, 0x3E, 0x0B, 0xA5, 0x8E, 0x3E, 0xF8, 0x16, 0x92, 0x33, 0x7C,
0xCC, 0x12, 0x8D, 0x34, 0xB9, 0xFC, 0x11, 0x4C, 0x45, 0x7C, 0x54, 0x46, 0xC8, 0x3D, 0x1C, 0xE5,
0x43, 0x48, 0x65, 0xCA, 0x1C, 0x54, 0x87, 0x65, 0xF2, 0x0D, 0x24, 0x4C, 0x65, 0x1C, 0x86, 0x66,
0x50, 0x83, 0x1C, 0x8A, 0x21, 0xA0, 0x48, 0xF4, 0x40, 0xC1, 0xE1, 0x21, 0x1B, 0xCD, 0x33, 0xC9,
0x13, 0xDC, 0x8C, 0x54, 0x8F, 0x2B, 0x95, 0x50, 0x92, 0x4A, 0x37, 0x15, 0x8D, 0x33, 0x06, 0x87,
0x63, 0xE4, 0xA6, 0x51, 0x33, 0x1C, 0x96, 0x62, 0xD0, 0x0E, 0x6E, 0x20, 0x70, 0x8E, 0x41, 0x91,
0x70, 0x88, 0x80, 0x14, 0x2D, 0x12, 0x94, 0x8B, 0x91, 0x44, 0x18, 0x53, 0x12, 0x3D, 0x57, 0x70,
0x98, 0x48, 0x46, 0xF8, 0xBC, 0xA2, 0x05, 0x02, 0x4C, 0xE8, 0x08, 0xD3, 0x3D, 0xB8, 0x64, 0x93,
0x50, 0x10, 0x53, 0x18, 0xD9, 0xCE, 0x46, 0x3B, 0x28, 0x52, 0x59, 0x12, 0xC9, 0x14, 0x24, 0x4D,
0x65, 0x6A, 0xAC, 0xB2, 0x4D, 0x69, 0x02, 0xD1, 0xD3, 0x85, 0x91, 0x84, 0x10, 0x24, 0xCE, 0x9C,
0x1C, 0x4A, 0x62, 0x52, 0x3D, 0x4A, 0x70, 0x58, 0x48, 0x46, 0x9A, 0x70, 0xF8, 0x84, 0x96, 0x2F,
0x45, 0x83, 0x65, 0x28, 0x08, 0xC1, 0x62, 0xA4, 0x16, 0xF8, 0xE8, 0xB3, 0xCC, 0x2D, 0xD1, 0x60,
0xF4, 0x0A, 0x87, 0xE9, 0x0C, 0x14, 0x04, 0x00, 0xEB, 0x14, 0xC1, 0x61, 0x15, 0xBD, 0x10, 0xF4,
0x8B, 0x91, 0x08, 0x00, 0x33, 0x90, 0x25, 0x46, 0x72, 0xA1, 0x5C, 0x49, 0x3B, 0x00, 0xD3, 0x8B,
0x2F, 0xBC, 0x38, 0x93, 0x51, 0x23, 0x82, 0x12, 0xFF, 0xEA, 0x92, 0x3E, 0x62, 0x54, 0xE6, 0x61,
0x41, 0xE6, 0x71, 0x98, 0xC5, 0x22, 0x37, 0x56, 0x76, 0x8B, 0x42, 0xE1, 0xBC, 0x73, 0xD0, 0x38,
0xC6, 0x24, 0xF3, 0x0A, 0x12, 0x1C, 0x22, 0x0A, 0x00, 0x3C, 0x8A, 0x50, 0xA3, 0x8F, 0x32, 0xC4,
0x0C, 0x23, 0x08, 0x15, 0x10, 0x12, 0x64, 0x88, 0x91, 0x61, 0x08, 0x01, 0x00, 0x34, 0x46, 0x18,
0xD9, 0x69, 0x51, 0x93, 0x70, 0x08, 0xC5, 0x88, 0x30, 0x95, 0x53, 0xD9, 0x14, 0xF5, 0x18, 0x54,
0x06, 0xA8, 0x46, 0x2A, 0x51, 0x5B, 0x42, 0x94, 0x18, 0xC1, 0x0A, 0x66, 0x02, 0x61, 0x43, 0x06,
0xBB, 0x08, 0xC8, 0x21, 0x10, 0x25, 0x08, 0x50, 0x01, 0xCE, 0x40, 0xFD, 0x78, 0x59, 0x90, 0x37,
0x51, 0x72, 0xD8, 0x09, 0x00, 0x17, 0xFA, 0x69, 0x90, 0x0E, 0xC6, 0x10, 0xE3, 0xF0, 0xA5, 0xFD,
0x10, 0xC3, 0x09, 0x22, 0x90, 0xB8, 0x22, 0x70, 0x41, 0xDD, 0x14, 0xE3, 0x70, 0x85, 0xFB, 0xD8,
0xF2, 0x48, 0x23, 0xB0, 0x68, 0x03, 0xC0, 0x0E, 0xC8, 0x38, 0x4C, 0x8C, 0x34, 0x04, 0xC5, 0xA3,
0x31, 0x31, 0xC2, 0x02, 0x70, 0x8F, 0x2D, 0x94, 0x1C, 0x32, 0x49, 0x2D, 0xFF, 0x12, 0x04, 0x8D,
0x31, 0xB9, 0x22, 0xA0, 0x44, 0x2E, 0x0E, 0x87, 0x53, 0x50, 0x3F, 0xC8, 0x90, 0xD2, 0x08, 0x22,
0x96, 0xD0, 0xB2, 0xCD, 0x41, 0x39, 0x30, 0xE3, 0x70, 0x31, 0x2D, 0xC6, 0xD3, 0x09, 0x22, 0x98,
0x14, 0x03, 0x5D, 0x43, 0xC0, 0x70, 0x38, 0x0A, 0x41, 0xD9, 0x70, 0x72, 0x44, 0x65, 0x72, 0x50,
0x12, 0xC8, 0x1F, 0x91, 0xC8, 0xB2, 0x0C, 0x37, 0xC5, 0x25, 0x44, 0x0E, 0x02, 0x70, 0xF4, 0x23,
0x10, 0x0F, 0xCA, 0xC8, 0xC3, 0x47, 0x19, 0x59, 0x28, 0xF2, 0x44, 0x1E, 0x67, 0x20, 0xD0, 0x86,
0x40, 0x90, 0x20, 0x80, 0x04, 0x8D, 0x0B, 0xA1, 0xFF, 0x63, 0x24, 0x14, 0x67, 0x73, 0x38, 0x45,
0x92, 0x04, 0x71, 0xA3, 0x29, 0x85, 0xDB, 0xE0, 0x01, 0x6A, 0x13, 0x9D, 0xF0, 0x53, 0x90, 0x2C,
0x1C, 0x76, 0x21, 0x44, 0x21, 0x46, 0xBA, 0xD1, 0x8F, 0x38, 0x4E, 0x70, 0x58, 0xE7, 0x40, 0x8F,
0x70, 0xD8, 0x07, 0x00, 0xE7, 0x5C, 0x69, 0x24, 0x16, 0xB1, 0x10, 0x44, 0x07, 0xBE, 0x14, 0x12,
0xD4, 0xCE, 0xE9, 0xA0, 0x3A, 0x41, 0xC9, 0x78, 0x04, 0xF1, 0x00, 0x06, 0x87, 0xE6, 0xB4, 0xF3,
0x84, 0x91, 0xBA, 0x3C, 0x64, 0x0C, 0x87, 0x4C, 0x50, 0x33, 0x10, 0x30, 0x26, 0x22, 0xA0, 0x88,
0x0E, 0x12, 0x71, 0x82, 0x80, 0x8F, 0x02, 0x95, 0x82, 0x00, 0x18, 0xAC, 0xB0, 0x43, 0x0A, 0x37,
0x5E, 0x76, 0x73, 0xC5, 0x23, 0x02, 0x2D, 0x82, 0xC0, 0x11, 0x61, 0x2D, 0x54, 0x1E, 0xEA, 0x08,
0xA8, 0x66, 0x50, 0x37, 0x4C, 0x54, 0x56, 0x04, 0x2B, 0xB3, 0xE3, 0x5B, 0x48, 0xD9, 0x02, 0x9D,
0xC3, 0xA1, 0x19, 0x92, 0x80, 0xBA, 0x09, 0x00, 0xF4, 0x54, 0x21, 0x25, 0x41, 0x81, 0x23, 0x20,
0x08, 0x29, 0xDC, 0xA3, 0x33, 0x50, 0x1E, 0xDC, 0x2F, 0x33, 0x90, 0x2F, 0x7D, 0x42, 0x5D, 0x1B,
0xBC, 0x11, 0x3B, 0x33, 0x70, 0xE8, 0x12, 0xE5, 0xAB, 0x8C, 0x12, 0x8E, 0xA6, 0x90, 0x7E, 0x94,
0xAD, 0x1D, 0x87, 0x43, 0x00, 0x8A, 0x06, 0x32, 0x08, 0x04, 0x4C, 0x82, 0x22, 0x94, 0xE3, 0x85,
0x40, 0xBA, 0x71, 0xA5, 0x34, 0x5C, 0xAA, 0x20, 0xD9, 0x10, 0x50, 0x1B, 0x2A, 0x33, 0x08, 0x65,
0xE4, 0x63, 0x21, 0xD9, 0xB8, 0x1D, 0xBB, 0xEE, 0xC0, 0x83, 0x83, 0x74, 0xA3, 0x09, 0xE2, 0x0B,
0x60, 0x11, 0xA8, 0x40, 0x04, 0x50, 0x1D, 0x6C, 0x20, 0xEA, 0xAB, 0xCC, 0xD6, 0x40, 0x25, 0x2C,
0x28, 0xCD, 0x6F, 0x20, 0xF5, 0xCB, 0xDC, 0x79, 0xFF, 0xC2, 0xB0, 0x05, 0x50, 0x7D, 0xE1, 0x84,
0x00, 0x80, 0x03, 0xF7, 0xD2, 0xB4, 0xAD, 0x00, 0x56, 0x46, 0x0A, 0x63, 0x80, 0x21, 0x87, 0xEC,
0x80, 0x3E, 0x1E, 0xD4, 0xAD, 0x32, 0xDD, 0x32, 0xD2, 0x1F, 0x18, 0xA2, 0x0F, 0x3D, 0xE8, 0xC1,
0x0F, 0xA2, 0x7B, 0xE2, 0x07, 0xB5, 0x51, 0x04, 0x50, 0x54, 0xE4, 0x42, 0xC2, 0x00, 0x40, 0x37,
0xD8, 0x60, 0x37, 0xD8, 0x11, 0xC4, 0x19, 0xCD, 0x18, 0xC5, 0x21, 0x14, 0xC7, 0x21, 0x3C, 0xDC,
0xA1, 0x11, 0xE4, 0x32, 0x48, 0x2B, 0xD8, 0xD5, 0x04, 0xDF, 0xB9, 0x50, 0x8A, 0x1C, 0x22, 0x07,
0x3C, 0xEE, 0xF1, 0x8E, 0x44, 0x18, 0x09, 0x09, 0xF2, 0xC0, 0x21, 0xA8, 0x8E, 0x90, 0x88, 0x50,
0xE0, 0x01, 0x0E, 0x2D, 0xF4, 0x61, 0x65, 0xA6, 0x04, 0x44, 0x50, 0xF9, 0x01, 0x1A, 0xE3, 0xE8,
0xC1, 0x39, 0x90, 0xC5, 0x21, 0x66, 0x08, 0xE4, 0x17, 0xAE, 0x88, 0x03, 0x87, 0x92, 0x30, 0x0A,
0x58, 0xB4, 0x22, 0x37, 0x3C, 0x48, 0x58, 0x65, 0x42, 0x01, 0x8E, 0x1D, 0x6C, 0x23, 0x6F, 0x1C,
0xD2, 0xDF, 0xDA, 0xAE, 0xB8, 0x3E, 0x4E, 0x58, 0xE2, 0x0B, 0x95, 0x62, 0xC8, 0xA7, 0xF0, 0x55,
0x0C, 0x00, 0xF0, 0xA0, 0x10, 0x7A, 0x92, 0x08, 0x3D, 0x8A, 0xA3, 0x44, 0x66, 0x74, 0xA3, 0x6E,
0x74, 0xE0, 0x9B, 0x40, 0xAC, 0x01, 0x0A, 0xFE, 0x21, 0xC0, 0x0D, 0xE7, 0xF8, 0x45, 0xF9, 0xF4,
0x57, 0x8B, 0xE5, 0x05, 0x42, 0x1D, 0xCA, 0x2C, 0x88, 0x01, 0x8D, 0x44, 0x8A, 0x84, 0xBC, 0xD0,
0x48, 0xEF, 0x23, 0x88, 0xF5, 0x92, 0xA5, 0x48, 0x0E, 0x11, 0x21, 0x17, 0x03, 0xA9, 0x96, 0x24,
0x11, 0x40, 0x49, 0x81, 0xD4, 0x0F, 0x01, 0x71, 0x40, 0x1F, 0x00, 0xDA, 0xC7, 0xA1, 0xDC, 0x0D,
0x24, 0x5C, 0x95, 0x81, 0x82, 0xB6, 0x06, 0xA2, 0xFF, 0x0C, 0x23, 0x55, 0x02, 0x57, 0x1C, 0x82,
0xE4, 0x2C, 0x8D, 0xD4, 0x06, 0x01, 0x3D, 0xC7, 0x21, 0xB9, 0xA8, 0x21, 0xA8, 0x60, 0x01, 0x00,
0x6C, 0xD4, 0x42, 0x22, 0x40, 0x70, 0xC4, 0x16, 0x3E, 0x01, 0x80, 0x35, 0x20, 0xA0, 0x1C, 0x5F,
0x40, 0xC0, 0x29, 0xA6, 0xB6, 0xC1, 0x3D, 0x54, 0xA6, 0x11, 0x03, 0x09, 0x45, 0x65, 0xA0, 0x01,
0x00, 0xC8, 0x71, 0x48, 0x0D, 0x07, 0x49, 0x46, 0xF8, 0x8C, 0x64, 0x08, 0x6F, 0x02, 0x32, 0x0B,
0x79, 0xDC, 0x86, 0x13, 0xE7, 0x80, 0x99, 0x1C, 0x56, 0x06, 0x0E, 0x07, 0x59, 0x67, 0x3B, 0x01,
0xF0, 0x4E, 0x7B, 0x0E, 0xE4, 0x34, 0xB4, 0x23, 0x08, 0x2C, 0x11, 0x30, 0x28, 0x82, 0x74, 0x82,
0x43, 0x48, 0xB8, 0x98, 0x40, 0x8A, 0xC1, 0xA1, 0x23, 0x08, 0xCC, 0x8A, 0x46, 0xD2, 0xE0, 0x44,
0x66, 0x11, 0x3C, 0x0E, 0xE1, 0x02, 0x00, 0x6A, 0x6B, 0x60, 0x0F, 0xE4, 0x09, 0x80, 0x1F, 0x20,
0x60, 0x08, 0x80, 0xE8, 0xC7, 0xBD, 0x10, 0x60, 0x04, 0x59, 0x20, 0x64, 0x77, 0x08, 0x00, 0x45,
0x3B, 0x9E, 0x41, 0x0C, 0x67, 0xFA, 0x00, 0x1F, 0x6A, 0xA8, 0x4C, 0x1E, 0xCC, 0x11, 0x0F, 0x83,
0xE4, 0x63, 0x5D, 0xEC, 0x7A, 0xE8, 0x1F, 0x39, 0x34, 0x88, 0x83, 0x28, 0xB1, 0x32, 0x5A, 0xD8,
0xA7, 0x4D, 0x11, 0x70, 0xC3, 0x82, 0xE8, 0x94, 0x7E, 0xE6, 0x6C, 0xD9, 0x40, 0x8E, 0x61, 0x24,
0x86, 0x0E, 0x64, 0xA8, 0x45, 0x1D, 0x48, 0xCE, 0xB2, 0xD0, 0x8D, 0x1E, 0x58, 0xD6, 0xB2, 0xDC,
0xE2, 0x90, 0xA8, 0x7C, 0x49, 0x4B, 0x26, 0x64, 0x33, 0x22, 0xDE, 0x00, 0x86, 0x2E, 0xD0, 0x71,
0x0E, 0x58, 0xD4, 0x2C, 0x21, 0x3D, 0x38, 0xC6, 0x20, 0xB4, 0x40, 0x06, 0x27, 0x0D, 0xC4, 0x1E,
0x5E, 0x18, 0xC2, 0x12, 0xA6, 0x61, 0x40, 0x41, 0xFF, 0x24, 0xD2, 0x20, 0x42, 0xF0, 0x86, 0x48,
0x51, 0xF7, 0x8C, 0x75, 0x20, 0xA0, 0x0B, 0x8E, 0x3D, 0x48, 0xA0, 0xF0, 0x45, 0x05, 0xC2, 0x11,
0xE4, 0x9B, 0x95, 0x09, 0x67, 0x41, 0x0E, 0xC1, 0xBB, 0x24, 0x0D, 0x76, 0x16, 0x39, 0x2D, 0x18,
0x3B, 0x11, 0x7B, 0x26, 0xA5, 0x02, 0xA0, 0x9F, 0x1C, 0x0A, 0x2E, 0x5C, 0x62, 0x05, 0x30, 0x36,
0x62, 0x71, 0x0B, 0xE0, 0x05, 0x2F, 0x17, 0xB2, 0xA0, 0x50, 0x04, 0xB8, 0x62, 0xA0, 0x95, 0xE9,
0x02, 0x47, 0x45, 0xB2, 0x8D, 0x8C, 0x2A, 0x8C, 0x20, 0xBB, 0x30, 0x82, 0x15, 0xAC, 0x31, 0xA7,
0x54, 0xC4, 0x4E, 0x1F, 0xDD, 0x78, 0x05, 0x16, 0x40, 0x75, 0x06, 0x4C, 0xC8, 0x81, 0x43, 0xCE,
0xA0, 0x86, 0x12, 0x7E, 0x85, 0x10, 0x66, 0x64, 0x11, 0x5F, 0x81, 0xD8, 0x6B, 0x65, 0xCA, 0x62,
0x90, 0xCE, 0x29, 0x30, 0x7B, 0x83, 0xF5, 0x45, 0x74, 0x7F, 0xE8, 0x4E, 0x0E, 0x35, 0xC1, 0xB8,
0x00, 0x60, 0x46, 0x63, 0x85, 0xCA, 0x5D, 0x81, 0x74, 0x86, 0x7B, 0xEC, 0x32, 0x23, 0x67, 0x39,
0x94, 0x86, 0xAC, 0x92, 0x04, 0x1C, 0xA0, 0x38, 0x70, 0x5F, 0x0B, 0xE2, 0x8E, 0x6A, 0x04, 0x21,
0x0A, 0x08, 0x50, 0xC5, 0x40, 0x64, 0x41, 0xC4, 0x2B, 0x38, 0x61, 0x10, 0x87, 0x40, 0x03, 0x59,
0x71, 0x91, 0x21, 0x3A, 0x5A, 0x63, 0x1A, 0x52, 0xF0, 0xE3, 0xC2, 0xBC, 0x5B, 0x19, 0x36, 0x28,
0xCA, 0x48, 0x5B, 0xC1, 0x18, 0x20, 0x2F, 0x68, 0x10, 0xE6, 0x56, 0xA6, 0x09, 0x7C, 0x1B, 0x6C,
0x1A, 0x0D, 0x72, 0xD8, 0x4A, 0x56, 0xC6, 0x09, 0x04, 0x24, 0x88, 0x86, 0xB3, 0xCB, 0xE1, 0xCA,
0x44, 0x16, 0x00, 0xFB, 0xA0, 0xA5, 0x12, 0xCC, 0x40, 0xE6, 0x32, 0x9B, 0xB9, 0x0C, 0xF9, 0x81,
0x6A, 0x65, 0xDE, 0xF0, 0x91, 0x68, 0xF8, 0x61, 0xFF, 0x0F, 0x75, 0x80, 0xC3, 0x21, 0xA6, 0xC6,
0x8E, 0x39, 0x7C, 0xE1, 0x0B, 0xE7, 0x3D, 0x88, 0x3C, 0xB6, 0xF6, 0x16, 0x81, 0x00, 0x43, 0x0E,
0x7D, 0xE0, 0x05, 0xDF, 0xCC, 0xA1, 0xB3, 0x76, 0x60, 0x23, 0x19, 0xAC, 0x18, 0x21, 0x02, 0x62,
0x21, 0x0A, 0x04, 0x40, 0x01, 0x0E, 0x73, 0xE8, 0x04, 0x12, 0x05, 0xB2, 0x5B, 0x0E, 0xF5, 0xF2,
0x0F, 0x46, 0xAA, 0xC2, 0x67, 0x91, 0xCB, 0x9B, 0x83, 0xCC, 0x81, 0x43, 0x81, 0x4D, 0x9F, 0x91,
0x8E, 0x31, 0xE1, 0x49, 0x52, 0x17, 0x01, 0x58, 0x2E, 0xC8, 0x96, 0x2B, 0xA3, 0x5D, 0xC8, 0x12,
0xCA, 0x0E, 0x1C, 0x0A, 0x43, 0x3E, 0x76, 0x40, 0x6B, 0x5A, 0x17, 0xA6, 0x1F, 0xFC, 0xD8, 0x41,
0x86, 0xD4, 0x8C, 0x80, 0x39, 0x7C, 0xA4, 0x1B, 0x46, 0x32, 0x42, 0xB5, 0x04, 0x92, 0x83, 0x7C,
0xEC, 0xF3, 0x20, 0x68, 0x95, 0xE5, 0x41, 0xFA, 0xB1, 0x09, 0x0E, 0x19, 0xE1, 0x09, 0x61, 0x00,
0xB1, 0x1F, 0x06, 0xF2, 0x0E, 0x4E, 0x56, 0xE6, 0x2F, 0x00, 0xD8, 0x46, 0x55, 0x11, 0xB0, 0xE2,
0x81, 0x70, 0xFA, 0x09, 0x59, 0x1E, 0xC8, 0x37, 0xAA, 0x5A, 0x87, 0x72, 0x56, 0xC6, 0xB5, 0x86,
0x95, 0xEE, 0x4E, 0x83, 0x18, 0x6E, 0x81, 0xAC, 0x1A, 0x01, 0xAD, 0xE6, 0x90, 0x13, 0xB2, 0xC9,
0x2F, 0x05, 0x8A, 0x8C, 0x20, 0xF4, 0x90, 0x87, 0x3E, 0x0A, 0xC2, 0xEB, 0x72, 0x4F, 0x64, 0x1E,
0xE5, 0x10, 0xB2, 0x41, 0xCC, 0x61, 0x22, 0x23, 0x88, 0xF8, 0x21, 0xAB, 0xA8, 0xCC, 0x82, 0x0A,
0xA2, 0x03, 0x60, 0xDC, 0x22, 0xAE, 0x08, 0x20, 0x82, 0x1E, 0xD8, 0x21, 0x8F, 0x1C, 0xA4, 0xA2,
0x32, 0x48, 0x70, 0x03, 0x18, 0x92, 0x60, 0x84, 0x29, 0xE8, 0x41, 0x14, 0x1E, 0xFE, 0x2B, 0x60,
0x87, 0x3D, 0x29, 0xDC, 0x1D, 0x17, 0x90, 0x08, 0xFF, 0x00, 0x29, 0x41, 0x9A, 0xCD, 0x21, 0x90,
0x8B, 0x9A, 0x43, 0xEC, 0x28, 0xF5, 0x74, 0xAD, 0x8C, 0xEA, 0x76, 0x67, 0x78, 0xC3, 0x03, 0xA1,
0xA7, 0xCE, 0x86, 0x0D, 0x80, 0xAA, 0x71, 0x48, 0xB9, 0xD5, 0x2B, 0xC2, 0x17, 0xEE, 0x00, 0x89,
0x2C, 0xF3, 0xDA, 0x0E, 0x14, 0xE1, 0x57, 0x17, 0x4E, 0x85, 0x0E, 0x42, 0x90, 0xA2, 0x85, 0x02,
0x59, 0x47, 0x24, 0x2A, 0x14, 0x11, 0x3F, 0x9C, 0x5B, 0xDC, 0xCD, 0x28, 0x45, 0x90, 0x10, 0x90,
0x86, 0x50, 0xF8, 0xE2, 0x19, 0x36, 0xAB, 0x4C, 0x4B, 0x75, 0x20, 0x8F, 0x78, 0xF0, 0xFC, 0x14,
0xA0, 0xF2, 0x29, 0x98, 0x59, 0x57, 0x19, 0x2C, 0x84, 0x9B, 0xD3, 0x95, 0x79, 0x44, 0x3C, 0xF2,
0xB1, 0x0D, 0xE3, 0x8D, 0xF2, 0xB6, 0xA0, 0x33, 0x52, 0xCC, 0xA9, 0xAC, 0xEE, 0x53, 0xA7, 0x5A,
0xCB, 0x38, 0x17, 0x88, 0xB9, 0x38, 0x64, 0x0A, 0x6A, 0xA8, 0xE3, 0x68, 0xFA, 0x18, 0xEB, 0x79,
0x54, 0x71, 0xC2, 0x7E, 0xDC, 0xE2, 0xC0, 0x5B, 0xD8, 0xE7, 0xD1, 0x27, 0x92, 0x03, 0x1D, 0x23,
0xE0, 0x12, 0x2F, 0xAF, 0x03, 0x2D, 0xD2, 0x45, 0x11, 0x6E, 0xC0, 0x70, 0x0A, 0x02, 0xA2, 0x07,
0x27, 0xCA, 0x10, 0x87, 0x73, 0x50, 0xC3, 0xBA, 0x03, 0xA1, 0x46, 0x65, 0xE2, 0x00, 0xF5, 0x82,
0x4C, 0x63, 0xA5, 0x95, 0xD9, 0x62, 0x41, 0xA2, 0x91, 0x04, 0x3A, 0x79, 0x1B, 0xE5, 0x18, 0xEF,
0x02, 0xEE, 0x19, 0xFC, 0xF2, 0xCA, 0xEC, 0x3D, 0xDD, 0x14, 0xE6, 0xA9, 0xBC, 0x6D, 0xFE, 0x6E,
0xED, 0x26, 0x3C, 0xD8, 0x08, 0xF8, 0x96, 0x6F, 0xB1, 0xE5, 0x07, 0x45, 0x6B, 0x76, 0x20, 0x93,
0x97, 0x48, 0x0E, 0x20, 0x0E, 0x86, 0xE2, 0xE8, 0xC3, 0xF2, 0xBD, 0xCE, 0xA3, 0x40, 0x84, 0x10,
0x0D, 0xAE, 0x16, 0x84, 0x11, 0xF9, 0xE4, 0xC5, 0xFF, 0x34, 0xF0, 0xC1, 0x03, 0x21, 0xEC, 0xBB,
0x81, 0xBB, 0x7C, 0x26, 0x29, 0x7E, 0xD1, 0x89, 0x63, 0xCC, 0x43, 0xD7, 0xB0, 0x16, 0x17, 0x03,
0x0B, 0x52, 0xE9, 0xCA, 0xA0, 0x53, 0x8D, 0x80, 0xCC, 0x83, 0xE2, 0x41, 0x25, 0x08, 0x79, 0x0E,
0xF6, 0xF7, 0xF8, 0xD6, 0x77, 0x34, 0xF7, 0x77, 0x03, 0x51, 0x7C, 0x61, 0xC7, 0x2E, 0x79, 0x06,
0x00, 0xF8, 0x03, 0x62, 0x57, 0x03, 0x7D, 0xB4, 0x84, 0x74, 0xD2, 0x97, 0x06, 0xE7, 0xE2, 0x33,
0x00, 0x60, 0x0C, 0x07, 0x56, 0x06, 0xE7, 0x90, 0x47, 0x56, 0x37, 0x24, 0x08, 0x01, 0x54, 0x1C,
0x52, 0x04, 0x6E, 0x60, 0x73, 0x03, 0x21, 0x04, 0xD2, 0x50, 0x5A, 0x83, 0xA0, 0x06, 0x4E, 0x04,
0x2A, 0x4A, 0x10, 0x0C, 0xA6, 0xB0, 0x50, 0x08, 0x71, 0x7D, 0x46, 0xC2, 0x04, 0xD1, 0x03, 0x48,
0x9E, 0xD0, 0x0D, 0x6C, 0x87, 0x45, 0xE5, 0x00, 0x27, 0x03, 0x11, 0x0B, 0xA3, 0x76, 0x10, 0x7C,
0xF2, 0x5E, 0x02, 0x01, 0x2B, 0x1C, 0xF2, 0x59, 0xD8, 0x55, 0x19, 0xF9, 0x31, 0x10, 0x9E, 0xC0,
0x2E, 0x9C, 0x40, 0x10, 0xBA, 0x50, 0x2B, 0xEC, 0xF2, 0x05, 0x04, 0x06, 0x7D, 0xEE, 0x85, 0x00,
0x6C, 0x36, 0x11, 0x49, 0x88, 0x00, 0x7A, 0xA0, 0x83, 0xCB, 0xC7, 0x21, 0x5C, 0xC0, 0x07, 0x89,
0x90, 0x09, 0x93, 0x30, 0x21, 0x69, 0x85, 0x10, 0xEA, 0x70, 0x38, 0x5C, 0x20, 0x86, 0x76, 0xC3,
0x51, 0xD4, 0xD0, 0x0D, 0xAE, 0x10, 0x46, 0xA0, 0x52, 0x04, 0x6D, 0xF0, 0x06, 0x76, 0x60, 0x09,
0xE4, 0x00, 0x0A, 0x3B, 0xB0, 0x0E, 0xBA, 0x90, 0x0B, 0xB9, 0xA0, 0x0B, 0xBD, 0xD0, 0x7A, 0x06,
0x21, 0x0F, 0xB8, 0xA0, 0x87, 0xB9, 0x80, 0x0E, 0xDA, 0xC1, 0x69, 0xFF, 0xB1, 0x03, 0xBC, 0xF0,
0x08, 0x7A, 0x10, 0x08, 0xA1, 0xE0, 0x03, 0x07, 0xFF, 0x91, 0x0D, 0x81, 0xA8, 0x0B, 0xBA, 0xC0,
0x73, 0x03, 0x31, 0x0E, 0xBE, 0x90, 0x87, 0xB8, 0xE0, 0x49, 0x03, 0xE1, 0x0C, 0x91, 0xC8, 0x0B,
0xEB, 0x15, 0x04, 0x92, 0x98, 0x0B, 0xB8, 0x80, 0x77, 0x03, 0x81, 0x0C, 0x97, 0xB0, 0x07, 0x7A,
0x00, 0x32, 0x18, 0x26, 0x04, 0xEB, 0xB0, 0x09, 0x81, 0x90, 0x07, 0x7E, 0x70, 0x09, 0xEA, 0xA0,
0x7D, 0x39, 0x10, 0x0C, 0x79, 0xA8, 0x0B, 0xA4, 0x36, 0x11, 0xFC, 0xD0, 0x0C, 0xCB, 0xB0, 0x5E,
0xAF, 0xB0, 0x4D, 0xDC, 0xE3, 0x3D, 0x06, 0x71, 0x07, 0x80, 0x05, 0x0F, 0x00, 0x40, 0x2A, 0x95,
0x21, 0x2C, 0x3B, 0x10, 0x04, 0xAB, 0x90, 0x05, 0x6F, 0x80, 0x05, 0x63, 0x80, 0x06, 0x90, 0x90,
0x0A, 0xC6, 0xF0, 0x0C, 0x74, 0xF4, 0x08, 0xFD, 0x40, 0x2F, 0x1A, 0xC1, 0x69, 0xFF, 0xB4, 0x1A,
0x1E, 0x91, 0x0F, 0xA0, 0x40, 0x64, 0xEC, 0xB2, 0x70, 0x06, 0xA1, 0x07, 0xCB, 0x23, 0x64, 0xEA,
0x60, 0x06, 0x74, 0x70, 0x0F, 0xDB, 0x70, 0x0C, 0xD7, 0x00, 0x0D, 0xF3, 0x80, 0x0D, 0xDF, 0xB0,
0x0F, 0x7E, 0xE8, 0x03, 0xDD, 0x82, 0x0A, 0xBF, 0x06, 0x48, 0xDD, 0xE8, 0x8D, 0xDF, 0xD8, 0x0A,
0x75, 0x50, 0x06, 0x50, 0xB0, 0x52, 0x59, 0xF0, 0x07, 0x9C, 0x67, 0x10, 0xC3, 0x90, 0x08, 0x24,
0x45, 0x10, 0xE3, 0x50, 0x1A, 0xFB, 0x10, 0x0E, 0x7E, 0x68, 0x10, 0x41, 0x60, 0x22, 0x4B, 0xE8,
0x11, 0xDC, 0xC8, 0x8F, 0x22, 0xB1, 0x03, 0xD2, 0x20, 0x0D, 0xAD, 0x60, 0x0E, 0x1F, 0x04, 0x12,
0x60, 0x62, 0x41, 0xF9, 0xC8, 0x21, 0xFB, 0x68, 0x91, 0x46, 0xE1, 0x43, 0x8B, 0xF0, 0x6B, 0x4E,
0xC4, 0x64, 0x24, 0x69, 0x14, 0xE1, 0x90, 0x05, 0xDC, 0xF6, 0x6B, 0x57, 0xC0, 0x04, 0x4C, 0xA0,
0x04, 0x99, 0xB0, 0x92, 0x47, 0xD1, 0x03, 0x2E, 0xFF, 0xF9, 0x39, 0x1E, 0xB1, 0x0F, 0xDD, 0xC0,
0x0D, 0x3E, 0xE9, 0x46, 0x36, 0x39, 0x14, 0xF7, 0x20, 0x05, 0x08, 0x00, 0x81, 0x41, 0x79, 0x94,
0xE2, 0x66, 0x22, 0x55, 0x88, 0x94, 0x32, 0x71, 0x03, 0x04, 0xE1, 0x94, 0x0A, 0x01, 0x95, 0x02,
0x01, 0x95, 0xFF, 0xE0, 0x0F, 0x56, 0x79, 0x11, 0xF7, 0x60, 0x22, 0x6A, 0x60, 0x62, 0x4C, 0xF9,
0x12, 0x2F, 0x90, 0x01, 0x32, 0x00, 0x00, 0x1D, 0xD0, 0x02, 0x00, 0x30, 0x02, 0x2C, 0x00, 0x00,
0x2C, 0xA0, 0x01, 0x30, 0x00, 0x00, 0x12, 0xD0, 0x00, 0x13, 0xB0, 0x02, 0x1C, 0x80, 0x03, 0x00,
0x00, 0x02, 0x29, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x21, 0xF0, 0x01, 0x23, 0x50, 0x03, 0x16, 0x81,
0x0F, 0x19, 0x15, 0x06, 0xDE, 0xD7, 0x95, 0x2C, 0x91, 0x02, 0x17, 0xE0, 0x01, 0x23, 0xE0, 0x94,
0x18, 0x70, 0x02, 0x00, 0x60, 0x02, 0x14, 0xA0, 0x00, 0x2F, 0x80, 0x03, 0x16, 0x40, 0x03, 0x37,
0xC0, 0x00, 0x0D, 0xF0, 0x00, 0x1B, 0x30, 0x01, 0xFF, 0x50, 0x01, 0x22, 0x00, 0x01, 0x11, 0x60,
0x03, 0xFF, 0x70, 0x11, 0x8A, 0x63, 0x06, 0x8E, 0x23, 0x98, 0x31, 0x81, 0x01, 0x14, 0x10, 0x03,
0x02, 0xB1, 0x01, 0x28, 0x00, 0x00, 0x25, 0xB0, 0x00, 0x29, 0xA0, 0x00, 0x2C, 0x70, 0x01, 0x11,
0x00, 0x00, 0x38, 0x90, 0x01, 0x16, 0xC0, 0x97, 0xFE, 0x60, 0x01, 0x19, 0x40, 0x02, 0x34, 0x90,
0x11, 0x13, 0x42, 0x06, 0x81, 0x49, 0x9A, 0x28, 0x71, 0x03, 0x22, 0xD0, 0x01, 0x2A, 0x50, 0x01,
0x2F, 0x00, 0x00, 0x18, 0x60, 0x02, 0x00, 0x40, 0x02, 0x18, 0x00, 0x00, 0x2B, 0xD0, 0x98, 0xBD,
0xB9, 0x98, 0x23, 0x20, 0x10, 0xFE, 0x50, 0x01, 0x24, 0x30, 0x03, 0xDA, 0x29, 0x97, 0x16, 0xF1,
0x5F, 0x85, 0x90, 0x21, 0xC2, 0xC9, 0x12, 0x2F, 0x5C, 0x00, 0x02, 0x13, 0x00, 0x00, 0x2A, 0x10,
0x02, 0x35, 0x70, 0x02, 0x2E, 0x00, 0x00, 0x2D, 0xC0, 0x9C, 0x00, 0xE0, 0x02, 0x0E, 0x20, 0x01,
0x02, 0xE1, 0x02, 0x2B, 0x20, 0x10, 0xFF, 0x40, 0x02, 0x1F, 0x10, 0x02, 0x21, 0x20, 0x02, 0x09,
0x70, 0x11, 0xAC, 0xA0, 0x51, 0xE1, 0x69, 0x93, 0x3B, 0xF0, 0x06, 0x00, 0x18, 0xA0, 0x06, 0x7A,
0xA0, 0x08, 0x9A, 0xA0, 0x0A, 0xBA, 0xA0, 0x0C, 0xDA, 0xA0, 0x0E, 0xFA, 0xA0, 0x10, 0x1A, 0xA1,
0x12, 0x3A, 0xA1, 0x14, 0x5A, 0xA1, 0x16, 0x7A, 0xA1, 0x18, 0x9A, 0xA1, 0x1A, 0xBA, 0xA1, 0x1C,
0xDA, 0xA1, 0x18, 0x1A, 0x10, 0x00, 0x3B,
};
#endif
const char urom_oemlogo_gif[] =
{
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xd2, 0x00, 0x4c, 0x00, 0x80, 0x00, 0x00, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00,
0xd2, 0x00, 0x4c, 0x00, 0x00, 0x02, 0x99, 0x84, 0x8f, 0xa9, 0xcb, 0xed, 0x0f, 0xa3, 0x9c, 0xb4,
0xda, 0x8b, 0xb3, 0xde, 0xbc, 0xfb, 0x0f, 0x86, 0xe2, 0x48, 0x96, 0xe6, 0x89, 0xa6, 0xea, 0xca,
0xb6, 0xee, 0x0b, 0xc7, 0xf2, 0x4c, 0xd7, 0xf6, 0x8d, 0xe7, 0xfa, 0xce, 0xf7, 0xfe, 0x0f, 0x0c,
0x0a, 0x87, 0xc4, 0xa2, 0xf1, 0x88, 0x4c, 0x2a, 0x97, 0xcc, 0xa6, 0xf3, 0x09, 0x8d, 0x4a, 0xa7,
0xd4, 0xaa, 0xf5, 0x8a, 0xcd, 0x6a, 0xb7, 0xdc, 0xae, 0xf7, 0x0b, 0x0e, 0x8b, 0xc7, 0xe4, 0xb2,
0xf9, 0x8c, 0x4e, 0xab, 0xd7, 0xec, 0xb6, 0xfb, 0x0d, 0x8f, 0xcb, 0xe7, 0xf4, 0xba, 0xfd, 0x8e,
0xcf, 0xeb, 0xf7, 0xfc, 0xbe, 0xff, 0x0f, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98,
0xa8, 0xb8, 0xc8, 0xd8, 0xe8, 0xf8, 0x08, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99,
0xa9, 0xb9, 0xc9, 0xd9, 0xe9, 0xf9, 0x09, 0x1a, 0x2a, 0x3a, 0x4a, 0x5a, 0x6a, 0x7a, 0x8a, 0x9a,
0xaa, 0xba, 0xca, 0xda, 0xea, 0xfa, 0x0a, 0x1b, 0x2b, 0x3b, 0x4b, 0x5b, 0x6b, 0x1b, 0x52, 0x00,
0x00, 0x3b,
};
const char urom_del_png[] =
{
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
0x61, 0x00, 0x00, 0x02, 0x31, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x85, 0x93, 0x4f, 0x68, 0x13,
0x41, 0x14, 0xc6, 0xbf, 0xd9, 0x4d, 0x9b, 0x50, 0x8b, 0x2e, 0xb4, 0x12, 0xa8, 0x16, 0x1b, 0x3d,
0x79, 0x16, 0xbd, 0xd4, 0x1a, 0x28, 0xa2, 0x36, 0x22, 0x7a, 0xb0, 0x48, 0x04, 0x43, 0x15, 0x0f,
0x41, 0x7a, 0x90, 0x06, 0xd2, 0x04, 0x5c, 0xaa, 0x35, 0x90, 0xa6, 0xa1, 0x56, 0x04, 0x53, 0x7b,
0x53, 0x82, 0xa9, 0xe2, 0x41, 0xbc, 0x54, 0x50, 0x7a, 0xb0, 0xb4, 0x60, 0x0f, 0x39, 0x4b, 0xe9,
0x51, 0xf1, 0x14, 0x65, 0xd3, 0xfc, 0xd9, 0xa4, 0xe9, 0xee, 0x3a, 0x33, 0x3b, 0x59, 0x1a, 0x35,
0x3a, 0xf0, 0xf1, 0xcd, 0x0e, 0xfb, 0x7e, 0xf3, 0xe6, 0xcd, 0x3c, 0x02, 0xc0, 0x95, 0x59, 0xaf,
0x34, 0xf0, 0x9f, 0x71, 0x67, 0x70, 0x5f, 0x2f, 0xb5, 0xba, 0xd0, 0x2e, 0x95, 0xc5, 0xd6, 0x09,
0x55, 0x47, 0x6a, 0xa5, 0xbc, 0x73, 0xf7, 0x74, 0x07, 0x08, 0x21, 0x7f, 0x0d, 0x9e, 0x5f, 0xdb,
0xe1, 0x3e, 0x39, 0xdc, 0xed, 0xa5, 0x56, 0xa5, 0xaa, 0x51, 0x19, 0x0c, 0xc2, 0x22, 0xdc, 0xea,
0xfb, 0xed, 0x5a, 0xdc, 0xef, 0x6a, 0xbb, 0xfb, 0xcc, 0x27, 0x03, 0x57, 0x8e, 0xbb, 0xf0, 0xf6,
0x4b, 0x03, 0x0f, 0x47, 0xf6, 0x33, 0x48, 0x45, 0x64, 0x62, 0x30, 0x80, 0x67, 0xe2, 0x5d, 0x51,
0x7f, 0x30, 0x2c, 0xb5, 0xcd, 0x60, 0x6a, 0xc5, 0xe4, 0x6e, 0xd9, 0x59, 0xe3, 0xd1, 0xe5, 0x03,
0x07, 0x45, 0x26, 0x75, 0x0e, 0x08, 0xbf, 0xd1, 0xf4, 0xd4, 0x39, 0xd2, 0x16, 0x60, 0x9a, 0xa6,
0x33, 0x8f, 0x7d, 0x04, 0x9e, 0x8d, 0x2a, 0x97, 0xe8, 0x74, 0x8d, 0x65, 0xc2, 0x01, 0x63, 0x4b,
0x9a, 0xfe, 0x78, 0xc4, 0xfe, 0xe1, 0x77, 0x88, 0x65, 0x59, 0x8e, 0x33, 0x50, 0xe4, 0x83, 0x8c,
0xe7, 0x41, 0x65, 0x54, 0x00, 0x4a, 0x6d, 0x01, 0x85, 0x70, 0x18, 0x7d, 0x89, 0x04, 0xea, 0x3d,
0x3d, 0x7f, 0x00, 0x16, 0x4e, 0xfd, 0xc0, 0x77, 0x55, 0xc5, 0xb1, 0x5c, 0xce, 0xcb, 0x01, 0xc1,
0xac, 0xa6, 0x3f, 0xbd, 0x68, 0xf2, 0xe0, 0x26, 0xe0, 0xe7, 0xf8, 0x38, 0x5c, 0x5e, 0x2f, 0xba,
0x87, 0x86, 0x40, 0xfc, 0x7e, 0x07, 0x20, 0x6f, 0x6c, 0xa0, 0x9a, 0xcf, 0xa3, 0xbe, 0xb5, 0x85,
0xa3, 0xd9, 0x6c, 0x90, 0x03, 0xae, 0xbe, 0xd0, 0xf4, 0x85, 0x40, 0xa3, 0x05, 0xc0, 0xbc, 0x18,
0x89, 0xa0, 0xd3, 0xe7, 0x83, 0x7b, 0x60, 0x00, 0x08, 0x04, 0x80, 0xe5, 0x65, 0xec, 0x16, 0x0a,
0xd0, 0x37, 0x37, 0xe1, 0x5b, 0x5c, 0x0c, 0xb1, 0xf2, 0xfc, 0x13, 0xc0, 0x46, 0x2d, 0x93, 0x81,
0x59, 0x2a, 0xc1, 0x2c, 0x97, 0x41, 0x3c, 0x1e, 0xc8, 0x8a, 0x82, 0x3e, 0x55, 0x1d, 0x13, 0xd7,
0xb8, 0xea, 0x1c, 0xe1, 0xc9, 0x85, 0x06, 0x24, 0x49, 0x72, 0x8a, 0xb7, 0xb7, 0x98, 0x95, 0xe9,
0x69, 0x67, 0x1e, 0x3d, 0x71, 0x1f, 0x4b, 0x37, 0x94, 0xeb, 0x74, 0xba, 0xee, 0x14, 0x31, 0x94,
0xd3, 0xf4, 0xf9, 0xf3, 0x46, 0x4b, 0x60, 0xd3, 0xcb, 0xb4, 0x90, 0x64, 0x0f, 0xd8, 0xa2, 0x75,
0xe8, 0x9f, 0x9b, 0xbb, 0x26, 0x6e, 0x61, 0x9b, 0x03, 0x6e, 0xbe, 0x2a, 0xea, 0xe9, 0xb3, 0xad,
0x19, 0xf0, 0x9d, 0x93, 0x49, 0x3b, 0x98, 0xc2, 0xba, 0xa2, 0x51, 0x54, 0x67, 0x67, 0xd9, 0x75,
0xd8, 0x90, 0x74, 0xfa, 0x48, 0x33, 0x03, 0xf7, 0xed, 0xd7, 0xc5, 0x9a, 0x4c, 0xff, 0x93, 0xe8,
0x97, 0x2c, 0xd9, 0x3b, 0x4f, 0x7e, 0x4e, 0xd0, 0x05, 0xfb, 0x75, 0xce, 0x9c, 0x8c, 0xc3, 0x30,
0xe9, 0x2d, 0xd0, 0x27, 0x71, 0x2f, 0x9f, 0xe4, 0x10, 0xd8, 0x90, 0x43, 0xbc, 0x99, 0xa8, 0xba,
0xa8, 0x06, 0x85, 0xb3, 0xa6, 0x90, 0xbe, 0xc5, 0xe3, 0x2f, 0x19, 0xe8, 0x70, 0x32, 0x79, 0x4b,
0x34, 0x0e, 0xeb, 0x40, 0xf6, 0x24, 0xc9, 0xd7, 0x58, 0x2c, 0xc7, 0x20, 0xfd, 0xa9, 0x54, 0x88,
0x88, 0x80, 0x4e, 0x96, 0x89, 0x90, 0x24, 0xc4, 0xc0, 0x67, 0xc4, 0x69, 0x56, 0xa9, 0x1a, 0x02,
0x20, 0x89, 0x18, 0x3f, 0xf3, 0x5f, 0x46, 0x85, 0xdf, 0x10, 0x9f, 0x1d, 0x68, 0x9c, 0x00, 0x00,
0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
};
const char urom_run_png[] =
{
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff,
0x61, 0x00, 0x00, 0x02, 0x7a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x8d, 0x92, 0x5f, 0x48, 0x53,
0x51, 0x18, 0xc0, 0xbf, 0xfb, 0x7f, 0xf3, 0x5e, 0xdd, 0xfa, 0x37, 0x4a, 0x9c, 0x4b, 0x4b, 0x8d,
0xbb, 0xb9, 0x6a, 0x2e, 0x35, 0xb0, 0x07, 0xbd, 0xad, 0x99, 0x51, 0xbd, 0x46, 0xf8, 0x70, 0xcd,
0x5e, 0xd2, 0xbd, 0x18, 0xdc, 0x52, 0x04, 0xc3, 0x82, 0xc0, 0xa7, 0xc2, 0x30, 0xc2, 0x87, 0xd2,
0x87, 0xe8, 0x69, 0x11, 0x19, 0x13, 0xb7, 0x22, 0x25, 0x82, 0xcd, 0x92, 0xf6, 0x90, 0xb8, 0x2c,
0xf5, 0x41, 0x28, 0x66, 0xd6, 0x74, 0xde, 0xe9, 0xee, 0xdc, 0x9f, 0xce, 0xa4, 0x17, 0x5d, 0xda,
0x3e, 0x38, 0xe7, 0x7c, 0xe7, 0x1c, 0xbe, 0xdf, 0x0f, 0xbe, 0x73, 0x30, 0x40, 0x81, 0x6b, 0x71,
0xfc, 0xc0, 0x31, 0x5d, 0xd9, 0x11, 0x7b, 0x49, 0xcd, 0xfb, 0x7b, 0x1f, 0x9e, 0x45, 0x17, 0xa2,
0x32, 0x64, 0x19, 0x58, 0x7a, 0xda, 0x55, 0xa9, 0xd5, 0x55, 0x9d, 0x3f, 0xda, 0x24, 0x5c, 0x39,
0xd9, 0xe1, 0xbc, 0xe3, 0xe9, 0xf0, 0x3e, 0x9e, 0x78, 0x04, 0x31, 0x48, 0x65, 0x0d, 0x38, 0xdc,
0x5a, 0x54, 0x5e, 0x53, 0x6f, 0xbd, 0x61, 0xad, 0x37, 0x36, 0x2a, 0xb1, 0x14, 0xf8, 0x87, 0xbe,
0x0c, 0xbf, 0xec, 0x1c, 0x76, 0x2c, 0xcf, 0x2c, 0xcf, 0x66, 0x05, 0x28, 0xba, 0x6a, 0xe0, 0xab,
0xcf, 0x58, 0x24, 0xb3, 0x8d, 0x17, 0x65, 0x79, 0x0d, 0x68, 0x56, 0x05, 0x72, 0x50, 0x09, 0x79,
0x7a, 0xde, 0xb4, 0xfb, 0x07, 0xfc, 0xfd, 0xff, 0x05, 0x18, 0x9a, 0x0b, 0xf9, 0x4a, 0x9b, 0x45,
0x2a, 0x17, 0x78, 0x31, 0x22, 0x2b, 0x90, 0x48, 0xa6, 0x00, 0xa7, 0x08, 0x50, 0xa9, 0xd4, 0x30,
0x3d, 0x32, 0x3d, 0xec, 0xea, 0x76, 0x39, 0xc2, 0xdf, 0xc2, 0xb3, 0xdb, 0x02, 0x0a, 0x9b, 0xf5,
0xbc, 0x55, 0xb0, 0x48, 0xa6, 0x3a, 0xa3, 0xb8, 0x1a, 0x51, 0x00, 0x52, 0xd8, 0xc6, 0x15, 0x81,
0xe3, 0x90, 0xa7, 0xe1, 0x20, 0xf6, 0x3b, 0x1a, 0x7a, 0x75, 0xd7, 0xd5, 0x3e, 0xf1, 0xe4, 0x53,
0xff, 0x3f, 0x01, 0x7a, 0x04, 0xa8, 0xa8, 0xb3, 0x48, 0xc6, 0x5a, 0x93, 0xa8, 0xac, 0x2a, 0x80,
0x63, 0x38, 0x90, 0x38, 0x01, 0x34, 0x41, 0x02, 0x8d, 0x56, 0x56, 0xcd, 0x40, 0x1e, 0xc7, 0xc2,
0xc7, 0x21, 0xbf, 0xeb, 0xa9, 0xe4, 0x74, 0x2c, 0xcd, 0x2d, 0xcf, 0x6d, 0x02, 0x14, 0x34, 0xe9,
0x79, 0x0b, 0x02, 0x98, 0x05, 0xb3, 0x98, 0x88, 0xae, 0x03, 0x43, 0x50, 0x1b, 0x83, 0x26, 0x08,
0x20, 0x09, 0x1c, 0xe5, 0x04, 0xa8, 0x49, 0x0a, 0xf6, 0xe6, 0x69, 0x21, 0xb2, 0x14, 0x09, 0xb7,
0x9f, 0xed, 0xb9, 0x38, 0xeb, 0x9d, 0x1f, 0xdd, 0x04, 0xb0, 0x0a, 0x56, 0xe9, 0x84, 0xad, 0x42,
0x4c, 0x2a, 0x71, 0x88, 0x63, 0x51, 0x58, 0x83, 0x30, 0x24, 0xf0, 0x28, 0x10, 0x44, 0x1c, 0x18,
0x1a, 0x07, 0x8e, 0xa1, 0x20, 0x3f, 0x67, 0x37, 0x70, 0x8a, 0x0e, 0x3a, 0x6c, 0x0f, 0x2f, 0x05,
0xde, 0xcd, 0xbc, 0x40, 0xa5, 0xca, 0xdf, 0x1e, 0x14, 0xf2, 0xd5, 0x42, 0xa5, 0x64, 0x3c, 0x5d,
0x26, 0xce, 0xcb, 0x73, 0xe8, 0x74, 0x05, 0x68, 0x0a, 0x80, 0xa5, 0x28, 0x60, 0x51, 0xa2, 0x65,
0x19, 0xd0, 0x51, 0x5a, 0x98, 0x7a, 0xfb, 0xf3, 0xf3, 0x60, 0x8b, 0xbb, 0x2d, 0x18, 0xf8, 0xf5,
0x7a, 0xcb, 0x2b, 0x18, 0x78, 0x63, 0x5d, 0xa9, 0xb4, 0xaf, 0x96, 0x13, 0x53, 0xeb, 0x31, 0xc8,
0xa5, 0x19, 0xe0, 0x68, 0x1a, 0x58, 0x86, 0x04, 0x1d, 0xcb, 0x01, 0x26, 0x33, 0xeb, 0xce, 0x2e,
0x5f, 0x9f, 0xa7, 0x77, 0xfc, 0x76, 0x2a, 0x91, 0x0c, 0x65, 0x34, 0xf1, 0x20, 0xfa, 0x07, 0xbc,
0x70, 0x48, 0x2a, 0xb6, 0xef, 0x11, 0xa9, 0x38, 0x86, 0xac, 0x24, 0x68, 0x72, 0xe8, 0x0d, 0x6b,
0x60, 0x74, 0x71, 0x72, 0x00, 0x59, 0x7f, 0x4c, 0x2d, 0x78, 0x76, 0xfc, 0x48, 0xc7, 0xed, 0xa5,
0x92, 0xf1, 0xdc, 0x7e, 0x91, 0x4a, 0x26, 0x91, 0x35, 0x37, 0x6d, 0x8d, 0x3f, 0xef, 0x1a, 0xef,
0x73, 0xf7, 0xfa, 0xba, 0xb7, 0x5a, 0x33, 0x00, 0x25, 0xad, 0xc5, 0xa6, 0xea, 0x06, 0xfe, 0x66,
0x55, 0x43, 0x7e, 0x63, 0x2e, 0xe4, 0x40, 0x60, 0x6c, 0x71, 0x72, 0xf0, 0x9a, 0xbb, 0xed, 0xfb,
0x36, 0xd6, 0x0c, 0x80, 0xd6, 0xa4, 0xc9, 0x3f, 0x75, 0xd9, 0xdc, 0x72, 0xe1, 0xba, 0xb5, 0xd3,
0xd9, 0xe9, 0x7d, 0x30, 0x72, 0xdf, 0x77, 0x6b, 0x27, 0x6b, 0x06, 0x20, 0x1d, 0x94, 0x8a, 0x64,
0xd5, 0x1a, 0x75, 0x41, 0x38, 0xb8, 0xf2, 0x15, 0x6d, 0x93, 0xd9, 0x14, 0xa7, 0xe3, 0x0f, 0x45,
0x42, 0xe0, 0x11, 0xfd, 0x6e, 0x4f, 0x95, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae,
0x42, 0x60, 0x82,
};
#endif