mirror of
https://github.com/ps2dev/mymc.git
synced 2024-11-24 03:20:10 +01:00
Update sources to 2.7 from author's website
http://www.csclub.uwaterloo.ca:11068/mymc/ -updated to use Python 2.7 and Visual C++ 2008 runtime -add a rename command to the command line interface -a few minor bugs fixed
This commit is contained in:
parent
8cdf72b321
commit
ddfa6a79f9
356
README.txt
356
README.txt
@ -1,178 +1,178 @@
|
||||
README.txt
|
||||
|
||||
By Ross Ridge
|
||||
Pubic Domain
|
||||
|
||||
@(#) mymc README.txt 1.6 12/10/04 19:18:08
|
||||
|
||||
|
||||
This file describes mymc, a utility for manipulating PlayStation 2
|
||||
memory card images as used by the emulator PCSX2. Its main purpose is
|
||||
to allow save games to be imported and exported to and from these
|
||||
images. Both MAX Drive and EMS (.psu) save files are fully supported,
|
||||
however save files in the SharkPort/X-Port and Code Breaker formats
|
||||
can only be imported and not exported. In addition to these basic
|
||||
functions, mymc can also perform a number of other operations, like
|
||||
creating new memory card images, viewing their contents, and adding
|
||||
and extracting individual files.
|
||||
|
||||
A simple, hopefully easy to use, graphicial user interface (GUI) is
|
||||
provided, but it's limitted to only basic operations. More advanced
|
||||
opterations require the use of a command line tool. To install mymc,
|
||||
unpack the downloaded ZIP archive to a new directory on your machine.
|
||||
You can then run the GUI version of mymc by openning that newn
|
||||
directory with Windows Explorer and double clicking on the "mymc-gui"
|
||||
icon. To make it easier to access, you can drag the "mymc-gui" icon
|
||||
to either your Desktop, Start Menu or Quick Launch toolbar. Make sure
|
||||
if you do so, that you create a shortcut to "mymc-gui.exe". If you
|
||||
copy the file instead, the program won't work.
|
||||
|
||||
The command line utility can be invoked from the Windows Command
|
||||
Prompt by using the "mymc" command. The executable "mymc.exe" and
|
||||
number of support files and these file must kept together in the same
|
||||
directory. To run the command you need to either add the directory
|
||||
where you unpacked the distribution to your PATH or type the full
|
||||
pathname of the executable. For example if you unpacked mymc to a
|
||||
directory named "c:\mymc" you need to enter "c:\mymc\mymc.exe" to run
|
||||
the program.
|
||||
|
||||
The second important thing to note is that mymc is only "alpha"
|
||||
quality software. This means that has is been released without
|
||||
extensive testing and may be unreliable. While it works fine for me,
|
||||
the author, it might not work as well for you. For that reason you
|
||||
should be careful how you use it, and prepared for the eventuality of
|
||||
it corrupting your save game images or producing garbage save files.
|
||||
If you're worried about this, one make things safer is to use two
|
||||
memory card images. Use the first image to load and save your games
|
||||
with under PCSX2, and the second image to import and export saves
|
||||
games using mysc. Then use the PS2 browser to copy files between two
|
||||
card images.
|
||||
|
||||
|
||||
GUI TUTORIAL
|
||||
============
|
||||
|
||||
The GUI for mymc is should be easy to use. After starting mymc, you
|
||||
can select the PS2 memory card image you want to work with by
|
||||
selecting the "Open" command by pressing the first button on the
|
||||
toolbar. You can then import a save file clicking on the Import
|
||||
toolbar button. To export a save files, first select it and then
|
||||
press the Export button. You can delete a save file permanently from
|
||||
your memory card, by selecting the "Delete" command from the File
|
||||
menu.
|
||||
|
||||
Do not try to use mymc to modify a memory card image while PCSX2 is
|
||||
running. Doing so will corrupt your memory card.
|
||||
|
||||
|
||||
COMMAND LINE TUTORIAL
|
||||
=====================
|
||||
|
||||
The basic usage template for mysc is "mymc memcard.ps2 command". The
|
||||
first argument, "memcard.ps2" is the filename of the memory card image
|
||||
while "command" is the name of the command you wish to use on the
|
||||
image. So for example, assuming you've installed mymc in "c:\mymc"
|
||||
and you've installed PCSX2 in "c:\pcsx2" you could enter the following
|
||||
command to see the contents of the memory card in the emulator's slot
|
||||
1:
|
||||
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 dir
|
||||
|
||||
You would see output something like this:
|
||||
|
||||
BASLUS-20678USAGAS00 UNLIMITED SAGA
|
||||
154KB Not Protected SYSTEMDATA
|
||||
|
||||
BADATA-SYSTEM Your System
|
||||
5KB Not Protected Configuration
|
||||
|
||||
BASLUS-20488-0000D SOTET<13>060:08
|
||||
173KB Not Protected Arias
|
||||
|
||||
7,800 KB Free
|
||||
|
||||
This is the simple "user friendly" way to view the contents of a
|
||||
memory card. It displays the same information you can see using the
|
||||
PlayStation 2 memory card browser. On the right is name of each save,
|
||||
and on the left is the size and protection status of the save. Also
|
||||
on the left is one bit of information you won't see in the browser,
|
||||
the directory name of the save file. PlayStation 2 saves are actually
|
||||
a collection of different files all stored in a single directory on
|
||||
the memory card. This is important information, because you need to
|
||||
know it to export save files.
|
||||
|
||||
As mentioned above, if you know the directory name of a save, you can
|
||||
export it. Exporting a save creates a save file in either the EMS
|
||||
(.psu) or MAX Drive (.max) format. You can then transfer the save to
|
||||
real PS2 memory using the appropriate tools. You can also send the
|
||||
saves to someone else to use or just keep them on your hard drive as a
|
||||
backup. The following command demonstrates how to export a save in
|
||||
the EMS format using mymc:
|
||||
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 export BASLUS-20448-0000D
|
||||
|
||||
This will create a file called "BASLUS-20448-0000D.psu" in the current
|
||||
directory. To create a file in the MAX format instead, use the export
|
||||
command's -m option:
|
||||
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 export -m BASLUS-20448-0000D
|
||||
|
||||
This creates a file named "BASLUS-20448-0000D.max". Note the "-m"
|
||||
option that appears after the "export" command.
|
||||
|
||||
Importing save files is similar. The save file type is auto-detected,
|
||||
so you don't need use an "-m" option with MAX Drive saves. Here's a
|
||||
couple of examples using each format:
|
||||
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 import BASLUS-20035.psu
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 import 20062_3583_GTA3.max
|
||||
|
||||
|
||||
ADVANCED NOTES
|
||||
==============
|
||||
|
||||
- To get general help with the command line utility use the "-h"
|
||||
global option (eg. "mymc -h"). To get help with a specific
|
||||
command use the "-h" option with that command (eg. "mymc x
|
||||
import -h"). In this later case, you need to specify a memory
|
||||
card image file, but it's ignored and so doesn't need to exist.
|
||||
|
||||
- Both executables in the Windows version, "mymc.exe" and
|
||||
"mymc-gui.exe" do the same thing and support the same options.
|
||||
The difference is that "mymc" is console application, while
|
||||
"mymc-gui" is a Windows appliction. Currently, using "mymc"
|
||||
to start the GUI will result in a fair amount debug messages
|
||||
being printed that are normally not seen "mymc-gui" is used.
|
||||
|
||||
- It's possible to use mymc create images that are bigger (or
|
||||
smaller) than standard PS2 memory cards. Be very careful if you
|
||||
do this, not all games may be compatible with such images.
|
||||
|
||||
- The bad block list on images is ignored. Since memory card
|
||||
images created with either PCSX2 or mymc won't have any bad
|
||||
blocks, this shouldn't be a problem unless you've somehow
|
||||
extracted a complete image from a real memory card and expect to
|
||||
copy it back.
|
||||
|
||||
- The PS2 only uses at most 8,000 KB of a memory card, but there
|
||||
is actually 8,135 KB of allocatable space on a standard
|
||||
error-free memory card. The extra 135 KB is reserved so that
|
||||
memory card with bad blocks don't appear to have less space than
|
||||
memory cards with fewer or no bad blocks. Since there are no
|
||||
bad blocks on memory card images, mymc uses the full capacity
|
||||
provided by standard memory cards.
|
||||
|
||||
|
||||
PYTHON SOURCE DISTRIBUTION
|
||||
==========================
|
||||
|
||||
The "source code" distribution of mymc is provided for users of Linux
|
||||
and other non-Windows operating systems. It uses the same Python code
|
||||
that the Windows distribution is built with (using py2exe) and
|
||||
supports all the same functionality. One big difference is that the
|
||||
Windows DLL "mymcsup.dll" is not included and as a result compressing
|
||||
and decompressing MAX Drive saves will be as much as 100 times slower.
|
||||
The GUI mode is hasn't been extensively tested on non-Windows systems,
|
||||
and the 3D display of save file icons requires the DLL. The Python
|
||||
source version should support big-endian machines, but this hasn't
|
||||
been tested.
|
||||
README.txt
|
||||
|
||||
By Ross Ridge
|
||||
Pubic Domain
|
||||
|
||||
@(#) mymc README.txt 1.6 12/10/04 19:18:08
|
||||
|
||||
|
||||
This file describes mymc, a utility for manipulating PlayStation 2
|
||||
memory card images as used by the emulator PCSX2. Its main purpose is
|
||||
to allow save games to be imported and exported to and from these
|
||||
images. Both MAX Drive and EMS (.psu) save files are fully supported,
|
||||
however save files in the SharkPort/X-Port and Code Breaker formats
|
||||
can only be imported and not exported. In addition to these basic
|
||||
functions, mymc can also perform a number of other operations, like
|
||||
creating new memory card images, viewing their contents, and adding
|
||||
and extracting individual files.
|
||||
|
||||
A simple, hopefully easy to use, graphicial user interface (GUI) is
|
||||
provided, but it's limitted to only basic operations. More advanced
|
||||
opterations require the use of a command line tool. To install mymc,
|
||||
unpack the downloaded ZIP archive to a new directory on your machine.
|
||||
You can then run the GUI version of mymc by openning that newn
|
||||
directory with Windows Explorer and double clicking on the "mymc-gui"
|
||||
icon. To make it easier to access, you can drag the "mymc-gui" icon
|
||||
to either your Desktop, Start Menu or Quick Launch toolbar. Make sure
|
||||
if you do so, that you create a shortcut to "mymc-gui.exe". If you
|
||||
copy the file instead, the program won't work.
|
||||
|
||||
The command line utility can be invoked from the Windows Command
|
||||
Prompt by using the "mymc" command. The executable "mymc.exe" and
|
||||
number of support files and these file must kept together in the same
|
||||
directory. To run the command you need to either add the directory
|
||||
where you unpacked the distribution to your PATH or type the full
|
||||
pathname of the executable. For example if you unpacked mymc to a
|
||||
directory named "c:\mymc" you need to enter "c:\mymc\mymc.exe" to run
|
||||
the program.
|
||||
|
||||
The second important thing to note is that mymc is only "alpha"
|
||||
quality software. This means that has is been released without
|
||||
extensive testing and may be unreliable. While it works fine for me,
|
||||
the author, it might not work as well for you. For that reason you
|
||||
should be careful how you use it, and prepared for the eventuality of
|
||||
it corrupting your save game images or producing garbage save files.
|
||||
If you're worried about this, one make things safer is to use two
|
||||
memory card images. Use the first image to load and save your games
|
||||
with under PCSX2, and the second image to import and export saves
|
||||
games using mysc. Then use the PS2 browser to copy files between two
|
||||
card images.
|
||||
|
||||
|
||||
GUI TUTORIAL
|
||||
============
|
||||
|
||||
The GUI for mymc is should be easy to use. After starting mymc, you
|
||||
can select the PS2 memory card image you want to work with by
|
||||
selecting the "Open" command by pressing the first button on the
|
||||
toolbar. You can then import a save file clicking on the Import
|
||||
toolbar button. To export a save files, first select it and then
|
||||
press the Export button. You can delete a save file permanently from
|
||||
your memory card, by selecting the "Delete" command from the File
|
||||
menu.
|
||||
|
||||
Do not try to use mymc to modify a memory card image while PCSX2 is
|
||||
running. Doing so will corrupt your memory card.
|
||||
|
||||
|
||||
COMMAND LINE TUTORIAL
|
||||
=====================
|
||||
|
||||
The basic usage template for mysc is "mymc memcard.ps2 command". The
|
||||
first argument, "memcard.ps2" is the filename of the memory card image
|
||||
while "command" is the name of the command you wish to use on the
|
||||
image. So for example, assuming you've installed mymc in "c:\mymc"
|
||||
and you've installed PCSX2 in "c:\pcsx2" you could enter the following
|
||||
command to see the contents of the memory card in the emulator's slot
|
||||
1:
|
||||
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 dir
|
||||
|
||||
You would see output something like this:
|
||||
|
||||
BASLUS-20678USAGAS00 UNLIMITED SAGA
|
||||
154KB Not Protected SYSTEMDATA
|
||||
|
||||
BADATA-SYSTEM Your System
|
||||
5KB Not Protected Configuration
|
||||
|
||||
BASLUS-20488-0000D SOTET<13>060:08
|
||||
173KB Not Protected Arias
|
||||
|
||||
7,800 KB Free
|
||||
|
||||
This is the simple "user friendly" way to view the contents of a
|
||||
memory card. It displays the same information you can see using the
|
||||
PlayStation 2 memory card browser. On the right is name of each save,
|
||||
and on the left is the size and protection status of the save. Also
|
||||
on the left is one bit of information you won't see in the browser,
|
||||
the directory name of the save file. PlayStation 2 saves are actually
|
||||
a collection of different files all stored in a single directory on
|
||||
the memory card. This is important information, because you need to
|
||||
know it to export save files.
|
||||
|
||||
As mentioned above, if you know the directory name of a save, you can
|
||||
export it. Exporting a save creates a save file in either the EMS
|
||||
(.psu) or MAX Drive (.max) format. You can then transfer the save to
|
||||
real PS2 memory using the appropriate tools. You can also send the
|
||||
saves to someone else to use or just keep them on your hard drive as a
|
||||
backup. The following command demonstrates how to export a save in
|
||||
the EMS format using mymc:
|
||||
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 export BASLUS-20448-0000D
|
||||
|
||||
This will create a file called "BASLUS-20448-0000D.psu" in the current
|
||||
directory. To create a file in the MAX format instead, use the export
|
||||
command's -m option:
|
||||
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 export -m BASLUS-20448-0000D
|
||||
|
||||
This creates a file named "BASLUS-20448-0000D.max". Note the "-m"
|
||||
option that appears after the "export" command.
|
||||
|
||||
Importing save files is similar. The save file type is auto-detected,
|
||||
so you don't need use an "-m" option with MAX Drive saves. Here's a
|
||||
couple of examples using each format:
|
||||
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 import BASLUS-20035.psu
|
||||
c:\mymc\mymc c:\pcsx2\memcards\Mcd001.ps2 import 20062_3583_GTA3.max
|
||||
|
||||
|
||||
ADVANCED NOTES
|
||||
==============
|
||||
|
||||
- To get general help with the command line utility use the "-h"
|
||||
global option (eg. "mymc -h"). To get help with a specific
|
||||
command use the "-h" option with that command (eg. "mymc x
|
||||
import -h"). In this later case, you need to specify a memory
|
||||
card image file, but it's ignored and so doesn't need to exist.
|
||||
|
||||
- Both executables in the Windows version, "mymc.exe" and
|
||||
"mymc-gui.exe" do the same thing and support the same options.
|
||||
The difference is that "mymc" is console application, while
|
||||
"mymc-gui" is a Windows appliction. Currently, using "mymc"
|
||||
to start the GUI will result in a fair amount debug messages
|
||||
being printed that are normally not seen "mymc-gui" is used.
|
||||
|
||||
- It's possible to use mymc create images that are bigger (or
|
||||
smaller) than standard PS2 memory cards. Be very careful if you
|
||||
do this, not all games may be compatible with such images.
|
||||
|
||||
- The bad block list on images is ignored. Since memory card
|
||||
images created with either PCSX2 or mymc won't have any bad
|
||||
blocks, this shouldn't be a problem unless you've somehow
|
||||
extracted a complete image from a real memory card and expect to
|
||||
copy it back.
|
||||
|
||||
- The PS2 only uses at most 8,000 KB of a memory card, but there
|
||||
is actually 8,135 KB of allocatable space on a standard
|
||||
error-free memory card. The extra 135 KB is reserved so that
|
||||
memory card with bad blocks don't appear to have less space than
|
||||
memory cards with fewer or no bad blocks. Since there are no
|
||||
bad blocks on memory card images, mymc uses the full capacity
|
||||
provided by standard memory cards.
|
||||
|
||||
|
||||
PYTHON SOURCE DISTRIBUTION
|
||||
==========================
|
||||
|
||||
The "source code" distribution of mymc is provided for users of Linux
|
||||
and other non-Windows operating systems. It uses the same Python code
|
||||
that the Windows distribution is built with (using py2exe) and
|
||||
supports all the same functionality. One big difference is that the
|
||||
Windows DLL "mymcsup.dll" is not included and as a result compressing
|
||||
and decompressing MAX Drive saves will be as much as 100 times slower.
|
||||
The GUI mode is hasn't been extensively tested on non-Windows systems,
|
||||
and the 3D display of save file icons requires the DLL. The Python
|
||||
source version should support big-endian machines, but this hasn't
|
||||
been tested.
|
||||
|
370
guires.py
370
guires.py
@ -1,185 +1,185 @@
|
||||
resources = {
|
||||
"mc4.ico": (
|
||||
"AAABAAIAICAQAAAAAADoAgAAJgAAADAwAAEAAAAAqA4AAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAA\n"
|
||||
"AIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAA\n"
|
||||
"AAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAcABwAAAAAAAAAAAAAAAABwAABwAAAAAAAAAAAAAAAHAAYAB3d3d3dwAAAAAAAAcABm\n"
|
||||
"YAB3d3dwAAAAAAAABwAGZmYAB3d3AAAAAAAAAHAAZmZmYAB4iIiIiIiAAAcABmZmZgAAB/+P+q/4\n"
|
||||
"gABwAGZmZmAAAABu7u7u6IAHAAZmZmYAAAAABu7u7u6AAABmZmZgBwcAAABu7u7ugAAGZmZmAHBw\n"
|
||||
"AAAABu7u7oAAAGZmYAcHBwAAAABu7u6ABwAGZgBwcHBwAAAABu7ugAAAAGAABwcHAABAAADu7oAA\n"
|
||||
"AAAAAHB3cAAEAAAG7u6AAAAAAAAAB3AAwAAAbu7ugAAABwAAAAAABAAABu7u7oAAAAhgAAAAAMAH\n"
|
||||
"AG7u7u6AAAAI5gAAAAAAdwbu7u7ugAAACO5gAAxAAABu7u7u7oAAAAju5gAEzAAG7u7u7u6AAAAI\n"
|
||||
"7u5gAAwAbu7u7u7ugAAACO7u5gAABu7u7u7u7oAAAAju7u5gAG7u7u7u7u6AAAAI7u7u5gbu7u7u\n"
|
||||
"7u7ugAAACI7u7u7u7u7u7u7u6IAAAAiIiIiIiIiIiIiIiIiAAAAIiIiIiIiIiIiIiIiIgAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////g////wH///4AAH/8AAH/+AAD//AA\n"
|
||||
"AAHgAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB4AAAAfAAAAH4AAAB+AAAAfgAAAH4AAAB+AAA\n"
|
||||
"AfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB//////////8oAAAAMAAAAGAAAAABAAgA\n"
|
||||
"AAAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA\n"
|
||||
"3MAA8MqmAAAgQAAAIGAAACCAAAAgoAAAIMAAACDgAABAAAAAQCAAAEBAAABAYAAAQIAAAECgAABA\n"
|
||||
"wAAAQOAAAGAAAABgIAAAYEAAAGBgAABggAAAYKAAAGDAAABg4AAAgAAAAIAgAACAQAAAgGAAAICA\n"
|
||||
"AACAoAAAgMAAAIDgAACgAAAAoCAAAKBAAACgYAAAoIAAAKCgAACgwAAAoOAAAMAAAADAIAAAwEAA\n"
|
||||
"AMBgAADAgAAAwKAAAMDAAADA4AAA4AAAAOAgAADgQAAA4GAAAOCAAADgoAAA4MAAAODgAEAAAABA\n"
|
||||
"ACAAQABAAEAAYABAAIAAQACgAEAAwABAAOAAQCAAAEAgIABAIEAAQCBgAEAggABAIKAAQCDAAEAg\n"
|
||||
"4ABAQAAAQEAgAEBAQABAQGAAQECAAEBAoABAQMAAQEDgAEBgAABAYCAAQGBAAEBgYABAYIAAQGCg\n"
|
||||
"AEBgwABAYOAAQIAAAECAIABAgEAAQIBgAECAgABAgKAAQIDAAECA4ABAoAAAQKAgAECgQABAoGAA\n"
|
||||
"QKCAAECgoABAoMAAQKDgAEDAAABAwCAAQMBAAEDAYABAwIAAQMCgAEDAwABAwOAAQOAAAEDgIABA\n"
|
||||
"4EAAQOBgAEDggABA4KAAQODAAEDg4ACAAAAAgAAgAIAAQACAAGAAgACAAIAAoACAAMAAgADgAIAg\n"
|
||||
"AACAICAAgCBAAIAgYACAIIAAgCCgAIAgwACAIOAAgEAAAIBAIACAQEAAgEBgAIBAgACAQKAAgEDA\n"
|
||||
"AIBA4ACAYAAAgGAgAIBgQACAYGAAgGCAAIBgoACAYMAAgGDgAICAAACAgCAAgIBAAICAYACAgIAA\n"
|
||||
"gICgAICAwACAgOAAgKAAAICgIACAoEAAgKBgAICggACAoKAAgKDAAICg4ACAwAAAgMAgAIDAQACA\n"
|
||||
"wGAAgMCAAIDAoACAwMAAgMDgAIDgAACA4CAAgOBAAIDgYACA4IAAgOCgAIDgwACA4OAAwAAAAMAA\n"
|
||||
"IADAAEAAwABgAMAAgADAAKAAwADAAMAA4ADAIAAAwCAgAMAgQADAIGAAwCCAAMAgoADAIMAAwCDg\n"
|
||||
"AMBAAADAQCAAwEBAAMBAYADAQIAAwECgAMBAwADAQOAAwGAAAMBgIADAYEAAwGBgAMBggADAYKAA\n"
|
||||
"wGDAAMBg4ADAgAAAwIAgAMCAQADAgGAAwICAAMCAoADAgMAAwIDgAMCgAADAoCAAwKBAAMCgYADA\n"
|
||||
"oIAAwKCgAMCgwADAoOAAwMAAAMDAIADAwEAAwMBgAMDAgADAwKAA8Pv/AKSgoACAgIAAAAD/AAD/\n"
|
||||
"AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAKQAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAApAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAAAAAAAApAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApAAAAAAACQAAAACkpKSkpKSkpKSk\n"
|
||||
"pKSkpAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkAAAAAAAJCQkAAACkpKSkpKSkpKSkpKQAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAKQAAAAAAAkJCQkJAAAAAKSkpKSkpKQAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAApAAAAAAACQkJCQkJCQAAAACkpKSkpKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkAAAA\n"
|
||||
"AAAJCQkJCQkJCQkAAAAApPf39/f39/f39/f39/f39/f39/cAAAAAAAAAAKQAAAAAAAkJCQkJCQkJ\n"
|
||||
"CQkJAAAAAKQHBwf3BwcH9/f39wcHB/f39/cAAAAAAAAApAAAAAAACQkJCQkJCQkJCQkAAAAAAACk\n"
|
||||
"9vb39vb29/r69/b29vf39/cAAAAAAACkAAAAAAAJCQkJCQkJCQkJCQAAAAAAAAAApPf39/f39/f3\n"
|
||||
"9/f39/f39/cAAAAAAKQAAAAAAAkJCQkJCQkJCQkJAAAAAAAAAAAAAKT39/f39/f39/f39/f39/cA\n"
|
||||
"AAAApAAAAAAACQkJCQkJCQkJCQkAAAAAAAAAAAAAAAD3/v7+/v7+/v7+/v739/cAAACkAAAAAAAJ\n"
|
||||
"CQkJCQkJCQkJCQAApAAApAAAAAAAAAAAB/7+/v7+/v7+/v7+9/cAAAAAAAAAAAkJCQkJCQkJCQkJ\n"
|
||||
"AACkAACkAAAAAAAAAAAAAAf+/v7+/v7+/v7+9/cAAAAAAAAACQkJCQkJCQkJCQkAAKQAAKQAAAAA\n"
|
||||
"AAAAAAAAAAAH/v7+/v7+/v7+9/cAAACkAAAAAAkJCQkJCQkJCQAApAAApAAAAKQAAAAAAAAAAAAA\n"
|
||||
"B/7+/v7+/v7+9/cAAAAApAAAAAAJCQkJCQkJAACkAACkAAAApACkAAAAAAAAAAAAAAf+/v7+/v7+\n"
|
||||
"9/cAAAAAAACkAAAACQkJCQkAAKQAAKQAAACkAKQAAAAAAAAAAAAAAAAH/v7+/v7+9/cAAAAAAAAA\n"
|
||||
"AAAAAAkJCQAAAAAApAAAAAAApAAAAAAAAADAAAAAAAAAB/7+/v7+9/cAAAAAAAAAAKQAAAAJAAAA\n"
|
||||
"AACkAAAKpKQAAAAAAAAAAMAAAAAAAAAAAP7+/v7+9/cAAAAAAAAAAAAAAAAAAAAAAKQAAACkAKSk\n"
|
||||
"AAAAAAAAwAAAAAAAAAAAB/7+/v7+9/cAAAAAAAAAAACkAAAAAAAAAAAAAACkpACkAAAAAADAAAAA\n"
|
||||
"AAAAAAAH/v7+/v7+9/cAAAAAAAAAAAD3pAAAAAAAAAAAAAAApKQKAAAAAMDAAAAAAAAAAAf+/v7+\n"
|
||||
"/v7+9/cAAAAAAAAAAAD39wcAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAB/7+/v7+/v7+9/cAAAAA\n"
|
||||
"AAAAAAD39/4HAAAAAAAAAAAAAAAAAADAAAAACqQAAAAH/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+\n"
|
||||
"BwAAAAAAAAAAAAAAAMDAAAAKpAoAAAf+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/gcAAAAAAAAA\n"
|
||||
"AAAAAAAAAAqkpAAAB/7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v4HAAAAAAAAAAAAAAAAAKQK\n"
|
||||
"AAAH/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+BwAAAAAAwADAAAAAAAAAAAf+/v7+/v7+\n"
|
||||
"/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/gcAAAAAAMDAwAAAAAAAB/7+/v7+/v7+/v7+/v7+9/cA\n"
|
||||
"AAAAAAAAAAD39/7+/v7+/v4HAAAAwAAAwAAAAAAH/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD3\n"
|
||||
"9/7+/v7+/v7+BwAAAAAAwAAAAAf+/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/v7+\n"
|
||||
"/gcAAAAAAAAAB/7+/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/v7+/v4HAAAAAAAH\n"
|
||||
"/v7+/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/v7+/v7+BwAAAAf+/v7+/v7+/v7+\n"
|
||||
"/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/v7+/v7+/gcAB/7+/v7+/v7+/v7+/v7+/v7+/v7+\n"
|
||||
"9/cAAAAAAAAAAAD39/7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAA\n"
|
||||
"AAD39/f+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v739/cAAAAAAAAAAAD3+/v79/f3\n"
|
||||
"9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/cAAAAAAAAAAAD30NDQ9/f39/f39/f39/f3\n"
|
||||
"9/f39/f39/f39/f39/f396SkpKSk9/cAAAAAAAAAAAD3+ff59/f39/f39/f39/f39/f39/f39/f3\n"
|
||||
"9/f39/f39/f39/f39/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////\n"
|
||||
"////AAD//h////8AAP/8D////wAA//gP////AAD/8Af///8AAP/gAAAP/wAA/8AAAD//AAD/gAAB\n"
|
||||
"//8AAP8AAAH//wAA/gAAAAADAAD8AAAAAAMAAPgAAAAAAwAA8AAAAAADAADgAAAAAAMAAMAAAAAA\n"
|
||||
"AwAAgAAAAAADAACAAAAAAAMAAIAAAAAAAwAAgAAAAAADAADAAAAAAAMAAPAAAAAAAwAA+AAAAAAD\n"
|
||||
"AAD8AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+AAAAAAMA\n"
|
||||
"AP4AAAAAAwAA/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA\n"
|
||||
"/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+\n"
|
||||
"AAAAAAMAAP///////wAA////////AAD///////8AAA==\n"
|
||||
).decode("base64_codec"),
|
||||
"mc5b.ico": (
|
||||
"AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA\n"
|
||||
"/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAA\n"
|
||||
"AHAAYAAAAAAAAAAAAAAAAAcABmYAAAAAAAAAAAAAAKBwAGZmYABwAAAAAAAAAACqAAZmZmYABwAA\n"
|
||||
"AAAAAAAAqqBmZmZgAABwAAAAAAAAB6qqZmZmAAAABwAACqqqqqqiqqZmYAAAAABwAAqqqqqqoiqq\n"
|
||||
"ZgBwcAAABwAKoiIiIiIiqqAHBwAAAABwCqIiIiIiIiqqcHBwAAAABwqiIiIiIiIqqgcHBwAAAAAK\n"
|
||||
"oiIiIiIiqqBwcHAABAAACqqqqqqiKqoHB3cAAEAAAAqqqqqqoqqgAAB3AAwAAAcAAAAAAKqqAAAA\n"
|
||||
"AABAAABwAAAAAACqpwAAAAAMAHAHAAAAAAAAqgBwAAAAAAdwcAAAAAAAAKAABwAAxAAABwAAAAAA\n"
|
||||
"AAAAAABwAEzAAHAAAAAAAAAAAAAABwAAwAcAAAAAAAAAAAAAAABwAABwAAAAAAAAAAAAAAAABwAH\n"
|
||||
"AAAAAAAAAAAAAAAAAABwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAD///////////////////////8H///+B////AP///gB///QAH//wAA//8AAH/+A\n"
|
||||
"AA+AAAAHgAAAA4AAAAGAAAAAgAAAAIAAAACAAAAAgAAAAP/AAAH/wAAD/8wAB//eAA///wAf//+A\n"
|
||||
"P///wH///+D////x/////////////////w==\n"
|
||||
).decode("base64_codec"),
|
||||
"mc2.ico": (
|
||||
"AAABAAEAMDAAAQAAAACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYAACBAAAAgYAAAIIAA\n"
|
||||
"ACCgAAAgwAAAIOAAAEAAAABAIAAAQEAAAEBgAABAgAAAQKAAAEDAAABA4AAAYAAAAGAgAABgQAAA\n"
|
||||
"YGAAAGCAAABgoAAAYMAAAGDgAACAAAAAgCAAAIBAAACAYAAAgIAAAICgAACAwAAAgOAAAKAAAACg\n"
|
||||
"IAAAoEAAAKBgAACggAAAoKAAAKDAAACg4AAAwAAAAMAgAADAQAAAwGAAAMCAAADAoAAAwMAAAMDg\n"
|
||||
"AADgAAAA4CAAAOBAAADgYAAA4IAAAOCgAADgwAAA4OAAQAAAAEAAIABAAEAAQABgAEAAgABAAKAA\n"
|
||||
"QADAAEAA4ABAIAAAQCAgAEAgQABAIGAAQCCAAEAgoABAIMAAQCDgAEBAAABAQCAAQEBAAEBAYABA\n"
|
||||
"QIAAQECgAEBAwABAQOAAQGAAAEBgIABAYEAAQGBgAEBggABAYKAAQGDAAEBg4ABAgAAAQIAgAECA\n"
|
||||
"QABAgGAAQICAAECAoABAgMAAQIDgAECgAABAoCAAQKBAAECgYABAoIAAQKCgAECgwABAoOAAQMAA\n"
|
||||
"AEDAIABAwEAAQMBgAEDAgABAwKAAQMDAAEDA4ABA4AAAQOAgAEDgQABA4GAAQOCAAEDgoABA4MAA\n"
|
||||
"QODgAIAAAACAACAAgABAAIAAYACAAIAAgACgAIAAwACAAOAAgCAAAIAgIACAIEAAgCBgAIAggACA\n"
|
||||
"IKAAgCDAAIAg4ACAQAAAgEAgAIBAQACAQGAAgECAAIBAoACAQMAAgEDgAIBgAACAYCAAgGBAAIBg\n"
|
||||
"YACAYIAAgGCgAIBgwACAYOAAgIAAAICAIACAgEAAgIBgAICAgACAgKAAgIDAAICA4ACAoAAAgKAg\n"
|
||||
"AICgQACAoGAAgKCAAICgoACAoMAAgKDgAIDAAACAwCAAgMBAAIDAYACAwIAAgMCgAIDAwACAwOAA\n"
|
||||
"gOAAAIDgIACA4EAAgOBgAIDggACA4KAAgODAAIDg4ADAAAAAwAAgAMAAQADAAGAAwACAAMAAoADA\n"
|
||||
"AMAAwADgAMAgAADAICAAwCBAAMAgYADAIIAAwCCgAMAgwADAIOAAwEAAAMBAIADAQEAAwEBgAMBA\n"
|
||||
"gADAQKAAwEDAAMBA4ADAYAAAwGAgAMBgQADAYGAAwGCAAMBgoADAYMAAwGDgAMCAAADAgCAAwIBA\n"
|
||||
"AMCAYADAgIAAwICgAMCAwADAgOAAwKAAAMCgIADAoEAAwKBgAMCggADAoKAAwKDAAMCg4ADAwAAA\n"
|
||||
"wMAgAMDAQADAwGAAwMCAAMDAoADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD/\n"
|
||||
"//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAKQAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpKSkpKSkpAAAAACkpKSkpKSkpKSkpKSkpKSkpKSkpKSk\n"
|
||||
"pKQAAAAAAAAAAAAAAKSkpKSkpKQAAAAAAAAApKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkAAAAAAAA\n"
|
||||
"AAAAAKSkpKSkpAcAAAAAAAAAB6SkpKSkpKSkpKSkpKSkpKSkpKSkpKSkAAAAAAAAAAAAAKSkpKSk\n"
|
||||
"BwAAAAAACQAAAACkpKSkpKSkpKSkpKSkpKSkpKQAAACkAAAAAAAAAAAAAKSkpKQHAAAAAAAJCQkA\n"
|
||||
"AAAHpKSkpKSkpKSkpKSkpKSkpKQAAACkAAAAAAAAAAAAAKSkpAcAAAAAAAkJCQkJAAAAAAekpKSk\n"
|
||||
"pKSkpKSkpKSkpKQAAACkAAAAAAAAAAAAAKSkBwAAAAAACQkJCQkJCQAAAAAHpKSkpKSkpKSkpKSk\n"
|
||||
"pKSkpKSkAAAAAAAAAAAAAKQAAAAAAAAJCQkJCQkJCQkAAAAAB6SkpKSkpKSkpKSkpKSkpKSkAAAA\n"
|
||||
"AAAAAAAAAKQAAAAAAAkJCQkJCQkJCQkJAAAAAAekpKSkpKSkpKSkpKSkpKSkAAAAAAAAAAAApAAA\n"
|
||||
"AAAACQkJCQkJCQkJCQkAAAAAAAAHpKSkpKSkpKSkpKSkpKSkAAAAAAAAAACkAAAAAAAJCQkJCQkJ\n"
|
||||
"CQkJCQAAAAAAAAAAB6SkpKSkpKSkpKSkpKSkAAAAAAAAAKQAAAAAAAkJCQkJCQkJCQkJAAAAAAAA\n"
|
||||
"AAAAAAekpKSkpKSkpKSkpKSkAAAAAAAApAAAAAAACQkJCQkJCQkJCQkAAAAAAAAAAAAAAAAHpKSk\n"
|
||||
"pKSkpKSkpKSkAAAAAACkAAAAAAAJCQkJCQkJCQkJCQAApAAApAAAAAAAAAAAB6SkpKSkpKSkpKSk\n"
|
||||
"AAAAAAAAAAAAAAkJCQkJCQkJCQkJAACkAACkAAAAAAAAAAAAAAekpKSkpKSkpKSkAAAAAAAAAAAA\n"
|
||||
"CQkJCQkJCQkJCQkAAKQAAKQAAAAAAAAAAAAAAAAHpKSkpKSkpKSkAAAAAACkAAAAAAkJCQkJCQkJ\n"
|
||||
"CQAApAAApAAAAKQAAAAAAAAAAAAAB6SkpKSkpKSkAAAAAAAApAAAAAAJCQkJCQkJAACkAACkAAAA\n"
|
||||
"pACkAAAAAAAAAAAAAAekpKSkpKSkAAAAAAAAAACkAAAACQkJCQkAAKQAAKQAAACkAKQAAAAAAAAA\n"
|
||||
"AAAAAAAHpKSkpKSkAAAAAAAAAAAAAAAAAAkJCQAAAAAApAAAAAAApAAAAAAAAADAAAAAAAAAB6Sk\n"
|
||||
"pKSkAAAAAAAAAAAAAAAAAAAJAAAAAACkAAAKpKQAAAAAAAAAAMAAAAAAAAAAAKSkpKSkAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAKQAAACkAKSkAAAAAAAAwAAAAAAAAAAAB6SkpKSkAAAAAAAAAAAAAKQAAAAA\n"
|
||||
"AAAAAAAAAACkpACkAAAAAADAAAAAAAAAAAAHpKSkpKSkAAAAAAAAAAAAAKSkBwAAAAAAAAAAAAAA\n"
|
||||
"pKQKAAAAAMDAAAAAAAAAAAekpKSkpKSkAAAAAAAAAAAAAKSkpAcAAAAAAAAAAAAAAAAAAAAAwAAA\n"
|
||||
"AAAAAAAAB6SkpKSkpKSkAAAAAAAAAAAAAKSkpKQHAAAAAAAAAAAAAAAAAADAAAAACqQAAAAHpKSk\n"
|
||||
"pKSkpKSkAAAAAAAAAAAAAKSkpKSkBwAAAAAAAAAAAAAAAMDAAAAKpAoAAAekpKSkpKSkpKSkAAAA\n"
|
||||
"AAAAAAAAAKSkpKSkpAcAAAAAAAAAAAAAAAAAAAqkpAAAB6SkpKSkpKSkpKSkAAAAAAAAAAAAAKSk\n"
|
||||
"pKSkpKQHAAAAAAAAAAAAAAAAAKQKAAD3pKSkpKSkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9wAA\n"
|
||||
"AAAAwADAAAAAAAAAAPf39/f396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/cAAAAAAMDAwAAA\n"
|
||||
"AAAAB6SkpPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f3AAAAwAAAwAAAAACkpKSkpPf3\n"
|
||||
"96SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f39wAAAAAAwAAAAPekpKSkpPf396SkpKSkpKSk\n"
|
||||
"AAAAAAAAAAAAAKSkpKSkpKSk9/f39/cAAAAAAAAA9/ekpKSkpPf396SkpKSkpKSkAAAAAAAAAAAA\n"
|
||||
"AKSkpKSkpKSk9/f39/f3AAAAAAD39/ekpKSkpPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk\n"
|
||||
"9/f39/f39wAAAPf39/ekpKSkpPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f39/f39/cA\n"
|
||||
"9/f39/ekpKSkpPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f39/f39/f39/f39/ekpKSk\n"
|
||||
"pPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f39/f39/f39/f39/ekpKSkpPf396SkpKSk\n"
|
||||
"pKQAAAAAAAAAAAAAAKSkpKSkpKSk9/f39/f39/f39/f39/ekpKSkpPf396SkpKSkpAAA9gAAAAAA\n"
|
||||
"AAAAAACkpKSkpKSk9/f39/f39/f39/f39/f39/f39/f396SkpKSkAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////\n"
|
||||
"AAD//w////8AAP8AAAAADwAA/gAAAAAHAAD+AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAAcA\n"
|
||||
"AP4AAAAABwAA/gAAAAAHAAD+AAAAAAcAAPwAAAAABwAA+AAAAAAHAADwAAAAAAcAAOAAAAAABwAA\n"
|
||||
"wAAAAAAHAADAAAAAAAcAAMAAAAAABwAAwAAAAAAHAADgAAAAAAcAAPgAAAAABwAA/AAAAAAHAAD+\n"
|
||||
"AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAAcAAP4A\n"
|
||||
"AAAABwAA/gAAAAAHAAD+AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAAcAAP4AAAAABwAA/gAA\n"
|
||||
"AAAHAAD+AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAA8AAP4AAAAAGwAA/wAAAAA/AAD/////\n"
|
||||
"//sAAP///////wAA\n"
|
||||
).decode("base64_codec"),
|
||||
"mc6a.ico": (
|
||||
"AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA\n"
|
||||
"/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAcABg\n"
|
||||
"AAAAAAAAAAAAAAAABwAGZgAAAAAAAAAAAAAAAHAAZmZgAHAAAACgAAAAAAcABmZmZgAHAAAAqgAA\n"
|
||||
"AABwAGZmZmAAAHAAAKqgAAAHAAZmZmYAAAAHAACqqgAAcABmZmZgAAqqqqqqoqqgAAAGZmZmAHB6\n"
|
||||
"qqqqqqIqqgAAZmZmYAcHCqIiIiIiIqqgAAZmZgBwcHqiIiIiIiIqqnAAZmAHBwcKoiIiIiIiKqoA\n"
|
||||
"AAYAAHBweqIiIiIiIqqgAAAAAAcHdwqqqqqqoiqqAAAAAAAAAHcKqqqqqqKqoAAAAHAAAAAAAEAA\n"
|
||||
"AHCqqgAAAAAHAAAAAAwAcAcAqqAAAAAAAHAAAAAAB3BwAKoAAAAAAAAHAADEAAAHAACgAAAAAAAA\n"
|
||||
"AHAATMAAcAAAAAAAAAAAAAAHAADABwAAAAAAAAAAAAAAAHAAAHAAAAAAAAAAAAAAAAAHAAcAAAAA\n"
|
||||
"AAAAAAAAAAAAAHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAD//////////////////////wf///4H///8A///+AH///AAf3/gAD8/wAAfH4AA\n"
|
||||
"Dw8AAAAHAAAAAwAAAAEAAAAAAAAAAMAAAAHgAAAD8AAAB/AAAQ/4AAMf/AAHP/4AD3//AB///4A/\n"
|
||||
"///Af///4P////H//////////////////w==\n"
|
||||
).decode("base64_codec"),
|
||||
}
|
||||
resources = {
|
||||
"mc4.ico": (
|
||||
"AAABAAIAICAQAAAAAADoAgAAJgAAADAwAAEAAAAAqA4AAA4DAAAoAAAAIAAAAEAAAAABAAQAAAAA\n"
|
||||
"AIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAA\n"
|
||||
"AAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAcABwAAAAAAAAAAAAAAAABwAABwAAAAAAAAAAAAAAAHAAYAB3d3d3dwAAAAAAAAcABm\n"
|
||||
"YAB3d3dwAAAAAAAABwAGZmYAB3d3AAAAAAAAAHAAZmZmYAB4iIiIiIiAAAcABmZmZgAAB/+P+q/4\n"
|
||||
"gABwAGZmZmAAAABu7u7u6IAHAAZmZmYAAAAABu7u7u6AAABmZmZgBwcAAABu7u7ugAAGZmZmAHBw\n"
|
||||
"AAAABu7u7oAAAGZmYAcHBwAAAABu7u6ABwAGZgBwcHBwAAAABu7ugAAAAGAABwcHAABAAADu7oAA\n"
|
||||
"AAAAAHB3cAAEAAAG7u6AAAAAAAAAB3AAwAAAbu7ugAAABwAAAAAABAAABu7u7oAAAAhgAAAAAMAH\n"
|
||||
"AG7u7u6AAAAI5gAAAAAAdwbu7u7ugAAACO5gAAxAAABu7u7u7oAAAAju5gAEzAAG7u7u7u6AAAAI\n"
|
||||
"7u5gAAwAbu7u7u7ugAAACO7u5gAABu7u7u7u7oAAAAju7u5gAG7u7u7u7u6AAAAI7u7u5gbu7u7u\n"
|
||||
"7u7ugAAACI7u7u7u7u7u7u7u6IAAAAiIiIiIiIiIiIiIiIiAAAAIiIiIiIiIiIiIiIiIgAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////g////wH///4AAH/8AAH/+AAD//AA\n"
|
||||
"AAHgAAABwAAAAYAAAAGAAAABgAAAAYAAAAGAAAAB4AAAAfAAAAH4AAAB+AAAAfgAAAH4AAAB+AAA\n"
|
||||
"AfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB//////////8oAAAAMAAAAGAAAAABAAgA\n"
|
||||
"AAAAAIAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAMDAwADA\n"
|
||||
"3MAA8MqmAAAgQAAAIGAAACCAAAAgoAAAIMAAACDgAABAAAAAQCAAAEBAAABAYAAAQIAAAECgAABA\n"
|
||||
"wAAAQOAAAGAAAABgIAAAYEAAAGBgAABggAAAYKAAAGDAAABg4AAAgAAAAIAgAACAQAAAgGAAAICA\n"
|
||||
"AACAoAAAgMAAAIDgAACgAAAAoCAAAKBAAACgYAAAoIAAAKCgAACgwAAAoOAAAMAAAADAIAAAwEAA\n"
|
||||
"AMBgAADAgAAAwKAAAMDAAADA4AAA4AAAAOAgAADgQAAA4GAAAOCAAADgoAAA4MAAAODgAEAAAABA\n"
|
||||
"ACAAQABAAEAAYABAAIAAQACgAEAAwABAAOAAQCAAAEAgIABAIEAAQCBgAEAggABAIKAAQCDAAEAg\n"
|
||||
"4ABAQAAAQEAgAEBAQABAQGAAQECAAEBAoABAQMAAQEDgAEBgAABAYCAAQGBAAEBgYABAYIAAQGCg\n"
|
||||
"AEBgwABAYOAAQIAAAECAIABAgEAAQIBgAECAgABAgKAAQIDAAECA4ABAoAAAQKAgAECgQABAoGAA\n"
|
||||
"QKCAAECgoABAoMAAQKDgAEDAAABAwCAAQMBAAEDAYABAwIAAQMCgAEDAwABAwOAAQOAAAEDgIABA\n"
|
||||
"4EAAQOBgAEDggABA4KAAQODAAEDg4ACAAAAAgAAgAIAAQACAAGAAgACAAIAAoACAAMAAgADgAIAg\n"
|
||||
"AACAICAAgCBAAIAgYACAIIAAgCCgAIAgwACAIOAAgEAAAIBAIACAQEAAgEBgAIBAgACAQKAAgEDA\n"
|
||||
"AIBA4ACAYAAAgGAgAIBgQACAYGAAgGCAAIBgoACAYMAAgGDgAICAAACAgCAAgIBAAICAYACAgIAA\n"
|
||||
"gICgAICAwACAgOAAgKAAAICgIACAoEAAgKBgAICggACAoKAAgKDAAICg4ACAwAAAgMAgAIDAQACA\n"
|
||||
"wGAAgMCAAIDAoACAwMAAgMDgAIDgAACA4CAAgOBAAIDgYACA4IAAgOCgAIDgwACA4OAAwAAAAMAA\n"
|
||||
"IADAAEAAwABgAMAAgADAAKAAwADAAMAA4ADAIAAAwCAgAMAgQADAIGAAwCCAAMAgoADAIMAAwCDg\n"
|
||||
"AMBAAADAQCAAwEBAAMBAYADAQIAAwECgAMBAwADAQOAAwGAAAMBgIADAYEAAwGBgAMBggADAYKAA\n"
|
||||
"wGDAAMBg4ADAgAAAwIAgAMCAQADAgGAAwICAAMCAoADAgMAAwIDgAMCgAADAoCAAwKBAAMCgYADA\n"
|
||||
"oIAAwKCgAMCgwADAoOAAwMAAAMDAIADAwEAAwMBgAMDAgADAwKAA8Pv/AKSgoACAgIAAAAD/AAD/\n"
|
||||
"AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAKQAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAApAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAAAAAAAApAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApAAAAAAACQAAAACkpKSkpKSkpKSk\n"
|
||||
"pKSkpAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkAAAAAAAJCQkAAACkpKSkpKSkpKSkpKQAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAKQAAAAAAAkJCQkJAAAAAKSkpKSkpKQAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAApAAAAAAACQkJCQkJCQAAAACkpKSkpKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkAAAA\n"
|
||||
"AAAJCQkJCQkJCQkAAAAApPf39/f39/f39/f39/f39/f39/cAAAAAAAAAAKQAAAAAAAkJCQkJCQkJ\n"
|
||||
"CQkJAAAAAKQHBwf3BwcH9/f39wcHB/f39/cAAAAAAAAApAAAAAAACQkJCQkJCQkJCQkAAAAAAACk\n"
|
||||
"9vb39vb29/r69/b29vf39/cAAAAAAACkAAAAAAAJCQkJCQkJCQkJCQAAAAAAAAAApPf39/f39/f3\n"
|
||||
"9/f39/f39/cAAAAAAKQAAAAAAAkJCQkJCQkJCQkJAAAAAAAAAAAAAKT39/f39/f39/f39/f39/cA\n"
|
||||
"AAAApAAAAAAACQkJCQkJCQkJCQkAAAAAAAAAAAAAAAD3/v7+/v7+/v7+/v739/cAAACkAAAAAAAJ\n"
|
||||
"CQkJCQkJCQkJCQAApAAApAAAAAAAAAAAB/7+/v7+/v7+/v7+9/cAAAAAAAAAAAkJCQkJCQkJCQkJ\n"
|
||||
"AACkAACkAAAAAAAAAAAAAAf+/v7+/v7+/v7+9/cAAAAAAAAACQkJCQkJCQkJCQkAAKQAAKQAAAAA\n"
|
||||
"AAAAAAAAAAAH/v7+/v7+/v7+9/cAAACkAAAAAAkJCQkJCQkJCQAApAAApAAAAKQAAAAAAAAAAAAA\n"
|
||||
"B/7+/v7+/v7+9/cAAAAApAAAAAAJCQkJCQkJAACkAACkAAAApACkAAAAAAAAAAAAAAf+/v7+/v7+\n"
|
||||
"9/cAAAAAAACkAAAACQkJCQkAAKQAAKQAAACkAKQAAAAAAAAAAAAAAAAH/v7+/v7+9/cAAAAAAAAA\n"
|
||||
"AAAAAAkJCQAAAAAApAAAAAAApAAAAAAAAADAAAAAAAAAB/7+/v7+9/cAAAAAAAAAAKQAAAAJAAAA\n"
|
||||
"AACkAAAKpKQAAAAAAAAAAMAAAAAAAAAAAP7+/v7+9/cAAAAAAAAAAAAAAAAAAAAAAKQAAACkAKSk\n"
|
||||
"AAAAAAAAwAAAAAAAAAAAB/7+/v7+9/cAAAAAAAAAAACkAAAAAAAAAAAAAACkpACkAAAAAADAAAAA\n"
|
||||
"AAAAAAAH/v7+/v7+9/cAAAAAAAAAAAD3pAAAAAAAAAAAAAAApKQKAAAAAMDAAAAAAAAAAAf+/v7+\n"
|
||||
"/v7+9/cAAAAAAAAAAAD39wcAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAB/7+/v7+/v7+9/cAAAAA\n"
|
||||
"AAAAAAD39/4HAAAAAAAAAAAAAAAAAADAAAAACqQAAAAH/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+\n"
|
||||
"BwAAAAAAAAAAAAAAAMDAAAAKpAoAAAf+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/gcAAAAAAAAA\n"
|
||||
"AAAAAAAAAAqkpAAAB/7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v4HAAAAAAAAAAAAAAAAAKQK\n"
|
||||
"AAAH/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+BwAAAAAAwADAAAAAAAAAAAf+/v7+/v7+\n"
|
||||
"/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/gcAAAAAAMDAwAAAAAAAB/7+/v7+/v7+/v7+/v7+9/cA\n"
|
||||
"AAAAAAAAAAD39/7+/v7+/v4HAAAAwAAAwAAAAAAH/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD3\n"
|
||||
"9/7+/v7+/v7+BwAAAAAAwAAAAAf+/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/v7+\n"
|
||||
"/gcAAAAAAAAAB/7+/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/v7+/v4HAAAAAAAH\n"
|
||||
"/v7+/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/v7+/v7+BwAAAAf+/v7+/v7+/v7+\n"
|
||||
"/v7+/v7+/v7+9/cAAAAAAAAAAAD39/7+/v7+/v7+/v7+/gcAB/7+/v7+/v7+/v7+/v7+/v7+/v7+\n"
|
||||
"9/cAAAAAAAAAAAD39/7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+9/cAAAAAAAAA\n"
|
||||
"AAD39/f+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v7+/v739/cAAAAAAAAAAAD3+/v79/f3\n"
|
||||
"9/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/cAAAAAAAAAAAD30NDQ9/f39/f39/f39/f3\n"
|
||||
"9/f39/f39/f39/f39/f396SkpKSk9/cAAAAAAAAAAAD3+ff59/f39/f39/f39/f39/f39/f39/f3\n"
|
||||
"9/f39/f39/f39/f39/cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////\n"
|
||||
"////AAD//h////8AAP/8D////wAA//gP////AAD/8Af///8AAP/gAAAP/wAA/8AAAD//AAD/gAAB\n"
|
||||
"//8AAP8AAAH//wAA/gAAAAADAAD8AAAAAAMAAPgAAAAAAwAA8AAAAAADAADgAAAAAAMAAMAAAAAA\n"
|
||||
"AwAAgAAAAAADAACAAAAAAAMAAIAAAAAAAwAAgAAAAAADAADAAAAAAAMAAPAAAAAAAwAA+AAAAAAD\n"
|
||||
"AAD8AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+AAAAAAMA\n"
|
||||
"AP4AAAAAAwAA/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA\n"
|
||||
"/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+AAAAAAMAAP4AAAAAAwAA/gAAAAADAAD+\n"
|
||||
"AAAAAAMAAP///////wAA////////AAD///////8AAA==\n"
|
||||
).decode("base64_codec"),
|
||||
"mc5b.ico": (
|
||||
"AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA\n"
|
||||
"/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAA\n"
|
||||
"AHAAYAAAAAAAAAAAAAAAAAcABmYAAAAAAAAAAAAAAKBwAGZmYABwAAAAAAAAAACqAAZmZmYABwAA\n"
|
||||
"AAAAAAAAqqBmZmZgAABwAAAAAAAAB6qqZmZmAAAABwAACqqqqqqiqqZmYAAAAABwAAqqqqqqoiqq\n"
|
||||
"ZgBwcAAABwAKoiIiIiIiqqAHBwAAAABwCqIiIiIiIiqqcHBwAAAABwqiIiIiIiIqqgcHBwAAAAAK\n"
|
||||
"oiIiIiIiqqBwcHAABAAACqqqqqqiKqoHB3cAAEAAAAqqqqqqoqqgAAB3AAwAAAcAAAAAAKqqAAAA\n"
|
||||
"AABAAABwAAAAAACqpwAAAAAMAHAHAAAAAAAAqgBwAAAAAAdwcAAAAAAAAKAABwAAxAAABwAAAAAA\n"
|
||||
"AAAAAABwAEzAAHAAAAAAAAAAAAAABwAAwAcAAAAAAAAAAAAAAABwAABwAAAAAAAAAAAAAAAABwAH\n"
|
||||
"AAAAAAAAAAAAAAAAAABwcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAD///////////////////////8H///+B////AP///gB///QAH//wAA//8AAH/+A\n"
|
||||
"AA+AAAAHgAAAA4AAAAGAAAAAgAAAAIAAAACAAAAAgAAAAP/AAAH/wAAD/8wAB//eAA///wAf//+A\n"
|
||||
"P///wH///+D////x/////////////////w==\n"
|
||||
).decode("base64_codec"),
|
||||
"mc2.ico": (
|
||||
"AAABAAEAMDAAAQAAAACoDgAAFgAAACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAwMDAAMDcwADwyqYAACBAAAAgYAAAIIAA\n"
|
||||
"ACCgAAAgwAAAIOAAAEAAAABAIAAAQEAAAEBgAABAgAAAQKAAAEDAAABA4AAAYAAAAGAgAABgQAAA\n"
|
||||
"YGAAAGCAAABgoAAAYMAAAGDgAACAAAAAgCAAAIBAAACAYAAAgIAAAICgAACAwAAAgOAAAKAAAACg\n"
|
||||
"IAAAoEAAAKBgAACggAAAoKAAAKDAAACg4AAAwAAAAMAgAADAQAAAwGAAAMCAAADAoAAAwMAAAMDg\n"
|
||||
"AADgAAAA4CAAAOBAAADgYAAA4IAAAOCgAADgwAAA4OAAQAAAAEAAIABAAEAAQABgAEAAgABAAKAA\n"
|
||||
"QADAAEAA4ABAIAAAQCAgAEAgQABAIGAAQCCAAEAgoABAIMAAQCDgAEBAAABAQCAAQEBAAEBAYABA\n"
|
||||
"QIAAQECgAEBAwABAQOAAQGAAAEBgIABAYEAAQGBgAEBggABAYKAAQGDAAEBg4ABAgAAAQIAgAECA\n"
|
||||
"QABAgGAAQICAAECAoABAgMAAQIDgAECgAABAoCAAQKBAAECgYABAoIAAQKCgAECgwABAoOAAQMAA\n"
|
||||
"AEDAIABAwEAAQMBgAEDAgABAwKAAQMDAAEDA4ABA4AAAQOAgAEDgQABA4GAAQOCAAEDgoABA4MAA\n"
|
||||
"QODgAIAAAACAACAAgABAAIAAYACAAIAAgACgAIAAwACAAOAAgCAAAIAgIACAIEAAgCBgAIAggACA\n"
|
||||
"IKAAgCDAAIAg4ACAQAAAgEAgAIBAQACAQGAAgECAAIBAoACAQMAAgEDgAIBgAACAYCAAgGBAAIBg\n"
|
||||
"YACAYIAAgGCgAIBgwACAYOAAgIAAAICAIACAgEAAgIBgAICAgACAgKAAgIDAAICA4ACAoAAAgKAg\n"
|
||||
"AICgQACAoGAAgKCAAICgoACAoMAAgKDgAIDAAACAwCAAgMBAAIDAYACAwIAAgMCgAIDAwACAwOAA\n"
|
||||
"gOAAAIDgIACA4EAAgOBgAIDggACA4KAAgODAAIDg4ADAAAAAwAAgAMAAQADAAGAAwACAAMAAoADA\n"
|
||||
"AMAAwADgAMAgAADAICAAwCBAAMAgYADAIIAAwCCgAMAgwADAIOAAwEAAAMBAIADAQEAAwEBgAMBA\n"
|
||||
"gADAQKAAwEDAAMBA4ADAYAAAwGAgAMBgQADAYGAAwGCAAMBgoADAYMAAwGDgAMCAAADAgCAAwIBA\n"
|
||||
"AMCAYADAgIAAwICgAMCAwADAgOAAwKAAAMCgIADAoEAAwKBgAMCggADAoKAAwKDAAMCg4ADAwAAA\n"
|
||||
"wMAgAMDAQADAwGAAwMCAAMDAoADw+/8ApKCgAICAgAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD/\n"
|
||||
"//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAKQAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkpKSkpKSkpAAAAACkpKSkpKSkpKSkpKSkpKSkpKSkpKSk\n"
|
||||
"pKQAAAAAAAAAAAAAAKSkpKSkpKQAAAAAAAAApKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkAAAAAAAA\n"
|
||||
"AAAAAKSkpKSkpAcAAAAAAAAAB6SkpKSkpKSkpKSkpKSkpKSkpKSkpKSkAAAAAAAAAAAAAKSkpKSk\n"
|
||||
"BwAAAAAACQAAAACkpKSkpKSkpKSkpKSkpKSkpKQAAACkAAAAAAAAAAAAAKSkpKQHAAAAAAAJCQkA\n"
|
||||
"AAAHpKSkpKSkpKSkpKSkpKSkpKQAAACkAAAAAAAAAAAAAKSkpAcAAAAAAAkJCQkJAAAAAAekpKSk\n"
|
||||
"pKSkpKSkpKSkpKQAAACkAAAAAAAAAAAAAKSkBwAAAAAACQkJCQkJCQAAAAAHpKSkpKSkpKSkpKSk\n"
|
||||
"pKSkpKSkAAAAAAAAAAAAAKQAAAAAAAAJCQkJCQkJCQkAAAAAB6SkpKSkpKSkpKSkpKSkpKSkAAAA\n"
|
||||
"AAAAAAAAAKQAAAAAAAkJCQkJCQkJCQkJAAAAAAekpKSkpKSkpKSkpKSkpKSkAAAAAAAAAAAApAAA\n"
|
||||
"AAAACQkJCQkJCQkJCQkAAAAAAAAHpKSkpKSkpKSkpKSkpKSkAAAAAAAAAACkAAAAAAAJCQkJCQkJ\n"
|
||||
"CQkJCQAAAAAAAAAAB6SkpKSkpKSkpKSkpKSkAAAAAAAAAKQAAAAAAAkJCQkJCQkJCQkJAAAAAAAA\n"
|
||||
"AAAAAAekpKSkpKSkpKSkpKSkAAAAAAAApAAAAAAACQkJCQkJCQkJCQkAAAAAAAAAAAAAAAAHpKSk\n"
|
||||
"pKSkpKSkpKSkAAAAAACkAAAAAAAJCQkJCQkJCQkJCQAApAAApAAAAAAAAAAAB6SkpKSkpKSkpKSk\n"
|
||||
"AAAAAAAAAAAAAAkJCQkJCQkJCQkJAACkAACkAAAAAAAAAAAAAAekpKSkpKSkpKSkAAAAAAAAAAAA\n"
|
||||
"CQkJCQkJCQkJCQkAAKQAAKQAAAAAAAAAAAAAAAAHpKSkpKSkpKSkAAAAAACkAAAAAAkJCQkJCQkJ\n"
|
||||
"CQAApAAApAAAAKQAAAAAAAAAAAAAB6SkpKSkpKSkAAAAAAAApAAAAAAJCQkJCQkJAACkAACkAAAA\n"
|
||||
"pACkAAAAAAAAAAAAAAekpKSkpKSkAAAAAAAAAACkAAAACQkJCQkAAKQAAKQAAACkAKQAAAAAAAAA\n"
|
||||
"AAAAAAAHpKSkpKSkAAAAAAAAAAAAAAAAAAkJCQAAAAAApAAAAAAApAAAAAAAAADAAAAAAAAAB6Sk\n"
|
||||
"pKSkAAAAAAAAAAAAAAAAAAAJAAAAAACkAAAKpKQAAAAAAAAAAMAAAAAAAAAAAKSkpKSkAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAKQAAACkAKSkAAAAAAAAwAAAAAAAAAAAB6SkpKSkAAAAAAAAAAAAAKQAAAAA\n"
|
||||
"AAAAAAAAAACkpACkAAAAAADAAAAAAAAAAAAHpKSkpKSkAAAAAAAAAAAAAKSkBwAAAAAAAAAAAAAA\n"
|
||||
"pKQKAAAAAMDAAAAAAAAAAAekpKSkpKSkAAAAAAAAAAAAAKSkpAcAAAAAAAAAAAAAAAAAAAAAwAAA\n"
|
||||
"AAAAAAAAB6SkpKSkpKSkAAAAAAAAAAAAAKSkpKQHAAAAAAAAAAAAAAAAAADAAAAACqQAAAAHpKSk\n"
|
||||
"pKSkpKSkAAAAAAAAAAAAAKSkpKSkBwAAAAAAAAAAAAAAAMDAAAAKpAoAAAekpKSkpKSkpKSkAAAA\n"
|
||||
"AAAAAAAAAKSkpKSkpAcAAAAAAAAAAAAAAAAAAAqkpAAAB6SkpKSkpKSkpKSkAAAAAAAAAAAAAKSk\n"
|
||||
"pKSkpKQHAAAAAAAAAAAAAAAAAKQKAAD3pKSkpKSkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9wAA\n"
|
||||
"AAAAwADAAAAAAAAAAPf39/f396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/cAAAAAAMDAwAAA\n"
|
||||
"AAAAB6SkpPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f3AAAAwAAAwAAAAACkpKSkpPf3\n"
|
||||
"96SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f39wAAAAAAwAAAAPekpKSkpPf396SkpKSkpKSk\n"
|
||||
"AAAAAAAAAAAAAKSkpKSkpKSk9/f39/cAAAAAAAAA9/ekpKSkpPf396SkpKSkpKSkAAAAAAAAAAAA\n"
|
||||
"AKSkpKSkpKSk9/f39/f3AAAAAAD39/ekpKSkpPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk\n"
|
||||
"9/f39/f39wAAAPf39/ekpKSkpPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f39/f39/cA\n"
|
||||
"9/f39/ekpKSkpPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f39/f39/f39/f39/ekpKSk\n"
|
||||
"pPf396SkpKSkpKSkAAAAAAAAAAAAAKSkpKSkpKSk9/f39/f39/f39/f39/ekpKSkpPf396SkpKSk\n"
|
||||
"pKQAAAAAAAAAAAAAAKSkpKSkpKSk9/f39/f39/f39/f39/ekpKSkpPf396SkpKSkpAAA9gAAAAAA\n"
|
||||
"AAAAAACkpKSkpKSk9/f39/f39/f39/f39/f39/f39/f396SkpKSkAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////\n"
|
||||
"AAD//w////8AAP8AAAAADwAA/gAAAAAHAAD+AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAAcA\n"
|
||||
"AP4AAAAABwAA/gAAAAAHAAD+AAAAAAcAAPwAAAAABwAA+AAAAAAHAADwAAAAAAcAAOAAAAAABwAA\n"
|
||||
"wAAAAAAHAADAAAAAAAcAAMAAAAAABwAAwAAAAAAHAADgAAAAAAcAAPgAAAAABwAA/AAAAAAHAAD+\n"
|
||||
"AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAAcAAP4A\n"
|
||||
"AAAABwAA/gAAAAAHAAD+AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAAcAAP4AAAAABwAA/gAA\n"
|
||||
"AAAHAAD+AAAAAAcAAP4AAAAABwAA/gAAAAAHAAD+AAAAAA8AAP4AAAAAGwAA/wAAAAA/AAD/////\n"
|
||||
"//sAAP///////wAA\n"
|
||||
).decode("base64_codec"),
|
||||
"mc6a.ico": (
|
||||
"AAABAAEAICAQAAAAAADoAgAAFgAAACgAAAAgAAAAQAAAAAEABAAAAAAAgAIAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD//wD/AAAA\n"
|
||||
"/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAcABg\n"
|
||||
"AAAAAAAAAAAAAAAABwAGZgAAAAAAAAAAAAAAAHAAZmZgAHAAAACgAAAAAAcABmZmZgAHAAAAqgAA\n"
|
||||
"AABwAGZmZmAAAHAAAKqgAAAHAAZmZmYAAAAHAACqqgAAcABmZmZgAAqqqqqqoqqgAAAGZmZmAHB6\n"
|
||||
"qqqqqqIqqgAAZmZmYAcHCqIiIiIiIqqgAAZmZgBwcHqiIiIiIiIqqnAAZmAHBwcKoiIiIiIiKqoA\n"
|
||||
"AAYAAHBweqIiIiIiIqqgAAAAAAcHdwqqqqqqoiqqAAAAAAAAAHcKqqqqqqKqoAAAAHAAAAAAAEAA\n"
|
||||
"AHCqqgAAAAAHAAAAAAwAcAcAqqAAAAAAAHAAAAAAB3BwAKoAAAAAAAAHAADEAAAHAACgAAAAAAAA\n"
|
||||
"AHAATMAAcAAAAAAAAAAAAAAHAADABwAAAAAAAAAAAAAAAHAAAHAAAAAAAAAAAAAAAAAHAAcAAAAA\n"
|
||||
"AAAAAAAAAAAAAHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n"
|
||||
"AAAAAAAAAAAAAAD//////////////////////wf///4H///8A///+AH///AAf3/gAD8/wAAfH4AA\n"
|
||||
"Dw8AAAAHAAAAAwAAAAEAAAAAAAAAAMAAAAHgAAAD8AAAB/AAAQ/4AAMf/AAHP/4AD3//AB///4A/\n"
|
||||
"///Af///4P////H//////////////////w==\n"
|
||||
).decode("base64_codec"),
|
||||
}
|
||||
|
268
ps2mc_dir.py
268
ps2mc_dir.py
@ -1,134 +1,134 @@
|
||||
#
|
||||
# ps2mc_dir.py
|
||||
#
|
||||
# By Ross Ridge
|
||||
# Public Domain
|
||||
#
|
||||
|
||||
"""Functions for working with PS2 memory card directory entries."""
|
||||
|
||||
_SCCS_ID = "@(#) mysc ps2mc_dir.py 1.4 12/10/04 19:11:08\n"
|
||||
|
||||
import struct
|
||||
import time
|
||||
import calendar
|
||||
|
||||
PS2MC_DIRENT_LENGTH = 512
|
||||
|
||||
DF_READ = 0x0001
|
||||
DF_WRITE = 0x0002
|
||||
DF_EXECUTE = 0x0004
|
||||
DF_RWX = DF_READ | DF_WRITE | DF_EXECUTE
|
||||
DF_PROTECTED = 0x0008
|
||||
DF_FILE = 0x0010
|
||||
DF_DIR = 0x0020
|
||||
DF_O_DCREAT = 0x0040
|
||||
DF_0080 = 0x0080
|
||||
DF_0100 = 0x0100
|
||||
DF_O_CREAT = 0x0200
|
||||
DF_0400 = 0x0400
|
||||
DF_POCKETSTN = 0x0800
|
||||
DF_PSX = 0x1000
|
||||
DF_HIDDEN = 0x2000
|
||||
DF_4000 = 0x4000
|
||||
DF_EXISTS = 0x8000
|
||||
|
||||
def zero_terminate(s):
|
||||
"""Truncate a string at the first NUL ('\0') character, if any."""
|
||||
|
||||
i = s.find('\0')
|
||||
if i == -1:
|
||||
return s
|
||||
return s[:i]
|
||||
|
||||
# mode, ???, length, created,
|
||||
# fat_cluster, parent_entry, modified, attr,
|
||||
# name
|
||||
_dirent_fmt = "<HHL8sLL8sL28x448s"
|
||||
|
||||
# secs, mins, hours, mday, month, year
|
||||
_tod_fmt = "<xBBBBBH"
|
||||
|
||||
#
|
||||
# Use the new Struct object if available
|
||||
#
|
||||
if hasattr(struct, "Struct"):
|
||||
_dirent_struct = struct.Struct(_dirent_fmt)
|
||||
_tod_struct = struct.Struct(_tod_fmt)
|
||||
|
||||
def unpack_tod(s):
|
||||
return _tod_struct.unpack(s)
|
||||
|
||||
def pack_tod(tod):
|
||||
return _tod_struct.pack(tod)
|
||||
|
||||
def unpack_dirent(s):
|
||||
ent = _dirent_struct.unpack(s)
|
||||
ent = list(ent)
|
||||
ent[3] = _tod_struct.unpack(ent[3])
|
||||
ent[6] = _tod_struct.unpack(ent[6])
|
||||
ent[8] = zero_terminate(ent[8])
|
||||
return ent
|
||||
|
||||
def pack_dirent(ent):
|
||||
ent = list(ent)
|
||||
ent[3] = _tod_struct.pack(*ent[3])
|
||||
ent[6] = _tod_struct.pack(*ent[6])
|
||||
return _dirent_struct.pack(*ent)
|
||||
else:
|
||||
def unpack_tod(s):
|
||||
return struct.unpack(_tod_fmt, s)
|
||||
|
||||
def pack_tod(tod):
|
||||
return struct.pack(_tod_fmt, tod)
|
||||
|
||||
def unpack_dirent(s):
|
||||
# mode, ???, length, created,
|
||||
# fat_cluster, parent_entry, modified, attr,
|
||||
# name
|
||||
ent = struct.unpack(_dirent_fmt, s)
|
||||
ent = list(ent)
|
||||
ent[3] = struct.unpack(_tod_fmt, ent[3])
|
||||
ent[6] = struct.unpack(_tod_fmt, ent[6])
|
||||
ent[8] = zero_terminate(ent[8])
|
||||
return ent
|
||||
|
||||
def pack_dirent(ent):
|
||||
ent = list(ent)
|
||||
ent[3] = struct.pack(_tod_fmt, *ent[3])
|
||||
ent[6] = struct.pack(_tod_fmt, *ent[6])
|
||||
return struct.pack(_dirent_fmt, *ent)
|
||||
|
||||
def time_to_tod(when):
|
||||
"""Convert a Python time value to a ToD tuple"""
|
||||
|
||||
tm = time.gmtime(when + 9 * 3600)
|
||||
return (tm.tm_sec, tm.tm_min, tm.tm_hour,
|
||||
tm.tm_mday, tm.tm_mon, tm.tm_year)
|
||||
|
||||
def tod_to_time(tod):
|
||||
"""Convert a ToD tuple to a Python time value."""
|
||||
|
||||
try:
|
||||
month = tod[4]
|
||||
if month == 0:
|
||||
month = 1
|
||||
return calendar.timegm((tod[5], month, tod[3],
|
||||
tod[2], tod[1], tod[0],
|
||||
None, None, 0)) - 9 * 3600
|
||||
except ValueError:
|
||||
return 0
|
||||
|
||||
def tod_now():
|
||||
"""Get the current time as a ToD tuple."""
|
||||
return time_to_tod(time.time())
|
||||
|
||||
def tod_from_file(filename):
|
||||
return time_to_tod(os.stat(filename).st_mtime)
|
||||
|
||||
def mode_is_file(mode):
|
||||
return (mode & (DF_FILE | DF_DIR | DF_EXISTS)) == (DF_FILE | DF_EXISTS)
|
||||
|
||||
def mode_is_dir(mode):
|
||||
return (mode & (DF_FILE | DF_DIR | DF_EXISTS)) == (DF_DIR | DF_EXISTS)
|
||||
|
||||
#
|
||||
# ps2mc_dir.py
|
||||
#
|
||||
# By Ross Ridge
|
||||
# Public Domain
|
||||
#
|
||||
|
||||
"""Functions for working with PS2 memory card directory entries."""
|
||||
|
||||
_SCCS_ID = "@(#) mymc ps2mc_dir.py 1.4 12/10/04 19:11:08\n"
|
||||
|
||||
import struct
|
||||
import time
|
||||
import calendar
|
||||
|
||||
PS2MC_DIRENT_LENGTH = 512
|
||||
|
||||
DF_READ = 0x0001
|
||||
DF_WRITE = 0x0002
|
||||
DF_EXECUTE = 0x0004
|
||||
DF_RWX = DF_READ | DF_WRITE | DF_EXECUTE
|
||||
DF_PROTECTED = 0x0008
|
||||
DF_FILE = 0x0010
|
||||
DF_DIR = 0x0020
|
||||
DF_O_DCREAT = 0x0040
|
||||
DF_0080 = 0x0080
|
||||
DF_0100 = 0x0100
|
||||
DF_O_CREAT = 0x0200
|
||||
DF_0400 = 0x0400
|
||||
DF_POCKETSTN = 0x0800
|
||||
DF_PSX = 0x1000
|
||||
DF_HIDDEN = 0x2000
|
||||
DF_4000 = 0x4000
|
||||
DF_EXISTS = 0x8000
|
||||
|
||||
def zero_terminate(s):
|
||||
"""Truncate a string at the first NUL ('\0') character, if any."""
|
||||
|
||||
i = s.find('\0')
|
||||
if i == -1:
|
||||
return s
|
||||
return s[:i]
|
||||
|
||||
# mode, ???, length, created,
|
||||
# fat_cluster, parent_entry, modified, attr,
|
||||
# name
|
||||
_dirent_fmt = "<HHL8sLL8sL28x448s"
|
||||
|
||||
# secs, mins, hours, mday, month, year
|
||||
_tod_fmt = "<xBBBBBH"
|
||||
|
||||
#
|
||||
# Use the new Struct object if available
|
||||
#
|
||||
if hasattr(struct, "Struct"):
|
||||
_dirent_struct = struct.Struct(_dirent_fmt)
|
||||
_tod_struct = struct.Struct(_tod_fmt)
|
||||
|
||||
def unpack_tod(s):
|
||||
return _tod_struct.unpack(s)
|
||||
|
||||
def pack_tod(tod):
|
||||
return _tod_struct.pack(tod)
|
||||
|
||||
def unpack_dirent(s):
|
||||
ent = _dirent_struct.unpack(s)
|
||||
ent = list(ent)
|
||||
ent[3] = _tod_struct.unpack(ent[3])
|
||||
ent[6] = _tod_struct.unpack(ent[6])
|
||||
ent[8] = zero_terminate(ent[8])
|
||||
return ent
|
||||
|
||||
def pack_dirent(ent):
|
||||
ent = list(ent)
|
||||
ent[3] = _tod_struct.pack(*ent[3])
|
||||
ent[6] = _tod_struct.pack(*ent[6])
|
||||
return _dirent_struct.pack(*ent)
|
||||
else:
|
||||
def unpack_tod(s):
|
||||
return struct.unpack(_tod_fmt, s)
|
||||
|
||||
def pack_tod(tod):
|
||||
return struct.pack(_tod_fmt, tod)
|
||||
|
||||
def unpack_dirent(s):
|
||||
# mode, ???, length, created,
|
||||
# fat_cluster, parent_entry, modified, attr,
|
||||
# name
|
||||
ent = struct.unpack(_dirent_fmt, s)
|
||||
ent = list(ent)
|
||||
ent[3] = struct.unpack(_tod_fmt, ent[3])
|
||||
ent[6] = struct.unpack(_tod_fmt, ent[6])
|
||||
ent[8] = zero_terminate(ent[8])
|
||||
return ent
|
||||
|
||||
def pack_dirent(ent):
|
||||
ent = list(ent)
|
||||
ent[3] = struct.pack(_tod_fmt, *ent[3])
|
||||
ent[6] = struct.pack(_tod_fmt, *ent[6])
|
||||
return struct.pack(_dirent_fmt, *ent)
|
||||
|
||||
def time_to_tod(when):
|
||||
"""Convert a Python time value to a ToD tuple"""
|
||||
|
||||
tm = time.gmtime(when + 9 * 3600)
|
||||
return (tm.tm_sec, tm.tm_min, tm.tm_hour,
|
||||
tm.tm_mday, tm.tm_mon, tm.tm_year)
|
||||
|
||||
def tod_to_time(tod):
|
||||
"""Convert a ToD tuple to a Python time value."""
|
||||
|
||||
try:
|
||||
month = tod[4]
|
||||
if month == 0:
|
||||
month = 1
|
||||
return calendar.timegm((tod[5], month, tod[3],
|
||||
tod[2], tod[1], tod[0],
|
||||
None, None, 0)) - 9 * 3600
|
||||
except ValueError:
|
||||
return 0
|
||||
|
||||
def tod_now():
|
||||
"""Get the current time as a ToD tuple."""
|
||||
return time_to_tod(time.time())
|
||||
|
||||
def tod_from_file(filename):
|
||||
return time_to_tod(os.stat(filename).st_mtime)
|
||||
|
||||
def mode_is_file(mode):
|
||||
return (mode & (DF_FILE | DF_DIR | DF_EXISTS)) == (DF_FILE | DF_EXISTS)
|
||||
|
||||
def mode_is_dir(mode):
|
||||
return (mode & (DF_FILE | DF_DIR | DF_EXISTS)) == (DF_DIR | DF_EXISTS)
|
||||
|
||||
|
364
ps2mc_ecc.py
364
ps2mc_ecc.py
@ -1,182 +1,182 @@
|
||||
#
|
||||
# ps2mc_ecc.py
|
||||
#
|
||||
# By Ross Ridge
|
||||
# Public Domain
|
||||
#
|
||||
|
||||
"""
|
||||
Routines for calculating the Hamming codes, a simple form of error
|
||||
correcting codes (ECC), as used on PS2 memory cards.
|
||||
"""
|
||||
|
||||
_SCCS_ID = "@(#) mysc ps2mc_ecc.py 1.4 07/12/17 02:34:04\n"
|
||||
|
||||
import array
|
||||
|
||||
from round import div_round_up
|
||||
|
||||
try:
|
||||
import ctypes
|
||||
import mymcsup
|
||||
except ImportError:
|
||||
mymcsup = None
|
||||
|
||||
__ALL__ = ["ECC_CHECK_OK", "ECC_CHECK_CORRECTED", "ECC_CHECK_FAILED",
|
||||
"ecc_calculate", "ecc_check",
|
||||
"ecc_calculate_page", "ecc_check_page"]
|
||||
|
||||
ECC_CHECK_OK = 0
|
||||
ECC_CHECK_CORRECTED = 1
|
||||
ECC_CHECK_FAILED = 2
|
||||
|
||||
def _popcount(a):
|
||||
count = 0
|
||||
while a != 0:
|
||||
a &= a - 1
|
||||
count += 1
|
||||
return count
|
||||
|
||||
def _parityb(a):
|
||||
a = (a ^ (a >> 1))
|
||||
a = (a ^ (a >> 2))
|
||||
a = (a ^ (a >> 4))
|
||||
return a & 1
|
||||
|
||||
def _make_ecc_tables():
|
||||
parity_table = [_parityb(b)
|
||||
for b in range(256)]
|
||||
cpmasks = [0x55, 0x33, 0x0F, 0x00, 0xAA, 0xCC, 0xF0]
|
||||
|
||||
column_parity_masks = [None] * 256
|
||||
for b in range(256):
|
||||
mask = 0
|
||||
for i in range(len(cpmasks)):
|
||||
mask |= parity_table[b & cpmasks[i]] << i
|
||||
column_parity_masks[b] = mask
|
||||
|
||||
return parity_table, column_parity_masks
|
||||
|
||||
_parity_table, _column_parity_masks = _make_ecc_tables()
|
||||
|
||||
def _ecc_calculate(s):
|
||||
"Calculate the Hamming code for a 128 byte long string or byte array."
|
||||
|
||||
if not isinstance(s, array.array):
|
||||
a = array.array('B')
|
||||
a.fromstring(s)
|
||||
s = a
|
||||
column_parity = 0x77
|
||||
line_parity_0 = 0x7F
|
||||
line_parity_1 = 0x7F
|
||||
for i in range(len(s)):
|
||||
b = s[i]
|
||||
column_parity ^= _column_parity_masks[b]
|
||||
if _parity_table[b]:
|
||||
line_parity_0 ^= ~i
|
||||
line_parity_1 ^= i
|
||||
return [column_parity, line_parity_0 & 0x7F, line_parity_1]
|
||||
|
||||
def _ecc_check(s, ecc):
|
||||
"""Detect and correct any single bit errors.
|
||||
|
||||
The parameters "s" and "ecc", the data and expected Hamming code
|
||||
repectively, must be modifiable sequences of integers and are
|
||||
updated with the corrected values if necessary."""
|
||||
|
||||
computed = ecc_calculate(s)
|
||||
if computed == ecc:
|
||||
return ECC_CHECK_OK
|
||||
|
||||
#print
|
||||
#_print_bin(0, s.tostring())
|
||||
#print "computed %02x %02x %02x" % tuple(computed)
|
||||
#print "actual %02x %02x %02x" % tuple(ecc)
|
||||
|
||||
# ECC mismatch
|
||||
|
||||
cp_diff = (computed[0] ^ ecc[0]) & 0x77
|
||||
lp0_diff = (computed[1] ^ ecc[1]) & 0x7F
|
||||
lp1_diff = (computed[2] ^ ecc[2]) & 0x7F
|
||||
lp_comp = lp0_diff ^ lp1_diff
|
||||
cp_comp = (cp_diff >> 4) ^ (cp_diff & 0x07)
|
||||
|
||||
#print "%02x %02x %02x %02x %02x" % (cp_diff, lp0_diff, lp1_diff,
|
||||
# lp_comp, cp_comp)
|
||||
|
||||
if lp_comp == 0x7F and cp_comp == 0x07:
|
||||
print "corrected 1"
|
||||
# correctable 1 bit error in data
|
||||
s[lp1_diff] ^= 1 << (cp_diff >> 4)
|
||||
return ECC_CHECK_CORRECTED
|
||||
if ((cp_diff == 0 and lp0_diff == 0 and lp1_diff == 0)
|
||||
or _popcount(lp_comp) + _popcount(cp_comp) == 1):
|
||||
print "corrected 2"
|
||||
# correctable 1 bit error in ECC
|
||||
# (and/or one of the unused bits was set)
|
||||
ecc[0] = computed[0]
|
||||
ecc[1] = computed[1]
|
||||
ecc[2] = computed[2]
|
||||
return ECC_CHECK_CORRECTED
|
||||
|
||||
# uncorrectable error
|
||||
return ECC_CHECK_FAILED
|
||||
|
||||
def ecc_calculate_page(page):
|
||||
"""Return a list of the ECC codes for a PS2 memory card page."""
|
||||
return [ecc_calculate(page[i * 128 : i * 128 + 128])
|
||||
for i in range(div_round_up(len(page), 128))]
|
||||
|
||||
def ecc_check_page(page, spare):
|
||||
"Check and correct any single bit errors in a PS2 memory card page."
|
||||
|
||||
failed = False
|
||||
corrected = False
|
||||
|
||||
#chunks = [(array.array('B', page[i * 128 : i * 128 + 128]),
|
||||
# map(ord, spare[i * 3 : i * 3 + 3]))
|
||||
# for i in range(div_round_up(len(page), 128))]
|
||||
|
||||
chunks = []
|
||||
for i in range(div_round_up(len(page), 128)):
|
||||
a = array.array('B')
|
||||
a.fromstring(page[i * 128 : i * 128 + 128])
|
||||
chunks.append((a, map(ord, spare[i * 3 : i * 3 + 3])))
|
||||
|
||||
r = [ecc_check(s, ecc)
|
||||
for (s, ecc) in chunks]
|
||||
ret = ECC_CHECK_OK
|
||||
if ECC_CHECK_CORRECTED in r:
|
||||
# rebuild sector and spare from the corrected versions
|
||||
page = "".join([a[0].tostring()
|
||||
for a in chunks])
|
||||
spare = "".join([chr(a[1][i])
|
||||
for a in chunks
|
||||
for i in range(3)])
|
||||
ret = ECC_CHECK_CORRECTED
|
||||
if ECC_CHECK_FAILED in r:
|
||||
ret = ECC_CHECK_FAILED
|
||||
return (ret, page, spare)
|
||||
|
||||
if mymcsup == None:
|
||||
ecc_calculate = _ecc_calculate
|
||||
ecc_check = _ecc_check
|
||||
else:
|
||||
# _c_ubyte_p = ctypes.POINTER(ctypes.c_ubyte)
|
||||
def ecc_calculate(s):
|
||||
aecc = array.array('B', "\0\0\0")
|
||||
cecc = ctypes.c_ubyte.from_address(aecc.buffer_info()[0])
|
||||
mymcsup.ecc_calculate(s, len(s), cecc)
|
||||
return list(aecc)
|
||||
|
||||
def ecc_check(s, ecc):
|
||||
cs = ctypes.c_ubyte.from_address(s.buffer_info()[0])
|
||||
# print "%08X" % s.buffer_info()[0]
|
||||
aecc = array.array('B', ecc)
|
||||
cecc = ctypes.c_ubyte.from_address(aecc.buffer_info()[0])
|
||||
ret = mymcsup.ecc_check(cs, len(s), cecc)
|
||||
ecc[0] = aecc[0]
|
||||
ecc[1] = aecc[1]
|
||||
ecc[2] = aecc[2]
|
||||
return ret
|
||||
|
||||
#
|
||||
# ps2mc_ecc.py
|
||||
#
|
||||
# By Ross Ridge
|
||||
# Public Domain
|
||||
#
|
||||
|
||||
"""
|
||||
Routines for calculating the Hamming codes, a simple form of error
|
||||
correcting codes (ECC), as used on PS2 memory cards.
|
||||
"""
|
||||
|
||||
_SCCS_ID = "@(#) mymc ps2mc_ecc.py 1.4 07/12/17 02:34:04\n"
|
||||
|
||||
import array
|
||||
|
||||
from round import div_round_up
|
||||
|
||||
try:
|
||||
import ctypes
|
||||
import mymcsup
|
||||
except ImportError:
|
||||
mymcsup = None
|
||||
|
||||
__ALL__ = ["ECC_CHECK_OK", "ECC_CHECK_CORRECTED", "ECC_CHECK_FAILED",
|
||||
"ecc_calculate", "ecc_check",
|
||||
"ecc_calculate_page", "ecc_check_page"]
|
||||
|
||||
ECC_CHECK_OK = 0
|
||||
ECC_CHECK_CORRECTED = 1
|
||||
ECC_CHECK_FAILED = 2
|
||||
|
||||
def _popcount(a):
|
||||
count = 0
|
||||
while a != 0:
|
||||
a &= a - 1
|
||||
count += 1
|
||||
return count
|
||||
|
||||
def _parityb(a):
|
||||
a = (a ^ (a >> 1))
|
||||
a = (a ^ (a >> 2))
|
||||
a = (a ^ (a >> 4))
|
||||
return a & 1
|
||||
|
||||
def _make_ecc_tables():
|
||||
parity_table = [_parityb(b)
|
||||
for b in range(256)]
|
||||
cpmasks = [0x55, 0x33, 0x0F, 0x00, 0xAA, 0xCC, 0xF0]
|
||||
|
||||
column_parity_masks = [None] * 256
|
||||
for b in range(256):
|
||||
mask = 0
|
||||
for i in range(len(cpmasks)):
|
||||
mask |= parity_table[b & cpmasks[i]] << i
|
||||
column_parity_masks[b] = mask
|
||||
|
||||
return parity_table, column_parity_masks
|
||||
|
||||
_parity_table, _column_parity_masks = _make_ecc_tables()
|
||||
|
||||
def _ecc_calculate(s):
|
||||
"Calculate the Hamming code for a 128 byte long string or byte array."
|
||||
|
||||
if not isinstance(s, array.array):
|
||||
a = array.array('B')
|
||||
a.fromstring(s)
|
||||
s = a
|
||||
column_parity = 0x77
|
||||
line_parity_0 = 0x7F
|
||||
line_parity_1 = 0x7F
|
||||
for i in range(len(s)):
|
||||
b = s[i]
|
||||
column_parity ^= _column_parity_masks[b]
|
||||
if _parity_table[b]:
|
||||
line_parity_0 ^= ~i
|
||||
line_parity_1 ^= i
|
||||
return [column_parity, line_parity_0 & 0x7F, line_parity_1]
|
||||
|
||||
def _ecc_check(s, ecc):
|
||||
"""Detect and correct any single bit errors.
|
||||
|
||||
The parameters "s" and "ecc", the data and expected Hamming code
|
||||
repectively, must be modifiable sequences of integers and are
|
||||
updated with the corrected values if necessary."""
|
||||
|
||||
computed = ecc_calculate(s)
|
||||
if computed == ecc:
|
||||
return ECC_CHECK_OK
|
||||
|
||||
#print
|
||||
#_print_bin(0, s.tostring())
|
||||
#print "computed %02x %02x %02x" % tuple(computed)
|
||||
#print "actual %02x %02x %02x" % tuple(ecc)
|
||||
|
||||
# ECC mismatch
|
||||
|
||||
cp_diff = (computed[0] ^ ecc[0]) & 0x77
|
||||
lp0_diff = (computed[1] ^ ecc[1]) & 0x7F
|
||||
lp1_diff = (computed[2] ^ ecc[2]) & 0x7F
|
||||
lp_comp = lp0_diff ^ lp1_diff
|
||||
cp_comp = (cp_diff >> 4) ^ (cp_diff & 0x07)
|
||||
|
||||
#print "%02x %02x %02x %02x %02x" % (cp_diff, lp0_diff, lp1_diff,
|
||||
# lp_comp, cp_comp)
|
||||
|
||||
if lp_comp == 0x7F and cp_comp == 0x07:
|
||||
print "corrected 1"
|
||||
# correctable 1 bit error in data
|
||||
s[lp1_diff] ^= 1 << (cp_diff >> 4)
|
||||
return ECC_CHECK_CORRECTED
|
||||
if ((cp_diff == 0 and lp0_diff == 0 and lp1_diff == 0)
|
||||
or _popcount(lp_comp) + _popcount(cp_comp) == 1):
|
||||
print "corrected 2"
|
||||
# correctable 1 bit error in ECC
|
||||
# (and/or one of the unused bits was set)
|
||||
ecc[0] = computed[0]
|
||||
ecc[1] = computed[1]
|
||||
ecc[2] = computed[2]
|
||||
return ECC_CHECK_CORRECTED
|
||||
|
||||
# uncorrectable error
|
||||
return ECC_CHECK_FAILED
|
||||
|
||||
def ecc_calculate_page(page):
|
||||
"""Return a list of the ECC codes for a PS2 memory card page."""
|
||||
return [ecc_calculate(page[i * 128 : i * 128 + 128])
|
||||
for i in range(div_round_up(len(page), 128))]
|
||||
|
||||
def ecc_check_page(page, spare):
|
||||
"Check and correct any single bit errors in a PS2 memory card page."
|
||||
|
||||
failed = False
|
||||
corrected = False
|
||||
|
||||
#chunks = [(array.array('B', page[i * 128 : i * 128 + 128]),
|
||||
# map(ord, spare[i * 3 : i * 3 + 3]))
|
||||
# for i in range(div_round_up(len(page), 128))]
|
||||
|
||||
chunks = []
|
||||
for i in range(div_round_up(len(page), 128)):
|
||||
a = array.array('B')
|
||||
a.fromstring(page[i * 128 : i * 128 + 128])
|
||||
chunks.append((a, map(ord, spare[i * 3 : i * 3 + 3])))
|
||||
|
||||
r = [ecc_check(s, ecc)
|
||||
for (s, ecc) in chunks]
|
||||
ret = ECC_CHECK_OK
|
||||
if ECC_CHECK_CORRECTED in r:
|
||||
# rebuild sector and spare from the corrected versions
|
||||
page = "".join([a[0].tostring()
|
||||
for a in chunks])
|
||||
spare = "".join([chr(a[1][i])
|
||||
for a in chunks
|
||||
for i in range(3)])
|
||||
ret = ECC_CHECK_CORRECTED
|
||||
if ECC_CHECK_FAILED in r:
|
||||
ret = ECC_CHECK_FAILED
|
||||
return (ret, page, spare)
|
||||
|
||||
if mymcsup == None:
|
||||
ecc_calculate = _ecc_calculate
|
||||
ecc_check = _ecc_check
|
||||
else:
|
||||
# _c_ubyte_p = ctypes.POINTER(ctypes.c_ubyte)
|
||||
def ecc_calculate(s):
|
||||
aecc = array.array('B', "\0\0\0")
|
||||
cecc = ctypes.c_ubyte.from_address(aecc.buffer_info()[0])
|
||||
mymcsup.ecc_calculate(s, len(s), cecc)
|
||||
return list(aecc)
|
||||
|
||||
def ecc_check(s, ecc):
|
||||
cs = ctypes.c_ubyte.from_address(s.buffer_info()[0])
|
||||
# print "%08X" % s.buffer_info()[0]
|
||||
aecc = array.array('B', ecc)
|
||||
cecc = ctypes.c_ubyte.from_address(aecc.buffer_info()[0])
|
||||
ret = mymcsup.ecc_check(cs, len(s), cecc)
|
||||
ecc[0] = aecc[0]
|
||||
ecc[1] = aecc[1]
|
||||
ecc[2] = aecc[2]
|
||||
return ret
|
||||
|
||||
|
1262
ps2save.py
1262
ps2save.py
File diff suppressed because it is too large
Load Diff
42
round.py
42
round.py
@ -1,21 +1,21 @@
|
||||
#
|
||||
# round.py
|
||||
#
|
||||
# By Ross Ridge
|
||||
# Public Domain
|
||||
#
|
||||
# Simple rounding functions.
|
||||
#
|
||||
|
||||
_SCCS_ID = "@(#) mysc round.py 1.3 07/04/17 02:10:27\n"
|
||||
|
||||
def div_round_up(a, b):
|
||||
return (a + b - 1) / b
|
||||
|
||||
def round_up(a, b):
|
||||
return (a + b - 1) / b * b
|
||||
|
||||
def round_down(a, b):
|
||||
return a / b * b
|
||||
|
||||
|
||||
#
|
||||
# round.py
|
||||
#
|
||||
# By Ross Ridge
|
||||
# Public Domain
|
||||
#
|
||||
# Simple rounding functions.
|
||||
#
|
||||
|
||||
_SCCS_ID = "@(#) mymc round.py 1.3 07/04/17 02:10:27\n"
|
||||
|
||||
def div_round_up(a, b):
|
||||
return (a + b - 1) / b
|
||||
|
||||
def round_up(a, b):
|
||||
return (a + b - 1) / b * b
|
||||
|
||||
def round_down(a, b):
|
||||
return a / b * b
|
||||
|
||||
|
||||
|
@ -1,2 +1,2 @@
|
||||
# automatically generated
|
||||
shift_jis_normalize_table = {u'\uff81': u'\u30c1', u'\u3000': u' ', u'\uff85': u'\u30ca', u'\uff06': u'&', u'\uff89': u'\u30ce', u'\uff0a': u'*', u'\uff8d': u'\u30d8', u'\uff0e': u'.', u'\uff91': u'\u30e0', u'\uff12': u'2', u'\uff95': u'\u30e6', u'\uff16': u'6', u'\uff99': u'\u30eb', u'\u309b': u' \u3099', u'\uff1a': u':', u'\uff9d': u'\u30f3', u'\uff03': u'#', u'\uff1e': u'>', u'\uff22': u'B', u'\uff26': u'F', u'\uff2a': u'J', u'\u222c': u'\u222b\u222b', u'\uff2e': u'N', u'\uff32': u'R', u'\uff36': u'V', u'\uff3a': u'Z', u'\uff3e': u'^', u'\uff42': u'b', u'\uff46': u'f', u'\uff4a': u'j', u'\uff4e': u'n', u'\uff52': u'r', u'\uff56': u'v', u'\uff5a': u'z', u'\uff62': u'\u300c', u'\uffe5': u'\xa5', u'\uff66': u'\u30f2', u'\uff6a': u'\u30a7', u'\uff6e': u'\u30e7', u'\uff72': u'\u30a4', u'\uff76': u'\u30ab', u'\uff7a': u'\u30b3', u'\uff7e': u'\u30bb', u'\uff01': u'!', u'\uff82': u'\u30c4', u'\uff05': u'%', u'\uff86': u'\u30cb', u'\uff09': u')', u'\uff8a': u'\u30cf', u'\uff8e': u'\u30db', u'\uff11': u'1', u'\uff92': u'\u30e1', u'\uff15': u'5', u'\uff96': u'\u30e8', u'\uff19': u'9', u'\uff9a': u'\u30ec', u'\uff1d': u'=', u'\u309c': u' \u309a', u'\uff9e': u'\u3099', u'\uff21': u'A', u'\uff25': u'E', u'\uff29': u'I', u'\xa8': u' \u0308', u'\uff2d': u'M', u'\uff31': u'Q', u'\u2033': u'\u2032\u2032', u'\uff35': u'U', u'\xb4': u' \u0301', u'\uff39': u'Y', u'\uff3d': u']', u'\uff41': u'a', u'\uff45': u'e', u'\uff49': u'i', u'\uff4d': u'm', u'\uff51': u'q', u'\uff55': u'u', u'\uff59': u'y', u'\uff5d': u'}', u'\uff61': u'\u3002', u'\uff65': u'\u30fb', u'\uff69': u'\u30a5', u'\uff6d': u'\u30e5', u'\uff71': u'\u30a2', u'\uff75': u'\u30aa', u'\uff79': u'\u30b1', u'\uff7d': u'\u30b9', u'\uff83': u'\u30c6', u'\uff04': u'$', u'\uff87': u'\u30cc', u'\uff08': u'(', u'\uff8b': u'\u30d2', u'\uff0c': u',', u'\uff8f': u'\u30de', u'\uff10': u'0', u'\uff93': u'\u30e2', u'\uff14': u'4', u'\uff97': u'\u30e9', u'\uff18': u'8', u'\uff9b': u'\u30ed', u'\uff1c': u'<', u'\uff9f': u'\u309a', u'\uff20': u'@', u'\uff24': u'D', u'\u2026': u'...', u'\uff28': u'H', u'\uff2c': u'L', u'\uff30': u'P', u'\uff34': u'T', u'\uff38': u'X', u'\uff3c': u'\\', u'\uff40': u'`', u'\uff44': u'd', u'\uff48': u'h', u'\uff4c': u'l', u'\uff50': u'p', u'\uff54': u't', u'\uff58': u'x', u'\uff5c': u'|', u'\uffe3': u' \u0304', u'\uff64': u'\u3001', u'\uff68': u'\u30a3', u'\uff6c': u'\u30e3', u'\uff70': u'\u30fc', u'\uff74': u'\u30a8', u'\uff78': u'\u30af', u'\uff7c': u'\u30b7', u'\uff80': u'\u30bf', u'\u2103': u'\xb0C', u'\uff84': u'\u30c8', u'\uff88': u'\u30cd', u'\uff0b': u'+', u'\uff8c': u'\u30d5', u'\uff0f': u'/', u'\uff90': u'\u30df', u'\uff13': u'3', u'\uff94': u'\u30e4', u'\uff17': u'7', u'\uff98': u'\u30ea', u'\uff1b': u';', u'\uff9c': u'\u30ef', u'\uff1f': u'?', u'\uff23': u'C', u'\u2025': u'..', u'\uff27': u'G', u'\u212b': u'\xc5', u'\uff2f': u'O', u'\uff33': u'S', u'\uff37': u'W', u'\uff3b': u'[', u'\uff3f': u'_', u'\uff43': u'c', u'\uff47': u'g', u'\uff4b': u'k', u'\uff4f': u'o', u'\uff53': u's', u'\uff57': u'w', u'\uff5b': u'{', u'\uff63': u'\u300d', u'\uff67': u'\u30a1', u'\uff6b': u'\u30a9', u'\uff6f': u'\u30c3', u'\uff73': u'\u30a6', u'\uff77': u'\u30ad', u'\uff7b': u'\u30b5', u'\uff2b': u'K', u'\uff7f': u'\u30bd'}
|
||||
# automatically generated
|
||||
shift_jis_normalize_table = {u'\uff81': u'\u30c1', u'\u3000': u' ', u'\uff85': u'\u30ca', u'\uff06': u'&', u'\uff89': u'\u30ce', u'\uff0a': u'*', u'\uff8d': u'\u30d8', u'\uff0e': u'.', u'\uff91': u'\u30e0', u'\uff12': u'2', u'\uff95': u'\u30e6', u'\uff16': u'6', u'\uff99': u'\u30eb', u'\u309b': u' \u3099', u'\uff1a': u':', u'\uff9d': u'\u30f3', u'\uff03': u'#', u'\uff1e': u'>', u'\uff22': u'B', u'\uff26': u'F', u'\uff2a': u'J', u'\u222c': u'\u222b\u222b', u'\uff2e': u'N', u'\uff32': u'R', u'\uff36': u'V', u'\uff3a': u'Z', u'\uff3e': u'^', u'\uff42': u'b', u'\uff46': u'f', u'\uff4a': u'j', u'\uff4e': u'n', u'\uff52': u'r', u'\uff56': u'v', u'\uff5a': u'z', u'\uff62': u'\u300c', u'\uffe5': u'\xa5', u'\uff66': u'\u30f2', u'\uff6a': u'\u30a7', u'\uff6e': u'\u30e7', u'\uff72': u'\u30a4', u'\uff76': u'\u30ab', u'\uff7a': u'\u30b3', u'\uff7e': u'\u30bb', u'\uff01': u'!', u'\uff82': u'\u30c4', u'\uff05': u'%', u'\uff86': u'\u30cb', u'\uff09': u')', u'\uff8a': u'\u30cf', u'\uff8e': u'\u30db', u'\uff11': u'1', u'\uff92': u'\u30e1', u'\uff15': u'5', u'\uff96': u'\u30e8', u'\uff19': u'9', u'\uff9a': u'\u30ec', u'\uff1d': u'=', u'\u309c': u' \u309a', u'\uff9e': u'\u3099', u'\uff21': u'A', u'\uff25': u'E', u'\uff29': u'I', u'\xa8': u' \u0308', u'\uff2d': u'M', u'\uff31': u'Q', u'\u2033': u'\u2032\u2032', u'\uff35': u'U', u'\xb4': u' \u0301', u'\uff39': u'Y', u'\uff3d': u']', u'\uff41': u'a', u'\uff45': u'e', u'\uff49': u'i', u'\uff4d': u'm', u'\uff51': u'q', u'\uff55': u'u', u'\uff59': u'y', u'\uff5d': u'}', u'\uff61': u'\u3002', u'\uff65': u'\u30fb', u'\uff69': u'\u30a5', u'\uff6d': u'\u30e5', u'\uff71': u'\u30a2', u'\uff75': u'\u30aa', u'\uff79': u'\u30b1', u'\uff7d': u'\u30b9', u'\uff83': u'\u30c6', u'\uff04': u'$', u'\uff87': u'\u30cc', u'\uff08': u'(', u'\uff8b': u'\u30d2', u'\uff0c': u',', u'\uff8f': u'\u30de', u'\uff10': u'0', u'\uff93': u'\u30e2', u'\uff14': u'4', u'\uff97': u'\u30e9', u'\uff18': u'8', u'\uff9b': u'\u30ed', u'\uff1c': u'<', u'\uff9f': u'\u309a', u'\uff20': u'@', u'\uff24': u'D', u'\u2026': u'...', u'\uff28': u'H', u'\uff2c': u'L', u'\uff30': u'P', u'\uff34': u'T', u'\uff38': u'X', u'\uff3c': u'\\', u'\uff40': u'`', u'\uff44': u'd', u'\uff48': u'h', u'\uff4c': u'l', u'\uff50': u'p', u'\uff54': u't', u'\uff58': u'x', u'\uff5c': u'|', u'\uffe3': u' \u0304', u'\uff64': u'\u3001', u'\uff68': u'\u30a3', u'\uff6c': u'\u30e3', u'\uff70': u'\u30fc', u'\uff74': u'\u30a8', u'\uff78': u'\u30af', u'\uff7c': u'\u30b7', u'\uff80': u'\u30bf', u'\u2103': u'\xb0C', u'\uff84': u'\u30c8', u'\uff88': u'\u30cd', u'\uff0b': u'+', u'\uff8c': u'\u30d5', u'\uff0f': u'/', u'\uff90': u'\u30df', u'\uff13': u'3', u'\uff94': u'\u30e4', u'\uff17': u'7', u'\uff98': u'\u30ea', u'\uff1b': u';', u'\uff9c': u'\u30ef', u'\uff1f': u'?', u'\uff23': u'C', u'\u2025': u'..', u'\uff27': u'G', u'\u212b': u'\xc5', u'\uff2f': u'O', u'\uff33': u'S', u'\uff37': u'W', u'\uff3b': u'[', u'\uff3f': u'_', u'\uff43': u'c', u'\uff47': u'g', u'\uff4b': u'k', u'\uff4f': u'o', u'\uff53': u's', u'\uff57': u'w', u'\uff5b': u'{', u'\uff63': u'\u300d', u'\uff67': u'\u30a1', u'\uff6b': u'\u30a9', u'\uff6f': u'\u30c3', u'\uff73': u'\u30a6', u'\uff77': u'\u30ad', u'\uff7b': u'\u30b5', u'\uff2b': u'K', u'\uff7f': u'\u30bd'}
|
||||
|
@ -1,2 +1,2 @@
|
||||
MYMC_VERSION_BUILD = r'''6'''
|
||||
MYMC_VERSION_MAJOR = r'''2'''
|
||||
MYMC_VERSION_BUILD = r'''7'''
|
||||
MYMC_VERSION_MAJOR = r'''2'''
|
||||
|
Loading…
Reference in New Issue
Block a user