<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://projectpokemon.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Willaien</id>
	<title>ProjectPokemon Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://projectpokemon.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Willaien"/>
	<link rel="alternate" type="text/html" href="https://projectpokemon.org/wiki/Special:Contributions/Willaien"/>
	<updated>2026-05-07T17:26:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://projectpokemon.org/wiki/index.php?title=GTS_protocol&amp;diff=4175</id>
		<title>GTS protocol</title>
		<link rel="alternate" type="text/html" href="https://projectpokemon.org/wiki/index.php?title=GTS_protocol&amp;diff=4175"/>
		<updated>2011-04-13T04:43:37Z</updated>

		<summary type="html">&lt;p&gt;Willaien: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Communication with the GTS is done over regular HTTP with http://gamestats2.gs.nintendowifi.net/.  The same protocol is used for all five Gen IV games.&lt;br /&gt;
&lt;br /&gt;
==HTTP headers==&lt;br /&gt;
&lt;br /&gt;
The games don&#039;t seem to care about these at all.  The GTS sends back a bunch of boilerplate response headers, but the game happily accepts a response with only a Content-Length.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
&lt;br /&gt;
All requests to the server are GET requests of the form &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; followed by &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;amp;amp;hash=&amp;lt;var&amp;gt;hash&amp;lt;/var&amp;gt;&amp;amp;amp;data=&amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;. The hash variable in the latter, is a hash of the string returned by the former, as described bellow.&lt;br /&gt;
&lt;br /&gt;
===pid===&lt;br /&gt;
&lt;br /&gt;
The pid is an unsigned 32-bit integer that appears to uniquely identify a game cartridge. Although this has not been confirmed entirely:&lt;br /&gt;
Your PID is generated when you get your friendcode for the first time and is set to: friendcode &amp;amp; 0x7fffffff&lt;br /&gt;
&lt;br /&gt;
When you change the device and are forced to change your friendcode with it, your PID doesn&#039;t change but you get a new friendcode. Your new Friend Code appears to be set by appending a random byte (likely sent from Nintendo&#039;s servers) to the end of your PID. For example, nicholas&#039;s Soul Silver PID is 258303618 (0x8266650f)and his Friend Code is 4297 5503 3218 (0xf8266650f64) taking endianness into account.&lt;br /&gt;
&lt;br /&gt;
===Challenge/response===&lt;br /&gt;
&lt;br /&gt;
Before each &amp;quot;real&amp;quot; request, the game sends a request of the form &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; and the server responds with a 32-byte challenge token. The game computes &amp;lt;code&amp;gt;sha1(&amp;quot;sAdeqWo3voLeC5r16DYv&amp;quot; + token)&amp;lt;/code&amp;gt; and uses that as the &amp;lt;var&amp;gt;hash&amp;lt;/var&amp;gt; value which it sends to the server. The &amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt; parameter is encrypted, as explained further down.&lt;br /&gt;
&lt;br /&gt;
For 5th gen GTS, the hash is instead, generated by &amp;lt;code&amp;gt;sha1(&amp;quot;HZEdGCzcGGLvguqUEKQN&amp;quot; + token)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is, each request looks like the following:&lt;br /&gt;
&lt;br /&gt;
# Game requests &amp;lt;code&amp;gt;GET /pokemondpds/&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Server responds with &amp;lt;var&amp;gt;token&amp;lt;/var&amp;gt;&lt;br /&gt;
# Game requests &amp;lt;code&amp;gt;GET /pokemondpds/&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;amp;amp;hash=&amp;lt;var&amp;gt;sha1(...)&amp;lt;/var&amp;gt;&amp;amp;amp;data=&amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Server responds with payload&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
The data sent to the server consists of a &#039;&#039;&#039;checksum&#039;&#039;&#039;, your &#039;&#039;&#039;pid&#039;&#039;&#039;, and a &#039;&#039;&#039;payload&#039;&#039;&#039;. The 5th gen GTS also adds the length of the payload, after the pid.&lt;br /&gt;
&lt;br /&gt;
In generation 5, the server must append to all its responses a footer generated by &amp;lt;code&amp;gt;sha1(&amp;quot;HZEdGCzcGGLvguqUEKQN&amp;quot;+urlsafe_base64(response)+&amp;quot;HZEdGCzcGGLvguqUEKQN&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
&lt;br /&gt;
The checksum is a 32-bit integer, computed by simply taking the sum of every byte of the pid and payload.&lt;br /&gt;
&lt;br /&gt;
It is the first four bytes of the data, xor-ed with &amp;lt;code&amp;gt;0x4a3b2c1d&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x2db842b2&amp;lt;/code&amp;gt; for 5th gen) and packed in network byte order (big-endian).&lt;br /&gt;
&lt;br /&gt;
===Payload===&lt;br /&gt;
The pid and payload are encrypted with a [http://en.wikipedia.org/wiki/Stream_cipher stream cipher] in for the 4th gen protocol.&lt;br /&gt;
&lt;br /&gt;
This encryption algorithm, like others used in the game, uses a [http://en.wikipedia.org/wiki/Linear_congruential_generator Linear Congruential Generator] (not a very strong choice). The multiplicative constant is &amp;lt;code&amp;gt;0x45&amp;lt;/code&amp;gt;, and the additive constant is &amp;lt;code&amp;gt;0x1111&amp;lt;/code&amp;gt;. It appears that the game uses a signed dword to store the seed, which doesn&#039;t really matter; it shouldn&#039;t affect anything. (It means that the modulus is effectively &amp;lt;code&amp;gt;0x80000000&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
 GRNG[n+1] = (GRNG[n] * 0x45 + 0x1111) &amp;amp; 0x7fffffff&lt;br /&gt;
&lt;br /&gt;
The GRNG is seeded with the &amp;lt;var&amp;gt;checksum&amp;lt;/var&amp;gt;, like so:&lt;br /&gt;
&lt;br /&gt;
 GRNG[0] = &amp;lt;var&amp;gt;checksum&amp;lt;/var&amp;gt; | (&amp;lt;var&amp;gt;checksum&amp;lt;/var&amp;gt; &amp;lt;&amp;lt; 16)&lt;br /&gt;
&lt;br /&gt;
The keystream is composed of the lower byte of the high word of successive GRNG values.&lt;br /&gt;
&lt;br /&gt;
 keystream[n] = (GRNG[n] &amp;gt;&amp;gt; 16) &amp;amp; 0xff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Xor&amp;lt;/code&amp;gt; the keystream with the plaintext to get the ciphertext. &amp;lt;code&amp;gt;Xor&amp;lt;/code&amp;gt; the keystream with the ciphertext to get the plaintext.&lt;br /&gt;
&lt;br /&gt;
The entire data string is then encoded with [http://en.wikipedia.org/wiki/Base64#URL_applications urlsafe-base64].&lt;br /&gt;
&lt;br /&gt;
==Conversation==&lt;br /&gt;
&lt;br /&gt;
The first request the game makes is to &amp;lt;code&amp;gt;/pokemondpds/worldexchange/info.asp&amp;lt;/code&amp;gt;. The server responds with 0x0001.&lt;br /&gt;
&lt;br /&gt;
Platinum, Heart Gold, and Soul Silver will then make a request to &amp;lt;code&amp;gt;/pokemondpds/common/setProfile.asp&amp;lt;/code&amp;gt;.  The server responds with eight NULs (0x00000000 0x00000000).&lt;br /&gt;
&lt;br /&gt;
After the above step(s) or &#039;&#039;&#039;performing any of the tasks below&#039;&#039;&#039; other than searching, the game makes a request to &amp;lt;code&amp;gt;/pokemondpds/worldexchange/result.asp&amp;lt;/code&amp;gt;.  If the game has had a Pokémon sent to it via a trade, the server responds with the entire encrypted [[Pokemon NDS Structure|Pokémon save struct]].  Otherwise, if there is a Pokémon deposited in the GTS, it responds with 0x0004; if not, it responds with 0x0005.&lt;br /&gt;
&lt;br /&gt;
===Receiving a traded Pokémon===&lt;br /&gt;
&lt;br /&gt;
If the game receives a Pokémon from a successful trade as a response from &amp;lt;code&amp;gt;result.asp&amp;lt;/code&amp;gt;, it next requests &amp;lt;code&amp;gt;/pokemondpds/worldexchange/delete.asp&amp;lt;/code&amp;gt;.  The server responds with 0x0001.&lt;br /&gt;
&lt;br /&gt;
====A note on sendpkm.py====&lt;br /&gt;
&lt;br /&gt;
After doing the above, some Platinum, Heart Gold, and Soul Silver games will report a communication error and dump the player back to the title screen.  The Pokémon is still successfully received.  At least one person with HG/SS has received a Pokémon from a fake server without getting the error, and Diamond/Pearl have never been reported to have the problem.&lt;br /&gt;
&lt;br /&gt;
===Depositing a Pokémon===&lt;br /&gt;
&lt;br /&gt;
Pokémon are offered on the GTS by requesting &amp;lt;code&amp;gt;/pokemondpds/worldexchange/post.asp&amp;lt;/code&amp;gt;.  The sent data is 300 bytes long, and includes the Pokémon struct. If the Pokémon is rejected by the server, the response is 0x000c; otherwise, if the deposit is successful, 0x0001.&lt;br /&gt;
&lt;br /&gt;
The game then saves. After the save is complete, it issues a request to &amp;lt;code&amp;gt;/pokemondpds/worldexchange/post_finish.asp&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In generation 5, the sent data is 444 bytes long and as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Contents&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00-0x04&lt;br /&gt;
| Checksum (sum of all bytes xor 0x2db842b2)&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x04-0x08&lt;br /&gt;
| pid&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x09-0x0A&lt;br /&gt;
| Data length (minus the 12 bytes of header)&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| Unknown / Zero&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0C-0xE8&lt;br /&gt;
| Encrypted [[Pokemon Black/White NDS Structure|party pokemon data structure]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xE9-0xF7&lt;br /&gt;
| Unknown / Zero&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xF8-0x9&lt;br /&gt;
| Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFA&lt;br /&gt;
| [[#Pokémon Gender|Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFB&lt;br /&gt;
| Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFC-0xFD&lt;br /&gt;
| Requested Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFE&lt;br /&gt;
| [[#Pokémon Gender|Requested Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFF&lt;br /&gt;
| Requested Min Level&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x100-0x102&lt;br /&gt;
| Always 0&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x103&lt;br /&gt;
| Unknown / seems to be 0x02?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x104-0x107&lt;br /&gt;
| Always 0?&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x108-0x117&lt;br /&gt;
| Timestamp placeholder, always 0 (set by server)&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x118-0x119&lt;br /&gt;
| Trainer ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x11A-0x11B&lt;br /&gt;
| Secret ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x11C-0x12B&lt;br /&gt;
| OT Name (Unicode, must end with 0xFFFF)&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x12C&lt;br /&gt;
| Country&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x12D&lt;br /&gt;
| City&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x12E&lt;br /&gt;
| Trainer class/sprite&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x12F&lt;br /&gt;
| Always 0&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x130&lt;br /&gt;
| Game version&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x131&lt;br /&gt;
| Region/language&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x132-0x137&lt;br /&gt;
| Always 0&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x138-0x1B7&lt;br /&gt;
| Mystery data (encrypted?)&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x1B8-0x1BB&lt;br /&gt;
| Terminator (0x80000000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Retrieving the deposited Pokémon===&lt;br /&gt;
&lt;br /&gt;
Checking on the deposited Pokémon is apparently done by &amp;lt;code&amp;gt;/pokemondpds/worldexchange/get.asp&amp;lt;/code&amp;gt;.  The response appears to be a [[Pokemon NDS Structure|Pokémon save struct]].&lt;br /&gt;
&lt;br /&gt;
Retrieving the deposited Pokémon is done by &amp;lt;code&amp;gt;/pokemondpds/worldexchange/return.asp&amp;lt;/code&amp;gt;.  The response is merely 0x0001; the actual Pokémon data is taken from the &amp;lt;code&amp;gt;get.asp&amp;lt;/code&amp;gt; request.&lt;br /&gt;
&lt;br /&gt;
===Searching===&lt;br /&gt;
&lt;br /&gt;
Searching is done through &amp;lt;code&amp;gt;/pokemondpds/worldexchange/search.asp&amp;lt;/code&amp;gt;.  The sent data is either 15 or 16 bytes long.&lt;br /&gt;
&lt;br /&gt;
The server responds with a full 292-byte Pokémon struct for each result.  If there are &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt; results, the response will be 292 * &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt; bytes long.  If there are no results, the server will give an empty response (0 bytes).&lt;br /&gt;
&lt;br /&gt;
==Pokémon struct==&lt;br /&gt;
&lt;br /&gt;
The Pokémon data for the Generation IV GTS is 292 bytes—56 bytes larger than a party Pokémon struct. The extra 56 bytes are GTS-specific data, such as the player&#039;s name &amp;amp; country, and what Pokémon they are requesting. In Generation IV, the trainer name is encoded with the Pokémon character table, while in Generation V, the trainer name is Unicode encoded.&lt;br /&gt;
&lt;br /&gt;
They are as follows:&lt;br /&gt;
&lt;br /&gt;
=== Generation IV Encrypted Bytes ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Contents&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00-0x01&lt;br /&gt;
| Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| [[#Pokémon Gender|Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x04-0x05&lt;br /&gt;
| Requested Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| [[#Pokémon Gender|Requested Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| Requested Min Level&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| Requested Max Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| [[#Trainer Gender|Trainer&#039;s Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0C-0x13&lt;br /&gt;
| Timestamp - deposited time&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x14-0x1B&lt;br /&gt;
| Timestamp - time traded?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x1C-0x1F&lt;br /&gt;
| PID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x20-0x2F&lt;br /&gt;
| Trainer&#039;s Name&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x30-0x31&lt;br /&gt;
| Trainer&#039;s OT ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| Country&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| City&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x34&lt;br /&gt;
| Trainer&#039;s Sprite&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| Is Exchanged Flag&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x36&lt;br /&gt;
| [[#Game Version|Game Version]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x37&lt;br /&gt;
| [[Pokemon NDS Structure#Original Language|Language]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The data for the Generation V GTS is 296 bytes and adds the trainer&#039;s secret ID, an additional two unknown bytes at the end, and shifts the position of the trainer name to after the trainer and secret IDs.&lt;br /&gt;
&lt;br /&gt;
=== Generation V Encrypted Bytes ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Contents&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00-0x01&lt;br /&gt;
| Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| [[#Pokémon Gender|Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x04-0x05&lt;br /&gt;
| Requested Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| [[#Pokémon Gender|Requested Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| Requested Min Level&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| Requested Max Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| [[#Trainer Gender|Trainer&#039;s Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0C-0x13&lt;br /&gt;
| [[#Timestamp Format|Timestamp]] - deposited time&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x14-0x1B&lt;br /&gt;
| [[#Timestamp Format|Timestamp]] - time traded?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x1C-0x1F&lt;br /&gt;
| PID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x20-0x21&lt;br /&gt;
| Trainer&#039;s OT ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x22-0x23&lt;br /&gt;
| Trainer&#039;s Secret ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x24-0x33&lt;br /&gt;
| Trainer&#039;s Name&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x34&lt;br /&gt;
| Country&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| City&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x36&lt;br /&gt;
| Trainer&#039;s Sprite&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x37&lt;br /&gt;
| Is Exchanged Flag&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x38&lt;br /&gt;
| [[#Game Version|Game Version]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| [[Pokemon Black/White NDS Structure#Original Language|Language]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x3A-0x3B&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pokémon Gender ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Type&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| Male&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| Female&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| Either/neither&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Trainer Gender ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Type&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| Male&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| Female&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Timestamp Format ===&lt;br /&gt;
The timestamps are set by the server, and are always PST (UTC-8).&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Contents&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00-0x01&lt;br /&gt;
| Year&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| Month&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| Day&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| Hour&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| Minute&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| Second&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Game Version ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Version&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| Diamond&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| Pearl&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Platinum&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| HeartGold&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| SoulSilver&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x15&lt;br /&gt;
| Black&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| White&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Willaien</name></author>
	</entry>
	<entry>
		<id>https://projectpokemon.org/wiki/index.php?title=GTS_protocol&amp;diff=4174</id>
		<title>GTS protocol</title>
		<link rel="alternate" type="text/html" href="https://projectpokemon.org/wiki/index.php?title=GTS_protocol&amp;diff=4174"/>
		<updated>2011-04-13T04:42:31Z</updated>

		<summary type="html">&lt;p&gt;Willaien: Typo fixed in table.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Communication with the GTS is done over regular HTTP with http://gamestats2.gs.nintendowifi.net/.  The same protocol is used for all five Gen IV games.&lt;br /&gt;
&lt;br /&gt;
==HTTP headers==&lt;br /&gt;
&lt;br /&gt;
The games don&#039;t seem to care about these at all.  The GTS sends back a bunch of boilerplate response headers, but the game happily accepts a response with only a Content-Length.&lt;br /&gt;
&lt;br /&gt;
==Protocol==&lt;br /&gt;
&lt;br /&gt;
All requests to the server are GET requests of the form &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; followed by &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;amp;amp;hash=&amp;lt;var&amp;gt;hash&amp;lt;/var&amp;gt;&amp;amp;amp;data=&amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;. The hash variable in the latter, is a hash of the string returned by the former, as described bellow.&lt;br /&gt;
&lt;br /&gt;
===pid===&lt;br /&gt;
&lt;br /&gt;
The pid is an unsigned 32-bit integer that appears to uniquely identify a game cartridge. Although this has not been confirmed entirely:&lt;br /&gt;
Your PID is generated when you get your friendcode for the first time and is set to: friendcode &amp;amp; 0x7fffffff&lt;br /&gt;
&lt;br /&gt;
When you change the device and are forced to change your friendcode with it, your PID doesn&#039;t change but you get a new friendcode. Your new Friend Code appears to be set by appending a random byte (likely sent from Nintendo&#039;s servers) to the end of your PID. For example, nicholas&#039;s Soul Silver PID is 258303618 (0x8266650f)and his Friend Code is 4297 5503 3218 (0xf8266650f64) taking endianness into account.&lt;br /&gt;
&lt;br /&gt;
===Challenge/response===&lt;br /&gt;
&lt;br /&gt;
Before each &amp;quot;real&amp;quot; request, the game sends a request of the form &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; and the server responds with a 32-byte challenge token. The game computes &amp;lt;code&amp;gt;sha1(&amp;quot;sAdeqWo3voLeC5r16DYv&amp;quot; + token)&amp;lt;/code&amp;gt; and uses that as the &amp;lt;var&amp;gt;hash&amp;lt;/var&amp;gt; value which it sends to the server. The &amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt; parameter is encrypted, as explained further down.&lt;br /&gt;
&lt;br /&gt;
For 5th gen GTS, the hash is instead, generated by &amp;lt;code&amp;gt;sha1(&amp;quot;HZEdGCzcGGLvguqUEKQN&amp;quot; + token)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is, each request looks like the following:&lt;br /&gt;
&lt;br /&gt;
# Game requests &amp;lt;code&amp;gt;GET /pokemondpds/&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Server responds with &amp;lt;var&amp;gt;token&amp;lt;/var&amp;gt;&lt;br /&gt;
# Game requests &amp;lt;code&amp;gt;GET /pokemondpds/&amp;lt;var&amp;gt;page&amp;lt;/var&amp;gt;.asp?pid=&amp;lt;var&amp;gt;pid&amp;lt;/var&amp;gt;&amp;amp;amp;hash=&amp;lt;var&amp;gt;sha1(...)&amp;lt;/var&amp;gt;&amp;amp;amp;data=&amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Server responds with payload&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
The data sent to the server consists of a &#039;&#039;&#039;checksum&#039;&#039;&#039;, your &#039;&#039;&#039;pid&#039;&#039;&#039;, and a &#039;&#039;&#039;payload&#039;&#039;&#039;. The 5th gen GTS also adds the length of the payload, after the pid.&lt;br /&gt;
&lt;br /&gt;
In generation 5, the server must append to all its responses a footer generated by &amp;lt;code&amp;gt;sha1(&amp;quot;HZEdGCzcGGLvguqUEKQN&amp;quot;+urlsafe_base64(response)+&amp;quot;HZEdGCzcGGLvguqUEKQN&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Checksum===&lt;br /&gt;
&lt;br /&gt;
The checksum is a 32-bit integer, computed by simply taking the sum of every byte of the pid and payload.&lt;br /&gt;
&lt;br /&gt;
It is the first four bytes of the data, xor-ed with &amp;lt;code&amp;gt;0x4a3b2c1d&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;0x2db842b2&amp;lt;/code&amp;gt; for 5th gen) and packed in network byte order (big-endian).&lt;br /&gt;
&lt;br /&gt;
===Payload===&lt;br /&gt;
The pid and payload are encrypted with a [http://en.wikipedia.org/wiki/Stream_cipher stream cipher] in for the 4th gen protocol.&lt;br /&gt;
&lt;br /&gt;
This encryption algorithm, like others used in the game, uses a [http://en.wikipedia.org/wiki/Linear_congruential_generator Linear Congruential Generator] (not a very strong choice). The multiplicative constant is &amp;lt;code&amp;gt;0x45&amp;lt;/code&amp;gt;, and the additive constant is &amp;lt;code&amp;gt;0x1111&amp;lt;/code&amp;gt;. It appears that the game uses a signed dword to store the seed, which doesn&#039;t really matter; it shouldn&#039;t affect anything. (It means that the modulus is effectively &amp;lt;code&amp;gt;0x80000000&amp;lt;/code&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
 GRNG[n+1] = (GRNG[n] * 0x45 + 0x1111) &amp;amp; 0x7fffffff&lt;br /&gt;
&lt;br /&gt;
The GRNG is seeded with the &amp;lt;var&amp;gt;checksum&amp;lt;/var&amp;gt;, like so:&lt;br /&gt;
&lt;br /&gt;
 GRNG[0] = &amp;lt;var&amp;gt;checksum&amp;lt;/var&amp;gt; | (&amp;lt;var&amp;gt;checksum&amp;lt;/var&amp;gt; &amp;lt;&amp;lt; 16)&lt;br /&gt;
&lt;br /&gt;
The keystream is composed of the lower byte of the high word of successive GRNG values.&lt;br /&gt;
&lt;br /&gt;
 keystream[n] = (GRNG[n] &amp;gt;&amp;gt; 16) &amp;amp; 0xff&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Xor&amp;lt;/code&amp;gt; the keystream with the plaintext to get the ciphertext. &amp;lt;code&amp;gt;Xor&amp;lt;/code&amp;gt; the keystream with the ciphertext to get the plaintext.&lt;br /&gt;
&lt;br /&gt;
The entire data string is then encoded with [http://en.wikipedia.org/wiki/Base64#URL_applications urlsafe-base64].&lt;br /&gt;
&lt;br /&gt;
==Conversation==&lt;br /&gt;
&lt;br /&gt;
The first request the game makes is to &amp;lt;code&amp;gt;/pokemondpds/worldexchange/info.asp&amp;lt;/code&amp;gt;. The server responds with 0x0001.&lt;br /&gt;
&lt;br /&gt;
Platinum, Heart Gold, and Soul Silver will then make a request to &amp;lt;code&amp;gt;/pokemondpds/common/setProfile.asp&amp;lt;/code&amp;gt;.  The server responds with eight NULs (0x00000000 0x00000000).&lt;br /&gt;
&lt;br /&gt;
After the above step(s) or &#039;&#039;&#039;performing any of the tasks below&#039;&#039;&#039; other than searching, the game makes a request to &amp;lt;code&amp;gt;/pokemondpds/worldexchange/result.asp&amp;lt;/code&amp;gt;.  If the game has had a Pokémon sent to it via a trade, the server responds with the entire encrypted [[Pokemon NDS Structure|Pokémon save struct]].  Otherwise, if there is a Pokémon deposited in the GTS, it responds with 0x0004; if not, it responds with 0x0005.&lt;br /&gt;
&lt;br /&gt;
===Receiving a traded Pokémon===&lt;br /&gt;
&lt;br /&gt;
If the game receives a Pokémon from a successful trade as a response from &amp;lt;code&amp;gt;result.asp&amp;lt;/code&amp;gt;, it next requests &amp;lt;code&amp;gt;/pokemondpds/worldexchange/delete.asp&amp;lt;/code&amp;gt;.  The server responds with 0x0001.&lt;br /&gt;
&lt;br /&gt;
====A note on sendpkm.py====&lt;br /&gt;
&lt;br /&gt;
After doing the above, some Platinum, Heart Gold, and Soul Silver games will report a communication error and dump the player back to the title screen.  The Pokémon is still successfully received.  At least one person with HG/SS has received a Pokémon from a fake server without getting the error, and Diamond/Pearl have never been reported to have the problem.&lt;br /&gt;
&lt;br /&gt;
===Depositing a Pokémon===&lt;br /&gt;
&lt;br /&gt;
Pokémon are offered on the GTS by requesting &amp;lt;code&amp;gt;/pokemondpds/worldexchange/post.asp&amp;lt;/code&amp;gt;.  The sent data is 300 bytes long, and includes the Pokémon struct. If the Pokémon is rejected by the server, the response is 0x000c; otherwise, if the deposit is successful, 0x0001.&lt;br /&gt;
&lt;br /&gt;
The game then saves. After the save is complete, it issues a request to &amp;lt;code&amp;gt;/pokemondpds/worldexchange/post_finish.asp&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In generation 5, the sent data is 444 bytes long and as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Contents&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00-0x04&lt;br /&gt;
| Checksum (sum of all bytes xor 0x2db842b2)&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x04-0x08&lt;br /&gt;
| pid&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x09-0x0A&lt;br /&gt;
| Data length (minus the 12 bytes of header)&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0B-0x0C&lt;br /&gt;
| Unknown / Zero&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0C-0xE8&lt;br /&gt;
| Encrypted [[Pokemon Black/White NDS Structure|party pokemon data structure]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xE9-0xF7&lt;br /&gt;
| Unknown / Zero&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xF8-0x9&lt;br /&gt;
| Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFA&lt;br /&gt;
| [[#Pokémon Gender|Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFB&lt;br /&gt;
| Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFC-0xFD&lt;br /&gt;
| Requested Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFE&lt;br /&gt;
| [[#Pokémon Gender|Requested Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0xFF&lt;br /&gt;
| Requested Min Level&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x100-0x102&lt;br /&gt;
| Always 0&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x103&lt;br /&gt;
| Unknown / seems to be 0x02?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x104-0x107&lt;br /&gt;
| Always 0?&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x108-0x117&lt;br /&gt;
| Timestamp placeholder, always 0 (set by server)&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x118-0x119&lt;br /&gt;
| Trainer ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x11A-0x11B&lt;br /&gt;
| Secret ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x11C-0x12B&lt;br /&gt;
| OT Name (Unicode, must end with 0xFFFF)&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x12C&lt;br /&gt;
| Country&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x12D&lt;br /&gt;
| City&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x12E&lt;br /&gt;
| Trainer class/sprite&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x12F&lt;br /&gt;
| Always 0&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x130&lt;br /&gt;
| Game version&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x131&lt;br /&gt;
| Region/language&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x132-0x137&lt;br /&gt;
| Always 0&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x138-0x1B7&lt;br /&gt;
| Mystery data (encrypted?)&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x1B8-0x1BB&lt;br /&gt;
| Terminator (0x80000000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Retrieving the deposited Pokémon===&lt;br /&gt;
&lt;br /&gt;
Checking on the deposited Pokémon is apparently done by &amp;lt;code&amp;gt;/pokemondpds/worldexchange/get.asp&amp;lt;/code&amp;gt;.  The response appears to be a [[Pokemon NDS Structure|Pokémon save struct]].&lt;br /&gt;
&lt;br /&gt;
Retrieving the deposited Pokémon is done by &amp;lt;code&amp;gt;/pokemondpds/worldexchange/return.asp&amp;lt;/code&amp;gt;.  The response is merely 0x0001; the actual Pokémon data is taken from the &amp;lt;code&amp;gt;get.asp&amp;lt;/code&amp;gt; request.&lt;br /&gt;
&lt;br /&gt;
===Searching===&lt;br /&gt;
&lt;br /&gt;
Searching is done through &amp;lt;code&amp;gt;/pokemondpds/worldexchange/search.asp&amp;lt;/code&amp;gt;.  The sent data is either 15 or 16 bytes long.&lt;br /&gt;
&lt;br /&gt;
The server responds with a full 292-byte Pokémon struct for each result.  If there are &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt; results, the response will be 292 * &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt; bytes long.  If there are no results, the server will give an empty response (0 bytes).&lt;br /&gt;
&lt;br /&gt;
==Pokémon struct==&lt;br /&gt;
&lt;br /&gt;
The Pokémon data for the Generation IV GTS is 292 bytes—56 bytes larger than a party Pokémon struct. The extra 56 bytes are GTS-specific data, such as the player&#039;s name &amp;amp; country, and what Pokémon they are requesting. In Generation IV, the trainer name is encoded with the Pokémon character table, while in Generation V, the trainer name is Unicode encoded.&lt;br /&gt;
&lt;br /&gt;
They are as follows:&lt;br /&gt;
&lt;br /&gt;
=== Generation IV Encrypted Bytes ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Contents&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00-0x01&lt;br /&gt;
| Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| [[#Pokémon Gender|Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x04-0x05&lt;br /&gt;
| Requested Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| [[#Pokémon Gender|Requested Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| Requested Min Level&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| Requested Max Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| [[#Trainer Gender|Trainer&#039;s Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0C-0x13&lt;br /&gt;
| Timestamp - deposited time&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x14-0x1B&lt;br /&gt;
| Timestamp - time traded?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x1C-0x1F&lt;br /&gt;
| PID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x20-0x2F&lt;br /&gt;
| Trainer&#039;s Name&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x30-0x31&lt;br /&gt;
| Trainer&#039;s OT ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x32&lt;br /&gt;
| Country&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x33&lt;br /&gt;
| City&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x34&lt;br /&gt;
| Trainer&#039;s Sprite&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| Is Exchanged Flag&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x36&lt;br /&gt;
| [[#Game Version|Game Version]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x37&lt;br /&gt;
| [[Pokemon NDS Structure#Original Language|Language]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The data for the Generation V GTS is 296 bytes and adds the trainer&#039;s secret ID, an additional two unknown bytes at the end, and shifts the position of the trainer name to after the trainer and secret IDs.&lt;br /&gt;
&lt;br /&gt;
=== Generation V Encrypted Bytes ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Contents&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00-0x01&lt;br /&gt;
| Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| [[#Pokémon Gender|Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x04-0x05&lt;br /&gt;
| Requested Nat. Dex ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| [[#Pokémon Gender|Requested Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| Requested Min Level&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| Requested Max Level&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x09&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| [[#Trainer Gender|Trainer&#039;s Gender]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0C-0x13&lt;br /&gt;
| [[#Timestamp Format|Timestamp]] - deposited time&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x14-0x1B&lt;br /&gt;
| [[#Timestamp Format|Timestamp]] - time traded?&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x1C-0x1F&lt;br /&gt;
| PID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x20-0x21&lt;br /&gt;
| Trainer&#039;s OT ID&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x22-0x23&lt;br /&gt;
| Trainer&#039;s Secret ID&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x24-0x33&lt;br /&gt;
| Trainer&#039;s Name&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x34&lt;br /&gt;
| Country&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x35&lt;br /&gt;
| City&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x36&lt;br /&gt;
| Trainer&#039;s Sprite&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x37&lt;br /&gt;
| Is Exchanged Flag&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x38&lt;br /&gt;
| [[#Game Version|Game Version]]&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x39&lt;br /&gt;
| [[Pokemon Black/White NDS Structure#Original Language|Language]]&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x3A-0x3B&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pokémon Gender ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Type&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| Male&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| Female&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| Either/neither&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Trainer Gender ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Type&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00&lt;br /&gt;
| Male&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x01&lt;br /&gt;
| Female&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Timestamp Format ===&lt;br /&gt;
The timestamps are set by the server, and are always PST (UTC-8).&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Contents&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x00-0x01&lt;br /&gt;
| Year&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x02&lt;br /&gt;
| Month&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x03&lt;br /&gt;
| Day&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x04&lt;br /&gt;
| Hour&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x05&lt;br /&gt;
| Minute&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x06&lt;br /&gt;
| Second&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| &#039;&#039;Unknown&#039;&#039; - always 0?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Game Version ===&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; style=&amp;quot;border: 1px solid #999; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ccc;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
! Value&lt;br /&gt;
! Version&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0A&lt;br /&gt;
| Diamond&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0B&lt;br /&gt;
| Pearl&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x0C&lt;br /&gt;
| Platinum&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x07&lt;br /&gt;
| HeartGold&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x08&lt;br /&gt;
| SoulSilver&lt;br /&gt;
|- style=&amp;quot;background: #ddd;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x15&lt;br /&gt;
| Black&lt;br /&gt;
|- style=&amp;quot;background: #eee;&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
| 0x14&lt;br /&gt;
| White&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Willaien</name></author>
	</entry>
</feed>