Register - Login
Views: 99376479
Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users
Ranks - Rules/FAQ - Stats - Latest Posts - Color Chart - Smilies
04-23-22 09:19:49 PM
Jul - NO! GO TO STAR! - Identifying the ROM Data New poll - New thread - Thread closed
Next newer thread | Next older thread
GuyPerfect
Catgirl
Level: 68


Posts: 86/1096
EXP: 2663348
For next: 65452

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 10-07-07 11:13:23 PM; last edit by GuyPerfect on 10-18-07 03:11 AM Link
DISCLAIMER:
Do not, in any way, attempt to distribute ROMs or offer to give ROMs to other people. This board does not endorse illegal activity, and it is expressly forbidden to you to partake in it. Make your own backup ROMs using your own, legaly purchased game cartridge. Don't steal from someone else.

Disclaimer out of the way, there's a number of different F-Zero X ROMs out there, many of them hacked versions like most N64 games. You'll often find one ending with a [!] which is a de facto symbol representing "good dump." This level editor will support [!] ROMs and nothing else, so make sure you have an appropriate version.

There are currently seven ROMs for F-Zero X defined by the emulation community. They are as follows:

* F-Zero_X_(J)_[!].z64 - The original Japanese version
* F-Zero_X_(U)_[!].z64 - The North American version
* F-Zero_X_(E)_[!].z64 - The PAL edition; given E for "European"
* F-Zero_X_(J)_[!].v64, F-Zero_X_(U)_[!].v64, F-Zero_X_(E)_[!].v64 - As above, but in V64 format.
* F-Zero_X_Expansion_Kit_(J)_[!].ndd - The Expansoin Kit disk. We'll be using this, but not right now.

The Dr. V64 backup devices for Nintendo 64 have a known quirk in that every pair of bytes is reversed in ROM files made with that technology. That is to say, if normal byte ordering is ABCD, then a V64 ROM would show BADC. This is known as "byte swapping," and is important to take into account when working with N64 games.
__________

If you were to write a program to determine which version of the ROM is being loaded, this is what you'd do:

* F-Zero X is a 16MB ROM. That means that any valid F-Zero X ROM file must be exactly 16,777,216 bytes in length. If it is not, well... it's either not F-Zero X or some modified variant of the ROM that you shouldn't be expected to support.
* Every N64 ROM has an internal name set by, I believe, Nintendo themselves when a game was published. The name is located at byte 0x20 in the ROM and is 20 bytes long. Now, that first one's a hexadecimal 20 and the second one's a decimal 20. Don't get them confused. F-Zero X's internal name is "F-ZERO X" padded with 12 spaces at the end. If that's the string you found in the ROM, it's Z64 format. If it shows up as "-FEZORX ", then it's V64 format and every two bytes swap position with each other.
* At offset 0x3E in the ROM for Z64, and 0x3F for V64, is a single byte specifying which region the game was targeted to. It's a single, ASCII character to make life easier. Technically, it's part of the game's identifier code, but that one character is all we need to determine version. "J" is Japan, "E" is North America (English), and "P" is PAL. This may seem like a trivial piece of information, but each version of the ROM has data in different spots, so it's a crucial bit of knowledge if you want to get anywhere.
__________

What we'll need to do first thing before we can do anything else is to have a function that can load a ROM file into memory. If anyone has experience in programming, this is what I want, programmed in C. Keep in mind that it must be your own work and will be licensed under the project's license.




Since I botched up the code request by not thinking it through well enough, I'll give you guys a freebie and post a definition of that function right now:

--Code moved to later post--




So then... Next, we'll need a function that can identify the ROM version. It should check file size, ROM name string, ID region character and byte ordering (V64 or otherwise) as described earlier in this post.

Function prototype:
char fzxROMVersion(unsigned char *ROMData, unsigned long ROMSize)
ROMData - Pointer to the ROM data in memory.
ROMSize - Size of the ROM file in bytes.

Description:
Checks ROM data to determine version and format of F-Zero X, if any.

Return value:
Returns a pre-defined code designating the detected version of F-Zero X. J, U and P specify Japanese, North American and PAL versions, respectively. Z and V specify normal byte ordering (Z64) and byte-swapped (V64) respectively.

Symbol Value
FZX_VER_NotFZX 0
FZX_VER_JZ 1
FZX_VER_UZ 2
FZX_VER_PZ 3
FZX_VER_JV 4
FZX_VER_UV 5
FZX_VER_PV 6
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 1263/5390
EXP: 29050217
For next: 284788

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 332 days
Last activity: 332 days

