Fichiers VSF
(auteur original de ce document: Foxy - http://www.foxysofts.com)
Format des fichiers VSF
Les fichiers .VSF sont les librairies graphique du jeu, elles contiennent l'ensemble des sprites et images utilisés dans le jeu. Ces fichiers sont encryptés à l'aide d'une clef de 8192 octets. A l'interieur, les éléments sont organisés à l'aide d'un système de noms de fichiers et répertoires. On notera aussi qu'il existe deux grands groupes: les palettes et les données graphiques.
Les fichiers .VSB sont encodés avec la même clef mais sont architecturés sur un principe plus simple et contiennent l'ensemble des sons et musiques du jeu.
Décodage des fichiers VSF
La clef de décodage est générée dans le client en utilisant une fonction random.
La routine de décryptage peut se présenter ainsi :
for (i = 0; i < taille; i++) vsf_datas[i] ^= vsfkey[(i / 4096) & 0xfff];
Chaque octet de la clef decode un bloc de 4096 octets du fichier à l'aide d'un OU exclusif (XOR).
Format et structures
Une fois décodé le fichier VSF est organisé en chunks (blocs).
Le premier étant le header:
+00 : Un long (???) +04 : Nb de chuncks +08 : Offset du chunck 1 par rapport au debut du fichier +12 : Offset du chunck 2 par rapport au debut du fichier ...
Dans le cas d'un VSF normal, le premier chunck correspond à la zone des "dossiers" et le deuxieme à la zone des "fichiers".
Le chunck "Dossiers"
Ces dossiers sont virtuels et ne servent qu'à l'organisation des données pour l'affichage dans l'éditeur.
+00 : Nombre de structures "Folder" dans ce chunck. +04 : Premiere structure. +xx : Deuxieme structure. ...
Les structures "Folder"
+00 : [byte] Type de données 1=Graphique / 2=Palette +01 : [long] Numéro d'identifiant du dossier +05 : [long] Numéro d'itentifiant du dossier parent +09 : [short] Nombre de caracteres du nom du dossier +11 : [byte] Nom du dossier
Remarque: Il existe 2 dossiers "maître" qui ont pour id parent 0, il s'agit des dossiers "Sprites" et "Palettes" qui contiennent l'ensemble des sous dossiers.
Le chunck "Fichiers"
+00 : Nombre de structures "File" dans ce chunck. +04 : Premiere structure. +xx : Deuxieme structure. ...
Les structures "File"
+00 : [byte] Type de données 1=Graphique / 2=Palette +01 : [long] Offset de la structure "Object" par rapport au debut du fichier. +05 : [short] Nombre de caracteres du nom de l'objet +07 : [byte] Nom de l'objet
Ces structures File pointent sur les données (Objects) elles-mêmes.
Les structures "Object"
Il existe 2 types d'objets: les palettes et les sprites. Ces 2 types utilisent la même entête de structure.
Les palettes:
+00 : Numéro d'identifiant du dossier parent +04 : Données de la palette: 256 x RGB (1 octet par composante)
Les sprites:
+00 : Numéro d'identifiant du dossier parent +04 : Type de sprite: 1=unpack/2=pack/3=empty +05 : 1 octet padding +06 : Largeur du sprite en pixel +08 : Hauteur du sprite en pixel +10 : Offset d'affichage X +12 : Offset d'affichage Y +14 : 2eme offset d'affichage X +16 : 2eme offset d'affichage Y +18 : 2 octets padding +20 : 4 octets non définis (a "1" si il s'agit d'une tile "sol") +24 : Numéro de la couleur transparente du sprite +25 : 3 octets padding +28 : Taille des données du sprite +32 : Données graphique du sprite
Le 2eme offset d'affichage sert à l'affichage mirroir du sprite. Les sprites non compactés sont des images indéxée, c'est à dire que chaque octet correspond à une entrée dans la palette. Les sprites compactés utilisent une compression run byte length décrite dans le paragraphe suivant. Les sprites "empty" quand à eux sont des sprites vide qui ne sont là que pour reserver l'entrée.
Décompression
La compression est faite ligne par ligne. Elle est organisée de la façon suivante:
+00 : Offset X du premier pixel à decompresser +02 : Nombre de pixel à decompresser (octet 1*4+octet 2) +04 : Marqueur de decompression (1=N pixels transparents/#1=copier les N pixels suivants) +xx : Marqueur de decompression (0=fin de sprite/2=fin de ligne)
Voici un exemple de code C de decompactage:
pt_pack=data;
x=y=0;
while(1)
{
// Index du premier pixel à decompresser
x=*(short *)pt_pack;
pt_pack+=2;
// Nombre de pixels à decompresser
nb_pix=pt_pack[0]*4+pt_pack[1];
pt_pack+=2;
pt_dpack=&tmp_sprite[x+(y*lg)];
if (*pt_pack++ != 1)
{
for (i=0; i<nb_pix; i++)
pt_dpack[i]=*pt_pack++;
}
else
x+=nb_pix;
if (*pt_pack == 0) // Fin de sprite
break;
if (*pt_pack++ == 2) // Fin de ligne
y++;
if (y==ht) // Par sécurité
break;
};
Annexe
Clef de décodage
unsigned char vsfkey[] = {
0x30, 0x2A, 0xF8, 0x57, 0xA2, 0x51, 0x84, 0xA8,
0x91, 0x09, 0x70, 0x8F, 0x37, 0x0F, 0x48, 0xA9,
0xD4, 0x59, 0x89, 0xD9, 0xD2, 0x75, 0x50, 0x32,
0xE4, 0xEE, 0xF3, 0xD2, 0x32, 0xB3, 0xAF, 0xCE,
0x73, 0x75, 0x46, 0x11, 0x1B, 0x12, 0xA3, 0x40,
0x79, 0xF2, 0x82, 0xA3, 0xDE, 0x72, 0x10, 0x03,
0xBC, 0x43, 0x92, 0x92, 0xD2, 0xCF, 0x06, 0xCC,
0x49, 0x9F, 0xC9, 0x5E, 0xDA, 0xBC, 0x3C, 0x09,
0xF4, 0x16, 0x63, 0x82, 0xDF, 0xE4, 0x91, 0x5F,
0xDE, 0x11, 0x06, 0xF1, 0x56, 0x90, 0x91, 0x30,
0xEE, 0xD0, 0x3E, 0x97, 0xB9, 0x1B, 0xED, 0x13,
0x54, 0xF1, 0x04, 0xDA, 0x0F, 0x7D, 0x03, 0x5B,
0x0B, 0xE7, 0x37, 0x18, 0x65, 0xC7, 0x54, 0x91,
0x55, 0x7F, 0x20, 0x27, 0x53, 0xA3, 0x10, 0xFA,
0x3E, 0x5E, 0xF1, 0xD7, 0x7A, 0xD3, 0x8D, 0x14,
0x1B, 0x84, 0x47, 0x74, 0x03, 0xB2, 0xC9, 0x12,
0x0A, 0xC8, 0xA4, 0x3E, 0x1F, 0xB6, 0xEF, 0x63,
0x70, 0x5C, 0xF5, 0xEF, 0x8B, 0xEA, 0xD0, 0x31,
0x80, 0x48, 0x12, 0x3F, 0x0B, 0x76, 0x66, 0xDA,
0xB0, 0xF1, 0x38, 0x57, 0xEA, 0x1A, 0x55, 0x7A,
0x45, 0x93, 0x90, 0x60, 0x82, 0xAC, 0x69, 0x62,
0xC6, 0xC1, 0xAB, 0xF8, 0xB1, 0xA0, 0x18, 0x9E,
0x89, 0xEB, 0x04, 0xB8, 0x5E, 0x7F, 0x00, 0x74,
0x2B, 0xD7, 0x7B, 0xB1, 0xFB, 0x6E, 0x69, 0xE0,
0x11, 0x25, 0xDF, 0xEC, 0x04, 0xA7, 0xC3, 0x1A,
0xEA, 0xCD, 0x65, 0xED, 0x7A, 0x02, 0x29, 0x11,
0x2F, 0xA3, 0x2A, 0x32, 0x6A, 0x6C, 0xDC, 0xED,
0x9E, 0xD1, 0xB5, 0xAD, 0x6A, 0x6C, 0xC9, 0x91,
0xC3, 0x5B, 0x76, 0x4F, 0x18, 0xA4, 0x04, 0x17,
0x71, 0x9D, 0x48, 0x7C, 0x9B, 0x4C, 0x4A, 0x53,
0x44, 0xCD, 0xEA, 0x97, 0x23, 0xB7, 0x82, 0x52,
0x1F, 0x7C, 0x8A, 0x79, 0x6A, 0xD1, 0x3C, 0xD8,
0xB0, 0x11, 0x3A, 0xF2, 0x33, 0x9E, 0x30, 0xE6,
0xF0, 0x4B, 0x77, 0x51, 0xC7, 0xBB, 0xBF, 0x33,
0x9D, 0xC6, 0xA9, 0xD6, 0x7D, 0xDF, 0x75, 0xAE,
0xC0, 0x75, 0x9E, 0x41, 0x31, 0x5A, 0x84, 0x04,
0x2C, 0x23, 0x0E, 0x47, 0xC9, 0x92, 0x4A, 0x14,
0xFA, 0xF5, 0x1A, 0x17, 0xB5, 0x8B, 0xCC, 0x7C,
0x10, 0xE9, 0xCB, 0xD9, 0x6D, 0x5F, 0x39, 0x11,
0x99, 0x58, 0x96, 0x31, 0xF2, 0xC1, 0x67, 0x5E,
0x8B, 0x6F, 0xD6, 0xB5, 0x4F, 0x7D, 0x59, 0x2D,
0x26, 0xB8, 0x51, 0x7B, 0x18, 0xF9, 0xB6, 0xFB,
0x71, 0x95, 0xB4, 0x8F, 0xE6, 0xB4, 0x53, 0x83,
0xBC, 0xC1, 0x17, 0x75, 0xE2, 0xC5, 0xA9, 0x36,
0x23, 0xD0, 0x79, 0xAC, 0x3A, 0x5C, 0x5F, 0xBD,
0x06, 0xAF, 0x44, 0x2B, 0xA3, 0x42, 0xC1, 0x7D,
0x93, 0x24, 0xC9, 0xE2, 0xDF, 0x5B, 0x47, 0x14,
0x3F, 0x4D, 0xC5, 0x3B, 0x38, 0x22, 0x10, 0xD5,
0x46, 0x24, 0xDA, 0x97, 0xFD, 0x2A, 0x63, 0x51,
0x30, 0xF7, 0x16, 0xD2, 0x0E, 0xA1, 0x33, 0xCE,
0x4D, 0xF2, 0x6F, 0xC0, 0x4B, 0xCF, 0x9A, 0xCE,
0x35, 0x99, 0x44, 0xAF, 0x24, 0x93, 0x5D, 0x8B,
0x4A, 0x46, 0xDD, 0xE3, 0x0F, 0xE3, 0x67, 0x76,
0x38, 0xAD, 0xEB, 0x1E, 0x0A, 0x54, 0x4F, 0xBB,
0x71, 0x5F, 0x0A, 0x16, 0x1F, 0x8E, 0xD1, 0xC0,
0xB3, 0x41, 0x3A, 0xFC, 0xDD, 0xD5, 0x58, 0xA2,
0x84, 0x13, 0x68, 0xFD, 0xE1, 0x87, 0x72, 0xB7,
0xB1, 0xEE, 0xEA, 0xBA, 0x4E, 0x97, 0x59, 0x11,
0xD5, 0xC4, 0xFD, 0xCF, 0x4F, 0x15, 0x71, 0xF5,
0xCE, 0xE1, 0x4A, 0x52, 0x99, 0xA7, 0xC3, 0x68,
0x47, 0x68, 0x5F, 0x51, 0xEB, 0x0F, 0x86, 0xA2,
0x33, 0xD5, 0x35, 0x53, 0x8D, 0xA6, 0x97, 0x9A,
0x4D, 0x80, 0xAF, 0xD8, 0xCE, 0xDD, 0xFB, 0x7A,
0x9A, 0x17, 0x19, 0xDA, 0x89, 0xC2, 0x65, 0x28,
0xE9, 0x21, 0xA5, 0x4B, 0x9F, 0x79, 0xA9, 0xC4,
0x50, 0x80, 0xF1, 0x95, 0x7C, 0xBD, 0x4D, 0x25,
0xAE, 0xED, 0x84, 0x1E, 0x94, 0x67, 0xF8, 0x5B,
0x2D, 0x7D, 0x4B, 0xC2, 0xE4, 0xE5, 0x00, 0x30,
0xBE, 0x1B, 0x20, 0x58, 0x74, 0xC1, 0xE0, 0xA7,
0x9C, 0x0B, 0x43, 0x2E, 0xD0, 0x1B, 0xBE, 0x7D,
0xCC, 0x6B, 0xDE, 0x8D, 0x94, 0x2D, 0xEA, 0xA4,
0x99, 0xB2, 0x86, 0x37, 0xDE, 0xCC, 0x5A, 0xCB,
0x1B, 0x32, 0xB4, 0xE4, 0xDB, 0xE3, 0x2F, 0xDA,
0xAD, 0x91, 0x50, 0xC9, 0x3E, 0xF9, 0x32, 0x6F,
0x7B, 0x53, 0x26, 0x12, 0xC1, 0xAC, 0x56, 0x63,
0xF4, 0x52, 0x6D, 0x64, 0xAC, 0x33, 0x37, 0x48,
0x52, 0x42, 0x47, 0x5C, 0x4C, 0xDD, 0x99, 0xE8,
0x18, 0x31, 0x3B, 0x14, 0x78, 0x96, 0xE9, 0xC8,
0x91, 0x03, 0xBC, 0x99, 0x12, 0x60, 0xC0, 0xA3,
0x53, 0xF8, 0xA5, 0x76, 0x81, 0xD5, 0x5C, 0xF0,
0xBA, 0x29, 0xBA, 0x2D, 0x39, 0xAB, 0x25, 0x5F,
0x70, 0x05, 0x29, 0xB9, 0x35, 0x2F, 0x2C, 0x54,
0xE1, 0xD7, 0x07, 0x0F, 0x79, 0xC6, 0xAD, 0x72,
0xC9, 0x42, 0xD3, 0x9A, 0x92, 0x72, 0x8C, 0x14,
0xA8, 0xC2, 0xF5, 0xC2, 0x18, 0x49, 0xD4, 0xC9,
0x4A, 0x2C, 0x3F, 0x67, 0x28, 0xFE, 0x3D, 0xDF,
0x41, 0x2D, 0x6B, 0x5F, 0xEB, 0x5B, 0xA2, 0xDC,
0x6C, 0xCC, 0x9B, 0xFC, 0x15, 0xC3, 0x8D, 0xFB,
0x6F, 0xEA, 0xDB, 0x8A, 0x5C, 0xB3, 0xAF, 0xB4,
0x3A, 0xC0, 0xA2, 0xC9, 0x07, 0x42, 0x60, 0x38,
0x84, 0x5F, 0x4C, 0x78, 0x5F, 0x9B, 0x23, 0xEC,
0x4F, 0x33, 0xA1, 0xCA, 0x3C, 0x87, 0x24, 0xF5,
0x64, 0x7E, 0x51, 0xEE, 0x7B, 0xE7, 0xB7, 0xAE,
0xD5, 0xDF, 0x75, 0x8D, 0x84, 0x35, 0xDA, 0x28,
0x7F, 0xCB, 0x0F, 0x44, 0xC7, 0x02, 0xB4, 0xB1,
0x87, 0x13, 0x8A, 0x2F, 0x3D, 0x7A, 0x14, 0x50,
0xDA, 0x5B, 0x3B, 0x5E, 0xE9, 0xE1, 0xF2, 0x41,
0xB0, 0xA6, 0xDD, 0x5E, 0x56, 0x16, 0xF1, 0x7E,
0x08, 0xCE, 0x19, 0xB1, 0x18, 0x0D, 0xDA, 0x36,
0x2A, 0x08, 0xFB, 0x57, 0x4D, 0x57, 0x23, 0x54,
0x29, 0x5C, 0x7D, 0x45, 0x1B, 0x9D, 0x65, 0xFA,
0x5F, 0x31, 0x00, 0xE8, 0x31, 0x1F, 0xE8, 0x05,
0xF0, 0xC4, 0xCD, 0xAC, 0x47, 0x39, 0x1A, 0x88,
0x4A, 0xAE, 0x98, 0x70, 0x9F, 0xDC, 0x13, 0x51,
0xA1, 0x5E, 0xFC, 0x0F, 0x84, 0x18, 0x13, 0x67,
0x76, 0x9B, 0x01, 0xDA, 0xC8, 0x8F, 0x04, 0x8A,
0x0F, 0x0A, 0x91, 0x21, 0x48, 0x01, 0xF7, 0xB2,
0xFD, 0xA4, 0x06, 0xA5, 0x69, 0xC5, 0xAB, 0x92,
0x9B, 0x3E, 0x9E, 0x28, 0x9A, 0x4D, 0x02, 0x14,
0x8A, 0x04, 0x04, 0xDF, 0xD1, 0xA0, 0x89, 0xDA,
0x38, 0xFB, 0xC9, 0xFA, 0x10, 0xE2, 0xF7, 0xC3,
0x58, 0x85, 0xE8, 0x25, 0xDE, 0xCF, 0xAE, 0x64,
0x68, 0xD7, 0x46, 0xFE, 0xD0, 0x3A, 0x35, 0x8B,
0x30, 0x84, 0x2F, 0xA3, 0x01, 0x91, 0xBB, 0xC1,
0x3F, 0xF4, 0xD9, 0x28, 0x93, 0x5B, 0x9F, 0xC5,
0x6E, 0xEC, 0xE4, 0x19, 0x35, 0xB6, 0xE1, 0x14,
0x5F, 0x08, 0xD7, 0xFD, 0x9D, 0xDB, 0xB0, 0x5C,
0xFC, 0x3B, 0xA5, 0xD3, 0x0B, 0x9D, 0xE1, 0x0C,
0xF9, 0x53, 0x27, 0x94, 0xC5, 0xE5, 0x72, 0xC7,
0x55, 0x79, 0x9E, 0xB0, 0x9F, 0x37, 0x0A, 0xEC,
0xD2, 0xAB, 0x39, 0x92, 0x73, 0x2E, 0x7B, 0x12,
0x82, 0x44, 0x8C, 0x1D, 0xA3, 0x02, 0x3D, 0x86,
0x3C, 0x73, 0x15, 0x2C, 0x9C, 0xFE, 0xF4, 0xD4,
0x20, 0xC5, 0xBB, 0x16, 0x54, 0x0E, 0xEB, 0x3C,
0x19, 0x9E, 0x4E, 0x28, 0xC7, 0x2E, 0x97, 0x39,
0x58, 0xBB, 0x08, 0x2A, 0x80, 0xF9, 0x15, 0xFD,
0xDA, 0xB1, 0x0A, 0xDC, 0x0C, 0x24, 0xAB, 0xF8,
0xE4, 0x6F, 0xDE, 0x77, 0x85, 0xF6, 0x4A, 0x4E,
0x84, 0xBE, 0xFB, 0x2D, 0x10, 0xD7, 0x0A, 0x5E,
0x11, 0xBE, 0x3D, 0xA9, 0x54, 0xC2, 0xAC, 0x3F,
0xA9, 0x69, 0x68, 0x91, 0x09, 0xD0, 0x1C, 0x41,
0xB7, 0x13, 0xAE, 0x00, 0x6A, 0xAE, 0xEB, 0x70,
0x6B, 0xE6, 0x25, 0x0D, 0xBE, 0x27, 0xD8, 0x0E,
0x42, 0x69, 0x4F, 0x47, 0xD5, 0x99, 0x48, 0x15,
0x7D, 0xF8, 0x96, 0x37, 0x87, 0x81, 0xC8, 0xBA,
0xAB, 0x4C, 0xCD, 0xDD, 0x35, 0xF2, 0x92, 0xED,
0x22, 0xF3, 0xB0, 0x34, 0x49, 0x19, 0x06, 0xD3,
0x7F, 0xD7, 0x64, 0xAF, 0xB7, 0xB9, 0x2D, 0x4D,
0x2B, 0xBB, 0xF7, 0xBA, 0x7C, 0xB3, 0x38, 0x71,
0xD6, 0xB8, 0xE0, 0x3B, 0x1C, 0x7E, 0x06, 0x14,
0xFB, 0xC2, 0x81, 0x10, 0x25, 0xAA, 0x98, 0x3E,
0x5D, 0x28, 0xA0, 0x8E, 0xAF, 0x60, 0x9E, 0xB3,
0x87, 0x0E, 0xF0, 0x09, 0xDA, 0xE3, 0xEE, 0x72,
0x4D, 0xF2, 0x8D, 0x47, 0x52, 0x0F, 0x08, 0x2F,
0x4F, 0x30, 0x7B, 0x0B, 0xC5, 0xD7, 0x93, 0xD7,
0x71, 0x75, 0x27, 0x91, 0x71, 0xC9, 0xE2, 0x16,
0x65, 0x4C, 0xE6, 0x0D, 0x99, 0x8D, 0x6F, 0xC8,
0x24, 0x99, 0x78, 0x2C, 0x0C, 0x60, 0x5E, 0x8B,
0x6E, 0x17, 0x85, 0x93, 0x9F, 0x9C, 0xFB, 0x2F,
0x4F, 0xDB, 0x1E, 0x64, 0xB1, 0x33, 0x3C, 0x3F,
0x9B, 0xD3, 0x3D, 0xB4, 0xAB, 0x2D, 0x40, 0x82,
0x6E, 0x48, 0x45, 0x17, 0x7F, 0x30, 0xCD, 0x75,
0xAF, 0x56, 0x81, 0x16, 0x27, 0xF6, 0xD5, 0xCD,
0x8C, 0x78, 0xA9, 0xB3, 0x25, 0xD6, 0xF1, 0xFC,
0xFC, 0x01, 0x58, 0xEB, 0x06, 0x40, 0xE3, 0xAB,
0x42, 0x9A, 0x97, 0x35, 0xDF, 0x39, 0x19, 0x39,
0x66, 0xC8, 0x56, 0xFD, 0xD0, 0xE1, 0x25, 0x43,
0xBB, 0x68, 0xEC, 0x2B, 0x80, 0xF3, 0x46, 0x1C,
0x5E, 0x30, 0x9E, 0x9F, 0x9D, 0x43, 0xE0, 0x4F,
0xB2, 0x2E, 0x16, 0xB2, 0x62, 0x39, 0x07, 0x25,
0xE6, 0x4B, 0xE6, 0xB7, 0x12, 0x5A, 0xEF, 0x1A,
0x72, 0xC7, 0x0E, 0x79, 0x77, 0xC5, 0x7D, 0x67,
0x94, 0xBD, 0x72, 0xBB, 0x65, 0xB1, 0xBA, 0x7C,
0xD4, 0xA0, 0x63, 0xBC, 0x3B, 0xEB, 0x5B, 0x83,
0x87, 0xBA, 0x18, 0xB1, 0x5E, 0x5E, 0x3A, 0xDF,
0x45, 0xB2, 0x31, 0x49, 0xBE, 0x89, 0xDE, 0xAC,
0x73, 0x06, 0x3A, 0x2D, 0x54, 0x08, 0xF5, 0x3E,
0xBD, 0x8B, 0x25, 0x7E, 0x9F, 0x0E, 0xD8, 0xA2,
0x9A, 0xF2, 0xCD, 0x56, 0x2B, 0xE7, 0x08, 0x20,
0xC8, 0x46, 0x7A, 0x48, 0x0B, 0x7A, 0xAB, 0xB7,
0xCF, 0x65, 0x58, 0xE0, 0x5C, 0xC3, 0x18, 0xA0,
0x81, 0x8D, 0xFE, 0x24, 0xC1, 0x5C, 0x47, 0xCC,
0x76, 0xD1, 0xED, 0x12, 0xEB, 0xF4, 0x5E, 0x68,
0x91, 0x9D, 0x0F, 0x21, 0x12, 0xD5, 0x2A, 0x55,
0x7F, 0x39, 0x33, 0xC1, 0x72, 0x61, 0xA3, 0xB0,
0x34, 0x42, 0x96, 0xDB, 0xD8, 0x93, 0x67, 0x51,
0x6D, 0x31, 0x5C, 0x53, 0x16, 0x81, 0x40, 0x44,
0x33, 0xD6, 0x12, 0x82, 0x86, 0xD7, 0x9F, 0x52,
0x54, 0xDD, 0x2E, 0xBD, 0x8C, 0x5C, 0x1E, 0x7B,
0xE9, 0x47, 0x8E, 0xD1, 0x18, 0x70, 0x01, 0x7A,
0xD5, 0xF0, 0xFC, 0x85, 0x1E, 0x8A, 0xB4, 0x40,
0x43, 0x0E, 0xA8, 0x18, 0x1D, 0xBC, 0x4E, 0x7A,
0x25, 0xAE, 0xAD, 0xC0, 0x9E, 0x32, 0x0C, 0x0D,
0xB8, 0x38, 0x8D, 0x32, 0xB3, 0xAD, 0xD6, 0x95,
0x04, 0xEA, 0xB4, 0x15, 0x77, 0x0C, 0xBD, 0xE9,
0x56, 0x5F, 0xF8, 0x8D, 0x8B, 0xC2, 0x7B, 0x9B,
0xC5, 0x09, 0x17, 0xB7, 0x9C, 0x5F, 0xF2, 0x71,
0xB4, 0xB0, 0x37, 0x28, 0xE0, 0x0A, 0xAD, 0xEE,
0x4C, 0xFB, 0x68, 0x6E, 0x96, 0x03, 0x62, 0xCC,
0xFE, 0xE7, 0x25, 0x90, 0x84, 0x24, 0x6D, 0x80,
0x0A, 0x49, 0xCD, 0x8E, 0x7B, 0x5F, 0x55, 0xB5,
0xF0, 0x4F, 0x2F, 0xE2, 0xD3, 0x40, 0x4A, 0xD2,
0x02, 0x02, 0xFB, 0xFD, 0xF1, 0x6B, 0xA4, 0x76,
0xD4, 0xC2, 0x52, 0xCC, 0xBE, 0x1E, 0x66, 0xF6,
0xC6, 0xCB, 0x37, 0x32, 0x2F, 0xAF, 0xB8, 0xE6,
0x83, 0xAE, 0x1B, 0x8C, 0xC1, 0x0E, 0x70, 0x8E,
0x7B, 0xD8, 0x54, 0x31, 0xFB, 0x42, 0x8A, 0x71,
0x69, 0x0E, 0xA5, 0xEE, 0xEC, 0xEE, 0xAB, 0xCA,
0xD1, 0xEC, 0xB7, 0x8F, 0xAC, 0xCB, 0xA1, 0x10,
0x80, 0x6C, 0x9E, 0x52, 0xDD, 0x2F, 0xE5, 0x6E,
0x0C, 0x5C, 0x56, 0x72, 0x2A, 0x84, 0x18, 0x4C,
0x53, 0xE4, 0x43, 0xA3, 0xC3, 0xCF, 0x81, 0xC8,
0xFC, 0x0A, 0xB3, 0x91, 0xE8, 0x32, 0x95, 0x3E,
0xFB, 0x24, 0x5F, 0x61, 0x5D, 0x60, 0x6E, 0xBD,
0x08, 0x69, 0xE5, 0x31, 0xEF, 0x2D, 0x52, 0x91,
0x25, 0x65, 0x4F, 0x97, 0xF8, 0x00, 0x2D, 0xBD,
0x1F, 0x7E, 0x8F, 0x26, 0xD6, 0x5C, 0x17, 0x7F,
0x0B, 0x73, 0x01, 0xE5, 0x74, 0x5E, 0xCE, 0xCA,
0xC4, 0xDC, 0xE6, 0xD7, 0xC3, 0x39, 0x3C, 0xCF,
0x75, 0xAA, 0xEE, 0x77, 0x3F, 0xBA, 0xF2, 0x75,
0x0C, 0xA7, 0xAF, 0x39, 0x6C, 0xC9, 0xAB, 0xDD,
0xC0, 0xF6, 0x28, 0x0B, 0x58, 0xE4, 0xCA, 0xE0,
0x96, 0x92, 0x3F, 0xD2, 0x19, 0xA5, 0xDB, 0x92,
0xD7, 0xD1, 0x46, 0xEE, 0x4D, 0x3D, 0x16, 0xBD,
0x97, 0xE1, 0x78, 0xB8, 0x9D, 0xF4, 0xD7, 0x67,
0x34, 0x49, 0x78, 0x00, 0x3D, 0xB1, 0x27, 0x4D,
0xD1, 0x68, 0xD1, 0x8F, 0x63, 0x6F, 0x35, 0x65,
0xDF, 0xF7, 0x7A, 0xAB, 0xD5, 0xC2, 0xDC, 0x61,
0x97, 0x89, 0x4F, 0x8E, 0x5F, 0x5B, 0x1F, 0x27,
0x77, 0x09, 0x98, 0xEE, 0x56, 0x80, 0xA8, 0x5B,
0xCA, 0x39, 0x85, 0x7A, 0x19, 0x91, 0x4D, 0xD6,
0x24, 0x38, 0xAE, 0x58, 0x8D, 0x89, 0x8A, 0x2D,
0xDE, 0xFA, 0x97, 0xA8, 0xA5, 0x79, 0x08, 0x2C,
0x9F, 0xD0, 0x2B, 0x05, 0xD9, 0x0E, 0x14, 0x58,
0xD5, 0xE1, 0x3C, 0x00, 0xAD, 0x0A, 0x28, 0x71,
0x37, 0xAF, 0x09, 0xA3, 0x2A, 0xCC, 0x64, 0xEE,
0x43, 0x92, 0xB6, 0xF3, 0x65, 0xCB, 0x15, 0x80,
0xC2, 0x3F, 0xD4, 0x6F, 0xFB, 0x16, 0x2D, 0x90,
0x48, 0x40, 0xDB, 0x8B, 0x94, 0xD4, 0xC9, 0xC2,
0xAD, 0x7A, 0xAC, 0x38, 0x5F, 0xC8, 0xAE, 0x71,
0x98, 0xAD, 0x10, 0x5C, 0x92, 0xCD, 0xCC, 0x32,
0xF2, 0xEE, 0x3B, 0x5A, 0xF0, 0x56, 0xB9, 0x51,
0x75, 0x2F, 0x49, 0x8B, 0x44, 0xED, 0x37, 0x57,
0x1D, 0xB6, 0xBE, 0xC3, 0xE0, 0xBB, 0xAD, 0x82,
0xB2, 0xA7, 0x0A, 0xCE, 0x22, 0xFC, 0xB1, 0x4C,
0x47, 0x7D, 0x02, 0xF1, 0xEC, 0x89, 0x7C, 0xE5,
0xB2, 0x8B, 0x67, 0x6A, 0x31, 0x52, 0x74, 0xBA,
0x1A, 0x7E, 0x63, 0xF1, 0x64, 0xDF, 0xA6, 0xED,
0x68, 0xDD, 0x07, 0x36, 0x08, 0xD5, 0x48, 0xDC,
0xD1, 0x86, 0xCD, 0x62, 0x25, 0x6E, 0x3B, 0x9B,
0x55, 0x32, 0x1C, 0x96, 0xCD, 0xFE, 0x86, 0x7A,
0x38, 0xEF, 0xBE, 0x6F, 0x9D, 0x73, 0xDC, 0x81,
0x8B, 0xAB, 0x6C, 0x81, 0x39, 0xD4, 0x17, 0xEE,
0xA8, 0xA7, 0x43, 0xD8, 0xCC, 0xBF, 0xB9, 0xBE,
0xAF, 0xFE, 0x4B, 0x7B, 0x90, 0xEE, 0x72, 0x23,
0x0C, 0x28, 0xF6, 0xE9, 0x42, 0xB2, 0x94, 0x07,
0xF2, 0x6F, 0x9E, 0x9B, 0xA9, 0x75, 0xA0, 0x90,
0xDE, 0x7C, 0x07, 0x81, 0x1A, 0x3B, 0xBD, 0x9B,
0x18, 0xCF, 0xD9, 0x85, 0xEC, 0x20, 0x3B, 0x40,
0x2B, 0x41, 0x2F, 0x0C, 0x05, 0xD9, 0x14, 0x4E,
0x71, 0x83, 0x03, 0x71, 0x4F, 0x36, 0x6A, 0xCC,
0x8A, 0xA1, 0xBC, 0x88, 0x40, 0x9C, 0x0A, 0x7F,
0xE1, 0x7F, 0xAC, 0x22, 0x57, 0x8E, 0xE6, 0x5F,
0x29, 0x59, 0x8B, 0x84, 0x9B, 0x24, 0x9F, 0x21,
0xDB, 0x46, 0xFB, 0xEE, 0x1D, 0x91, 0xF8, 0xB1,
0xBF, 0xB4, 0x09, 0x1C, 0x74, 0xA0, 0x64, 0xB5,
0x62, 0xEB, 0xA6, 0xBC, 0x45, 0x36, 0x79, 0x0C,
0x99, 0x8D, 0x32, 0xFC, 0xBA, 0xD0, 0x79, 0x4D,
0x07, 0x13, 0xF0, 0x01, 0x08, 0x05, 0xD0, 0x4A,
0x92, 0x50, 0x91, 0x66, 0xEA, 0x03, 0x90, 0x8A,
0xEC, 0xF0, 0xAD, 0xC2, 0x2B, 0x14, 0xF6, 0xD3,
0x13, 0xF8, 0x46, 0x24, 0x16, 0x19, 0xE8, 0x9F,
0xC7, 0x47, 0x43, 0x95, 0x05, 0x0D, 0x75, 0xA2,
0x17, 0x13, 0xF9, 0x95, 0xD8, 0x82, 0x53, 0x4C,
0xD7, 0x6A, 0xA6, 0x9F, 0x7C, 0x25, 0x64, 0x42,
0x29, 0xB8, 0xEB, 0xA6, 0x62, 0x3C, 0x30, 0xE3,
0xF0, 0x3E, 0x5A, 0x96, 0x08, 0x26, 0x6B, 0xC9,
0x62, 0x97, 0xE7, 0xD4, 0x71, 0xD8, 0x71, 0x46,
0x76, 0x36, 0x74, 0xC0, 0xAD, 0x65, 0xC5, 0xE3,
0x6F, 0xE8, 0x49, 0x2F, 0x54, 0x76, 0x95, 0xE5,
0x59, 0x55, 0x98, 0xF1, 0x05, 0xCC, 0x39, 0xC9,
0x89, 0x7A, 0xFD, 0x52, 0xE9, 0xC3, 0xAE, 0xC4,
0x1D, 0x30, 0xFB, 0x91, 0x34, 0xD1, 0x1F, 0x45,
0x7B, 0xA6, 0x81, 0x6B, 0xA0, 0x02, 0x5D, 0x73,
0xD3, 0xE8, 0x63, 0x94, 0xF1, 0x7C, 0x61, 0xB0,
0xA0, 0x5A, 0xE0, 0x39, 0x76, 0x00, 0xD0, 0x15,
0x21, 0x35, 0x23, 0x80, 0x84, 0x65, 0x77, 0xF3,
0xE1, 0x0F, 0xB9, 0x08, 0xFA, 0x1E, 0xC9, 0x59,
0x36, 0x56, 0x1F, 0x6A, 0xC2, 0xB3, 0x69, 0x89,
0xBA, 0xD0, 0x37, 0xB6, 0x4C, 0x4A, 0x9A, 0x82,
0xD5, 0x20, 0xCC, 0xF7, 0x12, 0x1E, 0xCF, 0x7B,
0x36, 0x3C, 0x16, 0xB1, 0x19, 0x05, 0x22, 0x62,
0x53, 0xF7, 0x30, 0x5F, 0x6B, 0xEC, 0xD4, 0x62,
0xEE, 0x7C, 0xA3, 0xF6, 0x9E, 0x5E, 0xD1, 0x5B,
0x91, 0xCF, 0xDE, 0x65, 0x53, 0xF7, 0x2F, 0x68,
0x0E, 0x4D, 0xBA, 0x13, 0xAD, 0xF4, 0xA9, 0x5C,
0x01, 0x2B, 0xFA, 0x60, 0xE0, 0xA6, 0x29, 0x46,
0x4F, 0xF9, 0xCA, 0x26, 0xA3, 0xF8, 0x3B, 0xE9,
0xA6, 0x1F, 0x3C, 0x35, 0xBA, 0xEF, 0x99, 0x46,
0xFD, 0x5D, 0xCD, 0xDA, 0x6F, 0x29, 0xA5, 0x14,
0x14, 0x4D, 0xE4, 0x5A, 0x17, 0x5C, 0xE9, 0x42,
0xF1, 0xE3, 0x51, 0x70, 0x8E, 0xD6, 0x9A, 0x7C,
0x6B, 0xEA, 0xCA, 0xD4, 0xBD, 0x02, 0x13, 0xA3,
0x98, 0x88, 0x71, 0xB4, 0x11, 0xDF, 0x59, 0x55,
0x5F, 0xBA, 0x51, 0x39, 0x03, 0x89, 0x9C, 0x64,
0xEA, 0xD7, 0xDB, 0x04, 0x94, 0xB3, 0xB3, 0x5E,
0x33, 0x10, 0x6E, 0xAE, 0xCF, 0x2A, 0x9F, 0x0C,
0x74, 0xEC, 0xCC, 0x4D, 0x48, 0x53, 0x0A, 0xEB,
0xB8, 0xCF, 0xA5, 0xEA, 0x99, 0xAC, 0xC4, 0xB6,
0x4F, 0x72, 0x0F, 0x0D, 0xE9, 0x4D, 0x4C, 0xDD,
0x52, 0x6B, 0x0B, 0x31, 0x67, 0x66, 0x45, 0x0C,
0x25, 0xA5, 0x02, 0x50, 0xC8, 0xC1, 0xFB, 0xA5,
0xF3, 0xE7, 0x45, 0x59, 0xCE, 0x40, 0xE7, 0x46,
0x32, 0x50, 0x8F, 0xB5, 0xC2, 0x5F, 0x29, 0x45,
0x1E, 0xD7, 0x86, 0xC8, 0xF7, 0xB1, 0x07, 0x30,
0x3F, 0xCF, 0x36, 0x6B, 0x47, 0x66, 0x73, 0x4E,
0xE4, 0x60, 0x95, 0x73, 0x97, 0xC2, 0x8A, 0x21,
0xA8, 0x0E, 0x02, 0x2D, 0x54, 0xA6, 0x0D, 0xE1,
0xEA, 0x34, 0xC4, 0xDF, 0xF4, 0x0A, 0xE9, 0x04,
0x57, 0x87, 0x8E, 0x4A, 0x78, 0x7E, 0xB5, 0xB2,
0x62, 0x96, 0xF9, 0x24, 0xE7, 0xAE, 0x30, 0x52,
0xC7, 0x47, 0x0A, 0x9F, 0xD2, 0xDE, 0xBE, 0x01,
0x0D, 0x5A, 0xA9, 0xE4, 0xD4, 0x6A, 0xF2, 0x15,
0x03, 0xE9, 0x2F, 0x99, 0x11, 0x46, 0x07, 0x9E,
0x3F, 0xE4, 0xD8, 0x58, 0xB3, 0x82, 0x5D, 0xE6,
0xA3, 0x99, 0x4C, 0x37, 0x72, 0xC5, 0x01, 0xED,
0xD9, 0x29, 0x1B, 0x44, 0x0B, 0xCF, 0x26, 0xEF,
0xD4, 0x12, 0x3D, 0x06, 0xC4, 0xFA, 0xAB, 0xDF,
0x4F, 0xAA, 0x95, 0xFD, 0xF0, 0xB9, 0x97, 0xEA,
0x50, 0xA0, 0x6E, 0x23, 0x67, 0x17, 0x98, 0xF5,
0xA3, 0x7B, 0xFB, 0x69, 0x0C, 0x37, 0x88, 0x21,
0x61, 0x1E, 0xDB, 0x3C, 0x49, 0xD7, 0xE7, 0x42,
0x69, 0x41, 0x93, 0xFE, 0x92, 0xD0, 0x62, 0x6B,
0xE2, 0xF8, 0x13, 0x8E, 0xE6, 0x8F, 0x4A, 0x65,
0xC1, 0x2F, 0x31, 0xC2, 0x4C, 0x9C, 0x1D, 0x34,
0x3F, 0x2A, 0x30, 0xE8, 0x51, 0x1B, 0x01, 0x91,
0x5F, 0x08, 0x39, 0x49, 0x8E, 0x44, 0x42, 0x74,
0x70, 0x3F, 0xDF, 0xA6, 0x26, 0xEA, 0xDA, 0x88,
0x86, 0x1F, 0xA0, 0xBA, 0x40, 0xFC, 0xE9, 0xB5,
0x01, 0x52, 0x5F, 0xB7, 0x92, 0xFE, 0x3A, 0x9B,
0x08, 0x59, 0xEA, 0xC9, 0xD8, 0x90, 0xBC, 0x13,
0x0C, 0x10, 0x7A, 0x97, 0x57, 0xE6, 0x0E, 0xAC,
0x47, 0x29, 0x2D, 0xBD, 0x5D, 0x54, 0xF2, 0x34,
0x3B, 0xB3, 0x8C, 0x55, 0xC1, 0xC1, 0xD8, 0x2C,
0x36, 0x93, 0x0C, 0x6C, 0x65, 0x32, 0x55, 0x53,
0xCA, 0x08, 0x84, 0x8D, 0xB0, 0x40, 0xA9, 0x1D,
0x58, 0x2A, 0xBB, 0x3A, 0x17, 0x9F, 0x3D, 0x39,
0x83, 0x69, 0xDD, 0x6E, 0x93, 0x9F, 0x21, 0x10,
0xBE, 0x11, 0x01, 0x1D, 0x29, 0xA5, 0x91, 0x41,
0xC1, 0xC3, 0xA4, 0xB5, 0x67, 0xB1, 0x71, 0x27,
0x0E, 0xFC, 0x31, 0x9B, 0xE2, 0xDB, 0xCB, 0x53,
0x6E, 0x91, 0x76, 0xAF, 0xBA, 0xD4, 0x58, 0x13,
0x77, 0x30, 0x30, 0xC9, 0x19, 0x68, 0xF4, 0xEA,
0x05, 0xDE, 0x7F, 0x3B, 0xAD, 0xF8, 0x29, 0x17,
0xBC, 0x7E, 0x71, 0x4E, 0x33, 0x04, 0xA4, 0x0F,
0x8F, 0x48, 0x7B, 0xC5, 0xED, 0x9D, 0xC2, 0x03,
0x32, 0x4C, 0xFB, 0x5E, 0x29, 0xF4, 0x04, 0x5A,
0xA8, 0xF6, 0xB8, 0x4C, 0xB9, 0xD1, 0x95, 0x39,
0xBA, 0x8C, 0x62, 0xBE, 0x7F, 0x15, 0xCB, 0xF7,
0x7B, 0xA8, 0x11, 0x5C, 0xDF, 0x36, 0xA3, 0xAA,
0xC6, 0xC2, 0xC8, 0xC5, 0x4D, 0xC9, 0x44, 0x9E,
0xC1, 0xA8, 0xF3, 0x14, 0xBF, 0xF9, 0x7C, 0xD9,
0x59, 0x02, 0xE5, 0x59, 0x3A, 0x0C, 0x45, 0x9A,
0xC6, 0xD0, 0x5C, 0x21, 0x47, 0xDC, 0x41, 0xD7,
0x07, 0xEE, 0xFC, 0xEE, 0x7B, 0x62, 0x39, 0xC3,
0x64, 0x8E, 0xD7, 0xC0, 0xF3, 0x2D, 0xA1, 0x46,
0xEF, 0xBC, 0xE2, 0x8B, 0xD7, 0xE4, 0x16, 0x83,
0x06, 0xDC, 0x81, 0xBF, 0xD5, 0xCB, 0xDD, 0x56,
0xC8, 0x2E, 0xFB, 0xC4, 0xA6, 0x3B, 0x67, 0xD4,
0xA5, 0x47, 0x07, 0x7C, 0x8B, 0x28, 0xC8, 0xCA,
0xD1, 0x98, 0x3D, 0xC0, 0xCD, 0x9D, 0x43, 0x3F,
0xCD, 0xE9, 0xA4, 0xE4, 0x42, 0x41, 0xC0, 0xF3,
0xDF, 0xDD, 0x2B, 0x35, 0xC3, 0xD1, 0x53, 0xDE,
0x99, 0x6E, 0x27, 0x76, 0xB9, 0xA6, 0xB6, 0xB2,
0x54, 0x71, 0xD9, 0x66, 0x90, 0x30, 0xCF, 0x5B,
0xB2, 0x13, 0xEA, 0x3D, 0x40, 0x78, 0x2C, 0x7A,
0x21, 0x58, 0xEC, 0x2B, 0xC8, 0xA1, 0x81, 0xEE,
0x54, 0xA0, 0xDB, 0xD8, 0xB3, 0x66, 0x31, 0x4C,
0xC9, 0x25, 0x9B, 0xE7, 0x93, 0x9B, 0xC1, 0x63,
0x49, 0x75, 0x78, 0x75, 0x83, 0xAE, 0x65, 0xB9,
0x61, 0xFA, 0xA7, 0x93, 0xA7, 0x27, 0x77, 0x11,
0xEA, 0x7A, 0xCA, 0xD0, 0xAD, 0x22, 0xFA, 0xE3,
0x88, 0x8E, 0x68, 0xB2, 0x4C, 0xDA, 0x1C, 0xE2,
0x25, 0x2D, 0x71, 0x39, 0xC1, 0x20, 0xB1, 0x7B,
0x74, 0x23, 0xBF, 0x5B, 0x57, 0xDE, 0xB8, 0x52,
0x72, 0x98, 0x97, 0x8B, 0xDD, 0x98, 0xD9, 0xC3,
0xE4, 0x8C, 0x24, 0x33, 0x2F, 0xEA, 0xE4, 0x68,
0xDB, 0x57, 0xF9, 0x35, 0xAF, 0x0A, 0x54, 0x8E,
0x2F, 0x2D, 0x98, 0x6E, 0xCA, 0x45, 0xC9, 0xBE,
0xFD, 0x96, 0xE6, 0x34, 0x76, 0x84, 0x91, 0x3B,
0x33, 0xF8, 0xB3, 0xD4, 0xB0, 0xC7, 0x20, 0x7E,
0x02, 0x11, 0x38, 0x17, 0x00, 0xA7, 0x92, 0xBC,
0x65, 0x74, 0x97, 0xBA, 0xF6, 0xD7, 0x2F, 0x62,
0xA3, 0x12, 0x5D, 0xF8, 0xAC, 0xA3, 0xE6, 0x95,
0xC7, 0xB1, 0xFA, 0x05, 0x44, 0x6E, 0xD1, 0xB3,
0x2C, 0x75, 0x50, 0x89, 0x69, 0x36, 0xB0, 0xD4,
0xEC, 0x56, 0x21, 0x2B, 0xCF, 0x12, 0x6E, 0x4B,
0x76, 0xA6, 0x9E, 0x06, 0xB5, 0xB0, 0x9E, 0x1E,
0xF7, 0x93, 0xDF, 0x30, 0x60, 0xDB, 0xFD, 0x92,
0xEC, 0xA1, 0x65, 0x3A, 0x9E, 0xF2, 0xF2, 0xA2,
0x99, 0x2F, 0x99, 0xAC, 0x4B, 0x71, 0x0A, 0x83,
0x8B, 0xF1, 0x50, 0x86, 0xC4, 0x6A, 0x7C, 0x24,
0x17, 0x7A, 0x45, 0xC3, 0x77, 0x0B, 0xAA, 0xA8,
0xDA, 0xB2, 0x9C, 0xD5, 0x55, 0x18, 0x9D, 0xF2,
0x40, 0x5A, 0x65, 0x2B, 0x5C, 0x70, 0x88, 0x1A,
0xF6, 0x8F, 0x17, 0xA7, 0x10, 0x8B, 0x46, 0xF0,
0x79, 0x43, 0x10, 0x2A, 0xFE, 0xF9, 0xDA, 0x82,
0x8A, 0xC3, 0x1B, 0x09, 0x42, 0xE4, 0xF5, 0x91,
0xB4, 0x37, 0xE8, 0x94, 0xF7, 0x8E, 0x6C, 0x1A,
0xCE, 0x1B, 0x96, 0x96, 0xCA, 0xD1, 0xBE, 0xD3,
0x74, 0xC9, 0x25, 0xD0, 0x6C, 0xA4, 0x94, 0xAB,
0x8E, 0xF1, 0x05, 0x7F, 0x18, 0x93, 0x40, 0x4A,
0xCB, 0x1F, 0x89, 0xD4, 0x13, 0x45, 0x3C, 0x90,
0x25, 0x33, 0x73, 0x7F, 0x2A, 0xF8, 0xAB, 0x17,
0x5C, 0xEA, 0x69, 0x25, 0x33, 0x07, 0xDB, 0xB1,
0x7D, 0x5A, 0x7E, 0xE5, 0x8D, 0x62, 0xC0, 0xEB,
0x5A, 0x70, 0xAA, 0xD7, 0xA1, 0x13, 0x7B, 0x89,
0x10, 0x73, 0x52, 0x8E, 0x61, 0xBD, 0xD0, 0x09,
0x86, 0x83, 0xC0, 0x92, 0xC6, 0x1F, 0xB3, 0x21,
0xE9, 0x19, 0xAB, 0xE7, 0x55, 0x8C, 0xBC, 0x41,
0x34, 0x87, 0xB0, 0x8B, 0x98, 0x73, 0xAD, 0x12,
0xA4, 0x77, 0xD7, 0xEF, 0xA6, 0xDC, 0xF3, 0xF4,
0x45, 0x6F, 0x10, 0x86, 0x9D, 0xE7, 0x22, 0x85,
0x6A, 0x4A, 0xB2, 0x34, 0x25, 0x4E, 0x77, 0x17,
0x2E, 0xBF, 0x01, 0xD9, 0xEC, 0xE3, 0x59, 0x36,
0xF5, 0xDC, 0xA7, 0xD1, 0x2E, 0x12, 0xD7, 0x28,
0xEE, 0x8B, 0x3A, 0x6C, 0x2B, 0x5E, 0x2C, 0x6C,
0x91, 0x0B, 0xB5, 0x75, 0xB0, 0xE5, 0x36, 0x3A,
0x1C, 0x76, 0x00, 0xB1, 0x91, 0xDF, 0x02, 0x02,
0x18, 0x40, 0x68, 0x5E, 0x2B, 0x1A, 0x42, 0xED,
0xD7, 0xB4, 0x26, 0xB0, 0xE4, 0x7E, 0xD4, 0x61,
0xF4, 0x77, 0xDB, 0x59, 0xAC, 0x8E, 0x3D, 0x76,
0xD3, 0x09, 0x12, 0xFE, 0x7B, 0xE3, 0x2C, 0x83,
0x22, 0x3D, 0xBC, 0xC3, 0xD3, 0xB2, 0xF6, 0x94,
0x53, 0xC6, 0xB6, 0xC1, 0x3E, 0x46, 0x21, 0xF0,
0x29, 0xAC, 0x47, 0x8B, 0xCD, 0x85, 0xD0, 0x99,
0x29, 0xD1, 0x9A, 0xAD, 0xA0, 0x6D, 0x5B, 0xC5,
0x26, 0x71, 0x49, 0x2D, 0x5B, 0x96, 0xBB, 0x67,
0xB7, 0x9E, 0xD1, 0x09, 0xAB, 0xB0, 0x15, 0xA8,
0xC1, 0xC5, 0x1E, 0xB8, 0xC8, 0x06, 0x36, 0x6E,
0xF0, 0x2F, 0x00, 0xAA, 0xF3, 0xF7, 0x16, 0xD4,
0x39, 0x77, 0xB2, 0xC8, 0xF5, 0x83, 0x53, 0xB2,
0x58, 0x18, 0x5A, 0xF5, 0xA1, 0xBB, 0xB6, 0x14,
0x54, 0xE0, 0x83, 0x8C, 0x52, 0x4E, 0xB1, 0xC2,
0xFE, 0x7C, 0xA5, 0xE1, 0x6A, 0x01, 0xDE, 0xBF,
0x6F, 0xED, 0x9D, 0xC1, 0xD9, 0x35, 0x82, 0xC2,
0x88, 0x10, 0x35, 0xF3, 0x95, 0x61, 0x09, 0xC0,
0x75, 0x19, 0x9D, 0xB5, 0x1D, 0x98, 0x87, 0x63,
0x28, 0x17, 0xEF, 0x40, 0xF8, 0x05, 0x3C, 0x90,
0xDE, 0x6F, 0xAF, 0x45, 0x3A, 0x68, 0x0F, 0xE5,
0x9F, 0x64, 0x48, 0x6E, 0xFB, 0xA0, 0x11, 0x39,
0xB8, 0x8C, 0x8F, 0xDE, 0xDF, 0x24, 0xFB, 0x1B,
0x41, 0x5B, 0x43, 0xB2, 0x93, 0x7E, 0xB0, 0x54,
0x9B, 0x9A, 0x8B, 0x7F, 0x4C, 0xD9, 0xBC, 0x66,
0xEF, 0xEE, 0x76, 0xD3, 0x48, 0x75, 0xD3, 0x0C,
0xB2, 0x56, 0x7E, 0xB5, 0x4E, 0x2B, 0x53, 0xB8,
0x1E, 0xA4, 0x05, 0x25, 0x2F, 0xEC, 0xC1, 0x19,
0xB8, 0x0A, 0xD5, 0x9D, 0x44, 0x46, 0x4F, 0x92,
0xCE, 0x8E, 0xA4, 0x8E, 0xEE, 0xDB, 0x54, 0xC4,
0xF7, 0x92, 0x8E, 0xE4, 0x1C, 0xEA, 0xD2, 0x06,
0x93, 0x51, 0x99, 0x84, 0xBF, 0xCA, 0xF3, 0xE8,
0x4B, 0x5B, 0x34, 0xCA, 0x55, 0x69, 0x8C, 0xB5,
0x90, 0x1F, 0xB7, 0x0D, 0x66, 0xCF, 0x99, 0xEF,
0x1D, 0x5F, 0xE3, 0x1B, 0xFE, 0xA0, 0xBE, 0xD1,
0x76, 0xBB, 0x64, 0xBC, 0x39, 0x94, 0xCB, 0xD1,
0x68, 0x2B, 0x4B, 0x34, 0xB6, 0x00, 0x38, 0x1D,
0x89, 0x7B, 0x93, 0xBA, 0x20, 0x4F, 0xA5, 0x19,
0xB7, 0xD8, 0xA4, 0x04, 0xAA, 0x87, 0x5B, 0xE7,
0x9B, 0x42, 0xCA, 0xBB, 0x91, 0xC7, 0xCD, 0xDF,
0x25, 0x14, 0xBD, 0x07, 0x9A, 0xC6, 0x17, 0x14,
0x0E, 0x82, 0x1E, 0x04, 0x93, 0x55, 0x7D, 0xCE,
0x5A, 0x1A, 0xF2, 0x4B, 0xD3, 0xDC, 0xED, 0x14,
0xD5, 0x40, 0x31, 0x6B, 0xBC, 0xDF, 0x7D, 0x20,
0x94, 0xB5, 0x32, 0x6E, 0x36, 0x7A, 0xED, 0xE8,
0x73, 0x10, 0x39, 0x56, 0x34, 0xDF, 0x27, 0x9C,
0x9B, 0x41, 0xF5, 0x9E, 0x30, 0xDD, 0xB9, 0x23,
0xFA, 0x13, 0xFB, 0xBA, 0xAE, 0x5B, 0x61, 0x9D,
0xCA, 0xA9, 0x4B, 0x98, 0xBE, 0xD6, 0x80, 0xE5,
0x0E, 0xFE, 0xCC, 0x1D, 0x75, 0xE9, 0xA4, 0x0E,
0x0E, 0x6A, 0xCF, 0xA9, 0x71, 0xC5, 0x04, 0xE2,
0xDE, 0x17, 0x8F, 0x94, 0x5D, 0xB3, 0xFB, 0x67,
0xDE, 0x8D, 0xAE, 0xAF, 0x67, 0x98, 0x93, 0x59,
0x31, 0x2E, 0xB9, 0xC5, 0xCC, 0x70, 0xFC, 0xB1,
0x47, 0xB0, 0xA5, 0x19, 0x4F, 0xD0, 0x11, 0x1D,
0x57, 0xA8, 0x50, 0xE6, 0xBA, 0x67, 0xD1, 0x87,
0xE2, 0xFE, 0x01, 0xE2, 0x66, 0x7D, 0xEB, 0x8F,
0x33, 0x78, 0xE7, 0xBB, 0xAE, 0x70, 0x33, 0x12,
0xDA, 0x33, 0x9C, 0x99, 0x7B, 0x3D, 0x25, 0xA1,
0x37, 0x23, 0xA3, 0x9C, 0xBD, 0xF2, 0x69, 0x0B,
0xEB, 0x98, 0xE5, 0x5C, 0xED, 0x40, 0x4E, 0xD4,
0x66, 0xBB, 0x39, 0x6C, 0x8F, 0xE6, 0x4C, 0xBC,
0x5F, 0x0C, 0xD9, 0xD7, 0xAC, 0x45, 0x85, 0x3A,
0x54, 0xE4, 0xEC, 0xA2, 0x5A, 0xD2, 0x45, 0xFE,
0x0F, 0xF7, 0x03, 0x4A, 0x35, 0x9D, 0x7D, 0x74,
0x21, 0xD2, 0x93, 0x44, 0xE3, 0xCE, 0x4C, 0x3D,
0x66, 0x58, 0x7F, 0x80, 0x95, 0x28, 0x76, 0xB4,
0x81, 0x48, 0x91, 0xE6, 0x83, 0x82, 0xEA, 0x70,
0x60, 0xB9, 0xFB, 0xD8, 0x6E, 0x53, 0x40, 0xBC,
0xB7, 0x9A, 0xDA, 0xAF, 0x20, 0x26, 0x38, 0x21,
0x86, 0x36, 0xB3, 0x3F, 0xEB, 0x20, 0x3C, 0xDD,
0x95, 0xAC, 0xF4, 0x54, 0x2F, 0x7F, 0xDD, 0x6A,
0xF3, 0x79, 0x75, 0x33, 0xCE, 0x1D, 0x5A, 0xF8,
0x7D, 0xF0, 0xF3, 0x1B, 0xB8, 0xE7, 0x15, 0xF4,
0x54, 0xBF, 0x9B, 0xC1, 0x64, 0x69, 0x1B, 0x80,
0x63, 0x6C, 0x7C, 0xD7, 0x52, 0x46, 0xA4, 0xF9,
0xDF, 0xD4, 0x13, 0x87, 0x8B, 0xB6, 0x8F, 0x76,
0xC7, 0xB0, 0xC3, 0xF1, 0x22, 0x11, 0xE5, 0x44,
0x62, 0x13, 0x5A, 0xB3, 0xB2, 0x43, 0x58, 0x6B,
0xBF, 0xE3, 0x8C, 0x5E, 0xDF, 0x52, 0xC0, 0x2C,
0x37, 0x67, 0x7B, 0x02, 0xD7, 0xDD, 0xA4, 0x80,
0xEA, 0xB7, 0x2D, 0xA2, 0xD1, 0x9F, 0xAF, 0x9B,
0x47, 0x4C, 0x14, 0xC0, 0x8A, 0xE7, 0x37, 0x69,
0x7E, 0x70, 0x89, 0xD3, 0xCD, 0x21, 0xB9, 0x0D,
0x0E, 0xCD, 0x51, 0xCD, 0xE9, 0x4E, 0x5F, 0x65,
0x3C, 0xE1, 0x17, 0x98, 0x3A, 0x8D, 0x77, 0x88,
0x96, 0x87, 0xEE, 0x96, 0xA2, 0x93, 0xFC, 0x47,
0x75, 0x6F, 0xD7, 0x25, 0x0F, 0x2E, 0x12, 0xA8,
0x7A, 0xA4, 0x3A, 0x19, 0xF4, 0xC5, 0x81, 0x70,
0x0E, 0x0C, 0x63, 0x40, 0xD1, 0xD9, 0x41, 0x97,
0xE4, 0xE0, 0x0E, 0xE1, 0xAD, 0x84, 0xED, 0xD1,
0x78, 0x3B, 0xDC, 0x3F, 0x99, 0xF7, 0x4F, 0x0D,
0x8F, 0x88, 0xD8, 0x10, 0x2D, 0xFE, 0xD2, 0xED
};
Structure "Folder"
typedef struct
{
unsigned char type;
unsigned int index;
unsigned int parent;
unsigned short lg_nom;
char nom[];
} VSFFOLDER, *LPVSFFOLDER;
Structure "File"
typedef struct
{
unsigned char type;
unsigned int offset;
unsigned short lg_nom;
char nom[];
} VSFFILE, *LPVSFFILE;
Structure "Object"
typedef struct
{
unsigned long id_folder;
union
{
unsigned char type_pack;
unsigned char pal_datas;
};
unsigned char dummy1;
unsigned short lg_sprite;
unsigned short ht_sprite;
short offset_x;
short offset_y;
short offset_x2;
short offset_y2;
unsigned char dummy2[2];
unsigned int flag_floor;
unsigned char color_key;
unsigned char dummy3[3];
unsigned int lg_datas;
unsigned char datas;
} VSFOBJECT, *LPVSFOBJECT;