-
Notifications
You must be signed in to change notification settings - Fork 6
##Format des fichiers T4C Worlds.wda et T4C Edit.wda
Sur cette page vous seront exposés tous les algorithmes et les constantes nécessaires à la programmation de votre propre éditeur de ressources du jeu. Les index de liste déroulante sont les mêmes que ceux des listes déroulantes de l'éditeur Vircom. Le cryptage est un XOR sur des blocs de données de 3418 octets.
###Valeurs des constantes et format des paramètres des effets de sort
Types d'effet de sort et paramètres (données provenant des WDAtools).
NOTE: l'effet "Player edit" n'est pas un effet présent dans le serveur T4C 1.25 de Vircom ; il s'agit d'une addition binaire faite par Jean Suifou sous forme de patch. Cet effet permet de lire/écrire dans un flag défini certains offsets de la structure du joueur, permettant ainsi à un sort de récupérer ou d'agir sur ce dernier de manière plus approfondie que ce que le format WDA de base et l'éditeur de Vircom ne permettent.
[EFFET] [PARAMETRE 1] [PARAMETRE 2] [PARAMETRE 3] [PARAMETRE 4]
Modify health Formule Rayon %age de succès
Attribute boost RT upd. TRUE|FALSE Nom de la stat Formule
Modify flag ID du flag Valeur
Player edit 0 = Get | 1 = Set Offset Taille des données ID flag dest
Effect 5
Summon Type (Monster|NPC) ID texte
Recall Position X Position Y Monde
Effect 8
Spell hook Sort Type de hook %age de succès Délai initial
Drain health Formule Rayon Dégâts %age de succès
Sanctuary
Vaporize [GM]
Dispel Sort %age de succès
Deal exhaust Epuis. attaque Epuis. mental Epuis. physique %age de succès
Invisibility %age de succès Effet visuel
Detect invis. %age de succès Effet visuel
Detect hidden %age de succès Effet visuel
Les valeurs ci-dessous sont fournies pour référence seulement car elles concernent l'effet "Player Edit" de Jean Suifou.
[OFFSET] [TAILLE] [DESCRIPTION]
96 2 octets Intelligence pure
98 2 octets Endurance pure
100 2 octets Force pure
102 2 octets Agilité pure
106 2 octets Sagesse pure
110 2 octets Esquive pure
112 2 octets Attaque pure
120 4 octets ID du joueur dans la base de données
124 4 octets ID du skin du joueur
128 4 octets Karma
188 4 octets Position Y sur la carte
192 4 octets Numéro du monde (0,1,2,3...)
196 4 octets Position X sur la carte
238 4 octets Niveau
312 2 octets Points de vie maximum
316 2 octets Points de vie actuels
320 2 octets Mana maximum
322 2 octets Mana actuelle
336 4 octets XP (données incomplètes)
408 4 octets Or sur soi
480 2 octets Points de compétence disponibles
482 2 octets Points de caractéristiques disponibles
12512 2 octets Poids maximal transportable
###Structure des fichiers T4C Worlds.wda et T4C Edit.wda décryptés
TODO: mettre en forme
Taille type Description
===============================================================================
4 unsigned long Marqueur (toujours 68775)
1 unsigned char Type de WDA (T4C Worlds(RO) = 0x01, T4C Edit(RW) = 0x00)
Bloc des Sorts
==============
4 unsigned long Nombre de sorts
Pour chaque sort:
{
4 unsigned long ID du sort (gamme: 10000 - 10999)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du sort
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Epuisement mental
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Epuisement physique
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Epuisement attaque
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Durée
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Fréquence de temps
4 unsigned long Elément (index liste déroulante, débute à 0)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Coût de mana
4 unsigned long Rayon des dégâts
4 unsigned long Effet visuel (index liste déroulante, débute à 30000)
4 unsigned long Effet visuel sur la cible (index liste déroulante, débute à 30000)
4 unsigned long Type de cible (index liste déroulante, débute à 0)
4 unsigned long Type d'attaque (index liste déroulante, 1 = physique, 2 = mentale)
4 unsigned long Minimum sagesse
4 unsigned long Minimum intelligence
4 unsigned long Level minimum
1 bool Ligne de vue
1 bool Contrôle PVP
1 bool Sort d'attaque
4 unsigned long Icône du sort (index liste déroulante, débute à 0)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * % de réussite
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Description
4 unsigned long Nombre d'effets du sort
Pour chaque effet de sort:
{
4 unsigned long Type d'effet (index liste déroulante, débute à 1)
4 unsigned long Nombre de paramètres dans l'effet
Pour chaque paramètre:
{
4 unsigned long Numéro du paramètre (débute à 1)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Expression littérale du paramètre
}
}
4 unsigned long Nombre de sorts pré-requis
Pour chaque sort pré-requis:
{
4 unsigned long ID du sort pré-requis
}
}
Bloc des Cartes
===============
4 unsigned long Nombre de cartes
Dans le cas du fichier T4C Edit.wda, ce fichier ne contient pas de cartes de collision ; la valeur ci-dessus est donc toujours 0 et les données du fichier passent directement au bloc des objets (voir plus loin). Dans le cas du fichier T4C Worlds, ce fichier contient des cartes de collision et les données du fichier incluent donc les structures suivantes.
Pour chaque carte:
{
2 unsigned short Numéro de la carte (indice Z)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de la carte
2 unsigned short Taille X de la carte (en principe 3072)
2 unsigned short Taille Y de la carte (en principe 3072)
Pour chaque position Y sur la carte:
{
Pour chaque position X sur la carte:
{
0.5 4 bits Code de couleur (débute à 0)
}
}
}
Voici donc le bloc des objets, suivi des blocs restants du fichier :
Bloc des Objets
===============
4 unsigned long Nombre d'objets
Pour chaque objet:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de l'objet
4 unsigned long ID numérique de l'objet (gamme 89 - LONG_MAX)
4 unsigned long Structure de l'objet (index liste déroulante, débute à 0)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'objet
4 unsigned long ID de l'apparence de l'objet
1 unsigned char Bitmask (type d'objet): ???|rebut|bijou|potion|magique|signe|armure|arme
1 unsigned char ??? (toujours 0x00)
1 unsigned char ??? (toujours 0x00)
1 unsigned char ??? (toujours 0x00)
4 unsigned long Position dans l'équipement (index liste déroulante, débute à 0. -1=non équip)
4 unsigned long Prix de vente
4 unsigned long Poids
8 double Classe d'Armure (CA)
4 unsigned long Esquive perdue
4 unsigned long Endurance minimum
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Formule de dégâts
4 unsigned long Attaque requise
4 unsigned long Force requise
4 unsigned long Agilité requise
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'objet serrure
4 unsigned long Difficulté de la serrure
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Texte du signe
4 unsigned long Pièces d'or dans le conteneur
4 unsigned long Temps de respawn global du conteneur
4 unsigned long Temps de respawn du conteneur
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Temps entre chaque coup
4 unsigned long Radiance
4 unsigned long Nombre de charges
4 unsigned long Intelligence minimum
4 unsigned long Sagesse minimum
4 unsigned long ??? (toujours 0x00)
1 unsigned char Bitmask: Non-mul|détr.renaiss|non-cach|non-équip|non-rebut|non-vol|???|non-jet
1 unsigned char ??? (toujours 0x00)
1 unsigned char ??? (toujours 0x00)
1 unsigned char ??? (toujours 0x00)
1 bool Objet unique
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Emplacement
1 bool Peut être invoqué
1 bool Arc
1 bool Usage illimité
1 unsigned long Nombre de groupes d'objets dans le conteneur
Pour chaque groupe d'objets dans le conteneur:
{
1 unsigned long Nombre d'objets dans le groupe
Pour chaque objet dans le groupe:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de l'objet
}
}
4 unsigned long Nombre de boosts associés à l'objet
Pour chaque boost associé à l'objet:
{
4 unsigned long ID du boost (ID sauvée dans la base de données)
4 unsigned long Stat à booster
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Valeur du boost
4 unsigned long Intelligence minimum pour que le boost s'active
4 unsigned long Sagesse minimum pour que le boost s'active
}
4 unsigned long Nombre de sorts associés à l'objet
Pour chaque sort associé à l'objet:
{
4 unsigned long ID du sort
4 unsigned long Enclenchement (index liste déroulante, débute à 0, NON SEQUENTIEL!)
4 unsigned long Level minimum
}
}
Bloc des Positions des objets
=============================
4 unsigned long Nombre de positions d'objet
Pour chaque position d'objet:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de la position d'objet
4 unsigned long Position X
4 unsigned long Position Y
4 unsigned long Numéro de la carte (indice Z)
}
Bloc des Créatures
==================
4 unsigned long Nombre de créatures
Pour chaque créature:
{
4 unsigned long ID numérique (gamme 1 - LONG_MAX)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de la créature
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de la créature
4 unsigned long Force
4 unsigned long Endurance
4 unsigned long Agilité
4 unsigned long Intelligence
4 unsigned long ??? (Volonté, toujours 0)
4 unsigned long Sagesse
4 unsigned long ??? (Chance, toujours 0)
4 unsigned long Résistance Air
4 unsigned long Résistance Terre
4 unsigned long Résistance Eau
4 unsigned long Résistance Feu
4 unsigned long Résistance Nécromancie
4 unsigned long Résistance Lumière
4 unsigned long Puissance Air
4 unsigned long Puissance Terre
4 unsigned long Puissance Eau
4 unsigned long Puissance Feu
4 unsigned long Puissance Nécromancie
4 unsigned long Puissance Lumière
4 unsigned long Niveau
4 unsigned long Points de vie (HP)
4 unsigned long Esquive
8 double Classe d'armure
4 unsigned long Apparence
4 unsigned long ID d'objet (vêtement corps)
4 unsigned long ID d'objet (vêtement pieds)
4 unsigned long ID d'objet (vêtement mains)
4 unsigned long ID d'objet (vêtement tête)
4 unsigned long ID d'objet (vêtement jambes)
4 unsigned long ID d'objet (arme)
4 unsigned long ID d'objet (bouclier)
4 unsigned long ID d'objet (vêtement dos)
4 unsigned long Agressivité
4 unsigned long ID du clan de la créature
4 unsigned long ??? (Vitesse, toujours 0)
8 double Expérience reçue par coup porté
8 double Expérience reçue à la mort de la créature
4 unsigned long Minimum de pièces d'or abandonné par la créature lors de sa mort
4 unsigned long Maximum de pièces d'or abandonné par la créature lors de sa mort
1 bool Peut attaquer
4 unsigned long Nombre de types d'attaque
Pour chaque type d'attaque:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Formule de dégâts
4 unsigned long Niveau d'attaque (0 pour les sorts)
4 unsigned long Pourcentage de succès
4 unsigned long ID du sort lié à l'attaque
4 unsigned long Distance minimale de lancement du sort
4 unsigned long Distance maximale de lancement du sort
}
4 unsigned long Nombre de flags donnés à la mort de la créature
Pour chaque flag donné à la mort de la créature:
{
4 unsigned long ID du flag
4 unsigned long Valeur du flag
1 bool Incrémenter la valeur précédente
}
4 unsigned long Nombre d'objets abandonnés par la créature à sa mort
Pour chaque objet abandonné par la créature à sa mort:
{
4 unsigned long ID de l'objet abandonné
8 double Pourcentage de chances que cet objet soit abandonné
}
}
Bloc des Groupes de créatures
=============================
4 unsigned long Nombre de groupes de créatures
Pour chaque groupe de créatures:
{
4 unsigned long Temps d'apparition minimum
4 unsigned long Temps d'apparition maximum
4 unsigned long Distance maximale d'apparition par-rapport à la position indiquée
4 unsigned long Nombre minimal d'apparitions
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du groupe de créatures
4 unsigned long Nombre de créatures
Pour chaque créature:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de la créature
}
4 unsigned long Nombre de positions d'apparition
Pour chaque position d'apparition:
{
4 unsigned long Position X
4 unsigned long Position Y
4 unsigned long Numéro de la carte (indice Z)
}
}
Bloc des Téléportations
=======================
4 unsigned long Nombre de téléportations
Pour chaque téléportation:
{
4 unsigned long Position X de départ
4 unsigned long Position Y de départ
4 unsigned long Numéro de la carte (indice Z) de départ
4 unsigned long Position X d'arrivée
4 unsigned long Position Y d'arrivée
4 unsigned long Numéro de la carte (indice Z) d'arrivée
}
Bloc des Relations entre clans
==============================
4 unsigned long ID du clan la plus élevée (cf. bloc des clans)
4 unsigned long Nombre de relations entre clans
Pour chaque relation entre clans:
{
2 unsigned short ID du premier clan
2 unsigned short ID du second clan
2 signed short Relation entre les clans (-100 = amour, 0 = neutre, 100 = haine)
}
Bloc des Clans
==============
4 unsigned long Nombre de clans
Pour chaque clan:
{
2 unsigned short ID du clan
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du clan
}
Bloc des Flags
==============
4 unsigned long Nombre de flags
Pour chaque flag:
{
4 unsigned long ID du flag
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du flag
}
1 unsigned char Présence ou non de blocs supplémentaires
Dans le cas du fichier T4C Edit.wda, les sections suivantes n'existent pas ; la valeur char ci-dessus est donc toujours 0, et c'est la fin du fichier. Dans le cas du fichier T4C Worlds.wda, ces blocs existent ; la valeur char ci-dessus est à un et les données du fichier continuent avec les blocs suivants :
Bloc des Apparences d'objets
============================
4 unsigned long Nombre d'apparences d'objets
Pour chaque apparence d'objet:
{
4 unsigned long ID de l'apparence d'objet
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'apparence d'objet
}
Bloc des Apparences de créatures
================================
4 unsigned long Nombre d'apparences de créatures
Pour chaque apparence de créature:
{
4 unsigned long ID de l'apparence n°1 de la créature
4 unsigned long ID de l'apparence n°2 de la créature (?)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'apparence d'objet
}
Bloc des Lieux
==============
4 unsigned long Nombre de lieux
Pour chaque lieu:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du lieu
}
Bloc des Icônes
===============
4 unsigned long Nombre d'icônes
Pour chaque icône:
{
4 unsigned long ID de l'icône
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'icône
}
Bloc des Effets de sort
=======================
4 unsigned long Nombre d'effets de sort
Pour chaque effet de sort:
{
4 unsigned long ID de l'effet de sort
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom de l'effet de sort
}
##Format du fichier NPCs.wda
Sur cette page vous seront exposés tous les algorithmes et les constantes nécessaires à la programmation de votre propre éditeur de PNJs. Les index de liste déroulante sont les mêmes que ceux des listes déroulantes de l'éditeur Vircom. Le cryptage est un XOR sur des blocs de données de 3418 octets.
##Indices des commandes
Les valeurs entre parenthèses sont les valeurs hexa swappées, c'est à dire exactement telles qu'elles apparaissent dans le fichier décrypté parcouru avec un éditeur hexadécimal. Tous les paramètres sont des chaînes de caractères, y compris ceux qui sont censés ne contenir qu'une valeur numérique.
###Structures conditionnelles
Ces valeurs définissent des sous-blocs d'instructions. Ce ne sont pas des instructions à proprement parler mais des marqueurs de sous-bloc.
Valeur Structure Rôle
================================================================================================
2 (02000000) IF Evaluation d'expression et branchement conditionnel
5 (05000000) FOR Répétition d'un bloc un nombre défini de fois
6 (06000000) WHILE Répétition d'un bloc tant qu'une condition évaluée est vraie
Cas spécial:
20 (14000000) ASSIGNATION Assignation d'une valeur à une variable temporaire
Instructions originales présentes dans la version 1.25 de Vircom
Valeur Nom de la commande Params Paramètre 1 Paramètre 2 Paramètre 3
================================================================================================
7 (07000000) GiveItem 1 ID de l'objet
8 (08000000) GiveXP 1 Formule
9 (09000000) SetFlag 2 ID du flag Formule
10 (0A000000) HealPlayer 1 Formule
11 (0B000000) SayText 1 Texte
12 (0C000000) BreakConversation 0
13 (0D000000) FightPlayer 0
14 (0E000000) TakeItem 1 ID de l'objet
15 (0F000000) Teleport 3 Position X Position Y Monde
16 (10000000) CastSpell 1 ID du sort
17 (11000000) CastSpellOnNPC 1 ID du sort
18 (12000000) GiveGold 1 Formule
19 (13000000) TakeGold 1 Formule
21 (15000000) DisplayItemsSoldByNPC 0
22 (16000000) DisplayItemsBoughtByNPC 0
23 (17000000) DisplayTrainedSkills 0
24 (18000000) DisplayTaughtSkills 0
Additions de Dialsoft pour la V2
Valeur Nom de la commande Params Paramètre 1 Paramètre 2 Paramètre 3
================================================================================================
25 (19000000) PrivateSysMessage 1 Texte
26 (1A000000) GlobalSysMessage 1 Texte
27 (1B000000) ShoutMessage 2 Nom du canal Message
28 (1E000000) SetGlobalFlag 2 ID du flag Formule
29 (1F000000) GiveKarma 1 Formule
###Structure du fichier NPCs.wda décrypté
TODO: mettre en forme
Taille type Description
===============================================================================
4 unsigned long Type de WDA ou signature (toujours 1)
Bloc des PNJs
=============
4 unsigned long Nombre de PNJs
Pour chaque PNJ:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Nom du PNJ
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID du PNJ
4 unsigned long ??? (toujours 1)
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Apparence du PNJ
4 unsigned long Nombre d'objets vendus par le PNJ
Pour chaque objet vendu par le PNJ:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * ID de l'objet
4 unsigned long Prix de l'objet
}
4 unsigned long Nombre de types d'objets achetés par le PNJ
Pour chaque type d'objet acheté par le PNJ:
{
4 unsigned long ID du type d'objet (NON SEQUENTIEL)
4 unsigned long Prix minimum pour ce type d'objet
4 unsigned long Prix maximum pour ce type d'objet
}
4 unsigned long Nombre d'entraînements dispensés par le PNJ
Pour chaque entraînement dispensé par le PNJ:
{
4 unsigned long ID de la compétence à entraîner (NON SEQUENTIEL)
4 unsigned long Points maximum obtenables dans la compétence
4 unsigned long Prix de l'entraînement par point de compétence entraîné
}
4 unsigned long Nombre d'enseignements dispensés par le PNJ
Pour chaque enseignement dispensé par le PNJ:
{
4 unsigned long ID du sort à enseigner
4 unsigned long Coût en points de compétences de l'enseignement
4 unsigned long Prix de l'enseignement
}
4 unsigned long ??? (toujours 1)
4 unsigned long ??? (toujours 1)
4 unsigned long Nombre de répliques
Pour chaque réplique:
{
4 unsigned long ??? (toujours 1)
1 unsigned char Type de réplique (0 = normale, 1 = texte initial, 2 = par défaut)
4 unsigned long Relation entre les mots-clés (1 = ET, 2 = OU, 3 = ordonné)
4 unsigned long Nombre de mots-clés (0 pour texte initial et texte par défaut)
Pour chaque mot-clé:
{
4 unsigned long Taille de la chaîne de caractères suivante
(variable) char * Mot-clé
}
+--> :: 4 unsigned long ??? (toujours 1)
| :: 4 unsigned long ??? (toujours 1)
| :: 4 unsigned long Nombre d'instructions
| ::
| :: Pour chaque instruction:
| :: {
| :: 4 unsigned long ID de l'instruction
| ::
| :: Si ID de l'instruction == "IF" (02000000)
| :: {
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Condition de l'instruction
| ::
| :: 1 unsigned char Présence de cas général (ELSE)
| ::
| :: Si présence de cas général:
| :: {
+----::------------------------ Réentrance
| :: }
| ::
| :: 4 unsigned long Nombre de cas supplémentaires (ELSE IF)
| ::
| :: Pour chaque cas supplémentaire:
| :: {
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Condition du cas
+----::------------------------ Réentrance
| :: }
| ::
+----::---------------- Réentrance
| :: }
| :: Sinon si ID de l'instruction == "FOR" (05000000)
| :: {
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Valeur de départ de la boucle
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Valeur d'arrivée de la boucle
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Nom de la variable à incrémenter
+----::---------------- Réentrance
| :: }
| :: Sinon si ID de l'instruction == "WHILE" (06000000)
| :: {
| :: 4 unsigned long Taille de la chaîne de caractères suivante
| :: (variable) char * Condition de la boucle
+----::---------------- Réentrance
:: }
:: Sinon si ID de l'instruction == NOMINATION (14000000)
:: {
:: 4 unsigned long Taille de la chaîne de caractères suivante
:: (variable) char * Variable
:: 4 unsigned long Taille de la chaîne de caractères suivante
:: (variable) char * Valeur
:: }
:: Sinon
:: {
:: 4 unsigned long Nombre de paramètres de l'instruction
::
:: Pour chaque paramètre de l'instruction:
:: {
:: 4 unsigned long Taille de la chaîne de caractères suivante
:: (variable) char * Paramètre de l'instruction
:: }
:: }
::
:: 4 unsigned long ??? (toujours 1)
:: }
}
}
##Cryptographie des fichiers WDA
###Clé de cryptage
Il s'agit d'un tableau de 3418 octets choisis arbitrairement par Vircom pour masquer les données originales avec la technique du ou exclusif (XOR). Cette technique est la technique d'encryption la plus simple qui soit : la même clé, combinée à la même opération, soit encrypte soit décrypte chaque octet des données sur laquelle elle s'applique.
Voici la clé utilisée par Vircom pour masquer les données :
unsigned char key[3418] =
{
0xE1, 0xC4, 0x9B, 0x1B, 0xC0, 0xC6, 0x30, 0xC5, 0x0D, 0x58, 0xB7, 0x01, 0xCE, 0x7F, 0x33, 0xD3, 0x07, 0x3D, 0xA9,
0x3F, 0xBA, 0x99, 0x1C, 0x4A, 0xED, 0x94, 0x90, 0xF7, 0xA3, 0x33, 0x09, 0x4A, 0xE1, 0x7B, 0x8B, 0x47, 0xA9, 0x6F,
0x1B, 0xF3, 0x01, 0x14, 0xBC, 0x51, 0xED, 0x6C, 0x73, 0x65, 0x6F, 0x7D, 0x42, 0x34, 0x8D, 0x4A, 0x2F, 0xC1, 0x4A,
0xD8, 0x3D, 0x10, 0xAA, 0x2A, 0x71, 0x25, 0xB1, 0x43, 0xCD, 0x05, 0x64, 0x2A, 0x57, 0xB3, 0xC6, 0xE0, 0x12, 0x33,
0xDC, 0x6B, 0x03, 0x89, 0xA8, 0xCE, 0x2C, 0xBA, 0x30, 0x0D, 0x93, 0xC9, 0x77, 0x2D, 0x3C, 0xBA, 0x82, 0x31, 0x29,
0x91, 0x53, 0x1D, 0x60, 0x53, 0xF0, 0xF5, 0xE4, 0x03, 0x5C, 0xBE, 0xB9, 0xA5, 0x9C, 0x7B, 0xE4, 0x3E, 0xB2, 0x30,
0x68, 0xD1, 0xA4, 0xE1, 0x49, 0x62, 0x76, 0x93, 0x8B, 0xF5, 0x2A, 0x49, 0x33, 0x8F, 0xC6, 0x07, 0x44, 0x32, 0x4D,
0xD1, 0xC2, 0xE4, 0xC3, 0xAC, 0xB1, 0xA9, 0x2D, 0x9B, 0x16, 0x84, 0x8E, 0xA2, 0xF4, 0x78, 0xEA, 0xC6, 0x4F, 0x8C,
0x45, 0x0A, 0x2C, 0xC1, 0xA4, 0x72, 0x8D, 0x1D, 0x0A, 0x02, 0x79, 0xA3, 0x7B, 0xBF, 0xF1, 0x57, 0xFB, 0xAC, 0xFA,
0x3D, 0x8F, 0xCD, 0x99, 0x5A, 0x3A, 0x26, 0xD1, 0xB1, 0x00, 0xBC, 0xA7, 0x47, 0xE6, 0x92, 0x1D, 0x1E, 0xEE, 0xAC,
0x39, 0x3C, 0x1E, 0x0E, 0xFE, 0xA4, 0x7A, 0xBD, 0x71, 0x5A, 0x04, 0xBC, 0x94, 0x63, 0xC2, 0x0F, 0x6D, 0xC2, 0xB7,
0xBB, 0x00, 0x7B, 0xE7, 0xC3, 0x4F, 0x92, 0x57, 0x2B, 0x60, 0x0C, 0x0A, 0xF7, 0x36, 0xEC, 0x04, 0x2C, 0xD5, 0x36,
0x49, 0xCC, 0x42, 0xEF, 0xDE, 0x7F, 0x1A, 0xC6, 0x63, 0x92, 0xBB, 0x05, 0x61, 0x7F, 0xD6, 0xA0, 0xDB, 0x48, 0x6F,
0x99, 0xD5, 0xF3, 0x8B, 0xF6, 0x53, 0x83, 0x2D, 0xBB, 0x5A, 0xFD, 0x5A, 0xEA, 0xED, 0x63, 0x14, 0x89, 0x10, 0xBB,
0x61, 0x9B, 0xC8, 0x09, 0x44, 0x24, 0x17, 0x4F, 0xC2, 0x29, 0x03, 0x93, 0xDD, 0xAD, 0x90, 0xD8, 0x9B, 0xB4, 0xC0,
0x22, 0xFF, 0x42, 0x99, 0x76, 0x0E, 0x5C, 0x1E, 0xD6, 0xCB, 0x05, 0x54, 0x48, 0x3A, 0x41, 0x3D, 0xD0, 0x5F, 0x15,
0xDF, 0x70, 0x3E, 0x83, 0x3D, 0x2E, 0xDC, 0x91, 0x5C, 0x0D, 0x3C, 0x43, 0x3E, 0x12, 0x63, 0x9B, 0xE9, 0x3F, 0x53,
0x9F, 0x61, 0x9A, 0x12, 0x52, 0xA8, 0x26, 0xA3, 0xB8, 0xC4, 0xE8, 0x0B, 0xD6, 0xB8, 0xE3, 0x4C, 0xAF, 0x88, 0x1B,
0x6C, 0x47, 0x39, 0x94, 0x6E, 0xA2, 0xCD, 0x52, 0x57, 0xC5, 0x4B, 0x5A, 0x29, 0xB3, 0xB4, 0xAF, 0xEA, 0x70, 0x0E,
0x55, 0x9E, 0x00, 0x5B, 0x51, 0x47, 0x68, 0xA2, 0xA6, 0xEB, 0xAB, 0xE4, 0x58, 0x8D, 0xCD, 0x27, 0x6B, 0x31, 0xD3,
0x6E, 0xE4, 0xDC, 0xC0, 0xBD, 0xC6, 0x91, 0x98, 0x18, 0x15, 0x54, 0x5F, 0x84, 0xD5, 0x29, 0x19, 0x04, 0x0B, 0x15,
0xCB, 0x9C, 0xBA, 0x1B, 0x78, 0x51, 0xE6, 0x3F, 0x25, 0x26, 0x94, 0x85, 0xD4, 0x1F, 0xC7, 0xF2, 0x8B, 0x40, 0x83,
0x89, 0x4D, 0x8E, 0xCC, 0x4E, 0x1F, 0x0C, 0xA6, 0x46, 0x03, 0xBE, 0x16, 0x74, 0xFF, 0xA8, 0x1F, 0xDC, 0x17, 0xCF,
0xC6, 0x82, 0x4D, 0x36, 0x0D, 0x6A, 0xA7, 0xE1, 0xFA, 0x99, 0x28, 0xD4, 0x90, 0x12, 0xD4, 0x14, 0xD4, 0xDA, 0xB0,
0xA4, 0xC9, 0xF3, 0xBF, 0x88, 0x72, 0x63, 0x05, 0xC5, 0xD6, 0x2D, 0x86, 0x5E, 0xF6, 0x56, 0x47, 0x57, 0xD8, 0xE0,
0x4A, 0xB4, 0x7F, 0xD1, 0x96, 0x7A, 0xEF, 0x2D, 0x2C, 0xAB, 0x2D, 0xF6, 0x12, 0x4D, 0x3C, 0x32, 0x4B, 0x64, 0x20,
0xE4, 0xDB, 0xF3, 0xDD, 0x10, 0xC6, 0xFD, 0x78, 0xBB, 0x11, 0x89, 0xF3, 0xE8, 0xBF, 0x98, 0x55, 0x9B, 0xD4, 0x30,
0x9F, 0xD8, 0x55, 0x54, 0xD7, 0xA4, 0x45, 0x08, 0x00, 0x01, 0xA8, 0x50, 0x1E, 0xF6, 0x82, 0x31, 0x35, 0x84, 0xD8,
0xAE, 0x4A, 0xB1, 0xAD, 0xCC, 0x60, 0x80, 0x05, 0x8D, 0x7B, 0xF5, 0xE4, 0xF7, 0xA0, 0x14, 0x4F, 0x0D, 0xD1, 0xE2,
0x49, 0xD3, 0x15, 0x62, 0xD6, 0x4E, 0x6D, 0x98, 0xFA, 0x81, 0xDE, 0x89, 0xBA, 0x70, 0x6D, 0x38, 0x19, 0x20, 0x1D,
0xA9, 0x1B, 0x93, 0xF3, 0xE0, 0xC5, 0xCF, 0xF1, 0xE2, 0x1A, 0xD7, 0x1D, 0xB1, 0x1E, 0xB0, 0x7B, 0x54, 0xD5, 0x5D,
0x0D, 0xCC, 0x43, 0xE2, 0xD9, 0x1F, 0x6D, 0x43, 0xE2, 0x4F, 0x56, 0x85, 0x2C, 0x63, 0x03, 0xAA, 0xBB, 0x5C, 0x76,
0xB8, 0x94, 0x40, 0xB5, 0xB3, 0xBA, 0x12, 0xC4, 0x9D, 0x32, 0xD6, 0xA5, 0x7C, 0xFE, 0x91, 0x5E, 0x53, 0x24, 0x45,
0xF2, 0x27, 0xA7, 0xF8, 0x65, 0xFB, 0x8B, 0xAE, 0xBB, 0xD2, 0xD5, 0x69, 0xF9, 0xB3, 0x88, 0x2F, 0x22, 0x9F, 0xA8,
0x03, 0x3A, 0x9C, 0x3A, 0xEA, 0x46, 0xAD, 0x40, 0xE6, 0x49, 0xD6, 0xC0, 0xFD, 0x47, 0x1C, 0xBD, 0x32, 0x44, 0x82,
0x3C, 0x8A, 0x45, 0x0C, 0x40, 0x07, 0x4D, 0xBE, 0xCD, 0xAF, 0x60, 0x9D, 0xE7, 0x86, 0x82, 0xAB, 0x93, 0x8E, 0xB8,
0xEF, 0xD3, 0xCD, 0x05, 0x6A, 0xAE, 0x46, 0x6D, 0x22, 0x25, 0xFD, 0xF5, 0x1A, 0x3E, 0xF7, 0xA0, 0x56, 0xFB, 0x37,
0x72, 0xDA, 0x63, 0xC1, 0x6F, 0xAB, 0x77, 0x99, 0x9B, 0xCC, 0x3D, 0xC4, 0xFB, 0x41, 0xB8, 0x45, 0x92, 0x0F, 0xEC,
0x20, 0x65, 0x38, 0xDD, 0x59, 0x76, 0xC2, 0x90, 0xF5, 0xCB, 0xB1, 0x08, 0xF7, 0x67, 0x07, 0x49, 0x63, 0x4F, 0xCA,
0x58, 0x3E, 0x85, 0xFD, 0x38, 0x8A, 0x0F, 0xA5, 0xED, 0x4D, 0xF0, 0xC4, 0x7B, 0x8B, 0x2D, 0x60, 0xE7, 0x46, 0xC9,
0x7C, 0x34, 0x84, 0xC8, 0x1D, 0x66, 0x48, 0x2E, 0x46, 0x81, 0x96, 0xFF, 0xFB, 0x8A, 0x73, 0x40, 0x84, 0xE2, 0xF4,
0x19, 0x73, 0xE7, 0x20, 0x8B, 0x5B, 0x86, 0xC6, 0x99, 0x41, 0xC4, 0xEC, 0x47, 0x28, 0xA4, 0x95, 0x9A, 0x14, 0x2A,
0xC6, 0x95, 0x0A, 0x5B, 0x81, 0x3C, 0x0D, 0x39, 0xCC, 0x93, 0x21, 0xCA, 0xAA, 0x9F, 0x4A, 0x12, 0x20, 0x63, 0x8D,
0x13, 0x31, 0xE3, 0xEC, 0xD3, 0xE1, 0x23, 0x6E, 0x55, 0x34, 0x28, 0x14, 0x9D, 0x2E, 0xF5, 0xE4, 0xB0, 0xD4, 0x8E,
0xE1, 0x91, 0x29, 0xF8, 0x0F, 0x44, 0x32, 0x36, 0x72, 0xCD, 0xF1, 0x4C, 0x0F, 0x31, 0x6C, 0x3E, 0xE9, 0x73, 0xA6,
0x10, 0x04, 0x97, 0xA3, 0xC7, 0x65, 0xA2, 0x68, 0x66, 0x0E, 0x96, 0xF8, 0xF2, 0x05, 0x79, 0x57, 0x6D, 0x4E, 0x8A,
0xDD, 0xEB, 0x1A, 0x93, 0x45, 0xE2, 0xE0, 0x78, 0xAA, 0x36, 0xA4, 0x3D, 0x0E, 0xEC, 0x6A, 0xE4, 0x77, 0x06, 0x37,
0x73, 0xE9, 0x8A, 0x0E, 0xED, 0x66, 0x7B, 0xF3, 0x56, 0xF4, 0xDE, 0xEA, 0xB3, 0x96, 0xB5, 0xF8, 0x07, 0x50, 0x06,
0x20, 0x56, 0x27, 0xD5, 0x66, 0xA4, 0x1D, 0x24, 0xCE, 0xF6, 0x38, 0xF9, 0x5D, 0x4E, 0x7C, 0x57, 0x16, 0xB3, 0xEB,
0x42, 0xFD, 0x26, 0x8B, 0xBF, 0x17, 0xAD, 0x5F, 0xD1, 0x66, 0x4B, 0x6C, 0x7C, 0xF0, 0x04, 0xB4, 0xC4, 0xB9, 0xDC,
0x3D, 0xAE, 0xC3, 0xD8, 0x0B, 0x3D, 0x14, 0xFB, 0x20, 0x75, 0xAF, 0x49, 0x82, 0x5A, 0x98, 0xC7, 0x34, 0xF1, 0xD4,
0x78, 0x3A, 0x3D, 0x66, 0x60, 0x99, 0x42, 0x52, 0x83, 0x53, 0x04, 0x9D, 0xE6, 0x6E, 0x88, 0x49, 0x8C, 0xEE, 0xD1,
0x5C, 0x79, 0xD5, 0xE3, 0xD9, 0xB1, 0x29, 0xC3, 0xC5, 0x39, 0xED, 0x74, 0x23, 0x14, 0x26, 0xFA, 0xF7, 0x46, 0xD6,
0x59, 0x45, 0xD4, 0x03, 0x96, 0x11, 0xC0, 0xB0, 0xB4, 0x60, 0x10, 0xE2, 0xB7, 0x35, 0xC8, 0x9C, 0xA3, 0x95, 0xEA,
0xE1, 0x7D, 0x82, 0x7C, 0xB8, 0x48, 0x02, 0x81, 0x22, 0x08, 0x18, 0xFD, 0x25, 0xC1, 0xC9, 0xF5, 0xC4, 0x78, 0x17,
0x6C, 0x03, 0x30, 0x08, 0x66, 0xE7, 0xED, 0xA0, 0xE7, 0x73, 0xB4, 0xE1, 0xF4, 0xAB, 0x88, 0xD1, 0x90, 0x93, 0x6D,
0x73, 0xBF, 0x30, 0x67, 0xCB, 0x86, 0x85, 0x7B, 0xDE, 0xE7, 0x96, 0xAC, 0xAE, 0xE8, 0x67, 0xFE, 0x41, 0x8C, 0xFD,
0x75, 0x9B, 0xD8, 0x5B, 0x16, 0xBE, 0xCF, 0x85, 0xE4, 0xB0, 0x75, 0x80, 0xE3, 0x74, 0xCE, 0x4E, 0x17, 0x0F, 0xDF,
0xF5, 0x85, 0x83, 0xAB, 0x79, 0x30, 0xD6, 0x36, 0xDC, 0x1C, 0x0B, 0x84, 0x24, 0x4E, 0x27, 0x9A, 0x54, 0xC8, 0x2D,
0x7B, 0x71, 0x91, 0x21, 0x2B, 0x7D, 0xAA, 0x07, 0xAE, 0x7E, 0x18, 0xE3, 0x09, 0x77, 0xE0, 0xBA, 0x3F, 0x6D, 0x05,
0x8F, 0x54, 0x62, 0x8C, 0x66, 0x4D, 0x5C, 0x77, 0x44, 0x2C, 0x5E, 0xCC, 0x2C, 0xF7, 0x6D, 0x8E, 0x22, 0xB2, 0x8C,
0xC2, 0x2A, 0x5F, 0xBF, 0x6B, 0x49, 0x04, 0x0A, 0x8D, 0x82, 0xA4, 0x71, 0x2C, 0xD9, 0x44, 0xF9, 0x4C, 0x53, 0xE6,
0xA5, 0xF2, 0x90, 0x7A, 0x21, 0xBC, 0x45, 0x7A, 0xDD, 0xB4, 0x0A, 0xAB, 0x2B, 0xDF, 0xE1, 0x10, 0x0E, 0x40, 0xD0,
0xAE, 0x8A, 0xDB, 0x87, 0xA3, 0xB4, 0x04, 0xA1, 0x5E, 0xD0, 0x51, 0xFF, 0xBE, 0x31, 0xC5, 0xA6, 0xC7, 0xDD, 0x64,
0x99, 0x7D, 0xD8, 0x33, 0xDC, 0xE5, 0x24, 0x34, 0x73, 0x02, 0xC7, 0x6E, 0x62, 0xD8, 0xC5, 0xE2, 0xAE, 0x6C, 0x20,
0x95, 0x5A, 0xC0, 0xDE, 0x8C, 0x6B, 0xDA, 0x02, 0xCB, 0xE3, 0xBE, 0x90, 0x54, 0xC8, 0x6E, 0x8C, 0x2D, 0x1D, 0xF0,
0xFB, 0x59, 0xE7, 0x47, 0xE0, 0xDC, 0x28, 0x77, 0x3F, 0xBA, 0xE6, 0x85, 0x1D, 0xF8, 0x24, 0x74, 0x7D, 0x99, 0xE7,
0x48, 0x63, 0xA1, 0x31, 0x05, 0xD3, 0x15, 0x08, 0xB0, 0xD2, 0xF8, 0x70, 0x4C, 0x63, 0x4E, 0x6B, 0xDD, 0x8A, 0x1B,
0xFF, 0x68, 0x4B, 0x64, 0x2F, 0xEF, 0xAB, 0x2B, 0xFF, 0x78, 0xAD, 0x77, 0x74, 0x07, 0x55, 0x49, 0x91, 0x9E, 0xA7,
0x5A, 0x43, 0xA8, 0x94, 0xD3, 0xF9, 0x5B, 0x14, 0x01, 0xC4, 0x2B, 0xE7, 0xA9, 0xE8, 0xDE, 0x89, 0xAB, 0xCA, 0x30,
0xEB, 0xCE, 0x6E, 0x25, 0x12, 0x16, 0xD8, 0xC2, 0x01, 0x88, 0x0D, 0x09, 0xBC, 0x27, 0x10, 0x00, 0x48, 0xF7, 0xE5,
0xAB, 0xA7, 0xFC, 0x90, 0x0C, 0xDF, 0x3B, 0x16, 0x29, 0xF4, 0xB7, 0x7A, 0x05, 0xE8, 0x74, 0xC0, 0xA5, 0xC1, 0x77,
0xEC, 0x0B, 0x82, 0xC3, 0x03, 0x3D, 0x2F, 0x5C, 0x08, 0x3E, 0xCD, 0x46, 0xFF, 0x13, 0x5F, 0x86, 0xED, 0xBF, 0xE9,
0x1E, 0xD5, 0x46, 0x6F, 0x14, 0xBB, 0xAC, 0xF6, 0x6C, 0xA3, 0xF5, 0x81, 0x28, 0x91, 0x26, 0x14, 0x4E, 0x8A, 0x42,
0xB4, 0xE2, 0x91, 0x4D, 0x64, 0xE6, 0xAB, 0x4C, 0x28, 0x60, 0xDA, 0x42, 0x04, 0x53, 0x24, 0x33, 0xFC, 0xC3, 0x8C,
0x23, 0x15, 0xB4, 0x17, 0x52, 0x2B, 0xC8, 0x12, 0xB8, 0x2B, 0xA3, 0x18, 0x49, 0xB8, 0xAC, 0x2D, 0x0B, 0xD7, 0xE7,
0x56, 0x01, 0x8B, 0x59, 0x96, 0x30, 0xD8, 0x05, 0xF1, 0x9A, 0xC2, 0xEF, 0x6C, 0x45, 0x4E, 0x1C, 0x09, 0x34, 0x7F,
0x8F, 0xCE, 0x6C, 0x59, 0x4C, 0xBF, 0xF0, 0xE0, 0x57, 0xDE, 0xC4, 0x19, 0xB5, 0x31, 0xEC, 0x07, 0x69, 0xBB, 0x6C,
0xAE, 0x77, 0x81, 0x49, 0x13, 0xE3, 0x85, 0x86, 0x38, 0xB2, 0xCD, 0x27, 0x23, 0xE7, 0x5C, 0x31, 0xD8, 0x86, 0x37,
0xA7, 0x59, 0x94, 0x60, 0x8D, 0xAC, 0x13, 0xDD, 0xE7, 0xD4, 0x09, 0xB1, 0xBA, 0xD5, 0x7A, 0xE1, 0x09, 0xB4, 0x68,
0x70, 0xD8, 0x74, 0xD9, 0x62, 0x2C, 0x19, 0xD0, 0xBB, 0x07, 0xA7, 0x51, 0x7F, 0x6F, 0x23, 0x61, 0xB3, 0x67, 0x90,
0x03, 0x5A, 0xF4, 0xF2, 0x3B, 0x79, 0x19, 0x4E, 0x0D, 0x12, 0xDA, 0xA6, 0x7E, 0x2B, 0x3B, 0x00, 0x91, 0xC7, 0x41,
0x60, 0x4A, 0xEB, 0xEF, 0xC8, 0xAE, 0x99, 0x49, 0x3E, 0xC0, 0xD7, 0x53, 0xC5, 0x84, 0xA8, 0x12, 0x61, 0xFE, 0x11,
0x88, 0x17, 0x32, 0x14, 0xBC, 0xEA, 0x25, 0xB7, 0xAF, 0xDE, 0xDA, 0xFE, 0x67, 0xF7, 0x55, 0xEB, 0xE7, 0x3A, 0x9B,
0x84, 0x33, 0xAA, 0xAF, 0xCC, 0x4F, 0x4B, 0x95, 0xC7, 0x40, 0x22, 0x51, 0x7A, 0x09, 0x31, 0xE8, 0xAF, 0x7E, 0x5D,
0x15, 0x34, 0x0C, 0xB4, 0x05, 0x9E, 0xE0, 0xF2, 0xBD, 0xF0, 0xFD, 0x19, 0x40, 0x2E, 0x67, 0x2F, 0x92, 0x5D, 0x22,
0x38, 0xB7, 0x80, 0x33, 0x36, 0xB4, 0x9B, 0x9D, 0x2F, 0x8C, 0xB2, 0x64, 0x26, 0x43, 0xCA, 0x8C, 0x1F, 0xDE, 0xE6,
0x1A, 0x1F, 0x60, 0x0A, 0x11, 0x29, 0xCD, 0x3B, 0x75, 0x41, 0x29, 0x7B, 0x4A, 0x6B, 0x79, 0xD0, 0x95, 0xAC, 0xBF,
0x3E, 0x59, 0x07, 0x01, 0xC7, 0x9A, 0x80, 0x43, 0x71, 0x5D, 0x1B, 0x87, 0x3F, 0xA4, 0xDD, 0xD3, 0x35, 0x75, 0xC9,
0x2B, 0x58, 0xD4, 0xE3, 0x91, 0xAB, 0xC3, 0x30, 0x0B, 0x32, 0x48, 0xB2, 0x9C, 0xF1, 0x66, 0x6F, 0x48, 0xED, 0x21,
0x6B, 0x13, 0x29, 0x7E, 0xA8, 0x02, 0xA9, 0x80, 0x2C, 0x18, 0x72, 0x2B, 0xFA, 0x59, 0x86, 0x83, 0x17, 0xCA, 0xEB,
0x8D, 0x85, 0x6E, 0xA5, 0x4C, 0x4A, 0x49, 0xB6, 0xC4, 0x69, 0x5F, 0x24, 0xFA, 0xE7, 0xB5, 0xF2, 0xF1, 0xC6, 0x4E,
0x24, 0xAD, 0x0C, 0x2E, 0xBF, 0x32, 0xBD, 0x59, 0xC6, 0x84, 0xDB, 0xD4, 0x3D, 0xA8, 0x6C, 0xA2, 0x28, 0xA1, 0x73,
0xC7, 0x8C, 0x74, 0xF4, 0x47, 0x6C, 0x23, 0xF4, 0x27, 0xCC, 0xB4, 0x75, 0x6A, 0xB0, 0x2A, 0x7E, 0x14, 0x1D, 0x8A,
0x10, 0x2A, 0x16, 0xD6, 0x30, 0xAF, 0x9F, 0x14, 0xE3, 0xA7, 0xBD, 0x47, 0x2C, 0x16, 0x73, 0x74, 0x10, 0x01, 0xC5,
0x9E, 0x92, 0x6B, 0xB7, 0xC9, 0xB5, 0x58, 0x4E, 0xF9, 0x80, 0xCC, 0x8C, 0x32, 0xF4, 0xCC, 0x77, 0x79, 0x17, 0x5B,
0x13, 0xD1, 0xEC, 0x7D, 0x62, 0x3F, 0x77, 0x36, 0x6A, 0xC5, 0xBD, 0x8B, 0x2F, 0x69, 0xC0, 0x7F, 0xB3, 0x2E, 0x87,
0x16, 0xFC, 0x18, 0x13, 0x55, 0x0D, 0x2C, 0x69, 0x3F, 0xEA, 0x6D, 0x8E, 0xD8, 0x97, 0xDF, 0x85, 0x24, 0x19, 0x87,
0x53, 0x28, 0x73, 0x67, 0xFA, 0xE6, 0xA9, 0x85, 0x80, 0x65, 0xC0, 0xE5, 0xE9, 0xA6, 0xBB, 0x89, 0x37, 0xAF, 0x9E,
0x77, 0x70, 0x82, 0x6D, 0xB2, 0x97, 0x26, 0x2D, 0x3E, 0xB0, 0x9C, 0xE1, 0x20, 0xBF, 0xEA, 0x8D, 0x5B, 0xC9, 0x13,
0x35, 0xF3, 0xD1, 0x1B, 0xDE, 0xEC, 0xDC, 0x07, 0x8B, 0x4B, 0xEC, 0xD9, 0x40, 0x13, 0x07, 0x97, 0x02, 0x48, 0x30,
0x45, 0xD3, 0xEE, 0x6C, 0xE5, 0xB9, 0x0A, 0xBD, 0x7D, 0xB8, 0x9F, 0x29, 0x10, 0xD2, 0xB1, 0xB3, 0xA2, 0x0D, 0x45,
0x60, 0x38, 0x6C, 0x5D, 0x32, 0xD5, 0xF3, 0xFF, 0x2F, 0x7D, 0xA7, 0x2F, 0x5B, 0x35, 0x8B, 0xEF, 0xB8, 0xFF, 0xA3,
0x45, 0x4C, 0xE1, 0xF3, 0x34, 0x1A, 0xDE, 0x80, 0xC1, 0x26, 0xFB, 0x4D, 0xEE, 0x75, 0x3B, 0x5E, 0xC1, 0x0A, 0xA2,
0xB8, 0x3D, 0xE9, 0x34, 0x5D, 0x67, 0x16, 0xF6, 0x53, 0x41, 0x96, 0xEA, 0x9E, 0xD1, 0x6C, 0x16, 0x40, 0x1A, 0x9C,
0x7E, 0x3F, 0x21, 0x2A, 0x24, 0x9E, 0xE9, 0x1B, 0x0E, 0x61, 0x76, 0x72, 0x3F, 0x8D, 0xCC, 0x33, 0xBC, 0x25, 0xEF,
0x62, 0x87, 0x2D, 0xE4, 0x04, 0xA6, 0xA9, 0xAE, 0x1C, 0x1D, 0x9E, 0x52, 0xAE, 0xEE, 0x0F, 0xD2, 0xBF, 0x1F, 0x00,
0x34, 0x52, 0xB3, 0x75, 0x7B, 0x6B, 0xAE, 0x73, 0xAC, 0x0E, 0x15, 0xFD, 0xC9, 0x40, 0xEA, 0x17, 0xD8, 0x04, 0x34,
0xC6, 0xDD, 0x5E, 0xF4, 0x0D, 0xDA, 0x52, 0x2F, 0xF0, 0xD5, 0xE5, 0xEA, 0x73, 0xD1, 0x1A, 0x28, 0x9A, 0xD2, 0xF5,
0xEE, 0x6A, 0xDC, 0x7B, 0x3E, 0xE6, 0xF4, 0xAE, 0x1E, 0x13, 0x1D, 0x94, 0x92, 0xF3, 0x5C, 0x31, 0x9C, 0x8C, 0xB3,
0x87, 0x42, 0xE1, 0x28, 0x9C, 0x87, 0xF7, 0xBE, 0x73, 0x6F, 0xD1, 0x7A, 0x10, 0xFF, 0x72, 0x5E, 0x78, 0x39, 0xE1,
0x70, 0xAE, 0x23, 0x1F, 0xB3, 0xB6, 0xC1, 0x32, 0x2C, 0x94, 0x15, 0x1D, 0xDE, 0x4D, 0x25, 0xE4, 0xCC, 0xE4, 0xF4,
0x8C, 0xFD, 0x5D, 0x87, 0x18, 0x72, 0xBC, 0xE0, 0x8C, 0x31, 0x06, 0x05, 0xEC, 0x3D, 0x3E, 0xF9, 0x3D, 0x9A, 0x68,
0xC1, 0x82, 0x4D, 0x89, 0x5F, 0xBF, 0x59, 0xA4, 0xD9, 0xF8, 0xC2, 0xBD, 0x33, 0x32, 0x8C, 0xD8, 0x6F, 0x70, 0xBC,
0xFA, 0x93, 0xB6, 0x55, 0x25, 0xA2, 0x08, 0x5B, 0x60, 0xA0, 0x6B, 0xD2, 0xAC, 0x92, 0xE2, 0xBF, 0x0F, 0x7B, 0x71,
0x25, 0x8B, 0x5F, 0x1D, 0x08, 0x27, 0x42, 0xE9, 0x6D, 0xE4, 0x29, 0xD9, 0x57, 0xC8, 0x17, 0xF1, 0xCA, 0xD6, 0x10,
0x36, 0xCA, 0x12, 0x18, 0xAB, 0x5B, 0x80, 0x34, 0x54, 0x82, 0x25, 0x67, 0x35, 0x42, 0x04, 0xB5, 0x53, 0xA0, 0x22,
0x23, 0xB1, 0x9E, 0x81, 0xB3, 0x53, 0x42, 0x27, 0x6B, 0x3D, 0x8F, 0x17, 0x4F, 0x74, 0x8A, 0x55, 0x61, 0xFB, 0x35,
0xE6, 0xA7, 0xD6, 0x96, 0xCD, 0x24, 0x0A, 0xB1, 0x0E, 0xDC, 0x9A, 0x88, 0xAD, 0xD4, 0x8A, 0x21, 0xAF, 0x0F, 0xDE,
0x7F, 0x17, 0x91, 0x9B, 0xA6, 0xE9, 0x5E, 0xC4, 0x9B, 0x2A, 0x7B, 0x5D, 0x60, 0xDD, 0xEB, 0x6A, 0xFB, 0x06, 0xB2,
0xF0, 0x70, 0xA9, 0xD5, 0xF2, 0xC1, 0xCA, 0x56, 0x74, 0xF4, 0x6E, 0x3B, 0x7A, 0x0C, 0x98, 0x88, 0x09, 0x0E, 0x4D,
0x3F, 0x24, 0xFD, 0x8F, 0x66, 0xCF, 0xDC, 0x64, 0x00, 0x0F, 0xB2, 0xCF, 0x11, 0xE6, 0x80, 0xD5, 0x9E, 0x5A, 0x4C,
0x78, 0xAA, 0x6F, 0x19, 0xBE, 0x39, 0x27, 0xEB, 0xAA, 0x4F, 0x88, 0xC7, 0x41, 0xF1, 0x95, 0xAF, 0x86, 0x22, 0x53,
0xA9, 0x7D, 0xE6, 0xC4, 0xB9, 0x2A, 0x42, 0xEE, 0xE1, 0x91, 0x38, 0xD4, 0x27, 0xB7, 0xCE, 0x7B, 0x8E, 0x9F, 0x08,
0xE5, 0x1B, 0x4E, 0xE8, 0x18, 0xD0, 0xC6, 0x74, 0x18, 0xB3, 0x0D, 0xAF, 0xE7, 0xC7, 0x26, 0x9D, 0x8B, 0x11, 0x16,
0x43, 0x07, 0x94, 0xDF, 0xA4, 0x5F, 0x54, 0x87, 0xC4, 0x98, 0x55, 0x11, 0xA7, 0xB5, 0x9B, 0x82, 0x52, 0xBA, 0x2B,
0xDD, 0xC8, 0xAB, 0x08, 0x25, 0x0D, 0x8D, 0x36, 0x61, 0x25, 0x62, 0xBA, 0x92, 0x15, 0x31, 0x97, 0xBE, 0xE0, 0xFB,
0xD1, 0xE8, 0x8A, 0xC6, 0x6C, 0x14, 0x18, 0x95, 0x6D, 0x47, 0x8D, 0x6C, 0xD7, 0x84, 0xED, 0x4F, 0xAE, 0xCF, 0x3C,
0x43, 0xF7, 0x2C, 0x7E, 0x4B, 0xB4, 0xA0, 0xB8, 0x6B, 0xEB, 0x2E, 0xED, 0xA8, 0x9F, 0xDA, 0x22, 0x05, 0xD5, 0xA8,
0x59, 0x86, 0x90, 0x9D, 0x98, 0x2F, 0xD4, 0xBC, 0xE2, 0x05, 0xA5, 0x09, 0x3C, 0x0B, 0x08, 0x89, 0xA9, 0x45, 0xFF,
0x3F, 0x2C, 0xB7, 0x90, 0x2F, 0xCC, 0x66, 0xBF, 0x5D, 0x8A, 0x55, 0x8E, 0xCD, 0x6C, 0x88, 0x03, 0x84, 0x75, 0x03,
0x21, 0x85, 0xA9, 0xCB, 0xED, 0xD5, 0x0D, 0xE3, 0x6A, 0x76, 0xA4, 0x4F, 0x9B, 0x6E, 0x72, 0x14, 0x87, 0xC0, 0x7B,
0x35, 0x2F, 0x71, 0xC4, 0xB6, 0x99, 0x84, 0x50, 0x9B, 0xC8, 0xFC, 0x23, 0xE9, 0xC0, 0xE0, 0x41, 0xA2, 0x86, 0x31,
0xAF, 0xCD, 0x1D, 0xF5, 0x70, 0x6B, 0x89, 0x2F, 0x88, 0x82, 0xCE, 0xE3, 0xFB, 0x14, 0xF1, 0x16, 0xCE, 0x28, 0xF4,
0xCB, 0x04, 0xBF, 0xDE, 0x06, 0xA1, 0xDF, 0xB0, 0xCB, 0xAA, 0x8B, 0x70, 0x1F, 0x22, 0xC7, 0x21, 0x04, 0x0D, 0x98,
0xC7, 0x81, 0x6F, 0x00, 0x66, 0x97, 0x4D, 0x05, 0x03, 0x4C, 0xAA, 0xAB, 0xA1, 0xA3, 0x8A, 0xF4, 0x44, 0xA0, 0xF1,
0xE6, 0xF1, 0x47, 0xE4, 0x84, 0xAB, 0x9D, 0x66, 0xD2, 0x76, 0xA5, 0x7B, 0xD5, 0x56, 0x63, 0x27, 0x90, 0x4F, 0xDC,
0x6F, 0x07, 0x66, 0x13, 0x56, 0x3F, 0x9E, 0x0C, 0xE0, 0x3A, 0xFC, 0xCB, 0x12, 0xFE, 0x83, 0x55, 0xEF, 0x8E, 0x36,
0xAC, 0x7B, 0xEF, 0x1C, 0xD7, 0xBA, 0x24, 0x36, 0xD7, 0xB0, 0x31, 0x8A, 0xB2, 0x62, 0x1A, 0x1B, 0x6B, 0xD3, 0xE4,
0xED, 0x06, 0x08, 0x91, 0x04, 0x87, 0x03, 0x27, 0x65, 0xF3, 0xCA, 0xAA, 0x13, 0x4D, 0x61, 0x1C, 0x13, 0x99, 0xCA,
0x83, 0x67, 0xDC, 0x0B, 0xE2, 0x15, 0x18, 0x27, 0x3E, 0x20, 0x53, 0x22, 0x9A, 0x8D, 0x91, 0x00, 0xFA, 0x5E, 0xD4,
0xC6, 0x62, 0x99, 0x22, 0x77, 0xD6, 0x41, 0x7E, 0x18, 0x5B, 0xED, 0xAB, 0xF4, 0xE9, 0x71, 0x36, 0xA5, 0xF1, 0x10,
0xBC, 0x73, 0x77, 0xCD, 0x41, 0x61, 0x7D, 0xAD, 0xCA, 0x73, 0x09, 0xB3, 0x5A, 0xAD, 0x1E, 0xE2, 0xF5, 0x14, 0xC0,
0x41, 0x9F, 0xAA, 0xF4, 0xD1, 0x5D, 0x76, 0xBC, 0x98, 0x32, 0x79, 0x1F, 0x99, 0x22, 0xB9, 0x1E, 0xD8, 0x32, 0x39,
0xBF, 0x5A, 0x65, 0xFD, 0x04, 0x22, 0xBF, 0x09, 0xF4, 0x34, 0x44, 0x62, 0x90, 0x94, 0xF8, 0x0B, 0xDE, 0x47, 0xE0,
0x08, 0xE1, 0x50, 0xFF, 0x5E, 0x9D, 0xB3, 0x5A, 0x0F, 0x16, 0x74, 0xF3, 0x22, 0x51, 0x98, 0xD0, 0x98, 0x51, 0x22,
0xF4, 0x76, 0x1A, 0x16, 0x64, 0xC1, 0xB1, 0x79, 0x22, 0x7C, 0x19, 0x4D, 0x34, 0xAC, 0x56, 0x98, 0x9E, 0x53, 0x6C,
0x5E, 0x62, 0x77, 0x60, 0xA1, 0x86, 0x1C, 0x35, 0x67, 0x0D, 0x44, 0xEF, 0xB3, 0xFB, 0xF5, 0x92, 0x89, 0x55, 0x32,
0x23, 0xEE, 0x1D, 0xFF, 0xA5, 0xE5, 0x59, 0x60, 0x1C, 0x72, 0x0D, 0x5A, 0x8C, 0x99, 0x3B, 0xF0, 0xFA, 0x5F, 0xE9,
0x26, 0x69, 0xC7, 0x1A, 0x01, 0xDD, 0xD5, 0xD3, 0x84, 0x5B, 0x8E, 0x16, 0xB3, 0xE6, 0xF4, 0xE9, 0x92, 0x82, 0x0D,
0x4F, 0x26, 0x33, 0xDD, 0x4D, 0x72, 0xFE, 0x66, 0xE6, 0x7A, 0xE5, 0xAE, 0x1E, 0x42, 0xEF, 0xB8, 0xF9, 0xCF, 0x1D,
0x88, 0x7B, 0x24, 0x75, 0x23, 0xA9, 0x45, 0xFA, 0x8C, 0x86, 0x37, 0xB0, 0xC7, 0x17, 0xFD, 0x9B, 0xD8, 0x5E, 0x9B,
0xC0, 0xC4, 0x61, 0x15, 0x22, 0x8E, 0x23, 0x6F, 0xC5, 0x3A, 0xA8, 0xAE, 0xCD, 0xF5, 0xD5, 0xDF, 0x49, 0x0D, 0xE9,
0x5E, 0xB4, 0xF4, 0xEC, 0x2F, 0x11, 0xAF, 0xE4, 0x54, 0x65, 0x40, 0xD4, 0xD3, 0xB3, 0xAD, 0xC1, 0xAF, 0xFF, 0xFA,
0xAD, 0xED, 0x4D, 0x29, 0x9E, 0x8F, 0xA2, 0x40, 0x98, 0x9B, 0x01, 0x42, 0x9D, 0x14, 0x6E, 0x33, 0xB3, 0xFF, 0xED,
0x18, 0xDD, 0x5E, 0x83, 0xF4, 0x1F, 0x37, 0x33, 0xCB, 0x7E, 0x8E, 0x01, 0xA1, 0xFC, 0x65, 0xF1, 0x7B, 0xA0, 0xC2,
0x08, 0x5C, 0x6B, 0xA8, 0x49, 0x48, 0x62, 0x1B, 0xB8, 0x43, 0x8A, 0x20, 0x5A, 0x52, 0xE6, 0xBA, 0x31, 0x78, 0x7B,
0xED, 0x43, 0xB9, 0x4B, 0xBD, 0x94, 0x19, 0x5C, 0x2F, 0x26, 0x9D, 0xB2, 0x46, 0xFF, 0x48, 0x4F, 0x06, 0x22, 0x1E,
0x39, 0x73, 0x94, 0x24, 0x73, 0x92, 0x57, 0x5D, 0x01, 0x66, 0x71, 0xCD, 0xE8, 0xF3, 0xE5, 0x78, 0x2A, 0x3D, 0xB8,
0x63, 0xCD, 0x49, 0xEC, 0x91, 0xD5, 0x1A, 0x87, 0x06, 0x44, 0xB4, 0x8C, 0xC6, 0x20, 0x1C, 0x00, 0xD6, 0x6C, 0x55,
0xE6, 0x39, 0x2D, 0x63, 0x42, 0xF3, 0x65, 0x4A, 0x18, 0x09, 0x1A, 0x0F, 0x6D, 0x7D, 0x4F, 0xB5, 0x43, 0x55, 0x09,
0x40, 0xA0, 0x95, 0x4B, 0xB4, 0x88, 0x3F, 0x19, 0x16, 0xFD, 0x59, 0x77, 0x69, 0x05, 0xE6, 0x69, 0xB1, 0xA3, 0xEA,
0xF4, 0xF2, 0xDC, 0x6A, 0x1B, 0x31, 0xB2, 0x69, 0xE2, 0x71, 0x2B, 0xEB, 0x4E, 0xB6, 0x4B, 0xF4, 0x62, 0x05, 0x14,
0x89, 0x22, 0x61, 0x8C, 0xAD, 0x92, 0xCE, 0xB6, 0x64, 0xB7, 0x50, 0x96, 0xB3, 0x94, 0xEC, 0x31, 0x9C, 0x2D, 0xA5,
0x89, 0x25, 0x86, 0x7F, 0xA4, 0x52, 0xA4, 0x7E, 0x86, 0x25, 0x8A, 0xA7, 0x31, 0xA4, 0x3C, 0xFD, 0xAB, 0xD2, 0xBF,
0x84, 0xF7, 0xB3, 0x15, 0x40, 0x1A, 0x4C, 0x45, 0x36, 0x16, 0xA0, 0x50, 0x69, 0xF1, 0xB3, 0x3B, 0xDD, 0xAE, 0x89,
0x0B, 0x97, 0x52, 0x27, 0xC3, 0x9A, 0xE0, 0x90, 0x68, 0xEA, 0x5C, 0xC8, 0xFC, 0x8B, 0xCA, 0xD3, 0x85, 0x81, 0x2E,
0xB6, 0x06, 0xD1, 0x8D, 0x74, 0x84, 0x7E, 0xEA, 0x11, 0x01, 0x8D, 0x4A, 0x92, 0x83, 0x00, 0xAF, 0xF9, 0x0D, 0xDD,
0x1F, 0x4C, 0xA4, 0x27, 0x9D, 0x8F, 0x4B, 0xE3, 0x2D, 0xC4, 0x06, 0x14, 0xD4, 0xF1, 0xD9, 0xBE, 0x95, 0x19, 0xC9,
0xE5, 0x74, 0x41, 0xD8, 0x8D, 0x76, 0x6B, 0x0C, 0xBB, 0x9D, 0x69, 0x72, 0xEF, 0xDA, 0xF1, 0xB6, 0x6F, 0x27, 0xAA,
0x8C, 0x22, 0x86, 0x97, 0xF7, 0x0B, 0xFD, 0xBD, 0xFB, 0x2E, 0x90, 0x1E, 0x9C, 0x8F, 0x41, 0xC0, 0xDF, 0x33, 0x16,
0xA6, 0xC7, 0x1C, 0x12, 0xD5, 0x58, 0x51, 0x39, 0x50, 0x96, 0xD3, 0x90, 0x1B, 0x86, 0xA8, 0x19, 0x3A, 0x2B, 0xD2,
0xDB, 0xB1, 0x89, 0x58, 0xD7, 0x85, 0xA5, 0x3B, 0x13, 0xB9, 0x81, 0x91, 0x52, 0x23, 0x2D, 0x58, 0x52, 0x8F, 0x43,
0x69, 0xBF, 0xC7, 0xCA, 0x9C, 0xD1, 0xBE, 0x7E, 0xEE, 0xB0, 0x2B, 0x89, 0xB7, 0x68, 0x12, 0xEF, 0xFD, 0xFE, 0x78,
0xB5, 0xC3, 0x75, 0x60, 0xDE, 0x0E, 0xD1, 0xCE, 0x6E, 0xE0, 0x16, 0xC6, 0x6A, 0x3F, 0x49, 0x4D, 0xD5, 0x2F, 0x6D,
0x66, 0xB3, 0xB2, 0x86, 0x15, 0x08, 0xCE, 0x99, 0x5E, 0xD9, 0x86, 0xA8, 0x46, 0x28, 0xDE, 0xB9, 0xD0, 0xFC, 0xDB,
0xD0, 0x00, 0x56, 0x80, 0xEF, 0xDA, 0x3C, 0xD1, 0x1C, 0x63, 0xB1, 0xD2, 0x5A, 0x9E, 0xB9, 0x88, 0xAD, 0x8F, 0x58,
0xF6, 0x1A, 0x3B, 0x93, 0x20, 0xA4, 0xA5, 0x6D, 0x0A, 0x4F, 0xD1, 0xEA, 0xB9, 0x1F, 0xC3, 0x0F, 0x30, 0x19, 0x80,
0xDE, 0x73, 0x40, 0x0B, 0x5D, 0x87, 0x98, 0x68, 0x90, 0x6E, 0x25, 0x9B, 0x79, 0x2E, 0xEC, 0xA9, 0x1E, 0xCB, 0xF0,
0x95, 0x82, 0x47, 0x35, 0x63, 0xAA, 0xA8, 0xC0, 0x17, 0x98, 0xF1, 0x94, 0xB6, 0x52, 0x26, 0xB5, 0x43
};
###Algorithme de cryptage
void ToggleEncryption (unsigned char *wda_data, int wda_data_size)
{
// Algorithme de cryptage, version C. Parcourt tout le buffer wda_data sur wda_data_size
// octets et masque ou démasque l'encryption des données sur celui-ci.
register int i; // Variables register = internes au CPU, leur utilisation est plus rapide
// Pour chaque octet de wda_data jusqu'à wda_data_size...
for (i = 0; i < wda_data_size; i++)
wda_data[i] ^= key[i % 3418]; // Ou exclusif avec la clé par blocs de 3418 octets
return; // aussi simple que ça :)
}