Posted on 10-08-07 07:59:52 AM Link
JL2 - Post #1263 - 10-08-07 02:59:52 AM
Day 77, rank 7; Level 39 (73.8%)
25323/34324 (395770/404771)
GPP: 470; GT: 33.945
Originally posted by GuyPerfect
FZX_VER_NotFZX
Might I suggest FZX_VER_INVALID? It seems more logical and you keep the uppercase that way.

____________________
GuyPerfect
Catgirl
Level: 68


Posts: 89/1096
EXP: 2663348
For next: 65452

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 10-08-07 11:21:15 PM; last edit by GuyPerfect on 10-18-07 03:11 AM Link
I was going for concision. I settled on FZX_VER_BAD since then.

But why would someone like you comment on the name of a constant instead of provide a definition for the function I described?

Anyways, I did. It's below. For anyone reading this, if you have programming experience or know anyone who does, it'll be great to get some more people coding in this project. We don't need a whole convention center's worth, but I don't want to end up being the only one.



The promised definition:

--Code moved to later post--



The next one should be fairly easy. If a ROM is in V64 byte ordering, we'll need to clear it up to make it good data. So we'll need a function to do that, as follows:

Function prototype:
void fzxByteSwap(unsigned char *ROMData, unsigned long ROMSize);
ROMData - Pointer to the location in memory where the ROM data was loaded
ROMSize - Size of the ROM specified by ROMData

Description:
Byte-swaps a ROM loaded in memory. Data is swapped in 16-bit units, where the two bytes of each unit are replaced with the other. For example, "ABCD" will become "BADC".
smkdan
User
Level: 12


Posts: 4/21
EXP: 7061
For next: 860

Since: 07-28-07


Since last post: 13.0 years
Last activity: 13.2 years

Posted on 10-13-07 01:06:29 PM Link
I'll bite.

void fzxByteSwap(unsigned char *ROMData, unsigned long ROMSize)
{
int index = 0;
unsigned char temp1, temp2;

while(index < ROMSize)
{
temp1 = ROMData[index];
temp2 = ROMData[index +1];

ROMData[index] = temp2;
ROMData[index +1] = temp1;

index +=2;
}
}


The tabs don't show but it's so small you don't really need them.
Rena
I had one (1) message in Discord deleted and proceeded to make a huge, huge mess about how it was a violation of free speech and how moderators are supposed to be spam janitors and nobody should have the right to tell me not to talk about school shootings
Level: 135


Posts: 1306/5390
EXP: 29050217
For next: 284788

Since: 07-22-07

Pronouns: he/him/whatever
From: RSP Segment 6

Since last post: 332 days
Last activity: 332 days

Posted on 10-13-07 10:29:56 PM; last edit by HyperHacker on 10-13-07 10:31 PM Link
JL2 - Post #1306 - 10-13-07 05:29:56 PM
Day 83, rank 7; Level 40 (71.5%)
26120/36538 (430891/441309)
GPP: 494; GT: 33.426
Optimization go!
void fzxByteSwap(unsigned char *ROMData, unsigned long ROMSize)
{
unsigned int index = 0;
unsigned char temp;

while(index < ROMSize)
{
temp = ROMData[index];
ROMData[index] = ROMData[index + 1];
ROMData[index + 1] = temp;
index += 2;
}
}


____________________
GuyPerfect
Catgirl
Level: 68


Posts: 106/1096
EXP: 2663348
For next: 65452

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 10-13-07 11:50:28 PM; last edit by GuyPerfect on 10-18-07 03:12 AM Link
Excellent. Good to see some other people stepped up to the plate. What we have here is exactly what I wanted to have happen all along. smkdan, you posted a function that you created, which shows that you have an understanding of what needs to be done. HyperHacker, you shared an insight about the code so that smkdan and others can see how they may improve. That's the kind of thing I want to see in this project.

My personal version of this function used a For loop, but at the end of the day, it's the same net effect. Note: I've changed the spacing and positioning of the { braces to conform to the style I used in earlier snippits. If this becomes an issue, we may discuss it. But for the sake of consistency, I've put the {'s at the ends of the previous lines.

If anyone's curious how I post these code blocks, I use some custom HTML formatting inside tags.

--Code moved to later post--



Okay then. With the ability to load a ROM file from hard disk into memory, check the loaded data to see if it can be identified as F-Zero X, and the ability to byte-swap the data if it's detected as being in V64 format, we're just about done.

There are various hacked versions of the game out there, and anyone doing his own hacking can easily created a hacked version himself. Since this level editor will be built specifically to work with the original ROM data as it came from Nintendo, we'll need to run one last check to make sure we aren't using modified ROMs. This check will be a simple pass of the CRC-32 algorithm.

I won't ask you guys to implement the CRC check, as code for the algorithm tends to be complicated and uses a pre-defined list of lookup values that take up unnecessary source file space. I have code that can generate the tables as well as calculate the checksum all in just a few lines, so I'll be implementing this myself.

If anyone has some super-awesome idea for this, however, go ahead and say so.




EDIT:
I've got the CRC code ready. Call fzxCRC() with the pointer to the ROM data and it will calculate its CRC. ROM data must be normal byte ordering, so byte-swap if it's V64. fzxCRC() will call crcGenTable() as well as crcCalculate(). The CRC code I provided here can easily be modified to give header checksum calculators in Nintendo DS ROMs, so it's an added bonus.

--Code moved to later post



Okay, then. All we need now is one more function and we'll be done with identification.

Functon prototype:
char fzxCheckROM(unsigned char *ROMData, char Version);
ROMData - Pointer in memory to the ROM data. Is assumed to be 0x1000000 bytes.
Version - Value returned by fzxROMVersion()

Description:
Detects if an F-Zero X ROM is an original dump or a hack, and returns the version of the data. The following CRCs will be used to identify ROMs:
FZX_CRC_J 0x6B1CEF83
FZX_CRC_U 0x0B561FBA
FZX_CRC_P 0x2D6F7E8B


Return Value:
Function returns a predefined value that identifies the data in the ROM. Possible return values are the following:
FZX_ROM_BAD 0
FZX_ROM_J 1
FZX_ROM_U 2
FZX_ROM_P 3
FZX_ROM_HACK 4


Remarks:
If the ROM data is detected as being in V64 format, it must be byte-swapped before this function is called.
paulguy

Green Birdo
Level: 93


Posts: 7/2294
EXP: 8025296
For next: 27514

Since: 09-14-07

From: Buffalo, NY

Since last post: 9.7 years
Last activity: 9.6 years

Posted on 10-18-07 12:32:30 AM; last edit by paulguy on 10-18-07 12:32 AM Link
I'm not so good at coding and this may contain typos but here's my attempt:



char fzxCheckROM(unsigned char *ROMData, char Version) {
switch(Version) {
case FZX_VER_BAD:
return FZX_ROM_BAD;
case FZX_VER_JZ:
case FZX_VER_JV:
if(fzxCRC(ROMData) == 0x6B1CEF83) {
return FZX_ROM_J;
} else {
return FZX_ROM_HACK;
}
case FZX_VER_UZ:
case FZX_VER_UV:
if(fzxCRC(ROMData) == 0x0B561FBA) {
return FZX_ROM_U;
} else {
return FZX_ROM_HACK;
}
case FZX_VER_PZ:
case FZX_VER_PV:
if(fzxCRC(ROMData) == 0x2D6F7E8B) {
return FZX_ROM_P;
} else {
return FZX_ROM_HACK;
}
}
}
}

GuyPerfect
Catgirl
Level: 68


Posts: 117/1096
EXP: 2663348
For next: 65452

Since: 07-23-07


Since last post: 1.6 years
Last activity: 210 days

Posted on 10-18-07 03:12:27 AM Link
Excellent. By using a switch statement, you were able to cut out most of the overhead that wasn't required for any given version of the ROM. The only thing I changed here, other than some spacing considerations, was that I removed the check for FZX_VER_BAD and simply stuck a "return FZX_VER_BAD" at the end of the function. Always be sure to have a function returning a value.



I've removed all of my other code postings, and have merged them all into this post. What I have here is something that you can use to compile your own F-Zero X ROM identifier! I've structured it so that it can be used as a sort of API for the project.

I've got three files here.

fzxROM.h
// Data ID constants

#define FZX_ROM_BAD 0
#define FZX_ROM_J 1
#define FZX_ROM_U 2
#define FZX_ROM_P 3
#define FZX_ROM_HACK 4

// ROM version/format constants
#define FZX_VER_BAD 0
#define FZX_VER_JZ 1
#define FZX_VER_UZ 2
#define FZX_VER_PZ 3
#define FZX_VER_JV 4
#define FZX_VER_UV 5
#define FZX_VER_PV 6

// Function prototypes
void fzxByteSwap(unsigned char *, unsigned long);
char fzxCheckROM(unsigned char *, char);
unsigned char *fzxLoadROM(char *, unsigned long *);
char fzxROMVersion(unsigned char *, unsigned long);


fzxROM.c
// Includes

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "fzxROM.h"

// CRCs
#define FZX_CRC_J 0x6B1CEF83
#define FZX_CRC_U 0x0B561FBA
#define FZX_CRC_P 0x2D6F7E8B

// Generates a CRC 8-bit lookup table
void crcGenTable(unsigned int *CRCTable, unsigned int Poly) {
unsigned int A, B, Reg;

// Cycle through indexes
for (A = 0; A < 256; A++) {
Reg = A;

// Cycle through bits
for (B = 0; B < 8; B++) {
if (Reg & 1) // Shift and XOR with mask
Reg = (Reg >> 1) ^ Poly;
else // Just shift right
Reg >>= 1;
}

// Set value in table
CRCTable[A] = Reg;
}

return;
}

// Calculate the CRC of a range of bytes
unsigned int crcCalculate(unsigned char *Buff, unsigned long Leng,
unsigned int *Lookup) {
unsigned int CRC = 0xFFFFFFFF; // 0xFFFF for NDS CRC-16
unsigned long I;

// Process bytes of input data
for (I = 0; I < Leng; I++)
// HighBytes XOR Lookup[LowByte XOR Input]
CRC = (CRC >> 8) ^ Lookup[(CRC & 0xFF) ^ Buff[
I]];

return CRC ^ 0xFFFFFFFF; // Omit the XOr operation for NDS CRC-16.
}

// Calculates the CRC of an F-Zero X ROM
unsigned int fzxCRC(unsigned char *ROMData) {
unsigned int Lookup[256];

// Generate the lookup table.
// This should ideally be done once and with a global array.

crcGenTable(Lookup, 0xEDB88320); // 0x04C11DB7 backwards in binary
//CRCGenTable(Lookup, 0xA001); // 0x8005 for CRC-16

// Caluclate the CRC

return crcCalculate(ROMData, 0x1000000, Lookup);
}

// Byte-swaps a ROM
void fzxByteSwap(unsigned char *ROMData, unsigned long ROMSize) {
unsigned long index = 0;
unsigned char temp;

// Swap bytes in pairs
while (index < ROMSize) {
temp = ROMData[index];
ROMData[index] = ROMData[index + 1];
ROMData[index + 1] = temp;
index += 2;
}

return;
}

// Checks a ROM for hackage
char fzxCheckROM(unsigned char *ROMData, char Version) {
switch (Version) {

// Check for Japanese version
case FZX_VER_JZ: case FZX_VER_JV:
if (fzxCRC(ROMData) == FZX_CRC_J)
return FZX_ROM_J;
else
return FZX_ROM_HACK;

// Check for North American version
case FZX_VER_UZ: case FZX_VER_UV:
if (fzxCRC(ROMData) == FZX_CRC_U)
return FZX_ROM_U;
else
return FZX_ROM_HACK;

// Check for PAL version
case FZX_VER_PZ: case FZX_VER_PV:
if (fzxCRC(ROMData) == FZX_CRC_P)
return FZX_ROM_P;
else
return FZX_ROM_HACK;
}

// Everything else
return FZX_ROM_BAD;
}

// Reads the contents of a file into memory
unsigned char *fzxLoadROM(char *Filename, unsigned long *FileSize) {
FILE *FilePtr = NULL;
unsigned char *Buffer;

// Open the file
FilePtr = fopen(Filename, "rb");
if (FilePtr == NULL)
return NULL;

// Seek to the end of the file
if (fseek(FilePtr, 0, SEEK_END))
{ fclose(FilePtr); return NULL; }

// Get the file size
*FileSize = ftell(FilePtr);
if (!*FileSize) // Bad file size
{ fclose(FilePtr); return NULL; }

// Seek back to the beginning of the file
if (fseek(FilePtr, 0, SEEK_SET))
{ fclose(FilePtr); return NULL; }

// Allocate the memory
Buffer = malloc(*FileSize);
if (Buffer == NULL)
{ fclose(FilePtr); return NULL; }

// Read the data from the file into the memory
if (!fread(Buffer, 1, *FileSize, FilePtr))
{ free(Buffer); fclose(FilePtr); return NULL; }

// Close the file and exit
fclose(FilePtr);
return Buffer;
}

// Detects the version and format of an F-Zero X ROM
char fzxROMVersion(unsigned char *ROMData, unsigned long ROMSize) {
char NameString[21] = "";
char Temp = 0, V = 0;

// Check ROM size
if (ROMSize != 0x1000000)
return FZX_VER_BAD;

// Check ROM name string
strncpy(NameString, &(ROMData[0x20]), 20);
if (!strcmp(NameString, "F-ZERO X ")) Temp = 4; // Z64
if (!strcmp(NameString, "-FEZORX ")) Temp = 3; // V64
if (!Temp) // Name string invalid
return FZX_VER_BAD;

// Get region ID
V = Temp & 3;
if (!V) Temp = ROMData[0x3E]; // Z64
else Temp = ROMData[0x3F]; // V64

// Check region ID
switch (Temp) {
case 'J': return FZX_VER_JZ + V;
case 'E': return FZX_VER_UZ + V;
case 'P': return FZX_VER_PZ + V;
}

// Bad region ID if we get here
return FZX_VER_BAD;
}


Driver.c
#include <stdio.h>

#include <stdlib.h>
#include "fzxROM.h"

int main(int argc, char **argv) {
unsigned char *ROM = NULL;
unsigned long ROMSize;
char Version;

// Display usage if incorrect format
if (argc != 2) {
printf("Usage: fzxROM <filename>\n");
return 0;
}

// Load the ROM
ROM = fzxLoadROM(argv[1], &ROMSize);
if (ROM == NULL) {
printf("Error loading file.\n");
return 1;
}

// Like a loading screen, but not quite
printf("ROM Version: ...\rROM Version: ");

// Get ROM version and byte-swap data if need be
Version = fzxROMVersion(ROM, ROMSize);
if (Version > FZX_VER_PZ)
fzxByteSwap(ROM, ROMSize);
Version = fzxCheckROM(ROM, Version);

// Deallocate the memory
free(ROM);

// Output ROM version
switch (Version) {
case FZX_ROM_BAD: printf("(Not F-Zero X)\n"); break;
case FZX_ROM_J: printf("Japanese\n"); break;
case FZX_ROM_U: printf("North American\n"); break;
case FZX_ROM_P: printf("PAL\n"); break;
case FZX_ROM_HACK: printf("(Hacked ROM)\n"); break;
}

return 0;
}
Next newer thread | Next older thread
Jul - NO! GO TO STAR! - Identifying the ROM Data New poll - New thread - Thread closed


Rusted Logic

Acmlmboard - commit 47be4dc [2021-08-23]
©2000-2022 Acmlm, Xkeeper, Kaito Sinclaire, et al.

31 database queries, 3 query cache hits.
Query execution time:  0.087655 seconds
Script execution time:  0.038639 seconds
Total render time:  0.126293 seconds


TidyHTML vomit below
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 2 column 300 - Warning: unescaped & or unknown entity "&page"
line 119 column 11 - Warning: <form> isn't allowed in <table> elements
line 118 column 10 - Info: <table> previously mentioned
line 120 column 11 - Warning: missing <tr>
line 120 column 119 - Warning: missing </font> before </td>
line 124 column 16 - Warning: plain text isn't allowed in <tr> elements
line 120 column 11 - Info: <tr> previously mentioned
line 125 column 68 - Warning: missing </nobr> before </td>
line 141 column 68 - Warning: missing </nobr> before <tr>
line 147 column 35 - Warning: missing <tr>
line 147 column 50 - Warning: missing </font> before </td>
line 148 column 37 - Warning: unescaped & or unknown entity "&id"
line 147 column 188 - Warning: missing </font> before </table>
line 149 column 35 - Warning: missing <tr>
line 149 column 50 - Warning: missing </font> before </td>
line 149 column 91 - Warning: missing </font> before </table>
line 156 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 158 column 9 - Warning: missing <tr>
line 176 column 13 - Warning: missing <tr>
line 226 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 228 column 9 - Warning: missing <tr>
line 246 column 13 - Warning: missing <tr>
line 249 column 84 - Warning: <style> isn't allowed in <td> elements
line 249 column 9 - Info: <td> previously mentioned
line 253 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 255 column 9 - Warning: missing <tr>
line 273 column 13 - Warning: missing <tr>
line 299 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 301 column 9 - Warning: missing <tr>
line 319 column 13 - Warning: missing <tr>
line 344 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 346 column 9 - Warning: missing <tr>
line 364 column 13 - Warning: missing <tr>
line 367 column 84 - Warning: <style> isn't allowed in <td> elements
line 367 column 9 - Info: <td> previously mentioned
line 384 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 386 column 9 - Warning: missing <tr>
line 404 column 13 - Warning: missing <tr>
line 456 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 458 column 9 - Warning: missing <tr>
line 476 column 13 - Warning: missing <tr>
line 513 column 9 - Warning: <div> isn't allowed in <table> elements
line 152 column 17 - Info: <table> previously mentioned
line 515 column 9 - Warning: missing <tr>
line 533 column 13 - Warning: missing <tr>
line 566 column 2278 - Warning: replacing unexpected i with </i>
line 740 column 11107 - Warning: discarding unexpected </font>
line 758 column 11978 - Warning: unescaped & or unknown entity "&ROMSize"
line 789 column 17 - Warning: missing <tr>
line 789 column 17 - Warning: discarding unexpected <table>
line 792 column 35 - Warning: missing <tr>
line 792 column 50 - Warning: missing </font> before </td>
line 792 column 91 - Warning: missing </font> before </table>
line 794 column 35 - Warning: missing <tr>
line 794 column 50 - Warning: missing </font> before </td>
line 795 column 37 - Warning: unescaped & or unknown entity "&id"
line 794 column 188 - Warning: missing </font> before </table>
line 796 column 17 - Warning: discarding unexpected </textarea>
line 796 column 28 - Warning: discarding unexpected </form>
line 796 column 35 - Warning: discarding unexpected </embed>
line 796 column 43 - Warning: discarding unexpected </noembed>
line 796 column 53 - Warning: discarding unexpected </noscript>
line 796 column 64 - Warning: discarding unexpected </noembed>
line 796 column 74 - Warning: discarding unexpected </embed>
line 796 column 82 - Warning: discarding unexpected </table>
line 796 column 90 - Warning: discarding unexpected </table>
line 798 column 9 - Warning: missing </font> before <table>
line 810 column 25 - Warning: discarding unexpected </font>
line 819 column 57 - Warning: discarding unexpected </font>
line 797 column 1 - Warning: missing </center>
line 120 column 63 - Warning: <img> lacks "alt" attribute
line 125 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 125 column 93 - Warning: <img> lacks "alt" attribute
line 141 column 19 - Warning: <td> attribute "width" has invalid value "120px"
line 141 column 98 - Warning: <img> lacks "alt" attribute
line 148 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 148 column 216 - Warning: <img> proprietary attribute value "absmiddle"
line 161 column 22 - Warning: <img> lacks "alt" attribute
line 161 column 63 - Warning: <img> lacks "alt" attribute
line 161 column 112 - Warning: <img> lacks "alt" attribute
line 161 column 162 - Warning: <img> lacks "alt" attribute
line 172 column 15 - Warning: <img> lacks "alt" attribute
line 231 column 23 - Warning: <img> lacks "alt" attribute
line 231 column 64 - Warning: <img> lacks "alt" attribute
line 231 column 113 - Warning: <img> lacks "alt" attribute
line 231 column 163 - Warning: <img> lacks "alt" attribute
line 242 column 15 - Warning: <img> lacks "alt" attribute
line 250 column 4324 - Warning: <img> lacks "alt" attribute
line 258 column 22 - Warning: <img> lacks "alt" attribute
line 258 column 63 - Warning: <img> lacks "alt" attribute
line 258 column 112 - Warning: <img> lacks "alt" attribute
line 258 column 162 - Warning: <img> lacks "alt" attribute
line 269 column 15 - Warning: <img> lacks "alt" attribute
line 278 column 271 - Warning: <img> proprietary attribute value "absmiddle"
line 278 column 271 - Warning: <img> lacks "alt" attribute
line 304 column 22 - Warning: <img> lacks "alt" attribute
line 304 column 63 - Warning: <img> lacks "alt" attribute
line 304 column 112 - Warning: <img> lacks "alt" attribute
line 304 column 162 - Warning: <img> lacks "alt" attribute
line 315 column 15 - Warning: <img> lacks "alt" attribute
line 349 column 23 - Warning: <img> lacks "alt" attribute
line 349 column 64 - Warning: <img> lacks "alt" attribute
line 349 column 113 - Warning: <img> lacks "alt" attribute
line 349 column 163 - Warning: <img> lacks "alt" attribute
line 360 column 15 - Warning: <img> lacks "alt" attribute
line 381 column 4501 - Warning: <img> lacks "alt" attribute
line 389 column 22 - Warning: <img> lacks "alt" attribute
line 389 column 63 - Warning: <img> lacks "alt" attribute
line 389 column 112 - Warning: <img> lacks "alt" attribute
line 389 column 162 - Warning: <img> lacks "alt" attribute
line 400 column 15 - Warning: <img> lacks "alt" attribute
line 460 column 11 - Warning: <img> lacks "alt" attribute
line 461 column 22 - Warning: <img> lacks "alt" attribute
line 461 column 63 - Warning: <img> lacks "alt" attribute
line 461 column 112 - Warning: <img> lacks "alt" attribute
line 461 column 161 - Warning: <img> lacks "alt" attribute
line 462 column 11 - Warning: <img> lacks "alt" attribute
line 472 column 15 - Warning: <img> lacks "alt" attribute
line 518 column 22 - Warning: <img> lacks "alt" attribute
line 518 column 63 - Warning: <img> lacks "alt" attribute
line 518 column 112 - Warning: <img> lacks "alt" attribute
line 518 column 162 - Warning: <img> lacks "alt" attribute
line 529 column 15 - Warning: <img> lacks "alt" attribute
line 544 column 804 - Warning: <td> attribute "bgcolor" had invalid value "FFFFFF" and has been replaced
line 544 column 828 - Warning: <font> attribute "color" had invalid value "000000" and has been replaced
line 544 column 847 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 545 column 897 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 546 column 951 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 547 column 1005 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 548 column 1059 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 549 column 1113 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 551 column 1172 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 552 column 1233 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 553 column 1286 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 554 column 1339 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 555 column 1392 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 556 column 1445 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 557 column 1498 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 558 column 1551 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 560 column 1608 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 561 column 1660 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 561 column 1703 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 561 column 1746 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 562 column 1791 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 562 column 1834 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 562 column 1877 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 563 column 1913 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 563 column 1965 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 563 column 1999 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 564 column 2046 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 564 column 2091 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 564 column 2134 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 566 column 2254 - Warning: <td> attribute "bgcolor" had invalid value "FFFFFF" and has been replaced
line 566 column 2278 - Warning: <font> attribute "color" had invalid value "000000" and has been replaced
line 566 column 2297 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 567 column 2338 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 568 column 2389 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 569 column 2441 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 570 column 2493 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 572 column 2546 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 573 column 2583 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 574 column 2643 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 575 column 2703 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 577 column 2767 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 578 column 2834 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 578 column 2877 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 578 column 2927 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 579 column 2981 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 581 column 3046 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 582 column 3104 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 585 column 3201 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 586 column 3260 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 587 column 3327 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 587 column 3366 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 589 column 3478 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 589 column 3517 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 593 column 3629 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 597 column 3727 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 600 column 3777 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 601 column 3847 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 601 column 3899 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 601 column 3946 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 602 column 4021 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 603 column 4078 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 603 column 4135 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 604 column 4193 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 606 column 4247 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 607 column 4311 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 608 column 4375 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 611 column 4525 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 611 column 4576 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 614 column 4656 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 615 column 4726 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 615 column 4772 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 616 column 4831 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 618 column 4894 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 620 column 5058 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 624 column 5218 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 627 column 5305 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 628 column 5354 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 628 column 5397 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 628 column 5447 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 629 column 5505 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 630 column 5563 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 632 column 5620 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 633 column 5676 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 640 column 5891 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 643 column 5937 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 644 column 5994 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 644 column 6037 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 644 column 6087 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 645 column 6136 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 647 column 6192 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 648 column 6255 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 648 column 6298 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 649 column 6352 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 650 column 6427 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 651 column 6482 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 652 column 6528 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 654 column 6586 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 655 column 6655 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 655 column 6698 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 656 column 6752 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 657 column 6827 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 658 column 6882 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 659 column 6928 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 661 column 6986 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 662 column 7044 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 662 column 7087 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 663 column 7141 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 664 column 7216 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 665 column 7271 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 666 column 7317 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 669 column 7384 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 670 column 7436 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 673 column 7494 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 674 column 7567 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 674 column 7619 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 674 column 7661 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 676 column 7750 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 678 column 7810 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 680 column 7900 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 681 column 7958 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 683 column 8009 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 684 column 8073 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 685 column 8162 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 687 column 8214 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 689 column 8303 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 689 column 8345 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 690 column 8418 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 692 column 8470 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 693 column 8545 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 694 column 8634 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 696 column 8686 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 698 column 8777 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 699 column 8853 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 701 column 8905 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 702 column 8985 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 703 column 9098 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 705 column 9150 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 707 column 9234 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 710 column 9287 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 711 column 9369 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 711 column 9414 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 711 column 9464 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 712 column 9522 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 713 column 9581 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 715 column 9640 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 716 column 9691 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 717 column 9754 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 719 column 9811 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 721 column 9919 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 721 column 10004 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 722 column 10044 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 722 column 10129 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 723 column 10169 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 723 column 10206 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 724 column 10266 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 726 column 10323 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 728 column 10394 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 728 column 10450 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 729 column 10490 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 729 column 10546 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 731 column 10590 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 732 column 10642 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 733 column 10695 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 733 column 10731 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 734 column 10791 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 734 column 10827 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 735 column 10887 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 735 column 10923 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 738 column 10992 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 739 column 11057 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 742 column 11186 - Warning: <td> attribute "bgcolor" had invalid value "FFFFFF" and has been replaced
line 742 column 11210 - Warning: <font> attribute "color" had invalid value "000000" and has been replaced
line 742 column 11229 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 743 column 11280 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 744 column 11332 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 746 column 11385 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 746 column 11420 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 746 column 11456 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 747 column 11504 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 748 column 11564 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 749 column 11620 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 751 column 11671 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 752 column 11741 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 754 column 11847 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 757 column 11903 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 759 column 11996 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 761 column 12096 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 764 column 12152 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 767 column 12279 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 769 column 12407 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 773 column 12552 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 776 column 12632 - Warning: <font> attribute "color" had invalid value "007F00" and has been replaced
line 777 column 12687 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 778 column 12743 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 778 column 12816 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 779 column 12860 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 779 column 12933 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 780 column 12977 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 780 column 13050 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 781 column 13094 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 781 column 13167 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 782 column 13211 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 782 column 13284 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 785 column 13337 - Warning: <font> attribute "color" had invalid value "0000FF" and has been replaced
line 795 column 44 - Warning: <img> proprietary attribute value "absmiddle"
line 795 column 142 - Warning: <img> proprietary attribute value "absmiddle"
line 795 column 216 - Warning: <img> proprietary attribute value "absmiddle"
line 804 column 25 - Warning: <img> lacks "alt" attribute
line 809 column 267 - Warning: <img> lacks "alt" attribute
line 149 column 50 - Warning: trimming empty <font>
line 411 column 944 - Warning: trimming empty <pre>
line 789 column 17 - Warning: trimming empty <tr>
line 792 column 50 - Warning: trimming empty <font>
line 125 column 68 - Warning: <nobr> is not approved by W3C
line 141 column 68 - Warning: <nobr> is not approved by W3C
line 177 column 27 - Warning: <nobr> is not approved by W3C
line 247 column 27 - Warning: <nobr> is not approved by W3C
line 274 column 27 - Warning: <nobr> is not approved by W3C
line 320 column 27 - Warning: <nobr> is not approved by W3C
line 365 column 27 - Warning: <nobr> is not approved by W3C
line 405 column 27 - Warning: <nobr> is not approved by W3C
line 477 column 27 - Warning: <nobr> is not approved by W3C
line 534 column 27 - Warning: <nobr> is not approved by W3C
Info: Document content looks like HTML5
Info: No system identifier in emitted doctype
Tidy found 343 warnings and 0 errors!


The alt attribute should be used to give a short description
of an image; longer descriptions should be given with the
longdesc attribute which takes a URL linked to the description.
These measures are needed for people using non-graphical browsers.

For further advice on how to make your pages accessible
see http://www.w3.org/WAI/GL.
You are recommended to use CSS to specify the font and
properties such as its size and color. This will reduce
the size of HTML files and make them easier to maintain
compared with using <FONT> elements.

You are recommended to use CSS to control line wrapping.
Use "white-space: nowrap" to inhibit wrapping in place
of inserting <NOBR>...</NOBR> into the markup.

About HTML Tidy: https://github.com/htacg/tidy-html5
Bug reports and comments: https://github.com/htacg/tidy-html5/issues
Official mailing list: https://lists.w3.org/Archives/Public/public-htacg/
Latest HTML specification: http://dev.w3.org/html5/spec-author-view/
Validate your HTML documents: http://validator.w3.org/nu/
Lobby your company to join the W3C: http://www.w3.org/Consortium

Do you speak a language other than English, or a different variant of
English? Consider helping us to localize HTML Tidy. For details please see
https://github.com/htacg/tidy-html5/blob/master/README/LOCALIZE.md